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

sil_stage canonical

import Builtin
import Swift

sil @read_from_param : $@convention(thin) (@inout Int64, Int64) -> Int64 {
bb0(%0 : $*Int64, %1 : $Int64):
  debug_value %1 : $Int64
  %3 = struct_element_addr %0 : $*Int64, #Int64._value
  %4 = load %3 : $*Builtin.Int64
  return %1 : $Int64
}

//CHECK-LABEL: sil @licm_readonly_apply
//CHECK: %{{[0-9]+}} = apply
//CHECK: bb1:
//CHECK-NOT: {{ apply}}
//CHECK: return
sil @licm_readonly_apply : $@convention(thin) (Int64, @inout Int64) -> () {
bb0(%0 : $Int64, %1 : $*Int64):
  %2 = alloc_stack $Int64
  store %0 to %2 : $*Int64
  %9 = function_ref @read_from_param : $@convention(thin) (@inout Int64, Int64) -> Int64
  %10 = integer_literal $Builtin.Int64, 3
  %11 = struct $Int64 (%10 : $Builtin.Int64)
  %12 = struct_element_addr %1 : $*Int64, #Int64._value
  %13 = integer_literal $Builtin.Int1, -1
  br bb1

bb1:
  %21 = apply %9(%2, %11) : $@convention(thin) (@inout Int64, Int64) -> Int64
  %22 = load %12 : $*Builtin.Int64
  %23 = struct_extract %21 : $Int64, #Int64._value
  %24 = builtin "sadd_with_overflow_Int64"(%22 : $Builtin.Int64, %23 : $Builtin.Int64, %13 : $Builtin.Int1) : $(Builtin.Int64, Builtin.Int1)
  %25 = tuple_extract %24 : $(Builtin.Int64, Builtin.Int1), 0
  %28 = struct $Int64 (%25 : $Builtin.Int64)

  // This store does _not_ alias with the read in @read_from_param
  store %28 to %1 : $*Int64
  cond_br undef, bb1, bb2

bb2:
  %15 = tuple ()
  dealloc_stack %2 : $*Int64
  return %15 : $()
}

//CHECK-LABEL: sil @dont_licm_readonly_apply
//CHECK: bb1:
//CHECK: %{{[0-9]+}} = apply
//CHECK: return
sil @dont_licm_readonly_apply : $@convention(thin) (Int64, @inout Int64) -> () {
bb0(%0 : $Int64, %1 : $*Int64):
  %2 = alloc_stack $Int64
  store %0 to %2 : $*Int64
  %9 = function_ref @read_from_param : $@convention(thin) (@inout Int64, Int64) -> Int64
  %10 = integer_literal $Builtin.Int64, 3
  %11 = struct $Int64 (%10 : $Builtin.Int64)
  %12 = struct_element_addr %1 : $*Int64, #Int64._value
  %13 = integer_literal $Builtin.Int1, -1
  br bb1

bb1:
  %21 = apply %9(%2, %11) : $@convention(thin) (@inout Int64, Int64) -> Int64
  %22 = load %12 : $*Builtin.Int64
  %23 = struct_extract %21 : $Int64, #Int64._value
  %24 = builtin "sadd_with_overflow_Int64"(%22 : $Builtin.Int64, %23 : $Builtin.Int64, %13 : $Builtin.Int1) : $(Builtin.Int64, Builtin.Int1)
  %25 = tuple_extract %24 : $(Builtin.Int64, Builtin.Int1), 0
  %28 = struct $Int64 (%25 : $Builtin.Int64)

  // This store does alias with the read in @read_from_param
  store %28 to %2 : $*Int64
  cond_br undef, bb1, bb2

bb2:
  %15 = tuple ()
  dealloc_stack %2 : $*Int64
  return %15 : $()
}

class X {
}

sil_global @_static_object : $X

sil @retain_only : $@convention(thin) () -> @owned X {
bb0:
  %1 = global_addr @_static_object : $*X
  %2 = address_to_pointer %1 : $*X to $Builtin.RawPointer
  %3 = raw_pointer_to_ref %2 : $Builtin.RawPointer to $X
  strong_retain %3 : $X
  return %3 : $X
}

//CHECK-LABEL: sil @dont_licm_retainonly_apply
//CHECK: bb1:
//CHECK: %{{[0-9]+}} = apply
//CHECK: return
sil @dont_licm_retainonly_apply : $@convention(thin) (Int64, @inout Int64) -> () {
bb0(%0 : $Int64, %1 : $*Int64):
  %9 = function_ref @retain_only : $@convention(thin) () -> @owned X
  br bb1

bb1:
  %21 = apply %9() : $@convention(thin) () -> @owned X
  strong_release %21 : $X
  cond_br undef, bb1, bb2

bb2:
  %15 = tuple ()
  return %15 : $()
}

