[PATCH] D9379: llvm.noalias - don't interfere with llvm.assume

Hal Finkel via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 8 15:49:30 PDT 2016


hfinkel updated this revision to Diff 63339.
hfinkel added a comment.
Herald added a subscriber: mcrosier.

Rebased.


http://reviews.llvm.org/D9379

Files:
  lib/Analysis/ValueTracking.cpp
  test/Transforms/InstCombine/assume.ll

Index: test/Transforms/InstCombine/assume.ll
===================================================================
--- test/Transforms/InstCombine/assume.ll
+++ test/Transforms/InstCombine/assume.ll
@@ -257,8 +257,26 @@
 ; CHECK: call void @llvm.assume
 }
 
+define i1 @nonnull5(i32** %a) {
+entry:
+  %load = load i32*, i32** %a
+  ;; This call cannot actually trap, and so should not disrupt the assume.
+  %v = call i32* @llvm.noalias.p0i32(i32* %load, metadata !1)
+  %cmp = icmp ne i32* %load, null
+  tail call void @llvm.assume(i1 %cmp)
+  %q = bitcast i32** %a to i32*
+  %rval = icmp eq i32* %v, %q
+  ret i1 %rval
+
+; CHECK-LABEL: @nonnull5
+; CHECK: !nonnull
+; CHECK-NOT: call void @llvm.assume
+}
 
+declare i32* @llvm.noalias.p0i32(i32*, metadata) nounwind
 
+!0 = !{!0, !"some domain"}
+!1 = !{!1, !0, !"some scope"}
 
 attributes #0 = { nounwind uwtable }
 attributes #1 = { nounwind }
Index: lib/Analysis/ValueTracking.cpp
===================================================================
--- lib/Analysis/ValueTracking.cpp
+++ lib/Analysis/ValueTracking.cpp
@@ -447,6 +447,7 @@
       case Intrinsic::invariant_end:
       case Intrinsic::lifetime_start:
       case Intrinsic::lifetime_end:
+      case Intrinsic::noalias:
       case Intrinsic::objectsize:
       case Intrinsic::ptr_annotation:
       case Intrinsic::var_annotation:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D9379.63339.patch
Type: text/x-patch
Size: 1356 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160708/77f4fce8/attachment.bin>


More information about the llvm-commits mailing list