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 +} _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits