@@ -249,6 +249,9 @@ static SILType getNewOptionalFunctionType(GenericEnvironment *GenericEnv,
249
249
auto newType = OptionalType::get (optKind, currCanType);
250
250
CanType newCanType = newType->getCanonicalType ();
251
251
newSILType = SILType::getPrimitiveObjectType (newCanType);
252
+ if (storageType.isAddress ()) {
253
+ newSILType = newSILType.getAddressType ();
254
+ }
252
255
}
253
256
}
254
257
}
@@ -276,6 +279,9 @@ getNewArgTys(GenericEnvironment *GenericEnv, ArrayRef<SILParameterInfo> params,
276
279
currSILFunctionType->getParameters (), Mod)) {
277
280
SILType newSILType =
278
281
getNewSILFunctionType (GenericEnv, currSILFunctionType, Mod);
282
+ if (storageType.isAddress ()) {
283
+ newSILType = newSILType.getAddressType ();
284
+ }
279
285
auto newParam = SILParameterInfo (newSILType.getSwiftRValueType (),
280
286
param.getConvention ());
281
287
newArgTys.push_back (newParam);
@@ -311,6 +317,9 @@ static SILType getNewSILType(GenericEnvironment *GenericEnv,
311
317
if (containsLargeLoadable (GenericEnv, currSILFunctionType->getParameters (),
312
318
Mod)) {
313
319
newSILType = getNewSILFunctionType (GenericEnv, currSILFunctionType, Mod);
320
+ if (storageType.isAddress ()) {
321
+ newSILType = newSILType.getAddressType ();
322
+ }
314
323
}
315
324
} else if (isLargeLoadableType (GenericEnv, storageType, Mod)) {
316
325
newSILType = storageType.getAddressType ();
@@ -427,6 +436,7 @@ void LargeValueVisitor::mapValueStorage() {
427
436
case ValueKind::StructElementAddrInst:
428
437
case ValueKind::RefTailAddrInst:
429
438
case ValueKind::RefElementAddrInst:
439
+ case ValueKind::BeginAccessInst:
430
440
case ValueKind::EnumInst: {
431
441
// TODO Any more instructions to add here?
432
442
visitResultTyInst (currIns);
@@ -1315,6 +1325,9 @@ static void castTupleInstr(SILInstruction *instr, IRGenModule &Mod) {
1315
1325
genEnv = getGenericEnvironment (instr->getModule (), canFuncType);
1316
1326
}
1317
1327
SILType newSILType = getNewSILFunctionType (genEnv, funcType, Mod);
1328
+ if (currSILType.isAddress ()) {
1329
+ newSILType = newSILType.getAddressType ();
1330
+ }
1318
1331
auto II = instr->getIterator ();
1319
1332
++II;
1320
1333
SILBuilder castBuilder (II);
@@ -1594,6 +1607,13 @@ static void rewriteFunction(StructLoweringState &pass,
1594
1607
newSILType.getAddressType ());
1595
1608
break ;
1596
1609
}
1610
+ case ValueKind::BeginAccessInst: {
1611
+ auto *convInstr = dyn_cast<BeginAccessInst>(instr);
1612
+ newInstr = resultTyBuilder.createBeginAccess (Loc, convInstr->getOperand (),
1613
+ convInstr->getAccessKind (),
1614
+ convInstr->getEnforcement ());
1615
+ break ;
1616
+ }
1597
1617
case ValueKind::EnumInst: {
1598
1618
EnumInst *convInstr = dyn_cast<EnumInst>(instr);
1599
1619
SILValue operand =
0 commit comments