Use the attribute enums to query if a function has an attribute.
authorBill Wendling <isanbard@gmail.com>
Tue, 9 Oct 2012 21:49:51 +0000 (21:49 +0000)
committerBill Wendling <isanbard@gmail.com>
Tue, 9 Oct 2012 21:49:51 +0000 (21:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165551 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Instructions.h
include/llvm/Support/CallSite.h
lib/Analysis/MemoryBuiltins.cpp
lib/VMCore/Instructions.cpp

index ea3aaae9c6f6b456245da0a06386701eb0229005..17b75b077fb5950246a1e4b0261d3d77ce1ad8cd 100644 (file)
@@ -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);
index c15326ee95fb217a7970c31107b392f5d617d334..1b2589764695e0fbaae827bd636d974ba941ce86 100644 (file)
@@ -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.
index 7ca670c286d3768600331f90e6f3d2df16532827..0a539fe7582579f227441af90ecf11c7dc850a2f 100644 (file)
@@ -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);
 }
 
 
index 0a097b8be201acfe4b4ae0a059fc9b1e4c5859c5..74c0c6e1d97fe8079b9555601eac88e0b2402316 100644 (file)
@@ -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;
 }