From 2fa8af224ea026f9432e833fd6f42a216423a010 Mon Sep 17 00:00:00 2001 From: Bill Wendling Date: Tue, 9 Oct 2012 21:49:51 +0000 Subject: [PATCH] Use the attribute enums to query if a function has an attribute. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165551 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Instructions.h | 38 +++++-------- include/llvm/Support/CallSite.h | 25 +-------- lib/Analysis/MemoryBuiltins.cpp | 2 +- lib/VMCore/Instructions.cpp | 98 ++------------------------------- 4 files changed, 22 insertions(+), 141 deletions(-) diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h index ea3aaae9c6f..17b75b077fb 100644 --- a/include/llvm/Instructions.h +++ b/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/include/llvm/Support/CallSite.h b/include/llvm/Support/CallSite.h index c15326ee95f..1b258976469 100644 --- a/include/llvm/Support/CallSite.h +++ b/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/lib/Analysis/MemoryBuiltins.cpp b/lib/Analysis/MemoryBuiltins.cpp index 7ca670c286d..0a539fe7582 100644 --- a/lib/Analysis/MemoryBuiltins.cpp +++ b/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/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp index 0a097b8be20..74c0c6e1d97 100644 --- a/lib/VMCore/Instructions.cpp +++ b/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; } -- 2.34.1