Skip to content

Commit 94717da

Browse files
Merge pull request #61893 from nate-chandler/opaque-values/2/20221102
[OpaqueValues] Return generic tuples directly.
2 parents db9a140 + 424174c commit 94717da

File tree

2 files changed

+18
-1
lines changed

2 files changed

+18
-1
lines changed

lib/SILGen/ResultPlan.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -991,7 +991,7 @@ ResultPlanPtr ResultPlanBuilder::buildForTuple(Initialization *init,
991991
// If the tuple is address-only, we'll get much better code if we
992992
// emit into a single buffer.
993993
auto &substTL = SGF.getTypeLowering(substType);
994-
if (substTL.isAddressOnly()) {
994+
if (substTL.isAddressOnly() && SGF.F.getConventions().useLoweredAddresses()) {
995995
// Create a temporary.
996996
auto temporary = SGF.emitTemporary(loc, substTL);
997997

test/SILOptimizer/opaque_values_Onone.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,3 +163,20 @@ func duplicate_with_int3<Value>(value: Value) -> (Int, (Value, (Value, (Value, I
163163
(42, (value, (value, (value, 43), value)), 44)
164164
}
165165
}
166+
167+
// CHECK-LABEL: sil hidden @get_a_generic_tuple : {{.*}} {
168+
// CHECK: [[TUPLE_ADDR:%[^,]+]] = alloc_stack [lexical] $(This, This)
169+
// CHECK: [[GIVE_A_GENERIC_TUPLE:%[^,]+]] = function_ref @give_a_generic_tuple
170+
// CHECK: [[TUPLE_0_ADDR:%[^,]+]] = tuple_element_addr [[TUPLE_ADDR]] : $*(This, This), 0
171+
// CHECK: [[TUPLE_1_ADDR:%[^,]+]] = tuple_element_addr [[TUPLE_ADDR]] : $*(This, This), 1
172+
// CHECK: apply [[GIVE_A_GENERIC_TUPLE]]<This>([[TUPLE_0_ADDR]], [[TUPLE_1_ADDR]], {{%[^,]+}})
173+
// CHECK: destroy_addr [[TUPLE_ADDR]]
174+
// CHECK: dealloc_stack [[TUPLE_ADDR]]
175+
// CHECK-LABEL: } // end sil function 'get_a_generic_tuple'
176+
struct This {}
177+
@_silgen_name("give_a_generic_tuple")
178+
func give_a_generic_tuple<This>(of ty: This.Type) -> (This, This)
179+
@_silgen_name("get_a_generic_tuple")
180+
func get_a_generic_tuple<This>(ty: This.Type) {
181+
let p = give_a_generic_tuple(of: ty)
182+
}

0 commit comments

Comments
 (0)