Skip to content

Commit 2e0070f

Browse files
authored
Merge pull request #82978 from meg-gupta/fixsilcombine
Fix SILCombine of inject_enum_addr when the enum is non-trivial but payload is trivial
2 parents 2103b4b + ca11c3b commit 2e0070f

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

lib/SILOptimizer/SILCombiner/SILCombinerMiscVisitors.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1059,7 +1059,7 @@ SILCombiner::visitInjectEnumAddrInst(InjectEnumAddrInst *IEAI) {
10591059
Builder.getBuilderContext(), /*noUndef*/ true);
10601060
} else {
10611061
auto loadQual = !func->hasOwnership() ? LoadOwnershipQualifier::Unqualified
1062-
: DataAddrInst->getOperand()->getType().isTrivial(*func)
1062+
: DataAddrInst->getType().isTrivial(*func)
10631063
? LoadOwnershipQualifier::Trivial
10641064
: LoadOwnershipQualifier::Take;
10651065
enumValue =

test/SILOptimizer/sil_combine_ossa.sil

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5508,3 +5508,25 @@ bb0(%1 : @owned $Cr):
55085508
return %49
55095509
}
55105510

5511+
enum NT {
5512+
case inline(InlineArray<1, Int>)
5513+
case klass(Klass)
5514+
}
5515+
5516+
sil @get_inlinearray : $@convention(thin) () -> @out InlineArray<1, Int>
5517+
5518+
// CHECK-LABEL: sil shared [ossa] @testTrivialPayloadInNonTrivialEnum :
5519+
// CHECK-NOT: inject_enum_addr
5520+
// CHECK-LABEL: } // end sil function 'testTrivialPayloadInNonTrivialEnum'
5521+
sil shared [ossa] @testTrivialPayloadInNonTrivialEnum : $@convention(thin) () -> @owned NT {
5522+
bb0:
5523+
%0 = alloc_stack $NT
5524+
%1 = init_enum_data_addr %0, #NT.inline!enumelt
5525+
%3 = function_ref @get_inlinearray : $@convention(thin) () -> @out InlineArray<1, Int>
5526+
%4 = apply %3(%1) : $@convention(thin) () -> @out InlineArray<1, Int>
5527+
inject_enum_addr %0, #NT.inline!enumelt
5528+
%6 = load [take] %0
5529+
dealloc_stack %0
5530+
return %6
5531+
}
5532+

0 commit comments

Comments
 (0)