[llvm] 087be53 - [NFC][SimplifyCFG] Add a test with cond br on constant w/ identical destinations

Roman Lebedev via llvm-commits llvm-commits at lists.llvm.org
Thu Jan 7 15:16:00 PST 2021


Author: Roman Lebedev
Date: 2021-01-08T02:15:24+03:00
New Revision: 087be536feab0aacc043aed52bee2e48e90e538c

URL: https://github.com/llvm/llvm-project/commit/087be536feab0aacc043aed52bee2e48e90e538c
DIFF: https://github.com/llvm/llvm-project/commit/087be536feab0aacc043aed52bee2e48e90e538c.diff

LOG: [NFC][SimplifyCFG] Add a test with cond br on constant w/ identical destinations

Added: 
    

Modified: 
    llvm/test/Transforms/SimplifyCFG/branch-fold.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/SimplifyCFG/branch-fold.ll b/llvm/test/Transforms/SimplifyCFG/branch-fold.ll
index a4ac23bada70..5b9f20b97d4e 100644
--- a/llvm/test/Transforms/SimplifyCFG/branch-fold.ll
+++ b/llvm/test/Transforms/SimplifyCFG/branch-fold.ll
@@ -1,35 +1,59 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
 ; RUN: opt < %s -simplifycfg -simplifycfg-require-and-preserve-domtree=1 -S | FileCheck %s
 
 define void @test(i32* %P, i32* %Q, i1 %A, i1 %B) {
-; CHECK: test
-; CHECK: br i1
-; CHECK-NOT: br i1
-; CHECK: ret
-; CHECK: ret
+; CHECK-LABEL: @test(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[A_NOT:%.*]] = xor i1 [[A:%.*]], true
+; CHECK-NEXT:    [[BRMERGE:%.*]] = or i1 [[A_NOT]], [[B:%.*]]
+; CHECK-NEXT:    br i1 [[BRMERGE]], label [[B:%.*]], label [[C:%.*]]
+; CHECK:       b:
+; CHECK-NEXT:    store i32 123, i32* [[P:%.*]], align 4
+; CHECK-NEXT:    ret void
+; CHECK:       c:
+; CHECK-NEXT:    ret void
+;
 
 entry:
-        br i1 %A, label %a, label %b
+  br i1 %A, label %a, label %b
 a:
-        br i1 %B, label %b, label %c
+  br i1 %B, label %b, label %c
 b:
-        store i32 123, i32* %P
-        ret void
+  store i32 123, i32* %P
+  ret void
 c:
-        ret void
+  ret void
 }
 
 ; rdar://10554090
 define zeroext i1 @test2(i64 %i0, i64 %i1) nounwind uwtable readonly ssp {
+; CHECK-LABEL: @test2(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[AND_I_I:%.*]] = and i64 [[I0:%.*]], 281474976710655
+; CHECK-NEXT:    [[AND_I11_I:%.*]] = and i64 [[I1:%.*]], 281474976710655
+; CHECK-NEXT:    [[OR_COND:%.*]] = icmp eq i64 [[AND_I_I]], [[AND_I11_I]]
+; CHECK-NEXT:    br i1 [[OR_COND]], label [[C:%.*]], label [[A:%.*]]
+; CHECK:       a:
+; CHECK-NEXT:    [[SHR_I4_I:%.*]] = lshr i64 [[I0]], 48
+; CHECK-NEXT:    [[AND_I5_I:%.*]] = and i64 [[SHR_I4_I]], 32767
+; CHECK-NEXT:    [[SHR_I_I:%.*]] = lshr i64 [[I1]], 48
+; CHECK-NEXT:    [[AND_I2_I:%.*]] = and i64 [[SHR_I_I]], 32767
+; CHECK-NEXT:    [[CMP9_I:%.*]] = icmp ult i64 [[AND_I5_I]], [[AND_I2_I]]
+; CHECK-NEXT:    [[PHITMP:%.*]] = icmp uge i64 [[AND_I2_I]], [[AND_I5_I]]
+; CHECK-NEXT:    [[NOT_COND:%.*]] = xor i1 [[CMP9_I]], true
+; CHECK-NEXT:    [[AND_COND:%.*]] = and i1 [[NOT_COND]], [[PHITMP]]
+; CHECK-NEXT:    br label [[C]]
+; CHECK:       c:
+; CHECK-NEXT:    [[O2:%.*]] = phi i1 [ [[AND_COND]], [[A]] ], [ false, [[ENTRY:%.*]] ]
+; CHECK-NEXT:    ret i1 [[O2]]
+;
 entry:
-; CHECK: test2
-; CHECK: br i1
   %and.i.i = and i64 %i0, 281474976710655
   %and.i11.i = and i64 %i1, 281474976710655
   %or.cond = icmp eq i64 %and.i.i, %and.i11.i
   br i1 %or.cond, label %c, label %a
 
 a:
-; CHECK: br
   %shr.i4.i = lshr i64 %i0, 48
   %and.i5.i = and i64 %shr.i4.i, 32767
   %shr.i.i = lshr i64 %i1, 48
@@ -38,7 +62,6 @@ a:
   br i1 %cmp9.i, label %c, label %b
 
 b:
-; CHECK-NOT: br
   %shr.i13.i9 = lshr i64 %i1, 48
   %and.i14.i10 = and i64 %shr.i13.i9, 32767
   %shr.i.i11 = lshr i64 %i0, 48
@@ -53,6 +76,10 @@ c:
 
 ; PR13180
 define void @pr13180(i8 %p) {
+; CHECK-LABEL: @pr13180(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    unreachable
+;
 entry:
   %tobool = icmp eq i8 %p, 0
   br i1 %tobool, label %cond.false, label %cond.true
@@ -68,3 +95,18 @@ cond.end:                                         ; preds = %cond.false, %cond.t
   %cond = phi i1 [ undef, %cond.true ], [ %phitmp, %cond.false ]
   unreachable
 }
+
+declare void @foo()
+define void @test3() {
+; CHECK-LABEL: @test3(
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    call void @foo()
+; CHECK-NEXT:    ret void
+;
+entry:
+  br i1 0, label %bb0, label %bb0
+
+bb0:
+  call void @foo()
+  ret void
+}


        


More information about the llvm-commits mailing list