diff options
| author | Vikram S. Adve <vadve@cs.uiuc.edu> | 2003-05-31 07:39:06 +0000 |
|---|---|---|
| committer | Vikram S. Adve <vadve@cs.uiuc.edu> | 2003-05-31 07:39:06 +0000 |
| commit | c4688821556f607c544018e24d3b44bb0c8eeeba (patch) | |
| tree | 9d98f94df040fbac443b942778da75d611477acb /llvm/lib/CodeGen/MachineInstr.cpp | |
| parent | 465f9b6738ff0659a89b07c1d88654a37fc1e9d1 (diff) | |
| download | bcm5719-llvm-c4688821556f607c544018e24d3b44bb0c8eeeba.tar.gz bcm5719-llvm-c4688821556f607c544018e24d3b44bb0c8eeeba.zip | |
Allow explicit physical registers for implicit operands.
llvm-svn: 6468
Diffstat (limited to 'llvm/lib/CodeGen/MachineInstr.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/MachineInstr.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/llvm/lib/CodeGen/MachineInstr.cpp b/llvm/lib/CodeGen/MachineInstr.cpp index a7a6988fccf..ffb2ae9c4e0 100644 --- a/llvm/lib/CodeGen/MachineInstr.cpp +++ b/llvm/lib/CodeGen/MachineInstr.cpp @@ -23,6 +23,7 @@ extern const TargetInstrDescriptor *TargetInstrDescriptors; // Constructor for instructions with variable #operands MachineInstr::MachineInstr(MachineOpCode OpCode, unsigned numOperands) : opCode(OpCode), + opCodeFlags(0), operands(numOperands, MachineOperand()), numImplicitRefs(0) { @@ -36,6 +37,7 @@ MachineInstr::MachineInstr(MachineOpCode OpCode, unsigned numOperands) MachineInstr::MachineInstr(MachineOpCode Opcode, unsigned numOperands, bool XX, bool YY) : opCode(Opcode), + opCodeFlags(0), numImplicitRefs(0) { operands.reserve(numOperands); @@ -47,6 +49,7 @@ MachineInstr::MachineInstr(MachineOpCode Opcode, unsigned numOperands, MachineInstr::MachineInstr(MachineBasicBlock *MBB, MachineOpCode Opcode, unsigned numOperands) : opCode(Opcode), + opCodeFlags(0), numImplicitRefs(0) { assert(MBB && "Cannot use inserting ctor with null basic block!"); @@ -60,7 +63,7 @@ bool MachineInstr::OperandsComplete() const { int NumOperands = TargetInstrDescriptors[opCode].numOperands; if (NumOperands >= 0 && getNumOperands() >= (unsigned)NumOperands) - return true; // Broken! + return true; // Broken: we have all the operands of this instruction! return false; } @@ -141,6 +144,13 @@ MachineInstr::SetRegForOperand(unsigned i, int regNum) insertUsedReg(regNum); } +void +MachineInstr::SetRegForImplicitRef(unsigned i, int regNum) +{ + getImplicitOp(i).setRegForValue(regNum); + insertUsedReg(regNum); +} + // Subsitute all occurrences of Value* oldVal with newVal in all operands // and all implicit refs. If defsOnly == true, substitute defs only. |

