From 92747454c77f6d814cffbfc852bb141cad0846f1 Mon Sep 17 00:00:00 2001 From: Jesper Gravgaard Date: Tue, 18 Jul 2017 18:10:12 +0200 Subject: [PATCH] Restructured code in new packages --- src/dk/camelot64/kickc/Compiler.java | 2 +- .../kickc/{icl => }/NumberParser.java | 2 +- src/dk/camelot64/kickc/TODO.txt | 23 +++++++++++++++---- src/dk/camelot64/kickc/asm/AsmFragment.java | 2 +- .../camelot64/kickc/asm/AsmInstuctionSet.java | 2 +- .../PointerDereferenceRegisterZpByte.java | 5 +++- .../camelot64/kickc/icl/ConstantInteger.java | 8 ++++++- .../camelot64/kickc/icl/ControlFlowGraph.java | 1 - .../ParseTreeConstantEvaluator.java | 4 +++- .../Pass1GenerateControlFlowGraph.java | 4 +++- ...ss1GenerateSingleStaticAssignmentForm.java | 3 ++- .../Pass1GenerateStatementSequence.java | 4 +++- .../Pass1ProcedureCallParameters.java | 4 +++- .../Pass1ProcedureCallsReturnValue.java | 4 +++- .../{icl => passes}/Pass1TypeInference.java | 10 ++++---- .../Pass2AliasElimination.java | 3 ++- .../{icl => passes}/Pass2AssertBlocks.java | 4 +++- .../{icl => passes}/Pass2AssertSymbols.java | 4 +++- .../Pass2ConditionalJumpSimplification.java | 3 ++- .../Pass2ConstantAdditionElimination.java | 4 ++-- .../Pass2ConstantPropagation.java | 4 ++-- .../{icl => passes}/Pass2CullEmptyBlocks.java | 3 ++- .../Pass2RedundantPhiElimination.java | 4 ++-- .../Pass2SelfPhiElimination.java | 6 ++++- .../{icl => passes}/Pass2SsaAssertion.java | 5 +++- .../{icl => passes}/Pass2SsaOptimization.java | 3 ++- .../Pass3BlockSequencePlanner.java | 6 ++++- .../{icl => passes}/Pass3CodeGeneration.java | 3 ++- .../Pass3RegisterAllocation.java | 4 +++- .../{icl => passes}/Pass4AsmOptimization.java | 2 +- .../Pass4NextJumpElimination.java | 2 +- .../Pass4UnnecesaryLoadElimination.java | 2 +- 32 files changed, 97 insertions(+), 43 deletions(-) rename src/dk/camelot64/kickc/{icl => }/NumberParser.java (97%) rename src/dk/camelot64/kickc/{icl => asm}/PointerDereferenceRegisterZpByte.java (81%) rename src/dk/camelot64/kickc/{icl => passes}/ParseTreeConstantEvaluator.java (96%) rename src/dk/camelot64/kickc/{icl => passes}/Pass1GenerateControlFlowGraph.java (98%) rename src/dk/camelot64/kickc/{icl => passes}/Pass1GenerateSingleStaticAssignmentForm.java (99%) rename src/dk/camelot64/kickc/{icl => passes}/Pass1GenerateStatementSequence.java (99%) rename src/dk/camelot64/kickc/{icl => passes}/Pass1ProcedureCallParameters.java (96%) rename src/dk/camelot64/kickc/{icl => passes}/Pass1ProcedureCallsReturnValue.java (96%) rename src/dk/camelot64/kickc/{icl => passes}/Pass1TypeInference.java (97%) rename src/dk/camelot64/kickc/{icl => passes}/Pass2AliasElimination.java (99%) rename src/dk/camelot64/kickc/{icl => passes}/Pass2AssertBlocks.java (97%) rename src/dk/camelot64/kickc/{icl => passes}/Pass2AssertSymbols.java (98%) rename src/dk/camelot64/kickc/{icl => passes}/Pass2ConditionalJumpSimplification.java (97%) rename src/dk/camelot64/kickc/{icl => passes}/Pass2ConstantAdditionElimination.java (99%) rename src/dk/camelot64/kickc/{icl => passes}/Pass2ConstantPropagation.java (99%) rename src/dk/camelot64/kickc/{icl => passes}/Pass2CullEmptyBlocks.java (97%) rename src/dk/camelot64/kickc/{icl => passes}/Pass2RedundantPhiElimination.java (96%) rename src/dk/camelot64/kickc/{icl => passes}/Pass2SelfPhiElimination.java (84%) rename src/dk/camelot64/kickc/{icl => passes}/Pass2SsaAssertion.java (84%) rename src/dk/camelot64/kickc/{icl => passes}/Pass2SsaOptimization.java (99%) rename src/dk/camelot64/kickc/{icl => passes}/Pass3BlockSequencePlanner.java (90%) rename src/dk/camelot64/kickc/{icl => passes}/Pass3CodeGeneration.java (99%) rename src/dk/camelot64/kickc/{icl => passes}/Pass3RegisterAllocation.java (99%) rename src/dk/camelot64/kickc/{icl => passes}/Pass4AsmOptimization.java (97%) rename src/dk/camelot64/kickc/{icl => passes}/Pass4NextJumpElimination.java (97%) rename src/dk/camelot64/kickc/{icl => passes}/Pass4UnnecesaryLoadElimination.java (99%) diff --git a/src/dk/camelot64/kickc/Compiler.java b/src/dk/camelot64/kickc/Compiler.java index 9027ab2c1..7a77b330e 100644 --- a/src/dk/camelot64/kickc/Compiler.java +++ b/src/dk/camelot64/kickc/Compiler.java @@ -4,9 +4,9 @@ import dk.camelot64.kickc.asm.AsmProgram; import dk.camelot64.kickc.icl.*; import dk.camelot64.kickc.parser.KickCLexer; import dk.camelot64.kickc.parser.KickCParser; +import dk.camelot64.kickc.passes.*; import org.antlr.v4.runtime.*; -import java.io.IOException; import java.util.ArrayList; import java.util.List; diff --git a/src/dk/camelot64/kickc/icl/NumberParser.java b/src/dk/camelot64/kickc/NumberParser.java similarity index 97% rename from src/dk/camelot64/kickc/icl/NumberParser.java rename to src/dk/camelot64/kickc/NumberParser.java index d3d577180..479539956 100644 --- a/src/dk/camelot64/kickc/icl/NumberParser.java +++ b/src/dk/camelot64/kickc/NumberParser.java @@ -1,4 +1,4 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc; /** Parser for converting literal numbers to the corresponding Java Integer/Double */ public class NumberParser { diff --git a/src/dk/camelot64/kickc/TODO.txt b/src/dk/camelot64/kickc/TODO.txt index 35b2818fe..1e5857bf2 100644 --- a/src/dk/camelot64/kickc/TODO.txt +++ b/src/dk/camelot64/kickc/TODO.txt @@ -1,7 +1,6 @@ Features - Move the main code into a main() function, and disallow code outside functions. The main function per default has no parameters and exits with RTS. - Add a for loop for(init;condition;increment) {stmt} -> { init; do { stmt; increment } while (condition) } -- Implement Register Allocation (that utilize real registers - and non-zeropage memory) - Add Fixed Point number types - Add imports - Add structs @@ -13,9 +12,27 @@ Features - Add an export keyword ensuring that a function is generated even if it is never called. Maybe export can be handled by generating a call that can be used as stub. - Add inline ASM (maybe?) - Handle long branches +- Allow complex array expressions in lValues eg. (SCREEN+$100)[idx] + Create a proper main function for the compiler + Add ++/-- incrementing/decrementing operators. +Register Allocation +- Matrix Phi operation (instead of separate statements) +- Safe-Copy based SSA deconstruction + - Optimize phi transitions by ensuring that identical phi-transitions with regards to register allocation are collected into a single transition. + - Optimize by finding optimal sequence for multiple phi assignments in entry-segments. +- Phi Lifting +- Interval Analysis (variable liveness intervals) +- PhiLifting & PhiMemCoalesce (http://compilers.cs.ucla.edu/fernando/projects/soc/reports/short_tech.pdf) +- ComputeLoopNestDepth(b) - Assign loop nesting levels to blocks. +- ComputeRegisterPreference(v), ComputeWeight(v) +- CalculateClobbering(i) + - Maybe support several fragements for the same operation with different cost and clobbering profiles. +- Register types: A, X, Y, ZP, (memory). + - Maybe register preference should also incorporate the types of operations that can be effectively performed with the register? (Maybe based on fragment cost?) +- Implement a register allocation (coloring) algorithm using by liveness intervals, preferences, weights & clobbering information. + - Optimize register allocation by combining with knowledge of ASM program cost (bytes/cycles) and different ASM fragments with different clobbering. + Process/Code Structure Improvement - Make each phase return a separate object graph (allowing for keeeping the history in memory & performing rollbacks) - Refactor Expression Operator Implementation & Evaluation into one class per operator @@ -31,10 +48,8 @@ Testing + Test the ASM program output resulting from compiling specific KC program input. Optimizations -- Optimize phi transitions by ensuring that identical phi-transitions with regards to register allocation are collected into a single transition. -- Optimize register allocation by combining with knowledge of ASM program cost (bytes/cycles) and different ASM fragments with different clobbering. -- Optimize by finding optimal sequence for multiple phi assignments in entry-segments. - Optimize by allowing resequencing of statements and phi assignemtns in a final phase. Perhaps by converting phi statements to "normal" statements and using some optimization step. +- This phase could also help simplify LDA xx, CMP#0, BNE by expressing these in a language where CMP can be eliminated before. Usages - Implement library for memory allocation in main memory diff --git a/src/dk/camelot64/kickc/asm/AsmFragment.java b/src/dk/camelot64/kickc/asm/AsmFragment.java index 4ee24d2fe..2f7131b5f 100644 --- a/src/dk/camelot64/kickc/asm/AsmFragment.java +++ b/src/dk/camelot64/kickc/asm/AsmFragment.java @@ -1,5 +1,6 @@ package dk.camelot64.kickc.asm; +import dk.camelot64.kickc.NumberParser; import dk.camelot64.kickc.asm.parser.Asm6502BaseVisitor; import dk.camelot64.kickc.asm.parser.Asm6502Lexer; import dk.camelot64.kickc.asm.parser.Asm6502Parser; @@ -9,7 +10,6 @@ import org.antlr.v4.runtime.*; import java.io.IOException; import java.io.InputStream; import java.net.URL; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; diff --git a/src/dk/camelot64/kickc/asm/AsmInstuctionSet.java b/src/dk/camelot64/kickc/asm/AsmInstuctionSet.java index 26eb036d3..1c3574832 100644 --- a/src/dk/camelot64/kickc/asm/AsmInstuctionSet.java +++ b/src/dk/camelot64/kickc/asm/AsmInstuctionSet.java @@ -1,6 +1,6 @@ package dk.camelot64.kickc.asm; -import dk.camelot64.kickc.icl.NumberParser; +import dk.camelot64.kickc.NumberParser; import java.util.ArrayList; import java.util.Arrays; diff --git a/src/dk/camelot64/kickc/icl/PointerDereferenceRegisterZpByte.java b/src/dk/camelot64/kickc/asm/PointerDereferenceRegisterZpByte.java similarity index 81% rename from src/dk/camelot64/kickc/icl/PointerDereferenceRegisterZpByte.java rename to src/dk/camelot64/kickc/asm/PointerDereferenceRegisterZpByte.java index 2a9f2c22d..739d685b5 100644 --- a/src/dk/camelot64/kickc/icl/PointerDereferenceRegisterZpByte.java +++ b/src/dk/camelot64/kickc/asm/PointerDereferenceRegisterZpByte.java @@ -1,4 +1,7 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.asm; + +import dk.camelot64.kickc.icl.PointerDereference; +import dk.camelot64.kickc.icl.RegisterAllocation; /** A dereferenced ZP pointer to a byte */ public class PointerDereferenceRegisterZpByte implements PointerDereference { diff --git a/src/dk/camelot64/kickc/icl/ConstantInteger.java b/src/dk/camelot64/kickc/icl/ConstantInteger.java index f0acb48e2..82eb8262d 100644 --- a/src/dk/camelot64/kickc/icl/ConstantInteger.java +++ b/src/dk/camelot64/kickc/icl/ConstantInteger.java @@ -16,7 +16,13 @@ public class ConstantInteger implements Constant { } public SymbolType getType() { - return Pass1TypeInference.inferType(this); + SymbolType type; + if (getNumber() < 256) { + type = SymbolTypeBasic.BYTE; + } else { + type = SymbolTypeBasic.WORD; + } + return type; } @Override diff --git a/src/dk/camelot64/kickc/icl/ControlFlowGraph.java b/src/dk/camelot64/kickc/icl/ControlFlowGraph.java index 2e8e0ae98..177420cce 100644 --- a/src/dk/camelot64/kickc/icl/ControlFlowGraph.java +++ b/src/dk/camelot64/kickc/icl/ControlFlowGraph.java @@ -7,7 +7,6 @@ import java.util.*; public class ControlFlowGraph { private Map blocks; - private ControlFlowBlock firstBlock; private List sequence; diff --git a/src/dk/camelot64/kickc/icl/ParseTreeConstantEvaluator.java b/src/dk/camelot64/kickc/passes/ParseTreeConstantEvaluator.java similarity index 96% rename from src/dk/camelot64/kickc/icl/ParseTreeConstantEvaluator.java rename to src/dk/camelot64/kickc/passes/ParseTreeConstantEvaluator.java index c28e1d366..afe9edd24 100644 --- a/src/dk/camelot64/kickc/icl/ParseTreeConstantEvaluator.java +++ b/src/dk/camelot64/kickc/passes/ParseTreeConstantEvaluator.java @@ -1,5 +1,7 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; +import dk.camelot64.kickc.NumberParser; +import dk.camelot64.kickc.icl.*; import dk.camelot64.kickc.parser.KickCBaseVisitor; import dk.camelot64.kickc.parser.KickCParser; import org.antlr.v4.runtime.tree.TerminalNode; diff --git a/src/dk/camelot64/kickc/icl/Pass1GenerateControlFlowGraph.java b/src/dk/camelot64/kickc/passes/Pass1GenerateControlFlowGraph.java similarity index 98% rename from src/dk/camelot64/kickc/icl/Pass1GenerateControlFlowGraph.java rename to src/dk/camelot64/kickc/passes/Pass1GenerateControlFlowGraph.java index 2380c814c..9c5d95615 100644 --- a/src/dk/camelot64/kickc/icl/Pass1GenerateControlFlowGraph.java +++ b/src/dk/camelot64/kickc/passes/Pass1GenerateControlFlowGraph.java @@ -1,4 +1,6 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.icl.*; import java.util.LinkedHashMap; import java.util.Map; diff --git a/src/dk/camelot64/kickc/icl/Pass1GenerateSingleStaticAssignmentForm.java b/src/dk/camelot64/kickc/passes/Pass1GenerateSingleStaticAssignmentForm.java similarity index 99% rename from src/dk/camelot64/kickc/icl/Pass1GenerateSingleStaticAssignmentForm.java rename to src/dk/camelot64/kickc/passes/Pass1GenerateSingleStaticAssignmentForm.java index 0886949b6..3c1a411eb 100644 --- a/src/dk/camelot64/kickc/icl/Pass1GenerateSingleStaticAssignmentForm.java +++ b/src/dk/camelot64/kickc/passes/Pass1GenerateSingleStaticAssignmentForm.java @@ -1,6 +1,7 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; import dk.camelot64.kickc.CompileLog; +import dk.camelot64.kickc.icl.*; import java.util.LinkedHashMap; import java.util.Map; diff --git a/src/dk/camelot64/kickc/icl/Pass1GenerateStatementSequence.java b/src/dk/camelot64/kickc/passes/Pass1GenerateStatementSequence.java similarity index 99% rename from src/dk/camelot64/kickc/icl/Pass1GenerateStatementSequence.java rename to src/dk/camelot64/kickc/passes/Pass1GenerateStatementSequence.java index 857456f59..0da1ffdc2 100644 --- a/src/dk/camelot64/kickc/icl/Pass1GenerateStatementSequence.java +++ b/src/dk/camelot64/kickc/passes/Pass1GenerateStatementSequence.java @@ -1,6 +1,8 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; import dk.camelot64.kickc.CompileLog; +import dk.camelot64.kickc.NumberParser; +import dk.camelot64.kickc.icl.*; import dk.camelot64.kickc.parser.KickCBaseVisitor; import dk.camelot64.kickc.parser.KickCParser; import org.antlr.v4.runtime.ParserRuleContext; diff --git a/src/dk/camelot64/kickc/icl/Pass1ProcedureCallParameters.java b/src/dk/camelot64/kickc/passes/Pass1ProcedureCallParameters.java similarity index 96% rename from src/dk/camelot64/kickc/icl/Pass1ProcedureCallParameters.java rename to src/dk/camelot64/kickc/passes/Pass1ProcedureCallParameters.java index ab1b5cbf9..2e8a76101 100644 --- a/src/dk/camelot64/kickc/icl/Pass1ProcedureCallParameters.java +++ b/src/dk/camelot64/kickc/passes/Pass1ProcedureCallParameters.java @@ -1,4 +1,6 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.icl.*; import java.util.List; diff --git a/src/dk/camelot64/kickc/icl/Pass1ProcedureCallsReturnValue.java b/src/dk/camelot64/kickc/passes/Pass1ProcedureCallsReturnValue.java similarity index 96% rename from src/dk/camelot64/kickc/icl/Pass1ProcedureCallsReturnValue.java rename to src/dk/camelot64/kickc/passes/Pass1ProcedureCallsReturnValue.java index ee665282b..758bfe0dc 100644 --- a/src/dk/camelot64/kickc/icl/Pass1ProcedureCallsReturnValue.java +++ b/src/dk/camelot64/kickc/passes/Pass1ProcedureCallsReturnValue.java @@ -1,4 +1,6 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.icl.*; /** Pass that modifies a control flow graph to call procedures by passing return value through registers */ public class Pass1ProcedureCallsReturnValue extends ControlFlowGraphCopyVisitor { diff --git a/src/dk/camelot64/kickc/icl/Pass1TypeInference.java b/src/dk/camelot64/kickc/passes/Pass1TypeInference.java similarity index 97% rename from src/dk/camelot64/kickc/icl/Pass1TypeInference.java rename to src/dk/camelot64/kickc/passes/Pass1TypeInference.java index b9baf8bfb..94db2b7f8 100644 --- a/src/dk/camelot64/kickc/icl/Pass1TypeInference.java +++ b/src/dk/camelot64/kickc/passes/Pass1TypeInference.java @@ -1,4 +1,6 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.icl.*; import java.util.Stack; @@ -148,11 +150,7 @@ public class Pass1TypeInference { type = rSymbol.getType(); } else if (rValue instanceof ConstantInteger) { ConstantInteger rInt = (ConstantInteger) rValue; - if (rInt.getNumber() < 256) { - type = SymbolTypeBasic.BYTE; - } else { - type = SymbolTypeBasic.WORD; - } + return rInt.getType(); } else if (rValue instanceof ConstantString) { type = SymbolTypeBasic.STRING; } else if (rValue instanceof ConstantBool) { diff --git a/src/dk/camelot64/kickc/icl/Pass2AliasElimination.java b/src/dk/camelot64/kickc/passes/Pass2AliasElimination.java similarity index 99% rename from src/dk/camelot64/kickc/icl/Pass2AliasElimination.java rename to src/dk/camelot64/kickc/passes/Pass2AliasElimination.java index 1cd0f59d2..11fecbde0 100644 --- a/src/dk/camelot64/kickc/icl/Pass2AliasElimination.java +++ b/src/dk/camelot64/kickc/passes/Pass2AliasElimination.java @@ -1,6 +1,7 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; import dk.camelot64.kickc.CompileLog; +import dk.camelot64.kickc.icl.*; import java.util.*; diff --git a/src/dk/camelot64/kickc/icl/Pass2AssertBlocks.java b/src/dk/camelot64/kickc/passes/Pass2AssertBlocks.java similarity index 97% rename from src/dk/camelot64/kickc/icl/Pass2AssertBlocks.java rename to src/dk/camelot64/kickc/passes/Pass2AssertBlocks.java index c53fb1742..452d59abb 100644 --- a/src/dk/camelot64/kickc/icl/Pass2AssertBlocks.java +++ b/src/dk/camelot64/kickc/passes/Pass2AssertBlocks.java @@ -1,4 +1,6 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.icl.*; /** Assert that all referenced blocks exist in the program */ public class Pass2AssertBlocks extends Pass2SsaAssertion { diff --git a/src/dk/camelot64/kickc/icl/Pass2AssertSymbols.java b/src/dk/camelot64/kickc/passes/Pass2AssertSymbols.java similarity index 98% rename from src/dk/camelot64/kickc/icl/Pass2AssertSymbols.java rename to src/dk/camelot64/kickc/passes/Pass2AssertSymbols.java index bb15762a1..139ad20ba 100644 --- a/src/dk/camelot64/kickc/icl/Pass2AssertSymbols.java +++ b/src/dk/camelot64/kickc/passes/Pass2AssertSymbols.java @@ -1,4 +1,6 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.icl.*; import java.util.HashSet; diff --git a/src/dk/camelot64/kickc/icl/Pass2ConditionalJumpSimplification.java b/src/dk/camelot64/kickc/passes/Pass2ConditionalJumpSimplification.java similarity index 97% rename from src/dk/camelot64/kickc/icl/Pass2ConditionalJumpSimplification.java rename to src/dk/camelot64/kickc/passes/Pass2ConditionalJumpSimplification.java index 36eb08d0b..bbd85fabe 100644 --- a/src/dk/camelot64/kickc/icl/Pass2ConditionalJumpSimplification.java +++ b/src/dk/camelot64/kickc/passes/Pass2ConditionalJumpSimplification.java @@ -1,6 +1,7 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; import dk.camelot64.kickc.CompileLog; +import dk.camelot64.kickc.icl.*; import java.util.ArrayList; import java.util.List; diff --git a/src/dk/camelot64/kickc/icl/Pass2ConstantAdditionElimination.java b/src/dk/camelot64/kickc/passes/Pass2ConstantAdditionElimination.java similarity index 99% rename from src/dk/camelot64/kickc/icl/Pass2ConstantAdditionElimination.java rename to src/dk/camelot64/kickc/passes/Pass2ConstantAdditionElimination.java index be1e86d7b..df15b8587 100644 --- a/src/dk/camelot64/kickc/icl/Pass2ConstantAdditionElimination.java +++ b/src/dk/camelot64/kickc/passes/Pass2ConstantAdditionElimination.java @@ -1,8 +1,8 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; import dk.camelot64.kickc.CompileLog; +import dk.camelot64.kickc.icl.*; -import java.util.HashMap; import java.util.Map; /** diff --git a/src/dk/camelot64/kickc/icl/Pass2ConstantPropagation.java b/src/dk/camelot64/kickc/passes/Pass2ConstantPropagation.java similarity index 99% rename from src/dk/camelot64/kickc/icl/Pass2ConstantPropagation.java rename to src/dk/camelot64/kickc/passes/Pass2ConstantPropagation.java index 0d953ff08..0d247a07f 100644 --- a/src/dk/camelot64/kickc/icl/Pass2ConstantPropagation.java +++ b/src/dk/camelot64/kickc/passes/Pass2ConstantPropagation.java @@ -1,8 +1,8 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; import dk.camelot64.kickc.CompileLog; +import dk.camelot64.kickc.icl.*; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; diff --git a/src/dk/camelot64/kickc/icl/Pass2CullEmptyBlocks.java b/src/dk/camelot64/kickc/passes/Pass2CullEmptyBlocks.java similarity index 97% rename from src/dk/camelot64/kickc/icl/Pass2CullEmptyBlocks.java rename to src/dk/camelot64/kickc/passes/Pass2CullEmptyBlocks.java index afb6045a5..a4735e2b5 100644 --- a/src/dk/camelot64/kickc/icl/Pass2CullEmptyBlocks.java +++ b/src/dk/camelot64/kickc/passes/Pass2CullEmptyBlocks.java @@ -1,6 +1,7 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; import dk.camelot64.kickc.CompileLog; +import dk.camelot64.kickc.icl.*; import java.util.*; diff --git a/src/dk/camelot64/kickc/icl/Pass2RedundantPhiElimination.java b/src/dk/camelot64/kickc/passes/Pass2RedundantPhiElimination.java similarity index 96% rename from src/dk/camelot64/kickc/icl/Pass2RedundantPhiElimination.java rename to src/dk/camelot64/kickc/passes/Pass2RedundantPhiElimination.java index a3234e252..cb0e9eb6b 100644 --- a/src/dk/camelot64/kickc/icl/Pass2RedundantPhiElimination.java +++ b/src/dk/camelot64/kickc/passes/Pass2RedundantPhiElimination.java @@ -1,8 +1,8 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; import dk.camelot64.kickc.CompileLog; +import dk.camelot64.kickc.icl.*; -import java.util.HashMap; import java.util.LinkedHashMap; import java.util.Map; diff --git a/src/dk/camelot64/kickc/icl/Pass2SelfPhiElimination.java b/src/dk/camelot64/kickc/passes/Pass2SelfPhiElimination.java similarity index 84% rename from src/dk/camelot64/kickc/icl/Pass2SelfPhiElimination.java rename to src/dk/camelot64/kickc/passes/Pass2SelfPhiElimination.java index 954b5e4a5..0da7597cf 100644 --- a/src/dk/camelot64/kickc/icl/Pass2SelfPhiElimination.java +++ b/src/dk/camelot64/kickc/passes/Pass2SelfPhiElimination.java @@ -1,6 +1,10 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; import dk.camelot64.kickc.CompileLog; +import dk.camelot64.kickc.icl.ControlFlowGraph; +import dk.camelot64.kickc.icl.ControlFlowGraphBaseVisitor; +import dk.camelot64.kickc.icl.Scope; +import dk.camelot64.kickc.icl.StatementPhi; import java.util.Iterator; diff --git a/src/dk/camelot64/kickc/icl/Pass2SsaAssertion.java b/src/dk/camelot64/kickc/passes/Pass2SsaAssertion.java similarity index 84% rename from src/dk/camelot64/kickc/icl/Pass2SsaAssertion.java rename to src/dk/camelot64/kickc/passes/Pass2SsaAssertion.java index 89fa7534a..aa3b4d706 100644 --- a/src/dk/camelot64/kickc/icl/Pass2SsaAssertion.java +++ b/src/dk/camelot64/kickc/passes/Pass2SsaAssertion.java @@ -1,4 +1,7 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.icl.ControlFlowGraph; +import dk.camelot64.kickc.icl.Scope; /** Assertion checking that a pass 2 representation of the program is consistent */ public abstract class Pass2SsaAssertion { diff --git a/src/dk/camelot64/kickc/icl/Pass2SsaOptimization.java b/src/dk/camelot64/kickc/passes/Pass2SsaOptimization.java similarity index 99% rename from src/dk/camelot64/kickc/icl/Pass2SsaOptimization.java rename to src/dk/camelot64/kickc/passes/Pass2SsaOptimization.java index bcdb67d7b..558671399 100644 --- a/src/dk/camelot64/kickc/icl/Pass2SsaOptimization.java +++ b/src/dk/camelot64/kickc/passes/Pass2SsaOptimization.java @@ -1,6 +1,7 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; import dk.camelot64.kickc.CompileLog; +import dk.camelot64.kickc.icl.*; import java.util.*; diff --git a/src/dk/camelot64/kickc/icl/Pass3BlockSequencePlanner.java b/src/dk/camelot64/kickc/passes/Pass3BlockSequencePlanner.java similarity index 90% rename from src/dk/camelot64/kickc/icl/Pass3BlockSequencePlanner.java rename to src/dk/camelot64/kickc/passes/Pass3BlockSequencePlanner.java index b0cb9edfa..6cfeead82 100644 --- a/src/dk/camelot64/kickc/icl/Pass3BlockSequencePlanner.java +++ b/src/dk/camelot64/kickc/passes/Pass3BlockSequencePlanner.java @@ -1,4 +1,8 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.icl.ControlFlowBlock; +import dk.camelot64.kickc.icl.ControlFlowGraph; +import dk.camelot64.kickc.icl.Scope; import java.util.ArrayList; import java.util.List; diff --git a/src/dk/camelot64/kickc/icl/Pass3CodeGeneration.java b/src/dk/camelot64/kickc/passes/Pass3CodeGeneration.java similarity index 99% rename from src/dk/camelot64/kickc/icl/Pass3CodeGeneration.java rename to src/dk/camelot64/kickc/passes/Pass3CodeGeneration.java index a91e8c73c..25bde1c2a 100644 --- a/src/dk/camelot64/kickc/icl/Pass3CodeGeneration.java +++ b/src/dk/camelot64/kickc/passes/Pass3CodeGeneration.java @@ -1,6 +1,7 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; import dk.camelot64.kickc.asm.*; +import dk.camelot64.kickc.icl.*; import java.util.*; diff --git a/src/dk/camelot64/kickc/icl/Pass3RegisterAllocation.java b/src/dk/camelot64/kickc/passes/Pass3RegisterAllocation.java similarity index 99% rename from src/dk/camelot64/kickc/icl/Pass3RegisterAllocation.java rename to src/dk/camelot64/kickc/passes/Pass3RegisterAllocation.java index c1d8153b7..4ee303d02 100644 --- a/src/dk/camelot64/kickc/icl/Pass3RegisterAllocation.java +++ b/src/dk/camelot64/kickc/passes/Pass3RegisterAllocation.java @@ -1,4 +1,6 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.icl.*; /** * Register Allocation for variables diff --git a/src/dk/camelot64/kickc/icl/Pass4AsmOptimization.java b/src/dk/camelot64/kickc/passes/Pass4AsmOptimization.java similarity index 97% rename from src/dk/camelot64/kickc/icl/Pass4AsmOptimization.java rename to src/dk/camelot64/kickc/passes/Pass4AsmOptimization.java index f914389e9..9ba548d01 100644 --- a/src/dk/camelot64/kickc/icl/Pass4AsmOptimization.java +++ b/src/dk/camelot64/kickc/passes/Pass4AsmOptimization.java @@ -1,4 +1,4 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; import dk.camelot64.kickc.CompileLog; import dk.camelot64.kickc.asm.AsmLine; diff --git a/src/dk/camelot64/kickc/icl/Pass4NextJumpElimination.java b/src/dk/camelot64/kickc/passes/Pass4NextJumpElimination.java similarity index 97% rename from src/dk/camelot64/kickc/icl/Pass4NextJumpElimination.java rename to src/dk/camelot64/kickc/passes/Pass4NextJumpElimination.java index cfa81dbe6..268ee68ec 100644 --- a/src/dk/camelot64/kickc/icl/Pass4NextJumpElimination.java +++ b/src/dk/camelot64/kickc/passes/Pass4NextJumpElimination.java @@ -1,4 +1,4 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; import dk.camelot64.kickc.CompileLog; import dk.camelot64.kickc.asm.AsmInstruction; diff --git a/src/dk/camelot64/kickc/icl/Pass4UnnecesaryLoadElimination.java b/src/dk/camelot64/kickc/passes/Pass4UnnecesaryLoadElimination.java similarity index 99% rename from src/dk/camelot64/kickc/icl/Pass4UnnecesaryLoadElimination.java rename to src/dk/camelot64/kickc/passes/Pass4UnnecesaryLoadElimination.java index f228a508c..1f34828a6 100644 --- a/src/dk/camelot64/kickc/icl/Pass4UnnecesaryLoadElimination.java +++ b/src/dk/camelot64/kickc/passes/Pass4UnnecesaryLoadElimination.java @@ -1,4 +1,4 @@ -package dk.camelot64.kickc.icl; +package dk.camelot64.kickc.passes; import dk.camelot64.kickc.CompileLog; import dk.camelot64.kickc.asm.*;