From: Bill Wendling Date: Tue, 9 Oct 2012 21:49:51 +0000 (+0000) Subject: Use the attribute enums to query if a function has an attribute. X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ff758fbd45dfd0b5b60a2f742d0e7bc8aca1ee79;p=platform%2Fupstream%2Fllvm.git Use the attribute enums to query if a function has an attribute. llvm-svn: 165551 --- diff --git a/llvm/include/llvm/Instructions.h b/llvm/include/llvm/Instructions.h index ea3aaae..17b75b0 100644 --- a/llvm/include/llvm/Instructions.h +++ b/llvm/include/llvm/Instructions.h @@ -1268,13 +1268,7 @@ public: void removeAttribute(unsigned i, Attributes attr); /// @brief Determine whether this call has the given attribute. - bool fnHasNoAliasAttr() const; - bool fnHasNoInlineAttr() const; - bool fnHasNoReturnAttr() const; - bool fnHasNoUnwindAttr() const; - bool fnHasReadNoneAttr() const; - bool fnHasReadOnlyAttr() const; - bool fnHasReturnsTwiceAttr() const; + bool hasFnAttr(Attributes::AttrVal A) const; /// @brief Determine whether the call or the callee has the given attributes. bool paramHasAttr(unsigned i, Attributes::AttrVal A) const; @@ -1285,7 +1279,7 @@ public: } /// @brief Return true if the call should not be inlined. - bool isNoInline() const { return fnHasNoInlineAttr(); } + bool isNoInline() const { return hasFnAttr(Attributes::NoInline); } void setIsNoInline(bool Value = true) { if (Value) addAttribute(~0, Attribute::NoInline); else removeAttribute(~0, Attribute::NoInline); @@ -1293,7 +1287,7 @@ public: /// @brief Return true if the call can return twice bool canReturnTwice() const { - return fnHasReturnsTwiceAttr(); + return hasFnAttr(Attributes::ReturnsTwice); } void setCanReturnTwice(bool Value = true) { if (Value) addAttribute(~0, Attribute::ReturnsTwice); @@ -1302,7 +1296,7 @@ public: /// @brief Determine if the call does not access memory. bool doesNotAccessMemory() const { - return fnHasReadNoneAttr(); + return hasFnAttr(Attributes::ReadNone); } void setDoesNotAccessMemory(bool NotAccessMemory = true) { if (NotAccessMemory) addAttribute(~0, Attribute::ReadNone); @@ -1311,7 +1305,7 @@ public: /// @brief Determine if the call does not access or only reads memory. bool onlyReadsMemory() const { - return doesNotAccessMemory() || fnHasReadOnlyAttr(); + return doesNotAccessMemory() || hasFnAttr(Attributes::ReadOnly); } void setOnlyReadsMemory(bool OnlyReadsMemory = true) { if (OnlyReadsMemory) addAttribute(~0, Attribute::ReadOnly); @@ -1319,14 +1313,14 @@ public: } /// @brief Determine if the call cannot return. - bool doesNotReturn() const { return fnHasNoReturnAttr(); } + bool doesNotReturn() const { return hasFnAttr(Attributes::NoReturn); } void setDoesNotReturn(bool DoesNotReturn = true) { if (DoesNotReturn) addAttribute(~0, Attribute::NoReturn); else removeAttribute(~0, Attribute::NoReturn); } /// @brief Determine if the call cannot unwind. - bool doesNotThrow() const { return fnHasNoUnwindAttr(); } + bool doesNotThrow() const { return hasFnAttr(Attributes::NoUnwind); } void setDoesNotThrow(bool DoesNotThrow = true) { if (DoesNotThrow) addAttribute(~0, Attribute::NoUnwind); else removeAttribute(~0, Attribute::NoUnwind); @@ -3037,13 +3031,7 @@ public: void removeAttribute(unsigned i, Attributes attr); /// @brief Determine whether this call has the NoAlias attribute. - bool fnHasNoAliasAttr() const; - bool fnHasNoInlineAttr() const; - bool fnHasNoReturnAttr() const; - bool fnHasNoUnwindAttr() const; - bool fnHasReadNoneAttr() const; - bool fnHasReadOnlyAttr() const; - bool fnHasReturnsTwiceAttr() const; + bool hasFnAttr(Attributes::AttrVal A) const; /// @brief Determine whether the call or the callee has the given attributes. bool paramHasAttr(unsigned i, Attributes::AttrVal A) const; @@ -3054,7 +3042,7 @@ public: } /// @brief Return true if the call should not be inlined. - bool isNoInline() const { return fnHasNoInlineAttr(); } + bool isNoInline() const { return hasFnAttr(Attributes::NoInline); } void setIsNoInline(bool Value = true) { if (Value) addAttribute(~0, Attribute::NoInline); else removeAttribute(~0, Attribute::NoInline); @@ -3062,7 +3050,7 @@ public: /// @brief Determine if the call does not access memory. bool doesNotAccessMemory() const { - return fnHasReadNoneAttr(); + return hasFnAttr(Attributes::ReadNone); } void setDoesNotAccessMemory(bool NotAccessMemory = true) { if (NotAccessMemory) addAttribute(~0, Attribute::ReadNone); @@ -3071,7 +3059,7 @@ public: /// @brief Determine if the call does not access or only reads memory. bool onlyReadsMemory() const { - return doesNotAccessMemory() || fnHasReadOnlyAttr(); + return doesNotAccessMemory() || hasFnAttr(Attributes::ReadOnly); } void setOnlyReadsMemory(bool OnlyReadsMemory = true) { if (OnlyReadsMemory) addAttribute(~0, Attribute::ReadOnly); @@ -3079,14 +3067,14 @@ public: } /// @brief Determine if the call cannot return. - bool doesNotReturn() const { return fnHasNoReturnAttr(); } + bool doesNotReturn() const { return hasFnAttr(Attributes::NoReturn); } void setDoesNotReturn(bool DoesNotReturn = true) { if (DoesNotReturn) addAttribute(~0, Attribute::NoReturn); else removeAttribute(~0, Attribute::NoReturn); } /// @brief Determine if the call cannot unwind. - bool doesNotThrow() const { return fnHasNoUnwindAttr(); } + bool doesNotThrow() const { return hasFnAttr(Attributes::NoUnwind); } void setDoesNotThrow(bool DoesNotThrow = true) { if (DoesNotThrow) addAttribute(~0, Attribute::NoUnwind); else removeAttribute(~0, Attribute::NoUnwind); diff --git a/llvm/include/llvm/Support/CallSite.h b/llvm/include/llvm/Support/CallSite.h index c15326e..1b25897 100644 --- a/llvm/include/llvm/Support/CallSite.h +++ b/llvm/include/llvm/Support/CallSite.h @@ -185,29 +185,8 @@ public: } /// \brief Return true if this function has the given attribute. - bool fnHasNoAliasAttr() const { - CALLSITE_DELEGATE_GETTER(fnHasNoAliasAttr()); - } - bool fnHasNoInlineAttr() const { - CALLSITE_DELEGATE_GETTER(fnHasNoInlineAttr()); - } - bool fnHasNoReturnAttr() const { - CALLSITE_DELEGATE_GETTER(fnHasNoReturnAttr()); - } - bool fnHasNoUnwindAttr() const { - CALLSITE_DELEGATE_GETTER(fnHasNoUnwindAttr()); - } - bool fnHasReadNoneAttr() const { - CALLSITE_DELEGATE_GETTER(fnHasReadNoneAttr()); - } - bool fnHasReadOnlyAttr() const { - CALLSITE_DELEGATE_GETTER(fnHasReadOnlyAttr()); - } - bool fnHasReturnsTwiceAttr() const { - CALLSITE_DELEGATE_GETTER(fnHasReturnsTwiceAttr()); - } - bool hasFnAttr(Attributes N) const { - CALLSITE_DELEGATE_GETTER(hasFnAttr(N)); + bool hasFnAttr(Attributes::AttrVal A) const { + CALLSITE_DELEGATE_GETTER(hasFnAttr(A)); } /// \brief Return true if the call or the callee has the given attribute. diff --git a/llvm/lib/Analysis/MemoryBuiltins.cpp b/llvm/lib/Analysis/MemoryBuiltins.cpp index 7ca670c..0a539fe 100644 --- a/llvm/lib/Analysis/MemoryBuiltins.cpp +++ b/llvm/lib/Analysis/MemoryBuiltins.cpp @@ -132,7 +132,7 @@ static const AllocFnsTy *getAllocationData(const Value *V, AllocType AllocTy, static bool hasNoAliasAttr(const Value *V, bool LookThroughBitCast) { ImmutableCallSite CS(LookThroughBitCast ? V->stripPointerCasts() : V); - return CS && CS.fnHasNoAliasAttr(); + return CS && CS.hasFnAttr(Attributes::NoAlias); } diff --git a/llvm/lib/VMCore/Instructions.cpp b/llvm/lib/VMCore/Instructions.cpp index 0a097b8..74c0c6e 100644 --- a/llvm/lib/VMCore/Instructions.cpp +++ b/llvm/lib/VMCore/Instructions.cpp @@ -342,54 +342,11 @@ void CallInst::removeAttribute(unsigned i, Attributes attr) { setAttributes(PAL); } -bool CallInst::fnHasNoAliasAttr() const { - if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::NoAlias)) +bool CallInst::hasFnAttr(Attributes::AttrVal A) const { + if (AttributeList.getParamAttributes(~0U).hasAttribute(A)) return true; if (const Function *F = getCalledFunction()) - return F->getParamAttributes(~0U).hasAttribute(Attributes::NoAlias); - return false; -} -bool CallInst::fnHasNoInlineAttr() const { - if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::NoInline)) - return true; - if (const Function *F = getCalledFunction()) - return F->getParamAttributes(~0U).hasAttribute(Attributes::NoInline); - return false; -} -bool CallInst::fnHasNoReturnAttr() const { - if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::NoReturn)) - return true; - if (const Function *F = getCalledFunction()) - return F->getParamAttributes(~0U).hasAttribute(Attributes::NoReturn); - return false; -} -bool CallInst::fnHasNoUnwindAttr() const { - if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::NoUnwind)) - return true; - if (const Function *F = getCalledFunction()) - return F->getParamAttributes(~0U).hasAttribute(Attributes::NoUnwind); - return false; -} -bool CallInst::fnHasReadNoneAttr() const { - if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::ReadNone)) - return true; - if (const Function *F = getCalledFunction()) - return F->getParamAttributes(~0U).hasAttribute(Attributes::ReadNone); - return false; -} -bool CallInst::fnHasReadOnlyAttr() const { - if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::ReadOnly)) - return true; - if (const Function *F = getCalledFunction()) - return F->getParamAttributes(~0U).hasAttribute(Attributes::ReadOnly); - return false; -} -bool CallInst::fnHasReturnsTwiceAttr() const { - if (AttributeList.getParamAttributes(~0U). - hasAttribute(Attributes::ReturnsTwice)) - return true; - if (const Function *F = getCalledFunction()) - return F->getParamAttributes(~0U).hasAttribute(Attributes::ReturnsTwice); + return F->getParamAttributes(~0U).hasAttribute(A); return false; } @@ -613,54 +570,11 @@ void InvokeInst::setSuccessorV(unsigned idx, BasicBlock *B) { return setSuccessor(idx, B); } -bool InvokeInst::fnHasNoAliasAttr() const { - if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::NoAlias)) - return true; - if (const Function *F = getCalledFunction()) - return F->getParamAttributes(~0U).hasAttribute(Attributes::NoAlias); - return false; -} -bool InvokeInst::fnHasNoInlineAttr() const { - if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::NoInline)) - return true; - if (const Function *F = getCalledFunction()) - return F->getParamAttributes(~0U).hasAttribute(Attributes::NoInline); - return false; -} -bool InvokeInst::fnHasNoReturnAttr() const { - if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::NoReturn)) - return true; - if (const Function *F = getCalledFunction()) - return F->getParamAttributes(~0U).hasAttribute(Attributes::NoReturn); - return false; -} -bool InvokeInst::fnHasNoUnwindAttr() const { - if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::NoUnwind)) - return true; - if (const Function *F = getCalledFunction()) - return F->getParamAttributes(~0U).hasAttribute(Attributes::NoUnwind); - return false; -} -bool InvokeInst::fnHasReadNoneAttr() const { - if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::ReadNone)) - return true; - if (const Function *F = getCalledFunction()) - return F->getParamAttributes(~0U).hasAttribute(Attributes::ReadNone); - return false; -} -bool InvokeInst::fnHasReadOnlyAttr() const { - if (AttributeList.getParamAttributes(~0U).hasAttribute(Attributes::ReadOnly)) - return true; - if (const Function *F = getCalledFunction()) - return F->getParamAttributes(~0U).hasAttribute(Attributes::ReadOnly); - return false; -} -bool InvokeInst::fnHasReturnsTwiceAttr() const { - if (AttributeList.getParamAttributes(~0U). - hasAttribute(Attributes::ReturnsTwice)) +bool InvokeInst::hasFnAttr(Attributes::AttrVal A) const { + if (AttributeList.getParamAttributes(~0U).hasAttribute(A)) return true; if (const Function *F = getCalledFunction()) - return F->getParamAttributes(~0U).hasAttribute(Attributes::ReturnsTwice); + return F->getParamAttributes(~0U).hasAttribute(A); return false; }