Skip to content

Commit e774042

Browse files
committed
IRGen: Simplify initialization of generic arguments in type metadata
This makes it work with dynamic offsets too, but that case doesn't come up yet.
1 parent 7fbb891 commit e774042

File tree

5 files changed

+13
-12
lines changed

5 files changed

+13
-12
lines changed

lib/IRGen/GenMeta.cpp

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2825,8 +2825,7 @@ namespace {
28252825

28262826
// Execute the fill ops. Cast the parameters to word pointers because the
28272827
// fill indexes are word-indexed.
2828-
Address metadataWords(IGF.Builder.CreateBitCast(metadataValue, IGM.Int8PtrPtrTy),
2829-
IGM.getPointerAlignment());
2828+
auto *metadataWords = IGF.Builder.CreateBitCast(metadataValue, IGM.Int8PtrPtrTy);
28302829

28312830
auto genericReqtOffset = IGM.getMetadataLayout(Target)
28322831
.getGenericRequirementsOffset(IGF);
@@ -2839,13 +2838,15 @@ namespace {
28392838
value = IGF.emitTypeMetadataRef(fillOp.Type);
28402839
}
28412840

2842-
auto dest = createPointerSizedGEP(IGF, metadataWords,
2843-
genericReqtOffset.getStatic());
2844-
genericReqtOffset = genericReqtOffset.offsetBy(
2845-
IGF, IGM.getPointerSize());
2841+
auto dest = IGF.emitAddressAtOffset(metadataWords, genericReqtOffset,
2842+
IGM.Int8PtrTy,
2843+
IGM.getPointerAlignment());
28462844

28472845
value = IGF.Builder.CreateBitCast(value, IGM.Int8PtrTy);
28482846
IGF.Builder.CreateStore(value, dest);
2847+
2848+
genericReqtOffset = genericReqtOffset.offsetBy(
2849+
IGF, IGM.getPointerSize());
28492850
}
28502851

28512852
// A dependent VWT means that we have dependent metadata.

test/IRGen/enum.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2693,7 +2693,7 @@ entry(%x : $*MyOptional):
26932693
// CHECK: [[T:%T]] = load %swift.type*, %swift.type** [[T0]],
26942694
// CHECK: [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericValueMetadata(%swift.type_pattern* %0, i8** %1)
26952695
// CHECK: [[METADATA_ARRAY:%.*]] = bitcast %swift.type* [[METADATA]] to i8**
2696-
// CHECK: [[T1:%.*]] = getelementptr inbounds i8*, i8** [[METADATA_ARRAY]], i32 2
2696+
// CHECK: [[T1:%.*]] = getelementptr inbounds i8*, i8** [[METADATA_ARRAY]], [[WORD]] 2
26972697
// CHECK: [[T0:%.*]] = bitcast %swift.type* [[T]] to i8*
26982698
// CHECK: store i8* [[T0]], i8** [[T1]]
26992699
// CHECK: [[T_VWTS:%.*]] = bitcast %swift.type* [[T]] to i8***

test/IRGen/generic_classes.sil

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -324,10 +324,10 @@ entry(%c : $RootGeneric<Int32>):
324324
// CHECK: [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericClassMetadata(%swift.type_pattern* %0, i8** %1, %objc_class* [[T0]], i64 6)
325325
// CHECK: [[METADATA_ARRAY:%.*]] = bitcast %swift.type* [[METADATA]] to i8**
326326
// Put the generic arguments in their correct positions.
327-
// CHECK: [[A_ADDR:%.*]] = getelementptr inbounds i8*, i8** [[METADATA_ARRAY:%.*]], i32 18
327+
// CHECK: [[A_ADDR:%.*]] = getelementptr inbounds i8*, i8** [[METADATA_ARRAY:%.*]], i64 18
328328
// CHECK: [[T0:%.*]] = bitcast %swift.type* %A to i8*
329329
// CHECK: store i8* [[T0]], i8** [[A_ADDR]], align 8
330-
// CHECK: [[B_ADDR:%.*]] = getelementptr inbounds i8*, i8** [[METADATA_ARRAY:%.*]], i32 19
330+
// CHECK: [[B_ADDR:%.*]] = getelementptr inbounds i8*, i8** [[METADATA_ARRAY:%.*]], i64 19
331331
// CHECK: [[T0:%.*]] = bitcast %swift.type* %B to i8*
332332
// CHECK: store i8* [[T0]], i8** [[B_ADDR]], align 8
333333
// Set up the isa.

test/IRGen/generic_structs.sil

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,7 @@ entry(%0 : $*ComplexDynamic<A, B>, %1 : $*Byteful, %2 : $*A, %3 : $*B, %4 : $*Ch
214214
// CHECK: [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericValueMetadata(%swift.type_pattern* %0, i8** %1)
215215
// CHECK: [[SELF_ARRAY:%.*]] = bitcast %swift.type* [[METADATA]] to i8**
216216
// Fill type argument.
217-
// CHECK: [[T1:%.*]] = getelementptr inbounds i8*, i8** [[SELF_ARRAY]], i32 3
217+
// CHECK: [[T1:%.*]] = getelementptr inbounds i8*, i8** [[SELF_ARRAY]], i64 3
218218
// CHECK: [[T0:%.*]] = bitcast %swift.type* %T to i8*
219219
// CHECK: store i8* [[T0]], i8** [[T1]], align 8
220220
// Lay out fields.

test/IRGen/generic_types.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@
118118
// CHECK-objc: [[SUPER:%.*]] = call %objc_class* @swift_rt_swift_getInitializedObjCClass(%objc_class* [[T0]])
119119
// CHECK-objc: [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericClassMetadata(%swift.type_pattern* %0, i8** %1, %objc_class* [[SUPER]], i64 7)
120120
// CHECK: [[SELF_ARRAY:%.*]] = bitcast %swift.type* [[METADATA]] to i8**
121-
// CHECK: [[T1:%.*]] = getelementptr inbounds i8*, i8** [[SELF_ARRAY]], i32 10
121+
// CHECK: [[T1:%.*]] = getelementptr inbounds i8*, i8** [[SELF_ARRAY]], i64 10
122122
// CHECK: [[T0:%.*]] = bitcast %swift.type* %T to i8*
123123
// CHECK: store i8* [[T0]], i8** [[T1]], align 8
124124
// CHECK: ret %swift.type* [[METADATA]]
@@ -132,7 +132,7 @@
132132
// CHECK-objc: [[SUPER:%.*]] = call %objc_class* @swift_rt_swift_getInitializedObjCClass(%objc_class* [[T0]])
133133
// CHECK-objc: [[METADATA:%.*]] = call %swift.type* @swift_allocateGenericClassMetadata(%swift.type_pattern* %0, i8** %1, %objc_class* [[SUPER]], i64 6)
134134
// CHECK: [[SELF_ARRAY:%.*]] = bitcast %swift.type* [[METADATA]] to i8**
135-
// CHECK: [[T1:%.*]] = getelementptr inbounds i8*, i8** [[SELF_ARRAY]], i32 10
135+
// CHECK: [[T1:%.*]] = getelementptr inbounds i8*, i8** [[SELF_ARRAY]], i64 10
136136
// CHECK: [[T0:%.*]] = bitcast %swift.type* %T to i8*
137137
// CHECK: store i8* [[T0]], i8** [[T1]], align 8
138138
// CHECK: ret %swift.type* [[METADATA]]

0 commit comments

Comments
 (0)