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

// REQUIRES: objc_interop

sil_stage canonical

import Builtin
import Swift
import SwiftShims

@objc(XX) protocol X {
}

class XImpl : X {
  @objc deinit
  init()
}

// (thick_to_objc_metatype (metatype @thick)) -> (metatype @objc_metatype)
//
// CHECK-LABEL: sil @_TF31peephole_thick_to_objc_metatype36test_thick_to_objc_metatype_metatypeFT_Ps9AnyObject_ : $@convention(thin) () -> @owned AnyObject
// CHECK-NOT: metatype $@thick
// CHECK-NOT: {{thick_to_objc_metatype }}
// CHECK: metatype $@objc_metatype
// CHECK: return
// peephole_thick_to_objc_metatype.test_thick_to_objc_metatype_metatype () -> Swift.AnyObject
sil @_TF31peephole_thick_to_objc_metatype36test_thick_to_objc_metatype_metatypeFT_Ps9AnyObject_ : $@convention(thin) () -> @owned AnyObject {
bb0:
  %0 = metatype $@thick XImpl.Type                // users: %1, %2
  %2 = thick_to_objc_metatype %0 : $@thick XImpl.Type to $@objc_metatype XImpl.Type // user: %3
  %3 = objc_metatype_to_object %2 : $@objc_metatype XImpl.Type to $AnyObject // user: %4
  return %3 : $AnyObject                          // id: %4
}

// (thick_to_objc_metatype (existential_metatype @thick)) -> (existential_metatype @objc_metatype)
//
// CHECK-LABEL: sil @_TF31peephole_thick_to_objc_metatype48test_thick_to_objc_metatype_existential_metatypeFPS_1X_Ps9AnyObject_ : $@convention(thin) (@owned X) -> @owned AnyObject
// CHECK-NOT: existential_metatype $@thick
// CHECK-NOT: {{thick_to_objc_metatype }}
// CHECK: existential_metatype $@objc_metatype
// CHECK: return
// peephole_thick_to_objc_metatype.test_thick_to_objc_metatype_existential_metatype (peephole_thick_to_objc_metatype.X) -> Swift.AnyObject
sil @_TF31peephole_thick_to_objc_metatype48test_thick_to_objc_metatype_existential_metatypeFPS_1X_Ps9AnyObject_ : $@convention(thin) (@owned X) -> @owned AnyObject {
bb0(%0 : $X):
  debug_value %0 : $X, let, name "o" // id: %1
  %2 = existential_metatype $@thick X.Type, %0 : $X // user: %3
  %3 = thick_to_objc_metatype %2 : $@thick X.Type to $@objc_metatype X.Type // user: %4
  %4 = objc_existential_metatype_to_object %3 : $@objc_metatype X.Type to $AnyObject // users: %5, %7
  debug_value %4 : $AnyObject, let, name "Ty" // id: %5
  strong_release %0 : $X                          // id: %6
  return %4 : $AnyObject                          // id: %7
}

// (thick_to_objc_metatype (value_metatype @thick)) -> (value_metatype @objc_metatype)
//
// CHECK-LABEL: sil @_TF31peephole_thick_to_objc_metatype42test_thick_to_objc_metatype_value_metatypeUs9AnyObject__FQ_PS0__ : $@convention(thin) <T where T : AnyObject> (@owned T) -> @owned An
// CHECK-NOT: value_metatype $@thick
// CHECK-NOT: {{thick_to_objc_metatype }}
// CHECK: value_metatype $@objc_metatype
// CHECK: return
// peephole_thick_to_objc_metatype.test_thick_to_objc_metatype_value_metatype <A : Swift.AnyObject>(A) -> Swift.AnyObject
sil @_TF31peephole_thick_to_objc_metatype42test_thick_to_objc_metatype_value_metatypeUs9AnyObject__FQ_PS0__ : $@convention(thin) <T where T : AnyObject> (@owned T) -> @owned AnyObject {
bb0(%0 : $T):
  debug_value %0 : $T, let, name "o" // id: %1
  %2 = value_metatype $@thick T.Type, %0 : $T     // user: %3
  %3 = thick_to_objc_metatype %2 : $@thick T.Type to $@objc_metatype T.Type // user: %4
  %4 = objc_metatype_to_object %3 : $@objc_metatype T.Type to $AnyObject // users: %5, %7
  debug_value %4 : $AnyObject, let, name "Ty" // id: %5
  strong_release %0 : $T                          // id: %6
  return %4 : $AnyObject                          // id: %7
}

