// RUN: %target-sil-opt -enable-sil-verify-all %s -condition-forwarding | FileCheck %s

import Builtin
import Swift

sil_stage canonical

enum E { case A, B }

enum E3 { case A, B, C }

class C {
  @sil_stored var x : Builtin.Int64
  init()
}

sil @callee : $@convention(thin) () -> ()
sil @use_enum : $@convention(thin) (E) -> ()
sil @use_int : $@convention(thin) (Builtin.Int64) -> ()

// CHECK-LABEL: sil @simple_forwarding
// CHECK: bb0({{.*}}):
// CHECK-NEXT: br bb3
// CHECK: bb1:
// CHECK:   br bb4,
// CHECK: bb2:
// CHECK:   br bb5,
// CHECK: bb3:
// CHECK:   apply
// CHECK:   cond_br %0, bb1, bb2
// CHECK: bb4:
// CHECK:   br bb6
// CHECK: bb5:
// CHECK:   br bb6
// CHECK: bb6:
// CHECK:   return
sil @simple_forwarding : $@convention(thin) (Builtin.Int1) -> () {
bb0(%0 : $Builtin.Int1):
  cond_br %0, bb1, bb2

bb1:
  %1 = enum $E, #E.A!enumelt
  br bb3(%1 : $E)

bb2:
  %2 = enum $E, #E.B!enumelt
  br bb3(%2 : $E)

bb3(%14 : $E):
  %15 = function_ref @callee : $@convention(thin) () -> ()
  %16 = apply %15() : $@convention(thin) () -> ()
  switch_enum %14 : $E, case #E.A!enumelt: bb4, case #E.B!enumelt: bb5

bb4:
  br bb6

bb5:
  br bb6

bb6:
  %r = tuple ()
  return %r : $()
}

// CHECK-LABEL: sil @closed_range_iterator_example
// CHECK: bb0({{.*}}):
// CHECK-NEXT: br bb3
// CHECK: bb1:
// CHECK:   [[PL:%[0-9]+]] = struct $Int64
// CHECK:   br bb4([[PL]] : $Int64)
// CHECK: bb2:
// CHECK:   [[O:%[0-9]+]] = enum $Optional<Int64>
// CHECK:   br bb5([[O]] : $Optional<Int64>)
// CHECK: bb3:
// CHECK:   apply
// CHECK:   cond_br %0, bb1, bb2
// CHECK: bb4({{%[0-9]+}} : $Int64):
// CHECK:   br bb6
// CHECK: bb5([[O2:%[0-9]+]] : $Optional<Int64>):
// CHECK:   br bb6([[O2]] : $Optional<Int64>)
// CHECK: bb6
// CHECK:   return
sil @closed_range_iterator_example : $@convention(thin) (Builtin.Int1, Builtin.Int64) -> Optional<Int64> {
bb0(%0 : $Builtin.Int1, %1 : $Builtin.Int64):
  cond_br %0, bb1, bb2

bb1:
  %3 = integer_literal $Builtin.Int64, 1
  %4 = integer_literal $Builtin.Int1, -1
  %5 = builtin "sadd_with_overflow_Int64"(%1 : $Builtin.Int64, %3 : $Builtin.Int64, %4 : $Builtin.Int1) : $(Builtin.Int64, Builtin.Int1)
  %6 = tuple_extract %5 : $(Builtin.Int64, Builtin.Int1), 0
  %7 = tuple_extract %5 : $(Builtin.Int64, Builtin.Int1), 1
  cond_fail %7 : $Builtin.Int1
  %9 = struct $Int64 (%6 : $Builtin.Int64)
  %10 = enum $Optional<Int64>, #Optional.some!enumelt.1, %9 : $Int64
  br bb3(%10 : $Optional<Int64>)

bb2:
  %12 = enum $Optional<Int64>, #Optional.none!enumelt
  br bb3(%12 : $Optional<Int64>)


bb3(%14 : $Optional<Int64>):
  debug_value %14 : $Optional<Int64>
  %15 = function_ref @callee : $@convention(thin) () -> ()
  %16 = apply %15() : $@convention(thin) () -> ()
  switch_enum %14 : $Optional<Int64>, case #Optional.some!enumelt.1: bb4, case #Optional.none!enumelt: bb5


bb4(%18 : $Int64):
  %19 = enum $Optional<Int64>, #Optional.some!enumelt.1, %18 : $Int64
  br bb6(%19 : $Optional<Int64>)

bb5:
  br bb6(%14 : $Optional<Int64>)


bb6(%22 : $Optional<Int64>):
  return %22 : $Optional<Int64>
}

