Skip to content

Commit 35edadc

Browse files
committed
Revert "Optimizer: revert to legacy alloc-box-to-stack optimization"
This reverts commit 18499e2.
1 parent 80ed35b commit 35edadc

File tree

4 files changed

+28
-16
lines changed

4 files changed

+28
-16
lines changed

lib/SILOptimizer/PassManager/PassPipeline.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -116,13 +116,12 @@ 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-
/* Temporarily disabled: rdar://154686063, rdar://154713388
119+
120120
#ifdef SWIFT_ENABLE_SWIFT_IN_SWIFT
121121
P.addMandatoryAllocBoxToStack();
122122
#else
123-
*/
124123
P.addLegacyAllocBoxToStack();
125-
//#endif
124+
#endif
126125
P.addNoReturnFolding();
127126
P.addBooleanLiteralFolding();
128127
addDefiniteInitialization(P);
@@ -418,8 +417,7 @@ void addHighLevelLoopOptPasses(SILPassPipelinePlan &P) {
418417
void addFunctionPasses(SILPassPipelinePlan &P,
419418
OptimizationLevelKind OpLevel) {
420419
// Promote box allocations to stack allocations.
421-
// TODO: change this to add addAllocBoxToStack once rdar://154686063, rdar://154713388 is fixed
422-
P.addLegacyAllocBoxToStack();
420+
P.addAllocBoxToStack();
423421

424422
if (P.getOptions().DestroyHoisting == DestroyHoistingOption::On) {
425423
P.addDestroyAddrHoisting();

test/IRGen/generic_tuples.swift

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,10 @@ 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
3230
// 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]],
3334

3435
struct S {}
3536

test/SILOptimizer/allocboxtostack_localapply.swift

Lines changed: 20 additions & 8 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_box ${ var Int }, var, name "x"
106+
// CHECK: alloc_stack [var_decl] $Int, var, name "x"
107107
// CHECK-LABEL: } // end sil function '$s26allocboxtostack_localapply9testrecurSiyF'
108108
@inline(never)
109109
public func testrecur() -> Int {
@@ -146,14 +146,9 @@ 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
154149
// CHECK-LABEL: sil [noinline] @$s26allocboxtostack_localapply8testdfs2SiyF :
155-
// CHECK: alloc_box ${ var Int }, var, name "x"
156-
// CHECK: alloc_box ${ var Int }, var, name "y"
150+
// CHECK: alloc_stack [var_decl] $Int, var, name "x"
151+
// CHECK: alloc_stack [var_decl] $Int, var, name "y"
157152
// CHECK-LABEL:} // end sil function '$s26allocboxtostack_localapply8testdfs2SiyF'
158153
@inline(never)
159154
public func testdfs2() -> Int {
@@ -182,3 +177,20 @@ public func testdfs2() -> Int {
182177
return local1() + local2()
183178
}
184179

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: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ 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 [take] [[SELF]] to [init] %0
102+
// CHECK-NEXT: copy_addr [[SELF]] to [init] %0
103+
// CHECK-NEXT: destroy_addr [[SELF]]
103104
// CHECK-NEXT: dealloc_stack [[SELF]]
104105
// CHECK-NEXT: [[RESULT:%.*]] = tuple ()
105106
// CHECK-NEXT: return [[RESULT]]

0 commit comments

Comments
 (0)