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

sil_stage canonical

import Builtin
import Swift

// "return (x + y) + (x + y)"
// make sure we are only calculating x+y once.

//CHECK-LABEL: simply_arith
//CHECK: builtin
//CHECK: cond_fail
//CHECK: builtin
//CHECK: cond_fail
//CHECK-NOT: builtin
//CHECK-NOT: cond_fail
//CHECK: return
sil @simply_arith : $@convention(thin) (Int32, Int32) -> Int32 {
bb0(%0 : $Int32, %1 : $Int32):
  debug_value %0 : $Int32, let, name "x" // id: %2
  debug_value %1 : $Int32, let, name "y" // id: %3
  %5 = struct_extract %0 : $Int32, #Int32._value       // user: %8
  %6 = struct_extract %1 : $Int32, #Int32._value       // user: %8
  %7 = integer_literal $Builtin.Int1, -1          // user: %8
  %8 = builtin "sadd_with_overflow_Int32"(%5 : $Builtin.Int32, %6 : $Builtin.Int32, %7 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1) // users: %9, %10
  %9 = tuple_extract %8 : $(Builtin.Int32, Builtin.Int1), 0 // user: %12
  %10 = tuple_extract %8 : $(Builtin.Int32, Builtin.Int1), 1 // user: %11
  cond_fail %10 : $Builtin.Int1                   // id: %11
  %12 = struct $Int32 (%9 : $Builtin.Int32)          // user: %23
  %14 = struct_extract %0 : $Int32, #Int32._value      // user: %17
  %15 = struct_extract %1 : $Int32, #Int32._value      // user: %17
  %16 = integer_literal $Builtin.Int1, -1         // user: %17
  %17 = builtin "sadd_with_overflow_Int32"(%14 : $Builtin.Int32, %15 : $Builtin.Int32, %16 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1) // users: %18, %19
  %18 = tuple_extract %17 : $(Builtin.Int32, Builtin.Int1), 0 // user: %21
  %19 = tuple_extract %17 : $(Builtin.Int32, Builtin.Int1), 1 // user: %20
  cond_fail %19 : $Builtin.Int1                   // id: %20
  %21 = struct $Int32 (%18 : $Builtin.Int32)         // user: %24
  %23 = struct_extract %12 : $Int32, #Int32._value     // user: %26
  %24 = struct_extract %21 : $Int32, #Int32._value     // user: %26
  %25 = integer_literal $Builtin.Int1, -1         // user: %26
  %26 = builtin "sadd_with_overflow_Int32"(%23 : $Builtin.Int32, %24 : $Builtin.Int32, %25 : $Builtin.Int1) : $(Builtin.Int32, Builtin.Int1) // users: %27, %28
  %27 = tuple_extract %26 : $(Builtin.Int32, Builtin.Int1), 0 // user: %30
  %28 = tuple_extract %26 : $(Builtin.Int32, Builtin.Int1), 1 // user: %29
  cond_fail %28 : $Builtin.Int1                   // id: %29
  %30 = struct $Int32 (%27 : $Builtin.Int32)         // user: %31
  return %30 : $Int32                               // id: %31
}

sil @readnone : $@convention(thin) (Int64, Int64) -> Int64 {
bb0(%0 : $Int64, %1 : $Int64):
  return %0 : $Int64
}

sil_global @gg : $Int64

sil @readsome : $@convention(thin) (Int64, Int64) -> Int64 {
bb0(%0 : $Int64, %1 : $Int64):
  %g = global_addr @gg : $*Int64
  %l = load %g : $*Int64
  return %l : $Int64
}

struct Storage {
	var a: Int64
	var b: Int64
	var c: Int64
}

class XX {
}

sil_global @ggs : $Storage

sil @retain_only : $@convention(thin) () -> XX {
bb0:
  %g = global_addr @ggs : $*Storage
  %a = address_to_pointer %g : $*Storage to $Builtin.RawPointer
  %r = raw_pointer_to_ref %a : $Builtin.RawPointer to $XX
  strong_retain %r : $XX
  return %r : $XX
}



//CHECK-LABEL: sil @cse_readnone_apply
//CHECK: [[A:%[0-9]+]] = apply
//CHECK: [[S:%[0-9]+]] = struct_extract [[A]]
//CHECK: builtin "sadd_with_overflow_Int64"([[S]] : $Builtin.Int64, [[S]] : $Builtin.Int64
//CHECK: return
sil @cse_readnone_apply : $@convention(thin) (Int64) -> Int64 {
bb0(%0 : $Int64):
  %2 = function_ref @readnone : $@convention(thin) (Int64, Int64) -> Int64
  %3 = integer_literal $Builtin.Int64, 3
  %4 = struct $Int64 (%3 : $Builtin.Int64)
  %5 = apply %2(%0, %4) : $@convention(thin) (Int64, Int64) -> Int64
  %6 = apply %2(%0, %4) : $@convention(thin) (Int64, Int64) -> Int64
  %7 = struct_extract %5 : $Int64, #Int64._value
  %8 = struct_extract %6 : $Int64, #Int64._value
  %9 = integer_literal $Builtin.Int1, 0
  %10 = builtin "sadd_with_overflow_Int64"(%7 : $Builtin.Int64, %8 : $Builtin.Int64, %9 : $Builtin.Int1) : $(Builtin.Int64, Builtin.Int1)
  %11 = tuple_extract %10 : $(Builtin.Int64, Builtin.Int1), 0
  %14 = struct $Int64 (%11 : $Builtin.Int64)
  return %14 : $Int64
}

//CHECK-LABEL: sil @dont_cse_readsome_apply
//CHECK: %{{[0-9]+}} = apply
//CHECK: %{{[0-9]+}} = apply
//CHECK: return
sil @dont_cse_readsome_apply : $@convention(thin) (Int64) -> Int64 {
bb0(%0 : $Int64):
  %2 = function_ref @readsome : $@convention(thin) (Int64, Int64) -> Int64
  %3 = integer_literal $Builtin.Int64, 3
  %4 = struct $Int64 (%3 : $Builtin.Int64)
  %5 = apply %2(%0, %4) : $@convention(thin) (Int64, Int64) -> Int64
  %6 = apply %2(%0, %4) : $@convention(thin) (Int64, Int64) -> Int64
  %7 = struct_extract %5 : $Int64, #Int64._value
  %8 = struct_extract %6 : $Int64, #Int64._value
  %9 = integer_literal $Builtin.Int1, 0
  %10 = builtin "sadd_with_overflow_Int64"(%7 : $Builtin.Int64, %8 : $Builtin.Int64, %9 : $Builtin.Int1) : $(Builtin.Int64, Builtin.Int1)
  %11 = tuple_extract %10 : $(Builtin.Int64, Builtin.Int1), 0
  %14 = struct $Int64 (%11 : $Builtin.Int64)
  return %14 : $Int64
}

//CHECK-LABEL: sil @dont_cse_retain_only_apply
//CHECK: %{{[0-9]+}} = apply
//CHECK: %{{[0-9]+}} = apply
//CHECK: return
sil @dont_cse_retain_only_apply : $@convention(thin) () -> () {
bb0:
  %f = function_ref @retain_only : $@convention(thin) () -> XX
  %a1 = apply %f() : $@convention(thin) () -> XX
  %a2 = apply %f() : $@convention(thin) () -> XX
  strong_release %a1 : $XX
  strong_release %a2 : $XX
  %r = tuple()
  return %r : $()
}

