Skip to content

Commit 0480a53

Browse files
authored
Merge pull request swiftlang#33074 from meg-gupta/copyfwdossa
[ownership] Enable CopyForwarding for OSSA
2 parents 497e049 + d37f466 commit 0480a53

File tree

3 files changed

+854
-14
lines changed

3 files changed

+854
-14
lines changed

lib/SILOptimizer/Transforms/CopyForwarding.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1508,10 +1508,6 @@ class CopyForwardingPass : public SILFunctionTransform
15081508
if (!EnableCopyForwarding && !EnableDestroyHoisting)
15091509
return;
15101510

1511-
// FIXME: We should be able to support [ossa].
1512-
if (getFunction()->hasOwnership())
1513-
return;
1514-
15151511
LLVM_DEBUG(llvm::dbgs() << "Copy Forwarding in Func "
15161512
<< getFunction()->getName() << "\n");
15171513

test/SILOptimizer/copyforward.sil

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ protocol P {
2525
sil hidden @nrvo : $@convention(thin) <T where T : P> (Bool) -> @out T {
2626
bb0(%0 : $*T, %1 : $Bool):
2727
%2 = alloc_stack $T, var, name "ro" // users: %9, %15, %17, %19
28-
debug_value_addr %0 : $*T
29-
debug_value_addr %2 : $*T
3028
%3 = struct_extract %1 : $Bool, #Bool._value // user: %4
3129
cond_br %3, bb1, bb2 // id: %4
3230

@@ -50,7 +48,6 @@ bb3: // Preds: bb1 bb2
5048
copy_addr [take] %2 to [initialization] %0 : $*T // id: %17
5149
%18 = tuple () // user: %20
5250
debug_value_addr %0 : $*T
53-
debug_value_addr %2 : $*T
5451
dealloc_stack %2 : $*T // id: %19
5552
return %18 : $() // id: %20
5653
}
@@ -94,6 +91,8 @@ bb0(%0 : $*T):
9491
%c1 = apply %f1<T>(%l1) : $@convention(thin) <τ_0_0> (@in τ_0_0) -> ()
9592
debug_value_addr %l1 : $*T
9693
dealloc_stack %l1 : $*T
94+
// forwardPropagateCopy should cleanup debug_value_addr. See rdar://66000188
95+
9796
debug_value_addr %0 : $*T
9897
destroy_addr %0 : $*T
9998
%r1 = tuple ()
@@ -152,8 +151,6 @@ bb0(%0 : $*T):
152151
copy_addr [take] %0 to [initialization] %l1 : $*T
153152
%f1 = function_ref @f_in : $@convention(thin) <τ_0_0> (@in τ_0_0) -> ()
154153
%c1 = apply %f1<T>(%l1) : $@convention(thin) <τ_0_0> (@in τ_0_0) -> ()
155-
debug_value_addr %0 : $*T
156-
debug_value_addr %l1 : $*T
157154
dealloc_stack %l1 : $*T
158155
%r1 = tuple ()
159156
return %r1 : $()
@@ -172,8 +169,6 @@ bb0(%0 : $*T):
172169
copy_addr [take] %0 to %l1 : $*T
173170
%f2 = function_ref @f_in : $@convention(thin) <τ_0_0> (@in τ_0_0) -> ()
174171
%c2 = apply %f2<T>(%l1) : $@convention(thin) <τ_0_0> (@in τ_0_0) -> ()
175-
debug_value_addr %0 : $*T
176-
debug_value_addr %l1 : $*T
177172
dealloc_stack %l1 : $*T
178173
%r1 = tuple ()
179174
return %r1 : $()
@@ -192,6 +187,7 @@ bb0(%0 : $*T):
192187
debug_value_addr %l1 : $*T
193188
copy_addr %l1 to [initialization] %0 : $*T
194189
debug_value_addr %0 : $*T
190+
// backwardPropagateCopy should cleanup debug_value_addr. See rdar://66000188
195191
debug_value_addr %l1 : $*T
196192
destroy_addr %l1 : $*T
197193
dealloc_stack %l1 : $*T
@@ -209,10 +205,10 @@ br bb1(%0: $*T)
209205
bb1(%1 : $*T):
210206
%f1 = function_ref @f_out : $@convention(thin) <τ_0_0> () -> @out τ_0_0
211207
%c1 = apply %f1<T>(%l1) : $@convention(thin) <τ_0_0> () -> @out τ_0_0
212-
debug_value_addr %0 : $*T
208+
debug_value_addr %1 : $*T
213209
debug_value_addr %l1 : $*T
214-
copy_addr %l1 to [initialization] %0 : $*T
215-
debug_value_addr %0 : $*T
210+
copy_addr %l1 to [initialization] %1 : $*T
211+
debug_value_addr %1 : $*T
216212
debug_value_addr %l1 : $*T
217213
destroy_addr %l1 : $*T
218214
dealloc_stack %l1 : $*T

0 commit comments

Comments
 (0)