mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
Add hasByValAttr() and hasNoAliasAttr() methods to the Argument class.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46314 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
23e202dee0
commit
de6fa5f25f
@ -39,13 +39,24 @@ public:
|
||||
/// 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 = "",
|
||||
explicit Argument(const Type *Ty, const std::string &Name = "",
|
||||
Function *F = 0);
|
||||
|
||||
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.
|
||||
unsigned getArgNo() const;
|
||||
|
||||
/// hasByValAttr - Return true if this argument has the byval attribute on it
|
||||
/// in its containing function.
|
||||
bool hasByValAttr() const;
|
||||
|
||||
/// hasNoAliasAttr - Return true if this argument has the noalias attribute on
|
||||
/// it in its containing function.
|
||||
bool hasNoAliasAttr() const;
|
||||
|
||||
virtual void print(std::ostream &OS) const;
|
||||
void print(std::ostream *OS) const {
|
||||
if (OS) print(*OS);
|
||||
|
@ -75,6 +75,37 @@ void Argument::setParent(Function *parent) {
|
||||
LeakDetector::removeGarbageObject(this);
|
||||
}
|
||||
|
||||
/// 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.
|
||||
unsigned Argument::getArgNo() const {
|
||||
const Function *F = getParent();
|
||||
assert(F && "Argument is not in a function");
|
||||
|
||||
Function::const_arg_iterator AI = F->arg_begin();
|
||||
unsigned ArgIdx = 0;
|
||||
for (; &*AI != this; ++AI)
|
||||
++ArgIdx;
|
||||
|
||||
return ArgIdx;
|
||||
}
|
||||
|
||||
/// hasByValAttr - Return true if this argument has the byval attribute on it
|
||||
/// in its containing function.
|
||||
bool Argument::hasByValAttr() const {
|
||||
if (!isa<PointerType>(getType())) return false;
|
||||
return getParent()->paramHasAttr(getArgNo()+1, ParamAttr::ByVal);
|
||||
}
|
||||
|
||||
/// hasNoAliasAttr - Return true if this argument has the noalias attribute on
|
||||
/// it in its containing function.
|
||||
bool Argument::hasNoAliasAttr() const {
|
||||
if (!isa<PointerType>(getType())) return false;
|
||||
return getParent()->paramHasAttr(getArgNo()+1, ParamAttr::NoAlias);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Helper Methods in Function
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
Loading…
Reference in New Issue
Block a user