mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-17 21:29:20 +00:00
Fix a potential serious problem where kills belonging to the val# defined by a two-address instruction is also on the val# that defines the input.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47057 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e35a6d1dfb
commit
e984e504b5
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user