diff options
author | Chris Lattner <sabre@nondot.org> | 2003-06-17 22:16:59 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-06-17 22:16:59 +0000 |
commit | 697a00fbf0e43adb1c37c5af8f6e25e2a42b606d (patch) | |
tree | 4f16c1fc00e662e97bd5a4beac95e83342d53496 | |
parent | a599f871af616133121f3ef81db85e4dccf684a4 (diff) |
* 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
-rw-r--r-- | include/llvm/Support/CallSite.h | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/include/llvm/Support/CallSite.h b/include/llvm/Support/CallSite.h index faf6d0d278..c30f00c9b9 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<Instruction>(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<Function>(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 |