// RUN: %target-sil-opt -enable-sil-verify-all %/s -devirtualizer -dce -save-optimization-record-path=%t.yaml | %FileCheck %s
// RUN: %FileCheck -check-prefix=YAML -input-file=%t.yaml %s

sil_stage canonical

import Builtin
import Swift

class Bar {
  init()
  func foo()
}

sil_global @x : $Bar


// CHECK: function_with_cm
// CHECK: function_ref @_TFC4main3Bar3foofS0_FT_T_
// CHECK-NEXT: begin_borrow
// CHECK-NEXT: apply
// CHECK-NOT: class_method
// CHECK: return

// YAML:      --- !Passed
// YAML-NEXT: Pass:            sil-devirtualizer
// YAML-NEXT: Name:            sil.ClassMethodDevirtualized
// YAML-NEXT: DebugLoc:
// YAML-NEXT:   File:            {{.*}}/devirtualize_ownership.sil
// YAML-NEXT:   Line:            46
// YAML-NEXT:   Column:          8
// YAML-NEXT: Function:        function_with_cm
// YAML-NEXT: Args:
// YAML-NEXT:   - String:          'Devirtualized call to class method '
// YAML-NEXT:   - Method:          '"main.Bar.foo(_:)"'
// YAML-NEXT:     DebugLoc:
// YAML-NEXT:       File:            {{.*}}/devirtualize_ownership.sil
// YAML-NEXT:       Line:            52
// YAML-NEXT:       Column:          6
// YAML-NEXT: ...

sil [ossa] @function_with_cm : $@convention(thin) () -> () {
bb0:
  %0 = global_addr @x : $*Bar                     // users: %2, %3
  %1 = alloc_ref $Bar                             // user: %2
  %5 = class_method %1 : $Bar, #Bar.foo!1 : (Bar) -> () -> (), $@convention(method) (@guaranteed Bar) -> () // user: %6
  %6 = apply %5(%1) : $@convention(method) (@guaranteed Bar) -> ()
  destroy_value %1 : $Bar
  %7 = tuple ()                                   // user: %8
  return %7 : $()                                 // id: %8
}

sil @_TFC4main3Bar3foofS0_FT_T_ : $@convention(method) (@guaranteed Bar) -> ()

sil_vtable Bar {
  #Bar.foo!1: @_TFC4main3Bar3foofS0_FT_T_
}

private class Node {
  @_hasStorage var index: Int { get set }
  init(index: Int)
   deinit
}

// CHECK-LABEL: sil private [ossa] @class_method_apply
sil private [ossa] @class_method_apply : $@convention(method) (@guaranteed Node) -> Int {
bb0(%0 : @guaranteed $Node):
  // CHECK: bb0([[ARG:%.*]] :
  // CHECK: [[ARG_COPY:%.*]] = copy_value [[ARG]]
  %1 = copy_value %0 : $Node
  // CHECK-NOT: class_method [[ARG_COPY]]
  // CHECK: [[FUNC:%.*]] = function_ref @transparent_target
  // CHECK: [[BORROW_ARG_COPY:%.*]] = begin_borrow [[ARG_COPY]]
  %3 = class_method %1 : $Node, #Node.index!getter.1 : (Node) -> () -> Int, $@convention(method) (@guaranteed Node) -> Int
  // CHECK: [[RESULT:%.*]] = apply [[FUNC]]([[BORROW_ARG_COPY]])
  %4 = apply %3(%1) : $@convention(method) (@guaranteed Node) -> Int
  // CHECK: destroy_value [[ARG_COPY]]
  destroy_value %1 : $Node
  // return [[RESULT]]
  return %4 : $Int
}

// YAML-NEXT: --- !Passed
// YAML-NEXT: Pass:            sil-devirtualizer
// YAML-NEXT: Name:            sil.ClassMethodDevirtualized
// YAML-NEXT: DebugLoc:
// YAML-NEXT:   File:            {{.*}}/devirtualize_ownership.sil
// YAML-NEXT:   Line:            75
// YAML-NEXT:   Column:          8
// YAML-NEXT: Function:        class_method_apply
// YAML-NEXT: Args:
// YAML-NEXT:   - String:          'Devirtualized call to class method '
// YAML-NEXT:   - Method:          '"transparent_target"'
// YAML-NEXT:     DebugLoc:
// YAML-NEXT:       File:            {{.*}}/devirtualize_ownership.sil
// YAML-NEXT:       Line:            101
// YAML-NEXT:       Column:          46
// YAML-NEXT: ...


// CHECK-LABEL: sil private [transparent] [noinline] [ossa] @transparent_target
sil private [transparent] [noinline] [ossa] @transparent_target : $@convention(method) (@guaranteed Node) -> Int {
bb0(%0 : @guaranteed $Node):
  %2 = ref_element_addr %0 : $Node, #Node.index
  %3 = load [trivial] %2 : $*Int
  // CHECK: return
  return %3 : $Int
}

sil_vtable Node {
  #Node.index!getter.1: @transparent_target
}

private class B {
  class func foo() -> Int
}

private class C : B { }

sil [ossa] @_TZFC4metaP33_7026FC13D35FB9700BACF693F51A99011B3foofMS0_FT_Si : $@convention(method) (@thick B.Type) -> Int

// CHECK-LABEL: sil private [noinline] [ossa] @_TF4metaP33_7026FC13D35FB9700BACF693F51A99016callerFMCS_P33_7026FC13D35FB9700BACF693F51A99011CT_
sil private [noinline] [ossa] @_TF4metaP33_7026FC13D35FB9700BACF693F51A99016callerFMCS_P33_7026FC13D35FB9700BACF693F51A99011CT_ : $@convention(method) (@thick C.Type) -> () {
bb0(%0 : $@thick C.Type):
  %2 = upcast %0 : $@thick C.Type to $@thick B.Type
  // CHECK-NOT: class_method
  // CHECK: function_ref @_TZFC4metaP33_7026FC13D35FB9700BACF693F51A99011B3foofMS0_FT_Si
  %3 = class_method %2 : $@thick B.Type, #B.foo!1 : (B.Type) -> () -> Int, $@convention(method) (@thick B.Type) -> Int
  %4 = apply %3(%2) : $@convention(method) (@thick B.Type) -> Int
  %5 = tuple ()
  // CHECK: return
  return %5 : $()
}

// YAML-NEXT: --- !Passed
// YAML-NEXT: Pass:            sil-devirtualizer
// YAML-NEXT: Name:            sil.ClassMethodDevirtualized
// YAML-NEXT: DebugLoc:
// YAML-NEXT:   File:            {{.*}}/devirtualize_ownership.sil
// YAML-NEXT:   Line:            128
// YAML-NEXT:   Column:          8
// YAML-NEXT: Function:        'caller(_:)'
// YAML-NEXT: Args:
// YAML-NEXT:   - String:          'Devirtualized call to class method '
// YAML-NEXT:   - Method:          '"static meta.B.foo(_:)"'
// YAML-NEXT:     DebugLoc:
// YAML-NEXT:       File:            {{.*}}/devirtualize_ownership.sil
// YAML-NEXT:       Line:            119
// YAML-NEXT:       Column:          13
// YAML-NEXT: ...

sil_vtable B {
  #B.foo!1: @_TZFC4metaP33_7026FC13D35FB9700BACF693F51A99011B3foofMS0_FT_Si
}

sil_vtable C {
  #B.foo!1: @_TZFC4metaP33_7026FC13D35FB9700BACF693F51A99011B3foofMS0_FT_Si
}
