From 8c174a9b5a3c5580aa6110336bb6a7f990dcb3b2 Mon Sep 17 00:00:00 2001 From: Matthijs Kooijman Date: Tue, 8 Jul 2008 08:50:32 +0000 Subject: [PATCH] Add CallSite::getArgumentOffset() to hide the differences in operands betwen Call and Invoke in a single method instead of having it hardcoded in multiple places. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53224 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/CallSite.h | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/include/llvm/Support/CallSite.h b/include/llvm/Support/CallSite.h index 41019313c64..dfb3b5eae1a 100644 --- a/include/llvm/Support/CallSite.h +++ b/include/llvm/Support/CallSite.h @@ -130,12 +130,9 @@ public: void setArgument(unsigned ArgNo, Value* newVal) { assert(I && "Not a call or invoke instruction!"); assert(arg_begin() + ArgNo < arg_end() && "Argument # out of range!"); - if (I->getOpcode() == Instruction::Call) - I->setOperand(ArgNo+1, newVal); // Skip Function - else - I->setOperand(ArgNo+3, newVal); // Skip Function, BB, BB + I->setOperand(getArgumentOffset() + ArgNo, newVal); } - + /// hasArgument - Returns true if this CallSite passes the given Value* as an /// argument to the called function. bool hasArgument(const Value *Arg) const; @@ -146,14 +143,11 @@ public: /// arg_begin/arg_end - Return iterators corresponding to the actual argument /// list for a call site. - /// arg_iterator arg_begin() const { assert(I && "Not a call or invoke instruction!"); - if (I->getOpcode() == Instruction::Call) - return I->op_begin()+1; // Skip Function - else - return I->op_begin()+3; // Skip Function, BB, BB + return I->op_begin() + getArgumentOffset(); // Skip non-arguments } + arg_iterator arg_end() const { return I->op_end(); } bool arg_empty() const { return arg_end() == arg_begin(); } unsigned arg_size() const { return unsigned(arg_end() - arg_begin()); } @@ -161,6 +155,15 @@ public: bool operator<(const CallSite &CS) const { return getInstruction() < CS.getInstruction(); } + +private: + /// Returns the operand number of the first argument + unsigned getArgumentOffset() const { + if (I->getOpcode() == Instruction::Call) + return 1; // Skip Function + else + return 3; // Skip Function, BB, BB + } }; } // End llvm namespace