]> granicus.if.org Git - llvm/commitdiff
[InstCombine] tighten checks for tests of assume -> metadata transform; NFC
authorSanjay Patel <spatel@rotateright.com>
Tue, 3 Jan 2017 19:32:11 +0000 (19:32 +0000)
committerSanjay Patel <spatel@rotateright.com>
Tue, 3 Jan 2017 19:32:11 +0000 (19:32 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290903 91177308-0d34-0410-b5e6-96231b3b80d8

test/Transforms/InstCombine/assume.ll

index 2f9213820f2b5b7a3fe5262b654e97286180ff3a..7987aa24231997a4bd2954d890684b36a49db0e3 100644 (file)
@@ -188,41 +188,56 @@ entry:
 
 declare void @escape(i32* %a)
 
-; Do we canonicalize a nonnull assumption on a load into
-; metadata form?
+; Canonicalize a nonnull assumption on a load into metadata form.
+
 define i1 @nonnull1(i32** %a) {
-entry:
+; CHECK-LABEL: @nonnull1(
+; CHECK-NEXT:    [[LOAD:%.*]] = load i32*, i32** %a, align 8, !nonnull !0
+; CHECK-NEXT:    tail call void @escape(i32* nonnull [[LOAD]])
+; CHECK-NEXT:    ret i1 false
+;
   %load = load i32*, i32** %a
   %cmp = icmp ne i32* %load, null
   tail call void @llvm.assume(i1 %cmp)
   tail call void @escape(i32* %load)
   %rval = icmp eq i32* %load, null
   ret i1 %rval
-
-; CHECK-LABEL: @nonnull1
-; CHECK: !nonnull
-; CHECK-NOT: call void @llvm.assume
-; CHECK: ret i1 false
 }
 
 ; Make sure the above canonicalization applies only
 ; to pointer types.  Doing otherwise would be illegal.
+
 define i1 @nonnull2(i32* %a) {
-entry:
+; CHECK-LABEL: @nonnull2(
+; CHECK-NEXT:    [[LOAD:%.*]] = load i32, i32* %a, align 4
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ne i32 [[LOAD]], 0
+; CHECK-NEXT:    tail call void @llvm.assume(i1 [[CMP]])
+; CHECK-NEXT:    [[RVAL:%.*]] = icmp eq i32 [[LOAD]], 0
+; CHECK-NEXT:    ret i1 [[RVAL]]
+;
   %load = load i32, i32* %a
   %cmp = icmp ne i32 %load, 0
   tail call void @llvm.assume(i1 %cmp)
   %rval = icmp eq i32 %load, 0
   ret i1 %rval
-
-; CHECK-LABEL: @nonnull2
-; CHECK-NOT: !nonnull
-; CHECK: call void @llvm.assume
 }
 
 ; Make sure the above canonicalization does not trigger
 ; if the assume is control dependent on something else
+
 define i1 @nonnull3(i32** %a, i1 %control) {
+; CHECK-LABEL: @nonnull3(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[LOAD:%.*]] = load i32*, i32** %a, align 8
+; CHECK-NEXT:    br i1 %control, label %taken, label %not_taken
+; CHECK:       taken:
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ne i32* [[LOAD]], null
+; CHECK-NEXT:    tail call void @llvm.assume(i1 [[CMP]])
+; CHECK-NEXT:    [[RVAL:%.*]] = icmp eq i32* [[LOAD]], null
+; CHECK-NEXT:    ret i1 [[RVAL]]
+; CHECK:       not_taken:
+; CHECK-NEXT:    ret i1 true
+;
 entry:
   %load = load i32*, i32** %a
   %cmp = icmp ne i32* %load, null
@@ -233,17 +248,21 @@ taken:
   ret i1 %rval
 not_taken:
   ret i1 true
-
-; CHECK-LABEL: @nonnull3
-; CHECK-NOT: !nonnull
-; CHECK: call void @llvm.assume
 }
 
 ; Make sure the above canonicalization does not trigger
-; if the path from the load to the assume is potentially 
+; if the path from the load to the assume is potentially
 ; interrupted by an exception being thrown
+
 define i1 @nonnull4(i32** %a) {
-entry:
+; CHECK-LABEL: @nonnull4(
+; CHECK-NEXT:    [[LOAD:%.*]] = load i32*, i32** %a, align 8
+; CHECK-NEXT:    tail call void @escape(i32* [[LOAD]])
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ne i32* [[LOAD]], null
+; CHECK-NEXT:    tail call void @llvm.assume(i1 [[CMP]])
+; CHECK-NEXT:    [[RVAL:%.*]] = icmp eq i32* [[LOAD]], null
+; CHECK-NEXT:    ret i1 [[RVAL]]
+;
   %load = load i32*, i32** %a
   ;; This call may throw!
   tail call void @escape(i32* %load)
@@ -251,15 +270,9 @@ entry:
   tail call void @llvm.assume(i1 %cmp)
   %rval = icmp eq i32* %load, null
   ret i1 %rval
-
-; CHECK-LABEL: @nonnull4
-; CHECK-NOT: !nonnull
-; CHECK: call void @llvm.assume
 }
 
 
-
-
 attributes #0 = { nounwind uwtable }
 attributes #1 = { nounwind }