Skip to content

Commit 83d7dbb

Browse files
authored
Merge pull request #82668 from eeckstein/revert-abts
Optimizer: revert to legacy alloc-box-to-stack optimization
2 parents 0bf4909 + 18499e2 commit 83d7dbb

File tree

4 files changed

+16
-28
lines changed

4 files changed

+16
-28
lines changed

lib/SILOptimizer/PassManager/PassPipeline.cpp

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -116,12 +116,13 @@ static void addMandatoryDiagnosticOptPipeline(SILPassPipelinePlan &P) {
116116
// Select access kind after capture promotion and before stack promotion.
117117
// This guarantees that stack-promotable boxes have [static] enforcement.
118118
P.addAccessEnforcementSelection();
119-
119+
/* Temporarily disabled: rdar://154686063, rdar://154713388
120120
#ifdef SWIFT_ENABLE_SWIFT_IN_SWIFT
121121
P.addMandatoryAllocBoxToStack();
122122
#else
123+
*/
123124
P.addLegacyAllocBoxToStack();
124-
#endif
125+
//#endif
125126
P.addNoReturnFolding();
126127
P.addBooleanLiteralFolding();
127128
addDefiniteInitialization(P);
@@ -417,7 +418,8 @@ void addHighLevelLoopOptPasses(SILPassPipelinePlan &P) {
417418
void addFunctionPasses(SILPassPipelinePlan &P,
418419
OptimizationLevelKind OpLevel) {
419420
// Promote box allocations to stack allocations.
420-
P.addAllocBoxToStack();
421+
// TODO: change this to add addAllocBoxToStack once rdar://154686063, rdar://154713388 is fixed
422+
P.addLegacyAllocBoxToStack();
421423

422424
if (P.getOptions().DestroyHoisting == DestroyHoistingOption::On) {
423425
P.addDestroyAddrHoisting();

test/IRGen/generic_tuples.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,9 @@ func dup<T>(_ x: T) -> (T, T) { var x = x; return (x,x) }
2727
// Copy 'x' into the first result.
2828
// CHECK-NEXT: call ptr [[WITNESS]](ptr noalias %0, ptr noalias [[X_ALLOCA]], ptr %T)
2929
// Copy 'x' into the second element.
30+
// CHECK-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 4
31+
// CHECK-NEXT: [[WITNESS:%.*]] = load ptr, ptr [[WITNESS_ADDR]], align 8
3032
// CHECK-NEXT: call ptr [[WITNESS]](ptr noalias %1, ptr noalias [[X_ALLOCA]], ptr %T)
31-
// CHECK-NEXT: [[WITNESS_ADDR:%.*]] = getelementptr inbounds ptr, ptr [[VWT]], i32 1
32-
// CHECK-NEXT: [[DESTROYWITNESS:%.*]] = load ptr, ptr [[WITNESS_ADDR]], align 8
33-
// CHECK-NEXT: call void [[DESTROYWITNESS]](ptr noalias [[X_ALLOCA]],
3433

3534
struct S {}
3635

test/SILOptimizer/allocboxtostack_localapply.swift

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ public func testboxescapes() -> (() -> ()) {
103103
}
104104

105105
// CHECK-LABEL: sil [noinline] @$s26allocboxtostack_localapply9testrecurSiyF :
106-
// CHECK: alloc_stack [var_decl] $Int, var, name "x"
106+
// CHECK: alloc_box ${ var Int }, var, name "x"
107107
// CHECK-LABEL: } // end sil function '$s26allocboxtostack_localapply9testrecurSiyF'
108108
@inline(never)
109109
public func testrecur() -> Int {
@@ -146,9 +146,14 @@ public func testdfs1() -> Int {
146146
return common()
147147
}
148148

149+
// Test to make sure we don't optimize the case when we have an inner common function call for multiple boxes.
150+
// We don't optimize this case now, because we don't have additional logic to correctly construct AppliesToSpecialize
151+
// Order of function calls constructed in PromotedOperands: bar innercommon local1 bas innercommon local2
152+
// AppliesToSpecialize should have the order: bar bas innercommon local1 local2
153+
// Since we don't maintain any tree like data structure with more info on the call tree, this is not possible to construct today
149154
// CHECK-LABEL: sil [noinline] @$s26allocboxtostack_localapply8testdfs2SiyF :
150-
// CHECK: alloc_stack [var_decl] $Int, var, name "x"
151-
// CHECK: alloc_stack [var_decl] $Int, var, name "y"
155+
// CHECK: alloc_box ${ var Int }, var, name "x"
156+
// CHECK: alloc_box ${ var Int }, var, name "y"
152157
// CHECK-LABEL:} // end sil function '$s26allocboxtostack_localapply8testdfs2SiyF'
153158
@inline(never)
154159
public func testdfs2() -> Int {
@@ -177,20 +182,3 @@ public func testdfs2() -> Int {
177182
return local1() + local2()
178183
}
179184

180-
// CHECK-LABEL: sil @$s26allocboxtostack_localapply15call2localfuncsSiyF :
181-
// CHECK-NOT: alloc_box
182-
// CHECK-LABEL:} // end sil function '$s26allocboxtostack_localapply15call2localfuncsSiyF'
183-
public func call2localfuncs() -> Int {
184-
var a1 = 1
185-
186-
@inline(never)
187-
func innerFunction() {
188-
a1 += 1
189-
}
190-
191-
innerFunction()
192-
innerFunction()
193-
194-
return a1
195-
}
196-

test/SILOptimizer/definite_init_protocol_init.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,8 +99,7 @@ struct AddressOnlyStruct : TriviallyConstructible {
9999
// CHECK-NEXT: apply [[FN]]<AddressOnlyStruct>([[SELF_BOX]], %1, [[METATYPE]])
100100
// CHECK-NEXT: copy_addr [take] [[SELF_BOX]] to [init] [[SELF]]
101101
// CHECK-NEXT: dealloc_stack [[SELF_BOX]]
102-
// CHECK-NEXT: copy_addr [[SELF]] to [init] %0
103-
// CHECK-NEXT: destroy_addr [[SELF]]
102+
// CHECK-NEXT: copy_addr [take] [[SELF]] to [init] %0
104103
// CHECK-NEXT: dealloc_stack [[SELF]]
105104
// CHECK-NEXT: [[RESULT:%.*]] = tuple ()
106105
// CHECK-NEXT: return [[RESULT]]

0 commit comments

Comments
 (0)