Skip to content

Commit 5147cd4

Browse files
committed
[MOWTE] Visit undef values.
Such values' types may also also be move-only wrapped.
1 parent 35f91cf commit 5147cd4

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

lib/SILOptimizer/Mandatory/MoveOnlyWrappedTypeEliminator.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,18 @@ bool SILMoveOnlyWrappedTypeEliminator::process() {
332332
madeChange = true;
333333
}
334334
}
335+
SmallVector<std::pair<SILType, SILUndef *>, 2> undefsUpdated;
336+
for (auto pair : fn->getUndefValues()) {
337+
bool relevant = recordValue(pair.second);
338+
if (!relevant)
339+
continue;
340+
undefsUpdated.push_back(pair);
341+
342+
madeChange = true;
343+
}
344+
for (auto pair : undefsUpdated) {
345+
fn->updateTypeForUndef(pair.second, pair.first);
346+
}
335347

336348
SILMoveOnlyWrappedTypeEliminatorVisitor visitor;
337349
while (!touchedInsts.empty()) {

test/SILOptimizer/moveonly_type_eliminator.sil

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -562,3 +562,19 @@ bb3(%result : @owned $@moveOnly FakeOptional<Klass>):
562562
%result2 = moveonlywrapper_to_copyable [owned] %result : $@moveOnly FakeOptional<Klass>
563563
return %result2 : $FakeOptional<Klass>
564564
}
565+
566+
// CHECK-LABEL: sil [ossa] @debug_value_undef : {{.*}} {
567+
// CHECK: debug_value [moveable_value_debuginfo] undef : $*Klass, var, name "s"
568+
// CHECK-LABEL: } // end sil function 'debug_value_undef'
569+
sil [ossa] @debug_value_undef : $@convention(thin) (@owned Klass) -> () {
570+
bb0(%x : @owned $Klass):
571+
%addr = alloc_stack $@moveOnly Klass
572+
%unwrapped_addr = moveonlywrapper_to_copyable_addr %addr : $*@moveOnly Klass
573+
store %x to [init] %unwrapped_addr : $*Klass
574+
debug_value %addr : $*@moveOnly Klass, var, name "s", argno 1, expr op_deref
575+
destroy_addr %addr : $*@moveOnly Klass
576+
debug_value undef : $*@moveOnly Klass, var, name "s", argno 1, expr op_deref
577+
dealloc_stack %addr : $*@moveOnly Klass
578+
%retval = tuple ()
579+
return %retval : $()
580+
}

0 commit comments

Comments
 (0)