mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-21 18:29:46 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79096 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
4af85b2328
commit
d62c9a697b
@ -214,8 +214,6 @@ void PEI::calculateCalleeSavedRegisters(MachineFunction &Fn) {
|
||||
}
|
||||
}
|
||||
|
||||
FFI->setCalleeSavedInfoValid(true);
|
||||
|
||||
if (CSI.empty())
|
||||
return; // Early exit if no callee saved registers are modified!
|
||||
|
||||
@ -274,6 +272,8 @@ void PEI::insertCSRSpillsAndRestores(MachineFunction &Fn) {
|
||||
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;
|
||||
|
10
test/CodeGen/ARM/2009-08-15-RegScavengerAssert.ll
Normal file
10
test/CodeGen/ARM/2009-08-15-RegScavengerAssert.ll
Normal file
@ -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
|
Loading…
Reference in New Issue
Block a user