Skip to content

Commit 58188fc

Browse files
committed
SIL: let the function entry block be the parent block of SILUndefs in the function.
1 parent 4413a16 commit 58188fc

File tree

3 files changed

+12
-8
lines changed

3 files changed

+12
-8
lines changed

lib/SIL/IR/SILValue.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,10 @@ SILBasicBlock *SILNode::getParentBlock() const {
209209
if (auto *MVR = dyn_cast<MultipleValueInstructionResult>(this)) {
210210
return MVR->getParent()->getParent();
211211
}
212+
if (auto *undef = dyn_cast<SILUndef>(this)) {
213+
// By convention, undefs are considered to be defined at the entry of the function.
214+
return undef->getParent()->getEntryBlock();
215+
}
212216
return nullptr;
213217
}
214218

test/SILOptimizer/simplify_cfg_args.sil

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -745,14 +745,14 @@ enum ThreeWay {
745745

746746
// CHECK-LABEL: sil hidden [noinline] @testUnwrapEnumArg : $@convention(thin) () -> () {
747747
// CHECK: bb0:
748-
// CHECK: br bb1(undef : $Builtin.Int64, %{{.*}} : $Payload)
749-
// CHECK: bb1(%{{.*}} : $Builtin.Int64, %{{.*}} : $Payload):
748+
// CHECK: br bb1(%{{.*}} : $Payload)
749+
// CHECK: bb1(%{{.*}} : $Payload):
750750
// CHECK: alloc_stack $Payload
751751
// CHECK: switch_enum undef : $ThreeWay, case #ThreeWay.one!enumelt: bb4, case #ThreeWay.two!enumelt: bb2, case #ThreeWay.three!enumelt: bb3
752752
// CHECK: bb2:
753753
// CHECK: [[P2:%.*]] = load %{{.*}} : $*Payload
754754
// CHECK: dealloc_stack %{{.*}} : $*Payload
755-
// CHECK: br bb1(undef : $Builtin.Int64, [[P2]] : $Payload)
755+
// CHECK: br bb1([[P2]] : $Payload)
756756
// CHECK: bb3:
757757
// CHECK: [[P3:%.*]] = load %{{.*}} : $*Payload
758758
// CHECK: dealloc_stack %{{.*}} : $*Payload
@@ -764,7 +764,7 @@ enum ThreeWay {
764764
// CHECK: bb5:
765765
// CHECK: br bb7
766766
// CHECK: bb6:
767-
// CHECK: br bb1(undef : $Builtin.Int64, [[P4]] : $Payload)
767+
// CHECK: br bb1([[P4]] : $Payload)
768768
// CHECK: bb7:
769769
// CHECK: return %{{.*}} : $()
770770
// CHECK-LABEL: } // end sil function 'testUnwrapEnumArg'

test/SILOptimizer/simplify_cfg_args_ossa.sil

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -723,14 +723,14 @@ enum ThreeWay {
723723

724724
// CHECK-LABEL: sil hidden [noinline] [ossa] @testUnwrapEnumArg : $@convention(thin) () -> () {
725725
// CHECK: bb0:
726-
// CHECK: br bb1(undef : $Builtin.Int64, %{{.*}} : $Payload)
727-
// CHECK: bb1(%{{.*}} : $Builtin.Int64, %{{.*}} : $Payload):
726+
// CHECK: br bb1(%{{.*}} : $Payload)
727+
// CHECK: bb1(%{{.*}} : $Payload):
728728
// CHECK: alloc_stack $Payload
729729
// CHECK: switch_enum undef : $ThreeWay, case #ThreeWay.one!enumelt: bb4, case #ThreeWay.two!enumelt: bb2, case #ThreeWay.three!enumelt: bb3
730730
// CHECK: bb2:
731731
// CHECK: [[P2:%.*]] = load [trivial] %{{.*}} : $*Payload
732732
// CHECK: dealloc_stack %{{.*}} : $*Payload
733-
// CHECK: br bb1(undef : $Builtin.Int64, [[P2]] : $Payload)
733+
// CHECK: br bb1([[P2]] : $Payload)
734734
// CHECK: bb3:
735735
// CHECK: [[P3:%.*]] = load [trivial] %{{.*}} : $*Payload
736736
// CHECK: dealloc_stack %{{.*}} : $*Payload
@@ -740,7 +740,7 @@ enum ThreeWay {
740740
// CHECK: dealloc_stack %{{.*}} : $*Payload
741741
// CHECK: cond_br undef, bb6, bb5
742742
// CHECK: bb5:
743-
// CHECK: br bb1(undef : $Builtin.Int64, [[P4]] : $Payload)
743+
// CHECK: br bb1([[P4]] : $Payload)
744744
// CHECK: bb6:
745745
// CHECK: br bb7
746746
// CHECK: bb7:

0 commit comments

Comments
 (0)