Skip to content

Commit d93a0b4

Browse files
committed
Split DCE from Optimizer phase
1 parent abf2cde commit d93a0b4

File tree

3 files changed

+27
-5
lines changed

3 files changed

+27
-5
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package effekt.core
2+
3+
import effekt.PhaseResult.CoreTransformed
4+
import effekt.context.Context
5+
import effekt.core.optimizer.Deadcode
6+
import effekt.Phase
7+
8+
object DeadCodeElimination extends Phase[CoreTransformed, CoreTransformed] {
9+
val phaseName: String = "deadcode-elimination"
10+
11+
def run(input: CoreTransformed)(using Context): Option[CoreTransformed] =
12+
input match {
13+
case CoreTransformed(source, tree, mod, core) =>
14+
val term = Context.checkMain(mod)
15+
val dce = Context.timed("deadcode-elimination", source.name) {
16+
Deadcode.remove(term, core)
17+
}
18+
Some(CoreTransformed(source, tree, mod, dce))
19+
}
20+
}

effekt/shared/src/main/scala/effekt/core/optimizer/Optimizer.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ object Optimizer extends Phase[CoreTransformed, CoreTransformed] {
2323

2424
var tree = core
2525

26-
// (1) first thing we do is simply remove unused definitions (this speeds up all following analysis and rewrites)
27-
tree = Context.timed("deadcode-elimination", source.name) {
28-
Deadcode.remove(mainSymbol, tree)
29-
}
26+
// (1) first thing we do is simply remove unused definitions (this speeds up all following analysis and rewrites)
27+
// tree = Context.timed("deadcode-elimination", source.name) {
28+
// Deadcode.remove(mainSymbol, tree)
29+
// }
3030

3131
if !Context.config.optimize() then return tree;
3232

effekt/shared/src/main/scala/effekt/generator/llvm/LLVM.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import effekt.core.optimizer
77
import effekt.machine
88
import kiama.output.PrettyPrinterTypes.{ Document, emptyLinks }
99
import kiama.util.Source
10+
import effekt.core.DeadCodeElimination
11+
import effekt.generator.chez.DeadCodeElimination
1012

1113

1214
class LLVM extends Compiler[String] {
@@ -52,7 +54,7 @@ class LLVM extends Compiler[String] {
5254
// -----------------------------------
5355
object steps {
5456
// intermediate steps for VSCode
55-
val afterCore = allToCore(Core) andThen Aggregate andThen optimizer.Optimizer andThen core.PolymorphismBoxing
57+
val afterCore = allToCore(Core) andThen Aggregate andThen core.DeadCodeElimination andThen optimizer.Optimizer andThen core.PolymorphismBoxing
5658
val afterMachine = afterCore andThen Machine map { case (mod, main, prog) => prog }
5759
val afterLLVM = afterMachine map {
5860
case machine.Program(decls, defns, entry) =>

0 commit comments

Comments
 (0)