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

Nick Lewycky nicholas at mxc.ca
Wed Oct 14 23:12:13 PDT 2009


Author: nicholas
Date: Thu Oct 15 01:12:11 2009
New Revision: 84174

URL: http://llvm.org/viewvc/llvm-project?rev=84174&view=rev
Log:
Teach BasicAA to use the size parameter of the memory use marker intrinsics.

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=84174&r1=84173&r2=84174&view=diff

==============================================================================
--- llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp (original)
+++ llvm/trunk/lib/Analysis/BasicAliasAnalysis.cpp Thu Oct 15 01:12:11 2009
@@ -307,29 +307,40 @@
         return NoModRef;
     }
 
-    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: {
+    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 (TD) {
           Value *Op1 = II->getOperand(1);
           unsigned Op1Size = TD->getTypeStoreSize(Op1->getType());
           if (alias(Op1, Op1Size, P, Size) == NoAlias)
             return NoModRef;
-          break;
-        }
         }
+        break;
+      case Intrinsic::lifetime_start:
+      case Intrinsic::lifetime_end:
+      case Intrinsic::invariant_start: {
+        unsigned PtrSize = cast<ConstantInt>(II->getOperand(1))->getZExtValue();
+        if (alias(II->getOperand(2), PtrSize, P, Size) == NoAlias)
+          return NoModRef;
+      }
+      case Intrinsic::invariant_end: {
+        unsigned PtrSize = cast<ConstantInt>(II->getOperand(2))->getZExtValue();
+        if (alias(II->getOperand(3), PtrSize, P, Size) == NoAlias)
+          return NoModRef;
+      }
       }
     }
   }





More information about the llvm-commits mailing list