[llvm-commits] [llvm] r79096 - in /llvm/trunk: lib/CodeGen/PrologEpilogInserter.cpp test/CodeGen/ARM/2009-08-15-RegScavengerAssert.ll

Jakob Stoklund Olesen stoklund at 2pi.dk
Sat Aug 15 06:10:46 PDT 2009


Author: stoklund
Date: Sat Aug 15 08:10:46 2009
New Revision: 79096

URL: http://llvm.org/viewvc/llvm-project?rev=79096&view=rev
Log:
Don't setCalleeSavedInfoValid() until spills are interted.

In a naked function, the flag is never set and getPristineRegs() returns an
empty list. That means naked functions are able to clobber callee saved
registers, but that is the whole point of naked functions.

This fixes PR4716.

Added:
    llvm/trunk/test/CodeGen/ARM/2009-08-15-RegScavengerAssert.ll
Modified:
    llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp

Modified: llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp?rev=79096&r1=79095&r2=79096&view=diff

==============================================================================
--- llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp (original)
+++ llvm/trunk/lib/CodeGen/PrologEpilogInserter.cpp Sat Aug 15 08:10:46 2009
@@ -214,8 +214,6 @@
     }
   }
 
-  FFI->setCalleeSavedInfoValid(true);
-
   if (CSI.empty())
     return;   // Early exit if no callee saved registers are modified!
 
@@ -274,6 +272,8 @@
   MachineFrameInfo *FFI = Fn.getFrameInfo();
   const std::vector<CalleeSavedInfo> &CSI = FFI->getCalleeSavedInfo();
 
+  FFI->setCalleeSavedInfoValid(true);
+
   // Early exit if no callee saved registers are modified!
   if (CSI.empty())
     return;

Added: llvm/trunk/test/CodeGen/ARM/2009-08-15-RegScavengerAssert.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/ARM/2009-08-15-RegScavengerAssert.ll?rev=79096&view=auto

==============================================================================
--- llvm/trunk/test/CodeGen/ARM/2009-08-15-RegScavengerAssert.ll (added)
+++ llvm/trunk/test/CodeGen/ARM/2009-08-15-RegScavengerAssert.ll Sat Aug 15 08:10:46 2009
@@ -0,0 +1,10 @@
+; RUN: llvm-as < %s | llc -march=arm
+; PR4716
+
+define arm_aapcscc void @_start() nounwind naked {
+entry:
+  tail call arm_aapcscc  void @exit(i32 undef) noreturn nounwind
+  unreachable
+}
+
+declare arm_aapcscc void @exit(i32) noreturn nounwind





More information about the llvm-commits mailing list