@@ -286,9 +286,14 @@ bool ElementUseCollector::collectUses(SILValue Pointer) {
286286 continue ;
287287 }
288288
289+ auto &mod = User->getFunction ()->getModule ();
290+ bool shouldScalarizeTuple =
291+ !mod.getOptions ().UseAggressiveReg2MemForCodeSize ||
292+ shouldExpand (mod, PointeeType);
293+
289294 // Loads are a use of the value.
290295 if (isa<LoadInst>(User) || isa<LoadBorrowInst>(User)) {
291- if (PointeeType.is <TupleType>())
296+ if (PointeeType.is <TupleType>() && shouldScalarizeTuple )
292297 UsesToScalarize.push_back (User);
293298 else
294299 Uses.emplace_back (User, PMOUseKind::Load);
@@ -300,7 +305,8 @@ bool ElementUseCollector::collectUses(SILValue Pointer) {
300305 if (UI->getOperandNumber () == StoreInst::Dest) {
301306 if (auto tupleType = PointeeType.getAs <TupleType>()) {
302307 if (!tupleType->isEqual (Module.getASTContext ().TheEmptyTupleType ) &&
303- !tupleType->containsPackExpansionType ()) {
308+ !tupleType->containsPackExpansionType () &&
309+ shouldScalarizeTuple) {
304310 UsesToScalarize.push_back (User);
305311 continue ;
306312 }
@@ -337,7 +343,8 @@ bool ElementUseCollector::collectUses(SILValue Pointer) {
337343 // have an access that crosses elements.
338344 if (auto tupleType = PointeeType.getAs <TupleType>()) {
339345 if (!tupleType->isEqual (Module.getASTContext ().TheEmptyTupleType ) &&
340- !tupleType->containsPackExpansionType ()) {
346+ !tupleType->containsPackExpansionType () &&
347+ shouldScalarizeTuple) {
341348 UsesToScalarize.push_back (CAI);
342349 continue ;
343350 }
0 commit comments