From 69cbee294d58fc347a5fc0dc774d7a9114e3d5bf Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Tue, 25 Jul 2017 00:56:42 +0200 Subject: [PATCH] Made room for new pass 3 interval analysis --- src/dk/camelot64/kickc/Compiler.java | 32 +++++++++---------- ...er.java => Pass4BlockSequencePlanner.java} | 4 +-- ...neration.java => Pass4CodeGeneration.java} | 4 +-- ...tion.java => Pass4RegisterAllocation.java} | 4 +-- ...ization.java => Pass5AsmOptimization.java} | 4 +-- ...ion.java => Pass5NextJumpElimination.java} | 4 +-- ...va => Pass5UnnecesaryLoadElimination.java} | 4 +-- 7 files changed, 28 insertions(+), 28 deletions(-) rename src/dk/camelot64/kickc/passes/{Pass3BlockSequencePlanner.java => Pass4BlockSequencePlanner.java} (93%) rename src/dk/camelot64/kickc/passes/{Pass3CodeGeneration.java => Pass4CodeGeneration.java} (98%) rename src/dk/camelot64/kickc/passes/{Pass3RegisterAllocation.java => Pass4RegisterAllocation.java} (99%) rename src/dk/camelot64/kickc/passes/{Pass4AsmOptimization.java => Pass5AsmOptimization.java} (91%) rename src/dk/camelot64/kickc/passes/{Pass4NextJumpElimination.java => Pass5NextJumpElimination.java} (90%) rename src/dk/camelot64/kickc/passes/{Pass4UnnecesaryLoadElimination.java => Pass5UnnecesaryLoadElimination.java} (96%) diff --git a/src/dk/camelot64/kickc/Compiler.java b/src/dk/camelot64/kickc/Compiler.java index 9ebff1c3d..ed27f3818 100644 --- a/src/dk/camelot64/kickc/Compiler.java +++ b/src/dk/camelot64/kickc/Compiler.java @@ -49,8 +49,8 @@ public class Compiler { KickCParser.FileContext file = pass0ParseInput(input, log); Program program = pass1GenerateSSA(file, log); pass2OptimizeSSA(program, log); - AsmProgram asmProgram = pass3GenerateAsm(program, log); - pass4OptimizeAsm(asmProgram, log); + AsmProgram asmProgram = pass4GenerateAsm(program, log); + pass5OptimizeAsm(asmProgram, log); log.append("FINAL SYMBOL TABLE"); log.append(program.getScope().getSymbolTableContents()); @@ -64,16 +64,16 @@ public class Compiler { } } - public void pass4OptimizeAsm(AsmProgram asmProgram, CompileLog log) { - List pass4Optimizations = new ArrayList<>(); - pass4Optimizations.add(new Pass4NextJumpElimination(asmProgram, log)); - pass4Optimizations.add(new Pass4UnnecesaryLoadElimination(asmProgram, log)); + public void pass5OptimizeAsm(AsmProgram asmProgram, CompileLog log) { + List pass4Optimizations = new ArrayList<>(); + pass4Optimizations.add(new Pass5NextJumpElimination(asmProgram, log)); + pass4Optimizations.add(new Pass5UnnecesaryLoadElimination(asmProgram, log)); boolean asmOptimized = true; while (asmOptimized) { asmOptimized = false; - for (Pass4AsmOptimization optimization : pass4Optimizations) { - boolean stepOtimized = optimization.optimize(); - if (stepOtimized) { + for (Pass5AsmOptimization optimization : pass4Optimizations) { + boolean stepOptimized = optimization.optimize(); + if (stepOptimized) { log.append("Succesful ASM optimization " + optimization.getClass().getSimpleName()); asmOptimized = true; log.append("ASSEMBLER"); @@ -83,13 +83,13 @@ public class Compiler { } } - public AsmProgram pass3GenerateAsm(Program program, CompileLog log) { - Pass3BlockSequencePlanner pass3BlockSequencePlanner = new Pass3BlockSequencePlanner(program); - pass3BlockSequencePlanner.plan(); - Pass3RegisterAllocation pass3RegisterAllocation = new Pass3RegisterAllocation(program); - pass3RegisterAllocation.allocate(); - Pass3CodeGeneration pass3CodeGeneration = new Pass3CodeGeneration(program); - AsmProgram asmProgram = pass3CodeGeneration.generate(); + public AsmProgram pass4GenerateAsm(Program program, CompileLog log) { + Pass4BlockSequencePlanner pass4BlockSequencePlanner = new Pass4BlockSequencePlanner(program); + pass4BlockSequencePlanner.plan(); + Pass4RegisterAllocation pass4RegisterAllocation = new Pass4RegisterAllocation(program); + pass4RegisterAllocation.allocate(); + Pass4CodeGeneration pass4CodeGeneration = new Pass4CodeGeneration(program); + AsmProgram asmProgram = pass4CodeGeneration.generate(); log.append("INITIAL ASM"); log.append(asmProgram.toString()); diff --git a/src/dk/camelot64/kickc/passes/Pass3BlockSequencePlanner.java b/src/dk/camelot64/kickc/passes/Pass4BlockSequencePlanner.java similarity index 93% rename from src/dk/camelot64/kickc/passes/Pass3BlockSequencePlanner.java rename to src/dk/camelot64/kickc/passes/Pass4BlockSequencePlanner.java index 6e71ef40f..1eb8cd956 100644 --- a/src/dk/camelot64/kickc/passes/Pass3BlockSequencePlanner.java +++ b/src/dk/camelot64/kickc/passes/Pass4BlockSequencePlanner.java @@ -7,12 +7,12 @@ import java.util.List; import java.util.Stack; /** Plan the optimal sequence for the blocks of the control flow graph */ -public class Pass3BlockSequencePlanner { +public class Pass4BlockSequencePlanner { private ControlFlowGraph graph; private ProgramScope scope; - public Pass3BlockSequencePlanner(Program program) { + public Pass4BlockSequencePlanner(Program program) { this.graph = program.getGraph(); this.scope = program.getScope(); } diff --git a/src/dk/camelot64/kickc/passes/Pass3CodeGeneration.java b/src/dk/camelot64/kickc/passes/Pass4CodeGeneration.java similarity index 98% rename from src/dk/camelot64/kickc/passes/Pass3CodeGeneration.java rename to src/dk/camelot64/kickc/passes/Pass4CodeGeneration.java index 4fc9044f2..c5325883c 100644 --- a/src/dk/camelot64/kickc/passes/Pass3CodeGeneration.java +++ b/src/dk/camelot64/kickc/passes/Pass4CodeGeneration.java @@ -8,12 +8,12 @@ import java.util.*; /** * Code Generation of 6502 Assembler from ICL/SSA Control Flow Graph */ -public class Pass3CodeGeneration { +public class Pass4CodeGeneration { private ControlFlowGraph graph; private ProgramScope symbols; - public Pass3CodeGeneration(Program program) { + public Pass4CodeGeneration(Program program) { this.graph = program.getGraph(); this.symbols = program.getScope(); } diff --git a/src/dk/camelot64/kickc/passes/Pass3RegisterAllocation.java b/src/dk/camelot64/kickc/passes/Pass4RegisterAllocation.java similarity index 99% rename from src/dk/camelot64/kickc/passes/Pass3RegisterAllocation.java rename to src/dk/camelot64/kickc/passes/Pass4RegisterAllocation.java index 8e6cb8b15..4785792ce 100644 --- a/src/dk/camelot64/kickc/passes/Pass3RegisterAllocation.java +++ b/src/dk/camelot64/kickc/passes/Pass4RegisterAllocation.java @@ -5,13 +5,13 @@ import dk.camelot64.kickc.icl.*; /** * Register Allocation for variables */ -public class Pass3RegisterAllocation { +public class Pass4RegisterAllocation { private ControlFlowGraph graph; private ProgramScope symbols; int currentZp = 2; - public Pass3RegisterAllocation(Program program) { + public Pass4RegisterAllocation(Program program) { this.graph = program.getGraph(); this.symbols = program.getScope(); } diff --git a/src/dk/camelot64/kickc/passes/Pass4AsmOptimization.java b/src/dk/camelot64/kickc/passes/Pass5AsmOptimization.java similarity index 91% rename from src/dk/camelot64/kickc/passes/Pass4AsmOptimization.java rename to src/dk/camelot64/kickc/passes/Pass5AsmOptimization.java index 9ba548d01..2e210e073 100644 --- a/src/dk/camelot64/kickc/passes/Pass4AsmOptimization.java +++ b/src/dk/camelot64/kickc/passes/Pass5AsmOptimization.java @@ -10,12 +10,12 @@ import java.util.List; /** Optimization performed on Assembler Code (Asm Code). * Optimizations are performed repeatedly until none of them yield any result **/ -public abstract class Pass4AsmOptimization { +public abstract class Pass5AsmOptimization { protected CompileLog log; private AsmProgram program; - public Pass4AsmOptimization(AsmProgram program, CompileLog log) { + public Pass5AsmOptimization(AsmProgram program, CompileLog log) { this.program = program; this.log = log; } diff --git a/src/dk/camelot64/kickc/passes/Pass4NextJumpElimination.java b/src/dk/camelot64/kickc/passes/Pass5NextJumpElimination.java similarity index 90% rename from src/dk/camelot64/kickc/passes/Pass4NextJumpElimination.java rename to src/dk/camelot64/kickc/passes/Pass5NextJumpElimination.java index 268ee68ec..04804a17a 100644 --- a/src/dk/camelot64/kickc/passes/Pass4NextJumpElimination.java +++ b/src/dk/camelot64/kickc/passes/Pass5NextJumpElimination.java @@ -10,9 +10,9 @@ import java.util.ArrayList; import java.util.List; /** Optimize assembler code by removing jumps to labels immediately following the jump */ -public class Pass4NextJumpElimination extends Pass4AsmOptimization { +public class Pass5NextJumpElimination extends Pass5AsmOptimization { - public Pass4NextJumpElimination(AsmProgram program, CompileLog log) { + public Pass5NextJumpElimination(AsmProgram program, CompileLog log) { super(program, log); } diff --git a/src/dk/camelot64/kickc/passes/Pass4UnnecesaryLoadElimination.java b/src/dk/camelot64/kickc/passes/Pass5UnnecesaryLoadElimination.java similarity index 96% rename from src/dk/camelot64/kickc/passes/Pass4UnnecesaryLoadElimination.java rename to src/dk/camelot64/kickc/passes/Pass5UnnecesaryLoadElimination.java index 1f34828a6..351c306e2 100644 --- a/src/dk/camelot64/kickc/passes/Pass4UnnecesaryLoadElimination.java +++ b/src/dk/camelot64/kickc/passes/Pass5UnnecesaryLoadElimination.java @@ -8,9 +8,9 @@ import java.util.ArrayList; import java.util.List; /** Maps out register values entering all instructions. Removes unnecessary loads / clears / sets */ -public class Pass4UnnecesaryLoadElimination extends Pass4AsmOptimization { +public class Pass5UnnecesaryLoadElimination extends Pass5AsmOptimization { - public Pass4UnnecesaryLoadElimination(AsmProgram program, CompileLog log) { + public Pass5UnnecesaryLoadElimination(AsmProgram program, CompileLog log) { super(program, log); }