|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| 2 | +; RUN: opt < %s -passes=simplifycfg -simplifycfg-uncondbr-max-num-preds-threshold=3 -S | FileCheck %s |
| 3 | + |
| 4 | +; This test checks that we don't optimize the edge from Pred -> BB to Pred -> Succ when |
| 5 | +; the number of predecessors of Succ is greater than the threshold. |
| 6 | + |
| 7 | +define i8 @succ_has_3_preds(i8 noundef %arg, i1 %c1, i1 %c2) { |
| 8 | +; CHECK-LABEL: @succ_has_3_preds( |
| 9 | +; CHECK-NEXT: Pred: |
| 10 | +; CHECK-NEXT: call void @dummy() |
| 11 | +; CHECK-NEXT: br i1 [[C1:%.*]], label [[COMMONPRED:%.*]], label [[EXTRA_BB:%.*]] |
| 12 | +; CHECK: extra_bb: |
| 13 | +; CHECK-NEXT: br label [[SUCC:%.*]] |
| 14 | +; CHECK: CommonPred: |
| 15 | +; CHECK-NEXT: call void @dummy() |
| 16 | +; CHECK-NEXT: br i1 [[C2:%.*]], label [[SUCC]], label [[BB:%.*]] |
| 17 | +; CHECK: BB: |
| 18 | +; CHECK-NEXT: [[PHI1:%.*]] = phi i8 [ 1, [[COMMONPRED]] ] |
| 19 | +; CHECK-NEXT: br label [[SUCC]] |
| 20 | +; CHECK: Succ: |
| 21 | +; CHECK-NEXT: [[PHI2:%.*]] = phi i8 [ [[PHI1]], [[BB]] ], [ 4, [[COMMONPRED]] ], [ 0, [[EXTRA_BB]] ] |
| 22 | +; CHECK-NEXT: ret i8 [[PHI2]] |
| 23 | +; |
| 24 | +Pred: |
| 25 | +call void @dummy() |
| 26 | + br i1 %c1, label %CommonPred, label %extra_bb |
| 27 | + |
| 28 | +extra_bb: |
| 29 | + br i1 %c1, label %CommonPred, label %Succ |
| 30 | + |
| 31 | +CommonPred: |
| 32 | +call void @dummy() |
| 33 | + br i1 %c2, label %Succ, label %BB |
| 34 | + |
| 35 | +BB: |
| 36 | + %phi1 = phi i8 [1, %CommonPred] |
| 37 | + br label %Succ |
| 38 | + |
| 39 | +Succ: |
| 40 | + %phi2 = phi i8 [ %phi1, %BB ], [ 4, %CommonPred ], [0, %extra_bb] |
| 41 | + ret i8 %phi2 |
| 42 | +} |
| 43 | + |
| 44 | +declare void @dummy() |
0 commit comments