[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