From e8f1df6446bf6ebf368401b813a0ca8eee69d871 Mon Sep 17 00:00:00 2001 From: "Vikram S. Adve" Date: Mon, 16 Sep 2002 16:06:12 +0000 Subject: [PATCH] Add routines to update or erase operands (and to do so without external assumptions about which operand number stores what operand). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3750 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/User.h | 4 ++++ include/llvm/iMemory.h | 7 ++++++- include/llvm/iPHINode.h | 6 ++++++ 3 files changed, 16 insertions(+), 1 deletion(-) 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);