Fix a potential serious problem where kills belonging to the val# defined by a two...
authorEvan Cheng <evan.cheng@apple.com>
Wed, 13 Feb 2008 09:06:18 +0000 (09:06 +0000)
committerEvan Cheng <evan.cheng@apple.com>
Wed, 13 Feb 2008 09:06:18 +0000 (09:06 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47057 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/LiveIntervalAnalysis.cpp

index 43a092a4df22b2bf4ce2ea2a5bf36f6f7370c2e7..d32fc623795988d7ab0dcdcb3b06905a2477dcb7 100644 (file)
@@ -315,7 +315,6 @@ void LiveIntervals::handleVirtualRegisterDef(MachineBasicBlock *mbb,
 
       const LiveRange *OldLR = interval.getLiveRangeContaining(RedefIndex-1);
       VNInfo *OldValNo = OldLR->valno;
-      unsigned OldEnd = OldLR->end;
 
       // Delete the initial value, which should be short and continuous,
       // because the 2-addr copy must be in the same MBB as the redef.
@@ -328,7 +327,8 @@ void LiveIntervals::handleVirtualRegisterDef(MachineBasicBlock *mbb,
       // The new value number (#1) is defined by the instruction we claimed
       // defined value #0.
       VNInfo *ValNo = interval.getNextValue(0, 0, VNInfoAllocator);
-      interval.copyValNumInfo(ValNo, OldValNo);
+      ValNo->def = OldValNo->def;
+      ValNo->reg = OldValNo->reg;
       
       // Value#0 is now defined by the 2-addr instruction.
       OldValNo->def = RedefIndex;
@@ -339,7 +339,6 @@ void LiveIntervals::handleVirtualRegisterDef(MachineBasicBlock *mbb,
       DOUT << " replace range with " << LR;
       interval.addRange(LR);
       interval.addKill(ValNo, RedefIndex);
-      interval.removeKills(ValNo, RedefIndex, OldEnd);
 
       // If this redefinition is dead, we need to add a dummy unit live
       // range covering the def slot.