Skip to content

Commit c639c71

Browse files
committed
Optimizer: convert the RangeDumper pass to a test
1 parent d8a8569 commit c639c71

File tree

7 files changed

+92
-101
lines changed

7 files changed

+92
-101
lines changed

SwiftCompilerSources/Sources/Optimizer/PassManager/PassRegistration.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@ private func registerSwiftPasses() {
149149

150150
// Test passes
151151
registerPass(silPrinterPass, { silPrinterPass.run($0) })
152-
registerPass(rangeDumper, { rangeDumper.run($0) })
153152
registerPass(testInstructionIteration, { testInstructionIteration.run($0) })
154153
registerPass(updateBorrowedFromPass, { updateBorrowedFromPass.run($0) })
155154
}

SwiftCompilerSources/Sources/Optimizer/TestPasses/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
swift_compiler_sources(Optimizer
1010
SILPrinter.swift
11-
RangeDumper.swift
1211
UpdateBorrowedFrom.swift
1312
TestInstructionIteration.swift
1413
)

SwiftCompilerSources/Sources/Optimizer/TestPasses/RangeDumper.swift

Lines changed: 0 additions & 96 deletions
This file was deleted.

SwiftCompilerSources/Sources/SIL/DataStructures/InstructionRange.swift

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,3 +275,89 @@ extension InstructionRange {
275275
}
276276
}
277277

278+
//===--------------------------------------------------------------------===//
279+
// Tests
280+
//===--------------------------------------------------------------------===//
281+
282+
let rangeTest = Test("ranges") {
283+
function, arguments, context in
284+
285+
var begin: Instruction?
286+
var ends = Stack<Instruction>(context)
287+
defer { ends.deinitialize() }
288+
var interiors = Stack<Instruction>(context)
289+
defer { interiors.deinitialize() }
290+
var ins = Stack<Instruction>(context)
291+
defer { ins.deinitialize() }
292+
var outs = Stack<Instruction>(context)
293+
defer { outs.deinitialize() }
294+
295+
for inst in function.instructions {
296+
if let sli = inst as? StringLiteralInst {
297+
switch sli.value {
298+
case "begin":
299+
assert(begin == nil, "more than one begin instruction")
300+
begin = sli
301+
case "end":
302+
ends.append(sli)
303+
case "interior":
304+
interiors.append(sli)
305+
case "inside":
306+
ins.append(sli)
307+
case "outside":
308+
outs.append(sli)
309+
default:
310+
break
311+
}
312+
}
313+
}
314+
315+
guard let begin = begin else { return }
316+
317+
var instRange = InstructionRange(begin: begin, context)
318+
defer { instRange.deinitialize() }
319+
320+
instRange.insert(contentsOf: ends)
321+
instRange.insert(contentsOf: interiors)
322+
323+
print("Instruction range in \(function.name):")
324+
print(instRange)
325+
print("Block range in \(function.name):")
326+
print(instRange.blockRange)
327+
print("End function \(function.name)\n")
328+
329+
verify(instRange.blockRange, context)
330+
331+
for i in ins {
332+
assert(instRange.contains(i))
333+
assert(instRange.inclusiveRangeContains(i))
334+
}
335+
for e in ends {
336+
assert(!instRange.contains(e))
337+
assert(instRange.inclusiveRangeContains(e))
338+
}
339+
for o in outs {
340+
assert(!instRange.contains(o))
341+
assert(!instRange.inclusiveRangeContains(o))
342+
}
343+
}
344+
345+
private func verify(_ blockRange: BasicBlockRange, _ context: TestContext) {
346+
var inRange = BasicBlockSet(context)
347+
defer { inRange.deinitialize() }
348+
for b in blockRange.range {
349+
inRange.insert(b)
350+
}
351+
352+
var inInclusiveRange = BasicBlockSet(context)
353+
defer { inInclusiveRange.deinitialize() }
354+
for b in blockRange.inclusiveRange {
355+
inInclusiveRange.insert(b)
356+
}
357+
358+
for b in blockRange.begin.parentFunction.blocks {
359+
assert(blockRange.contains(b) == inRange.contains(b))
360+
assert(blockRange.inclusiveRangeContains(b) == inInclusiveRange.contains(b))
361+
}
362+
}
363+

SwiftCompilerSources/Sources/SIL/Utilities/Test.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ public func registerTests() {
149149
enclosingValuesTest,
150150
forwardingDefUseTest,
151151
forwardingUseDefTest,
152+
rangeTest,
152153
addressableTest
153154
)
154155

include/swift/SILOptimizer/PassManager/Passes.def

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,6 @@ PASS(TestInstructionIteration, "test-instruction-iteration",
8585
"Tests instruction iteration")
8686
PASS(InitializeStaticGlobals, "initialize-static-globals",
8787
"Initializes static global variables")
88-
PASS(RangeDumper, "dump-ranges",
89-
"Dumps block and instruction ranges")
9088
PASS(MandatoryRedundantLoadElimination, "mandatory-redundant-load-elimination",
9189
"Mandatory Redundant Load Elimination")
9290
PASS(EarlyRedundantLoadElimination, "early-redundant-load-elimination",
Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// RUN: %target-sil-opt %s -dump-ranges -o /dev/null | %FileCheck %s
1+
// RUN: %target-sil-opt %s -test-runner -o /dev/null | %FileCheck %s
22

33
// REQUIRES: swift_in_compiler
44

@@ -21,6 +21,7 @@ sil_stage canonical
2121
// CHECK-NEXT: End function basic_test
2222
sil @basic_test : $@convention(thin) () -> () {
2323
bb0:
24+
specify_test "ranges"
2425
%0 = string_literal utf8 "outside"
2526
br bb1
2627
bb1:
@@ -66,6 +67,7 @@ bb6:
6667
// CHECK-NEXT: End function loops
6768
sil @loops : $@convention(thin) () -> () {
6869
bb0:
70+
specify_test "ranges"
6971
%0 = string_literal utf8 "outside"
7072
br bb1
7173
bb1:
@@ -104,6 +106,7 @@ bb7:
104106
// CHECK-NEXT: End function minimal
105107
sil @minimal : $@convention(thin) () -> () {
106108
bb0:
109+
specify_test "ranges"
107110
%0 = string_literal utf8 "begin"
108111
%1 = string_literal utf8 "end"
109112
%r = tuple()
@@ -117,6 +120,7 @@ bb0:
117120
// CHECK: End function invalid
118121
sil @invalid : $@convention(thin) () -> () {
119122
bb0:
123+
specify_test "ranges"
120124
cond_br undef, bb1, bb2
121125
bb1:
122126
%1 = string_literal utf8 "begin"

0 commit comments

Comments
 (0)