diff options
author | Evan Cheng <evan.cheng@apple.com> | 2008-02-11 08:30:52 +0000 |
---|---|---|
committer | Evan Cheng <evan.cheng@apple.com> | 2008-02-11 08:30:52 +0000 |
commit | 431bfcbe3746d1a427b4c7791140f88882a8e8d8 (patch) | |
tree | a212e655729bcdd134fefebcbab1e4a850431c0a | |
parent | 786cb7e44639db56c2d5cd40279778ede2fc005c (diff) |
Determine whether a spill kills the register it's spilling before insertion rather than trying to undo the kill marker afterwards.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46953 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/RegAllocLocal.cpp | 11 | ||||
-rw-r--r-- | test/CodeGen/PowerPC/2008-02-09-LocalRegAllocAssert.ll | 10 |
2 files changed, 13 insertions, 8 deletions
diff --git a/lib/CodeGen/RegAllocLocal.cpp b/lib/CodeGen/RegAllocLocal.cpp index 12064a957c..b14af2761c 100644 --- a/lib/CodeGen/RegAllocLocal.cpp +++ b/lib/CodeGen/RegAllocLocal.cpp @@ -303,17 +303,12 @@ void RALocal::spillVirtReg(MachineBasicBlock &MBB, const TargetRegisterClass *RC = MF->getRegInfo().getRegClass(VirtReg); int FrameIndex = getStackSpaceFor(VirtReg, RC); DOUT << " to stack slot #" << FrameIndex; - TII->storeRegToStackSlot(MBB, I, PhysReg, true, FrameIndex, RC); - // If the instruction reads the register that's spilled, (e.g. this can // happen if it is a move to a physical register), then the spill // instruction is not a kill. - if (I != MBB.end() && I->findRegisterUseOperandIdx(PhysReg) != -1) { - MachineBasicBlock::iterator StoreMI = prior(I); - int Idx = StoreMI->findRegisterUseOperandIdx(PhysReg, true); - assert(Idx != -1 && "Unrecognized spill instruction!"); - StoreMI->getOperand(Idx).setIsKill(false); - } + bool isKill = !(I != MBB.end() && + I->findRegisterUseOperandIdx(PhysReg) != -1); + TII->storeRegToStackSlot(MBB, I, PhysReg, isKill, FrameIndex, RC); ++NumStores; // Update statistics } diff --git a/test/CodeGen/PowerPC/2008-02-09-LocalRegAllocAssert.ll b/test/CodeGen/PowerPC/2008-02-09-LocalRegAllocAssert.ll new file mode 100644 index 0000000000..5edf6b761f --- /dev/null +++ b/test/CodeGen/PowerPC/2008-02-09-LocalRegAllocAssert.ll @@ -0,0 +1,10 @@ +; RUN: llvm-as < %s | llc -mtriple=powerpc-apple-darwin -regalloc=local + +define i32 @bork(i64 %foo, i64 %bar) { +entry: + %tmp = load i64* null, align 8 ; <i64> [#uses=2] + %tmp2 = icmp ule i64 %tmp, 0 ; <i1> [#uses=1] + %min = select i1 %tmp2, i64 %tmp, i64 0 ; <i64> [#uses=1] + store i64 %min, i64* null, align 8 + ret i32 0 +} |