Skip to content

Commit a086934

Browse files
committed
[MOWTE] Visit undef values.
Such values' types may also also be move-only wrapped.
1 parent 9478aee commit a086934

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

lib/SILOptimizer/Mandatory/MoveOnlyWrappedTypeEliminator.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,9 @@ bool SILMoveOnlyWrappedTypeEliminator::process() {
345345
madeChange = true;
346346
}
347347
}
348+
for (auto pair : fn->getUndefValues()) {
349+
recordValue(pair.second);
350+
}
348351

349352
SILMoveOnlyWrappedTypeEliminatorVisitor visitor(touchedArgs);
350353
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)