Skip to content

Commit d1ad9e3

Browse files
committed
[SILOptimizer] TypeWrappers: Lower assign_by_wrapper into copy_addr for address-only types
1 parent d5844e5 commit d1ad9e3

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

lib/SILOptimizer/Mandatory/RawSILInstLowering.cpp

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -189,11 +189,18 @@ lowerAssignByWrapperInstruction(SILBuilderWithScope &b,
189189
case AssignByWrapperInst::Assign: {
190190
switch (inst->getOriginator()) {
191191
case AssignByWrapperInst::Originator::TypeWrapper: {
192-
if (inst->getMode() == AssignByWrapperInst::Initialization ||
193-
inst->getDest()->getType().isTrivial(*inst->getFunction())) {
194-
b.createTrivialStoreOr(loc, src, dest, StoreOwnershipQualifier::Init);
192+
bool initialization =
193+
inst->getMode() == AssignByWrapperInst::Initialization;
194+
195+
if (inst->getDest()->getType().isAddressOnly(*inst->getFunction())) {
196+
b.createCopyAddr(loc, src, dest, IsTake,
197+
initialization ? IsInitialization
198+
: IsNotInitialization);
195199
} else {
196-
b.createStore(loc, src, dest, StoreOwnershipQualifier::Assign);
200+
b.createTrivialStoreOr(loc, src, dest,
201+
initialization
202+
? StoreOwnershipQualifier::Init
203+
: StoreOwnershipQualifier::Assign);
197204
}
198205
break;
199206
}

0 commit comments

Comments
 (0)