[llvm-commits] [llvm] r84159 - /llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp

Nick Lewycky nicholas at mxc.ca
Wed Oct 14 17:36:35 PDT 2009


Author: nicholas
Date: Wed Oct 14 19:36:35 2009
New Revision: 84159

URL: http://llvm.org/viewvc/llvm-project?rev=84159&view=rev
Log:
Take advantage of TargetData when available; we know that the atomic intrinsics
only dereference the element they point to directly with no pointer arithmetic.

Modified:
    llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp

Modified: llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp?rev=84159&r1=84158&r2=84159&view=diff

==============================================================================
--- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original)
+++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Wed Oct 14 19:36:35 2009
@@ -307,24 +307,29 @@
         return NoModRef;
     }
 
-    if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(CS.getInstruction())) {
-      switch (II->getIntrinsicID()) {
-      default: break;
-      case Intrinsic::atomic_cmp_swap:
-      case Intrinsic::atomic_swap:
-      case Intrinsic::atomic_load_add:
-      case Intrinsic::atomic_load_sub:
-      case Intrinsic::atomic_load_and:
-      case Intrinsic::atomic_load_nand:
-      case Intrinsic::atomic_load_or:
-      case Intrinsic::atomic_load_xor:
-      case Intrinsic::atomic_load_max:
-      case Intrinsic::atomic_load_min:
-      case Intrinsic::atomic_load_umax:
-      case Intrinsic::atomic_load_umin:
-        if (alias(II->getOperand(1), Size, P, Size) == NoAlias)
-          return NoModRef;
-        break;
+    if (TD) {
+      if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(CS.getInstruction())) {
+        switch (II->getIntrinsicID()) {
+        default: break;
+        case Intrinsic::atomic_cmp_swap:
+        case Intrinsic::atomic_swap:
+        case Intrinsic::atomic_load_add:
+        case Intrinsic::atomic_load_sub:
+        case Intrinsic::atomic_load_and:
+        case Intrinsic::atomic_load_nand:
+        case Intrinsic::atomic_load_or:
+        case Intrinsic::atomic_load_xor:
+        case Intrinsic::atomic_load_max:
+        case Intrinsic::atomic_load_min:
+        case Intrinsic::atomic_load_umax:
+        case Intrinsic::atomic_load_umin: {
+          Value *Op1 = II->getOperand(1);
+          unsigned Op1Size = TD->getTypeStoreSize(Op1->getType());
+          if (alias(Op1, Op1Size, P, Size) == NoAlias)
+            return NoModRef;
+          break;
+        }
+        }
       }
     }
   }





More information about the llvm-commits mailing list