1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-23 19:23:23 +01:00

Properly compose subregister indices when coalescing.

The comment about ordering of subreg indices is no longer true.
This exposed a bug in the new substVirtReg method that is also fixed.

llvm-svn: 105294
This commit is contained in:
Jakob Stoklund Olesen 2010-06-01 22:39:25 +00:00
parent 909aafbacf
commit 98290734b0
2 changed files with 3 additions and 14 deletions

View File

@ -117,7 +117,8 @@ void MachineOperand::substVirtReg(unsigned Reg, unsigned SubIdx,
if (SubIdx && getSubReg())
SubIdx = TRI.composeSubRegIndices(SubIdx, getSubReg());
setReg(Reg);
setSubReg(SubIdx);
if (SubIdx)
setSubReg(SubIdx);
}
void MachineOperand::substPhysReg(unsigned Reg, const TargetRegisterInfo &TRI) {

View File

@ -848,19 +848,7 @@ SimpleRegisterCoalescing::UpdateRegDefsUses(unsigned SrcReg, unsigned DstReg,
continue;
}
// Sub-register indexes goes from small to large. e.g.
// RAX: 1 -> AL, 2 -> AX, 3 -> EAX
// EAX: 1 -> AL, 2 -> AX
// So RAX's sub-register 2 is AX, RAX's sub-regsiter 3 is EAX, whose
// sub-register 2 is also AX.
//
// FIXME: Properly compose subreg indices for all targets.
//
if (SubIdx && OldSubIdx && SubIdx != OldSubIdx)
;
else if (SubIdx)
O.setSubReg(SubIdx);
O.setReg(DstReg);
O.substVirtReg(DstReg, SubIdx, *tri_);
DEBUG({
dbgs() << "\t\tupdated: ";