1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-12-20 07:30:00 +00:00

Made room for new pass 3 interval analysis

This commit is contained in:
jespergravgaard 2017-07-25 00:56:42 +02:00
parent 0aa64b3203
commit 69cbee294d
7 changed files with 28 additions and 28 deletions

View File

@ -49,8 +49,8 @@ public class Compiler {
KickCParser.FileContext file = pass0ParseInput(input, log); KickCParser.FileContext file = pass0ParseInput(input, log);
Program program = pass1GenerateSSA(file, log); Program program = pass1GenerateSSA(file, log);
pass2OptimizeSSA(program, log); pass2OptimizeSSA(program, log);
AsmProgram asmProgram = pass3GenerateAsm(program, log); AsmProgram asmProgram = pass4GenerateAsm(program, log);
pass4OptimizeAsm(asmProgram, log); pass5OptimizeAsm(asmProgram, log);
log.append("FINAL SYMBOL TABLE"); log.append("FINAL SYMBOL TABLE");
log.append(program.getScope().getSymbolTableContents()); log.append(program.getScope().getSymbolTableContents());
@ -64,16 +64,16 @@ public class Compiler {
} }
} }
public void pass4OptimizeAsm(AsmProgram asmProgram, CompileLog log) { public void pass5OptimizeAsm(AsmProgram asmProgram, CompileLog log) {
List<Pass4AsmOptimization> pass4Optimizations = new ArrayList<>(); List<Pass5AsmOptimization> pass4Optimizations = new ArrayList<>();
pass4Optimizations.add(new Pass4NextJumpElimination(asmProgram, log)); pass4Optimizations.add(new Pass5NextJumpElimination(asmProgram, log));
pass4Optimizations.add(new Pass4UnnecesaryLoadElimination(asmProgram, log)); pass4Optimizations.add(new Pass5UnnecesaryLoadElimination(asmProgram, log));
boolean asmOptimized = true; boolean asmOptimized = true;
while (asmOptimized) { while (asmOptimized) {
asmOptimized = false; asmOptimized = false;
for (Pass4AsmOptimization optimization : pass4Optimizations) { for (Pass5AsmOptimization optimization : pass4Optimizations) {
boolean stepOtimized = optimization.optimize(); boolean stepOptimized = optimization.optimize();
if (stepOtimized) { if (stepOptimized) {
log.append("Succesful ASM optimization " + optimization.getClass().getSimpleName()); log.append("Succesful ASM optimization " + optimization.getClass().getSimpleName());
asmOptimized = true; asmOptimized = true;
log.append("ASSEMBLER"); log.append("ASSEMBLER");
@ -83,13 +83,13 @@ public class Compiler {
} }
} }
public AsmProgram pass3GenerateAsm(Program program, CompileLog log) { public AsmProgram pass4GenerateAsm(Program program, CompileLog log) {
Pass3BlockSequencePlanner pass3BlockSequencePlanner = new Pass3BlockSequencePlanner(program); Pass4BlockSequencePlanner pass4BlockSequencePlanner = new Pass4BlockSequencePlanner(program);
pass3BlockSequencePlanner.plan(); pass4BlockSequencePlanner.plan();
Pass3RegisterAllocation pass3RegisterAllocation = new Pass3RegisterAllocation(program); Pass4RegisterAllocation pass4RegisterAllocation = new Pass4RegisterAllocation(program);
pass3RegisterAllocation.allocate(); pass4RegisterAllocation.allocate();
Pass3CodeGeneration pass3CodeGeneration = new Pass3CodeGeneration(program); Pass4CodeGeneration pass4CodeGeneration = new Pass4CodeGeneration(program);
AsmProgram asmProgram = pass3CodeGeneration.generate(); AsmProgram asmProgram = pass4CodeGeneration.generate();
log.append("INITIAL ASM"); log.append("INITIAL ASM");
log.append(asmProgram.toString()); log.append(asmProgram.toString());

View File

@ -7,12 +7,12 @@ import java.util.List;
import java.util.Stack; import java.util.Stack;
/** Plan the optimal sequence for the blocks of the control flow graph */ /** Plan the optimal sequence for the blocks of the control flow graph */
public class Pass3BlockSequencePlanner { public class Pass4BlockSequencePlanner {
private ControlFlowGraph graph; private ControlFlowGraph graph;
private ProgramScope scope; private ProgramScope scope;
public Pass3BlockSequencePlanner(Program program) { public Pass4BlockSequencePlanner(Program program) {
this.graph = program.getGraph(); this.graph = program.getGraph();
this.scope = program.getScope(); this.scope = program.getScope();
} }

View File

@ -8,12 +8,12 @@ import java.util.*;
/** /**
* Code Generation of 6502 Assembler from ICL/SSA Control Flow Graph * Code Generation of 6502 Assembler from ICL/SSA Control Flow Graph
*/ */
public class Pass3CodeGeneration { public class Pass4CodeGeneration {
private ControlFlowGraph graph; private ControlFlowGraph graph;
private ProgramScope symbols; private ProgramScope symbols;
public Pass3CodeGeneration(Program program) { public Pass4CodeGeneration(Program program) {
this.graph = program.getGraph(); this.graph = program.getGraph();
this.symbols = program.getScope(); this.symbols = program.getScope();
} }

View File

@ -5,13 +5,13 @@ import dk.camelot64.kickc.icl.*;
/** /**
* Register Allocation for variables * Register Allocation for variables
*/ */
public class Pass3RegisterAllocation { public class Pass4RegisterAllocation {
private ControlFlowGraph graph; private ControlFlowGraph graph;
private ProgramScope symbols; private ProgramScope symbols;
int currentZp = 2; int currentZp = 2;
public Pass3RegisterAllocation(Program program) { public Pass4RegisterAllocation(Program program) {
this.graph = program.getGraph(); this.graph = program.getGraph();
this.symbols = program.getScope(); this.symbols = program.getScope();
} }

View File

@ -10,12 +10,12 @@ import java.util.List;
/** Optimization performed on Assembler Code (Asm Code). /** Optimization performed on Assembler Code (Asm Code).
* Optimizations are performed repeatedly until none of them yield any result * Optimizations are performed repeatedly until none of them yield any result
**/ **/
public abstract class Pass4AsmOptimization { public abstract class Pass5AsmOptimization {
protected CompileLog log; protected CompileLog log;
private AsmProgram program; private AsmProgram program;
public Pass4AsmOptimization(AsmProgram program, CompileLog log) { public Pass5AsmOptimization(AsmProgram program, CompileLog log) {
this.program = program; this.program = program;
this.log = log; this.log = log;
} }

View File

@ -10,9 +10,9 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
/** Optimize assembler code by removing jumps to labels immediately following the jump */ /** 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); super(program, log);
} }

View File

@ -8,9 +8,9 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
/** Maps out register values entering all instructions. Removes unnecessary loads / clears / sets */ /** 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); super(program, log);
} }