Remove some uneeded pseudos in the presence of the naked function attribute.
authorReed Kotler <rkotler@mips.com>
Fri, 3 May 2013 23:17:24 +0000 (23:17 +0000)
committerReed Kotler <rkotler@mips.com>
Fri, 3 May 2013 23:17:24 +0000 (23:17 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181072 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Mips/MipsAsmPrinter.cpp
test/CodeGen/Mips/tnaked.ll [new file with mode: 0644]

index f4f71cbccb2f628118b92ecd64a52299999f5992..6e4feda4f5314381e1cf832a4fe9d983ea481e45 100644 (file)
@@ -249,12 +249,18 @@ void MipsAsmPrinter::EmitFunctionEntryLabel() {
 void MipsAsmPrinter::EmitFunctionBodyStart() {
   MCInstLowering.Initialize(Mang, &MF->getContext());
 
-  emitFrameDirective();
+  bool IsNakedFunction =
+    MF->getFunction()->
+      getAttributes().hasAttribute(AttributeSet::FunctionIndex,
+                                   Attribute::Naked);
+  if (!IsNakedFunction)
+    emitFrameDirective();
 
   if (OutStreamer.hasRawTextSupport()) {
     SmallString<128> Str;
     raw_svector_ostream OS(Str);
-    printSavedRegsBitmask(OS);
+    if (!IsNakedFunction)
+      printSavedRegsBitmask(OS);
     OutStreamer.EmitRawText(OS.str());
     if (!Subtarget->inMips16Mode()) {
       OutStreamer.EmitRawText(StringRef("\t.set\tnoreorder"));
diff --git a/test/CodeGen/Mips/tnaked.ll b/test/CodeGen/Mips/tnaked.ll
new file mode 100644 (file)
index 0000000..f5bdd91
--- /dev/null
@@ -0,0 +1,29 @@
+; RUN: llc -march=mipsel < %s | FileCheck %s
+
+
+define void @tnaked() #0 {
+entry:
+  ret void
+}
+
+; CHECK:       .ent    tnaked
+; CHECK:          tnaked: 
+; CHECK-NOT:   .frame  {{.*}}
+; CHECK-NOT:     .mask         {{.*}}
+; CHECK-NOT:   .fmask  {{.*}}
+; CHECK-NOT:    addiu  $sp, $sp, -8
+
+define void @tnonaked() #1 {
+entry:
+  ret void
+}
+
+; CHECK:       .ent    tnonaked
+; CHECK:         tnonaked: 
+; CHECK:       .frame  $fp,8,$ra
+; CHECK:        .mask  0x40000000,-4
+; CHECK:       .fmask  0x00000000,0
+; CHECK:       addiu   $sp, $sp, -8
+
+attributes #0 = { naked noinline nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }
+attributes #1 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf"="true" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }