diff options
author | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-02-03 20:29:36 +0000 |
---|---|---|
committer | Jakob Stoklund Olesen <stoklund@2pi.dk> | 2011-02-03 20:29:36 +0000 |
commit | 08eb8dd616bb4d4213f2ebda1de56b45bb88b6d9 (patch) | |
tree | 07ff3be3b0cfe134efde07608eef49a72c247164 /lib/CodeGen | |
parent | 207c868c9210663d401b7f5ce5cae7c3e0943849 (diff) | |
download | external_llvm-08eb8dd616bb4d4213f2ebda1de56b45bb88b6d9.zip external_llvm-08eb8dd616bb4d4213f2ebda1de56b45bb88b6d9.tar.gz external_llvm-08eb8dd616bb4d4213f2ebda1de56b45bb88b6d9.tar.bz2 |
Fix coloring bug when mapping values in the middle of a live-through block.
If the found value is not live-through the block, we should only add liveness up
to the requested slot index. When the value is live-through, the whole block
should be colored.
Bug found by SSA verification in the machine code verifier.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@124812 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/SplitKit.cpp | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/lib/CodeGen/SplitKit.cpp b/lib/CodeGen/SplitKit.cpp index a1c9ced..8bd6280 100644 --- a/lib/CodeGen/SplitKit.cpp +++ b/lib/CodeGen/SplitKit.cpp @@ -607,14 +607,14 @@ VNInfo *LiveIntervalMap::mapValue(const VNInfo *ParentVNI, SlotIndex Idx, for (unsigned i = 0, e = LiveIn.size(); i != e; ++i) { MachineBasicBlock *MBB = LiveIn[i]->getBlock(); SlotIndex Start = LIS.getMBBStartIdx(MBB); - if (MBB == IdxMBB) { - LI->addRange(LiveRange(Start, Idx.getNextSlot(), IdxVNI)); - continue; - } - // Anything in LiveIn other than IdxMBB is live-through. VNInfo *VNI = LiveOutCache.lookup(MBB).first; - assert(VNI && "Missing block value"); - LI->addRange(LiveRange(Start, LIS.getMBBEndIdx(MBB), VNI)); + + // Anything in LiveIn other than IdxMBB is live-through. + // In IdxMBB, we should stop at Idx unless the same value is live-out. + if (MBB == IdxMBB && IdxVNI != VNI) + LI->addRange(LiveRange(Start, Idx.getNextSlot(), IdxVNI)); + else + LI->addRange(LiveRange(Start, LIS.getMBBEndIdx(MBB), VNI)); } return IdxVNI; |