diff options
author | Chris Lattner <sabre@nondot.org> | 2003-02-24 20:35:45 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2003-02-24 20:35:45 +0000 |
commit | 93a7e08d1fb087c3e26775838bfaad1d8eb99f11 (patch) | |
tree | ed6c8f67c83313a493d0fdea74fde22b9899c126 /include/llvm/Support | |
parent | 4944d8dbc8293fb8d11c4bb908fb73e0294549be (diff) | |
download | external_llvm-93a7e08d1fb087c3e26775838bfaad1d8eb99f11.zip external_llvm-93a7e08d1fb087c3e26775838bfaad1d8eb99f11.tar.gz external_llvm-93a7e08d1fb087c3e26775838bfaad1d8eb99f11.tar.bz2 |
Initial checkin of CallSite wrapper for Call/Invoke instructions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5618 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Support')
-rw-r--r-- | include/llvm/Support/CallSite.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/include/llvm/Support/CallSite.h b/include/llvm/Support/CallSite.h new file mode 100644 index 0000000..066572e --- /dev/null +++ b/include/llvm/Support/CallSite.h @@ -0,0 +1,49 @@ +//===-- llvm/Support/CallSite.h - Abstract Call & Invoke instrs -*- C++ -*-===// +// +// This file defines the CallSite class, which is a handy wrapper for code that +// wants to treat Call and Invoke instructions in a generic way. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_SUPPORT_CALLSITE_H +#define LLVM_SUPPORT_CALLSITE_H + +#include "llvm/Instruction.h" + +class CallInst; +class InvokeInst; + +class CallSite { + Instruction *I; +public: + CallSite(CallInst *CI) : I((Instruction*)CI) {} + CallSite(InvokeInst *II) : I((Instruction*)II) {} + + /// getCalledValue - Return the pointer to function that is being called... + /// + Value *getCalledValue() const { return I->getOperand(0); } + + /// getCalledFunction - Return the function being called if this is a direct + /// call, otherwise return null (if it's an indirect call). + /// + Function *getCalledFunction() const { + return dyn_cast<Function>(getCalledValue()); + } + + /// arg_iterator - The type of iterator to use when looping over actual + /// arguments at this call site... + typedef User::op_iterator arg_iterator; + + /// arg_begin/arg_end - Return iterators corresponding to the actual argument + /// list for a call site. + /// + arg_iterator arg_begin() const { + if (I->getOpcode() == Instruction::Call) + return I->op_begin()+1; // Skip Function + else + return I->op_begin()+3; // Skip Function, BB, BB + } + arg_iterator arg_end() const { return I->op_begin(); } +}; + +#endif |