|
1 |
| -// RUN: %target-swift-frontend %use_no_opaque_pointers -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize |
2 |
| -// RUN: %target-swift-frontend -emit-ir %s |
| 1 | +// RUN: %target-swift-frontend -emit-ir %s | %FileCheck %s -DINT=i%target-ptrsize |
3 | 2 |
|
4 | 3 | public func takesNoEscape(_: () -> ()) {}
|
5 | 4 |
|
6 | 5 | public func has_metadata_pack<each T>(t: repeat each T) -> () -> () {
|
7 | 6 | return { _ = (repeat each T).self }
|
8 | 7 | }
|
9 | 8 |
|
10 |
| -// CHECK-LABEL: define{{( protected)?}}{{( dllexport)?}} swiftcc { i8*, %swift.refcounted* } @"$s25variadic_generic_captures17has_metadata_pack1tyycxxQp_tRvzlF"(%swift.opaque** noalias nocapture %0, i{{32|64}} %1, %swift.type** %"each T") #0 { |
11 |
| -// CHECK: [[CONTEXT0:%.*]] = call noalias %swift.refcounted* @swift_allocObject( |
12 |
| -// CHECK: [[CONTEXT:%.*]] = bitcast %swift.refcounted* [[CONTEXT0]] to <{{.*}}>* |
| 9 | +// CHECK-LABEL: define{{( protected)?}}{{( dllexport)?}} swiftcc { ptr, ptr } @"$s25variadic_generic_captures17has_metadata_pack1tyycxxQp_tRvzlF"(ptr noalias nocapture %0, i{{32|64}} %1, ptr %"each T") #0 { |
| 10 | +// CHECK: [[CONTEXT0:%.*]] = call noalias ptr @swift_allocObject( |
13 | 11 |
|
14 |
| -// CHECK: [[GENERIC_ARGS_ADDR:%.*]] = getelementptr inbounds {{.*}}* [[CONTEXT]], i32 0, i32 {{(1|2)}} |
15 |
| -// CHECK: [[GENERIC_ARGS:%.*]] = bitcast {{.*}} [[GENERIC_ARGS_ADDR]] to %swift.type** |
16 |
| -// CHECK: [[SHAPE_PTR:%.*]] = bitcast %swift.type** [[GENERIC_ARGS]] to [[INT]]* |
17 |
| -// CHECK: store [[INT]] %1, [[INT]]* [[SHAPE_PTR]] |
| 12 | +// CHECK: [[GENERIC_ARGS_ADDR:%.*]] = getelementptr inbounds {{.*}} [[CONTEXT0]], i32 0, i32 {{(1|2)}} |
| 13 | +// CHECK: store [[INT]] %1, ptr [[GENERIC_ARGS_ADDR]] |
18 | 14 |
|
19 |
| -// CHECK: [[T_ADDR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[GENERIC_ARGS]], i32 1 |
20 |
| -// CHECK: [[T_HEAP:%.*]] = call swiftcc %swift.type** @swift_allocateMetadataPack(%swift.type** %"each T", [[INT]] %1) |
21 |
| -// CHECK: [[T_ADDR2:%.*]] = bitcast %swift.type** [[T_ADDR]] to %swift.type*** |
22 |
| -// CHECK: store %swift.type** [[T_HEAP]], %swift.type*** [[T_ADDR2]] |
| 15 | +// CHECK: [[T_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[GENERIC_ARGS_ADDR]], i32 1 |
| 16 | +// CHECK: [[T_HEAP:%.*]] = call swiftcc ptr @swift_allocateMetadataPack(ptr %"each T", [[INT]] %1) |
| 17 | +// CHECK: store ptr [[T_HEAP]], ptr [[T_ADDR]] |
23 | 18 |
|
24 | 19 | // CHECK: [[CONTEXT1:%.*]] = insertvalue {{.*}} @"$s25variadic_generic_captures17has_metadata_pack1tyycxxQp_tRvzlFyycfU_TA{{(\.ptrauth)?}}"
|
25 |
| -// CHECK: ret { i8*, %swift.refcounted* } [[CONTEXT1]] |
| 20 | +// CHECK: ret { ptr, ptr } [[CONTEXT1]] |
26 | 21 |
|
27 |
| -// CHECK-LABEL: define internal swiftcc void @"$s25variadic_generic_captures17has_metadata_pack1tyycxxQp_tRvzlFyycfU_TA"(%swift.refcounted* swiftself %0) |
28 |
| -// CHECK: [[CONTEXT:%.*]] = bitcast %swift.refcounted* %0 to {{.*}}* |
29 |
| -// CHECK: [[GENERIC_ARGS_ADDR:%.*]] = getelementptr inbounds {{.*}}* [[CONTEXT]], i32 0, i32 {{(1|2)}} |
30 |
| -// CHECK: [[GENERIC_ARGS:%.*]] = bitcast {{.*}} to %swift.type** |
| 22 | +// CHECK-LABEL: define internal swiftcc void @"$s25variadic_generic_captures17has_metadata_pack1tyycxxQp_tRvzlFyycfU_TA"(ptr swiftself %0) |
| 23 | +// CHECK: [[GENERIC_ARGS:%.*]] = getelementptr inbounds {{.*}} %0, i32 0, i32 {{(1|2)}} |
31 | 24 |
|
32 |
| -// CHECK: [[SHAPE_PTR:%.*]] = bitcast %swift.type** [[GENERIC_ARGS]] to [[INT]]* |
33 |
| -// CHECK: [[SHAPE:%.*]] = load [[INT]], [[INT]]* [[SHAPE_PTR]] |
| 25 | +// CHECK: [[SHAPE:%.*]] = load [[INT]], ptr [[GENERIC_ARGS]] |
34 | 26 |
|
35 |
| -// CHECK: [[T_ADDR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[GENERIC_ARGS]], i32 1 |
36 |
| -// CHECK: [[T_PTR:%.*]] = bitcast %swift.type** [[T_ADDR]] to %swift.type*** |
37 |
| -// CHECK: [[T:%.*]] = load %swift.type**, %swift.type*** [[T_PTR]] |
| 27 | +// CHECK: [[T_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[GENERIC_ARGS]], i32 1 |
| 28 | +// CHECK: [[T:%.*]] = load ptr, ptr [[T_ADDR]] |
38 | 29 |
|
39 |
| -// CHECK: tail call swiftcc void @"$s25variadic_generic_captures17has_metadata_pack1tyycxxQp_tRvzlFyycfU_"([[INT]] [[SHAPE]], %swift.type** [[T]]) |
| 30 | +// CHECK: tail call swiftcc void @"$s25variadic_generic_captures17has_metadata_pack1tyycxxQp_tRvzlFyycfU_"([[INT]] [[SHAPE]], ptr [[T]]) |
40 | 31 | // CHECK: ret void
|
41 | 32 |
|
42 | 33 | public func has_metadata_pack_noescape<each T>(t: repeat each T) {
|
43 | 34 | takesNoEscape { _ = (repeat each T).self }
|
44 | 35 | }
|
45 | 36 |
|
46 |
| -// CHECK-LABEL: define{{( protected)?}}{{( dllexport)?}} swiftcc void @"$s25variadic_generic_captures26has_metadata_pack_noescape1tyxxQp_tRvzlF"(%swift.opaque** noalias nocapture %0, i{{32|64}} %1, %swift.type** %"each T") #0 { |
| 37 | +// CHECK-LABEL: define{{( protected)?}}{{( dllexport)?}} swiftcc void @"$s25variadic_generic_captures26has_metadata_pack_noescape1tyxxQp_tRvzlF"(ptr noalias nocapture %0, i{{32|64}} %1, ptr %"each T") #0 { |
47 | 38 | // CHECK: [[CONTEXT0:%.*]] = alloca i8, [[INT]]
|
48 |
| -// CHECK: [[CONTEXT1:%.*]] = bitcast i8* [[CONTEXT0]] to %swift.opaque* |
49 |
| -// CHECK: [[CONTEXT:%.*]] = bitcast %swift.opaque* [[CONTEXT1]] to <{{.*}}>* |
50 | 39 |
|
51 |
| -// CHECK: [[GENERIC_ARGS_ADDR:%.*]] = getelementptr inbounds {{.*}}* [[CONTEXT]], i32 0, i32 {{(1|2)}} |
52 |
| -// CHECK: [[GENERIC_ARGS:%.*]] = bitcast {{.*}} [[GENERIC_ARGS_ADDR]] to %swift.type** |
53 |
| -// CHECK: [[SHAPE_PTR:%.*]] = bitcast %swift.type** [[GENERIC_ARGS]] to [[INT]]* |
54 |
| -// CHECK: store [[INT]] %1, [[INT]]* [[SHAPE_PTR]] |
| 40 | +// CHECK: [[GENERIC_ARGS:%.*]] = getelementptr inbounds {{.*}} [[CONTEXT0]], i32 0, i32 {{(1|2)}} |
| 41 | +// CHECK: store [[INT]] %1, ptr [[GENERIC_ARGS]] |
55 | 42 |
|
56 |
| -// CHECK: [[T_ADDR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[GENERIC_ARGS]], i32 1 |
57 |
| -// CHECK: [[T_ADDR2:%.*]] = bitcast %swift.type** [[T_ADDR]] to %swift.type*** |
58 |
| -// CHECK: store %swift.type** %"each T", %swift.type*** [[T_ADDR2]] |
| 43 | +// CHECK: [[T_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[GENERIC_ARGS]], i32 1 |
| 44 | +// CHECK: store ptr %"each T", ptr [[T_ADDR]] |
59 | 45 |
|
60 | 46 | // CHECK: call swiftcc void @"$s25variadic_generic_captures13takesNoEscapeyyyyXEF"(
|
61 | 47 | // CHECK: ret void
|
62 | 48 |
|
63 |
| -// CHECK-LABEL: define internal swiftcc void @"$s25variadic_generic_captures26has_metadata_pack_noescape1tyxxQp_tRvzlFyyXEfU_TA"(%swift.refcounted* swiftself %0) |
64 |
| -// CHECK: [[CONTEXT:%.*]] = bitcast %swift.refcounted* %0 to {{.*}}* |
65 |
| -// CHECK: [[GENERIC_ARGS_ADDR:%.*]] = getelementptr inbounds {{.*}}* [[CONTEXT]], i32 0, i32 {{(1|2)}} |
66 |
| -// CHECK: [[GENERIC_ARGS:%.*]] = bitcast {{.*}} to %swift.type** |
| 49 | +// CHECK-LABEL: define internal swiftcc void @"$s25variadic_generic_captures26has_metadata_pack_noescape1tyxxQp_tRvzlFyyXEfU_TA"(ptr swiftself %0) |
| 50 | +// CHECK: [[GENERIC_ARGS:%.*]] = getelementptr inbounds {{.*}} %0, i32 0, i32 {{(1|2)}} |
67 | 51 |
|
68 |
| -// CHECK: [[SHAPE_PTR:%.*]] = bitcast %swift.type** [[GENERIC_ARGS]] to [[INT]]* |
69 |
| -// CHECK: [[SHAPE:%.*]] = load [[INT]], [[INT]]* [[SHAPE_PTR]] |
| 52 | +// CHECK: [[SHAPE:%.*]] = load [[INT]], ptr [[GENERIC_ARGS]] |
70 | 53 |
|
71 |
| -// CHECK: [[T_ADDR:%.*]] = getelementptr inbounds %swift.type*, %swift.type** [[GENERIC_ARGS]], i32 1 |
72 |
| -// CHECK: [[T_PTR:%.*]] = bitcast %swift.type** [[T_ADDR]] to %swift.type*** |
73 |
| -// CHECK: [[T:%.*]] = load %swift.type**, %swift.type*** [[T_PTR]] |
| 54 | +// CHECK: [[T_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[GENERIC_ARGS]], i32 1 |
| 55 | +// CHECK: [[T:%.*]] = load ptr, ptr [[T_ADDR]] |
74 | 56 |
|
75 |
| -// CHECK: tail call swiftcc void @"$s25variadic_generic_captures26has_metadata_pack_noescape1tyxxQp_tRvzlFyyXEfU_"([[INT]] [[SHAPE]], %swift.type** [[T]]) |
| 57 | +// CHECK: tail call swiftcc void @"$s25variadic_generic_captures26has_metadata_pack_noescape1tyxxQp_tRvzlFyyXEfU_"([[INT]] [[SHAPE]], ptr [[T]]) |
76 | 58 | // CHECK: ret void
|
77 | 59 |
|
78 | 60 | public func has_witness_table_pack<each T: Sequence>(t: repeat each T) -> () -> () {
|
|
0 commit comments