mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-01 09:18:30 +00:00
Constrain register classes in TailDup.
When rewriting operands, make sure the new registers have a compatible register class. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157163 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
92d63ccfc7
commit
0fda545c2c
@ -272,8 +272,8 @@ TailDuplicatePass::TailDuplicateAndUpdate(MachineBasicBlock *MBB,
|
||||
continue;
|
||||
unsigned Dst = Copy->getOperand(0).getReg();
|
||||
unsigned Src = Copy->getOperand(1).getReg();
|
||||
MachineRegisterInfo::use_iterator UI = MRI->use_begin(Src);
|
||||
if (++UI == MRI->use_end()) {
|
||||
if (MRI->hasOneNonDBGUse(Src) &&
|
||||
MRI->constrainRegClass(Src, MRI->getRegClass(Dst))) {
|
||||
// Copy is the only use. Do trivial copy propagation here.
|
||||
MRI->replaceRegWith(Dst, Src);
|
||||
Copy->eraseFromParent();
|
||||
@ -429,8 +429,10 @@ void TailDuplicatePass::DuplicateInstruction(MachineInstr *MI,
|
||||
AddSSAUpdateEntry(Reg, NewReg, PredBB);
|
||||
} else {
|
||||
DenseMap<unsigned, unsigned>::iterator VI = LocalVRMap.find(Reg);
|
||||
if (VI != LocalVRMap.end())
|
||||
if (VI != LocalVRMap.end()) {
|
||||
MO.setReg(VI->second);
|
||||
MRI->constrainRegClass(VI->second, MRI->getRegClass(Reg));
|
||||
}
|
||||
}
|
||||
}
|
||||
PredBB->insert(PredBB->instr_end(), NewMI);
|
||||
|
Loading…
Reference in New Issue
Block a user