From: Chris Lattner Date: Tue, 17 Jun 2003 22:16:59 +0000 (+0000) Subject: * Add new CallSite::get factory method X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=697a00fbf0e43adb1c37c5af8f6e25e2a42b606d;p=oota-llvm.git * Add new CallSite::get factory method * add new setCalledFunction method * FIX arg_end method which was horribly broken! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@6758 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Support/CallSite.h b/include/llvm/Support/CallSite.h index faf6d0d278a..c30f00c9b9a 100644 --- a/include/llvm/Support/CallSite.h +++ b/include/llvm/Support/CallSite.h @@ -22,6 +22,21 @@ public: CallSite(const CallSite &CS) : I(CS.I) {} CallSite &operator=(const CallSite &CS) { I = CS.I; return *this; } + /// CallSite::get - This static method is sort of like a constructor. It will + /// create an appropriate call site for a Call or Invoke instruction, but it + /// can also create a null initialized CallSite object for something which is + /// NOT a call site. + /// + static CallSite get(Value *V) { + if (Instruction *I = dyn_cast(V)) { + if (I->getOpcode() == Instruction::Call) + return CallSite((CallInst*)I); + else if (I->getOpcode() == Instruction::Invoke) + return CallSite((InvokeInst*)I); + } + return CallSite(); + } + /// getInstruction - Return the instruction this call site corresponds to /// Instruction *getInstruction() const { return I; } @@ -37,6 +52,12 @@ public: return dyn_cast(getCalledValue()); } + /// setCalledFunction - Set the callee to the specied value... + /// + void setCalledFunction(Value *V) { + I->setOperand(0, V); + } + /// arg_iterator - The type of iterator to use when looping over actual /// arguments at this call site... typedef User::op_iterator arg_iterator; @@ -50,7 +71,7 @@ public: else return I->op_begin()+3; // Skip Function, BB, BB } - arg_iterator arg_end() const { return I->op_begin(); } + arg_iterator arg_end() const { return I->op_end(); } }; #endif