diff options
-rw-r--r-- | include/llvm/CodeGen/MachineInstr.h | 5 | ||||
-rw-r--r-- | lib/CodeGen/MachineInstr.cpp | 13 |
2 files changed, 17 insertions, 1 deletions
diff --git a/include/llvm/CodeGen/MachineInstr.h b/include/llvm/CodeGen/MachineInstr.h index a26c61accc..79efe36fb4 100644 --- a/include/llvm/CodeGen/MachineInstr.h +++ b/include/llvm/CodeGen/MachineInstr.h @@ -217,6 +217,9 @@ public: public: /*ctor*/ MachineInstr (MachineOpCode _opCode, OpCodeMask _opCodeMask = 0x0); + /*ctor*/ MachineInstr (MachineOpCode _opCode, + unsigned numOperands, + OpCodeMask _opCodeMask = 0x0); inline ~MachineInstr () {} const MachineOpCode getOpCode () const; @@ -260,12 +263,14 @@ MachineInstr::getNumOperands() const inline MachineOperand& MachineInstr::getOperand(unsigned int i) { + assert(i < operands.size() && "getOperand() out of range!"); return operands[i]; } inline const MachineOperand& MachineInstr::getOperand(unsigned int i) const { + assert(i < operands.size() && "getOperand() out of range!"); return operands[i]; } diff --git a/lib/CodeGen/MachineInstr.cpp b/lib/CodeGen/MachineInstr.cpp index 64fcaa0577..d3e468cc2e 100644 --- a/lib/CodeGen/MachineInstr.cpp +++ b/lib/CodeGen/MachineInstr.cpp @@ -19,13 +19,24 @@ //************************ Class Implementations **************************/ - +// Constructor for instructions with fixed #operands (nearly all) MachineInstr::MachineInstr(MachineOpCode _opCode, OpCodeMask _opCodeMask) : opCode(_opCode), opCodeMask(_opCodeMask), operands(TargetInstrDescriptors[_opCode].numOperands) { + assert(TargetInstrDescriptors[_opCode].numOperands >= 0); +} + +// Constructor for instructions with variable #operands +MachineInstr::MachineInstr(MachineOpCode _opCode, + unsigned numOperands, + OpCodeMask _opCodeMask) + : opCode(_opCode), + opCodeMask(_opCodeMask), + operands(numOperands) +{ } void |