[llvm] r317023 - [SimplifyCFG] Regenerate some test cases using update_test_checks.py to prepare for an upcoming commit. NFC

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 31 12:03:50 PDT 2017


Author: ctopper
Date: Tue Oct 31 12:03:49 2017
New Revision: 317023

URL: http://llvm.org/viewvc/llvm-project?rev=317023&view=rev
Log:
[SimplifyCFG] Regenerate some test cases using update_test_checks.py to prepare for an upcoming commit. NFC

A future commit will change how some of the value names in the IR are generated which causes these tests to break in their current form. The script generates checks with regular expressions so it should be immune.

Modified:
    llvm/trunk/test/Transforms/SimplifyCFG/SpeculativeExec.ll
    llvm/trunk/test/Transforms/SimplifyCFG/guards.ll
    llvm/trunk/test/Transforms/SimplifyCFG/merge-cond-stores-2.ll
    llvm/trunk/test/Transforms/SimplifyCFG/multiple-phis.ll
    llvm/trunk/test/Transforms/SimplifyCFG/select-gep.ll

Modified: llvm/trunk/test/Transforms/SimplifyCFG/SpeculativeExec.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyCFG/SpeculativeExec.ll?rev=317023&r1=317022&r2=317023&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/SimplifyCFG/SpeculativeExec.ll (original)
+++ llvm/trunk/test/Transforms/SimplifyCFG/SpeculativeExec.ll Tue Oct 31 12:03:49 2017
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s -simplifycfg -phi-node-folding-threshold=2 -S | FileCheck %s
 
 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
