Skip to content

Commit fd9ebb5

Browse files
committed
[SIL-opaque] Add address lowering test case.
For borrowing a projection.
1 parent 636f3a7 commit fd9ebb5

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

test/SILOptimizer/address_lowering.sil

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -806,6 +806,28 @@ bb0(%0 : @owned $(AnyObject, T)):
806806
return %tuple : $(AnyObject, T)
807807
}
808808

809+
// CHECK-LABEL: sil [ossa] @f126_testDestructureAndBorrow : $@convention(method) <Element> (@in (SI<Element>, I)) -> (@out Element, @out I) {
810+
// CHECK: bb0(%0 : $*Element, %1 : $*I, %2 : $*(SI<Element>, I)):
811+
// CHECK: [[SI:%.*]] = tuple_element_addr %2 : $*(SI<Element>, I), 0
812+
// CHECK: [[I:%.*]] = tuple_element_addr %2 : $*(SI<Element>, I), 1
813+
// CHECK: [[LD:%.*]] = load [trivial] [[I]] : $*I
814+
// CHECK: [[E:%.*]] = struct_element_addr [[SI]] : $*SI<Element>, #SI.element
815+
// CHECK: copy_addr [[E]] to [initialization] %0 : $*Element
816+
// CHECK: destroy_addr [[SI]] : $*SI<Element>
817+
// CHECK: store [[LD]] to [trivial] %1 : $*I
818+
// CHECK-LABEL: } // end sil function 'f126_testDestructureAndBorrow'
819+
sil [ossa] @f126_testDestructureAndBorrow : $@convention(method) <Element> (@in (SI<Element>, I)) -> (@out Element, @out I) {
820+
bb0(%0 : @owned $(SI<Element>, I)):
821+
(%si, %i) = destructure_tuple %0 : $(SI<Element>, I)
822+
%borrow = begin_borrow %si : $SI<Element>
823+
%element = struct_extract %borrow : $SI<Element>, #SI.element
824+
%copy = copy_value %element : $Element
825+
end_borrow %borrow : $SI<Element>
826+
destroy_value %si : $SI<Element>
827+
%tuple = tuple(%copy : $Element, %i : $I)
828+
return %tuple : $(Element, I)
829+
}
830+
809831
// CHECK-LABEL: sil [ossa] @f130_testReleaseValue : $@convention(thin) <T> (@in T) -> () {
810832
// CHECK: bb0(%0 : $*T):
811833
// CHECK: destroy_addr %0 : $*T

0 commit comments

Comments
 (0)