diff --git a/include/llvm/InstrTypes.h b/include/llvm/InstrTypes.h index 1bd7a246d0a..23d60198660 100644 --- a/include/llvm/InstrTypes.h +++ b/include/llvm/InstrTypes.h @@ -35,6 +35,9 @@ public: virtual bool setOperand(unsigned i, Value *Val) = 0; virtual const Value *getOperand(unsigned i) const = 0; + inline Value *getOperand(unsigned i) { + return (Value*)((const Instruction *)this)->getOperand(i); + } // Additionally, they must provide a method to get at the successors of this // terminator instruction. If 'idx' is out of range, a null pointer shall be @@ -78,6 +81,9 @@ public: virtual string getOpcode() const = 0; virtual unsigned getNumOperands() const { return 1; } + inline Value *getOperand(unsigned i) { + return (i == 0) ? Source : 0; + } virtual const Value *getOperand(unsigned i) const { return (i == 0) ? Source : 0; } @@ -126,6 +132,9 @@ public: virtual const Value *getOperand(unsigned i) const { return (i == 0) ? Source1 : ((i == 1) ? Source2 : 0); } + inline Value *getOperand(unsigned i) { + return (i == 0) ? Source1 : ((i == 1) ? Source2 : 0); + } virtual bool setOperand(unsigned i, Value *Val) { // assert(Val && "operand must not be null!"); diff --git a/include/llvm/iOther.h b/include/llvm/iOther.h index 118241fdc28..1d6b9a9968e 100644 --- a/include/llvm/iOther.h +++ b/include/llvm/iOther.h @@ -46,6 +46,15 @@ public: virtual bool setOperand(unsigned i, Value *Val); virtual string getOpcode() const { return "phi"; } + // getNumIncomingValues - Return the number of incoming edges the PHI node has + inline unsigned getNumIncomingValues() const { return IncomingValues.size(); } + + // getIncomingValue - Return incoming value #x + inline Value *getIncomingValue(unsigned i) const { return IncomingValues[i].first; } + + // getIncomingBlock - Return incoming basic block #x + inline BasicBlock *getIncomingBlock(unsigned i) const { return IncomingValues[i].second; } + // addIncoming - Add an incoming value to the end of the PHI list void addIncoming(Value *D, BasicBlock *BB);