// RUN: %target-sil-opt -enable-sil-verify-all %s -simplify-bb-args -sroa-bb-args | %FileCheck %s
sil_stage canonical

import Builtin
import Swift
import SwiftShims

enum E {
	case A
	case B
}

// Check that we don't crash in simplifyToSelectValue (rdar://problem/20037686)

// CHECK-LABEL: @test
sil public @test : $@convention(thin) (Builtin.Int64, @inout E) -> () {

bb0(%0 : $Builtin.Int64, %x : $*E):
  %1 = integer_literal $Builtin.Int64, 0
  %2 = builtin "cmp_eq_Int64"(%0 : $Builtin.Int64, %1 : $Builtin.Int64) : $Builtin.Int1 // user: %473
  cond_br %2, bb3, bb1

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

bb2(%6 : $E):
  store %6 to %x : $*E
  br bb3

bb3:                                            // Preds: bb0 bb409
  %8 = tuple ()                                // user: %4307
  return %8 : $()                              // id: %4307
}

// Verify that we do not crash in argument splitting (rdar://problem/25008398).

class C {
  @_hasStorage let x: Builtin.Int32
  init()
}

struct Pair {
  @_hasStorage let first: C
  @_hasStorage let second: C
}

// CHECK-LABEL: @simplify_args_crash
sil @simplify_args_crash : $@convention(thin) (Pair) -> () {
bb0(%1 : $Pair):
  // CHECK: [[SECOND:%.*]] = struct_extract %0 : $Pair, #Pair.second
  // CHECK: [[FIRST:%.*]] = struct_extract %0 : $Pair, #Pair.first
  // CHECK: br bb1([[FIRST]] : $C, [[SECOND]] : $C)
  br bb1(%1 : $Pair)

// CHECK: bb1([[FIRST2:%.*]] : $C, [[SECOND2:%.*]] : $C):
bb1(%2 : $Pair):
  // CHECK: [[STRUCT:%.*]] = struct $Pair ([[FIRST2]] : $C, [[SECOND2]] : $C)
  // CHECK: [[SECOND3:%.*]] = struct_extract [[STRUCT]] : $Pair, #Pair.second
  // CHECK: [[FIRST3:%.*]] = struct_extract [[STRUCT]] : $Pair, #Pair.first
  // CHECK: br bb1([[FIRST3]] : $C, [[SECOND3]] : $C)
  br bb1(%2 : $Pair)
}
