From: Bill Wendling Date: Thu, 4 Oct 2012 07:18:12 +0000 (+0000) Subject: Add method to query for NoCapture attribute. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=365b9e0668d44038fa0c2739060c26acae12066e;p=oota-llvm.git Add method to query for NoCapture attribute. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165212 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h index 711bced70ff..5ff1c37ae6c 100644 --- a/include/llvm/Instructions.h +++ b/include/llvm/Instructions.h @@ -1280,6 +1280,7 @@ public: bool paramHasNestAttr(unsigned i) const; bool paramHasByValAttr(unsigned i) const; bool paramHasNoAliasAttr(unsigned i) const; + bool paramHasNoCaptureAttr(unsigned i) const; /// @brief Determine whether the call or the callee has the given attribute. bool paramHasAttr(unsigned i, Attributes attr) const; @@ -3051,6 +3052,7 @@ public: bool paramHasNestAttr(unsigned i) const; bool paramHasByValAttr(unsigned i) const; bool paramHasNoAliasAttr(unsigned i) const; + bool paramHasNoCaptureAttr(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 98c48d9aaaf..3c5a8d4dc47 100644 --- a/include/llvm/Support/CallSite.h +++ b/include/llvm/Support/CallSite.h @@ -211,6 +211,9 @@ public: bool paramHasNoAliasAttr(unsigned i) const { CALLSITE_DELEGATE_GETTER(paramHasNoAliasAttr(i)); } + bool paramHasNoCaptureAttr(unsigned i) const { + CALLSITE_DELEGATE_GETTER(paramHasNoCaptureAttr(i)); + } /// paramHasAttr - whether the call or the callee has the given attribute. bool paramHasAttr(uint16_t i, Attributes attr) const { @@ -267,12 +270,12 @@ public: /// @brief Determine whether this argument is not captured. bool doesNotCapture(unsigned ArgNo) const { - return paramHasAttr(ArgNo + 1, Attribute::NoCapture); + return paramHasNoCaptureAttr(ArgNo + 1); } /// @brief Determine whether this argument is passed by value. bool isByValArgument(unsigned ArgNo) const { - return paramHasAttr(ArgNo + 1, Attribute::ByVal); + return paramHasByValAttr(ArgNo + 1); } /// hasArgument - Returns true if this CallSite passes the given Value* as an diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp index 9b700451bee..e3cbf220d4a 100644 --- a/lib/VMCore/Instructions.cpp +++ b/lib/VMCore/Instructions.cpp @@ -398,6 +398,14 @@ bool CallInst::paramHasNoAliasAttr(unsigned i) const { return false; } +bool CallInst::paramHasNoCaptureAttr(unsigned i) const { + if (AttributeList.getParamAttributes(i).hasNoCaptureAttr()) + return true; + if (const Function *F = getCalledFunction()) + return F->getParamAttributes(i).hasNoCaptureAttr(); + return false; +} + bool CallInst::paramHasAttr(unsigned i, Attributes attr) const { if (AttributeList.paramHasAttr(i, attr)) return true; @@ -674,6 +682,14 @@ bool InvokeInst::paramHasNoAliasAttr(unsigned i) const { return false; } +bool InvokeInst::paramHasNoCaptureAttr(unsigned i) const { + if (AttributeList.getParamAttributes(i).hasNoCaptureAttr()) + return true; + if (const Function *F = getCalledFunction()) + return F->getParamAttributes(i).hasNoCaptureAttr(); + return false; +} + bool InvokeInst::paramHasAttr(unsigned i, Attributes attr) const { if (AttributeList.paramHasAttr(i, attr)) return true;