diff options
Diffstat (limited to 'contrib/llvm/include/llvm/IR/Function.h')
-rw-r--r-- | contrib/llvm/include/llvm/IR/Function.h | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/contrib/llvm/include/llvm/IR/Function.h b/contrib/llvm/include/llvm/IR/Function.h index 6c228ea..f66ac0b 100644 --- a/contrib/llvm/include/llvm/IR/Function.h +++ b/contrib/llvm/include/llvm/IR/Function.h @@ -25,6 +25,7 @@ #include "llvm/IR/BasicBlock.h" #include "llvm/IR/CallingConv.h" #include "llvm/IR/GlobalObject.h" +#include "llvm/IR/OperandTraits.h" #include "llvm/Support/Compiler.h" namespace llvm { @@ -119,11 +120,22 @@ private: public: static Function *Create(FunctionType *Ty, LinkageTypes Linkage, const Twine &N = "", Module *M = nullptr) { - return new(0) Function(Ty, Linkage, N, M); + return new(1) Function(Ty, Linkage, N, M); } ~Function() override; + /// \brief Provide fast operand accessors + DECLARE_TRANSPARENT_OPERAND_ACCESSORS(Value); + + /// \brief Get the personality function associated with this function. + bool hasPersonalityFn() const { return getNumOperands() != 0; } + Constant *getPersonalityFn() const { + assert(hasPersonalityFn()); + return cast<Constant>(Op<0>()); + } + void setPersonalityFn(Constant *C); + Type *getReturnType() const; // Return the type of the ret val FunctionType *getFunctionType() const; // Return the FunctionType for me @@ -601,6 +613,11 @@ ilist_traits<Argument>::getSymTab(Function *F) { return F ? &F->getValueSymbolTable() : nullptr; } -} // End llvm namespace +template <> +struct OperandTraits<Function> : public OptionalOperandTraits<Function> {}; + +DEFINE_TRANSPARENT_OPERAND_ACCESSORS(Function, Value) + +} // namespace llvm #endif |