From 5df15c692b944b6c46ec6d532fc286b7e0000d5d Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Thu, 4 Oct 2012 06:52:09 +0000 Subject: [PATCH] Add method to query for 'NoAlias' attribute on call/invoke instructions. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165208 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Instructions.h | 2 ++ include/llvm/Support/CallSite.h | 3 +++ lib/Transforms/IPO/FunctionAttrs.cpp | 2 +- lib/VMCore/Instructions.cpp | 16 ++++++++++++++++ 4 files changed, 22 insertions(+), 1 deletion(-) diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h index a607c84c5bc..711bced70ff 100644 --- a/include/llvm/Instructions.h +++ b/include/llvm/Instructions.h @@ -1279,6 +1279,7 @@ public: bool paramHasStructRetAttr(unsigned i) const; bool paramHasNestAttr(unsigned i) const; bool paramHasByValAttr(unsigned i) const; + bool paramHasNoAliasAttr(unsigned i) const; /// @brief Determine whether the call or the callee has the given attribute. bool paramHasAttr(unsigned i, Attributes attr) const; @@ -3049,6 +3050,7 @@ public: bool paramHasStructRetAttr(unsigned i) const; bool paramHasNestAttr(unsigned i) const; bool paramHasByValAttr(unsigned i) const; + bool paramHasNoAliasAttr(unsigned i) const; /// @brief Determine whether the call or the callee has the given attribute. bool paramHasAttr(unsigned i, Attributes attr) const; diff --git a/include/llvm/Support/CallSite.h b/include/llvm/Support/CallSite.h index 3e1a2f58227..98c48d9aaaf 100644 --- a/include/llvm/Support/CallSite.h +++ b/include/llvm/Support/CallSite.h @@ -208,6 +208,9 @@ public: bool paramHasByValAttr(unsigned i) const { CALLSITE_DELEGATE_GETTER(paramHasByValAttr(i)); } + bool paramHasNoAliasAttr(unsigned i) const { + CALLSITE_DELEGATE_GETTER(paramHasNoAliasAttr(i)); + } /// paramHasAttr - whether the call or the callee has the given attribute. bool paramHasAttr(uint16_t i, Attributes attr) const { diff --git a/lib/Transforms/IPO/FunctionAttrs.cpp b/lib/Transforms/IPO/FunctionAttrs.cpp index f3f62284334..f974bd0c045 100644 --- a/lib/Transforms/IPO/FunctionAttrs.cpp +++ b/lib/Transforms/IPO/FunctionAttrs.cpp @@ -520,7 +520,7 @@ bool FunctionAttrs::IsFunctionMallocLike(Function *F, case Instruction::Call: case Instruction::Invoke: { CallSite CS(RVI); - if (CS.paramHasAttr(0, Attribute::NoAlias)) + if (CS.paramHasNoAliasAttr(0)) break; if (CS.getCalledFunction() && SCCNodes.count(CS.getCalledFunction())) diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp index b3acbc42410..9b700451bee 100644 --- a/lib/VMCore/Instructions.cpp +++ b/lib/VMCore/Instructions.cpp @@ -390,6 +390,14 @@ bool CallInst::paramHasByValAttr(unsigned i) const { return false; } +bool CallInst::paramHasNoAliasAttr(unsigned i) const { + if (AttributeList.getParamAttributes(i).hasNoAliasAttr()) + return true; + if (const Function *F = getCalledFunction()) + return F->getParamAttributes(i).hasNoAliasAttr(); + return false; +} + bool CallInst::paramHasAttr(unsigned i, Attributes attr) const { if (AttributeList.paramHasAttr(i, attr)) return true; @@ -658,6 +666,14 @@ bool InvokeInst::paramHasByValAttr(unsigned i) const { return false; } +bool InvokeInst::paramHasNoAliasAttr(unsigned i) const { + if (AttributeList.getParamAttributes(i).hasNoAliasAttr()) + return true; + if (const Function *F = getCalledFunction()) + return F->getParamAttributes(i).hasNoAliasAttr(); + return false; +} + bool InvokeInst::paramHasAttr(unsigned i, Attributes attr) const { if (AttributeList.paramHasAttr(i, attr)) return true; -- 2.34.1