mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
Add an MF argument to MI::copyImplicitOps().
This function is often used to decorate dangling instructions, so a context reference is required to allocate memory for the operands. Also add a corresponding MachineInstrBuilder method. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@170797 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9500e5d07a
commit
be06aacaa9
@ -929,7 +929,7 @@ public:
|
|||||||
|
|
||||||
/// copyImplicitOps - Copy implicit register operands from specified
|
/// copyImplicitOps - Copy implicit register operands from specified
|
||||||
/// instruction to this instruction.
|
/// instruction to this instruction.
|
||||||
void copyImplicitOps(const MachineInstr *MI);
|
void copyImplicitOps(MachineFunction &MF, const MachineInstr *MI);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Debugging support
|
// Debugging support
|
||||||
|
@ -208,6 +208,12 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Copy all the implicit operands from OtherMI onto this one.
|
||||||
|
const MachineInstrBuilder ©ImplicitOps(const MachineInstr *OtherMI) {
|
||||||
|
MI->copyImplicitOps(*MF, OtherMI);
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/// BuildMI - Builder interface. Specify how to create the initial instruction
|
/// BuildMI - Builder interface. Specify how to create the initial instruction
|
||||||
|
@ -1403,12 +1403,13 @@ bool MachineInstr::allDefsAreDead() const {
|
|||||||
|
|
||||||
/// copyImplicitOps - Copy implicit register operands from specified
|
/// copyImplicitOps - Copy implicit register operands from specified
|
||||||
/// instruction to this instruction.
|
/// instruction to this instruction.
|
||||||
void MachineInstr::copyImplicitOps(const MachineInstr *MI) {
|
void MachineInstr::copyImplicitOps(MachineFunction &MF,
|
||||||
|
const MachineInstr *MI) {
|
||||||
for (unsigned i = MI->getDesc().getNumOperands(), e = MI->getNumOperands();
|
for (unsigned i = MI->getDesc().getNumOperands(), e = MI->getNumOperands();
|
||||||
i != e; ++i) {
|
i != e; ++i) {
|
||||||
const MachineOperand &MO = MI->getOperand(i);
|
const MachineOperand &MO = MI->getOperand(i);
|
||||||
if (MO.isReg() && MO.isImplicit())
|
if (MO.isReg() && MO.isImplicit())
|
||||||
addOperand(MO);
|
addOperand(MF, MO);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -696,7 +696,7 @@ void ARMFrameLowering::emitPopInst(MachineBasicBlock &MBB,
|
|||||||
for (unsigned i = 0, e = Regs.size(); i < e; ++i)
|
for (unsigned i = 0, e = Regs.size(); i < e; ++i)
|
||||||
MIB.addReg(Regs[i], getDefRegState(true));
|
MIB.addReg(Regs[i], getDefRegState(true));
|
||||||
if (DeleteRet) {
|
if (DeleteRet) {
|
||||||
MIB->copyImplicitOps(&*MI);
|
MIB.copyImplicitOps(&*MI);
|
||||||
MI->eraseFromParent();
|
MI->eraseFromParent();
|
||||||
}
|
}
|
||||||
MI = MIB;
|
MI = MIB;
|
||||||
|
@ -1408,7 +1408,7 @@ bool ARMLoadStoreOpt::MergeReturnIntoLDM(MachineBasicBlock &MBB) {
|
|||||||
Opcode == ARM::LDMIA_UPD) && "Unsupported multiple load-return!");
|
Opcode == ARM::LDMIA_UPD) && "Unsupported multiple load-return!");
|
||||||
PrevMI->setDesc(TII->get(NewOpc));
|
PrevMI->setDesc(TII->get(NewOpc));
|
||||||
MO.setReg(ARM::PC);
|
MO.setReg(ARM::PC);
|
||||||
PrevMI->copyImplicitOps(&*MBBI);
|
PrevMI->copyImplicitOps(*MBB.getParent(), &*MBBI);
|
||||||
MBB.erase(MBBI);
|
MBB.erase(MBBI);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -281,7 +281,7 @@ void Thumb1FrameLowering::emitEpilogue(MachineFunction &MF,
|
|||||||
BuildMI(MBB, MBBI, dl, TII.get(ARM::tBX_RET_vararg))
|
BuildMI(MBB, MBBI, dl, TII.get(ARM::tBX_RET_vararg))
|
||||||
.addReg(ARM::R3, RegState::Kill);
|
.addReg(ARM::R3, RegState::Kill);
|
||||||
AddDefaultPred(MIB);
|
AddDefaultPred(MIB);
|
||||||
MIB->copyImplicitOps(&*MBBI);
|
MIB.copyImplicitOps(&*MBBI);
|
||||||
// erase the old tBX_RET instruction
|
// erase the old tBX_RET instruction
|
||||||
MBB.erase(MBBI);
|
MBB.erase(MBBI);
|
||||||
}
|
}
|
||||||
@ -352,7 +352,7 @@ restoreCalleeSavedRegisters(MachineBasicBlock &MBB,
|
|||||||
continue;
|
continue;
|
||||||
Reg = ARM::PC;
|
Reg = ARM::PC;
|
||||||
(*MIB).setDesc(TII.get(ARM::tPOP_RET));
|
(*MIB).setDesc(TII.get(ARM::tPOP_RET));
|
||||||
MIB->copyImplicitOps(&*MI);
|
MIB.copyImplicitOps(&*MI);
|
||||||
MI = MBB.erase(MI);
|
MI = MBB.erase(MI);
|
||||||
}
|
}
|
||||||
MIB.addReg(Reg, getDefRegState(true));
|
MIB.addReg(Reg, getDefRegState(true));
|
||||||
|
@ -1138,7 +1138,7 @@ void X86FrameLowering::emitEpilogue(MachineFunction &MF,
|
|||||||
}
|
}
|
||||||
|
|
||||||
MachineInstr *NewMI = prior(MBBI);
|
MachineInstr *NewMI = prior(MBBI);
|
||||||
NewMI->copyImplicitOps(MBBI);
|
NewMI->copyImplicitOps(MF, MBBI);
|
||||||
|
|
||||||
// Delete the pseudo instruction TCRETURN.
|
// Delete the pseudo instruction TCRETURN.
|
||||||
MBB.erase(MBBI);
|
MBB.erase(MBBI);
|
||||||
|
Loading…
Reference in New Issue
Block a user