@@ -5,33 +6,62 @@ target triple = "x86_64-unknown-linux-gn
 
 define i32 @test1(i32 %a, i32 %b, i32 %c) nounwind  {
 ; CHECK-LABEL: @test1(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i32 [[B:%.*]], 0
+; CHECK-NEXT:    br i1 [[TMP1]], label [[BB1:%.*]], label [[BB3:%.*]]
+; CHECK:       bb1:
+; CHECK-NEXT:    [[TMP2:%.*]] = icmp sgt i32 [[C:%.*]], 1
+; CHECK-NEXT:    [[TMP3:%.*]] = add i32 [[A:%.*]], 1
+; CHECK-NEXT:    [[TMP3_A:%.*]] = select i1 [[TMP2]], i32 [[TMP3]], i32 [[A]]
+; CHECK-NEXT:    br label [[BB3]]
+; CHECK:       bb3:
+; CHECK-NEXT:    [[TMP4:%.*]] = phi i32 [ [[B]], [[ENTRY:%.*]] ], [ [[TMP3_A]], [[BB1]] ]
+; CHECK-NEXT:    [[TMP5:%.*]] = sub i32 [[TMP4]], 1
+; CHECK-NEXT:    ret i32 [[TMP5]]
+;
 entry:
-        %tmp1 = icmp eq i32 %b, 0
-        br i1 %tmp1, label %bb1, label %bb3
+  %tmp1 = icmp eq i32 %b, 0
+  br i1 %tmp1, label %bb1, label %bb3
 
 bb1:            ; preds = %entry
-	%tmp2 = icmp sgt i32 %c, 1
-	br i1 %tmp2, label %bb2, label %bb3
-; CHECK: bb1:
-; CHECK-NEXT: icmp sgt i32 %c, 1
-; CHECK-NEXT: add i32 %a, 1
-; CHECK-NEXT: select i1 %tmp2, i32 %tmp3, i32 %a
-; CHECK-NEXT: br label %bb3
+  %tmp2 = icmp sgt i32 %c, 1
+  br i1 %tmp2, label %bb2, label %bb3
 
 bb2:		; preds = bb1
-	%tmp3 = add i32 %a, 1
-	br label %bb3
+  %tmp3 = add i32 %a, 1
+  br label %bb3
 
 bb3:		; preds = %bb2, %entry
-	%tmp4 = phi i32 [ %b, %entry ], [ %a, %bb1 ], [ %tmp3, %bb2 ]
-        %tmp5 = sub i32 %tmp4, 1
-	ret i32 %tmp5
+  %tmp4 = phi i32 [ %b, %entry ], [ %a, %bb1 ], [ %tmp3, %bb2 ]
+  %tmp5 = sub i32 %tmp4, 1
+  ret i32 %tmp5
 }
 
 define i8* @test4(i1* %dummy, i8* %a, i8* %b) {
 ; Test that we don't speculate an arbitrarily large number of unfolded constant
 ; expressions.
 ; CHECK-LABEL: @test4(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[COND1:%.*]] = load volatile i1, i1* [[DUMMY:%.*]]
+; CHECK-NEXT:    br i1 [[COND1]], label [[IF:%.*]], label [[END:%.*]]
+; CHECK:       if:
+; CHECK-NEXT:    [[COND2:%.*]] = load volatile i1, i1* [[DUMMY]]
+; CHECK-NEXT:    br i1 [[COND2]], label [[THEN:%.*]], label [[END]]
+; CHECK:       then:
+; CHECK-NEXT:    br label [[END]]
+; CHECK:       end:
+; CHECK-NEXT:    [[X1:%.*]] = phi i8* [ [[A:%.*]], [[ENTRY:%.*]] ], [ [[B:%.*]], [[IF]] ], [ inttoptr (i64 1 to i8*), [[THEN]] ]
+; CHECK-NEXT:    [[X2:%.*]] = phi i8* [ [[A]], [[ENTRY]] ], [ [[B]], [[IF]] ], [ inttoptr (i64 2 to i8*), [[THEN]] ]
+; CHECK-NEXT:    [[X3:%.*]] = phi i8* [ [[A]], [[ENTRY]] ], [ [[B]], [[IF]] ], [ inttoptr (i64 3 to i8*), [[THEN]] ]
+; CHECK-NEXT:    [[X4:%.*]] = phi i8* [ [[A]], [[ENTRY]] ], [ [[B]], [[IF]] ], [ inttoptr (i64 4 to i8*), [[THEN]] ]
+; CHECK-NEXT:    [[X5:%.*]] = phi i8* [ [[A]], [[ENTRY]] ], [ [[B]], [[IF]] ], [ inttoptr (i64 5 to i8*), [[THEN]] ]
+; CHECK-NEXT:    [[X6:%.*]] = phi i8* [ [[A]], [[ENTRY]] ], [ [[B]], [[IF]] ], [ inttoptr (i64 6 to i8*), [[THEN]] ]
+; CHECK-NEXT:    [[X7:%.*]] = phi i8* [ [[A]], [[ENTRY]] ], [ [[B]], [[IF]] ], [ inttoptr (i64 7 to i8*), [[THEN]] ]
+; CHECK-NEXT:    [[X8:%.*]] = phi i8* [ [[A]], [[ENTRY]] ], [ [[B]], [[IF]] ], [ inttoptr (i64 8 to i8*), [[THEN]] ]
+; CHECK-NEXT:    [[X9:%.*]] = phi i8* [ [[A]], [[ENTRY]] ], [ [[B]], [[IF]] ], [ inttoptr (i64 9 to i8*), [[THEN]] ]
+; CHECK-NEXT:    [[X10:%.*]] = phi i8* [ [[A]], [[ENTRY]] ], [ [[B]], [[IF]] ], [ inttoptr (i64 10 to i8*), [[THEN]] ]
+; CHECK-NEXT:    ret i8* [[X10]]
+;
 
 entry:
   %cond1 = load volatile i1, i1* %dummy
@@ -55,43 +85,37 @@ end:
   %x8 = phi i8* [ %a, %entry ], [ %b, %if ], [ inttoptr (i64 8 to i8*), %then ]
   %x9 = phi i8* [ %a, %entry ], [ %b, %if ], [ inttoptr (i64 9 to i8*), %then ]
   %x10 = phi i8* [ %a, %entry ], [ %b, %if ], [ inttoptr (i64 10 to i8*), %then ]
-; CHECK-NOT: select
-; CHECK: phi i8*
-; CHECK: phi i8*
-; CHECK: phi i8*
-; CHECK: phi i8*
-; CHECK: phi i8*
-; CHECK: phi i8*
-; CHECK: phi i8*
-; CHECK: phi i8*
-; CHECK: phi i8*
-; CHECK: phi i8*
 
   ret i8* %x10
 }
 
 define i32* @test5(i32 %a, i32 %b, i32 %c, i32* dereferenceable(10) %ptr1,
-                  i32* dereferenceable(10) %ptr2, i32** dereferenceable(10) %ptr3) nounwind {
 ; CHECK-LABEL: @test5(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[TMP1:%.*]] = icmp eq i32 [[B:%.*]], 0
+; CHECK-NEXT:    br i1 [[TMP1]], label [[BB1:%.*]], label [[BB3:%.*]]
+; CHECK:       bb1:
+; CHECK-NEXT:    [[TMP2:%.*]] = icmp sgt i32 [[C:%.*]], 1
+; CHECK-NEXT:    [[TMP3:%.*]] = load i32*, i32** [[PTR3:%.*]]
+; CHECK-NEXT:    [[TMP3_PTR2:%.*]] = select i1 [[TMP2]], i32* [[TMP3]], i32* [[PTR2:%.*]]
+; CHECK-NEXT:    ret i32* [[TMP3_PTR2]]
+; CHECK:       bb3:
+; CHECK-NEXT:    ret i32* [[PTR1:%.*]]
+;
+  i32* dereferenceable(10) %ptr2, i32** dereferenceable(10) %ptr3) nounwind {
 entry:
-        %tmp1 = icmp eq i32 %b, 0
-        br i1 %tmp1, label %bb1, label %bb3
+  %tmp1 = icmp eq i32 %b, 0
+  br i1 %tmp1, label %bb1, label %bb3
 
 bb1:            ; preds = %entry
-	%tmp2 = icmp sgt i32 %c, 1
-	br i1 %tmp2, label %bb2, label %bb3
-; CHECK: bb1:
-; CHECK-NEXT: icmp sgt i32 %c, 1
-; CHECK-NEXT: load i32*, i32** %ptr3
-; CHECK-NOT: dereferenceable
-; CHECK-NEXT: select i1 %tmp2, i32* %tmp3, i32* %ptr2
-; CHECK-NEXT: ret i32* %tmp3.ptr2
+  %tmp2 = icmp sgt i32 %c, 1
+  br i1 %tmp2, label %bb2, label %bb3
 
 bb2:		; preds = bb1
-        %tmp3 = load i32*, i32** %ptr3, !dereferenceable !{i64 10}
-	br label %bb3
+  %tmp3 = load i32*, i32** %ptr3, !dereferenceable !{i64 10}
+  br label %bb3
 
 bb3:		; preds = %bb2, %entry
-	%tmp4 = phi i32* [ %ptr1, %entry ], [ %ptr2, %bb1 ], [ %tmp3, %bb2 ]
-	ret i32* %tmp4
+  %tmp4 = phi i32* [ %ptr1, %entry ], [ %ptr2, %bb1 ], [ %tmp3, %bb2 ]
+  ret i32* %tmp4
 }

Modified: llvm/trunk/test/Transforms/SimplifyCFG/guards.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyCFG/guards.ll?rev=317023&r1=317022&r2=317023&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/SimplifyCFG/guards.ll (original)
+++ llvm/trunk/test/Transforms/SimplifyCFG/guards.ll Tue Oct 31 12:03:49 2017
@@ -1,12 +1,14 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -S -simplifycfg < %s | FileCheck %s
 
 declare void @llvm.experimental.guard(i1, ...)
 
 define i32 @f_0(i1 %c) {
 ; CHECK-LABEL: @f_0(
-; CHECK-NEXT: entry:
-; CHECK-NEXT:  call void (i1, ...) @llvm.experimental.guard(i1 false) [ "deopt"() ]
-; CHECK-NEXT:  unreachable
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    call void (i1, ...) @llvm.experimental.guard(i1 false) [ "deopt"() ]
+; CHECK-NEXT:    unreachable
+;
 entry:
   call void(i1, ...) @llvm.experimental.guard(i1 false) [ "deopt"() ]
   ret i32 10
@@ -14,10 +16,15 @@ entry:
 
 define i32 @f_1(i1 %c) {
 ; Demonstrate that we (intentionally) do not simplify a guard on undef
-
 ; CHECK-LABEL: @f_1(
-; CHECK: ret i32 10
-; CHECK: ret i32 20
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    br i1 [[C:%.*]], label [[TRUE:%.*]], label [[FALSE:%.*]]
+; CHECK:       true:
+; CHECK-NEXT:    call void (i1, ...) @llvm.experimental.guard(i1 undef) [ "deopt"() ]
+; CHECK-NEXT:    ret i32 10
+; CHECK:       false:
+; CHECK-NEXT:    ret i32 20
+;
 
 entry:
   br i1 %c, label %true, label %false
@@ -32,6 +39,14 @@ false:
 
 define i32 @f_2(i1 %c, i32* %buf) {
 ; CHECK-LABEL: @f_2(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    br i1 [[C:%.*]], label [[GUARD_BLOCK:%.*]], label [[MERGE_BLOCK:%.*]]
+; CHECK:       guard_block:
+; CHECK-NEXT:    call void (i1, ...) @llvm.experimental.guard(i1 false) [ "deopt"() ]
+; CHECK-NEXT:    unreachable
+; CHECK:       merge_block:
+; CHECK-NEXT:    ret i32 50
+;
 entry:
   br i1 %c, label %guard_block, label %merge_block
 
@@ -43,16 +58,22 @@ guard_block:
 merge_block:
   %to.return = phi i32 [ %val, %guard_block ], [ 50, %entry ]
   ret i32 %to.return
-; CHECK: guard_block:
-; CHECK-NEXT:  call void (i1, ...) @llvm.experimental.guard(i1 false) [ "deopt"() ]
-; CHECK-NEXT:  unreachable
 
-; CHECK: merge_block:
-; CHECK-NEXT:  ret i32 50
 }
 
 define i32 @f_3(i1* %c, i32* %buf) {
 ; CHECK-LABEL: @f_3(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[C0:%.*]] = load volatile i1, i1* [[C:%.*]]
+; CHECK-NEXT:    br i1 [[C0]], label [[GUARD_BLOCK:%.*]], label [[MERGE_BLOCK:%.*]]
+; CHECK:       guard_block:
+; CHECK-NEXT:    call void (i1, ...) @llvm.experimental.guard(i1 false) [ "deopt"() ]
+; CHECK-NEXT:    unreachable
+; CHECK:       merge_block:
+; CHECK-NEXT:    [[C1:%.*]] = load volatile i1, i1* [[C]]
+; CHECK-NEXT:    [[DOT:%.*]] = select i1 [[C1]], i32 50, i32 100
+; CHECK-NEXT:    ret i32 [[DOT]]
+;
 entry:
   %c0 = load volatile i1, i1* %c
   br i1 %c0, label %guard_block, label %merge_block
@@ -75,12 +96,5 @@ right:
   %val.right = phi i32 [ %val, %guard_block ], [ 100, %merge_block ]
   ret i32 %val.right
 
-; CHECK: guard_block:
-; CHECK-NEXT:   call void (i1, ...) @llvm.experimental.guard(i1 false) [ "deopt"() ]
-; CHECK-NEXT:  unreachable
-
-; CHECK: merge_block:
-; CHECK-NEXT:  %c1 = load volatile i1, i1* %c
-; CHECK-NEXT:  [[VAL:%[^ ]]] = select i1 %c1, i32 50, i32 100
-; CHECK-NEXT:  ret i32 [[VAL]]
+
 }

Modified: llvm/trunk/test/Transforms/SimplifyCFG/merge-cond-stores-2.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyCFG/merge-cond-stores-2.ll?rev=317023&r1=317022&r2=317023&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/SimplifyCFG/merge-cond-stores-2.ll (original)
+++ llvm/trunk/test/Transforms/SimplifyCFG/merge-cond-stores-2.ll Tue Oct 31 12:03:49 2017
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -S < %s -simplifycfg -simplifycfg-merge-cond-stores=true -simplifycfg-merge-cond-stores-aggressively=false -phi-node-folding-threshold=2 | FileCheck %s
 
 target datalayout = "e-m:e-p:32:32-i64:64-v128:64:128-a:0:32-n32-S64"
@@ -7,33 +8,138 @@ target triple = "armv7--linux-gnueabihf"
 ; There should be no additional PHIs created at all. The store should be on its own in a predicated
 ; block and there should be no PHIs.
 
-; CHECK-LABEL: @f
-; Exactly 15 phis, as there are 15 in the original test case.
-; CHECK: select
-; CHECK: select
-; CHECK: select
-; CHECK: select
-; CHECK: select
-; CHECK: select
-; CHECK: select
-; CHECK: select
-; CHECK: select
-; CHECK: select
-; CHECK: select
-; CHECK: select
-; CHECK: select
-; CHECK: select
-; CHECK: select
-; CHECK: select
-; CHECK-NOT: select
-; CHECK: br i1 {{.*}}, label %[[L:.*]], label %[[R:.*]]
-; CHECK: [[L]]: ; preds =
-; CHECK-NEXT: store
-; CHECK-NEXT: br label %[[R]]
-; CHECK: [[R]]: ; preds =
-; CHECK-NEXT: ret i32 0
-
 define i32 @f(i32* %b) {
+; CHECK-LABEL: @f(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* [[B:%.*]], align 4
+; CHECK-NEXT:    [[AND:%.*]] = and i32 [[TMP0]], 1
+; CHECK-NEXT:    [[TOBOOL:%.*]] = icmp eq i32 [[AND]], 0
+; CHECK-NEXT:    [[OR:%.*]] = or i32 [[TMP0]], -2147483648
+; CHECK-NEXT:    [[TMP1:%.*]] = select i1 [[TOBOOL]], i32 [[TMP0]], i32 [[OR]]
+; CHECK-NEXT:    [[AND1:%.*]] = and i32 [[TMP1]], 2
+; CHECK-NEXT:    [[TOBOOL2:%.*]] = icmp eq i32 [[AND1]], 0
+; CHECK-NEXT:    [[OR4:%.*]] = or i32 [[TMP1]], 1073741824
+; CHECK-NEXT:    [[DOTOR4:%.*]] = select i1 [[TOBOOL2]], i32 [[TMP1]], i32 [[OR4]]
+; CHECK-NEXT:    [[TMP2:%.*]] = xor i1 [[TOBOOL]], true
+; CHECK-NEXT:    [[TMP3:%.*]] = xor i1 [[TOBOOL2]], true
+; CHECK-NEXT:    [[TMP4:%.*]] = or i1 [[TMP2]], [[TMP3]]
+; CHECK-NEXT:    [[AND6:%.*]] = and i32 [[DOTOR4]], 4
+; CHECK-NEXT:    [[TOBOOL7:%.*]] = icmp eq i32 [[AND6]], 0
+; CHECK-NEXT:    [[OR9:%.*]] = or i32 [[DOTOR4]], 536870912
+; CHECK-NEXT:    [[DOTOR4_OR9:%.*]] = select i1 [[TOBOOL7]], i32 [[DOTOR4]], i32 [[OR9]]
+; CHECK-NEXT:    [[TMP5:%.*]] = xor i1 [[TMP4]], true
+; CHECK-NEXT:    [[TMP6:%.*]] = xor i1 [[TOBOOL7]], true
+; CHECK-NEXT:    [[TMP7:%.*]] = xor i1 [[TMP5]], true
+; CHECK-NEXT:    [[TMP8:%.*]] = or i1 [[TMP7]], [[TMP6]]
+; CHECK-NEXT:    [[AND11:%.*]] = and i32 [[DOTOR4_OR9]], 8
+; CHECK-NEXT:    [[TOBOOL12:%.*]] = icmp eq i32 [[AND11]], 0
+; CHECK-NEXT:    [[OR14:%.*]] = or i32 [[DOTOR4_OR9]], 268435456
+; CHECK-NEXT:    [[DOTOR4_OR9_OR14:%.*]] = select i1 [[TOBOOL12]], i32 [[DOTOR4_OR9]], i32 [[OR14]]
+; CHECK-NEXT:    [[TMP9:%.*]] = xor i1 [[TMP8]], true
+; CHECK-NEXT:    [[TMP10:%.*]] = xor i1 [[TOBOOL12]], true
+; CHECK-NEXT:    [[TMP11:%.*]] = xor i1 [[TMP9]], true
+; CHECK-NEXT:    [[TMP12:%.*]] = or i1 [[TMP11]], [[TMP10]]
+; CHECK-NEXT:    [[AND16:%.*]] = and i32 [[DOTOR4_OR9_OR14]], 16
+; CHECK-NEXT:    [[TOBOOL17:%.*]] = icmp eq i32 [[AND16]], 0
+; CHECK-NEXT:    [[OR19:%.*]] = or i32 [[DOTOR4_OR9_OR14]], 134217728
+; CHECK-NEXT:    [[DOTOR4_OR9_OR14_OR19:%.*]] = select i1 [[TOBOOL17]], i32 [[DOTOR4_OR9_OR14]], i32 [[OR19]]
+; CHECK-NEXT:    [[TMP13:%.*]] = xor i1 [[TMP12]], true
+; CHECK-NEXT:    [[TMP14:%.*]] = xor i1 [[TOBOOL17]], true
+; CHECK-NEXT:    [[TMP15:%.*]] = xor i1 [[TMP13]], true
+; CHECK-NEXT:    [[TMP16:%.*]] = or i1 [[TMP15]], [[TMP14]]
+; CHECK-NEXT:    [[AND21:%.*]] = and i32 [[DOTOR4_OR9_OR14_OR19]], 32
+; CHECK-NEXT:    [[TOBOOL22:%.*]] = icmp eq i32 [[AND21]], 0
+; CHECK-NEXT:    [[OR24:%.*]] = or i32 [[DOTOR4_OR9_OR14_OR19]], 67108864
+; CHECK-NEXT:    [[DOTOR4_OR9_OR14_OR19_OR24:%.*]] = select i1 [[TOBOOL22]], i32 [[DOTOR4_OR9_OR14_OR19]], i32 [[OR24]]
+; CHECK-NEXT:    [[TMP17:%.*]] = xor i1 [[TMP16]], true
+; CHECK-NEXT:    [[TMP18:%.*]] = xor i1 [[TOBOOL22]], true
+; CHECK-NEXT:    [[TMP19:%.*]] = xor i1 [[TMP17]], true
+; CHECK-NEXT:    [[TMP20:%.*]] = or i1 [[TMP19]], [[TMP18]]
+; CHECK-NEXT:    [[AND26:%.*]] = and i32 [[DOTOR4_OR9_OR14_OR19_OR24]], 64
+; CHECK-NEXT:    [[TOBOOL27:%.*]] = icmp eq i32 [[AND26]], 0
+; CHECK-NEXT:    [[OR29:%.*]] = or i32 [[DOTOR4_OR9_OR14_OR19_OR24]], 33554432
+; CHECK-NEXT:    [[DOTOR4_OR9_OR14_OR19_OR24_OR29:%.*]] = select i1 [[TOBOOL27]], i32 [[DOTOR4_OR9_OR14_OR19_OR24]], i32 [[OR29]]
+; CHECK-NEXT:    [[TMP21:%.*]] = xor i1 [[TMP20]], true
+; CHECK-NEXT:    [[TMP22:%.*]] = xor i1 [[TOBOOL27]], true
+; CHECK-NEXT:    [[TMP23:%.*]] = xor i1 [[TMP21]], true
+; CHECK-NEXT:    [[TMP24:%.*]] = or i1 [[TMP23]], [[TMP22]]
+; CHECK-NEXT:    [[AND31:%.*]] = and i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29]], 256
+; CHECK-NEXT:    [[TOBOOL32:%.*]] = icmp eq i32 [[AND31]], 0
+; CHECK-NEXT:    [[OR34:%.*]] = or i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29]], 8388608
+; CHECK-NEXT:    [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34:%.*]] = select i1 [[TOBOOL32]], i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29]], i32 [[OR34]]
+; CHECK-NEXT:    [[TMP25:%.*]] = xor i1 [[TMP24]], true
+; CHECK-NEXT:    [[TMP26:%.*]] = xor i1 [[TOBOOL32]], true
+; CHECK-NEXT:    [[TMP27:%.*]] = xor i1 [[TMP25]], true
+; CHECK-NEXT:    [[TMP28:%.*]] = or i1 [[TMP27]], [[TMP26]]
+; CHECK-NEXT:    [[AND36:%.*]] = and i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34]], 512
+; CHECK-NEXT:    [[TOBOOL37:%.*]] = icmp eq i32 [[AND36]], 0
+; CHECK-NEXT:    [[OR39:%.*]] = or i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34]], 4194304
+; CHECK-NEXT:    [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39:%.*]] = select i1 [[TOBOOL37]], i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34]], i32 [[OR39]]
+; CHECK-NEXT:    [[TMP29:%.*]] = xor i1 [[TMP28]], true
+; CHECK-NEXT:    [[TMP30:%.*]] = xor i1 [[TOBOOL37]], true
+; CHECK-NEXT:    [[TMP31:%.*]] = xor i1 [[TMP29]], true
+; CHECK-NEXT:    [[TMP32:%.*]] = or i1 [[TMP31]], [[TMP30]]
+; CHECK-NEXT:    [[AND41:%.*]] = and i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39]], 1024
+; CHECK-NEXT:    [[TOBOOL42:%.*]] = icmp eq i32 [[AND41]], 0
+; CHECK-NEXT:    [[OR44:%.*]] = or i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39]], 2097152
+; CHECK-NEXT:    [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44:%.*]] = select i1 [[TOBOOL42]], i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39]], i32 [[OR44]]
+; CHECK-NEXT:    [[TMP33:%.*]] = xor i1 [[TMP32]], true
+; CHECK-NEXT:    [[TMP34:%.*]] = xor i1 [[TOBOOL42]], true
+; CHECK-NEXT:    [[TMP35:%.*]] = xor i1 [[TMP33]], true
+; CHECK-NEXT:    [[TMP36:%.*]] = or i1 [[TMP35]], [[TMP34]]
+; CHECK-NEXT:    [[AND46:%.*]] = and i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44]], 2048
+; CHECK-NEXT:    [[TOBOOL47:%.*]] = icmp eq i32 [[AND46]], 0
+; CHECK-NEXT:    [[OR49:%.*]] = or i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44]], 1048576
+; CHECK-NEXT:    [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49:%.*]] = select i1 [[TOBOOL47]], i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44]], i32 [[OR49]]
+; CHECK-NEXT:    [[TMP37:%.*]] = xor i1 [[TMP36]], true
+; CHECK-NEXT:    [[TMP38:%.*]] = xor i1 [[TOBOOL47]], true
+; CHECK-NEXT:    [[TMP39:%.*]] = xor i1 [[TMP37]], true
+; CHECK-NEXT:    [[TMP40:%.*]] = or i1 [[TMP39]], [[TMP38]]
+; CHECK-NEXT:    [[AND51:%.*]] = and i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49]], 4096
+; CHECK-NEXT:    [[TOBOOL52:%.*]] = icmp eq i32 [[AND51]], 0
+; CHECK-NEXT:    [[OR54:%.*]] = or i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49]], 524288
+; CHECK-NEXT:    [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54:%.*]] = select i1 [[TOBOOL52]], i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49]], i32 [[OR54]]
+; CHECK-NEXT:    [[TMP41:%.*]] = xor i1 [[TMP40]], true
+; CHECK-NEXT:    [[TMP42:%.*]] = xor i1 [[TOBOOL52]], true
+; CHECK-NEXT:    [[TMP43:%.*]] = xor i1 [[TMP41]], true
+; CHECK-NEXT:    [[TMP44:%.*]] = or i1 [[TMP43]], [[TMP42]]
+; CHECK-NEXT:    [[AND56:%.*]] = and i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54]], 8192
+; CHECK-NEXT:    [[TOBOOL57:%.*]] = icmp eq i32 [[AND56]], 0
+; CHECK-NEXT:    [[OR59:%.*]] = or i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54]], 262144
+; CHECK-NEXT:    [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54_OR59:%.*]] = select i1 [[TOBOOL57]], i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54]], i32 [[OR59]]
+; CHECK-NEXT:    [[TMP45:%.*]] = xor i1 [[TMP44]], true
+; CHECK-NEXT:    [[TMP46:%.*]] = xor i1 [[TOBOOL57]], true
+; CHECK-NEXT:    [[TMP47:%.*]] = xor i1 [[TMP45]], true
+; CHECK-NEXT:    [[TMP48:%.*]] = or i1 [[TMP47]], [[TMP46]]
+; CHECK-NEXT:    [[AND61:%.*]] = and i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54_OR59]], 16384
+; CHECK-NEXT:    [[TOBOOL62:%.*]] = icmp eq i32 [[AND61]], 0
+; CHECK-NEXT:    [[OR64:%.*]] = or i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54_OR59]], 131072
+; CHECK-NEXT:    [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54_OR59_OR64:%.*]] = select i1 [[TOBOOL62]], i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54_OR59]], i32 [[OR64]]
+; CHECK-NEXT:    [[TMP49:%.*]] = xor i1 [[TMP48]], true
+; CHECK-NEXT:    [[TMP50:%.*]] = xor i1 [[TOBOOL62]], true
+; CHECK-NEXT:    [[TMP51:%.*]] = xor i1 [[TMP49]], true
+; CHECK-NEXT:    [[TMP52:%.*]] = or i1 [[TMP51]], [[TMP50]]
+; CHECK-NEXT:    [[AND66:%.*]] = and i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54_OR59_OR64]], 32768
+; CHECK-NEXT:    [[TOBOOL67:%.*]] = icmp eq i32 [[AND66]], 0
+; CHECK-NEXT:    [[OR69:%.*]] = or i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54_OR59_OR64]], 65536
+; CHECK-NEXT:    [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54_OR59_OR64_OR69:%.*]] = select i1 [[TOBOOL67]], i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54_OR59_OR64]], i32 [[OR69]]
+; CHECK-NEXT:    [[TMP53:%.*]] = xor i1 [[TMP52]], true
+; CHECK-NEXT:    [[TMP54:%.*]] = xor i1 [[TOBOOL67]], true
+; CHECK-NEXT:    [[TMP55:%.*]] = xor i1 [[TMP53]], true
+; CHECK-NEXT:    [[TMP56:%.*]] = or i1 [[TMP55]], [[TMP54]]
+; CHECK-NEXT:    [[AND71:%.*]] = and i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54_OR59_OR64_OR69]], 128
+; CHECK-NEXT:    [[TOBOOL72:%.*]] = icmp eq i32 [[AND71]], 0
+; CHECK-NEXT:    [[OR74:%.*]] = or i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54_OR59_OR64_OR69]], 16777216
+; CHECK-NEXT:    [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54_OR59_OR64_OR69_OR74:%.*]] = select i1 [[TOBOOL72]], i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54_OR59_OR64_OR69]], i32 [[OR74]]
+; CHECK-NEXT:    [[TMP57:%.*]] = xor i1 [[TMP56]], true
+; CHECK-NEXT:    [[TMP58:%.*]] = xor i1 [[TOBOOL72]], true
+; CHECK-NEXT:    [[TMP59:%.*]] = xor i1 [[TMP57]], true
+; CHECK-NEXT:    [[TMP60:%.*]] = or i1 [[TMP59]], [[TMP58]]
+; CHECK-NEXT:    br i1 [[TMP60]], label [[TMP61:%.*]], label [[TMP62:%.*]]
+; CHECK:         store i32 [[DOTOR4_OR9_OR14_OR19_OR24_OR29_OR34_OR39_OR44_OR49_OR54_OR59_OR64_OR69_OR74]], i32* [[B]], align 4
+; CHECK-NEXT:    br label [[TMP62]]
+; CHECK:         ret i32 0
+;
 entry:
   %0 = load i32, i32* %b, align 4
   %and = and i32 %0, 1

