#define LLVM_ARGUMENT_H
#include "llvm/Value.h"
-#include "llvm/ParameterAttributes.h"
+#include "llvm/Attributes.h"
+#include "llvm/ADT/ilist_node.h"
+#include "llvm/ADT/Twine.h"
namespace llvm {
/// in the body of a function, it represents the value of the actual argument
/// the function was called with.
/// @brief LLVM Argument representation
-class Argument : public Value { // Defined in the Function.cpp file
+class Argument : public Value, public ilist_node<Argument> {
Function *Parent;
- Argument *Prev, *Next; // Next and Prev links for our intrusive linked list
- void setNext(Argument *N) { Next = N; }
- void setPrev(Argument *N) { Prev = N; }
friend class SymbolTableListTraits<Argument, Function>;
void setParent(Function *parent);
/// Argument ctor - If Function argument is specified, this argument is
/// inserted at the end of the argument list for the function.
///
- explicit Argument(const Type *Ty, const std::string &Name = "",
- Function *F = 0);
+ explicit Argument(const Type *Ty, const Twine &Name = "", Function *F = 0);
inline const Function *getParent() const { return Parent; }
inline Function *getParent() { return Parent; }
/// in its containing function.
bool hasByValAttr() const;
+ /// hasNestAttr - 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.
bool hasNoAliasAttr() const;
+ /// hasNoCaptureAttr - Return true if this argument has the nocapture
+ /// attribute on it in its containing function.
+ bool hasNoCaptureAttr() const;
+
/// hasSRetAttr - Return true if this argument has the sret attribute on it in
/// its containing function.
bool hasStructRetAttr() const;
- /// addAttr - Add a ParamAttr to an argument
- void addAttr(ParameterAttributes);
+ /// addAttr - Add a Attribute to an argument
+ void addAttr(Attributes);
- /// removeAttr - Remove a ParamAttr from an argument
- void removeAttr(ParameterAttributes);
-
- virtual void print(std::ostream &OS) const;
- void print(std::ostream *OS) const {
- if (OS) print(*OS);
- }
+ /// removeAttr - Remove a Attribute from an argument
+ void removeAttr(Attributes);
/// classof - Methods for support type inquiry through isa, cast, and
/// dyn_cast:
static inline bool classof(const Value *V) {
return V->getValueID() == ArgumentVal;
}
-
-private:
- // getNext/Prev - Return the next or previous argument in the list.
- Argument *getNext() { return Next; }
- const Argument *getNext() const { return Next; }
- Argument *getPrev() { return Prev; }
- const Argument *getPrev() const { return Prev; }
};
} // End llvm namespace