1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 19:23:23 +01:00

[mips] Support micromips attribute passed by front-end

This patch adds handling of the `micromips` and `nomicromips` attributes
passed by front-end. The patch depends on D33363.

Differential revision: https://reviews.llvm.org/D33364

llvm-svn: 303545
This commit is contained in:
Simon Atanasyan 2017-05-22 12:47:41 +00:00
parent 0be6b8030f
commit 0077e2b8d5
2 changed files with 48 additions and 0 deletions

View File

@ -154,6 +154,11 @@ MipsTargetMachine::getSubtargetImpl(const Function &F) const {
bool hasNoMips16Attr =
!F.getFnAttribute("nomips16").hasAttribute(Attribute::None);
bool HasMicroMipsAttr =
!F.getFnAttribute("micromips").hasAttribute(Attribute::None);
bool HasNoMicroMipsAttr =
!F.getFnAttribute("nomicromips").hasAttribute(Attribute::None);
// FIXME: This is related to the code below to reset the target options,
// we need to know whether or not the soft float flag is set on the
// function, so we can enable it as a subtarget feature.
@ -165,6 +170,10 @@ MipsTargetMachine::getSubtargetImpl(const Function &F) const {
FS += FS.empty() ? "+mips16" : ",+mips16";
else if (hasNoMips16Attr)
FS += FS.empty() ? "-mips16" : ",-mips16";
if (HasMicroMipsAttr)
FS += FS.empty() ? "+micromips" : ",+micromips";
else if (HasNoMicroMipsAttr)
FS += FS.empty() ? "-micromips" : ",-micromips";
if (softFloat)
FS += FS.empty() ? "+soft-float" : ",+soft-float";

View File

@ -0,0 +1,39 @@
; RUN: llc -march=mips -mcpu=mips32 --mattr=-micromips < %s | FileCheck %s
define void @foo() #0 {
entry:
ret void
}
; CHECK: .set micromips
; CHECK-NEXT: .set nomips16
; CHECK-NEXT: .ent foo
; CHECK-NEXT: foo:
define void @bar() #1 {
entry:
ret void
}
; CHECK: .set nomicromips
; CHECK-NEXT: .set nomips16
; CHECK-NEXT: .ent bar
; CHECK-NEXT: bar:
attributes #0 = {
nounwind "micromips"
"correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false"
"less-precise-fpmad"="false" "no-frame-pointer-elim"="false"
"no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false"
"no-signed-zeros-fp-math"="false" "no-trapping-math"="false"
"stack-protector-buffer-size"="8" "unsafe-fp-math"="false"
"use-soft-float"="false"
}
attributes #1 = {
nounwind
"correctly-rounded-divide-sqrt-fp-math"="false" "disable-tail-calls"="false"
"less-precise-fpmad"="false" "no-frame-pointer-elim"="false"
"no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false"
"no-signed-zeros-fp-math"="false" "no-trapping-math"="false"
"stack-protector-buffer-size"="8" "unsafe-fp-math"="false"
"use-soft-float"="false"
}