Allow machine instructions with variable numbers of arguments.
authorVikram S. Adve <vadve@cs.uiuc.edu>
Tue, 31 Jul 2001 21:49:28 +0000 (21:49 +0000)
committerVikram S. Adve <vadve@cs.uiuc.edu>
Tue, 31 Jul 2001 21:49:28 +0000 (21:49 +0000)
This is used only by Phi for now.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@336 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/CodeGen/MachineInstr.h
lib/CodeGen/MachineInstr.cpp

index a26c61accc28e4db2c8ee6fc63be1619c0361540..79efe36fb4ceab1a940508f4040be8a926f26ccb 100644 (file)
@@ -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];
 }
 
index 64fcaa0577174e87a9070f72592541bb0abae0e7..d3e468cc2ebba1124a451451a409dfb7edd59055 100644 (file)
 
 //************************ 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)
 {
 }