[DAGCombiner] Add target hook function to decide folding (mul (add x, c1), c2)
[llvm-project.git] / llvm / test / Transforms / JumpThreading / pr40992-indirectbr-folding.ll
blobb94d4c1b701a7af3455ce369b0af822793aa2316
1 ; RUN: opt -S < %s -jump-threading | FileCheck %s
3 ; PR40992: Do not incorrectly fold %bb5 into an unconditional br to %bb7.
4 ;          Also verify we correctly thread %bb1 -> %bb7 when %c is false.
6 define i32 @jtbr(i1 %v1, i1 %v2, i1 %v3) {
7 ; CHECK: bb0:
8 bb0:
9   br label %bb1
11 ; CHECK: bb1:
12 ; CHECK-NEXT: and
13 ; CHECK-NEXT: br i1 %c, label %bb2, label %bb7
14 bb1:
15   %c = and i1 %v1, %v2
16   br i1 %c, label %bb2, label %bb5
18 ; CHECK: bb2:
19 ; CHECK-NEXT: select
20 ; CHECK-NEXT: indirectbr i8* %ba, [label %bb3, label %bb5]
21 bb2:
22   %ba = select i1 %v3, i8* blockaddress(@jtbr, %bb3), i8* blockaddress(@jtbr, %bb4)
23   indirectbr i8* %ba, [label %bb3, label %bb4]
25 ; CHECK: bb3:
26 bb3:
27   br label %bb1
29 ; CHECK-NOT: bb4:
30 bb4:
31   br label %bb5
33 ; CHECK: bb5:
34 bb5:
35   br i1 %c, label %bb6, label %bb7
37 ; CHECK: bb6:
38 bb6:
39   ret i32 0
41 ; CHECK: bb7:
42 bb7:
43   ret i32 1