forked from OSchip/llvm-project
Require the two-argument MI::addOperand(MF, MO) for dangling instructions.
Instructions that are inserted in a basic block can still be decorated with addOperand(MO). Make the two-argument addOperand() function contain the actual implementation. This function will now always have a valid MF reference that it can use for memory allocation. llvm-svn: 170798
This commit is contained in:
parent
33f5d1492d
commit
2455b58551
|
@ -940,19 +940,24 @@ public:
|
|||
//===--------------------------------------------------------------------===//
|
||||
// Accessors used to build up machine instructions.
|
||||
|
||||
/// addOperand - Add the specified operand to the instruction. If it is an
|
||||
/// implicit operand, it is added to the end of the operand list. If it is
|
||||
/// an explicit operand it is added at the end of the explicit operand list
|
||||
/// Add the specified operand to the instruction. If it is an implicit
|
||||
/// operand, it is added to the end of the operand list. If it is an
|
||||
/// explicit operand it is added at the end of the explicit operand list
|
||||
/// (before the first implicit operand).
|
||||
void addOperand(const MachineOperand &Op);
|
||||
///
|
||||
/// MF must be the machine function that was used to allocate this
|
||||
/// instruction.
|
||||
///
|
||||
/// MachineInstrBuilder provides a more convenient interface for creating
|
||||
/// instructions and adding operands.
|
||||
void addOperand(MachineFunction &MF, const MachineOperand &Op);
|
||||
|
||||
// Add an operand while providing a context pointer. This will replace the
|
||||
// single-argument function shortly.
|
||||
//
|
||||
// MF must be the machine function that was used to allocate this instruction.
|
||||
void addOperand(MachineFunction &MF, const MachineOperand &Op) {
|
||||
addOperand(Op);
|
||||
}
|
||||
/// Add an operand without providing an MF reference. This only works for
|
||||
/// instructions that are inserted in a basic block.
|
||||
///
|
||||
/// MachineInstrBuilder and the two-argument addOperand(MF, MO) should be
|
||||
/// preferred.
|
||||
void addOperand(const MachineOperand &Op);
|
||||
|
||||
/// setDesc - Replace the instruction descriptor (thus opcode) of
|
||||
/// the current instruction with a new one.
|
||||
|
|
|
@ -603,11 +603,19 @@ void MachineInstr::AddRegOperandsToUseLists(MachineRegisterInfo &MRI) {
|
|||
MRI.addRegOperandToUseList(&Operands[i]);
|
||||
}
|
||||
|
||||
void MachineInstr::addOperand(const MachineOperand &Op) {
|
||||
MachineBasicBlock *MBB = getParent();
|
||||
assert(MBB && "Use MachineInstrBuilder to add operands to dangling instrs");
|
||||
MachineFunction *MF = MBB->getParent();
|
||||
assert(MF && "Use MachineInstrBuilder to add operands to dangling instrs");
|
||||
addOperand(*MF, Op);
|
||||
}
|
||||
|
||||
/// addOperand - Add the specified operand to the instruction. If it is an
|
||||
/// implicit operand, it is added to the end of the operand list. If it is
|
||||
/// an explicit operand it is added at the end of the explicit operand list
|
||||
/// (before the first implicit operand).
|
||||
void MachineInstr::addOperand(const MachineOperand &Op) {
|
||||
void MachineInstr::addOperand(MachineFunction &MF, const MachineOperand &Op) {
|
||||
assert(MCID && "Cannot add operands before providing an instr descriptor");
|
||||
bool isImpReg = Op.isReg() && Op.isImplicit();
|
||||
MachineRegisterInfo *RegInfo = getRegInfo();
|
||||
|
|
Loading…
Reference in New Issue