Skip to content

Commit 1ba1f3c

Browse files
authored
Merge pull request swiftlang#12487 from dcci/dominance-tests
[SIL] Enforce dominance property of the entry block
2 parents 3458d45 + ff402cf commit 1ba1f3c

File tree

6 files changed

+28
-9
lines changed

6 files changed

+28
-9
lines changed

lib/SIL/SILVerifier.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4003,7 +4003,11 @@ class SILVerifier : public SILVerifierBase<SILVerifier> {
40034003
"final component should match leaf value type of key path type");
40044004
}
40054005

4006-
void verifyEntryPointArguments(SILBasicBlock *entry) {
4006+
// This verifies that the entry block of a SIL function doesn't have
4007+
// any predecessors and also verifies the entry point arguments.
4008+
void verifyEntryBlock(SILBasicBlock *entry) {
4009+
require(entry->pred_empty(), "entry block cannot have predecessors");
4010+
40074011
DEBUG(llvm::dbgs() << "Argument types for entry point BB:\n";
40084012
for (auto *arg
40094013
: make_range(entry->args_begin(), entry->args_end()))
@@ -4384,7 +4388,7 @@ class SILVerifier : public SILVerifierBase<SILVerifier> {
43844388
}
43854389

43864390
// Otherwise, verify the body of the function.
4387-
verifyEntryPointArguments(&*F->getBlocks().begin());
4391+
verifyEntryBlock(&*F->getBlocks().begin());
43884392
verifyEpilogBlocks(F);
43894393
verifyFlowSensitiveRules(F);
43904394
verifyBranches(F);

test/SILOptimizer/cse.sil

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,10 @@ class E : B { }
9999

100100
sil @exit : $@convention(thin) () -> Never {
101101
bb0:
102-
br bb0
102+
br bb1
103+
104+
bb1:
105+
br bb1
103106
}
104107

105108
// CHECK-LABEL: sil @removeTriviallyDeadInstructions

test/SILOptimizer/dead_code_elimination.sil

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,15 @@ bb3:
6161
// loops.
6262
// CHECK-LABEL: sil @dead3
6363
sil @dead3 : $@convention(thin) () -> () {
64-
// CHECK: bb0
6564
bb0:
65+
// CHECK: bb0
66+
br bb1
67+
// CHECK: bb1
68+
bb1:
6669
// CHECK: integer_literal $Builtin.Int32, 0
70+
// CHECK: br bb1
6771
%0 = integer_literal $Builtin.Int32, 0
68-
br bb0
72+
br bb1
6973
}
7074

7175
// CHECK-LABEL: sil hidden @test_dce_bbargs

test/SILOptimizer/diagnose_unreachable.sil

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,9 @@ class E : B { }
131131

132132
sil @exit : $@convention(thin) () -> Never {
133133
bb0:
134-
br bb0
134+
br bb1
135+
bb1:
136+
br bb1
135137
}
136138

137139
// CHECK-LABEL: sil @removeTriviallyDeadInstructions

test/SILOptimizer/sil_combine.sil

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,9 @@ bb2:
132132

133133
sil @exit : $@convention(thin) () -> Never {
134134
bb0:
135-
br bb0
135+
br bb1
136+
bb1:
137+
br bb1
136138
}
137139

138140
// CHECK-LABEL: sil @removeTriviallyDeadInstructions

test/SILOptimizer/simplify_cfg.sil

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -562,10 +562,14 @@ bb6(%8 : $Int64):
562562

563563
// CHECK-LABEL: @infinite_loop
564564
// CHECK: bb0
565-
// CHECK-NEXT: br bb0
565+
// CHECK-NEXT: br bb1
566+
// CHECK: bb1
567+
// CHECK-NEXT: br bb1
566568
sil @infinite_loop : $@convention(thin) () -> () {
567569
bb0:
568-
br bb0
570+
br bb1
571+
bb1:
572+
br bb1
569573
}
570574

571575
import Builtin

0 commit comments

Comments
 (0)