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:
parent
0be6b8030f
commit
0077e2b8d5
@ -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";
|
||||
|
||||
|
39
test/CodeGen/Mips/micromips-attr.ll
Normal file
39
test/CodeGen/Mips/micromips-attr.ll
Normal 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"
|
||||
}
|
Loading…
Reference in New Issue
Block a user