// RUN: %target-sil-opt -enable-sil-verify-all -unsafe-guaranteed-peephole %s | %FileCheck %s
sil_stage canonical

import Builtin
import Swift

public class Base {
  public func beep()
}

public class Foo : Base {
  public override func beep()
}

sil @beep : $@convention(thin) () -> ()
sil @beep2 : $@convention(thin) (@owned Foo) -> ()
sil @beep_or_throw : $@convention(thin) () -> @error Error

// CHECK-LABEL: sil @testUnsafeGuaranteed_simple
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_simple : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_simple_after
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK-NOT: release
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_simple_after : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  strong_release %5 : $Foo
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_simple_after2
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK-NOT: release
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_simple_after2 : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  release_value %4 : $(Foo, Builtin.Int8)
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_simple_after3
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK-NOT: release
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_simple_after3 : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  release_value %0 : $Foo
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_noretain
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK:   [[G:%.*]] = builtin "unsafeGuaranteed"
// CHECK:   [[GV:%.*]] = tuple_extract [[G]]{{.*}}, 0
// CHECK:   [[M:%.*]] = class_method [[GV]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[GV]])
// CHECK:   release
// CHECK:   unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_noretain : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_norelease
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK:   retain [[P]]
// CHECK:   [[G:%.*]] = builtin "unsafeGuaranteed"
// CHECK:   [[GV:%.*]] = tuple_extract [[G]]{{.*}}, 0
// CHECK:   [[M:%.*]] = class_method [[GV]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[GV]])
// CHECK:   unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_norelease : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_skip_rr
// CHECK: bb0([[P:%.*]] : $Foo, [[P2:%.*]] : $Foo):
// CHECK-NOT: retain [[P]]
// CHECK-NOT: unsafeGuaranteed
// CHECK:   retain [[P2]]
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release [[P]]
// CHECK:   release [[P2]]
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_skip_rr : $@convention(method) (@guaranteed Foo, @guaranteed Foo) -> () {
bb0(%0 : $Foo, %1: $Foo):
  strong_retain %0 : $Foo
  strong_retain %1 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  strong_release %1 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_other_inst_between_retain
// CHECK: bb0
// CHECK:   strong_retain [[P]]
// CHECK:   cond_fail
// CHECK:   builtin "unsafeGuaranteed"
// CHECK:   class_method {{.*}} : $Foo, #Foo.beep
// CHECK:   apply
// CHECK:   strong_release
// CHECK:   builtin "unsafeGuaranteedEnd"
// CHECK: }
sil @testUnsafeGuaranteed_other_inst_between_retain: $@convention(method) (@guaranteed Foo, Builtin.Int1) -> () {
bb0(%0 : $Foo, %1 : $Builtin.Int1):
  strong_retain %0 : $Foo
  cond_fail %1 : $Builtin.Int1
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_other_inst_between_release
// CHECK: bb0
// CHECK:   strong_retain [[P]]
// CHECK:   builtin "unsafeGuaranteed"
// CHECK:   class_method {{.*}} : $Foo, #Foo.beep
// CHECK:   apply
// CHECK:   strong_release
// CHECK:   cond_fail
// CHECK:   builtin "unsafeGuaranteedEnd"
// CHECK: }
sil @testUnsafeGuaranteed_other_inst_between_release: $@convention(method) (@guaranteed Foo, Builtin.Int1) -> () {
bb0(%0 : $Foo, %1 : $Builtin.Int1):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  cond_fail %1 : $Builtin.Int1
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_cfg
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   checked_cast_br [exact] [[P]] : $Foo to $Foo, bb1, bb3
// CHECK: bb1([[P2:%.*]] : $Foo):
// CHECK:   function_ref @beep : $@convention(thin) () -> ()
// CHECK:   %4 = apply %3() : $@convention(thin) () -> ()
// CHECK:   br bb2
// CHECK: bb2:
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: bb3:
// CHECK:   [[M:%.*]] = class_method %0 : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK:   br bb2
// CHECK: }
sil @testUnsafeGuaranteed_cfg : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  checked_cast_br [exact] %5 : $Foo to $Foo, bb1, bb3

bb1(%11 : $Foo):
  %12 = function_ref @beep : $@convention(thin) () -> ()
  %13 = apply %12() : $@convention(thin) () -> ()
  br bb2

bb2:
  strong_release %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()

bb3:
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  br bb2
}

/// CHECK-LABEL: sil @testUnsafeGuaranteed_cfg_2
/// CHECK: unsafeGuaranteed
/// CHECK: unsafeGuaranteedEnd
/// CHECK: }
sil @testUnsafeGuaranteed_cfg_2 : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  checked_cast_br [exact] %5 : $Foo to $Foo, bb1, bb3

bb1(%11 : $Foo):
  %12 = function_ref @beep : $@convention(thin) () -> ()
  %13 = apply %12() : $@convention(thin) () -> ()
  br bb2

bb2:
// Make sure we don't crash on an unsafeGuaranteedEnd walking backwards in the
// block.
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()

bb3:
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  br bb2
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_debug_inst
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_debug_inst : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  debug_value %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  debug_value %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_retain_release
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK-NOT: strong_retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   retain_value [[P]]
// CHECK:   [[M:%.*]] = function_ref @beep2
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_retain_release : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  retain_value %4 : $(Foo, Builtin.Int8)
  %19 = function_ref @beep2 :  $@convention(thin) (@owned Foo) -> ()
  %20 = apply %19(%5) : $@convention(thin) (@owned Foo) -> ()
  release_value %4 : $(Foo, Builtin.Int8)
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

struct MyInt {
  @_hasStorage var val: Builtin.Int32
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_sideeffectfree_inst
// CHECK: bb0([[P:%.*]] : $Foo
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_sideeffectfree_inst : $@convention(method) (@guaranteed Foo, Builtin.Int32) -> () {
bb0(%0 : $Foo, %1: $Builtin.Int32):
  strong_retain %0 : $Foo
  debug_value %0 : $Foo
  %3 = struct $MyInt(%1 : $Builtin.Int32)
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  %21 = struct $MyInt(%1 : $Builtin.Int32)
  debug_value %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_sideeffect_inst
// CHECK: bb0([[P:%.*]] : $Foo
// CHECK: retain
// CHECK: unsafeGuaranteed
// CHECK: release
// CHECK: unsafeGuaranteedEnd
// CHECK: }
sil @testUnsafeGuaranteed_sideeffect_inst : $@convention(method) (@guaranteed Foo, @inout Builtin.Int32, Builtin.Int32) -> () {
bb0(%0 : $Foo, %1: $*Builtin.Int32, %2: $Builtin.Int32):
  strong_retain %0 : $Foo
  store %2 to %1 : $*Builtin.Int32
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_sideeffect_inst2
// CHECK: bb0([[P:%.*]] : $Foo
// CHECK: retain
// CHECK: unsafeGuaranteed
// CHECK: release
// CHECK: unsafeGuaranteedEnd
// CHECK: }
sil @testUnsafeGuaranteed_sideeffect_inst2 : $@convention(method) (@guaranteed Foo, @inout Builtin.Int32, Builtin.Int32) -> () {
bb0(%0 : $Foo, %1: $*Builtin.Int32, %2: $Builtin.Int32):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  store %2 to %1 : $*Builtin.Int32
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_cast_inst
// CHECK: bb0([[P:%.*]] : $Foo
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:  [[U:%.*]] = upcast [[P]] : $Foo to $Base
// CHECK:   [[M:%.*]] = class_method [[U]] : $Base, #Base.beep
// CHECK:   apply [[M]]([[U]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_cast_inst : $@convention(method) (@guaranteed Foo, Builtin.Int32) -> () {
bb0(%0 : $Foo, %1: $Builtin.Int32):
  strong_retain %0 : $Foo
  debug_value %0 : $Foo
  %3 = struct $MyInt(%1 : $Builtin.Int32)
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %7 = upcast %5 : $Foo to $Base
  %19 = class_method %7 : $Base, #Base.beep!1 : (Base) -> () -> (), $@convention(method) (@guaranteed Base) -> ()
  %20 = apply %19(%7) : $@convention(method) (@guaranteed Base) -> ()
  strong_release %7 : $Base
  %21 = struct $MyInt(%1 : $Builtin.Int32)
  debug_value %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_cast2_inst
// CHECK: bb0([[P:%.*]] : $AnyObject
// CHECK:  [[C:%.*]] = unchecked_ref_cast [[P]] : $AnyObject to $Foo
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:  [[U:%.*]] = upcast [[C]] : $Foo to $Base
// CHECK:   [[M:%.*]] = class_method [[U]] : $Base, #Base.beep
// CHECK:   apply [[M]]([[U]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_cast2_inst : $@convention(method) (@guaranteed AnyObject, Builtin.Int32) -> () {
bb0(%0 : $AnyObject, %1: $Builtin.Int32):
  %2 = unchecked_ref_cast %0 : $AnyObject to $Foo
  strong_retain %0 : $AnyObject
  debug_value %0 : $AnyObject
  %3 = struct $MyInt(%1 : $Builtin.Int32)
  %4 = builtin "unsafeGuaranteed"<Foo>(%2 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %7 = upcast %5 : $Foo to $Base
  %19 = class_method %7 : $Base, #Base.beep!1 : (Base) -> () -> (), $@convention(method) (@guaranteed Base) -> ()
  %20 = apply %19(%7) : $@convention(method) (@guaranteed Base) -> ()
  strong_release %7 : $Base
  %21 = struct $MyInt(%1 : $Builtin.Int32)
  debug_value %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_throw
// CHECK:bb0
// CHECK: unsafeGuaranteed
// CHECK:bb1
// CHECK: unsafeGuaranteedEnd
// CHECK: return
// CHECK:bb2
// CHECK: throw
sil @testUnsafeGuaranteed_throw : $@convention(method) (@guaranteed Foo) -> @error Error {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %7 = function_ref @beep_or_throw : $@convention(thin) () -> @error Error
  try_apply %7() : $@convention(thin) () -> @error Error, normal bb1, error bb2

bb1(%15: $()):
  strong_release %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()

bb2(%9: $Error):
  strong_release %5 : $Foo
  throw  %9: $Error
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_simple_retain_release_pair
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_simple_retain_release_pair : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  retain_value %4 : $(Foo, Builtin.Int8)
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  strong_release %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}

// CHECK-LABEL: sil @testUnsafeGuaranteed_simple_retain_release_pair2
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK-NOT: retain
// CHECK-NOT: unsafeGuaranteed
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK:   apply [[M]]([[P]])
// CHECK-NOT: release
// CHECK-NOT: unsafeGuaranteedEnd
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_simple_retain_release_pair2 : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  retain_value %4 : $(Foo, Builtin.Int8)
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  strong_release %5 : $Foo
  %17 = tuple ()
  return %17 : $()
}


// CHECK-LABEL: sil @testUnsafeGuaranteed_simple_retain_release_pair_not_safe
// CHECK: bb0([[P:%.*]] : $Foo):
// CHECK:   [[M:%.*]] = class_method [[P]] : $Foo, #Foo.beep
// CHECK: retain
// CHECK: release
// CHECK:   apply [[M]]([[P]])
// CHECK: release
// CHECK:   [[T:%.*]] = tuple ()
// CHECK:   return [[T]]
// CHECK: }
sil @testUnsafeGuaranteed_simple_retain_release_pair_not_safe : $@convention(method) (@guaranteed Foo) -> () {
bb0(%0 : $Foo):
  strong_retain %0 : $Foo
  %4 = builtin "unsafeGuaranteed"<Foo>(%0 : $Foo) : $(Foo, Builtin.Int8)
  %5 = tuple_extract %4 : $(Foo, Builtin.Int8), 0
  %6 = tuple_extract %4 : $(Foo, Builtin.Int8), 1
  %19 = class_method %5 : $Foo, #Foo.beep!1 : (Foo) -> () -> (), $@convention(method) (@guaranteed Foo) -> ()
  retain_value %4 : $(Foo, Builtin.Int8)
  strong_release %0 : $Foo
  %20 = apply %19(%5) : $@convention(method) (@guaranteed Foo) -> ()
  strong_release %5 : $Foo
  strong_release %5 : $Foo
  %16 = builtin "unsafeGuaranteedEnd"(%6 : $Builtin.Int8) : $()
  %17 = tuple ()
  return %17 : $()
}
