diff --git a/include/llvm/User.h b/include/llvm/User.h index e9dea8bcbff..1bd275a02b1 100644 --- a/include/llvm/User.h +++ b/include/llvm/User.h @@ -34,6 +34,10 @@ public: assert(i < Operands.size() && "setOperand() out of range!"); Operands[i] = Val; } + inline void eraseOperand(unsigned i) { + assert(i < Operands.size() && "setOperand() out of range!"); + Operands.erase(Operands.begin() + i); + } inline unsigned getNumOperands() const { return Operands.size(); } // --------------------------------------------------------------------------- diff --git a/include/llvm/iMemory.h b/include/llvm/iMemory.h index c198aebd70c..e42f5b993b8 100644 --- a/include/llvm/iMemory.h +++ b/include/llvm/iMemory.h @@ -150,6 +150,7 @@ public: Value *getPointerOperand() { return getOperand(0); } const Value *getPointerOperand() const { return getOperand(0); } + static unsigned getPointerOperandIndex() { return 0U; } // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const LoadInst *) { return true; } @@ -180,6 +181,7 @@ public: Value *getPointerOperand() { return getOperand(1); } const Value *getPointerOperand() const { return getOperand(1); } + static unsigned getPointerOperandIndex() { return 1U; } // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const StoreInst *) { return true; } @@ -238,7 +240,10 @@ public: const Value *getPointerOperand() const { return getOperand(0); } - + static unsigned getPointerOperandIndex() { + return 0U; // get index for modifying correct operand + } + inline unsigned getNumIndices() const { // Note: always non-negative return getNumOperands() - 1; } diff --git a/include/llvm/iPHINode.h b/include/llvm/iPHINode.h index 287ba90bfef..93b6e7cc80e 100644 --- a/include/llvm/iPHINode.h +++ b/include/llvm/iPHINode.h @@ -42,6 +42,9 @@ public: void setIncomingValue(unsigned i, Value *V) { Operands[i*2] = V; } + inline unsigned getOperandNumForIncomingValue(unsigned i) { + return i*2; + } /// getIncomingBlock - Return incoming basic block #x const BasicBlock *getIncomingBlock(unsigned i) const { @@ -53,6 +56,9 @@ public: inline void setIncomingBlock(unsigned i, BasicBlock *BB) { Operands[i*2+1] = (Value*)BB; } + inline unsigned getOperandNumForIncomingBlock(unsigned i) { + return i*2+1; + } /// addIncoming - Add an incoming value to the end of the PHI list void addIncoming(Value *D, BasicBlock *BB);