// CHECK-LABEL: sil @simple_switch_enum_forwarding
// CHECK: bb0({{.*}}):
// CHECK-NEXT: br bb3
// CHECK: bb1:
// CHECK:   br bb4,
// CHECK: bb2:
// CHECK:   br bb5,
// CHECK: bb3:
// CHECK:   apply
// CHECK:   switch_enum %0 : $E3, case #E3.A!enumelt: bb1, default bb2
// CHECK: bb4:
// CHECK:   br bb6
// CHECK: bb5:
// CHECK:   br bb6
// CHECK: bb6:
// CHECK:   return
sil @simple_switch_enum_forwarding : $@convention(thin) (E3) -> () {
bb0(%0 : $E3):
  switch_enum %0 : $E3, case #E3.A!enumelt: bb1, default bb2

bb1:
  %1 = enum $E, #E.A!enumelt
  br bb3(%1 : $E)

bb2:
  %2 = enum $E, #E.B!enumelt
  br bb3(%2 : $E)

bb3(%14 : $E):
  %15 = function_ref @callee : $@convention(thin) () -> ()
  %16 = apply %15() : $@convention(thin) () -> ()
  switch_enum %14 : $E, case #E.A!enumelt: bb4, case #E.B!enumelt: bb5

bb4:
  br bb6

bb5:
  br bb6

bb6:
  %r = tuple ()
  return %r : $()
}

// CHECK-LABEL: sil @no_forwarding_side_effect_inst
// CHECK: bb0({{.*}}):
// CHECK:   cond_br %0
// CHECK: bb3({{.*}}):
// CHECK:   switch_enum
// CHECK: bb6
// CHECK:   return
sil @no_forwarding_side_effect_inst : $@convention(thin) (Builtin.Int1, C) -> () {
bb0(%0 : $Builtin.Int1, %1 : $C):
  %e = ref_element_addr %1 : $C, #C.x
  cond_br %0, bb1, bb2

bb1:
  %2 = enum $E, #E.A!enumelt
  br bb3(%2 : $E)

bb2:
  %3 = enum $E, #E.B!enumelt
  %4 = load %e : $*Builtin.Int64
  br bb3(%3 : $E)

bb3(%14 : $E):
  %15 = function_ref @callee : $@convention(thin) () -> ()
  %16 = apply %15() : $@convention(thin) () -> ()
  switch_enum %14 : $E, case #E.A!enumelt: bb4, case #E.B!enumelt: bb5

bb4:
  br bb6

bb5:
  br bb6

bb6:
  %r = tuple ()
  return %r : $()
}

// CHECK-LABEL: sil @no_forwarding_second_enum_use
// CHECK: bb0({{.*}}):
// CHECK:   cond_br %0
// CHECK: bb3({{.*}}):
// CHECK:   switch_enum
// CHECK: bb6
// CHECK:   return
sil @no_forwarding_second_enum_use : $@convention(thin) (Builtin.Int1) -> () {
bb0(%0 : $Builtin.Int1):
  cond_br %0, bb1, bb2

bb1:
  %1 = enum $E, #E.A!enumelt
  br bb3(%1 : $E)

bb2:
  %2 = enum $E, #E.B!enumelt
  br bb3(%2 : $E)

bb3(%14 : $E):
  %15 = function_ref @use_enum : $@convention(thin) (E) -> ()
  %16 = apply %15(%14) : $@convention(thin) (E) -> ()
  switch_enum %14 : $E, case #E.A!enumelt: bb4, case #E.B!enumelt: bb5

bb4:
  br bb6

bb5:
  br bb6

bb6:
  %r = tuple ()
  return %r : $()
}

