// RUN: %target-sil-opt -assume-parsing-unqualified-ownership-sil -enable-sil-verify-all %s -simplify-cfg | %FileCheck %s

// Two select_enum instructions must not be considered as the same "condition",
// even if they have the same enum operand.
// This test checks that SimplifyCFG does not remove a dominated terminator with
// such a condition.

sil_stage canonical

import Builtin
import Swift

enum E {
	case A
	case B
	case C
}

class Base { }

class Derived1 : Base { }

class Derived2 : Base { }

// CHECK-LABEL: sil @test_checked_cast_br
// CHECK: select_enum
// CHECK: checked_cast_br
// CHECK: integer_literal $Builtin.Int64, 1
// CHECK: select_enum
// CHECK: checked_cast_br
// CHECK: integer_literal $Builtin.Int64, 2
// CHECK: integer_literal $Builtin.Int64, 3
// CHECK: return
sil @test_checked_cast_br : $@convention(thin) (E, @owned Base, @owned Base, @owned Base, @owned Base) -> Builtin.Int64 {
bb0(%0 : $E, %1 : $Base, %2 : $Base, %3 : $Base, %4 : $Base):
  %s1 = select_enum %0 : $E, case #E.A!enumelt: %1, default %2 : $Base
  checked_cast_br %s1 : $Base to $Derived1, bb1, bb2

bb1(%a1 : $Derived1):
  %i1 = integer_literal $Builtin.Int64, 1
  br bb5(%i1 : $Builtin.Int64)

bb2:
  %s2 = select_enum %0 : $E, case #E.B!enumelt: %3, default %4 : $Base
  checked_cast_br %s2 : $Base to $Derived1, bb3, bb4

bb3(%a2 : $Derived1):
  %i2 = integer_literal $Builtin.Int64, 2
  br bb5(%i2 : $Builtin.Int64)

bb4:
  %i3 = integer_literal $Builtin.Int64, 3
  br bb5(%i3 : $Builtin.Int64)

bb5(%a3 : $Builtin.Int64):
  return %a3 : $Builtin.Int64
}

// CHECK-LABEL: sil @test_cond_br
// CHECK: select_enum
// CHECK: cond_br
// CHECK: integer_literal $Builtin.Int64, 1
// CHECK: select_enum
// CHECK: cond_br
// CHECK: integer_literal $Builtin.Int64, 2
// CHECK: integer_literal $Builtin.Int64, 3
// CHECK: return
sil @test_cond_br : $@convention(thin) (E, @owned Base, @owned Base, @owned Base, @owned Base) -> Builtin.Int64 {
bb0(%0 : $E, %1 : $Base, %2 : $Base, %3 : $Base, %4 : $Base):
  %t1 = integer_literal $Builtin.Int1, -1
  %f1 = integer_literal $Builtin.Int1, 0
  %s1 = select_enum %0 : $E, case #E.A!enumelt: %t1, default %f1 : $Builtin.Int1
  cond_br %s1, bb1, bb2

bb1:
  %i1 = integer_literal $Builtin.Int64, 1
  br bb5(%i1 : $Builtin.Int64)

bb2:
  %s2 = select_enum %0 : $E, case #E.B!enumelt: %t1, default %f1 : $Builtin.Int1
  cond_br %s2, bb3, bb4

bb3:
  %i2 = integer_literal $Builtin.Int64, 2
  br bb5(%i2 : $Builtin.Int64)

bb4:
  %i3 = integer_literal $Builtin.Int64, 3
  br bb5(%i3 : $Builtin.Int64)

bb5(%a3 : $Builtin.Int64):
  return %a3 : $Builtin.Int64
}

