// RUN: %target-sil-opt -mark-uninitialized-fixup %s | %FileCheck %s

sil_stage raw

import Builtin

// CHECK-LABEL: sil [ossa] @single_bb_single_proj_case : $@convention(thin) () -> () {
// CHECK: [[BOX:%.*]] = alloc_box ${ var Builtin.Int32 }
// CHECK: [[PB:%.*]] = project_box [[BOX]]
// CHECK: mark_uninitialized [rootself] [[PB]]
sil [ossa] @single_bb_single_proj_case : $@convention(thin) () -> () {
bb0:
  %0 = alloc_box ${ var Builtin.Int32 }
  %1 = mark_uninitialized [rootself] %0 : ${ var Builtin.Int32 }
  %2 = project_box %1 : ${ var Builtin.Int32 }, 0
  destroy_value %1 : ${ var Builtin.Int32 }
  %9999 = tuple()
  return %9999 : $()
}

// CHECK-LABEL: sil [ossa] @single_bb_multiple_proj_case : $@convention(thin) () -> () {
// CHECK: [[BOX:%.*]] = alloc_box ${ var Builtin.Int32 }
// CHECK: [[PB:%.*]] = project_box [[BOX]]
// CHECK: mark_uninitialized [rootself] [[PB]]
// CHECK: project_box [[BOX]]
sil [ossa] @single_bb_multiple_proj_case : $@convention(thin) () -> () {
bb0:
  %0 = alloc_box ${ var Builtin.Int32 }
  %1 = mark_uninitialized [rootself] %0 : ${ var Builtin.Int32 }
  %2 = project_box %1 : ${ var Builtin.Int32 }, 0
  %3 = project_box %1 : ${ var Builtin.Int32 }, 0
  destroy_value %1 : ${ var Builtin.Int32 }
  %9999 = tuple()
  return %9999 : $()
}


// CHECK-LABEL: sil [ossa] @multiple_bb_case : $@convention(thin) () -> () {
// CHECK:   [[BOX:%.*]] = alloc_box ${ var Builtin.Int32 }
// CHECK:   [[PB:%.*]] = project_box [[BOX]]
// CHECK:   mark_uninitialized [rootself] [[PB]]
// CHECK:   br [[NEXT_BB:bb[0-9]+]]
//
// CHECK: [[NEXT_BB]]:
// CHECK:   project_box [[BOX]]
sil [ossa] @multiple_bb_case : $@convention(thin) () -> () {
bb0:
  %0 = alloc_box ${ var Builtin.Int32 }
  %1 = mark_uninitialized [rootself] %0 : ${ var Builtin.Int32 }
  %2 = project_box %1 : ${ var Builtin.Int32 }, 0
  br bb1

bb1:
  %3 = project_box %1 : ${ var Builtin.Int32 }, 0
  destroy_value %1 : ${ var Builtin.Int32 }
  %9999 = tuple()
  return %9999 : $()
}

struct Bool {
  var _value: Builtin.Int1
}

// CHECK-LABEL: sil [ossa] @test_rauw_uses_of_project_box : $@convention(thin) (Builtin.Int1, @thin Bool.Type) -> Bool {
// CHECK: [[BOX:%.*]] = alloc_box ${ var Bool }
// CHECK: [[PB:%.*]] = project_box [[BOX]]
// CHECK: [[MUI:%.*]] = mark_uninitialized [rootself] [[PB]]
// CHECK: struct_element_addr [[MUI]]
// CHECK: load [trivial] [[MUI]]
// CHECK: destroy_value [[BOX]]
sil [ossa] @test_rauw_uses_of_project_box : $@convention(thin) (Builtin.Int1, @thin Bool.Type) -> Bool {
bb0(%0 : $Builtin.Int1, %1 : $@thin Bool.Type):
  %2 = alloc_box ${ var Bool }, var, name "self"
  %3 = mark_uninitialized [rootself] %2 : ${ var Bool }
  %4 = project_box %3 : ${ var Bool }, 0
  debug_value %0 : $Builtin.Int1, let, name "v", argno 1
  %6 = struct_element_addr %4 : $*Bool, #Bool._value
  assign %0 to %6 : $*Builtin.Int1
  %8 = load [trivial] %4 : $*Bool
  destroy_value %3 : ${ var Bool }
  return %8 : $Bool
}

// This is a simulation of the type of callee generated by capture promotion.
sil @capture_promotion_generated_callee : $@convention(thin) (@in Bool) -> ()

// CHECK-LABEL: sil [ossa] @test_copyvalue_use_of_projectbox : $@convention(thin) (Builtin.Int1) -> () {
// CHECK: bb0([[ARG:%.*]] : $Builtin.Int1):
// CHECK:   [[BOX:%.*]] = alloc_box ${ var Bool }, var, name "self"
// CHECK:   [[PB:%.*]] = project_box [[BOX]]
// CHECK:   [[MUI:%.*]] = mark_uninitialized [rootself] [[PB]]
// CHECK:   [[BOX_COPY:%.*]] = copy_value [[BOX]]
// CHECK:   [[PB_BOX_COPY:%.*]] = project_box [[BOX_COPY]]
// CHECK:   destroy_value [[BOX_COPY]]
// CHECK:   destroy_value [[BOX]]
sil [ossa] @test_copyvalue_use_of_projectbox : $@convention(thin) (Builtin.Int1) -> () {
bb0(%0 : $Builtin.Int1):
  // Initial initialization.
  %1 = alloc_box ${ var Bool }, var, name "self"
  %2 = mark_uninitialized [rootself] %1 : ${ var Bool }
  %3 = project_box %2 : ${ var Bool }, 0
  %4 = struct_element_addr %3 : $*Bool, #Bool._value
  store %0 to [trivial] %4 : $*Builtin.Int1

  // copy + project_box for function_call. This can happen via
  // capture_promotion.
  %5 = function_ref @capture_promotion_generated_callee : $@convention(thin) (@in Bool) -> ()
  %6 = copy_value %2 : ${ var Bool }
  %7 = project_box %6 : ${ var Bool }, 0
  %8 = apply %5(%7) : $@convention(thin) (@in Bool) -> ()
  destroy_value %6 : ${ var Bool }

  // Epilog
  destroy_value %2 : ${ var Bool }
  %9999 = tuple()
  return %9999 : $()
}
