[llvm] r303545 - [mips] Support micromips attribute passed by front-end

Simon Atanasyan via llvm-commits llvm-commits at lists.llvm.org
Mon May 22 05:47:41 PDT 2017


Author: atanasyan
Date: Mon May 22 07:47:41 2017
New Revision: 303545

URL: http://llvm.org/viewvc/llvm-project?rev=303545&view=rev
Log:
[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

Added:
    llvm/trunk/test/CodeGen/Mips/micromips-attr.ll
Modified:
    llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp

Modified: llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp?rev=303545&r1=303544&r2=303545&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp (original)
+++ llvm/trunk/lib/Target/Mips/MipsTargetMachine.cpp Mon May 22 07:47:41 2017
@@ -154,6 +154,11 @@ MipsTargetMachine::getSubtargetImpl(cons
   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(cons
     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";
 

Added: llvm/trunk/test/CodeGen/Mips/micromips-attr.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Mips/micromips-attr.ll?rev=303545&view=auto
==============================================================================
--- llvm/trunk/test/CodeGen/Mips/micromips-attr.ll (added)
+++ llvm/trunk/test/CodeGen/Mips/micromips-attr.ll Mon May 22 07:47:41 2017
@@ -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"
+}




More information about the llvm-commits mailing list