| // RUN: mlir-opt %s | mlir-opt | FileCheck %s |
| // RUN: mlir-opt %s --mlir-print-op-generic | mlir-opt | FileCheck %s |
| |
| // CHECK-LABEL: @assert |
| func.func @assert(%arg : i1) { |
| cf.assert %arg, "Some message in case this assertion fails." |
| return |
| } |
| |
| // CHECK-LABEL: func @switch( |
| func.func @switch(%flag : i32, %caseOperand : i32) { |
| cf.switch %flag : i32, [ |
| default: ^bb1(%caseOperand : i32), |
| 42: ^bb2(%caseOperand : i32), |
| 43: ^bb3(%caseOperand : i32) |
| ] |
| |
| ^bb1(%bb1arg : i32): |
| return |
| ^bb2(%bb2arg : i32): |
| return |
| ^bb3(%bb3arg : i32): |
| return |
| } |
| |
| // CHECK-LABEL: func @switch_i64( |
| func.func @switch_i64(%flag : i64, %caseOperand : i32) { |
| cf.switch %flag : i64, [ |
| default: ^bb1(%caseOperand : i32), |
| 42: ^bb2(%caseOperand : i32), |
| 43: ^bb3(%caseOperand : i32) |
| ] |
| |
| ^bb1(%bb1arg : i32): |
| return |
| ^bb2(%bb2arg : i32): |
| return |
| ^bb3(%bb3arg : i32): |
| return |
| } |
| |
| // CHECK-LABEL: func @switch_result_number |
| func.func @switch_result_number(%arg0: i32) { |
| %0:2 = "test.op_with_two_results"() : () -> (i32, i32) |
| cf.switch %arg0 : i32, [ |
| default: ^bb2, |
| 0: ^bb1(%0#0 : i32) |
| ] |
| ^bb1(%1: i32): |
| return |
| ^bb2: |
| return |
| } |
| |
| // CHECK-LABEL: func @switch_result_number_default |
| func.func @switch_result_number_default(%arg0: i32) { |
| %0:2 = "test.op_with_two_results"() : () -> (i32, i32) |
| cf.switch %arg0 : i32, [ |
| default: ^bb1(%0#0 : i32), |
| 0: ^bb2(%0#1 : i32) |
| ] |
| ^bb1(%1: i32): |
| return |
| ^bb2(%2: i32): |
| return |
| } |
| |
| // CHECK-LABEL: func @cond_weights |
| func.func @cond_weights(%cond: i1) { |
| // CHECK: cf.cond_br %{{.*}} weights([60, 40]), ^{{.*}}, ^{{.*}} |
| cf.cond_br %cond weights([60, 40]), ^bb1, ^bb2 |
| ^bb1: |
| return |
| ^bb2: |
| return |
| } |
| |
| // CHECK-LABEL: func @switch_i1_boundary( |
| // CHECK: -1: ^bb1 |
| func.func @switch_i1_boundary(%flag: i1) { |
| cf.switch %flag : i1, [default: ^bb1, 1: ^bb1] |
| ^bb1: |
| return |
| } |
| |
| // Unsigned literals with the sign bit set print as signed case values. |
| // CHECK-LABEL: func @switch_i8_boundaries( |
| // CHECK: -128: ^bb1 |
| // CHECK-NEXT: -1: ^bb1 |
| func.func @switch_i8_boundaries(%flag: i8) { |
| cf.switch %flag : i8, [default: ^bb1, -128: ^bb1, 255: ^bb1] |
| ^bb1: |
| return |
| } |
| |
| // CHECK-LABEL: func @switch_i64_boundaries( |
| // CHECK: -9223372036854775808: ^bb1 |
| // CHECK-NEXT: -1: ^bb1 |
| func.func @switch_i64_boundaries(%flag: i64) { |
| cf.switch %flag : i64, [ |
| default: ^bb1, |
| -9223372036854775808: ^bb1, |
| 18446744073709551615: ^bb1 |
| ] |
| ^bb1: |
| return |
| } |
| |
| // CHECK-LABEL: func @switch_i65_boundary( |
| // CHECK: -18446744073709551616: ^bb1 |
| func.func @switch_i65_boundary(%flag: i65) { |
| cf.switch %flag : i65, [default: ^bb1, 18446744073709551616: ^bb1] |
| ^bb1: |
| return |
| } |
| |
| // CHECK-LABEL: func @switch_i128_boundaries( |
| // CHECK: 18446744073709551616: ^bb1 |
| // CHECK-NEXT: 18446744073709551617: ^bb1 |
| // CHECK-NEXT: -170141183460469231731687303715884105728: ^bb1 |
| // CHECK-NEXT: 170141183460469231731687303715884105727: ^bb1 |
| func.func @switch_i128_boundaries(%flag: i128) { |
| cf.switch %flag : i128, [ |
| default: ^bb1, |
| 18446744073709551616: ^bb1, |
| 18446744073709551617: ^bb1, |
| -170141183460469231731687303715884105728: ^bb1, |
| 170141183460469231731687303715884105727: ^bb1 |
| ] |
| ^bb1: |
| return |
| } |