// (objc_to_thick_metatype (metatype @objc_metatype)) -> (metatype @thick)
//
// CHECK-LABEL: sil @_TF31peephole_thick_to_objc_metatype36test_objc_to_thick_metatype_metatypeFT_Ps9AnyObject_ : $@convention(thin) () -> @thick XImpl.Type
// CHECK-NOT: metatype $@objc_metatype
// CHECK-NOT: {{objc_to_thick_metatype }}
// CHECK: metatype $@thick
// CHECK: return
sil @_TF31peephole_thick_to_objc_metatype36test_objc_to_thick_metatype_metatypeFT_Ps9AnyObject_ : $@convention(thin) () -> @thick XImpl.Type {
bb0:
  %0 = metatype $@objc_metatype XImpl.Type                // users: %1, %2
  %2 = objc_to_thick_metatype %0 : $@objc_metatype XImpl.Type to $@thick XImpl.Type
  return %2 : $@thick XImpl.Type
}

// (objc_to_objc_metatype (existential_metatype @objc_metatype)) -> (existential_metatype @thick)
//
// CHECK-LABEL: sil @_TF31peephole_thick_to_objc_metatype48test_objc_to_thick_metatype_existential_metatypeFPS_1X_Ps9AnyObject_ : $@convention(thin) (@owned X) -> @thick X.Type
// CHECK-NOT: existential_metatype $@objc_metatype
// CHECK-NOT: {{objc_to_thick_metatype }}
// CHECK: existential_metatype $@thick
// CHECK: return
sil @_TF31peephole_thick_to_objc_metatype48test_objc_to_thick_metatype_existential_metatypeFPS_1X_Ps9AnyObject_ : $@convention(thin) (@owned X) -> @thick X.Type {
bb0(%0 : $X):
  debug_value %0 : $X, let, name "o" // id: %1
  %2 = existential_metatype $@objc_metatype X.Type, %0 : $X // user: %3
  %3 = objc_to_thick_metatype %2 : $@objc_metatype X.Type to $@thick X.Type // user: %4
  strong_release %0 : $X
  return %3 : $@thick X.Type
}

// (objc_to_thick_metatype (value_metatype @objc_metatype)) -> (value_metatype @thick)
//
// CHECK-LABEL: sil @_TF31peephole_thick_to_objc_metatype42test_objc_to_thick_metatype_value_metatypeUs9AnyObject__FQ_PS0__ : $@convention(thin) <T where T : AnyObject> (@owned T) -> @thick T.Type
// CHECK-NOT: value_metatype $@objc_metatype
// CHECK-NOT: {{objc_to_thick_metatype }}
// CHECK: value_metatype $@thick
// CHECK: return
sil @_TF31peephole_thick_to_objc_metatype42test_objc_to_thick_metatype_value_metatypeUs9AnyObject__FQ_PS0__ : $@convention(thin) <T where T : AnyObject> (@owned T) -> @thick T.Type {
bb0(%0 : $T):
  debug_value %0 : $T, let, name "o" // id: %1
  %2 = value_metatype $@objc_metatype T.Type, %0 : $T     // user: %3
  %3 = objc_to_thick_metatype %2 : $@objc_metatype T.Type to $@thick T.Type // user: %4
  strong_release %0 : $T
  return %3 : $@thick T.Type
}
