blob: 5435a0cfd92c962fe7dc8a8ef91c544020ce316e [file] [log] [blame]
// RUN: %target-swift-frontend -emit-ir %s | FileCheck %s
// REQUIRES: CPU=x86_64
// XFAIL: linux
sil_stage canonical
import Builtin
struct S {}
class C {}
sil_vtable C {}
sil @_TFC12typemetadata1Cd : $@convention(method) (@owned C) -> @owned Builtin.NativeObject
sil @_TFC12typemetadata1CD : $@convention(method) (@owned C) -> ()
sil @test0 : $@convention(thin) () -> () {
bb0:
%0 = metatype $@thin S.Type
%1 = metatype $@thick C.Type
%2 = metatype $@thick (S, C).Type
%100 = tuple ()
return %100 : $()
}
// CHECK-LABEL: define hidden %swift.type* @_TMaC12typemetadata1C()
// CHECK: [[T0:%.*]] = load %swift.type*, %swift.type** @_TMLC12typemetadata1C, align 8
// CHECK-NEXT: [[T1:%.*]] = icmp eq %swift.type* [[T0]], null
// CHECK-NEXT: br i1 [[T1]]
// CHECK: [[T0:%.*]] = call %objc_class* @rt_swift_getInitializedObjCClass({{.*}} @_TMfC12typemetadata1C, {{.*}})
// CHECK-NEXT: [[T1:%.*]] = bitcast %objc_class* [[T0]] to %swift.type*
// CHECK: store atomic %swift.type* [[T1]], %swift.type** @_TMLC12typemetadata1C release, align 8
// CHECK-NEXT: br label
// CHECK: [[RES:%.*]] = phi
// CHECK-NEXT: ret %swift.type* [[RES]]
// CHECK-LABEL: define linkonce_odr hidden %swift.type* @_TMaTV12typemetadata1SCS_1C_()
// CHECK: [[T0:%.*]] = load %swift.type*, %swift.type** @_TMLTV12typemetadata1SCS_1C_, align 8
// CHECK-NEXT: [[T1:%.*]] = icmp eq %swift.type* [[T0]], null
// CHECK-NEXT: br i1 [[T1]]
// CHECK: [[T0:%.*]] = call %swift.type* @_TMaC12typemetadata1C()
// CHECK-NEXT: [[T1:%.*]] = call %swift.type* @swift_getTupleTypeMetadata2(%swift.type* {{.*}} @_TMfV12typemetadata1S, {{.*}} %swift.type* [[T0]], i8* null, i8** null)
// CHECK-NEXT: store atomic %swift.type* [[T1]], %swift.type** @_TMLTV12typemetadata1SCS_1C_ release, align 8
// CHECK-NEXT: br label
// CHECK: [[RES:%.*]] = phi
// CHECK-NEXT: ret %swift.type* [[RES]]