// RUN: cir-opt %s | FileCheck %s
!s32i = !cir.int<s, 32>

cir.func @FlatSwitchWithoutDefault(%arg0: !s32i) {
  cir.switch.flat %arg0 : !s32i, ^bb2 [
    1: ^bb1
  ]
  ^bb1:
    cir.br ^bb2
  ^bb2:
    cir.return
}

// CHECK: cir.switch.flat %arg0 : !s32i, ^bb2 [
// CHECK-NEXT:  1: ^bb1
// CHECK-NEXT: ]
// CHECK-NEXT: ^bb1:
// CHECK-NEXT:   cir.br ^bb2
// CHECK-NEXT: ^bb2:
// CHECK-NEXT:   cir.return

cir.func @FlatSwitchWithDefault(%arg0: !s32i) {
  cir.switch.flat %arg0 : !s32i, ^bb2 [
    1: ^bb1
  ]
  ^bb1:
    cir.br ^bb3
  ^bb2:
    cir.br ^bb3
  ^bb3:
    cir.return
}

// CHECK: cir.switch.flat %arg0 : !s32i, ^bb2 [
// CHECK-NEXT:  1: ^bb1
// CHECK-NEXT: ]
// CHECK-NEXT: ^bb1:
// CHECK-NEXT:   cir.br ^bb3
// CHECK-NEXT: ^bb2:
// CHECK-NEXT:   cir.br ^bb3
// CHECK-NEXT: ^bb3:
// CHECK-NEXT:   cir.return

cir.func @switchWithOperands(%arg0: !s32i, %arg1: !s32i, %arg2: !s32i) {
  cir.switch.flat %arg0 : !s32i, ^bb3 [
    0: ^bb1(%arg1, %arg2 : !s32i, !s32i),
    1: ^bb2(%arg2, %arg1 : !s32i, !s32i)
  ]
^bb1:
  cir.br ^bb3

^bb2:
  cir.br ^bb3

^bb3:
  cir.return
}

// CHECK: cir.switch.flat %arg0 : !s32i, ^bb3 [
// CHECK-NEXT:  0: ^bb1(%arg1, %arg2 : !s32i, !s32i),
// CHECK-NEXT:  1: ^bb2(%arg2, %arg1 : !s32i, !s32i)
// CHECK-NEXT: ]
// CHECK-NEXT: ^bb1:
// CHECK-NEXT:   cir.br ^bb3
// CHECK-NEXT: ^bb2:
// CHECK-NEXT:    cir.br ^bb3
// CHECK-NEXT: ^bb3:
// CHECK-NEXT:    cir.return