Modified: llvm/trunk/test/Transforms/SimplifyCFG/multiple-phis.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyCFG/multiple-phis.ll?rev=317023&r1=317022&r2=317023&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/SimplifyCFG/multiple-phis.ll (original)
+++ llvm/trunk/test/Transforms/SimplifyCFG/multiple-phis.ll Tue Oct 31 12:03:49 2017
@@ -1,14 +1,33 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -simplifycfg -keep-loops=false -S < %s | FileCheck %s
 
 ; It's not worthwhile to if-convert one of the phi nodes and leave
 ; the other behind, because that still requires a branch. If
 ; SimplifyCFG if-converts one of the phis, it should do both.
 
-; CHECK:      %div.high.addr.0 = select i1 %cmp1, i32 %div, i32 %high.addr.0
-; CHECK-NEXT: %low.0.add2 = select i1 %cmp1, i32 %low.0, i32 %add2
-; CHECK-NEXT: br label %while.cond
-
 define i32 @upper_bound(i32* %r, i32 %high, i32 %k) nounwind {
+; CHECK-LABEL: @upper_bound(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    br label [[WHILE_COND:%.*]]
+; CHECK:       while.cond:
+; CHECK-NEXT:    [[HIGH_ADDR_0:%.*]] = phi i32 [ [[HIGH:%.*]], [[ENTRY:%.*]] ], [ [[DIV_HIGH_ADDR_0:%.*]], [[WHILE_BODY:%.*]] ]
+; CHECK-NEXT:    [[LOW_0:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[LOW_0_ADD2:%.*]], [[WHILE_BODY]] ]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i32 [[LOW_0]], [[HIGH_ADDR_0]]
+; CHECK-NEXT:    br i1 [[CMP]], label [[WHILE_BODY]], label [[WHILE_END:%.*]]
+; CHECK:       while.body:
+; CHECK-NEXT:    [[ADD:%.*]] = add i32 [[LOW_0]], [[HIGH_ADDR_0]]
+; CHECK-NEXT:    [[DIV:%.*]] = udiv i32 [[ADD]], 2
+; CHECK-NEXT:    [[IDXPROM:%.*]] = zext i32 [[DIV]] to i64
+; CHECK-NEXT:    [[ARRAYIDX:%.*]] = getelementptr inbounds i32, i32* [[R:%.*]], i64 [[IDXPROM]]
+; CHECK-NEXT:    [[TMP0:%.*]] = load i32, i32* [[ARRAYIDX]]
+; CHECK-NEXT:    [[CMP1:%.*]] = icmp ult i32 [[K:%.*]], [[TMP0]]
+; CHECK-NEXT:    [[ADD2:%.*]] = add i32 [[DIV]], 1
+; CHECK-NEXT:    [[DIV_HIGH_ADDR_0]] = select i1 [[CMP1]], i32 [[DIV]], i32 [[HIGH_ADDR_0]]
+; CHECK-NEXT:    [[LOW_0_ADD2]] = select i1 [[CMP1]], i32 [[LOW_0]], i32 [[ADD2]]
+; CHECK-NEXT:    br label [[WHILE_COND]]
+; CHECK:       while.end:
+; CHECK-NEXT:    ret i32 [[LOW_0]]
+;
 entry:
   br label %while.cond
 

Modified: llvm/trunk/test/Transforms/SimplifyCFG/select-gep.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/SimplifyCFG/select-gep.ll?rev=317023&r1=317022&r2=317023&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/SimplifyCFG/select-gep.ll (original)
+++ llvm/trunk/test/Transforms/SimplifyCFG/select-gep.ll Tue Oct 31 12:03:49 2017
@@ -1,8 +1,16 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt -S -simplifycfg < %s | FileCheck %s
 
 %ST = type { i8, i8 }
 
 define i8* @test1(%ST* %x, i8* %y) nounwind {
+; CHECK-LABEL: @test1(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq %ST* [[X:%.*]], null
+; CHECK-NEXT:    [[INCDEC_PTR:%.*]] = getelementptr [[ST:%.*]], %ST* [[X]], i32 0, i32 1
+; CHECK-NEXT:    [[INCDEC_PTR_Y:%.*]] = select i1 [[CMP]], i8* [[INCDEC_PTR]], i8* [[Y:%.*]]
+; CHECK-NEXT:    ret i8* [[INCDEC_PTR_Y]]
+;
 entry:
   %cmp = icmp eq %ST* %x, null
   br i1 %cmp, label %if.then, label %if.end
@@ -15,7 +23,4 @@ if.end:
   %x.addr = phi i8* [ %incdec.ptr, %if.then ], [ %y, %entry ]
   ret i8* %x.addr
 
-; CHECK-LABEL: @test1(
-; CHECK: %incdec.ptr.y = select i1 %cmp, i8* %incdec.ptr, i8* %y
-; CHECK: ret i8* %incdec.ptr.y
 }




More information about the llvm-commits mailing list