|
| 1 | + // RUN: mlir-opt -pass-pipeline='builtin.module(llvm.func(canonicalize{region-simplify=aggressive}))' %s | FileCheck %s |
| 2 | + |
| 3 | +llvm.func @foo(%arg0: i64) |
| 4 | + |
| 5 | +llvm.func @rand() -> i1 |
| 6 | + |
| 7 | +// CHECK-LABEL: func @large_merge_block( |
| 8 | +llvm.func @large_merge_block(%arg0: i64) { |
| 9 | + // CHECK: %[[C0:.*]] = llvm.mlir.constant(0 : i64) : i64 |
| 10 | + // CHECK: %[[C1:.*]] = llvm.mlir.constant(1 : i64) : i64 |
| 11 | + // CHECK: %[[C2:.*]] = llvm.mlir.constant(2 : i64) : i64 |
| 12 | + // CHECK: %[[C3:.*]] = llvm.mlir.constant(3 : i64) : i64 |
| 13 | + // CHECK: %[[C4:.*]] = llvm.mlir.constant(4 : i64) : i64 |
| 14 | + |
| 15 | + // CHECK: llvm.cond_br %5, ^bb1(%[[C1]], %[[C3]], %[[C4]], %[[C2]] : i64, i64, i64, i64), ^bb1(%[[C4]], %[[C2]], %[[C1]], %[[C3]] : i64, i64, i64, i64) |
| 16 | + // CHECK: ^bb{{.*}}(%[[arg0:.*]]: i64, %[[arg1:.*]]: i64, %[[arg2:.*]]: i64, %[[arg3:.*]]: i64): |
| 17 | + // CHECK: llvm.cond_br %{{.*}}, ^bb2(%[[arg0]] : i64), ^bb2(%[[arg3]] : i64) |
| 18 | + // CHECK: ^bb{{.*}}(%11: i64): |
| 19 | + // CHECK: llvm.br ^bb{{.*}} |
| 20 | + // CHECK: ^bb{{.*}}: |
| 21 | + // CHECK: llvm.call |
| 22 | + // CHECK: llvm.cond_br {{.*}}, ^bb{{.*}}(%[[arg1]] : i64), ^bb{{.*}}(%[[arg2]] : i64) |
| 23 | + // CHECK: ^bb{{.*}}: |
| 24 | + // CHECK: llvm.call |
| 25 | + // CHECK llvm.br ^bb{{.*}} |
| 26 | + |
| 27 | + %0 = llvm.mlir.constant(0 : i64) : i64 |
| 28 | + %1 = llvm.mlir.constant(1 : i64) : i64 |
| 29 | + %2 = llvm.mlir.constant(2 : i64) : i64 |
| 30 | + %3 = llvm.mlir.constant(3 : i64) : i64 |
| 31 | + %4 = llvm.mlir.constant(4 : i64) : i64 |
| 32 | + %10 = llvm.icmp "eq" %arg0, %0 : i64 |
| 33 | + llvm.cond_br %10, ^bb1, ^bb14 |
| 34 | +^bb1: // pred: ^bb0 |
| 35 | + %11 = llvm.call @rand() : () -> i1 |
| 36 | + llvm.cond_br %11, ^bb2, ^bb3 |
| 37 | +^bb2: // pred: ^bb1 |
| 38 | + llvm.call @foo(%1) : (i64) -> () |
| 39 | + llvm.br ^bb4 |
| 40 | +^bb3: // pred: ^bb1 |
| 41 | + llvm.call @foo(%2) : (i64) -> () |
| 42 | + llvm.br ^bb4 |
| 43 | +^bb4: // 2 preds: ^bb2, ^bb3 |
| 44 | + %14 = llvm.call @rand() : () -> i1 |
| 45 | + llvm.cond_br %14, ^bb5, ^bb6 |
| 46 | +^bb5: // pred: ^bb4 |
| 47 | + llvm.call @foo(%3) : (i64) -> () |
| 48 | + llvm.br ^bb13 |
| 49 | +^bb6: // pred: ^bb4 |
| 50 | + llvm.call @foo(%4) : (i64) -> () |
| 51 | + llvm.br ^bb13 |
| 52 | +^bb13: // 2 preds: ^bb11, ^bb12 |
| 53 | + llvm.br ^bb27 |
| 54 | +^bb14: // pred: ^bb0 |
| 55 | + %23 = llvm.call @rand() : () -> i1 |
| 56 | + llvm.cond_br %23, ^bb15, ^bb16 |
| 57 | +^bb15: // pred: ^bb14 |
| 58 | + llvm.call @foo(%4) : (i64) -> () |
| 59 | + llvm.br ^bb17 |
| 60 | +^bb16: // pred: ^bb14 |
| 61 | + llvm.call @foo(%3) : (i64) -> () |
| 62 | + llvm.br ^bb17 |
| 63 | +^bb17: // 2 preds: ^bb15, ^bb16 |
| 64 | + %26 = llvm.call @rand() : () -> i1 |
| 65 | + llvm.cond_br %26, ^bb18, ^bb19 |
| 66 | +^bb18: // pred: ^bb17 |
| 67 | + llvm.call @foo(%2) : (i64) -> () |
| 68 | + llvm.br ^bb26 |
| 69 | +^bb19: // pred: ^bb17 |
| 70 | + llvm.call @foo(%1) : (i64) -> () |
| 71 | + llvm.br ^bb26 |
| 72 | +^bb26: // 2 preds: ^bb24, ^bb25 |
| 73 | + llvm.br ^bb27 |
| 74 | +^bb27: // 2 preds: ^bb13, ^bb26 |
| 75 | + llvm.return |
| 76 | +} |
0 commit comments