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

sil_stage canonical

import Builtin
import Swift

sil [_semantics "array.get_count"] @getCount : $@convention(method) (@guaranteed Array<Int>) -> Int
sil [_semantics "array.get_capacity"] @getCapacity : $@convention(method) (@guaranteed Array<Int>) -> Int
sil [_semantics "array.check_subscript"] @checkSubscript : $@convention(method) (Int, Bool, @guaranteed Array<Int>) -> ()
sil [_semantics "array.check_index"] @checkIndex : $@convention(method) (Int, @guaranteed Array<Int>) -> ()

// CHECK-LABEL:   sil @cse_get_count
// CHECK:           [[R:%[0-9]+]] = apply
// CHECK-NOT:       apply
// CHECK:           tuple ([[R]] : $Int, [[R]] : $Int)
// CHECK-NEXT:      return
sil @cse_get_count : $@convention(thin) (@guaranteed Array<Int>) -> (Int, Int) {
bb0(%0 : $Array<Int>):
  %f1 = function_ref @getCount : $@convention(method) (@guaranteed Array<Int>) -> Int
  %c1 = apply %f1(%0) : $@convention(method) (@guaranteed Array<Int>) -> Int
  %c2 = apply %f1(%0) : $@convention(method) (@guaranteed Array<Int>) -> Int
  %r1 = tuple (%c1 : $Int, %c2 : $Int)
  return %r1 : $(Int, Int)
}

// CHECK-LABEL:   sil @cse_get_capacity
// CHECK:           [[R:%[0-9]+]] = apply
// CHECK-NOT:       apply
// CHECK:           tuple ([[R]] : $Int, [[R]] : $Int)
// CHECK-NEXT:      return
sil @cse_get_capacity : $@convention(thin) (@guaranteed Array<Int>) -> (Int, Int) {
bb0(%0 : $Array<Int>):
  %f1 = function_ref @getCapacity : $@convention(method) (@guaranteed Array<Int>) -> Int
  %c1 = apply %f1(%0) : $@convention(method) (@guaranteed Array<Int>) -> Int
  %c2 = apply %f1(%0) : $@convention(method) (@guaranteed Array<Int>) -> Int
  %r1 = tuple (%c1 : $Int, %c2 : $Int)
  return %r1 : $(Int, Int)
}

// CHECK-LABEL:   sil @cse_check_subscript
// CHECK:           = function_ref
// CHECK-NEXT:      apply
// CHECK-NEXT:      tuple
// CHECK-NEXT:      return
sil @cse_check_subscript : $@convention(thin) (@guaranteed Array<Int>, Int, Bool) -> () {
bb0(%0 : $Array<Int>, %1 : $Int, %2 : $Bool):
  %f1 = function_ref @checkSubscript : $@convention(method) (Int, Bool, @guaranteed Array<Int>) -> ()
  %c1 = apply %f1(%1, %2, %0) : $@convention(method) (Int, Bool, @guaranteed Array<Int>) -> ()
  %c2 = apply %f1(%1, %2, %0) : $@convention(method) (Int, Bool, @guaranteed Array<Int>) -> ()
  %r1 = tuple ()
  return %r1 : $()
}

// CHECK-LABEL:   sil @cse_check_index
// CHECK:           = function_ref
// CHECK-NEXT:      apply
// CHECK-NEXT:      tuple
// CHECK-NEXT:      return
sil @cse_check_index : $@convention(thin) (@guaranteed Array<Int>, Int) -> () {
bb0(%0 : $Array<Int>, %1 : $Int):
  %f1 = function_ref @checkIndex : $@convention(method) (Int, @guaranteed Array<Int>) -> ()
  %c1 = apply %f1(%1, %0) : $@convention(method) (Int, @guaranteed Array<Int>) -> ()
  %c2 = apply %f1(%1, %0) : $@convention(method) (Int, @guaranteed Array<Int>) -> ()
  %r1 = tuple ()
  return %r1 : $()
}

