File tree 2 files changed +37
-0
lines changed
lib/SILOptimizer/LoopTransforms
2 files changed +37
-0
lines changed Original file line number Diff line number Diff line change @@ -890,6 +890,10 @@ void LoopTreeOptimization::analyzeCurrentLoop(
890
890
for (auto &Inst : *BB) {
891
891
if (hasOwnershipOperandsOrResults (&Inst)) {
892
892
checkSideEffects (Inst, sideEffects, sideEffectsInBlock);
893
+ // Collect fullApplies to be checked in analyzeBeginAccess
894
+ if (auto fullApply = FullApplySite::isa (&Inst)) {
895
+ fullApplies.push_back (fullApply);
896
+ }
893
897
continue ;
894
898
}
895
899
switch (Inst.getKind ()) {
Original file line number Diff line number Diff line change @@ -1606,3 +1606,36 @@ bb3:
1606
1606
return %r : $()
1607
1607
}
1608
1608
1609
+ sil @foo : $@convention(thin) (@guaranteed { var Int }) -> ()
1610
+
1611
+ // CHECK-LABEL: sil [ossa] @test_begin_access : $@convention(thin) (Int) -> () {
1612
+ // CHECK: bb2:
1613
+ // CHECK: begin_access
1614
+ // CHECK: end_access
1615
+ // CHECK: bb3
1616
+ // CHECK-LABEL: } // end sil function 'test_begin_access'
1617
+ sil [ossa] @test_begin_access : $@convention(thin) (Int) -> () {
1618
+ bb0(%0 : $Int):
1619
+ %1 = alloc_box ${ var Int }, var, name "now"
1620
+ %2 = begin_borrow [lexical] [var_decl] %1
1621
+ %3 = project_box %2, 0
1622
+ store %0 to [trivial] %3
1623
+ br bb2
1624
+
1625
+ bb1:
1626
+ br bb2
1627
+
1628
+ bb2:
1629
+ %7 = function_ref @foo : $@convention(thin) (@guaranteed { var Int }) -> ()
1630
+ %8 = apply %7(%2) : $@convention(thin) (@guaranteed { var Int }) -> ()
1631
+ %9 = begin_access [modify] [dynamic] %3
1632
+ store %0 to [trivial] %9
1633
+ end_access %9
1634
+ cond_br undef, bb3, bb1
1635
+
1636
+ bb3:
1637
+ end_borrow %2
1638
+ destroy_value %1
1639
+ %15 = tuple ()
1640
+ return %15
1641
+ }
You can’t perform that action at this time.
0 commit comments