diff options
Diffstat (limited to 'include/llvm/IR/Argument.h')
-rw-r--r-- | include/llvm/IR/Argument.h | 99 |
1 files changed, 41 insertions, 58 deletions
diff --git a/include/llvm/IR/Argument.h b/include/llvm/IR/Argument.h index d8b280a66f18..6fc1dd2f285a 100644 --- a/include/llvm/IR/Argument.h +++ b/include/llvm/IR/Argument.h @@ -21,127 +21,110 @@ namespace llvm { -template <typename NodeTy> class SymbolTableListTraits; - -/// \brief LLVM Argument representation -/// /// This class represents an incoming formal argument to a Function. A formal /// argument, since it is ``formal'', does not contain an actual value but /// instead represents the type, argument number, and attributes of an argument /// for a specific function. When used in the body of said function, the /// argument of course represents the value of the actual argument that the /// function was called with. -class Argument : public Value, public ilist_node<Argument> { +class Argument : public Value { virtual void anchor(); Function *Parent; + unsigned ArgNo; - friend class SymbolTableListTraits<Argument>; + friend class Function; void setParent(Function *parent); public: - /// \brief Constructor. - /// - /// If \p F is specified, the argument is inserted at the end of the argument - /// list for \p F. - explicit Argument(Type *Ty, const Twine &Name = "", Function *F = nullptr); + /// Argument constructor. + explicit Argument(Type *Ty, const Twine &Name = "", Function *F = nullptr, + unsigned ArgNo = 0); inline const Function *getParent() const { return Parent; } inline Function *getParent() { return Parent; } - /// \brief Return the index of this formal argument in its containing - /// function. + /// Return the index of this formal argument in its containing function. /// /// For example in "void foo(int a, float b)" a is 0 and b is 1. - unsigned getArgNo() const; + unsigned getArgNo() const { + assert(Parent && "can't get number of unparented arg"); + return ArgNo; + } - /// \brief Return true if this argument has the nonnull attribute on it in - /// its containing function. Also returns true if at least one byte is known - /// to be dereferenceable and the pointer is in addrspace(0). + /// Return true if this argument has the nonnull attribute. Also returns true + /// if at least one byte is known to be dereferenceable and the pointer is in + /// addrspace(0). bool hasNonNullAttr() const; - /// \brief If this argument has the dereferenceable attribute on it in its - /// containing function, return the number of bytes known to be - /// dereferenceable. Otherwise, zero is returned. + /// If this argument has the dereferenceable attribute, return the number of + /// bytes known to be dereferenceable. Otherwise, zero is returned. uint64_t getDereferenceableBytes() const; - /// \brief If this argument has the dereferenceable_or_null attribute on - /// it in its containing function, return the number of bytes known to be - /// dereferenceable. Otherwise, zero is returned. + /// If this argument has the dereferenceable_or_null attribute, return the + /// number of bytes known to be dereferenceable. Otherwise, zero is returned. uint64_t getDereferenceableOrNullBytes() const; - /// \brief Return true if this argument has the byval attribute on it in its - /// containing function. + /// Return true if this argument has the byval attribute. bool hasByValAttr() const; - /// \brief Return true if this argument has the swiftself attribute. + /// Return true if this argument has the swiftself attribute. bool hasSwiftSelfAttr() const; - /// \brief Return true if this argument has the swifterror attribute. + /// Return true if this argument has the swifterror attribute. bool hasSwiftErrorAttr() const; - /// \brief Return true if this argument has the byval attribute or inalloca - /// attribute on it in its containing function. These attributes both - /// represent arguments being passed by value. + /// Return true if this argument has the byval attribute or inalloca + /// attribute. These attributes represent arguments being passed by value. bool hasByValOrInAllocaAttr() const; - /// \brief If this is a byval or inalloca argument, return its alignment. + /// If this is a byval or inalloca argument, return its alignment. unsigned getParamAlignment() const; - /// \brief Return true if this argument has the nest attribute on it in its - /// containing function. + /// Return true if this argument has the nest attribute. bool hasNestAttr() const; - /// \brief Return true if this argument has the noalias attribute on it in its - /// containing function. + /// Return true if this argument has the noalias attribute. bool hasNoAliasAttr() const; - /// \brief Return true if this argument has the nocapture attribute on it in - /// its containing function. + /// Return true if this argument has the nocapture attribute. bool hasNoCaptureAttr() const; - /// \brief Return true if this argument has the sret attribute on it in its - /// containing function. + /// Return true if this argument has the sret attribute. bool hasStructRetAttr() const; - /// \brief Return true if this argument has the returned attribute on it in - /// its containing function. + /// Return true if this argument has the returned attribute. bool hasReturnedAttr() const; - /// \brief Return true if this argument has the readonly or readnone attribute - /// on it in its containing function. + /// Return true if this argument has the readonly or readnone attribute. bool onlyReadsMemory() const; - /// \brief Return true if this argument has the inalloca attribute on it in - /// its containing function. + /// Return true if this argument has the inalloca attribute. bool hasInAllocaAttr() const; - /// \brief Return true if this argument has the zext attribute on it in its - /// containing function. + /// Return true if this argument has the zext attribute. bool hasZExtAttr() const; - /// \brief Return true if this argument has the sext attribute on it in its - /// containing function. + /// Return true if this argument has the sext attribute. bool hasSExtAttr() const; - /// \brief Add a Attribute to an argument. - void addAttr(AttributeSet AS); + /// Add attributes to an argument. + void addAttr(AttributeList AS); void addAttr(Attribute::AttrKind Kind) { - addAttr(AttributeSet::get(getContext(), getArgNo() + 1, Kind)); + addAttr(AttributeList::get(getContext(), getArgNo() + 1, Kind)); } - /// \brief Remove a Attribute from an argument. - void removeAttr(AttributeSet AS); + /// Remove attributes from an argument. + void removeAttr(AttributeList AS); void removeAttr(Attribute::AttrKind Kind) { - removeAttr(AttributeSet::get(getContext(), getArgNo() + 1, Kind)); + removeAttr(AttributeList::get(getContext(), getArgNo() + 1, Kind)); } - /// \brief Checks if an argument has a given attribute. + /// Check if an argument has a given attribute. bool hasAttribute(Attribute::AttrKind Kind) const; - /// \brief Method for support type inquiry through isa, cast, and - /// dyn_cast. + /// Method for support type inquiry through isa, cast, and dyn_cast. static inline bool classof(const Value *V) { return V->getValueID() == ArgumentVal; } |