mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-08 21:32:39 +00:00
Remember to update live-in lists when coalescing physregs.
Patch by M Wahab! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95668 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8addca2f3a
commit
00350dbd71
@ -1755,6 +1755,23 @@ bool SimpleRegisterCoalescing::JoinCopy(CopyRec &TheCopy, bool &Again) {
|
|||||||
|
|
||||||
UpdateRegDefsUses(SrcReg, DstReg, SubIdx);
|
UpdateRegDefsUses(SrcReg, DstReg, SubIdx);
|
||||||
|
|
||||||
|
// If we have extended the live range of a physical register, make sure we
|
||||||
|
// update live-in lists as well.
|
||||||
|
if (TargetRegisterInfo::isPhysicalRegister(DstReg)) {
|
||||||
|
const LiveInterval &VRegInterval = li_->getInterval(SrcReg);
|
||||||
|
SmallVector<MachineBasicBlock*, 16> BlockSeq;
|
||||||
|
for (LiveInterval::const_iterator I = VRegInterval.begin(),
|
||||||
|
E = VRegInterval.end(); I != E; ++I ) {
|
||||||
|
li_->findLiveInMBBs(I->start, I->end, BlockSeq);
|
||||||
|
for (unsigned idx = 0, size = BlockSeq.size(); idx != size; ++idx) {
|
||||||
|
MachineBasicBlock &block = *BlockSeq[idx];
|
||||||
|
if (!block.isLiveIn(DstReg))
|
||||||
|
block.addLiveIn(DstReg);
|
||||||
|
}
|
||||||
|
BlockSeq.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// SrcReg is guarateed to be the register whose live interval that is
|
// SrcReg is guarateed to be the register whose live interval that is
|
||||||
// being merged.
|
// being merged.
|
||||||
li_->removeInterval(SrcReg);
|
li_->removeInterval(SrcReg);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user