mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-27 04:18:42 +00:00
Approved by Evan:
$ svn merge -c 113299 https://llvm.org/svn/llvm-project/llvm/trunk --- Merging r113299 into '.': U lib/CodeGen/VirtRegRewriter.cpp git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_28@113531 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
1 parent
aa917ca288
commit
587f6ed686
1 file changed
+8
-15
@@ -67,23 +67,16 @@ VirtRegRewriter::~VirtRegRewriter() {}
|
||||
/// Note that operands may be added, so the MO reference is no longer valid.
|
||||
static void substitutePhysReg(MachineOperand &MO, unsigned Reg,
|
||||
const TargetRegisterInfo &TRI) {
|
||||
if (unsigned SubIdx = MO.getSubReg()) {
|
||||
// Insert the physical subreg and reset the subreg field.
|
||||
MO.setReg(TRI.getSubReg(Reg, SubIdx));
|
||||
MO.setSubReg(0);
|
||||
if (MO.getSubReg()) {
|
||||
MO.substPhysReg(Reg, TRI);
|
||||
|
||||
// Any def, dead, and kill flags apply to the full virtual register, so they
|
||||
// also apply to the full physical register. Add imp-def/dead and imp-kill
|
||||
// as needed.
|
||||
// Any kill flags apply to the full virtual register, so they also apply to
|
||||
// the full physical register.
|
||||
// We assume that partial defs have already been decorated with a super-reg
|
||||
// <imp-def> operand by LiveIntervals.
|
||||
MachineInstr &MI = *MO.getParent();
|
||||
if (MO.isDef())
|
||||
if (MO.isDead())
|
||||
MI.addRegisterDead(Reg, &TRI, /*AddIfNotFound=*/ true);
|
||||
else
|
||||
MI.addRegisterDefined(Reg, &TRI);
|
||||
else if (!MO.isUndef() &&
|
||||
(MO.isKill() ||
|
||||
MI.isRegTiedToDefOperand(&MO-&MI.getOperand(0))))
|
||||
if (MO.isUse() && !MO.isUndef() &&
|
||||
(MO.isKill() || MI.isRegTiedToDefOperand(&MO-&MI.getOperand(0))))
|
||||
MI.addRegisterKilled(Reg, &TRI, /*AddIfNotFound=*/ true);
|
||||
} else {
|
||||
MO.setReg(Reg);
|
||||
|
||||
Reference in new issue
Block a user