mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-24 23:28:41 +00:00
Slightly change the meaning of the reMaterialize target hook when the original
instruction defines subregisters. Any existing subreg indices on the original instruction are preserved or composed with the new subreg index. Also substitute multiple operands mentioning the original register by using the new MachineInstr::substituteRegister() function. This is necessary because there will soon be <imp-def> operands added to non read-modify-write partial definitions. This instruction: %reg1234:foo = FLAP %reg1234<imp-def> will reMaterialize(%reg3333, bar) like this: %reg3333:bar-foo = FLAP %reg333:bar<imp-def> Finally, replace the TargetRegisterInfo pointer argument with a reference to indicate that it cannot be NULL. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@105358 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1037,6 +1037,29 @@ void MachineInstr::copyPredicates(const MachineInstr *MI) {
|
||||
}
|
||||
}
|
||||
|
||||
void MachineInstr::substituteRegister(unsigned FromReg,
|
||||
unsigned ToReg,
|
||||
unsigned SubIdx,
|
||||
const TargetRegisterInfo &RegInfo) {
|
||||
if (TargetRegisterInfo::isPhysicalRegister(ToReg)) {
|
||||
if (SubIdx)
|
||||
ToReg = RegInfo.getSubReg(ToReg, SubIdx);
|
||||
for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
|
||||
MachineOperand &MO = getOperand(i);
|
||||
if (!MO.isReg() || MO.getReg() != FromReg)
|
||||
continue;
|
||||
MO.substPhysReg(ToReg, RegInfo);
|
||||
}
|
||||
} else {
|
||||
for (unsigned i = 0, e = getNumOperands(); i != e; ++i) {
|
||||
MachineOperand &MO = getOperand(i);
|
||||
if (!MO.isReg() || MO.getReg() != FromReg)
|
||||
continue;
|
||||
MO.substVirtReg(ToReg, SubIdx, RegInfo);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// isSafeToMove - Return true if it is safe to move this instruction. If
|
||||
/// SawStore is set to true, it means that there is a store (or call) between
|
||||
/// the instruction's location and its intended destination.
|
||||
|
Reference in New Issue
Block a user