Add method to query for 'NoAlias' attribute on call/invoke instructions.
authorBill Wendling <isanbard@gmail.com>
Thu, 4 Oct 2012 06:52:09 +0000 (06:52 +0000)
committerBill Wendling <isanbard@gmail.com>
Thu, 4 Oct 2012 06:52:09 +0000 (06:52 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165208 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Instructions.h
include/llvm/Support/CallSite.h
lib/Transforms/IPO/FunctionAttrs.cpp
lib/VMCore/Instructions.cpp

index a607c84c5bc96db6e3c1d382aa8bc6a5001e7c74..711bced70ff46fd1e95fc78601539c080e33a3ae 100644 (file)
@@ -1279,6 +1279,7 @@ public:
   bool paramHasStructRetAttr(unsigned i) const;
   bool paramHasNestAttr(unsigned i) const;
   bool paramHasByValAttr(unsigned i) const;
+  bool paramHasNoAliasAttr(unsigned i) const;
 
   /// @brief Determine whether the call or the callee has the given attribute.
   bool paramHasAttr(unsigned i, Attributes attr) const;
@@ -3049,6 +3050,7 @@ public:
   bool paramHasStructRetAttr(unsigned i) const;
   bool paramHasNestAttr(unsigned i) const;
   bool paramHasByValAttr(unsigned i) const;
+  bool paramHasNoAliasAttr(unsigned i) const;
 
   /// @brief Determine whether the call or the callee has the given attribute.
   bool paramHasAttr(unsigned i, Attributes attr) const;
index 3e1a2f582274167916c1051e0b7e468194670a0e..98c48d9aaaf9767dffd952cb2ba13f0707c86283 100644 (file)
@@ -208,6 +208,9 @@ public:
   bool paramHasByValAttr(unsigned i) const {
     CALLSITE_DELEGATE_GETTER(paramHasByValAttr(i));
   }
+  bool paramHasNoAliasAttr(unsigned i) const {
+    CALLSITE_DELEGATE_GETTER(paramHasNoAliasAttr(i));
+  }
 
   /// paramHasAttr - whether the call or the callee has the given attribute.
   bool paramHasAttr(uint16_t i, Attributes attr) const {
index f3f622843340f8a0caf13468a5b73072af1f9295..f974bd0c045ce8939e8e0da56cfc9de7ff084281 100644 (file)
@@ -520,7 +520,7 @@ bool FunctionAttrs::IsFunctionMallocLike(Function *F,
         case Instruction::Call:
         case Instruction::Invoke: {
           CallSite CS(RVI);
-          if (CS.paramHasAttr(0, Attribute::NoAlias))
+          if (CS.paramHasNoAliasAttr(0))
             break;
           if (CS.getCalledFunction() &&
               SCCNodes.count(CS.getCalledFunction()))
index b3acbc42410f73770fa506200de0d4e60debad58..9b700451beee05c5c93bb85553dde531edaff27e 100644 (file)
@@ -390,6 +390,14 @@ bool CallInst::paramHasByValAttr(unsigned i) const {
   return false;
 }
 
+bool CallInst::paramHasNoAliasAttr(unsigned i) const {
+  if (AttributeList.getParamAttributes(i).hasNoAliasAttr())
+    return true;
+  if (const Function *F = getCalledFunction())
+    return F->getParamAttributes(i).hasNoAliasAttr();
+  return false;
+}
+
 bool CallInst::paramHasAttr(unsigned i, Attributes attr) const {
   if (AttributeList.paramHasAttr(i, attr))
     return true;
@@ -658,6 +666,14 @@ bool InvokeInst::paramHasByValAttr(unsigned i) const {
   return false;
 }
 
+bool InvokeInst::paramHasNoAliasAttr(unsigned i) const {
+  if (AttributeList.getParamAttributes(i).hasNoAliasAttr())
+    return true;
+  if (const Function *F = getCalledFunction())
+    return F->getParamAttributes(i).hasNoAliasAttr();
+  return false;
+}
+
 bool InvokeInst::paramHasAttr(unsigned i, Attributes attr) const {
   if (AttributeList.paramHasAttr(i, attr))
     return true;