1
//===-- llvm/Argument.h - Definition of the Argument class ------*- C++ -*-===//
3
// The LLVM Compiler Infrastructure
5
// This file is distributed under the University of Illinois Open Source
6
// License. See LICENSE.TXT for details.
8
//===----------------------------------------------------------------------===//
10
// This file declares the Argument class.
12
//===----------------------------------------------------------------------===//
14
#ifndef LLVM_ARGUMENT_H
15
#define LLVM_ARGUMENT_H
17
#include "llvm/Value.h"
18
#include "llvm/Attributes.h"
19
#include "llvm/ADT/ilist_node.h"
20
#include "llvm/ADT/Twine.h"
24
template<typename ValueSubClass, typename ItemParentClass>
25
class SymbolTableListTraits;
27
/// A class to represent an incoming formal argument to a Function. An argument
28
/// is a very simple Value. It is essentially a named (optional) type. When used
29
/// in the body of a function, it represents the value of the actual argument
30
/// the function was called with.
31
/// @brief LLVM Argument representation
32
class Argument : public Value, public ilist_node<Argument> {
35
friend class SymbolTableListTraits<Argument, Function>;
36
void setParent(Function *parent);
39
/// Argument ctor - If Function argument is specified, this argument is
40
/// inserted at the end of the argument list for the function.
42
explicit Argument(const Type *Ty, const Twine &Name = "", Function *F = 0);
44
inline const Function *getParent() const { return Parent; }
45
inline Function *getParent() { return Parent; }
47
/// getArgNo - Return the index of this formal argument in its containing
48
/// function. For example in "void foo(int a, float b)" a is 0 and b is 1.
49
unsigned getArgNo() const;
51
/// hasByValAttr - Return true if this argument has the byval attribute on it
52
/// in its containing function.
53
bool hasByValAttr() const;
55
/// hasNestAttr - Return true if this argument has the nest attribute on
56
/// it in its containing function.
57
bool hasNestAttr() const;
59
/// hasNoAliasAttr - Return true if this argument has the noalias attribute on
60
/// it in its containing function.
61
bool hasNoAliasAttr() const;
63
/// hasNoCaptureAttr - Return true if this argument has the nocapture
64
/// attribute on it in its containing function.
65
bool hasNoCaptureAttr() const;
67
/// hasSRetAttr - Return true if this argument has the sret attribute on it in
68
/// its containing function.
69
bool hasStructRetAttr() const;
71
/// addAttr - Add a Attribute to an argument
72
void addAttr(Attributes);
74
/// removeAttr - Remove a Attribute from an argument
75
void removeAttr(Attributes);
77
/// classof - Methods for support type inquiry through isa, cast, and
80
static inline bool classof(const Argument *) { return true; }
81
static inline bool classof(const Value *V) {
82
return V->getValueID() == ArgumentVal;
86
} // End llvm namespace