mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-03 13:31:05 +00:00
Use the same spill slot for all live ranges that descend form the same original
register. This avoids some silly stack slot shuffling when both sides of a copy get spilled. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@126353 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
fae7f6de9e
commit
b2597268c2
@ -345,7 +345,8 @@ void InlineSpiller::spill(LiveRangeEdit &edit) {
|
||||
&& "Trying to spill a stack slot.");
|
||||
DEBUG(dbgs() << "Inline spilling "
|
||||
<< mri_.getRegClass(edit.getReg())->getName()
|
||||
<< ':' << edit.getParent() << "\n");
|
||||
<< ':' << edit.getParent() << "\nFrom original "
|
||||
<< PrintReg(vrm_.getOriginal(edit.getReg())) << '\n');
|
||||
assert(edit.getParent().isSpillable() &&
|
||||
"Attempting to spill already spilled value.");
|
||||
|
||||
@ -356,12 +357,20 @@ void InlineSpiller::spill(LiveRangeEdit &edit) {
|
||||
return;
|
||||
|
||||
rc_ = mri_.getRegClass(edit.getReg());
|
||||
stackSlot_ = vrm_.assignVirt2StackSlot(edit_->getReg());
|
||||
|
||||
// Share a stack slot among all descendants of Orig.
|
||||
unsigned Orig = vrm_.getOriginal(edit.getReg());
|
||||
stackSlot_ = vrm_.getStackSlot(Orig);
|
||||
if (stackSlot_ == VirtRegMap::NO_STACK_SLOT)
|
||||
stackSlot_ = vrm_.assignVirt2StackSlot(Orig);
|
||||
|
||||
if (Orig != edit.getReg())
|
||||
vrm_.assignVirt2StackSlot(edit.getReg(), stackSlot_);
|
||||
|
||||
// Update LiveStacks now that we are committed to spilling.
|
||||
LiveInterval &stacklvr = lss_.getOrCreateInterval(stackSlot_, rc_);
|
||||
assert(stacklvr.empty() && "Just created stack slot not empty");
|
||||
stacklvr.getNextValue(SlotIndex(), 0, lss_.getVNInfoAllocator());
|
||||
if (!stacklvr.hasAtLeastOneValue())
|
||||
stacklvr.getNextValue(SlotIndex(), 0, lss_.getVNInfoAllocator());
|
||||
stacklvr.MergeRangesInAsValue(edit_->getParent(), stacklvr.getValNumInfo(0));
|
||||
|
||||
// Iterate over instructions using register.
|
||||
|
Loading…
Reference in New Issue
Block a user