diff options
author | Evan Cheng <evan.cheng@apple.com> | 2007-05-01 09:01:42 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2007-05-01 09:01:42 +0000 |
commit | 8e3347332120956538a6d882b02719e34b57f0cd (patch) | |
tree | b5851c0e55d87fd189c6db1eb2795551e6189083 /lib/CodeGen/RegisterScavenging.cpp | |
parent | a09f0d4ab76725827d1c4e737b99ff15ba454cbc (diff) |
If call frame is not part of stack frame and no dynamic alloc, eliminateFrameIndex() must adjust SP offset with size of call frames.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36625 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/RegisterScavenging.cpp')
-rw-r--r-- | lib/CodeGen/RegisterScavenging.cpp | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/lib/CodeGen/RegisterScavenging.cpp b/lib/CodeGen/RegisterScavenging.cpp index 93c63bf1ac..1555a63727 100644 --- a/lib/CodeGen/RegisterScavenging.cpp +++ b/lib/CodeGen/RegisterScavenging.cpp @@ -75,7 +75,7 @@ void RegScavenger::restoreScavengedReg() { RegInfo->loadRegFromStackSlot(*MBB, MBBI, ScavengedReg, ScavengingFrameIndex, ScavengedRC); MachineBasicBlock::iterator II = prior(MBBI); - RegInfo->eliminateFrameIndex(II, this); + RegInfo->eliminateFrameIndex(II, 0, this); setUsed(ScavengedReg); ScavengedReg = 0; ScavengedRC = NULL; @@ -243,7 +243,8 @@ static unsigned calcDistanceToUse(MachineBasicBlock *MBB, } unsigned RegScavenger::scavengeRegister(const TargetRegisterClass *RC, - MachineBasicBlock::iterator I) { + MachineBasicBlock::iterator I, + int SPAdj) { assert(ScavengingFrameIndex >= 0 && "Cannot scavenge a register without an emergency spill slot!"); @@ -277,12 +278,12 @@ unsigned RegScavenger::scavengeRegister(const TargetRegisterClass *RC, RegInfo->loadRegFromStackSlot(*MBB, I, ScavengedReg, ScavengingFrameIndex, ScavengedRC); MachineBasicBlock::iterator II = prior(I); - RegInfo->eliminateFrameIndex(II, this); + RegInfo->eliminateFrameIndex(II, SPAdj, this); } RegInfo->storeRegToStackSlot(*MBB, I, SReg, ScavengingFrameIndex, RC); MachineBasicBlock::iterator II = prior(I); - RegInfo->eliminateFrameIndex(II, this); + RegInfo->eliminateFrameIndex(II, SPAdj, this); ScavengedReg = SReg; ScavengedRC = RC; |