diff options
-rw-r--r-- | include/llvm/Instructions.h | 2 | ||||
-rw-r--r-- | include/llvm/Support/CallSite.h | 7 | ||||
-rw-r--r-- | lib/VMCore/Instructions.cpp | 16 |
3 files changed, 23 insertions, 2 deletions
diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h index 711bced..5ff1c37 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 98c48d9..3c5a8d4 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 9b70045..e3cbf22 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; |