[PATCH] D9379: llvm.noalias - don't interfere with llvm.assume
Hal Finkel via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 3 15:19:55 PDT 2016
hfinkel updated this revision to Diff 73355.
hfinkel added a comment.
Rebased
https://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
@@ -453,6 +453,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.73355.patch
Type: text/x-patch
Size: 1356 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20161003/e0f0a234/attachment.bin>
More information about the llvm-commits
mailing list