// CHECK-LABEL: sil @no_forwarding_bad_control_flow
// CHECK: bb0({{.*}}):
// CHECK:   cond_br %0
// CHECK: bb3({{.*}}):
// CHECK:   switch_enum
// CHECK: bb6
// CHECK:   return
sil @no_forwarding_bad_control_flow : $@convention(thin) (Builtin.Int1) -> () {
bb0(%0 : $Builtin.Int1):
  cond_br %0, bb1, bb2

bb1:
  %1 = enum $E, #E.A!enumelt
  br bb3(%1 : $E)

bb2:
  %2 = enum $E, #E.B!enumelt
  br bb3(%2 : $E)

bb3(%14 : $E):
  %15 = function_ref @callee : $@convention(thin) () -> ()
  %16 = apply %15() : $@convention(thin) () -> ()
  switch_enum %14 : $E, case #E.A!enumelt: bb4, case #E.B!enumelt: bb5

bb4:
  br bb6

bb5:
  cond_br undef, bb1, bb6

bb6:
  %r = tuple ()
  return %r : $()
}

// CHECK-LABEL: sil @no_forwarding_multiple_block_args
// CHECK: bb0({{.*}}):
// CHECK:   cond_br %0
// CHECK: bb3({{.*}}):
// CHECK:   switch_enum
// CHECK: bb6
// CHECK:   return
sil @no_forwarding_multiple_block_args : $@convention(thin) (Builtin.Int1) -> () {
bb0(%0 : $Builtin.Int1):
  cond_br %0, bb1, bb2

bb1:
  %i1 = integer_literal $Builtin.Int64, 1
  %1 = enum $E, #E.A!enumelt
  br bb3(%1 : $E, %i1 : $Builtin.Int64)

bb2:
  %i2 = integer_literal $Builtin.Int64, 2
  %2 = enum $E, #E.B!enumelt
  br bb3(%2 : $E, %i2 : $Builtin.Int64)

bb3(%14 : $E, %i3 : $Builtin.Int64):
  %15 = function_ref @use_int : $@convention(thin) (Builtin.Int64) -> ()
  %16 = apply %15(%i3) : $@convention(thin) (Builtin.Int64) -> ()
  switch_enum %14 : $E, case #E.A!enumelt: bb4, case #E.B!enumelt: bb5

bb4:
  br bb6

bb5:
  br bb6

bb6:
  %r = tuple ()
  return %r : $()
}

// CHECK-LABEL: sil @no_forwarding_additional_successor
// CHECK: bb0({{.*}}):
// CHECK:   switch_enum %0
// CHECK: bb3({{.*}}):
// CHECK:   switch_enum
// CHECK: bb6
// CHECK:   return
sil @no_forwarding_additional_successor : $@convention(thin) (E3) -> () {
bb0(%0 : $E3):
  switch_enum %0 : $E3, case #E3.A!enumelt: bb1, case #E3.B!enumelt: bb2, case #E3.C!enumelt: bb6 

bb1:
  %1 = enum $E, #E.A!enumelt
  br bb3(%1 : $E)

bb2:
  %2 = enum $E, #E.B!enumelt
  br bb3(%2 : $E)

bb3(%14 : $E):
  %15 = function_ref @callee : $@convention(thin) () -> ()
  %16 = apply %15() : $@convention(thin) () -> ()
  switch_enum %14 : $E, case #E.A!enumelt: bb4, case #E.B!enumelt: bb5

bb4:
  br bb7

bb5:
  br bb7

bb6:
  br bb7

bb7:
  %r = tuple ()
  return %r : $()
}
