LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Argument.h
Go to the documentation of this file.
1 //===-- llvm/Argument.h - Definition of the Argument class ------*- C++ -*-===//
2 //
3 // The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file declares the Argument class.
11 //
12 //===----------------------------------------------------------------------===//
13 
14 #ifndef LLVM_IR_ARGUMENT_H
15 #define LLVM_IR_ARGUMENT_H
16 
17 #include "llvm/ADT/Twine.h"
18 #include "llvm/ADT/ilist_node.h"
19 #include "llvm/IR/Attributes.h"
20 #include "llvm/IR/Value.h"
21 
22 namespace llvm {
23 
24 template<typename ValueSubClass, typename ItemParentClass>
26 
27 /// \brief LLVM Argument representation
28 ///
29 /// This class represents an incoming formal argument to a Function. A formal
30 /// argument, since it is ``formal'', does not contain an actual value but
31 /// instead represents the type, argument number, and attributes of an argument
32 /// for a specific function. When used in the body of said function, the
33 /// argument of course represents the value of the actual argument that the
34 /// function was called with.
35 class Argument : public Value, public ilist_node<Argument> {
36  virtual void anchor();
37  Function *Parent;
38 
40  void setParent(Function *parent);
41 
42 public:
43  /// \brief Constructor.
44  ///
45  /// If \p F is specified, the argument is inserted at the end of the argument
46  /// list for \p F.
47  explicit Argument(Type *Ty, const Twine &Name = "", Function *F = 0);
48 
49  inline const Function *getParent() const { return Parent; }
50  inline Function *getParent() { return Parent; }
51 
52  /// \brief Return the index of this formal argument in its containing
53  /// function.
54  ///
55  /// For example in "void foo(int a, float b)" a is 0 and b is 1.
56  unsigned getArgNo() const;
57 
58  /// \brief Return true if this argument has the byval attribute on it in its
59  /// containing function.
60  bool hasByValAttr() const;
61 
62  /// \brief If this is a byval argument, return its alignment.
63  unsigned getParamAlignment() const;
64 
65  /// \brief Return true if this argument has the nest attribute on it in its
66  /// containing function.
67  bool hasNestAttr() const;
68 
69  /// \brief Return true if this argument has the noalias attribute on it in its
70  /// containing function.
71  bool hasNoAliasAttr() const;
72 
73  /// \brief Return true if this argument has the nocapture attribute on it in
74  /// its containing function.
75  bool hasNoCaptureAttr() const;
76 
77  /// \brief Return true if this argument has the sret attribute on it in its
78  /// containing function.
79  bool hasStructRetAttr() const;
80 
81  /// \brief Return true if this argument has the returned attribute on it in
82  /// its containing function.
83  bool hasReturnedAttr() const;
84 
85  /// \brief Return true if this argument has the readonly or readnone attribute
86  /// on it in its containing function.
87  bool onlyReadsMemory() const;
88 
89 
90  /// \brief Add a Attribute to an argument.
91  void addAttr(AttributeSet AS);
92 
93  /// \brief Remove a Attribute from an argument.
94  void removeAttr(AttributeSet AS);
95 
96  /// \brief Method for support type inquiry through isa, cast, and
97  /// dyn_cast.
98  static inline bool classof(const Value *V) {
99  return V->getValueID() == ArgumentVal;
100  }
101 };
102 
103 } // End llvm namespace
104 
105 #endif
bool hasNoCaptureAttr() const
Return true if this argument has the nocapture attribute on it in its containing function.
Definition: Function.cpp:111
bool hasNoAliasAttr() const
Return true if this argument has the noalias attribute on it in its containing function.
Definition: Function.cpp:103
LLVM Argument representation.
Definition: Argument.h:35
bool onlyReadsMemory() const
Return true if this argument has the readonly or readnone attribute on it in its containing function...
Definition: Function.cpp:136
static bool classof(const Value *V)
Method for support type inquiry through isa, cast, and dyn_cast.
Definition: Argument.h:98
F(f)
Function * getParent()
Definition: Argument.h:50
void addAttr(AttributeSet AS)
Add a Attribute to an argument.
Definition: Function.cpp:144
This file contains the simple types necessary to represent the attributes associated with functions a...
void removeAttr(AttributeSet AS)
Remove a Attribute from an argument.
Definition: Function.cpp:154
bool hasStructRetAttr() const
Return true if this argument has the sret attribute on it in its containing function.
Definition: Function.cpp:119
bool hasNestAttr() const
Return true if this argument has the nest attribute on it in its containing function.
Definition: Function.cpp:95
const Function * getParent() const
Definition: Argument.h:49
unsigned getParamAlignment() const
If this is a byval argument, return its alignment.
Definition: Function.cpp:87
unsigned getValueID() const
Definition: Value.h:233
bool hasByValAttr() const
Return true if this argument has the byval attribute on it in its containing function.
Definition: Function.cpp:81
LLVM Value Representation.
Definition: Value.h:66
unsigned getArgNo() const
Return the index of this formal argument in its containing function.
Definition: Function.cpp:67
Argument(Type *Ty, const Twine &Name="", Function *F=0)
Constructor.
Definition: Function.cpp:45
bool hasReturnedAttr() const
Return true if this argument has the returned attribute on it in its containing function.
Definition: Function.cpp:129