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

hfinkel at anl.gov hfinkel at anl.gov
Thu Apr 30 08:17:50 PDT 2015


Hi chandlerc, reames,

This is part of the series started by D9375, and adds llvm.noalias to the list of intrinsics ignored when searching for relevant assumptions (it can be ignored because it can't trap, etc.).

http://reviews.llvm.org/D9379

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

Index: lib/Analysis/ValueTracking.cpp
===================================================================
--- lib/Analysis/ValueTracking.cpp
+++ lib/Analysis/ValueTracking.cpp
@@ -403,6 +403,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:
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 }

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D9379.24713.patch
Type: text/x-patch
Size: 1356 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150430/344201fb/attachment.bin>


More information about the llvm-commits mailing list