X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FIR%2FArgument.h;h=fc04fe71cbf06d2ec3252f77c027c46399064591;hb=00552e3875ee5f382db6c98286a241a7d0efe1b8;hp=f737e40ea03cabacea4a8341477dd6033bf9cb91;hpb=0b8c9a80f20772c3793201ab5b251d3520b9cea3;p=oota-llvm.git diff --git a/include/llvm/IR/Argument.h b/include/llvm/IR/Argument.h index f737e40ea03..fc04fe71cbf 100644 --- a/include/llvm/IR/Argument.h +++ b/include/llvm/IR/Argument.h @@ -7,12 +7,12 @@ // //===----------------------------------------------------------------------===// // -// This file declares the Argument class. +// This file declares the Argument class. // //===----------------------------------------------------------------------===// -#ifndef LLVM_ARGUMENT_H -#define LLVM_ARGUMENT_H +#ifndef LLVM_IR_ARGUMENT_H +#define LLVM_IR_ARGUMENT_H #include "llvm/ADT/Twine.h" #include "llvm/ADT/ilist_node.h" @@ -24,11 +24,14 @@ namespace llvm { template class SymbolTableListTraits; -/// A class to represent an incoming formal argument to a Function. An argument -/// is a very simple Value. It is essentially a named (optional) type. When used -/// in the body of a function, it represents the value of the actual argument -/// the function was called with. -/// @brief LLVM Argument representation +/// \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 { virtual void anchor(); Function *Parent; @@ -37,50 +40,92 @@ class Argument : public Value, public ilist_node { void setParent(Function *parent); public: - /// Argument ctor - If Function argument is specified, this argument is - /// inserted at the end of the argument list for the function. + /// \brief Constructor. /// - explicit Argument(Type *Ty, const Twine &Name = "", Function *F = 0); + /// 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); inline const Function *getParent() const { return Parent; } inline Function *getParent() { return Parent; } - /// getArgNo - 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. + /// \brief 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; + + /// \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). + 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. + uint64_t getDereferenceableBytes() const; - /// hasByValAttr - Return true if this argument has the byval attribute on it - /// in its containing function. + /// \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. + uint64_t getDereferenceableOrNullBytes() const; + + /// \brief Return true if this argument has the byval attribute on it in its + /// containing function. bool hasByValAttr() const; - - /// getParamAlignment - If this is a byval argument, return its alignment. + + /// \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. + bool hasByValOrInAllocaAttr() const; + + /// \brief If this is a byval or inalloca argument, return its alignment. unsigned getParamAlignment() const; - /// hasNestAttr - Return true if this argument has the nest attribute on - /// it in its containing function. + /// \brief Return true if this argument has the nest attribute on it in its + /// containing function. bool hasNestAttr() const; - /// hasNoAliasAttr - Return true if this argument has the noalias attribute on - /// it in its containing function. + /// \brief Return true if this argument has the noalias attribute on it in its + /// containing function. bool hasNoAliasAttr() const; - - /// hasNoCaptureAttr - Return true if this argument has the nocapture - /// attribute on it in its containing function. + + /// \brief Return true if this argument has the nocapture attribute on it in + /// its containing function. bool hasNoCaptureAttr() const; - - /// hasStructRetAttr - Return true if this argument has the sret attribute on - /// it in its containing function. + + /// \brief Return true if this argument has the sret attribute on it in its + /// containing function. bool hasStructRetAttr() const; - /// addAttr - Add a Attribute to an argument - void addAttr(Attribute); - - /// removeAttr - Remove a Attribute from an argument - void removeAttr(Attribute); + /// \brief Return true if this argument has the returned attribute on it in + /// its containing function. + bool hasReturnedAttr() const; - /// classof - Methods for support type inquiry through isa, cast, and - /// dyn_cast: - /// + /// \brief Return true if this argument has the readonly or readnone attribute + /// on it in its containing function. + bool onlyReadsMemory() const; + + /// \brief Return true if this argument has the inalloca attribute on it in + /// its containing function. + bool hasInAllocaAttr() const; + + /// \brief Return true if this argument has the zext attribute on it in its + /// containing function. + bool hasZExtAttr() const; + + /// \brief Return true if this argument has the sext attribute on it in its + /// containing function. + bool hasSExtAttr() const; + + /// \brief Add a Attribute to an argument. + void addAttr(AttributeSet AS); + + /// \brief Remove a Attribute from an argument. + void removeAttr(AttributeSet AS); + + /// \brief Method for support type inquiry through isa, cast, and + /// dyn_cast. static inline bool classof(const Value *V) { return V->getValueID() == ArgumentVal; }