summaryrefslogtreecommitdiff
path: root/lib/CodeGen/StackColoring.cpp
diff options
context:
space:
mode:
authorNadav Rotem <nrotem@apple.com>2012-09-10 08:44:15 +0000
committerNadav Rotem <nrotem@apple.com>2012-09-10 08:44:15 +0000
commit0aa52ee04e3060974474f6b3f824517c088f07d8 (patch)
tree054fd806621a5b0fcb063532a09fb9e7d6c6fcfb /lib/CodeGen/StackColoring.cpp
parent9a2ae00c85c553108f3d57b134f0aceef5ae3372 (diff)
downloadllvm-0aa52ee04e3060974474f6b3f824517c088f07d8.tar.gz
llvm-0aa52ee04e3060974474f6b3f824517c088f07d8.tar.bz2
llvm-0aa52ee04e3060974474f6b3f824517c088f07d8.tar.xz
Add an assertion that the frame index is indeed inside the declared lifetime region.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@163495 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/StackColoring.cpp')
-rw-r--r--lib/CodeGen/StackColoring.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/CodeGen/StackColoring.cpp b/lib/CodeGen/StackColoring.cpp
index e1fc52d662..9d807bbdd8 100644
--- a/lib/CodeGen/StackColoring.cpp
+++ b/lib/CodeGen/StackColoring.cpp
@@ -454,6 +454,11 @@ void StackColoring::remapInstructions(DenseMap<int, int> &SlotRemap) {
for (BB = MF->begin(), BBE = MF->end(); BB != BBE; ++BB)
for (I = BB->begin(), IE = BB->end(); I != IE; ++I) {
+ // Skip lifetime markers. We'll remove them soon.
+ if (I->getOpcode() == TargetOpcode::LIFETIME_START ||
+ I->getOpcode() == TargetOpcode::LIFETIME_END)
+ continue;
+
// Update the MachineMemOperand to use the new alloca.
for (MachineInstr::mmo_iterator MM = I->memoperands_begin(),
E = I->memoperands_end(); MM != E; ++MM) {
@@ -491,6 +496,17 @@ void StackColoring::remapInstructions(DenseMap<int, int> &SlotRemap) {
if (!SlotRemap.count(FromSlot))
continue;
+ // In a debug build, check that the instruction that we are check is
+ // inside its expected live range. If the instruction is not inside
+ // the calculated range then it means that the alloca usage moved
+ // outside of the lifetime markers.
+#ifndef NDEBUG
+ SlotIndex Index = Indexes->getInstructionIndex(I);
+ LiveInterval* Interval = Intervals[FromSlot];
+ assert(Interval->find(Index) != Interval->end() &&
+ "Found instruction usage outside of live range.");
+#endif
+
// Fix the machine instructions.
int ToSlot = SlotRemap[FromSlot];
MO.setIndex(ToSlot);