From 126c8f6e0d24b29bd3899b9f7b4db5608124b98c Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Wed, 22 Aug 2018 22:23:42 +0200 Subject: [PATCH] Added detection of non-constant loops. --- .../java/dk/camelot64/kickc/CompileLog.java | 9 + .../java/dk/camelot64/kickc/Compiler.java | 25 +- .../camelot64/kickc/model/NaturalLoopSet.java | 4 +- .../statements/StatementConditionalJump.java | 11 + .../kickc/passes/Pass2LoopUnroll.java | 9 +- .../passes/Pass2LoopUnrollAssertComplete.java | 33 ++ ...er.java => PassNBlockSequencePlanner.java} | 24 +- ...ysis.java => PassNDominatorsAnalysis.java} | 4 +- ...opAnalysis.java => PassNLoopAnalysis.java} | 4 +- ...entInfos.java => PassNStatementInfos.java} | 4 +- .../dk/camelot64/kickc/test/TestPrograms.java | 8 +- .../test/ref/array-length-symbolic-min.log | 21 +- .../kickc/test/ref/array-length-symbolic.log | 25 +- .../camelot64/kickc/test/ref/arrays-init.log | 17 +- .../camelot64/kickc/test/ref/asm-clobber.log | 23 +- .../kickc/test/ref/bitmap-bresenham.log | 47 ++- .../kickc/test/ref/bitmap-plotter.log | 35 +- .../camelot64/kickc/test/ref/bool-const.log | 41 ++- .../kickc/test/ref/bool-function.log | 19 +- .../dk/camelot64/kickc/test/ref/bool-ifs.log | 33 +- .../camelot64/kickc/test/ref/bool-pointer.log | 19 +- .../dk/camelot64/kickc/test/ref/bool-vars.log | 33 +- .../dk/camelot64/kickc/test/ref/bresenham.log | 27 +- .../camelot64/kickc/test/ref/bresenhamarr.log | 25 +- .../kickc/test/ref/c64dtv-8bppcharstretch.log | 43 ++- .../test/ref/c64dtv-8bppchunkystretch.log | 37 +- .../kickc/test/ref/c64dtv-blittermin.log | 25 +- .../camelot64/kickc/test/ref/c64dtv-color.log | 21 +- .../kickc/test/ref/c64dtv-gfxexplorer.log | 91 +++-- .../kickc/test/ref/c64dtv-gfxmodes.log | 93 +++-- .../kickc/test/ref/callconstparam.log | 17 +- .../camelot64/kickc/test/ref/cast-deref.log | 19 +- .../test/ref/cast-precedence-problem.log | 25 +- .../dk/camelot64/kickc/test/ref/casting.log | 23 +- .../kickc/test/ref/chained-assignment.log | 13 +- .../kickc/test/ref/chargen-analysis.log | 45 ++- .../dk/camelot64/kickc/test/ref/chargen.log | 27 +- .../camelot64/kickc/test/ref/chessboard.log | 17 +- .../kickc/test/ref/compound-assignment.log | 47 ++- .../camelot64/kickc/test/ref/concat-char.log | 21 +- .../kickc/test/ref/const-condition.log | 15 +- .../kickc/test/ref/const-identification.log | 29 +- .../kickc/test/ref/const-mult-div.log | 17 +- .../camelot64/kickc/test/ref/const-param.log | 17 +- .../kickc/test/ref/const-pointer.log | 19 +- .../kickc/test/ref/const-word-pointer.log | 11 +- .../camelot64/kickc/test/ref/constabsmin.log | 7 +- .../kickc/test/ref/constant-string-concat.log | 25 +- .../camelot64/kickc/test/ref/constantmin.log | 19 +- .../dk/camelot64/kickc/test/ref/constants.log | 33 +- .../kickc/test/ref/double-assignment.log | 11 +- .../kickc/test/ref/double-import.log | 7 +- .../dk/camelot64/kickc/test/ref/dword.log | 17 +- .../kickc/test/ref/emptyblock-error.log | 23 +- .../dk/camelot64/kickc/test/ref/fibmem.log | 15 +- .../camelot64/kickc/test/ref/fillscreen.log | 19 +- .../camelot64/kickc/test/ref/flipper-rex2.log | 41 ++- .../kickc/test/ref/forclassicmin.log | 17 +- .../kickc/test/ref/forincrementassign.log | 17 +- .../kickc/test/ref/forrangedwords.log | 21 +- .../camelot64/kickc/test/ref/forrangemin.log | 19 +- .../kickc/test/ref/forrangesymbolic.log | 15 +- .../kickc/test/ref/fragment-synth.log | 17 +- .../dk/camelot64/kickc/test/ref/halfscii.log | 23 +- .../camelot64/kickc/test/ref/helloworld.log | 17 +- .../camelot64/kickc/test/ref/helloworld2.log | 21 +- .../dk/camelot64/kickc/test/ref/ifmin.log | 21 +- .../dk/camelot64/kickc/test/ref/immzero.log | 13 +- .../dk/camelot64/kickc/test/ref/importing.log | 7 +- .../dk/camelot64/kickc/test/ref/incd020.log | 17 +- .../kickc/test/ref/incrementinarray.log | 21 +- .../camelot64/kickc/test/ref/inline-asm.log | 5 +- .../kickc/test/ref/inline-assignment.log | 15 +- .../kickc/test/ref/inline-function-if.log | 35 +- .../kickc/test/ref/inline-function-level2.log | 25 +- .../kickc/test/ref/inline-function-min.log | 17 +- .../kickc/test/ref/inline-function-print.log | 21 +- .../kickc/test/ref/inline-function.log | 39 +-- .../kickc/test/ref/inline-string-2.log | 17 +- .../kickc/test/ref/inline-string-3.log | 17 +- .../kickc/test/ref/inline-string.log | 17 +- .../camelot64/kickc/test/ref/inline-word.log | 29 +- .../kickc/test/ref/inlinearrayproblem.log | 19 +- .../kickc/test/ref/inmem-const-array.log | 23 +- .../camelot64/kickc/test/ref/inmemarray.log | 21 +- .../camelot64/kickc/test/ref/inmemstring.log | 23 +- .../test/ref/irq-hardware-clobber-jsr.log | 15 +- .../kickc/test/ref/irq-hardware-clobber.log | 15 +- .../camelot64/kickc/test/ref/irq-hardware.log | 15 +- .../kickc/test/ref/irq-hyperscreen.log | 11 +- .../camelot64/kickc/test/ref/irq-kernel.log | 9 +- .../camelot64/kickc/test/ref/irq-raster.log | 9 +- .../dk/camelot64/kickc/test/ref/iterarray.log | 17 +- .../kickc/test/ref/keyboard-glitch.log | 27 +- .../dk/camelot64/kickc/test/ref/line-anim.log | 57 ++-- .../dk/camelot64/kickc/test/ref/linegen.log | 39 +-- .../dk/camelot64/kickc/test/ref/literals.log | 25 +- .../kickc/test/ref/liverange-call-problem.log | 5 +- .../dk/camelot64/kickc/test/ref/liverange.log | 15 +- .../camelot64/kickc/test/ref/local-string.log | 17 +- .../dk/camelot64/kickc/test/ref/longjump.log | 15 +- .../dk/camelot64/kickc/test/ref/longjump2.log | 15 +- .../camelot64/kickc/test/ref/loop-problem.log | 19 +- .../kickc/test/ref/loop-problem2.log | 19 +- .../dk/camelot64/kickc/test/ref/loop100.log | 11 +- .../dk/camelot64/kickc/test/ref/loopmin.log | 17 +- .../dk/camelot64/kickc/test/ref/loopnest.log | 17 +- .../dk/camelot64/kickc/test/ref/loopnest2.log | 21 +- .../dk/camelot64/kickc/test/ref/loopnest3.log | 19 +- .../dk/camelot64/kickc/test/ref/loopsplit.log | 13 +- .../kickc/test/ref/mem-alignment.log | 13 +- .../dk/camelot64/kickc/test/ref/modglobal.log | 15 +- .../camelot64/kickc/test/ref/modglobalmin.log | 15 +- .../kickc/test/ref/norom-charset.log | 33 +- .../kickc/test/ref/operator-lohi-problem.log | 17 +- .../kickc/test/ref/overlap-allocation-2.log | 21 +- .../kickc/test/ref/overlap-allocation.log | 21 +- .../kickc/test/ref/print-problem.log | 15 +- .../dk/camelot64/kickc/test/ref/printmsg.log | 21 +- .../camelot64/kickc/test/ref/ptr-complex.log | 19 +- .../dk/camelot64/kickc/test/ref/ptrtest.log | 19 +- .../camelot64/kickc/test/ref/ptrtestmin.log | 13 +- .../camelot64/kickc/test/ref/raster-bars.log | 19 +- .../kickc/test/ref/scroll-clobber.log | 27 +- .../dk/camelot64/kickc/test/ref/scroll.log | 43 ++- .../dk/camelot64/kickc/test/ref/scrollbig.log | 43 ++- .../camelot64/kickc/test/ref/scrolllogo.log | 287 +++++++--------- .../dk/camelot64/kickc/test/ref/showlogo.log | 35 +- .../camelot64/kickc/test/ref/signed-bytes.log | 19 +- .../camelot64/kickc/test/ref/signed-words.log | 31 +- .../kickc/test/ref/simple-multiplexer.log | 51 ++- .../camelot64/kickc/test/ref/sine-plotter.log | 49 ++- .../camelot64/kickc/test/ref/sinus-basic.log | 27 +- .../kickc/test/ref/sinus-sprites.log | 55 ++- .../camelot64/kickc/test/ref/sinusgen16.log | 37 +- .../camelot64/kickc/test/ref/sinusgen16b.log | 43 ++- .../dk/camelot64/kickc/test/ref/sinusgen8.log | 29 +- .../camelot64/kickc/test/ref/sinusgen8b.log | 37 +- .../kickc/test/ref/sinusgenscale8.log | 37 +- .../dk/camelot64/kickc/test/ref/summin.log | 13 +- .../kickc/test/ref/test-address-of-param.log | 13 +- .../kickc/test/ref/test-address-of.log | 17 +- .../kickc/test/ref/test-comparisons.log | 29 +- .../kickc/test/ref/test-division.log | 41 ++- .../test/ref/test-interrupt-volatile.log | 17 +- .../kickc/test/ref/test-interrupt.log | 15 +- .../dk/camelot64/kickc/test/ref/test-kasm.log | 11 +- .../kickc/test/ref/test-keyboard-space.log | 29 +- .../kickc/test/ref/test-keyboard.log | 29 +- .../kickc/test/ref/test-lohiconst.log | 15 +- .../camelot64/kickc/test/ref/test-lowhigh.log | 19 +- .../kickc/test/ref/test-multiply-16bit.log | 31 +- .../kickc/test/ref/test-multiply-8bit.log | 35 +- .../kickc/test/ref/true-inline-words.log | 27 +- .../kickc/test/ref/unroll-loop-modifyvar.log | 146 ++++---- .../test/ref/unroll-screenfill-for-double.log | 253 +++++++------- .../kickc/test/ref/unroll-screenfill-for.log | 254 +++++++------- .../test/ref/unroll-screenfill-while.log | 319 ++++++++---------- .../kickc/test/ref/unused-method.log | 9 +- .../camelot64/kickc/test/ref/unused-vars.log | 25 +- .../kickc/test/ref/unusedblockproblem.log | 23 +- .../dk/camelot64/kickc/test/ref/useglobal.log | 11 +- .../kickc/test/ref/var-forward-problem.log | 7 +- .../camelot64/kickc/test/ref/var-register.log | 21 +- .../dk/camelot64/kickc/test/ref/voronoi.log | 35 +- .../dk/camelot64/kickc/test/ref/wordexpr.log | 13 +- .../camelot64/kickc/test/ref/zpparammin.log | 19 +- .../dk/camelot64/kickc/test/ref/zpptr.log | 25 +- 168 files changed, 2239 insertions(+), 2753 deletions(-) create mode 100644 src/main/java/dk/camelot64/kickc/passes/Pass2LoopUnrollAssertComplete.java rename src/main/java/dk/camelot64/kickc/passes/{Pass3BlockSequencePlanner.java => PassNBlockSequencePlanner.java} (81%) rename src/main/java/dk/camelot64/kickc/passes/{Pass2DominatorsAnalysis.java => PassNDominatorsAnalysis.java} (96%) rename src/main/java/dk/camelot64/kickc/passes/{Pass2LoopAnalysis.java => PassNLoopAnalysis.java} (97%) rename src/main/java/dk/camelot64/kickc/passes/{Pass3StatementInfos.java => PassNStatementInfos.java} (90%) diff --git a/src/main/java/dk/camelot64/kickc/CompileLog.java b/src/main/java/dk/camelot64/kickc/CompileLog.java index fe1e7c22a..001e84bd7 100644 --- a/src/main/java/dk/camelot64/kickc/CompileLog.java +++ b/src/main/java/dk/camelot64/kickc/CompileLog.java @@ -47,6 +47,11 @@ public class CompileLog { */ private boolean verboseNonOptimization = false; + /** + * Should sequence planning be verbose. + */ + private boolean verboseSequencePlan = false; + /** * Should the log be output to System.out while being built @@ -121,6 +126,10 @@ public class CompileLog { return verboseNonOptimization; } + public boolean isVerboseSequencePlan() { + return verboseSequencePlan; + } + public boolean isSysOut() { return sysOut; } diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index 67beaae81..70047a85f 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -212,9 +212,9 @@ public class Compiler { List loopUnrolling = new ArrayList<>(); loopUnrolling.add(new PassNStatementIndices(program)); loopUnrolling.add(new PassNVariableReferenceInfos(program)); - loopUnrolling.add(new Pass3StatementInfos(program)); - loopUnrolling.add(new Pass2DominatorsAnalysis(program)); - loopUnrolling.add(new Pass2LoopAnalysis(program)); + loopUnrolling.add(new PassNStatementInfos(program)); + loopUnrolling.add(new PassNDominatorsAnalysis(program)); + loopUnrolling.add(new PassNLoopAnalysis(program)); loopUnrolling.add(new Pass2LoopUnrollPhiPrepare(program)); loopUnrolling.add(new Pass2LoopUnroll(program)); @@ -227,7 +227,8 @@ public class Compiler { getLog().append(program.getGraph().toString(program)); } pass2Optimize(); - new Pass3BlockSequencePlanner(program).plan(); + new Pass2LoopUnrollAssertComplete(program).step(); + new PassNBlockSequencePlanner(program).step(); } } while(unrolled); @@ -261,7 +262,7 @@ public class Compiler { while(stepOptimized) { stepOptimized = optimization.step(); if(stepOptimized) { - getLog().append("Succesful SSA optimization " + optimization.getClass().getSimpleName() + ""); + getLog().append("Successful SSA optimization " + optimization.getClass().getSimpleName() + ""); ssaOptimized = true; if(getLog().isVerboseSSAOptimize()) { getLog().append("CONTROL FLOW GRAPH"); @@ -302,10 +303,10 @@ public class Compiler { new Pass3AssertConstants(program).check(); new Pass3AssertArrayLengths(program).check(); new Pass3AssertNoMulDivMod(program).check(); - new Pass3BlockSequencePlanner(program).plan(); + new PassNBlockSequencePlanner(program).step(); // Phi lifting ensures that all variables in phi-blocks are in different live range equivalence classes new Pass3PhiLifting(program).perform(); - new Pass3BlockSequencePlanner(program).plan(); + new PassNBlockSequencePlanner(program).step(); //getLog().append("CONTROL FLOW GRAPH - PHI LIFTED"); //getLog().append(program.getGraph().toString(program)); pass2AssertSSA(); @@ -318,7 +319,7 @@ public class Compiler { //getLog().setVerboseLiveRanges(true); - new Pass3StatementInfos(program).execute(); + new PassNStatementInfos(program).execute(); new PassNVariableReferenceInfos(program).execute(); new Pass3LiveRangesAnalysis(program).findLiveRanges(); //getLog().append("CONTROL FLOW GRAPH - LIVE RANGES FOUND"); @@ -330,11 +331,11 @@ public class Compiler { // Phi mem coalesce removes as many variables introduced by phi lifting as possible - as long as their live ranges do not overlap new Pass3PhiMemCoalesce(program).step(); new Pass2CullEmptyBlocks(program).step(); - new Pass3BlockSequencePlanner(program).plan(); + new PassNBlockSequencePlanner(program).step(); new Pass3AddNopBeforeCallOns(program).generate(); new PassNStatementIndices(program).execute(); new Pass3CallGraphAnalysis(program).findCallGraph(); - new Pass3StatementInfos(program).execute(); + new PassNStatementInfos(program).execute(); new PassNVariableReferenceInfos(program).execute(); new Pass3SymbolInfos(program).generateSymbolInfos(); new Pass3LiveRangesAnalysis(program).findLiveRanges(); @@ -353,7 +354,7 @@ public class Compiler { if(getLog().isVerboseLoopAnalysis()) { getLog().append("DOMINATORS"); } - new Pass2DominatorsAnalysis(program).step(); + new PassNDominatorsAnalysis(program).step(); if(getLog().isVerboseLoopAnalysis()) { getLog().append(program.getDominators().toString()); } @@ -361,7 +362,7 @@ public class Compiler { if(getLog().isVerboseLoopAnalysis()) { getLog().append("NATURAL LOOPS"); } - new Pass2LoopAnalysis(program).step(); + new PassNLoopAnalysis(program).step(); if(getLog().isVerboseLoopAnalysis()) { getLog().append(program.getLoopSet().toString()); } diff --git a/src/main/java/dk/camelot64/kickc/model/NaturalLoopSet.java b/src/main/java/dk/camelot64/kickc/model/NaturalLoopSet.java index 1a4d76b0b..be00f6b70 100644 --- a/src/main/java/dk/camelot64/kickc/model/NaturalLoopSet.java +++ b/src/main/java/dk/camelot64/kickc/model/NaturalLoopSet.java @@ -1,14 +1,14 @@ package dk.camelot64.kickc.model; import dk.camelot64.kickc.model.values.LabelRef; -import dk.camelot64.kickc.passes.Pass2LoopAnalysis; +import dk.camelot64.kickc.passes.PassNLoopAnalysis; import java.util.*; /** * A set of natural loops in a control flow graph. *

For definitions and more see http://www.cs.colostate.edu/~cs553/ClassNotes/lecture09-control-dominators.ppt.pdf - *

Created by {@link Pass2LoopAnalysis} + *

Created by {@link PassNLoopAnalysis} */ public class NaturalLoopSet { diff --git a/src/main/java/dk/camelot64/kickc/model/statements/StatementConditionalJump.java b/src/main/java/dk/camelot64/kickc/model/statements/StatementConditionalJump.java index deff022f3..52111290e 100644 --- a/src/main/java/dk/camelot64/kickc/model/statements/StatementConditionalJump.java +++ b/src/main/java/dk/camelot64/kickc/model/statements/StatementConditionalJump.java @@ -18,7 +18,10 @@ public class StatementConditionalJump extends StatementBase { private Operator operator; private RValue rValue2; private LabelRef destination; + /** This conditional is the primary back edge in a loop declared to be unrolled. */ private boolean declaredUnroll; + /** This conditional has been unrolled. Constant propagation must ensure the conditional is deleted - or the compilation will fail. */ + private boolean wasUnrolled; public StatementConditionalJump(RValue condition, LabelRef destination,StatementSource source) { super(null, source); @@ -81,6 +84,14 @@ public class StatementConditionalJump extends StatementBase { this.declaredUnroll = declaredUnroll; } + public boolean isWasUnrolled() { + return wasUnrolled; + } + + public void setWasUnrolled(boolean wasUnrolled) { + this.wasUnrolled = wasUnrolled; + } + @Override public String toString(Program program, boolean aliveInfo) { StringBuilder out = new StringBuilder(); diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2LoopUnroll.java b/src/main/java/dk/camelot64/kickc/passes/Pass2LoopUnroll.java index 68fd8d858..80de7d4d5 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass2LoopUnroll.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass2LoopUnroll.java @@ -82,9 +82,14 @@ public class Pass2LoopUnroll extends Pass2SsaOptimization { } } else if(statement instanceof StatementConditionalJump) { // - Remove the "unroll" directive on the condition in the old loop (as it is already unrolled). - // TODO: Only remove "unroll" from the conditional that represents the loop we are unrolling + // MAYBE: Only remove "unroll" from the conditional that represents the loop we are unrolling StatementConditionalJump conditionalJump = (StatementConditionalJump) statement; - conditionalJump.setDeclaredUnroll(false); + if(conditionalJump.isDeclaredUnroll()) { + // Mark is unrolled - to ensure it is removed before unrolling more + conditionalJump.setWasUnrolled(true); + // Remove unroll declaration - now only the "rest" of the loop needs unrolling + conditionalJump.setDeclaredUnroll(false); + } // Fix the destination (if needed)! LabelRef fixedDestination = fixSuccessor(conditionalJump.getDestination(), blockToNewBlock, unrollLoop); conditionalJump.setDestination(fixedDestination); diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2LoopUnrollAssertComplete.java b/src/main/java/dk/camelot64/kickc/passes/Pass2LoopUnrollAssertComplete.java new file mode 100644 index 000000000..6fc496e75 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/passes/Pass2LoopUnrollAssertComplete.java @@ -0,0 +1,33 @@ +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.model.CompileError; +import dk.camelot64.kickc.model.ControlFlowBlock; +import dk.camelot64.kickc.model.Program; +import dk.camelot64.kickc.model.statements.Statement; +import dk.camelot64.kickc.model.statements.StatementConditionalJump; + +/** + * Check that the unrolling of a loop was sucessfully completed. + * This is done by checking that no conditional jumps exist marked as wasUnrolled. + * Since unrolling requires the loop iteration count to be constant the conditionals must always be resolved to true or false and thus deleted or changed to jumps. + */ +public class Pass2LoopUnrollAssertComplete extends Pass2SsaOptimization { + + public Pass2LoopUnrollAssertComplete(Program program) { + super(program); + } + + @Override + public boolean step() { + for(ControlFlowBlock block : getGraph().getAllBlocks()) { + for(Statement statement : block.getStatements()) { + if(statement instanceof StatementConditionalJump) { + if(((StatementConditionalJump) statement).isWasUnrolled()) { + throw new CompileError("Loop cannot be unrolled. Condition not resolvable to a constant true/false. "+statement.toString(getProgram(), false)); + } + } + } + } + return false; + } +} diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass3BlockSequencePlanner.java b/src/main/java/dk/camelot64/kickc/passes/PassNBlockSequencePlanner.java similarity index 81% rename from src/main/java/dk/camelot64/kickc/passes/Pass3BlockSequencePlanner.java rename to src/main/java/dk/camelot64/kickc/passes/PassNBlockSequencePlanner.java index 9a2626c25..810de150a 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass3BlockSequencePlanner.java +++ b/src/main/java/dk/camelot64/kickc/passes/PassNBlockSequencePlanner.java @@ -8,15 +8,16 @@ import dk.camelot64.kickc.model.values.LabelRef; import java.util.*; /** Plan the optimal sequence for the blocks of the control flow graph */ -public class Pass3BlockSequencePlanner extends Pass2Base { +public class PassNBlockSequencePlanner extends Pass2SsaOptimization { Deque todoScopes = new ArrayDeque<>(); - public Pass3BlockSequencePlanner(Program program) { + public PassNBlockSequencePlanner(Program program) { super(program); } - public void plan() { + @Override + public boolean step() { List entryPointBlocks = getGraph().getEntryPointBlocks(getProgram()); @@ -48,18 +49,23 @@ public class Pass3BlockSequencePlanner extends Pass2Base { } getGraph().setSequence(sequence); - StringBuilder entry = new StringBuilder(); - entry.append("Block Sequence Planned "); - for(LabelRef labelRef : sequence) { - entry.append(labelRef.getFullName() + " "); + if(getLog().isVerboseSequencePlan()) { + StringBuilder entry = new StringBuilder(); + entry.append("Block Sequence Planned "); + for(LabelRef labelRef : sequence) { + entry.append(labelRef.getFullName() + " "); + } + getLog().append(entry.toString()); } - getLog().append(entry.toString()); + + return false; + } void pushTodo(ControlFlowBlock block) { LabelRef blockRef = block.getLabel(); - Scope blockScope = getSymbols().getSymbol(blockRef).getScope(); + Scope blockScope = getScope().getSymbol(blockRef).getScope(); for(ScopeTodo todoScope : todoScopes) { if(todoScope.scope.equals(blockScope)) { todoScope.addTodo(block); diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2DominatorsAnalysis.java b/src/main/java/dk/camelot64/kickc/passes/PassNDominatorsAnalysis.java similarity index 96% rename from src/main/java/dk/camelot64/kickc/passes/Pass2DominatorsAnalysis.java rename to src/main/java/dk/camelot64/kickc/passes/PassNDominatorsAnalysis.java index 5a9a9760a..91b4e6593 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass2DominatorsAnalysis.java +++ b/src/main/java/dk/camelot64/kickc/passes/PassNDominatorsAnalysis.java @@ -7,9 +7,9 @@ import java.util.ArrayList; import java.util.List; /** Finds the dominators for the control flow graph. */ -public class Pass2DominatorsAnalysis extends Pass2SsaOptimization { +public class PassNDominatorsAnalysis extends Pass2SsaOptimization { - public Pass2DominatorsAnalysis(Program program) { + public PassNDominatorsAnalysis(Program program) { super(program); } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2LoopAnalysis.java b/src/main/java/dk/camelot64/kickc/passes/PassNLoopAnalysis.java similarity index 97% rename from src/main/java/dk/camelot64/kickc/passes/Pass2LoopAnalysis.java rename to src/main/java/dk/camelot64/kickc/passes/PassNLoopAnalysis.java index 2c60f4dc5..41734c359 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass2LoopAnalysis.java +++ b/src/main/java/dk/camelot64/kickc/passes/PassNLoopAnalysis.java @@ -11,9 +11,9 @@ import java.util.*; *

* See http://www.cs.colostate.edu/~cs553/ClassNotes/lecture09-control-dominators.ppt.pdf */ -public class Pass2LoopAnalysis extends Pass2SsaOptimization { +public class PassNLoopAnalysis extends Pass2SsaOptimization { - public Pass2LoopAnalysis(Program program) { + public PassNLoopAnalysis(Program program) { super(program); } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass3StatementInfos.java b/src/main/java/dk/camelot64/kickc/passes/PassNStatementInfos.java similarity index 90% rename from src/main/java/dk/camelot64/kickc/passes/Pass3StatementInfos.java rename to src/main/java/dk/camelot64/kickc/passes/PassNStatementInfos.java index 7bf99e7dd..e9e115400 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass3StatementInfos.java +++ b/src/main/java/dk/camelot64/kickc/passes/PassNStatementInfos.java @@ -12,9 +12,9 @@ import java.util.LinkedHashMap; /** * Identify the block for each statement. */ -public class Pass3StatementInfos extends Pass2SsaOptimization { +public class PassNStatementInfos extends Pass2SsaOptimization { - public Pass3StatementInfos(Program program) { + public PassNStatementInfos(Program program) { super(program); } diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 38beb96c9..d6da2a410 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -46,10 +46,10 @@ public class TestPrograms { AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, false, false); } - //@Test - //public void testUnrollInfinite() throws IOException, URISyntaxException { - // compileAndCompare("unroll-infinite"); - //} + @Test + public void testUnrollInfinite() throws IOException, URISyntaxException { + assertError("unroll-infinite", "Loop cannot be unrolled."); + } @Test public void testUnusedBlockProblem() throws IOException, URISyntaxException { diff --git a/src/test/java/dk/camelot64/kickc/test/ref/array-length-symbolic-min.log b/src/test/java/dk/camelot64/kickc/test/ref/array-length-symbolic-min.log index c40f444a3..5896f1797 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/array-length-symbolic-min.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/array-length-symbolic-min.log @@ -113,35 +113,33 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) SZ#0 = (byte) SZ#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::cur_item#1 Self Phi Eliminated (byte) SZ#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) SZ#2 (byte) SZ#0 Redundant Phi (byte*) main::cur_item#1 (byte*) main::cur_item#0 Redundant Phi (byte) SZ#1 (byte) SZ#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$0 if((byte) main::sub#1!=rangelast(0,SZ#0)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) SZ#0 = 15 Constant (const byte) main::sub#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte[SZ#0]) items#0 = { fill( SZ#0, 0) } -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::cur_item#0 = items#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::sub#1 ← ++ main::sub#2 to ++ Resolved ranged comparison value if(main::sub#1!=rangelast(0,SZ#0)) goto main::@1 to (const byte) SZ#0+(byte/signed byte/word/signed word/dword/signed dword) 1 OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::sub#0 Constant inlined main::sub#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::cur_item#0 = (const byte[SZ#0]) items#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -155,7 +153,6 @@ Created 1 initial phi equivalence classes Coalesced [10] main::sub#3 ← main::sub#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/array-length-symbolic.log b/src/test/java/dk/camelot64/kickc/test/ref/array-length-symbolic.log index 841a8cd03..5fe3a2325 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/array-length-symbolic.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/array-length-symbolic.log @@ -190,44 +190,44 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) main::cur_item#2 = (byte*) main::cur_item#3 Alias (byte) ITEM_SIZE#2 = (byte) ITEM_SIZE#4 Alias (byte) main::item#2 = (byte) main::item#3 Alias (byte) ITEM_COUNT#0 = (byte) ITEM_COUNT#2 Alias (byte) ITEM_SIZE#0 = (byte) ITEM_SIZE#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) main::item#2 Self Phi Eliminated (byte*) main::cur_item#2 Self Phi Eliminated (byte) ITEM_SIZE#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) ITEM_COUNT#1 (byte) ITEM_COUNT#0 Redundant Phi (byte) ITEM_SIZE#3 (byte) ITEM_SIZE#0 Redundant Phi (byte) main::item#2 (byte) main::item#4 Redundant Phi (byte*) main::cur_item#2 (byte*) main::cur_item#4 Redundant Phi (byte) ITEM_SIZE#2 (byte) ITEM_SIZE#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$4 if((byte) main::sub#1!=rangelast(0,main::$1)) goto main::@2 Simple Condition (bool~) main::$5 if((byte) main::item#1!=rangelast(0,main::$0)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) ITEM_COUNT#0 = 3 Constant (const byte) ITEM_SIZE#0 = 5 Constant (const byte[$0]) items#0 = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } Constant (const byte) main::item#0 = 0 Constant (const byte) main::sub#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) $0 = ITEM_COUNT#0*ITEM_SIZE#0 Constant (const byte*) main::cur_item#0 = items#0 Constant (const byte/signed word/word/dword/signed dword) main::$0 = ITEM_COUNT#0-1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::item#1 ← ++ main::item#4 to ++ Resolved ranged comparison value if(main::item#1!=rangelast(0,main::$0)) goto main::@1 to (const byte/signed word/word/dword/signed dword) main::$0+(byte/signed byte/word/signed word/dword/signed dword) 1 Self Phi Eliminated (byte) ITEM_SIZE#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) ITEM_SIZE#1 (const byte) ITEM_SIZE#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$1 = ITEM_SIZE#0-1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::sub#1 ← ++ main::sub#2 to ++ Resolved ranged comparison value if(main::sub#1!=rangelast(0,main::$1)) goto main::@2 to (const byte/signed word/word/dword/signed dword) main::$1+(byte/signed byte/word/signed word/dword/signed dword) 1 OPTIMIZING CONTROL FLOW GRAPH @@ -240,11 +240,9 @@ Constant inlined $0 = (const byte) ITEM_COUNT#0*(const byte) ITEM_SIZE#0 Constant inlined main::cur_item#0 = (const byte[ITEM_COUNT#0*ITEM_SIZE#0]) items#0 Constant inlined main::$0 = (const byte) ITEM_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined main::item#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@5(between main::@3 and main::@1) Added new block during phi lifting main::@6(between main::@2 and main::@2) -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@return main::@5 main::@6 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -266,7 +264,6 @@ Coalesced [18] main::sub#3 ← main::sub#1 Coalesced down to 3 phi equivalence classes Culled Empty Block (label) main::@5 Culled Empty Block (label) main::@6 -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/arrays-init.log b/src/test/java/dk/camelot64/kickc/test/ref/arrays-init.log index 5e9dba454..15284a913 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/arrays-init.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/arrays-init.log @@ -105,33 +105,31 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) SCREEN#0 = (byte*) SCREEN#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte[3]) b#0 = { fill( 3, 0) } Constant (const byte[]) c#0 = { 'c', 'm', 'l' } Constant (const byte[]) d#0 = $0 Constant (const byte*) SCREEN#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$0 = SCREEN#0+1 Constant (const byte*) main::$1 = SCREEN#0+2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(b#0+0) Consolidated array index constant in *(b#0+0) Consolidated array index constant in *(c#0+1) Consolidated array index constant in *(d#0+2) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Constant inlined main::$1 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 2 Constant inlined $0 = (const byte[]) d#0 Constant inlined main::$0 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero b#0+0 Simplifying constant plus zero b#0+0 -Block Sequence Planned @begin @1 @end main main::@return -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -141,7 +139,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/asm-clobber.log b/src/test/java/dk/camelot64/kickc/test/ref/asm-clobber.log index 6a883a944..d36553447 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/asm-clobber.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/asm-clobber.log @@ -221,35 +221,35 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte*) SCREEN#1 = (byte*) SCREEN#6 (byte*) SCREEN#7 Alias (byte) main::k#2 = (byte) main::k#3 Alias (byte*) SCREEN#2 = (byte*) SCREEN#8 Alias (byte*) SCREEN#0 = (byte*) SCREEN#9 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#1 Self Phi Eliminated (byte) main::i#2 Self Phi Eliminated (byte*) SCREEN#2 Self Phi Eliminated (byte) main::k#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#5 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#3 Redundant Phi (byte) main::i#2 (byte) main::i#4 Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#4 Redundant Phi (byte) main::k#2 (byte) main::k#4 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$0 if((byte) main::j#1!=rangelast(0,100)) goto main::@2 Simple Condition (bool~) main::$1 if((byte) main::i#1!=rangelast(0,100)) goto main::@1 Simple Condition (bool~) main::$2 if((byte) main::l#1!=rangelast(0,100)) goto main::@4 Simple Condition (bool~) main::$3 if((byte) main::k#1!=rangelast(0,100)) goto main::@3 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) main::i#0 = 0 Constant (const byte) main::j#0 = 0 Constant (const byte) main::k#0 = 0 Constant (const byte) main::l#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::j#1 ← ++ main::j#2 to ++ Resolved ranged comparison value if(main::j#1!=rangelast(0,100)) goto main::@2 to (byte/signed byte/word/signed word/dword/signed dword) 101 Resolved ranged next value main::i#1 ← ++ main::i#4 to ++ @@ -259,13 +259,13 @@ Resolved ranged comparison value if(main::l#1!=rangelast(0,100)) goto main::@4 t Resolved ranged next value main::k#1 ← ++ main::k#4 to ++ Resolved ranged comparison value if(main::k#1!=rangelast(0,100)) goto main::@3 to (byte/signed byte/word/signed word/dword/signed dword) 101 Culled Empty Block (label) main::@6 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Self Phi Eliminated (byte*) SCREEN#3 Self Phi Eliminated (byte*) SCREEN#4 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#3 (const byte*) SCREEN#0 Redundant Phi (byte*) SCREEN#4 (byte*) SCREEN#3 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::j#0 @@ -275,13 +275,11 @@ Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dwo Constant inlined main::k#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::l#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@5 main::@3 main::@4 main::@7 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@9(between main::@5 and main::@1) Added new block during phi lifting main::@10(between main::@2 and main::@2) Added new block during phi lifting main::@11(between main::@7 and main::@3) Added new block during phi lifting main::@12(between main::@4 and main::@4) -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@5 main::@3 main::@4 main::@7 main::@return main::@11 main::@12 main::@9 main::@10 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -303,7 +301,6 @@ Culled Empty Block (label) main::@11 Culled Empty Block (label) main::@12 Culled Empty Block (label) main::@9 Culled Empty Block (label) main::@10 -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@5 main::@3 main::@4 main::@7 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log index b6209d445..ef8cd2ce6 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log @@ -2618,14 +2618,14 @@ Culled Empty Block (label) bitmap_line::@34 Culled Empty Block (label) bitmap_line::@35 Culled Empty Block (label) bitmap_line::@36 Culled Empty Block (label) @15 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) bitmap_init::$4 ← (byte) bitmap_init::bits#1 != (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) bitmap_init::$3 ← (byte) bitmap_init::bits#1 == (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) bitmap_init::$12 ← (byte~) bitmap_init::$10 != (byte/signed byte/word/signed word/dword/signed dword) 7 from (bool~) bitmap_init::$11 ← (byte~) bitmap_init::$10 == (byte/signed byte/word/signed word/dword/signed dword) 7 Inversing boolean not (bool~) bitmap_line_xdyi::$4 ← (byte) bitmap_line_xdyi::xd#2 >= (byte) bitmap_line_xdyi::e#1 from (bool~) bitmap_line_xdyi::$3 ← (byte) bitmap_line_xdyi::xd#2 < (byte) bitmap_line_xdyi::e#1 Inversing boolean not (bool~) bitmap_line_xdyd::$4 ← (byte) bitmap_line_xdyd::xd#2 >= (byte) bitmap_line_xdyd::e#1 from (bool~) bitmap_line_xdyd::$3 ← (byte) bitmap_line_xdyd::xd#2 < (byte) bitmap_line_xdyd::e#1 Inversing boolean not (bool~) bitmap_line_ydxi::$4 ← (byte) bitmap_line_ydxi::yd#2 >= (byte) bitmap_line_ydxi::e#1 from (bool~) bitmap_line_ydxi::$3 ← (byte) bitmap_line_ydxi::yd#2 < (byte) bitmap_line_ydxi::e#1 Inversing boolean not (bool~) bitmap_line_ydxd::$4 ← (byte) bitmap_line_ydxd::yd#2 >= (byte) bitmap_line_ydxd::e#1 from (bool~) bitmap_line_ydxd::$3 ← (byte) bitmap_line_ydxd::yd#2 < (byte) bitmap_line_ydxd::e#1 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) bitmap_init::bits#1 = (byte~) bitmap_init::$2 Alias (byte) bitmap_init::x#2 = (byte) bitmap_init::x#4 Alias (byte*) bitmap_init::bitmap#1 = (byte*) bitmap_init::bitmap#4 @@ -2690,7 +2690,7 @@ Alias (byte) lines_cnt#4 = (byte) lines_cnt#6 Alias (byte) lines::l#2 = (byte) lines::l#3 Alias (byte) lines_cnt#1 = (byte) lines_cnt#2 Alias (byte) lines_cnt#0 = (byte) lines_cnt#10 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte) bitmap_init::x#2 = (byte) bitmap_init::x#3 Alias (byte*) bitmap_init::bitmap#1 = (byte*) bitmap_init::bitmap#3 Alias (byte) bitmap_init::y#2 = (byte) bitmap_init::y#3 @@ -2710,7 +2710,7 @@ Alias (byte) bitmap_line_ydxd::y1#2 = (byte) bitmap_line_ydxd::y1#3 Alias (byte) bitmap_line_ydxd::y#3 = (byte) bitmap_line_ydxd::y#6 Alias (byte) bitmap_line_ydxd::xd#3 = (byte) bitmap_line_ydxd::xd#5 Alias (byte) bitmap_line_ydxd::yd#2 = (byte) bitmap_line_ydxd::yd#6 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) bitmap_init::bitmap#1 Self Phi Eliminated (byte) bitmap_clear::y#2 Self Phi Eliminated (byte) bitmap_line_xdyi::yd#3 @@ -2727,7 +2727,7 @@ Self Phi Eliminated (byte) bitmap_line_ydxd::yd#2 Self Phi Eliminated (byte) bitmap_line_ydxd::y1#2 Self Phi Eliminated (byte) lines_cnt#4 Self Phi Eliminated (byte) lines_cnt#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) bitmap_init::bitmap#2 (byte*) bitmap_init::bitmap#0 Redundant Phi (byte*) bitmap_init::bitmap#1 (byte*) bitmap_init::bitmap#2 Redundant Phi (byte) bitmap_clear::y#2 (byte) bitmap_clear::y#4 @@ -2751,7 +2751,7 @@ Redundant Phi (byte) lines_cnt#5 (byte) lines_cnt#0 Redundant Phi (byte) lines_cnt#4 (byte) lines_cnt#5 Redundant Phi (byte) lines_cnt#3 (byte) lines_cnt#4 Redundant Phi (byte) lines_cnt#1 (byte) lines_cnt#3 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) bitmap_init::$4 if((byte) bitmap_init::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto bitmap_init::@2 Simple Condition (bool~) bitmap_init::$5 if((byte) bitmap_init::x#1!=rangelast(0,255)) goto bitmap_init::@1 Simple Condition (bool~) bitmap_init::$12 if((byte~) bitmap_init::$10!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto bitmap_init::@4 @@ -2775,7 +2775,7 @@ Simple Condition (bool~) bitmap_line_ydxd::$4 if((byte) bitmap_line_ydxd::yd#5>= Simple Condition (bool~) bitmap_line_ydxd::$7 if((byte) bitmap_line_ydxd::y#3!=(byte/signed word/word/dword/signed dword~) bitmap_line_ydxd::$6) goto bitmap_line_ydxd::@1 Simple Condition (bool~) lines::$3 if((byte) lines::l#1<(byte) lines_cnt#0) goto lines::@1 Simple Condition (bool~) init_screen::$1 if((byte*) init_screen::c#1!=(byte*~) init_screen::$0) goto init_screen::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) BORDERCOL#0 = ((byte*))53280 Constant (const byte*) BGCOL#0 = ((byte*))53281 Constant (const byte*) D011#0 = ((byte*))53265 @@ -2802,43 +2802,43 @@ Constant (const byte[]) lines_x#0 = { 60, 80, 110, 80, 60, 40, 10, 40, 60 } Constant (const byte[]) lines_y#0 = { 10, 40, 60, 80, 110, 80, 60, 40, 10 } Constant (const byte) lines_cnt#0 = 8 Constant (const byte) lines::l#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$0 = VIC_BMM#0|VIC_DEN#0 Constant (const word) main::$3 = ((word))SCREEN#0 Constant (const word) main::$6 = ((word))BITMAP#0 Constant (const byte*) bitmap_init::bitmap#0 = BITMAP#0 Constant (const byte*) init_screen::c#0 = SCREEN#0 Constant (const byte*) init_screen::$0 = SCREEN#0+1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) bitmap_init::$1 = >bitmap_init::bitmap#0 Constant (const byte) main::$1 = main::$0|VIC_RSEL#0 Constant (const word) main::$4 = main::$3&16383 Constant (const word) main::$7 = main::$6&16383 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte/word/dword) main::$2 = main::$1|3 Constant (const word/signed dword/dword) main::$5 = main::$4/64 Constant (const word/signed dword/dword) main::$8 = main::$7/1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word/dword) main::$9 = main::$5|main::$8 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$10 = ((byte))main::$9 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in assignment *(lines_x#0+1 + lines::$0) Consolidated array index constant in assignment *(lines_y#0+1 + lines::$1) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination if(true) goto main::@1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Fixing inline constructor with bitmap_clear::$3 ← *(bitmap_plot_xhi#0 + 0) w= *(bitmap_plot_xlo#0 + 0) Fixing inline constructor with bitmap_plot::$2 ← *(bitmap_plot_xhi#0 + bitmap_plot::x#4) w= *(bitmap_plot_xlo#0 + bitmap_plot::x#4) Fixing inline constructor with bitmap_plot::$3 ← *(bitmap_plot_yhi#0 + bitmap_plot::y#4) w= *(bitmap_plot_ylo#0 + bitmap_plot::y#4) -Succesful SSA optimization Pass2FixInlineConstructors +Successful SSA optimization Pass2FixInlineConstructors Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) lines::$0 ← (byte) lines::l#2 Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) lines::$1 ← (byte) lines::l#2 Eliminating Noop Cast (byte*) bitmap_clear::bitmap#0 ← ((byte*)) (word~) bitmap_clear::$3 Eliminating Noop Cast (byte*) bitmap_plot::plotter#0 ← ((byte*)) (word~) bitmap_plot::$0 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value bitmap_init::x#1 ← ++ bitmap_init::x#2 to ++ Resolved ranged comparison value if(bitmap_init::x#1!=rangelast(0,255)) goto bitmap_init::@1 to (byte/signed byte/word/signed word/dword/signed dword) 0 Resolved ranged next value bitmap_init::y#1 ← ++ bitmap_init::y#2 to ++ @@ -2852,14 +2852,14 @@ Culled Empty Block (label) bitmap_init::@6 Culled Empty Block (label) @11 Culled Empty Block (label) main::@5 Culled Empty Block (label) main::@6 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (word) bitmap_plot::plotter_x#0 = (word~) bitmap_plot::$2 Alias (word) bitmap_plot::plotter_y#0 = (word~) bitmap_plot::$3 Alias (byte) lines::l#2 = (byte~) lines::$0 (byte~) lines::$1 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Consolidated array index constant in *(bitmap_plot_xhi#0+0) Consolidated array index constant in *(bitmap_plot_xlo#0+0) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) bitmap_init::bits#0 Inlining constant with var siblings (const byte) bitmap_init::x#0 @@ -2894,10 +2894,9 @@ Constant inlined main::$7 = ((word))(const byte*) BITMAP#0&(word/signed word/dwo Constant inlined init_screen::$0 = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1024 Constant inlined main::$8 = ((word))(const byte*) BITMAP#0&(word/signed word/dword/signed dword) 16383/(word/signed word/dword/signed dword) 1024 Constant inlined bitmap_init::bitmap#0 = (const byte*) BITMAP#0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero bitmap_plot_xhi#0+0 Simplifying constant plus zero bitmap_plot_xlo#0+0 -Block Sequence Planned @begin @14 @end main main::@3 main::@4 main::@1 lines lines::@1 lines::@3 lines::@return bitmap_line bitmap_line::@15 bitmap_line::@16 bitmap_line::@17 bitmap_line::@return bitmap_line::@3 bitmap_line::@2 bitmap_line::@20 bitmap_line::@6 bitmap_line::@1 bitmap_line::@23 bitmap_line::@24 bitmap_line::@10 bitmap_line::@9 bitmap_line::@27 bitmap_line::@13 bitmap_line_xdyi bitmap_line_xdyi::@1 bitmap_line_xdyi::@5 bitmap_line_xdyi::@3 bitmap_line_xdyi::@2 bitmap_line_xdyi::@return bitmap_plot bitmap_plot::@return bitmap_line_ydxi bitmap_line_ydxi::@1 bitmap_line_ydxi::@5 bitmap_line_ydxi::@3 bitmap_line_ydxi::@2 bitmap_line_ydxi::@return bitmap_line_xdyd bitmap_line_xdyd::@1 bitmap_line_xdyd::@5 bitmap_line_xdyd::@3 bitmap_line_xdyd::@2 bitmap_line_xdyd::@return bitmap_line_ydxd bitmap_line_ydxd::@1 bitmap_line_ydxd::@5 bitmap_line_ydxd::@3 bitmap_line_ydxd::@2 bitmap_line_ydxd::@return init_screen init_screen::@1 init_screen::@return bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_init bitmap_init::@1 bitmap_init::@5 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return Added new block during phi lifting lines::@4(between lines::@3 and lines::@1) Added new block during phi lifting bitmap_line_xdyi::@6(between bitmap_line_xdyi::@2 and bitmap_line_xdyi::@1) Added new block during phi lifting bitmap_line_xdyi::@7(between bitmap_line_xdyi::@5 and bitmap_line_xdyi::@2) @@ -2914,7 +2913,6 @@ Added new block during phi lifting bitmap_init::@9(between bitmap_init::@2 and b Added new block during phi lifting bitmap_init::@10(between bitmap_init::@1 and bitmap_init::@2) Added new block during phi lifting bitmap_init::@11(between bitmap_init::@4 and bitmap_init::@3) Added new block during phi lifting bitmap_init::@12(between bitmap_init::@3 and bitmap_init::@4) -Block Sequence Planned @begin @14 @end main main::@3 main::@4 main::@1 lines lines::@1 lines::@3 lines::@return lines::@4 bitmap_line bitmap_line::@15 bitmap_line::@16 bitmap_line::@17 bitmap_line::@return bitmap_line::@3 bitmap_line::@2 bitmap_line::@20 bitmap_line::@6 bitmap_line::@1 bitmap_line::@23 bitmap_line::@24 bitmap_line::@10 bitmap_line::@9 bitmap_line::@27 bitmap_line::@13 bitmap_line_xdyi bitmap_line_xdyi::@1 bitmap_line_xdyi::@5 bitmap_line_xdyi::@3 bitmap_line_xdyi::@2 bitmap_line_xdyi::@return bitmap_line_xdyi::@6 bitmap_line_xdyi::@7 bitmap_plot bitmap_plot::@return bitmap_line_ydxi bitmap_line_ydxi::@1 bitmap_line_ydxi::@5 bitmap_line_ydxi::@3 bitmap_line_ydxi::@2 bitmap_line_ydxi::@return bitmap_line_ydxi::@6 bitmap_line_ydxi::@7 bitmap_line_xdyd bitmap_line_xdyd::@1 bitmap_line_xdyd::@5 bitmap_line_xdyd::@3 bitmap_line_xdyd::@2 bitmap_line_xdyd::@return bitmap_line_xdyd::@6 bitmap_line_xdyd::@7 bitmap_line_ydxd bitmap_line_ydxd::@1 bitmap_line_ydxd::@5 bitmap_line_ydxd::@3 bitmap_line_ydxd::@2 bitmap_line_ydxd::@return bitmap_line_ydxd::@6 bitmap_line_ydxd::@7 init_screen init_screen::@1 init_screen::@return init_screen::@3 bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_clear::@5 bitmap_clear::@6 bitmap_init bitmap_init::@1 bitmap_init::@5 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return bitmap_init::@11 bitmap_init::@12 bitmap_init::@9 bitmap_init::@10 Adding NOP phi() at start of @begin Adding NOP phi() at start of @14 Adding NOP phi() at start of @end @@ -3072,7 +3070,6 @@ Culled Empty Block (label) bitmap_init::@5 Culled Empty Block (label) bitmap_init::@11 Culled Empty Block (label) bitmap_init::@12 Culled Empty Block (label) bitmap_init::@9 -Block Sequence Planned @begin @14 @end main main::@3 main::@4 main::@1 lines lines::@1 lines::@3 lines::@return bitmap_line bitmap_line::@15 bitmap_line::@16 bitmap_line::@17 bitmap_line::@return bitmap_line::@3 bitmap_line::@2 bitmap_line::@20 bitmap_line::@6 bitmap_line::@1 bitmap_line::@23 bitmap_line::@24 bitmap_line::@10 bitmap_line::@9 bitmap_line::@27 bitmap_line::@13 bitmap_line_xdyi bitmap_line_xdyi::@1 bitmap_line_xdyi::@5 bitmap_line_xdyi::@3 bitmap_line_xdyi::@2 bitmap_line_xdyi::@return bitmap_plot bitmap_plot::@return bitmap_line_ydxi bitmap_line_ydxi::@1 bitmap_line_ydxi::@5 bitmap_line_ydxi::@3 bitmap_line_ydxi::@2 bitmap_line_ydxi::@return bitmap_line_xdyd bitmap_line_xdyd::@1 bitmap_line_xdyd::@5 bitmap_line_xdyd::@3 bitmap_line_xdyd::@2 bitmap_line_xdyd::@return bitmap_line_ydxd bitmap_line_ydxd::@1 bitmap_line_ydxd::@5 bitmap_line_ydxd::@3 bitmap_line_ydxd::@2 bitmap_line_ydxd::@return init_screen init_screen::@1 init_screen::@return bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_init bitmap_init::@1 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return bitmap_init::@10 Adding NOP phi() at start of @begin Adding NOP phi() at start of @14 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log index 2836c3b1e..a8e66d991 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log @@ -939,10 +939,10 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @6 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) init_plot_tables::$4 ← (byte) init_plot_tables::bits#1 != (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) init_plot_tables::$3 ← (byte) init_plot_tables::bits#1 == (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) init_plot_tables::$12 ← (byte~) init_plot_tables::$10 != (byte/signed byte/word/signed word/dword/signed dword) 7 from (bool~) init_plot_tables::$11 ← (byte~) init_plot_tables::$10 == (byte/signed byte/word/signed word/dword/signed dword) 7 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Not aliassing identity: SCREEN#3 SCREEN#3 Alias (byte*) RASTER#3 = (byte*) RASTER#4 (byte*) RASTER#6 Alias (byte*) BGCOL#1 = (byte*) BGCOL#9 (byte*) BGCOL#7 @@ -969,14 +969,14 @@ Alias (byte*) init_plot_tables::yoffs#2 = (byte*) init_plot_tables::yoffs#3 Alias (byte) init_plot_tables::y#2 = (byte) init_plot_tables::y#4 Alias (byte*) init_plot_tables::yoffs#1 = (byte*~) init_plot_tables::$14 Alias (byte*) SCREEN#2 = (byte*) SCREEN#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: RASTER#1 RASTER#1 Not aliassing identity: BGCOL#2 BGCOL#2 Not aliassing identity: plots_cnt#4 plots_cnt#4 Not aliassing identity: SCREEN#3 SCREEN#3 Alias (byte) init_plot_tables::x#2 = (byte) init_plot_tables::x#3 Alias (byte) init_plot_tables::y#2 = (byte) init_plot_tables::y#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: RASTER#1 RASTER#1 Not aliassing identity: BGCOL#2 BGCOL#2 Not aliassing identity: plots_cnt#4 plots_cnt#4 @@ -990,7 +990,7 @@ Self Phi Eliminated (byte) plots_cnt#4 Self Phi Eliminated (byte) plots_cnt#1 Self Phi Eliminated (byte*) SCREEN#2 Self Phi Eliminated (byte*) SCREEN#3 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) BGCOL#1 (byte*) BGCOL#0 Redundant Phi (byte*) FGCOL#1 (byte*) FGCOL#0 Redundant Phi (byte) BMM#1 (byte) BMM#0 @@ -1011,7 +1011,7 @@ Redundant Phi (byte) plot::y#1 (byte) plot::y#0 Redundant Phi (byte*) SCREEN#6 (byte*) SCREEN#1 Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#6 Redundant Phi (byte*) SCREEN#3 (byte*) SCREEN#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$11 if(*((byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@2 Simple Condition (bool~) plots::$1 if((byte) plots::i#1<(byte) plots_cnt#0) goto plots::@1 Simple Condition (bool~) init_plot_tables::$4 if((byte) init_plot_tables::bits#1!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto init_plot_tables::@2 @@ -1020,7 +1020,7 @@ Simple Condition (bool~) init_plot_tables::$12 if((byte~) init_plot_tables::$10! Simple Condition (bool~) init_plot_tables::$15 if((byte) init_plot_tables::y#1!=rangelast(0,255)) goto init_plot_tables::@3 Simple Condition (bool~) init_screen::$1 if((byte*) init_screen::b#1!=(byte*~) init_screen::$0) goto init_screen::@1 Simple Condition (bool~) init_screen::$3 if((byte*) init_screen::c#1!=(byte*~) init_screen::$2) goto init_screen::@2 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) D011#0 = ((byte*))53265 Constant (const byte) BMM#0 = 32 Constant (const byte) DEN#0 = 16 @@ -1048,7 +1048,7 @@ Constant (const byte) init_plot_tables::bits#2 = 128 Constant (const byte*) init_plot_tables::yoffs#0 = ((byte*))0 Constant (const byte) init_plot_tables::y#0 = 0 Constant (const word/signed word/dword/signed dword) init_plot_tables::$13 = 40*8 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$0 = BMM#0|DEN#0 Constant (const word) main::$3 = ((word))SCREEN#0 Constant (const word) main::$5 = ((word))BITMAP#0 @@ -1057,20 +1057,20 @@ Constant (const byte*) init_screen::b#0 = BITMAP#0 Constant (const byte*) init_screen::$0 = BITMAP#0+8192 Constant (const byte*) init_screen::c#0 = SCREEN#0 Constant (const byte*) init_screen::$2 = SCREEN#0+1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$1 = main::$0|RSEL#0 Constant (const word/signed dword/dword) main::$4 = main::$3/64 Constant (const word/signed dword/dword) main::$6 = main::$5/1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte/word/dword) main::$2 = main::$1|3 Constant (const word/dword) main::$7 = main::$4|main::$6 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$8 = ((byte))main::$7 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value init_plot_tables::x#1 ← ++ init_plot_tables::x#2 to ++ Resolved ranged comparison value if(init_plot_tables::x#1!=rangelast(0,255)) goto init_plot_tables::@1 to (byte/signed byte/word/signed word/dword/signed dword) 0 Resolved ranged next value init_plot_tables::y#1 ← ++ init_plot_tables::y#2 to ++ @@ -1081,7 +1081,7 @@ Culled Empty Block (label) @1 Culled Empty Block (label) @2 Culled Empty Block (label) init_plot_tables::@6 Culled Empty Block (label) init_screen::@3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) plots::i#0 Inlining constant with var siblings (const byte*) plot::plotter_x#0 @@ -1116,8 +1116,7 @@ Constant inlined init_screen::b#0 = (const byte*) BITMAP#0 Constant inlined main::$7 = ((word))(const byte*) SCREEN#0/(byte/signed byte/word/signed word/dword/signed dword) 64|((word))(const byte*) BITMAP#0/(word/signed word/dword/signed dword) 1024 Constant inlined init_screen::$0 = (const byte*) BITMAP#0+(word/signed word/dword/signed dword) 8192 Constant inlined main::$8 = ((byte))((word))(const byte*) SCREEN#0/(byte/signed byte/word/signed word/dword/signed dword) 64|((word))(const byte*) BITMAP#0/(word/signed word/dword/signed dword) 1024 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @5 @end main main::@5 main::@2 main::@3 main::@7 plots plots::@1 plots::@3 plots::@return plot plot::@return init_plot_tables init_plot_tables::@1 init_plot_tables::@5 init_plot_tables::@2 init_plot_tables::@3 init_plot_tables::@7 init_plot_tables::@4 init_plot_tables::@return init_screen init_screen::@1 init_screen::@2 init_screen::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting plots::@4(between plots::@3 and plots::@1) Added new block during phi lifting init_plot_tables::@9(between init_plot_tables::@2 and init_plot_tables::@1) Added new block during phi lifting init_plot_tables::@10(between init_plot_tables::@1 and init_plot_tables::@2) @@ -1125,7 +1124,6 @@ Added new block during phi lifting init_plot_tables::@11(between init_plot_table Added new block during phi lifting init_plot_tables::@12(between init_plot_tables::@3 and init_plot_tables::@4) Added new block during phi lifting init_screen::@5(between init_screen::@1 and init_screen::@1) Added new block during phi lifting init_screen::@6(between init_screen::@2 and init_screen::@2) -Block Sequence Planned @begin @5 @end main main::@5 main::@2 main::@3 main::@7 plots plots::@1 plots::@3 plots::@return plots::@4 plot plot::@return init_plot_tables init_plot_tables::@1 init_plot_tables::@5 init_plot_tables::@2 init_plot_tables::@3 init_plot_tables::@7 init_plot_tables::@4 init_plot_tables::@return init_plot_tables::@11 init_plot_tables::@12 init_plot_tables::@9 init_plot_tables::@10 init_screen init_screen::@1 init_screen::@2 init_screen::@return init_screen::@6 init_screen::@5 Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end @@ -1166,7 +1164,6 @@ Culled Empty Block (label) init_plot_tables::@12 Culled Empty Block (label) init_plot_tables::@9 Culled Empty Block (label) init_screen::@6 Culled Empty Block (label) init_screen::@5 -Block Sequence Planned @begin @5 @end main main::@5 main::@2 main::@3 main::@7 plots plots::@1 plots::@3 plots::@return plot plot::@return init_plot_tables init_plot_tables::@1 init_plot_tables::@2 init_plot_tables::@3 init_plot_tables::@7 init_plot_tables::@4 init_plot_tables::@return init_plot_tables::@10 init_screen init_screen::@1 init_screen::@2 init_screen::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bool-const.log b/src/test/java/dk/camelot64/kickc/test/ref/bool-const.log index b2d7ec7e3..a5372836d 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bool-const.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bool-const.log @@ -360,37 +360,37 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@3 Culled Empty Block (label) @5 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) bool_const_vars::$2 ← (byte/signed byte/word/signed word/dword/signed dword) 21 >= (byte) bool_const_vars::a#0 from (bool~) bool_const_vars::$1 ← (byte/signed byte/word/signed word/dword/signed dword) 21 < (byte) bool_const_vars::a#0 Inversing boolean not (bool~) bool_const_inline::$7 ← (byte/signed byte/word/signed word/dword/signed dword) 21 >= (byte) bool_const_inline::a#0 from (bool~) bool_const_inline::$6 ← (byte/signed byte/word/signed word/dword/signed dword) 21 < (byte) bool_const_inline::a#0 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (bool) bool_const_vars::b1#0 = (bool~) bool_const_vars::$3 Alias (bool) bool_const_vars::b2#0 = (bool~) bool_const_vars::$7 Alias (bool) bool_const_vars::b#0 = (bool~) bool_const_vars::$10 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Rewriting || if()-condition to two if()s (bool) bool_const_vars::b#0 ← (bool~) bool_const_vars::$9 || false -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting && if()-condition to two if()s (bool~) bool_const_vars::$9 ← (bool) bool_const_vars::b1#0 && (bool~) bool_const_vars::$8 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting || if()-condition to two if()s (bool) bool_const_vars::b1#0 ← (bool~) bool_const_vars::$0 || (bool~) bool_const_vars::$2 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting || if()-condition to two if()s (bool~) bool_const_inline::$8 ← (bool~) bool_const_inline::$5 || (bool~) bool_const_inline::$7 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting || if()-condition to two if()s (bool~) bool_const_inline::$5 ← (bool~) bool_const_inline::$0 || (bool~) bool_const_inline::$4 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting ! if()-condition to reversed if() (bool~) bool_const_vars::$8 ← ! (bool) bool_const_vars::b2#0 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting || if()-condition to two if()s (bool) bool_const_vars::b2#0 ← (bool~) bool_const_vars::$4 || (bool~) bool_const_vars::$6 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting && if()-condition to two if()s (bool~) bool_const_inline::$4 ← (bool~) bool_const_inline::$2 && (bool~) bool_const_inline::$3 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const bool) bool_const_if::b#0 = true Constant (const byte) bool_const_vars::a#0 = 14 Constant (const signed byte/signed word/signed dword) bool_const_vars::$5 = -8 Constant (const byte) bool_const_inline::a#0 = 23 Constant (const signed byte/signed word/signed dword) bool_const_inline::$1 = -8 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const bool) bool_const_vars::$0 = bool_const_vars::a#0==15 Constant (const bool) bool_const_vars::$2 = 21>=bool_const_vars::a#0 Constant (const bool) bool_const_vars::$4 = bool_const_vars::a#0!=44 @@ -399,14 +399,14 @@ Constant (const bool) bool_const_inline::$0 = bool_const_inline::a#0!=44 Constant (const bool) bool_const_inline::$2 = bool_const_inline::a#0>=bool_const_inline::$1 Constant (const bool) bool_const_inline::$3 = bool_const_inline::a#0==15 Constant (const bool) bool_const_inline::$7 = 21>=bool_const_inline::a#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(SCREEN#0+0) Consolidated array index constant in *(SCREEN#0+0) Consolidated array index constant in *(SCREEN#0+1) Consolidated array index constant in *(SCREEN#0+1) Consolidated array index constant in *(SCREEN#0+2) Consolidated array index constant in *(SCREEN#0+2) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination if((const bool) bool_const_if::b#0) goto bool_const_if::@1 if() condition always false - eliminating if((const bool) bool_const_vars::$0) goto bool_const_vars::@6 if() condition always true - replacing block destination if((const bool) bool_const_inline::$0) goto bool_const_inline::@1 @@ -417,7 +417,7 @@ if() condition always false - eliminating if((const bool) bool_const_inline::$7) if() condition always true - replacing block destination if((const bool) bool_const_inline::$2) goto bool_const_inline::@7 if() condition always true - replacing block destination if((const bool) bool_const_vars::$6) goto bool_const_vars::@5 if() condition always false - eliminating if((const bool) bool_const_inline::$3) goto bool_const_inline::@1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating unused constant (const bool) bool_const_if::b#0 Eliminating unused constant (const bool) bool_const_vars::$0 Eliminating unused constant (const bool) bool_const_vars::$2 @@ -427,12 +427,12 @@ Eliminating unused constant (const bool) bool_const_inline::$0 Eliminating unused constant (const bool) bool_const_inline::$2 Eliminating unused constant (const bool) bool_const_inline::$3 Eliminating unused constant (const bool) bool_const_inline::$7 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const byte) bool_const_vars::a#0 Eliminating unused constant (const signed byte/signed word/signed dword) bool_const_vars::$5 Eliminating unused constant (const byte) bool_const_inline::a#0 Eliminating unused constant (const signed byte/signed word/signed dword) bool_const_inline::$1 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Removing unused block bool_const_if::@3 Removing unused block bool_const_vars::@1 Removing unused block bool_const_inline::@3 @@ -440,15 +440,13 @@ Removing unused block bool_const_inline::@5 Removing unused block bool_const_inline::@6 Removing unused block bool_const_vars::@8 Removing unused block bool_const_inline::@7 -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) bool_const_vars::@5 Culled Empty Block (label) bool_const_vars::@6 Culled Empty Block (label) bool_const_vars::@7 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Simplifying constant plus zero SCREEN#0+0 -Block Sequence Planned @begin @4 @end main main::@1 main::@2 main::@return bool_const_inline bool_const_inline::@1 bool_const_inline::@return bool_const_vars bool_const_vars::@3 bool_const_vars::@return bool_const_if bool_const_if::@1 bool_const_if::@return -Block Sequence Planned @begin @4 @end main main::@1 main::@2 main::@return bool_const_inline bool_const_inline::@1 bool_const_inline::@return bool_const_vars bool_const_vars::@3 bool_const_vars::@return bool_const_if bool_const_if::@1 bool_const_if::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @4 Adding NOP phi() at start of @end @@ -465,7 +463,6 @@ Calls in [main] to bool_const_if:5 bool_const_vars:7 bool_const_inline:9 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @4 @end main main::@1 main::@2 main::@return bool_const_inline bool_const_inline::@1 bool_const_inline::@return bool_const_vars bool_const_vars::@3 bool_const_vars::@return bool_const_if bool_const_if::@1 bool_const_if::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @4 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bool-function.log b/src/test/java/dk/camelot64/kickc/test/ref/bool-function.log index 653c433da..b3c50987c 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bool-function.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bool-function.log @@ -223,36 +223,34 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (bool) isSet::b#0 = (bool~) main::$1 Alias (bool) isSet::return#0 = (bool) isSet::return#3 Alias (byte*) main::screen#1 = (byte*) main::screen#3 (byte*) main::screen#4 (byte*) main::screen#2 Alias (byte) main::i#2 = (byte) main::i#6 (byte) main::i#3 (byte) main::i#4 Alias (bool) isSet::return#1 = (bool~) isSet::$2 (bool) isSet::return#4 (bool) isSet::return#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte) main::i#2 = (byte) main::i#5 Alias (byte*) main::screen#1 = (byte*) main::screen#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::screen#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::screen#1 (byte*) main::screen#0 Redundant Phi (byte) isSet::i#1 (byte) isSet::i#0 Redundant Phi (bool) isSet::b#1 (bool) isSet::b#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$3 if((byte) main::i#1!=rangelast(0,100)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::screen#0 = ((byte*))1024 Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,100)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 101 OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@1 main::@7 main::@4 main::@3 main::@return main::@2 isSet isSet::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@8(between main::@3 and main::@1) -Block Sequence Planned @begin @2 @end main main::@1 main::@7 main::@4 main::@3 main::@return main::@8 main::@2 isSet isSet::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -271,7 +269,6 @@ Created 1 initial phi equivalence classes Coalesced [17] main::i#7 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@8 -Block Sequence Planned @begin @2 @end main main::@1 main::@7 main::@4 main::@3 main::@return main::@2 isSet isSet::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bool-ifs.log b/src/test/java/dk/camelot64/kickc/test/ref/bool-ifs.log index a4d6612d7..42fd2a139 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bool-ifs.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bool-ifs.log @@ -558,38 +558,38 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@4 Culled Empty Block (label) @6 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) bool_and::i#2 = (byte) bool_and::i#3 (byte) bool_and::i#4 Alias (byte) bool_or::i#2 = (byte) bool_or::i#3 (byte) bool_or::i#4 Alias (byte) bool_not::i#2 = (byte) bool_not::i#3 (byte) bool_not::i#4 Alias (byte) bool_complex::i#2 = (byte) bool_complex::i#3 (byte) bool_complex::i#4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte) bool_and::i#2 = (byte) bool_and::i#5 Alias (byte) bool_or::i#2 = (byte) bool_or::i#5 Alias (byte) bool_not::i#2 = (byte) bool_not::i#5 Alias (byte) bool_complex::i#2 = (byte) bool_complex::i#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Simple Condition (bool~) bool_and::$4 if((byte) bool_and::i#1!=rangelast(0,20)) goto bool_and::@1 Simple Condition (bool~) bool_or::$4 if((byte) bool_or::i#1!=rangelast(0,20)) goto bool_or::@1 Simple Condition (bool~) bool_not::$5 if((byte) bool_not::i#1!=rangelast(0,20)) goto bool_not::@1 Simple Condition (bool~) bool_complex::$10 if((byte) bool_complex::i#1!=rangelast(0,20)) goto bool_complex::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Rewriting && if()-condition to two if()s (bool~) bool_and::$3 ← (bool~) bool_and::$0 && (bool~) bool_and::$2 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting || if()-condition to two if()s (bool~) bool_or::$3 ← (bool~) bool_or::$0 || (bool~) bool_or::$2 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting ! if()-condition to reversed if() (bool~) bool_not::$4 ← ! (bool~) bool_not::$3 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting || if()-condition to two if()s (bool~) bool_not::$3 ← (bool~) bool_not::$0 || (bool~) bool_not::$2 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting || if()-condition to two if()s (bool~) bool_complex::$9 ← (bool~) bool_complex::$3 || (bool~) bool_complex::$8 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting && if()-condition to two if()s (bool~) bool_complex::$3 ← (bool~) bool_complex::$0 && (bool~) bool_complex::$2 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting ! if()-condition to reversed if() (bool~) bool_complex::$8 ← ! (bool~) bool_complex::$7 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting || if()-condition to two if()s (bool~) bool_complex::$7 ← (bool~) bool_complex::$4 || (bool~) bool_complex::$6 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Constant (const byte*) bool_and::screen#0 = ((byte*))1024 Constant (const byte) bool_and::i#0 = 0 Constant (const byte*) bool_or::screen#0 = ((byte*))1064 @@ -598,7 +598,7 @@ Constant (const byte*) bool_not::screen#0 = ((byte*))1104 Constant (const byte) bool_not::i#0 = 0 Constant (const byte*) bool_complex::screen#0 = ((byte*))1144 Constant (const byte) bool_complex::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value bool_and::i#1 ← ++ bool_and::i#2 to ++ Resolved ranged comparison value if(bool_and::i#1!=rangelast(0,20)) goto bool_and::@1 to (byte/signed byte/word/signed word/dword/signed dword) 21 Resolved ranged next value bool_or::i#1 ← ++ bool_or::i#2 to ++ @@ -617,7 +617,7 @@ Simple Condition (bool~) bool_not::$2 if((byte~) bool_not::$1==(byte/signed byte Simple Condition (bool~) bool_complex::$4 if((byte) bool_complex::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto bool_complex::@4 Simple Condition (bool~) bool_complex::$2 if((byte~) bool_complex::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto bool_complex::@2 Simple Condition (bool~) bool_complex::$6 if((byte~) bool_complex::$5==(byte/signed byte/word/signed word/dword/signed dword) 0) goto bool_complex::@4 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) bool_and::i#0 Inlining constant with var siblings (const byte) bool_or::i#0 @@ -627,13 +627,11 @@ Constant inlined bool_complex::i#0 = (byte/signed byte/word/signed word/dword/si Constant inlined bool_or::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined bool_not::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined bool_and::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @5 @end main main::@1 main::@2 main::@3 main::@return bool_complex bool_complex::@1 bool_complex::@7 bool_complex::@9 bool_complex::@2 bool_complex::@3 bool_complex::@return bool_complex::@4 bool_complex::@8 bool_not bool_not::@1 bool_not::@7 bool_not::@2 bool_not::@3 bool_not::@return bool_not::@4 bool_or bool_or::@1 bool_or::@7 bool_or::@4 bool_or::@3 bool_or::@return bool_or::@2 bool_and bool_and::@1 bool_and::@4 bool_and::@3 bool_and::@return bool_and::@7 bool_and::@2 +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting bool_complex::@10(between bool_complex::@3 and bool_complex::@1) Added new block during phi lifting bool_not::@8(between bool_not::@3 and bool_not::@1) Added new block during phi lifting bool_or::@8(between bool_or::@3 and bool_or::@1) Added new block during phi lifting bool_and::@8(between bool_and::@3 and bool_and::@1) -Block Sequence Planned @begin @5 @end main main::@1 main::@2 main::@3 main::@return bool_complex bool_complex::@1 bool_complex::@7 bool_complex::@9 bool_complex::@2 bool_complex::@3 bool_complex::@return bool_complex::@10 bool_complex::@4 bool_complex::@8 bool_not bool_not::@1 bool_not::@7 bool_not::@2 bool_not::@3 bool_not::@return bool_not::@8 bool_not::@4 bool_or bool_or::@1 bool_or::@7 bool_or::@4 bool_or::@3 bool_or::@return bool_or::@8 bool_or::@2 bool_and bool_and::@1 bool_and::@4 bool_and::@3 bool_and::@return bool_and::@8 bool_and::@7 bool_and::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end @@ -663,7 +661,6 @@ Culled Empty Block (label) bool_complex::@10 Culled Empty Block (label) bool_not::@8 Culled Empty Block (label) bool_or::@8 Culled Empty Block (label) bool_and::@8 -Block Sequence Planned @begin @5 @end main main::@1 main::@2 main::@3 main::@return bool_complex bool_complex::@1 bool_complex::@7 bool_complex::@9 bool_complex::@2 bool_complex::@3 bool_complex::@return bool_complex::@4 bool_complex::@8 bool_not bool_not::@1 bool_not::@7 bool_not::@2 bool_not::@3 bool_not::@return bool_not::@4 bool_or bool_or::@1 bool_or::@7 bool_or::@4 bool_or::@3 bool_or::@return bool_or::@2 bool_and bool_and::@1 bool_and::@4 bool_and::@3 bool_and::@return bool_and::@7 bool_and::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bool-pointer.log b/src/test/java/dk/camelot64/kickc/test/ref/bool-pointer.log index 0d5f2a0c6..22aac5f73 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bool-pointer.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bool-pointer.log @@ -107,20 +107,20 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@1 Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (bool*) main::bscreen#1 = (bool*~) main::$0 (bool*) main::bscreen#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Rewriting ! if()-condition to reversed if() (bool~) main::$1 ← ! *((bool*) main::bscreen#1) -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Constant (const bool*) main::bscreen#0 = ((bool*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const bool*) main::bscreen#1 = main::bscreen#0+2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const bool*) main::bscreen#2 = ++main::bscreen#1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::bscreen#0+0) Consolidated array index constant in *(main::bscreen#0+1) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with different constant siblings (const bool*) main::bscreen#0 Inlining constant with different constant siblings (const bool*) main::bscreen#1 @@ -128,10 +128,8 @@ Inlining constant with different constant siblings (const bool*) main::bscreen#2 Constant inlined main::bscreen#2 = ++((bool*))(word/signed word/dword/signed dword) 1024+(byte/signed byte/word/signed word/dword/signed dword) 2 Constant inlined main::bscreen#0 = ((bool*))(word/signed word/dword/signed dword) 1024 Constant inlined main::bscreen#1 = ((bool*))(word/signed word/dword/signed dword) 1024+(byte/signed byte/word/signed word/dword/signed dword) 2 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero ((bool*))1024+0 -Block Sequence Planned @begin @1 @end main main::@return main::@2 -Block Sequence Planned @begin @1 @end main main::@return main::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -141,7 +139,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@return main::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bool-vars.log b/src/test/java/dk/camelot64/kickc/test/ref/bool-vars.log index eb6b7c7ff..3d3fc79f5 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bool-vars.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bool-vars.log @@ -630,7 +630,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@4 Culled Empty Block (label) @6 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (bool) bool_and::o1#0 = (bool~) bool_and::$0 Alias (bool) bool_and::o2#0 = (bool~) bool_and::$2 Alias (bool) bool_and::o3#0 = (bool~) bool_and::$3 @@ -649,33 +649,33 @@ Alias (bool) bool_complex::o3#0 = (bool~) bool_complex::$3 Alias (bool) bool_complex::o4#0 = (bool~) bool_complex::$5 Alias (bool) bool_complex::o5#0 = (bool~) bool_complex::$6 Alias (byte) bool_complex::i#2 = (byte) bool_complex::i#3 (byte) bool_complex::i#4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte) bool_and::i#2 = (byte) bool_and::i#5 Alias (byte) bool_or::i#2 = (byte) bool_or::i#5 Alias (byte) bool_not::i#2 = (byte) bool_not::i#5 Alias (byte) bool_complex::i#2 = (byte) bool_complex::i#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Simple Condition (bool~) bool_and::$4 if((byte) bool_and::i#1!=rangelast(0,20)) goto bool_and::@1 Simple Condition (bool~) bool_or::$4 if((byte) bool_or::i#1!=rangelast(0,20)) goto bool_or::@1 Simple Condition (bool~) bool_not::$5 if((byte) bool_not::i#1!=rangelast(0,20)) goto bool_not::@1 Simple Condition (bool~) bool_complex::$7 if((byte) bool_complex::i#1!=rangelast(0,20)) goto bool_complex::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Rewriting && if()-condition to two if()s (bool) bool_and::o3#0 ← (bool) bool_and::o1#0 && (bool) bool_and::o2#0 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting || if()-condition to two if()s (bool) bool_or::o3#0 ← (bool) bool_or::o1#0 || (bool) bool_or::o2#0 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting ! if()-condition to reversed if() (bool) bool_not::o3#0 ← ! (bool~) bool_not::$3 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting || if()-condition to two if()s (bool~) bool_not::$3 ← (bool) bool_not::o1#0 || (bool) bool_not::o2#0 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting || if()-condition to two if()s (bool) bool_complex::o5#0 ← (bool) bool_complex::o3#0 || (bool) bool_complex::o4#0 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting && if()-condition to two if()s (bool) bool_complex::o3#0 ← (bool) bool_complex::o1#0 && (bool) bool_complex::o2#0 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting ! if()-condition to reversed if() (bool) bool_complex::o4#0 ← ! (bool~) bool_complex::$4 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting || if()-condition to two if()s (bool~) bool_complex::$4 ← (bool) bool_complex::o1#0 || (bool) bool_complex::o2#0 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Constant (const byte*) bool_and::screen#0 = ((byte*))1024 Constant (const byte) bool_and::i#0 = 0 Constant (const byte*) bool_or::screen#0 = ((byte*))1064 @@ -684,7 +684,7 @@ Constant (const byte*) bool_not::screen#0 = ((byte*))1104 Constant (const byte) bool_not::i#0 = 0 Constant (const byte*) bool_complex::screen#0 = ((byte*))1144 Constant (const byte) bool_complex::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value bool_and::i#1 ← ++ bool_and::i#2 to ++ Resolved ranged comparison value if(bool_and::i#1!=rangelast(0,20)) goto bool_and::@1 to (byte/signed byte/word/signed word/dword/signed dword) 21 Resolved ranged next value bool_or::i#1 ← ++ bool_or::i#2 to ++ @@ -699,7 +699,7 @@ Simple Condition (bool) bool_not::o1#0 if((byte) bool_not::i#2<(byte/signed byte Simple Condition (bool) bool_and::o2#0 if((byte~) bool_and::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto bool_and::@2 Simple Condition (bool) bool_or::o2#0 if((byte~) bool_or::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto bool_or::@2 Simple Condition (bool) bool_not::o2#0 if((byte~) bool_not::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto bool_not::@4 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) bool_and::i#0 Inlining constant with var siblings (const byte) bool_or::i#0 @@ -709,13 +709,11 @@ Constant inlined bool_complex::i#0 = (byte/signed byte/word/signed word/dword/si Constant inlined bool_or::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined bool_not::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined bool_and::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @5 @end main main::@1 main::@2 main::@3 main::@return bool_complex bool_complex::@1 bool_complex::@7 bool_complex::@9 bool_complex::@2 bool_complex::@3 bool_complex::@return bool_complex::@4 bool_complex::@8 bool_not bool_not::@1 bool_not::@7 bool_not::@2 bool_not::@3 bool_not::@return bool_not::@4 bool_or bool_or::@1 bool_or::@7 bool_or::@4 bool_or::@3 bool_or::@return bool_or::@2 bool_and bool_and::@1 bool_and::@4 bool_and::@3 bool_and::@return bool_and::@7 bool_and::@2 +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting bool_complex::@10(between bool_complex::@3 and bool_complex::@1) Added new block during phi lifting bool_not::@8(between bool_not::@3 and bool_not::@1) Added new block during phi lifting bool_or::@8(between bool_or::@3 and bool_or::@1) Added new block during phi lifting bool_and::@8(between bool_and::@3 and bool_and::@1) -Block Sequence Planned @begin @5 @end main main::@1 main::@2 main::@3 main::@return bool_complex bool_complex::@1 bool_complex::@7 bool_complex::@9 bool_complex::@2 bool_complex::@3 bool_complex::@return bool_complex::@10 bool_complex::@4 bool_complex::@8 bool_not bool_not::@1 bool_not::@7 bool_not::@2 bool_not::@3 bool_not::@return bool_not::@8 bool_not::@4 bool_or bool_or::@1 bool_or::@7 bool_or::@4 bool_or::@3 bool_or::@return bool_or::@8 bool_or::@2 bool_and bool_and::@1 bool_and::@4 bool_and::@3 bool_and::@return bool_and::@8 bool_and::@7 bool_and::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end @@ -745,7 +743,6 @@ Culled Empty Block (label) bool_complex::@10 Culled Empty Block (label) bool_not::@8 Culled Empty Block (label) bool_or::@8 Culled Empty Block (label) bool_and::@8 -Block Sequence Planned @begin @5 @end main main::@1 main::@2 main::@3 main::@return bool_complex bool_complex::@1 bool_complex::@7 bool_complex::@9 bool_complex::@2 bool_complex::@3 bool_complex::@return bool_complex::@4 bool_complex::@8 bool_not bool_not::@1 bool_not::@7 bool_not::@2 bool_not::@3 bool_not::@return bool_not::@4 bool_or bool_or::@1 bool_or::@7 bool_or::@4 bool_or::@3 bool_or::@return bool_or::@2 bool_and bool_and::@1 bool_and::@4 bool_and::@3 bool_and::@return bool_and::@7 bool_and::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bresenham.log b/src/test/java/dk/camelot64/kickc/test/ref/bresenham.log index 58332c530..9c37847e2 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bresenham.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bresenham.log @@ -303,9 +303,9 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) main::$10 ← (byte) main::xd#1 > (byte) main::e#1 from (bool~) main::$9 ← (byte) main::xd#1 <= (byte) main::e#1 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) main::xd#0 = (byte~) main::$0 Alias (byte) main::yd#0 = (byte~) main::$1 Alias (byte) main::x#0 = (byte) main::x0#0 @@ -324,27 +324,27 @@ Alias (byte) main::y#1 = (byte/signed word/word/dword/signed dword~) main::$11 Alias (byte*) main::cursor#2 = (byte*~) main::$12 Alias (byte) main::e#2 = (byte~) main::$13 Alias (byte) STAR#0 = (byte) STAR#4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte) main::x1#1 = (byte) main::x1#2 Alias (byte) main::x#1 = (byte) main::x#3 Alias (byte) STAR#1 = (byte) STAR#3 Alias (byte) main::yd#1 = (byte) main::yd#2 Alias (byte) main::xd#1 = (byte) main::xd#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) STAR#1 Self Phi Eliminated (byte) main::yd#1 Self Phi Eliminated (byte) main::xd#1 Self Phi Eliminated (byte) main::x1#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) STAR#2 (byte) STAR#0 Redundant Phi (byte) STAR#1 (byte) STAR#2 Redundant Phi (byte) main::yd#1 (byte) main::yd#0 Redundant Phi (byte) main::xd#1 (byte) main::xd#0 Redundant Phi (byte) main::x1#1 (byte) main::x1#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$10 if((byte) main::xd#0>(byte) main::e#1) goto main::@2 Simple Condition (bool~) main::$15 if((byte) main::x#1<(byte/signed word/word/dword/signed dword~) main::$14) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) STAR#0 = 81 Constant (const word/signed word/dword/signed dword) $0 = 40*25 Constant (const byte[$0]) SCREEN#0 = ((byte*))1024 @@ -352,17 +352,17 @@ Constant (const byte) main::x#0 = 4 Constant (const byte) main::y#0 = 4 Constant (const byte) main::x1#0 = 39 Constant (const byte) main::y1#0 = 24 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::xd#0 = main::x1#0-main::x#0 Constant (const byte) main::yd#0 = main::y1#0-main::y#0 Constant (const byte/signed word/word/dword/signed dword) main::$3 = main::y#0*40 Constant (const byte/signed word/word/dword/signed dword) main::$14 = main::x1#0+1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::e#0 = main::yd#0/2 Constant (const byte*) main::$4 = SCREEN#0+main::$3 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::cursor#0 = main::$4+main::x#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::x#0 Inlining constant with var siblings (const byte) main::y#0 @@ -376,11 +376,9 @@ Constant inlined main::$4 = (const byte[40*25]) SCREEN#0+(byte/signed byte/word/ Constant inlined main::y#0 = (byte/signed byte/word/signed word/dword/signed dword) 4 Constant inlined $0 = (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 25 Constant inlined main::e#0 = (const byte) main::yd#0/(byte/signed byte/word/signed word/dword/signed dword) 2 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@5(between main::@2 and main::@1) Added new block during phi lifting main::@6(between main::@1 and main::@2) -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return main::@5 main::@6 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -410,7 +408,6 @@ Coalesced (already) [26] main::y#6 ← main::y#2 Coalesced down to 4 phi equivalence classes Culled Empty Block (label) main::@5 Culled Empty Block (label) main::@6 -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/bresenhamarr.log b/src/test/java/dk/camelot64/kickc/test/ref/bresenhamarr.log index 7bd7b8224..5c5663fb7 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/bresenhamarr.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/bresenhamarr.log @@ -295,9 +295,9 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) main::$10 ← (byte) main::xd#1 >= (byte) main::e#1 from (bool~) main::$9 ← (byte) main::xd#1 < (byte) main::e#1 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) main::xd#0 = (byte~) main::$1 Alias (byte) main::yd#0 = (byte~) main::$2 Alias (byte) main::x#0 = (byte) main::x0#0 @@ -315,26 +315,26 @@ Alias (byte) main::yd#1 = (byte) main::yd#3 Alias (byte) main::y#1 = (byte/signed word/word/dword/signed dword~) main::$11 Alias (word) main::idx#2 = (word/signed dword/dword~) main::$12 Alias (byte) main::e#2 = (byte~) main::$13 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte) main::x1#1 = (byte) main::x1#2 Alias (byte) main::x#1 = (byte) main::x#3 Alias (byte) main::STAR#1 = (byte) main::STAR#2 Alias (byte) main::yd#1 = (byte) main::yd#2 Alias (byte) main::xd#1 = (byte) main::xd#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) main::STAR#1 Self Phi Eliminated (byte) main::yd#1 Self Phi Eliminated (byte) main::xd#1 Self Phi Eliminated (byte) main::x1#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) main::STAR#1 (byte) main::STAR#0 Redundant Phi (byte) main::yd#1 (byte) main::yd#0 Redundant Phi (byte) main::xd#1 (byte) main::xd#0 Redundant Phi (byte) main::x1#1 (byte) main::x1#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$10 if((byte) main::xd#0>=(byte) main::e#1) goto main::@2 Simple Condition (bool~) main::$15 if((byte) main::x#1<(byte/signed word/word/dword/signed dword~) main::$14) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) main::STAR#0 = 81 Constant (const word/signed word/dword/signed dword) main::$0 = 40*25 Constant (const byte[main::$0]) main::screen#0 = ((byte*))1024 @@ -342,15 +342,15 @@ Constant (const byte) main::x#0 = 0 Constant (const byte) main::y#0 = 0 Constant (const byte) main::x1#0 = 39 Constant (const byte) main::y1#0 = 24 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::xd#0 = main::x1#0-main::x#0 Constant (const byte) main::yd#0 = main::y1#0-main::y#0 Constant (const byte/signed word/word/dword/signed dword) main::$4 = main::y#0*40 Constant (const byte/signed word/word/dword/signed dword) main::$14 = main::x1#0+1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::e#0 = main::yd#0/2 Constant (const word) main::idx#0 = main::x#0+main::$4 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::x#0 Inlining constant with var siblings (const byte) main::y#0 @@ -363,13 +363,11 @@ Constant inlined main::x#0 = (byte/signed byte/word/signed word/dword/signed dwo Constant inlined main::$4 = (byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) 40 Constant inlined main::y#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::e#0 = (const byte) main::yd#0/(byte/signed byte/word/signed word/dword/signed dword) 2 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero 0+0*40 Simplifying constant multiply by zero 0*40 -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return Added new block during phi lifting main::@5(between main::@2 and main::@1) Added new block during phi lifting main::@6(between main::@1 and main::@2) -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return main::@5 main::@6 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -399,7 +397,6 @@ Coalesced (already) [26] main::y#6 ← main::y#2 Coalesced down to 4 phi equivalence classes Culled Empty Block (label) main::@5 Culled Empty Block (label) main::@6 -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-8bppcharstretch.log b/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-8bppcharstretch.log index 5326192fb..90d931929 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-8bppcharstretch.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-8bppcharstretch.log @@ -2080,9 +2080,9 @@ OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) gfx_init::@2 Culled Empty Block (label) gfx_init_plane_charset8::@10 Culled Empty Block (label) @9 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) gfx_init_plane_charset8::$9 ← (byte~) gfx_init_plane_charset8::$7 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) gfx_init_plane_charset8::$8 ← (byte~) gfx_init_plane_charset8::$7 != (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) main::rst#2 = (byte) main::rst#3 Alias (byte) gfx_init_screen0::cy#2 = (byte) gfx_init_screen0::cy#3 Alias (byte*) gfx_init_screen0::ch#1 = (byte*) gfx_init_screen0::ch#4 @@ -2102,7 +2102,7 @@ Alias (byte) gfx_init_plane_charset8::ch#2 = (byte) gfx_init_plane_charset8::ch# Alias (byte*) gfx_init_plane_charset8::gfxa#1 = (byte*) gfx_init_plane_charset8::gfxa#7 (byte*) gfx_init_plane_charset8::gfxa#8 Alias (byte) gfx_init_plane_charset8::col#1 = (byte) gfx_init_plane_charset8::col#7 (byte) gfx_init_plane_charset8::col#8 Alias (byte) dtvSetCpuBankSegment1::cpuBankIdx#1 = (byte~) gfx_init_plane_charset8::$15 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte*) gfx_init_plane_charset8::gfxa#2 = (byte*) gfx_init_plane_charset8::gfxa#3 Alias (byte) gfx_init_plane_charset8::bits#2 = (byte) gfx_init_plane_charset8::bits#3 Alias (byte) gfx_init_plane_charset8::col#2 = (byte) gfx_init_plane_charset8::col#3 @@ -2110,19 +2110,19 @@ Alias (byte) gfx_init_plane_charset8::cp#2 = (byte) gfx_init_plane_charset8::cp# Alias (byte) gfx_init_plane_charset8::cr#2 = (byte) gfx_init_plane_charset8::cr#4 Alias (byte*) gfx_init_plane_charset8::chargen#4 = (byte*) gfx_init_plane_charset8::chargen#7 Alias (byte) gfx_init_plane_charset8::ch#2 = (byte) gfx_init_plane_charset8::ch#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) main::rst#2 Self Phi Eliminated (byte) gfx_init_screen0::cy#2 Self Phi Eliminated (byte) gfx_init_plane_charset8::cr#2 Self Phi Eliminated (byte*) gfx_init_plane_charset8::chargen#4 Self Phi Eliminated (byte) gfx_init_plane_charset8::ch#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) main::rst#2 (byte) main::rst#0 Redundant Phi (byte) gfx_init_screen0::cy#2 (byte) gfx_init_screen0::cy#4 Redundant Phi (byte) gfx_init_plane_charset8::cr#2 (byte) gfx_init_plane_charset8::cr#6 Redundant Phi (byte*) gfx_init_plane_charset8::chargen#4 (byte*) gfx_init_plane_charset8::chargen#1 Redundant Phi (byte) gfx_init_plane_charset8::ch#2 (byte) gfx_init_plane_charset8::ch#7 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$25 if((byte) main::j#1!=rangelast(0,15)) goto main::@1 Simple Condition (bool~) main::$29 if(*((byte*) RASTER#0)!=(byte) main::rst#0) goto main::@6 Simple Condition (bool~) main::$35 if((byte) main::rst#1!=(byte/word/signed word/dword/signed dword) 242) goto main::@8 @@ -2132,7 +2132,7 @@ Simple Condition (bool~) gfx_init_plane_charset8::$9 if((byte~) gfx_init_plane_c Simple Condition (bool~) gfx_init_plane_charset8::$11 if((byte) gfx_init_plane_charset8::cp#1!=rangelast(0,7)) goto gfx_init_plane_charset8::@3 Simple Condition (bool~) gfx_init_plane_charset8::$12 if((byte) gfx_init_plane_charset8::cr#1!=rangelast(0,7)) goto gfx_init_plane_charset8::@2 Simple Condition (bool~) gfx_init_plane_charset8::$13 if((byte) gfx_init_plane_charset8::ch#1!=rangelast(0,255)) goto gfx_init_plane_charset8::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0 Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7 Constant (const byte*) PROCPORT#0 = ((byte*))1 @@ -2184,7 +2184,7 @@ Constant (const byte) gfx_init_plane_charset8::cr#0 = 0 Constant (const byte) gfx_init_plane_charset8::cp#0 = 0 Constant (const byte) gfx_init_plane_charset8::c#0 = 0 Constant (const byte/signed byte/word/signed word/dword/signed dword) gfx_init_plane_charset8::$14 = 16384/16384 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$1 = DTV_HIGHCOLOR#0|DTV_LINEAR#0 Constant (const byte) main::$4 = VIC_DEN#0|VIC_ECM#0 Constant (const byte) main::$7 = VIC_MCM#0|VIC_CSEL#0 @@ -2202,7 +2202,7 @@ Constant (const byte*) gfx_init_plane_charset8::$0 = CHARSET8#0/16384 Constant (const word) gfx_init_plane_charset8::$3 = ((word))CHARSET8#0 Constant (const byte*) gfx_init_plane_charset8::chargen#0 = CHARGEN#0+1 Constant (const byte) dtvSetCpuBankSegment1::cpuBankIdx#1 = ((byte))gfx_init_plane_charset8::$14 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$2 = main::$1|DTV_CHUNKY#0 Constant (const byte) main::$5 = main::$4|VIC_RSEL#0 Constant (const word/signed dword/dword) main::$13 = main::$12/16384 @@ -2212,7 +2212,7 @@ Constant (const byte) main::$27 = main::$26|VIC_RSEL#0 Constant (const byte) main::$31 = main::$30|VIC_RSEL#0 Constant (const byte) gfx_init_plane_charset8::gfxbCpuBank#0 = ((byte))gfx_init_plane_charset8::$0 Constant (const word) gfx_init_plane_charset8::$4 = gfx_init_plane_charset8::$3&16383 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$3 = main::$2|DTV_BADLINE_OFF#0 Constant (const byte/word/dword) main::$6 = main::$5|3 Constant (const byte) main::$14 = ((byte))main::$13 @@ -2222,20 +2222,20 @@ Constant (const byte/word/dword) main::$28 = main::$27|3 Constant (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0 = gfx_init_plane_charset8::gfxbCpuBank#0 Constant (const byte) gfx_init_plane_charset8::gfxbCpuBank#1 = ++gfx_init_plane_charset8::gfxbCpuBank#0 Constant (const word/signed dword/dword) gfx_init_plane_charset8::$5 = 16384+gfx_init_plane_charset8::$4 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte/word/dword) main::$15 = 3^main::$14 Constant (const byte) main::$19 = ((byte))main::$18 Constant (const byte) main::$23 = main::$22>>2 Constant (const byte*) gfx_init_plane_charset8::gfxa#0 = ((byte*))gfx_init_plane_charset8::$5 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$24 = main::$19|main::$23 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@3 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating unused constant (const byte) gfx_init_plane_charset8::gfxbCpuBank#1 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value main::j#1 ← ++ main::j#2 to ++ Resolved ranged comparison value if(main::j#1!=rangelast(0,15)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 16 Resolved ranged next value gfx_init_screen0::cx#1 ← ++ gfx_init_screen0::cx#2 to ++ @@ -2252,11 +2252,11 @@ Culled Empty Block (label) @3 Culled Empty Block (label) @4 Culled Empty Block (label) main::@2 Culled Empty Block (label) main::@6 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Self Phi Eliminated (byte) gfx_init_plane_charset8::ch#7 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) gfx_init_plane_charset8::ch#7 (byte) gfx_init_plane_charset8::ch#8 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#1 Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0 @@ -2320,15 +2320,13 @@ Constant inlined gfx_init_plane_charset8::$0 = (const byte*) CHARSET8#0/(word/si Constant inlined main::$7 = (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 Constant inlined main::$8 = <(const byte*) SCREEN#0 Constant inlined gfx_init_plane_charset8::$3 = ((word))(const byte*) CHARSET8#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @8 @end main main::@17 main::@1 main::@3 main::@5 main::@7 main::@8 gfx_init gfx_init::@1 gfx_init::@return gfx_init_plane_charset8 gfx_init_plane_charset8::@9 gfx_init_plane_charset8::@1 gfx_init_plane_charset8::@2 gfx_init_plane_charset8::@3 gfx_init_plane_charset8::@5 gfx_init_plane_charset8::@4 gfx_init_plane_charset8::@6 gfx_init_plane_charset8::@7 gfx_init_plane_charset8::@8 gfx_init_plane_charset8::@return dtvSetCpuBankSegment1 dtvSetCpuBankSegment1::@return gfx_init_screen0 gfx_init_screen0::@1 gfx_init_screen0::@2 gfx_init_screen0::@3 gfx_init_screen0::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@18(between main::@1 and main::@1) Added new block during phi lifting gfx_init_plane_charset8::@11(between gfx_init_plane_charset8::@7 and gfx_init_plane_charset8::@1) Added new block during phi lifting gfx_init_plane_charset8::@12(between gfx_init_plane_charset8::@6 and gfx_init_plane_charset8::@2) Added new block during phi lifting gfx_init_plane_charset8::@13(between gfx_init_plane_charset8::@4 and gfx_init_plane_charset8::@3) Added new block during phi lifting gfx_init_screen0::@5(between gfx_init_screen0::@3 and gfx_init_screen0::@1) Added new block during phi lifting gfx_init_screen0::@6(between gfx_init_screen0::@2 and gfx_init_screen0::@2) -Block Sequence Planned @begin @8 @end main main::@17 main::@1 main::@3 main::@5 main::@7 main::@8 main::@18 gfx_init gfx_init::@1 gfx_init::@return gfx_init_plane_charset8 gfx_init_plane_charset8::@9 gfx_init_plane_charset8::@1 gfx_init_plane_charset8::@2 gfx_init_plane_charset8::@3 gfx_init_plane_charset8::@5 gfx_init_plane_charset8::@4 gfx_init_plane_charset8::@6 gfx_init_plane_charset8::@7 gfx_init_plane_charset8::@8 gfx_init_plane_charset8::@return gfx_init_plane_charset8::@11 gfx_init_plane_charset8::@12 gfx_init_plane_charset8::@13 dtvSetCpuBankSegment1 dtvSetCpuBankSegment1::@return gfx_init_screen0 gfx_init_screen0::@1 gfx_init_screen0::@2 gfx_init_screen0::@3 gfx_init_screen0::@return gfx_init_screen0::@5 gfx_init_screen0::@6 Adding NOP phi() at start of @begin Adding NOP phi() at start of @8 Adding NOP phi() at start of @end @@ -2398,7 +2396,6 @@ Culled Empty Block (label) gfx_init_plane_charset8::@12 Culled Empty Block (label) gfx_init_plane_charset8::@13 Culled Empty Block (label) gfx_init_screen0::@5 Culled Empty Block (label) gfx_init_screen0::@6 -Block Sequence Planned @begin @8 @end main main::@17 main::@1 main::@3 main::@5 main::@7 main::@8 gfx_init gfx_init::@1 gfx_init::@return gfx_init_plane_charset8 gfx_init_plane_charset8::@9 gfx_init_plane_charset8::@1 gfx_init_plane_charset8::@2 gfx_init_plane_charset8::@3 gfx_init_plane_charset8::@5 gfx_init_plane_charset8::@4 gfx_init_plane_charset8::@6 gfx_init_plane_charset8::@7 gfx_init_plane_charset8::@8 gfx_init_plane_charset8::@return dtvSetCpuBankSegment1 dtvSetCpuBankSegment1::@return gfx_init_screen0 gfx_init_screen0::@1 gfx_init_screen0::@2 gfx_init_screen0::@3 gfx_init_screen0::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @8 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-8bppchunkystretch.log b/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-8bppchunkystretch.log index 87458ee48..4a627bfc6 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-8bppchunkystretch.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-8bppchunkystretch.log @@ -1769,9 +1769,9 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) gfx_init_chunky::@9 Culled Empty Block (label) @7 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) gfx_init_chunky::$4 ← (byte*) gfx_init_chunky::gfxb#3 != (word/dword/signed dword) 32768 from (bool~) gfx_init_chunky::$3 ← (byte*) gfx_init_chunky::gfxb#3 == (word/dword/signed dword) 32768 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) main::rst#2 = (byte) main::rst#3 Alias (byte) gfx_init_chunky::gfxbCpuBank#0 = (byte~) gfx_init_chunky::$1 (byte) gfx_init_chunky::gfxbCpuBank#3 Alias (byte) gfx_init_chunky::c#0 = (byte~) gfx_init_chunky::$7 @@ -1782,23 +1782,23 @@ Alias (byte) gfx_init_chunky::y#2 = (byte) gfx_init_chunky::y#3 Alias (byte*) gfx_init_chunky::gfxb#1 = (byte*) gfx_init_chunky::gfxb#6 Alias (byte) gfx_init_chunky::gfxbCpuBank#8 = (byte) gfx_init_chunky::gfxbCpuBank#9 Alias (byte) dtvSetCpuBankSegment1::cpuBankIdx#2 = (byte~) gfx_init_chunky::$11 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (word) gfx_init_chunky::x#2 = (word) gfx_init_chunky::x#3 Alias (byte) gfx_init_chunky::y#2 = (byte) gfx_init_chunky::y#4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) main::rst#2 Self Phi Eliminated (byte) gfx_init_chunky::y#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) main::rst#2 (byte) main::rst#0 Redundant Phi (byte) gfx_init_chunky::y#2 (byte) gfx_init_chunky::y#6 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$24 if((byte) main::j#1!=rangelast(0,15)) goto main::@1 Simple Condition (bool~) main::$28 if(*((byte*) RASTER#0)!=(byte) main::rst#0) goto main::@6 Simple Condition (bool~) main::$34 if((byte) main::rst#1!=(byte/word/signed word/dword/signed dword) 242) goto main::@8 Simple Condition (bool~) gfx_init_chunky::$4 if((byte*) gfx_init_chunky::gfxb#3!=(word/dword/signed dword) 32768) goto gfx_init_chunky::@3 Simple Condition (bool~) gfx_init_chunky::$8 if((word) gfx_init_chunky::x#1!=rangelast(0,319)) goto gfx_init_chunky::@2 Simple Condition (bool~) gfx_init_chunky::$9 if((byte) gfx_init_chunky::y#1!=rangelast(0,50)) goto gfx_init_chunky::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0 Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7 Constant (const byte*) PROCPORT#0 = ((byte*))1 @@ -1839,7 +1839,7 @@ Constant (const byte) gfx_init_chunky::y#0 = 0 Constant (const word) gfx_init_chunky::x#0 = 0 Constant (const byte*) gfx_init_chunky::gfxb#2 = ((byte*))16384 Constant (const byte/signed byte/word/signed word/dword/signed dword) gfx_init_chunky::$10 = 16384/16384 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$1 = DTV_HIGHCOLOR#0|DTV_LINEAR#0 Constant (const byte) main::$5 = VIC_DEN#0|VIC_ECM#0 Constant (const byte) main::$8 = VIC_MCM#0|VIC_CSEL#0 @@ -1852,7 +1852,7 @@ Constant (const byte) main::$25 = VIC_DEN#0|VIC_ECM#0 Constant (const byte) main::$29 = VIC_DEN#0|VIC_ECM#0 Constant (const byte*) gfx_init_chunky::$0 = CHUNKY#0/16384 Constant (const byte) dtvSetCpuBankSegment1::cpuBankIdx#2 = ((byte))gfx_init_chunky::$10 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$2 = main::$1|DTV_COLORRAM_OFF#0 Constant (const byte) main::$6 = main::$5|VIC_RSEL#0 Constant (const word/signed dword/dword) main::$12 = main::$11/16384 @@ -1861,7 +1861,7 @@ Constant (const word) main::$20 = main::$19&16383 Constant (const byte) main::$26 = main::$25|VIC_RSEL#0 Constant (const byte) main::$30 = main::$29|VIC_RSEL#0 Constant (const byte) gfx_init_chunky::gfxbCpuBank#0 = ((byte))gfx_init_chunky::$0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$3 = main::$2|DTV_CHUNKY#0 Constant (const byte/word/dword) main::$7 = main::$6|3 Constant (const byte) main::$13 = ((byte))main::$12 @@ -1870,18 +1870,18 @@ Constant (const byte) main::$21 = >main::$20 Constant (const byte/word/dword) main::$27 = main::$26|3 Constant (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0 = gfx_init_chunky::gfxbCpuBank#0 Constant (const byte) gfx_init_chunky::gfxbCpuBank#1 = ++gfx_init_chunky::gfxbCpuBank#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$4 = main::$3|DTV_BADLINE_OFF#0 Constant (const byte/word/dword) main::$14 = 3^main::$13 Constant (const byte) main::$18 = ((byte))main::$17 Constant (const byte) main::$22 = main::$21>>2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$23 = main::$18|main::$22 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@3 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value main::j#1 ← ++ main::j#2 to ++ Resolved ranged comparison value if(main::j#1!=rangelast(0,15)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 16 Resolved ranged next value gfx_init_chunky::x#1 ← ++ gfx_init_chunky::x#2 to ++ @@ -1893,7 +1893,7 @@ Culled Empty Block (label) @4 Culled Empty Block (label) main::@2 Culled Empty Block (label) main::@6 Culled Empty Block (label) gfx_init_chunky::@7 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#2 Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0 @@ -1945,13 +1945,11 @@ Constant inlined gfx_init_chunky::$0 = (const byte*) CHUNKY#0/(word/signed word/ Constant inlined main::$9 = <(const byte*) CHUNKY#0 Constant inlined main::$7 = (const byte) VIC_DEN#0|(const byte) VIC_ECM#0|(const byte) VIC_RSEL#0|(byte/signed byte/word/signed word/dword/signed dword) 3 Constant inlined main::$8 = (const byte) VIC_MCM#0|(const byte) VIC_CSEL#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @6 @end main main::@17 main::@1 main::@3 main::@5 main::@7 main::@8 gfx_init_chunky gfx_init_chunky::@1 gfx_init_chunky::@2 gfx_init_chunky::@4 gfx_init_chunky::@8 gfx_init_chunky::@3 gfx_init_chunky::@5 gfx_init_chunky::@6 gfx_init_chunky::@return dtvSetCpuBankSegment1 dtvSetCpuBankSegment1::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@18(between main::@1 and main::@1) Added new block during phi lifting gfx_init_chunky::@10(between gfx_init_chunky::@5 and gfx_init_chunky::@1) Added new block during phi lifting gfx_init_chunky::@11(between gfx_init_chunky::@3 and gfx_init_chunky::@2) Added new block during phi lifting gfx_init_chunky::@12(between gfx_init_chunky::@2 and gfx_init_chunky::@3) -Block Sequence Planned @begin @6 @end main main::@17 main::@1 main::@3 main::@5 main::@7 main::@8 main::@18 gfx_init_chunky gfx_init_chunky::@1 gfx_init_chunky::@2 gfx_init_chunky::@4 gfx_init_chunky::@8 gfx_init_chunky::@3 gfx_init_chunky::@5 gfx_init_chunky::@6 gfx_init_chunky::@return gfx_init_chunky::@10 gfx_init_chunky::@11 gfx_init_chunky::@12 dtvSetCpuBankSegment1 dtvSetCpuBankSegment1::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @6 Adding NOP phi() at start of @end @@ -1991,7 +1989,6 @@ Culled Empty Block (label) main::@18 Culled Empty Block (label) gfx_init_chunky::@10 Culled Empty Block (label) gfx_init_chunky::@11 Culled Empty Block (label) gfx_init_chunky::@12 -Block Sequence Planned @begin @6 @end main main::@17 main::@1 main::@3 main::@5 main::@7 main::@8 gfx_init_chunky gfx_init_chunky::@1 gfx_init_chunky::@2 gfx_init_chunky::@4 gfx_init_chunky::@8 gfx_init_chunky::@3 gfx_init_chunky::@5 gfx_init_chunky::@6 gfx_init_chunky::@return dtvSetCpuBankSegment1 dtvSetCpuBankSegment1::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @6 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-blittermin.log b/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-blittermin.log index d6d98b5f3..2bc2801f3 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-blittermin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-blittermin.log @@ -1439,18 +1439,18 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @6 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::r#1 = (byte) main::r#4 Alias (byte) main::r#2 = (byte) main::r#3 Alias (byte*) DTV_BLITTER_ALU#0 = (byte*) DTV_BLITTER_ALU#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) main::r#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) DTV_BLITTER_ALU#1 (byte*) DTV_BLITTER_ALU#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$16 if((byte~) main::$15!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 Simple Condition (bool~) main::$20 if((byte) main::r#1!=rangelast(0,7)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) DTV_FEATURE#0 = ((byte*))53311 Constant (const byte) DTV_FEATURE_ENABLE#0 = 1 Constant (const byte*) DTV_BLITTER_SRCA_LO#0 = ((byte*))54048 @@ -1503,7 +1503,7 @@ Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$7 = Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$10 = <256 Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$11 = >256 Constant (const byte) main::r#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$0 = SRCA#0 Constant (const byte) main::$4 = SCREEN#0 Constant (const byte) main::$12 = DTV_BLIT_FORCE_START#0|DTV_BLIT_SRCA_FWD#0 Constant (const byte) main::$17 = DTV_BLIT_FORCE_START#0|DTV_BLIT_SRCA_FWD#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$13 = main::$12|DTV_BLIT_SRCB_FWD#0 Constant (const byte) main::$18 = main::$17|DTV_BLIT_SRCB_FWD#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$14 = main::$13|DTV_BLIT_DEST_FWD#0 Constant (const byte) main::$19 = main::$18|DTV_BLIT_DEST_FWD#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::r#1 ← ++ main::r#2 to ++ Resolved ranged comparison value if(main::r#1!=rangelast(0,7)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8 Culled Empty Block (label) @3 Culled Empty Block (label) @4 Culled Empty Block (label) main::@1 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::r#0 Constant inlined main::r#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -1546,10 +1546,8 @@ Constant inlined main::$4 = <(const byte[]) SRCB#0 Constant inlined main::$9 = >(const byte*) SCREEN#0 Constant inlined main::$7 = >(word/signed word/dword/signed dword) 256 Constant inlined main::$8 = <(const byte*) SCREEN#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @5 @end main main::@2 main::@3 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@5(between main::@3 and main::@2) -Block Sequence Planned @begin @5 @end main main::@2 main::@3 main::@return main::@5 Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end @@ -1565,7 +1563,6 @@ Created 1 initial phi equivalence classes Coalesced [43] main::r#5 ← main::r#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@5 -Block Sequence Planned @begin @5 @end main main::@2 main::@3 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-color.log b/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-color.log index ef6939d43..1b5f742b5 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-color.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-color.log @@ -1276,11 +1276,11 @@ OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@2 Culled Empty Block (label) main::@5 Culled Empty Block (label) @6 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Simple Condition (bool~) main::$2 if(*((byte*) RASTER#0)!=(byte/signed byte/word/signed word/dword/signed dword) 64) goto main::@4 Simple Condition (bool~) main::$3 if((byte) main::r#1!=rangelast(49,255)) goto main::@7 Simple Condition (bool~) main::$4 if((byte) main::c#1!=rangelast(0,15)) goto main::@8 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) RASTER#0 = ((byte*))53266 Constant (const byte*) BGCOL#0 = ((byte*))53281 Constant (const byte*) DTV_FEATURE#0 = ((byte*))53311 @@ -1293,15 +1293,15 @@ Constant (const byte*) DTV_PALETTE#0 = ((byte*))53760 Constant (const byte[16]) main::palette#0 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 } Constant (const byte) main::r#0 = 49 Constant (const byte) main::c#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$0 = DTV_HIGHCOLOR#0|DTV_BORDER_OFF#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$1 = main::$0|DTV_BADLINE_OFF#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@4 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value main::r#1 ← ++ main::r#2 to ++ Resolved ranged comparison value if(main::r#1!=rangelast(49,255)) goto main::@7 to (byte/signed byte/word/signed word/dword/signed dword) 0 Resolved ranged next value main::c#1 ← ++ main::c#2 to ++ @@ -1309,7 +1309,7 @@ Resolved ranged comparison value if(main::c#1!=rangelast(0,15)) goto main::@8 to Culled Empty Block (label) @3 Culled Empty Block (label) main::@1 Culled Empty Block (label) main::@14 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::r#0 Inlining constant with var siblings (const byte) main::c#0 @@ -1317,11 +1317,9 @@ Constant inlined main::r#0 = (byte/signed byte/word/signed word/dword/signed dwo Constant inlined main::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::$1 = (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_BORDER_OFF#0|(const byte) DTV_BADLINE_OFF#0 Constant inlined main::$0 = (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_BORDER_OFF#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @5 @end main main::@4 main::@6 main::@7 main::@8 +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@17(between main::@7 and main::@7) Added new block during phi lifting main::@18(between main::@8 and main::@8) -Block Sequence Planned @begin @5 @end main main::@4 main::@6 main::@7 main::@8 main::@18 main::@17 Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end @@ -1338,7 +1336,6 @@ Coalesced [20] main::r#3 ← main::r#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) main::@18 Culled Empty Block (label) main::@17 -Block Sequence Planned @begin @5 @end main main::@4 main::@6 main::@7 main::@8 Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-gfxexplorer.log b/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-gfxexplorer.log index e9bab88b5..29003d9ce 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-gfxexplorer.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-gfxexplorer.log @@ -13953,7 +13953,7 @@ Culled Empty Block (label) gfx_init_plane_vertical2::@1 Culled Empty Block (label) gfx_init_plane_blank::@1 Culled Empty Block (label) gfx_init_plane_full::@1 Culled Empty Block (label) gfx_init_plane_fill::@6 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) print_str_lines::$2 ← (byte) print_str_lines::ch#0 == (byte) '@' from (bool~) print_str_lines::$1 ← (byte) print_str_lines::ch#0 != (byte) '@' Inversing boolean not (bool~) keyboard_event_scan::$6 ← (byte~) keyboard_event_scan::$4 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) keyboard_event_scan::$5 ← (byte~) keyboard_event_scan::$4 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) keyboard_event_scan::$8 ← (byte) keyboard_events_size#18 == (byte/signed byte/word/signed word/dword/signed dword) 8 from (bool~) keyboard_event_scan::$7 ← (byte) keyboard_events_size#18 != (byte/signed byte/word/signed word/dword/signed dword) 8 @@ -13992,7 +13992,7 @@ Inversing boolean not (bool~) form_control::$15 ← (byte) form_field_idx#6 != ( Inversing boolean not (bool~) form_control::$29 ← (byte) form_control::key_event#2 != (byte) KEY_SPACE#0 from (bool~) form_control::$28 ← (byte) form_control::key_event#2 == (byte) KEY_SPACE#0 Inversing boolean not (bool~) form_control::$27 ← *((byte[]) form_fields_val#0 + (byte) form_field_idx#19) <= *((byte[]) form_fields_max#0 + (byte) form_field_idx#19) from (bool~) form_control::$26 ← *((byte[]) form_fields_val#0 + (byte) form_field_idx#19) > *((byte[]) form_fields_max#0 + (byte) form_field_idx#19) Inversing boolean not (bool~) form_control::$25 ← *((byte[]) form_fields_val#0 + (byte) form_field_idx#20) != (byte/word/signed word/dword/signed dword) 255 from (bool~) form_control::$24 ← *((byte[]) form_fields_val#0 + (byte) form_field_idx#20) == (byte/word/signed word/dword/signed dword) 255 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Not aliassing identity: keyboard_events_size#58 keyboard_events_size#58 Not aliassing identity: keyboard_modifiers#58 keyboard_modifiers#58 Not aliassing identity: print_screen#35 print_screen#35 @@ -14445,7 +14445,7 @@ Alias (signed byte) form_cursor_count#17 = (signed byte) form_cursor_count#9 Alias (byte) keyboard_events_size#17 = (byte) keyboard_events_size#36 Alias (byte) keyboard_modifiers#16 = (byte) keyboard_modifiers#33 Alias (byte) form_field_idx#10 = (byte) form_field_idx#24 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: form_fields_cnt#59 form_fields_cnt#59 Not aliassing identity: keyboard_events_size#58 keyboard_events_size#58 Not aliassing identity: keyboard_modifiers#58 keyboard_modifiers#58 @@ -14506,7 +14506,7 @@ Alias (byte) form_fields_cnt#22 = (byte) form_fields_cnt#42 (byte) form_fields_c Alias (signed byte) form_cursor_count#15 = (signed byte) form_cursor_count#24 (signed byte) form_cursor_count#23 Alias (byte) keyboard_events_size#108 = (byte) keyboard_events_size#52 (byte) keyboard_events_size#49 Alias (byte) keyboard_modifiers#14 = (byte) keyboard_modifiers#51 (byte) keyboard_modifiers#48 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: form_fields_cnt#59 form_fields_cnt#59 Not aliassing identity: keyboard_events_size#58 keyboard_events_size#58 Not aliassing identity: keyboard_modifiers#58 keyboard_modifiers#58 @@ -14520,7 +14520,7 @@ Not aliassing identity: form_field_idx#39 form_field_idx#39 Not aliassing identity: form_fields_cnt#60 form_fields_cnt#60 Alias (byte) keyboard_events_size#108 = (byte) keyboard_events_size#16 Alias (byte) keyboard_modifiers#14 = (byte) keyboard_modifiers#15 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: form_fields_cnt#59 form_fields_cnt#59 Not aliassing identity: keyboard_events_size#58 keyboard_events_size#58 Not aliassing identity: keyboard_modifiers#58 keyboard_modifiers#58 @@ -14597,7 +14597,7 @@ Self Phi Eliminated (byte*) print_line_cursor#43 Self Phi Eliminated (byte*) print_char_cursor#45 Self Phi Eliminated (byte) form_fields_cnt#35 Self Phi Eliminated (byte) form_fields_cnt#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) print_line_cursor#36 (byte*) print_line_cursor#2 Redundant Phi (byte*) print_line_cursor#1 (byte*) print_line_cursor#22 Redundant Phi (byte*) print_char_cursor#2 (byte*) print_line_cursor#22 @@ -14742,7 +14742,7 @@ Redundant Phi (signed byte) form_cursor_count#17 (signed byte) form_cursor_count Redundant Phi (byte) keyboard_events_size#17 (byte) keyboard_events_size#27 Redundant Phi (byte) keyboard_modifiers#16 (byte) keyboard_modifiers#24 Redundant Phi (byte) form_field_idx#10 (byte) form_field_idx#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) print_char_cursor#47 (byte*) print_screen#9 Redundant Phi (byte*) print_line_cursor#45 (byte*) print_screen#9 Redundant Phi (byte*) print_screen#9 (byte*) print_screen#1 @@ -14751,7 +14751,7 @@ Redundant Phi (byte) keyboard_events_size#22 (byte) keyboard_events_size#100 Redundant Phi (byte*) print_screen#17 (byte*) print_screen#23 Redundant Phi (byte*) print_line_cursor#17 (byte*) print_line_cursor#42 Redundant Phi (byte*) print_char_cursor#18 (byte*) print_char_cursor#44 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) print_str_lines::$0 if(*((byte*) print_str_lines::str#3)!=(byte) '@') goto print_str_lines::@2 Simple Condition (bool~) print_str_lines::$2 if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@5 Simple Condition (bool~) print_str_lines::$3 if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@4 @@ -14896,7 +14896,7 @@ Simple Condition (bool~) form_control::$29 if((byte) form_control::key_event#0!= Simple Condition (bool~) form_control::$23 if((byte~) form_control::$22==(byte/signed byte/word/signed word/dword/signed dword) 0) goto form_control::@10 Simple Condition (bool~) form_control::$27 if(*((byte[]) form_fields_val#0 + (byte) form_field_idx#28)<=*((byte[]) form_fields_max#0 + (byte) form_field_idx#28)) goto form_control::@13 Simple Condition (bool~) form_control::$25 if(*((byte[]) form_fields_val#0 + (byte) form_field_idx#28)!=(byte/word/signed word/dword/signed dword) 255) goto form_control::@11 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0 Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7 Constant (const byte*) PROCPORT#0 = ((byte*))1 @@ -15100,7 +15100,7 @@ Constant (const byte) form_field_idx#8 = 0 Constant (const byte) form_control::return#3 = 0 Constant (const byte) form_control::return#4 = 0 Constant (const byte) form_control::return#5 = 255 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) KEY_MODIFIER_SHIFT#0 = KEY_MODIFIER_LSHIFT#0|KEY_MODIFIER_RSHIFT#0 Constant (const byte) keyboard_event_pressed::keycode#0 = KEY_LSHIFT#0 Constant (const byte) keyboard_event_pressed::keycode#1 = KEY_RSHIFT#0 @@ -15230,7 +15230,7 @@ Constant (const signed byte) form_cursor_count#26 = FORM_CURSOR_BLINK#0/2 Constant (const signed word/signed byte/signed dword) form_control::$3 = FORM_CURSOR_BLINK#0/2 Constant (const signed byte) form_cursor_count#6 = FORM_CURSOR_BLINK#0 Constant (const signed byte) form_cursor_count#7 = FORM_CURSOR_BLINK#0/2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) bitmap_init::$1 = >bitmap_init::bitmap#0 Constant (const string) $3 = " C64 DTV Graphics Mode Explorer @"+" @"+" PRESET 0 Standard Charset @"+" @" Constant (const string) $18 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @" @@ -15254,7 +15254,7 @@ Constant (const word/signed dword/dword) form_mode::$19 = form_mode::$18/16384 Constant (const byte/word/dword) form_mode::$23 = form_mode::$22|3 Constant (const word) form_mode::$25 = form_mode::$24&16383 Constant (const word) form_mode::$28 = form_mode::$27&16383 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const string) $4 = " C64 DTV Graphics Mode Explorer @"+" @"+" PRESET 0 Standard Charset @"+" @"+" CONTROL PLANE A VIC II @" Constant (const string) $19 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @" Constant (const byte) gfx_mode::vic_control#1 = gfx_mode::vic_control#0|VIC_ECM#0 @@ -15279,52 +15279,52 @@ Constant (const byte) form_mode::$17 = >form_mode::$16 Constant (const byte) form_mode::$20 = ((byte))form_mode::$19 Constant (const word/signed dword/dword) form_mode::$26 = form_mode::$25/64 Constant (const word/signed dword/dword) form_mode::$29 = form_mode::$28/1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const string) $5 = " C64 DTV Graphics Mode Explorer @"+" @"+" PRESET 0 Standard Charset @"+" @"+" CONTROL PLANE A VIC II @"+" bmm 0 pattern p0 screen s0 @" Constant (const string) $20 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @" Constant (const byte/word/dword) gfx_mode::$60 = 3^gfx_mode::$59 Constant (const byte/word/dword) form_mode::$21 = 3^form_mode::$20 Constant (const word/dword) form_mode::$30 = form_mode::$26|form_mode::$29 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const string) $6 = " C64 DTV Graphics Mode Explorer @"+" @"+" PRESET 0 Standard Charset @"+" @"+" CONTROL PLANE A VIC II @"+" bmm 0 pattern p0 screen s0 @"+" mcm 0 start 00 gfx g0 @" Constant (const string) $21 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @" Constant (const byte) form_mode::$31 = ((byte))form_mode::$30 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const string) $7 = " C64 DTV Graphics Mode Explorer @"+" @"+" PRESET 0 Standard Charset @"+" @"+" CONTROL PLANE A VIC II @"+" bmm 0 pattern p0 screen s0 @"+" mcm 0 start 00 gfx g0 @"+" ecm 0 step 00 colors c0 @" Constant (const string) $22 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @" -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const string) $8 = " C64 DTV Graphics Mode Explorer @"+" @"+" PRESET 0 Standard Charset @"+" @"+" CONTROL PLANE A VIC II @"+" bmm 0 pattern p0 screen s0 @"+" mcm 0 start 00 gfx g0 @"+" ecm 0 step 00 colors c0 @"+" hicolor 0 modulo 00 @" Constant (const string) $23 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm @" -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const string) $9 = " C64 DTV Graphics Mode Explorer @"+" @"+" PRESET 0 Standard Charset @"+" @"+" CONTROL PLANE A VIC II @"+" bmm 0 pattern p0 screen s0 @"+" mcm 0 start 00 gfx g0 @"+" ecm 0 step 00 colors c0 @"+" hicolor 0 modulo 00 @"+" linear 0 COLORS @" Constant (const string) $24 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm @"+" nnnnnnnnnnnn jjjjjjjjj @" -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const string) $10 = " C64 DTV Graphics Mode Explorer @"+" @"+" PRESET 0 Standard Charset @"+" @"+" CONTROL PLANE A VIC II @"+" bmm 0 pattern p0 screen s0 @"+" mcm 0 start 00 gfx g0 @"+" ecm 0 step 00 colors c0 @"+" hicolor 0 modulo 00 @"+" linear 0 COLORS @"+" color off 0 PLANE B palet 0 @" Constant (const string) $25 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm @"+" nnnnnnnnnnnn jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @" -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const string) $11 = " C64 DTV Graphics Mode Explorer @"+" @"+" PRESET 0 Standard Charset @"+" @"+" CONTROL PLANE A VIC II @"+" bmm 0 pattern p0 screen s0 @"+" mcm 0 start 00 gfx g0 @"+" ecm 0 step 00 colors c0 @"+" hicolor 0 modulo 00 @"+" linear 0 COLORS @"+" color off 0 PLANE B palet 0 @"+" chunky 0 pattern p0 bgcol0 00 @" Constant (const string) $26 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm @"+" nnnnnnnnnnnn jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @" -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const string) $12 = " C64 DTV Graphics Mode Explorer @"+" @"+" PRESET 0 Standard Charset @"+" @"+" CONTROL PLANE A VIC II @"+" bmm 0 pattern p0 screen s0 @"+" mcm 0 start 00 gfx g0 @"+" ecm 0 step 00 colors c0 @"+" hicolor 0 modulo 00 @"+" linear 0 COLORS @"+" color off 0 PLANE B palet 0 @"+" chunky 0 pattern p0 bgcol0 00 @"+" border off 0 start 00 bgcol1 00 @" Constant (const string) $27 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm @"+" nnnnnnnnnnnn jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @" -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const string) $13 = " C64 DTV Graphics Mode Explorer @"+" @"+" PRESET 0 Standard Charset @"+" @"+" CONTROL PLANE A VIC II @"+" bmm 0 pattern p0 screen s0 @"+" mcm 0 start 00 gfx g0 @"+" ecm 0 step 00 colors c0 @"+" hicolor 0 modulo 00 @"+" linear 0 COLORS @"+" color off 0 PLANE B palet 0 @"+" chunky 0 pattern p0 bgcol0 00 @"+" border off 0 start 00 bgcol1 00 @"+" overscan 0 step 00 bgcol2 00 @" Constant (const string) $28 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm @"+" nnnnnnnnnnnn jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @" -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const string) $14 = " C64 DTV Graphics Mode Explorer @"+" @"+" PRESET 0 Standard Charset @"+" @"+" CONTROL PLANE A VIC II @"+" bmm 0 pattern p0 screen s0 @"+" mcm 0 start 00 gfx g0 @"+" ecm 0 step 00 colors c0 @"+" hicolor 0 modulo 00 @"+" linear 0 COLORS @"+" color off 0 PLANE B palet 0 @"+" chunky 0 pattern p0 bgcol0 00 @"+" border off 0 start 00 bgcol1 00 @"+" overscan 0 step 00 bgcol2 00 @"+" modulo 00 bgcol3 00 @" Constant (const string) $29 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm @"+" nnnnnnnnnnnn jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @" -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte[]) FORM_TEXT#0 = " C64 DTV Graphics Mode Explorer @"+" @"+" PRESET 0 Standard Charset @"+" @"+" CONTROL PLANE A VIC II @"+" bmm 0 pattern p0 screen s0 @"+" mcm 0 start 00 gfx g0 @"+" ecm 0 step 00 colors c0 @"+" hicolor 0 modulo 00 @"+" linear 0 COLORS @"+" color off 0 PLANE B palet 0 @"+" chunky 0 pattern p0 bgcol0 00 @"+" border off 0 start 00 bgcol1 00 @"+" overscan 0 step 00 bgcol2 00 @"+" modulo 00 bgcol3 00 @"+"@" Constant (const string) $30 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm @"+" nnnnnnnnnnnn jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @" -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte[]) FORM_COLS#0 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa@"+" @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm ooooooooo @"+" nnnnnnnnnnnn mmmmmmmmmm @"+" nnnnnnnnnnnn jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+" nnnnnnnnnnnn mmmmmmmmmm jjjjjjjjj @"+"@" Constant (const byte*) print_str_lines::str#2 = FORM_TEXT#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) print_str_lines::str#1 = FORM_COLS#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in assignment *(gfx_init_vic_bitmap::lines_x#0+1 + gfx_init_vic_bitmap::$2) Consolidated array index constant in assignment *(gfx_init_vic_bitmap::lines_y#0+1 + gfx_init_vic_bitmap::$3) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination if(true) goto main::@2 Removing PHI-reference to removed block (gfx_mode::@16) in block gfx_mode::@return Removing PHI-reference to removed block (gfx_mode::@16) in block gfx_mode::@return @@ -15334,12 +15334,12 @@ Removing PHI-reference to removed block (form_mode::@2) in block form_mode::@ret Removing PHI-reference to removed block (form_mode::@2) in block form_mode::@return Removing PHI-reference to removed block (form_mode::@2) in block form_mode::@return if() condition always true - replacing block destination if(true) goto form_mode::@3 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Fixing inline constructor with bitmap_clear::$3 ← *(bitmap_plot_xhi#0 + 0) w= *(bitmap_plot_xlo#0 + 0) Fixing inline constructor with bitmap_plot::$2 ← *(bitmap_plot_xhi#0 + bitmap_plot::x#4) w= *(bitmap_plot_xlo#0 + bitmap_plot::x#4) Fixing inline constructor with bitmap_plot::$3 ← *(bitmap_plot_yhi#0 + bitmap_plot::y#4) w= *(bitmap_plot_ylo#0 + bitmap_plot::y#4) Fixing inline constructor with form_field_ptr::$2 ← *(form_line_hi#0 + form_field_ptr::y#0) w= *(form_line_lo#0 + form_field_ptr::y#0) -Succesful SSA optimization Pass2FixInlineConstructors +Successful SSA optimization Pass2FixInlineConstructors Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) gfx_init_vic_bitmap::$2 ← (byte) gfx_init_vic_bitmap::l#2 Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) gfx_init_vic_bitmap::$3 ← (byte) gfx_init_vic_bitmap::l#2 Eliminating unused variable - keeping the phi block (byte*) print_screen#14 @@ -15414,27 +15414,27 @@ Eliminating unused constant (const string) $28 Eliminating unused constant (const string) $14 Eliminating unused constant (const string) $29 Eliminating unused constant (const string) $30 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating unused variable - keeping the phi block (byte) keyboard_modifiers#24 Eliminating unused variable - keeping the phi block (byte) keyboard_modifiers#109 Eliminating unused variable - keeping the phi block (byte*) print_screen#23 Eliminating unused variable - keeping the phi block (byte*) print_line_cursor#42 Eliminating unused variable - keeping the phi block (byte*) print_char_cursor#44 Eliminating unused constant (const byte*) print_screen#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating unused variable - keeping the phi block (byte) keyboard_modifiers#11 Eliminating unused variable - keeping the phi block (byte) keyboard_modifiers#13 Eliminating unused constant (const byte) keyboard_modifiers#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating Noop Cast (byte*) bitmap_clear::bitmap#0 ← ((byte*)) (word~) bitmap_clear::$3 Eliminating Noop Cast (byte*) bitmap_plot::plotter#0 ← ((byte*)) (word~) bitmap_plot::$0 Eliminating Noop Cast (word~) gfx_mode::$62 ← ((word)) (byte*~) gfx_mode::$61 Eliminating Noop Cast (word~) gfx_mode::$67 ← ((word)) (byte*~) gfx_mode::$66 Eliminating Noop Cast (byte*) gfx_init_plane_fill::gfxb#0 ← ((byte*)) (word/signed dword/dword~) gfx_init_plane_fill::$6 Eliminating Noop Cast (byte*) form_field_ptr::line#0 ← ((byte*)) (word~) form_field_ptr::$2 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value keyboard_event_scan::row#1 ← ++ keyboard_event_scan::row#2 to ++ Resolved ranged comparison value if(keyboard_event_scan::row#1!=rangelast(0,7)) goto keyboard_event_scan::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8 Resolved ranged next value keyboard_event_scan::col#1 ← ++ keyboard_event_scan::col#2 to ++ @@ -15593,13 +15593,13 @@ Culled Empty Block (label) form_control::@11 Culled Empty Block (label) form_control::@13 Culled Empty Block (label) form_control::@14 Culled Empty Block (label) @63 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Not aliassing identity: keyboard_events_size#126 keyboard_events_size#126 Not aliassing identity: gfx_init_plane_fill::fill#4 gfx_init_plane_fill::fill#4 Alias (word) bitmap_plot::plotter_x#0 = (word~) bitmap_plot::$2 Alias (word) bitmap_plot::plotter_y#0 = (word~) bitmap_plot::$3 Alias (byte) gfx_init_vic_bitmap::l#2 = (byte~) gfx_init_vic_bitmap::$2 (byte~) gfx_init_vic_bitmap::$3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: keyboard_events_size#126 keyboard_events_size#126 Not aliassing identity: gfx_init_plane_fill::fill#4 gfx_init_plane_fill::fill#4 Self Phi Eliminated (byte) keyboard_events_size#126 @@ -15608,7 +15608,7 @@ Self Phi Eliminated (byte) gfx_init_plane_fill::fill#4 Self Phi Eliminated (byte) form_mode::preset_current#6 Self Phi Eliminated (byte) form_fields_cnt#55 Self Phi Eliminated (byte) form_fields_cnt#55 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) keyboard_events_size#126 (byte) keyboard_events_size#13 Redundant Phi (byte) keyboard_events_size#11 (byte) keyboard_events_size#24 Redundant Phi (byte) gfx_init_plane_charset8::ch#7 (byte) gfx_init_plane_charset8::ch#8 @@ -15617,17 +15617,17 @@ Redundant Phi (byte) form_fields_cnt#55 (const byte) form_fields_cnt#0 Redundant Phi (signed byte) form_cursor_count#13 (signed byte) form_cursor_count#16 Redundant Phi (byte) keyboard_events_size#13 (byte) keyboard_events_size#24 Redundant Phi (byte) form_field_idx#14 (byte) form_field_idx#18 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte) keyboard_events_size#45 (byte) keyboard_events_size#24 Redundant Phi (byte) form_fields_cnt#21 (const byte) form_fields_cnt#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) form_field_idx#7 = form_fields_cnt#0-1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(bitmap_plot_xhi#0+0) Consolidated array index constant in *(bitmap_plot_xlo#0+0) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Culled Empty Block (label) gfx_mode::@16 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#2 Inlining constant with var siblings (const byte) dtvSetCpuBankSegment1::cpuBankIdx#4 @@ -16000,7 +16000,7 @@ Constant inlined dtvSetCpuBankSegment1::cpuBankIdx#12 = ((byte))(word/signed wor Constant inlined dtvSetCpuBankSegment1::cpuBankIdx#10 = ((byte))(word/signed word/dword/signed dword) 16384/(word/signed word/dword/signed dword) 16384 Constant inlined gfx_init_charset::l#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined bitmap_init::$1 = >(const byte*) VIC_BITMAP#0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Inlining constant with var siblings (const byte*) render_preset_name::name#0 Inlining constant with var siblings (const byte*) render_preset_name::name#1 Inlining constant with var siblings (const byte*) render_preset_name::name#2 @@ -16029,7 +16029,7 @@ Inlining constant with var siblings (const byte*) render_preset_name::name#9 Inlining constant with var siblings (const byte*) render_preset_name::name#10 Inlining constant with var siblings (const byte*) render_preset_name::name#11 Constant inlined form_preset#0 = (const byte[]) form_fields_val#0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Inlining constant with var siblings (const byte*) render_preset_name::name#0 Inlining constant with var siblings (const byte*) render_preset_name::name#1 Inlining constant with var siblings (const byte*) render_preset_name::name#2 @@ -16054,7 +16054,6 @@ Inlining constant with var siblings (const byte*) render_preset_name::name#8 Inlining constant with var siblings (const byte*) render_preset_name::name#9 Inlining constant with var siblings (const byte*) render_preset_name::name#10 Inlining constant with var siblings (const byte*) render_preset_name::name#11 -Block Sequence Planned @begin @62 @end main main::@7 main::@1 main::@2 main::@9 gfx_mode gfx_mode::@23 gfx_mode::@1 gfx_mode::@24 gfx_mode::@2 gfx_mode::@25 gfx_mode::@3 gfx_mode::@26 gfx_mode::@4 gfx_mode::@27 gfx_mode::@5 gfx_mode::@28 gfx_mode::@6 gfx_mode::@29 gfx_mode::@7 gfx_mode::@30 gfx_mode::@8 gfx_mode::@31 gfx_mode::@9 gfx_mode::@46 gfx_mode::@47 gfx_mode::@48 gfx_mode::@49 gfx_mode::@50 gfx_mode::@10 gfx_mode::@11 gfx_mode::@32 gfx_mode::@33 gfx_mode::@13 gfx_mode::@19 gfx_mode::@21 gfx_mode::@51 gfx_mode::@52 gfx_mode::@return gfx_mode::@15 keyboard_event_get keyboard_event_get::@3 keyboard_event_get::@return keyboard_event_scan keyboard_event_scan::@1 keyboard_event_scan::@25 keyboard_event_scan::@13 keyboard_event_scan::@3 keyboard_event_scan::@20 keyboard_event_scan::@26 keyboard_event_scan::@21 keyboard_event_scan::@9 keyboard_event_scan::@27 keyboard_event_scan::@22 keyboard_event_scan::@10 keyboard_event_scan::@28 keyboard_event_scan::@23 keyboard_event_scan::@11 keyboard_event_scan::@29 keyboard_event_scan::@24 keyboard_event_scan::@return keyboard_event_scan::@4 keyboard_event_scan::@15 keyboard_event_scan::@16 keyboard_event_scan::@17 keyboard_event_scan::@5 keyboard_event_scan::@19 keyboard_event_scan::@7 keyboard_event_pressed keyboard_event_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return get_vic_screen get_vic_screen::@10 get_vic_screen::@11 get_vic_screen::@12 get_vic_screen::@13 get_vic_screen::@return get_vic_screen::@9 get_vic_charset get_vic_charset::@4 get_vic_charset::@return get_vic_charset::@3 get_plane get_plane::@28 get_plane::@29 get_plane::@30 get_plane::@31 get_plane::@32 get_plane::@33 get_plane::@34 get_plane::@35 get_plane::@36 get_plane::@37 get_plane::@38 get_plane::@39 get_plane::@40 get_plane::@return get_plane::@27 form_mode form_mode::@21 form_mode::@22 form_mode::@23 form_mode::@24 form_mode::@25 form_mode::@26 form_mode::@27 form_mode::@28 form_mode::@29 form_mode::@1 form_mode::@10 form_mode::@2 form_mode::@5 form_mode::@7 form_mode::@30 form_mode::@return form_mode::@8 form_mode::@18 form_mode::@31 form_mode::@32 render_preset_name render_preset_name::@23 render_preset_name::@24 render_preset_name::@25 render_preset_name::@26 render_preset_name::@27 render_preset_name::@28 render_preset_name::@29 render_preset_name::@30 render_preset_name::@31 render_preset_name::@32 render_preset_name::@33 render_preset_name::@22 render_preset_name::@return print_str_at print_str_at::@1 print_str_at::@return print_str_at::@2 form_render_values form_render_values::@1 form_render_values::@3 form_render_values::@return form_field_ptr form_field_ptr::@return apply_preset apply_preset::@24 apply_preset::@25 apply_preset::@26 apply_preset::@27 apply_preset::@28 apply_preset::@29 apply_preset::@30 apply_preset::@31 apply_preset::@32 apply_preset::@33 apply_preset::@34 apply_preset::@22 apply_preset::@23 apply_preset::@return form_control form_control::@33 form_control::@15 form_control::@1 form_control::@16 form_control::@3 form_control::@34 form_control::@35 form_control::@18 form_control::@19 form_control::@20 form_control::@7 form_control::@return form_control::@5 form_control::@22 form_control::@4 form_control::@24 form_control::@25 form_control::@26 form_control::@12 form_control::@10 form_control::@28 form_control::@9 form_control::@30 form_control::@2 form_set_screen form_set_screen::@1 form_set_screen::@return print_str_lines print_str_lines::@1 print_str_lines::@return print_str_lines::@4 print_str_lines::@8 print_str_lines::@5 print_str_lines::@9 print_ln print_ln::@1 print_ln::@return print_cls print_cls::@1 print_cls::@return print_set_screen print_set_screen::@return gfx_init gfx_init::@1 gfx_init::@2 gfx_init::@3 gfx_init::@4 gfx_init::@5 gfx_init::@6 gfx_init::@7 gfx_init::@8 gfx_init::@9 gfx_init::@10 gfx_init::@11 gfx_init::@12 gfx_init::@13 gfx_init::@14 gfx_init::@return gfx_init_plane_full gfx_init_plane_full::@return gfx_init_plane_fill gfx_init_plane_fill::@5 gfx_init_plane_fill::@1 gfx_init_plane_fill::@2 gfx_init_plane_fill::@3 gfx_init_plane_fill::@4 gfx_init_plane_fill::@return dtvSetCpuBankSegment1 dtvSetCpuBankSegment1::@return gfx_init_plane_blank gfx_init_plane_blank::@return gfx_init_plane_vertical2 gfx_init_plane_vertical2::@return gfx_init_plane_horisontal2 gfx_init_plane_horisontal2::@1 gfx_init_plane_horisontal2::@2 gfx_init_plane_horisontal2::@3 gfx_init_plane_horisontal2::@4 gfx_init_plane_horisontal2::@return gfx_init_plane_vertical gfx_init_plane_vertical::@1 gfx_init_plane_vertical::@2 gfx_init_plane_vertical::@3 gfx_init_plane_vertical::@4 gfx_init_plane_vertical::@return gfx_init_plane_horisontal gfx_init_plane_horisontal::@1 gfx_init_plane_horisontal::@2 gfx_init_plane_horisontal::@5 gfx_init_plane_horisontal::@4 gfx_init_plane_horisontal::@7 gfx_init_plane_horisontal::@8 gfx_init_plane_horisontal::@return gfx_init_plane_horisontal::@3 gfx_init_plane_charset8 gfx_init_plane_charset8::@9 gfx_init_plane_charset8::@1 gfx_init_plane_charset8::@2 gfx_init_plane_charset8::@3 gfx_init_plane_charset8::@5 gfx_init_plane_charset8::@4 gfx_init_plane_charset8::@6 gfx_init_plane_charset8::@7 gfx_init_plane_charset8::@8 gfx_init_plane_charset8::@return gfx_init_plane_8bppchunky gfx_init_plane_8bppchunky::@1 gfx_init_plane_8bppchunky::@2 gfx_init_plane_8bppchunky::@4 gfx_init_plane_8bppchunky::@8 gfx_init_plane_8bppchunky::@3 gfx_init_plane_8bppchunky::@5 gfx_init_plane_8bppchunky::@6 gfx_init_plane_8bppchunky::@return gfx_init_vic_bitmap gfx_init_vic_bitmap::@3 gfx_init_vic_bitmap::@1 gfx_init_vic_bitmap::@5 gfx_init_vic_bitmap::@return bitmap_line bitmap_line::@15 bitmap_line::@16 bitmap_line::@17 bitmap_line::@return bitmap_line::@3 bitmap_line::@2 bitmap_line::@20 bitmap_line::@6 bitmap_line::@1 bitmap_line::@23 bitmap_line::@24 bitmap_line::@10 bitmap_line::@9 bitmap_line::@27 bitmap_line::@13 bitmap_line_xdyi bitmap_line_xdyi::@1 bitmap_line_xdyi::@5 bitmap_line_xdyi::@3 bitmap_line_xdyi::@2 bitmap_line_xdyi::@return bitmap_plot bitmap_plot::@return bitmap_line_ydxi bitmap_line_ydxi::@1 bitmap_line_ydxi::@5 bitmap_line_ydxi::@3 bitmap_line_ydxi::@2 bitmap_line_ydxi::@return bitmap_line_xdyd bitmap_line_xdyd::@1 bitmap_line_xdyd::@5 bitmap_line_xdyd::@3 bitmap_line_xdyd::@2 bitmap_line_xdyd::@return bitmap_line_ydxd bitmap_line_ydxd::@1 bitmap_line_ydxd::@5 bitmap_line_ydxd::@3 bitmap_line_ydxd::@2 bitmap_line_ydxd::@return bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_init bitmap_init::@1 bitmap_init::@5 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return gfx_init_charset gfx_init_charset::@1 gfx_init_charset::@2 gfx_init_charset::@3 gfx_init_charset::@4 gfx_init_charset::@return gfx_init_screen4 gfx_init_screen4::@1 gfx_init_screen4::@2 gfx_init_screen4::@3 gfx_init_screen4::@return gfx_init_screen3 gfx_init_screen3::@1 gfx_init_screen3::@2 gfx_init_screen3::@3 gfx_init_screen3::@return gfx_init_screen2 gfx_init_screen2::@1 gfx_init_screen2::@2 gfx_init_screen2::@3 gfx_init_screen2::@return gfx_init_screen1 gfx_init_screen1::@1 gfx_init_screen1::@2 gfx_init_screen1::@3 gfx_init_screen1::@return gfx_init_screen0 gfx_init_screen0::@1 gfx_init_screen0::@2 gfx_init_screen0::@3 gfx_init_screen0::@return keyboard_init keyboard_init::@return Added new block during phi lifting gfx_mode::@53(between gfx_mode::@1 and gfx_mode::@2) Added new block during phi lifting gfx_mode::@54(between gfx_mode::@2 and gfx_mode::@3) Added new block during phi lifting gfx_mode::@55(between gfx_mode::@3 and gfx_mode::@4) @@ -16132,7 +16131,6 @@ Added new block during phi lifting gfx_init_screen1::@5(between gfx_init_screen1 Added new block during phi lifting gfx_init_screen1::@6(between gfx_init_screen1::@2 and gfx_init_screen1::@2) Added new block during phi lifting gfx_init_screen0::@5(between gfx_init_screen0::@3 and gfx_init_screen0::@1) Added new block during phi lifting gfx_init_screen0::@6(between gfx_init_screen0::@2 and gfx_init_screen0::@2) -Block Sequence Planned @begin @62 @end main main::@7 main::@1 main::@2 main::@9 gfx_mode gfx_mode::@23 gfx_mode::@1 gfx_mode::@24 gfx_mode::@2 gfx_mode::@25 gfx_mode::@3 gfx_mode::@26 gfx_mode::@4 gfx_mode::@27 gfx_mode::@5 gfx_mode::@28 gfx_mode::@6 gfx_mode::@29 gfx_mode::@7 gfx_mode::@30 gfx_mode::@8 gfx_mode::@31 gfx_mode::@9 gfx_mode::@46 gfx_mode::@47 gfx_mode::@48 gfx_mode::@49 gfx_mode::@50 gfx_mode::@10 gfx_mode::@11 gfx_mode::@32 gfx_mode::@33 gfx_mode::@13 gfx_mode::@19 gfx_mode::@21 gfx_mode::@51 gfx_mode::@52 gfx_mode::@return gfx_mode::@61 gfx_mode::@15 gfx_mode::@62 gfx_mode::@59 gfx_mode::@60 gfx_mode::@58 gfx_mode::@57 gfx_mode::@56 gfx_mode::@55 gfx_mode::@54 gfx_mode::@53 keyboard_event_get keyboard_event_get::@3 keyboard_event_get::@return keyboard_event_get::@7 keyboard_event_scan keyboard_event_scan::@1 keyboard_event_scan::@25 keyboard_event_scan::@13 keyboard_event_scan::@3 keyboard_event_scan::@20 keyboard_event_scan::@26 keyboard_event_scan::@21 keyboard_event_scan::@9 keyboard_event_scan::@27 keyboard_event_scan::@22 keyboard_event_scan::@10 keyboard_event_scan::@28 keyboard_event_scan::@23 keyboard_event_scan::@11 keyboard_event_scan::@29 keyboard_event_scan::@24 keyboard_event_scan::@return keyboard_event_scan::@33 keyboard_event_scan::@32 keyboard_event_scan::@31 keyboard_event_scan::@30 keyboard_event_scan::@35 keyboard_event_scan::@4 keyboard_event_scan::@15 keyboard_event_scan::@16 keyboard_event_scan::@17 keyboard_event_scan::@5 keyboard_event_scan::@19 keyboard_event_scan::@34 keyboard_event_scan::@7 keyboard_event_scan::@37 keyboard_event_scan::@36 keyboard_event_pressed keyboard_event_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return get_vic_screen get_vic_screen::@10 get_vic_screen::@11 get_vic_screen::@12 get_vic_screen::@13 get_vic_screen::@return get_vic_screen::@9 get_vic_charset get_vic_charset::@4 get_vic_charset::@return get_vic_charset::@3 get_plane get_plane::@28 get_plane::@29 get_plane::@30 get_plane::@31 get_plane::@32 get_plane::@33 get_plane::@34 get_plane::@35 get_plane::@36 get_plane::@37 get_plane::@38 get_plane::@39 get_plane::@40 get_plane::@return get_plane::@27 form_mode form_mode::@21 form_mode::@22 form_mode::@23 form_mode::@24 form_mode::@25 form_mode::@26 form_mode::@27 form_mode::@28 form_mode::@29 form_mode::@1 form_mode::@10 form_mode::@2 form_mode::@5 form_mode::@7 form_mode::@30 form_mode::@return form_mode::@8 form_mode::@18 form_mode::@31 form_mode::@32 form_mode::@35 form_mode::@34 render_preset_name render_preset_name::@23 render_preset_name::@24 render_preset_name::@25 render_preset_name::@26 render_preset_name::@27 render_preset_name::@28 render_preset_name::@29 render_preset_name::@30 render_preset_name::@31 render_preset_name::@32 render_preset_name::@33 render_preset_name::@22 render_preset_name::@return print_str_at print_str_at::@1 print_str_at::@return print_str_at::@2 form_render_values form_render_values::@1 form_render_values::@3 form_render_values::@return form_render_values::@4 form_field_ptr form_field_ptr::@return apply_preset apply_preset::@24 apply_preset::@25 apply_preset::@26 apply_preset::@27 apply_preset::@28 apply_preset::@29 apply_preset::@30 apply_preset::@31 apply_preset::@32 apply_preset::@33 apply_preset::@34 apply_preset::@22 apply_preset::@23 apply_preset::@return apply_preset::@47 form_control form_control::@33 form_control::@15 form_control::@1 form_control::@16 form_control::@3 form_control::@34 form_control::@35 form_control::@18 form_control::@19 form_control::@20 form_control::@7 form_control::@return form_control::@37 form_control::@5 form_control::@22 form_control::@38 form_control::@4 form_control::@24 form_control::@25 form_control::@26 form_control::@12 form_control::@10 form_control::@28 form_control::@9 form_control::@30 form_control::@39 form_control::@2 form_control::@36 form_set_screen form_set_screen::@1 form_set_screen::@return form_set_screen::@3 print_str_lines print_str_lines::@1 print_str_lines::@return print_str_lines::@12 print_str_lines::@4 print_str_lines::@8 print_str_lines::@5 print_str_lines::@9 print_str_lines::@13 print_str_lines::@14 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_cls print_cls::@1 print_cls::@return print_cls::@3 print_set_screen print_set_screen::@return gfx_init gfx_init::@1 gfx_init::@2 gfx_init::@3 gfx_init::@4 gfx_init::@5 gfx_init::@6 gfx_init::@7 gfx_init::@8 gfx_init::@9 gfx_init::@10 gfx_init::@11 gfx_init::@12 gfx_init::@13 gfx_init::@14 gfx_init::@return gfx_init_plane_full gfx_init_plane_full::@return gfx_init_plane_fill gfx_init_plane_fill::@5 gfx_init_plane_fill::@1 gfx_init_plane_fill::@2 gfx_init_plane_fill::@3 gfx_init_plane_fill::@4 gfx_init_plane_fill::@return gfx_init_plane_fill::@7 gfx_init_plane_fill::@8 dtvSetCpuBankSegment1 dtvSetCpuBankSegment1::@return gfx_init_plane_blank gfx_init_plane_blank::@return gfx_init_plane_vertical2 gfx_init_plane_vertical2::@return gfx_init_plane_horisontal2 gfx_init_plane_horisontal2::@1 gfx_init_plane_horisontal2::@2 gfx_init_plane_horisontal2::@3 gfx_init_plane_horisontal2::@4 gfx_init_plane_horisontal2::@return gfx_init_plane_horisontal2::@7 gfx_init_plane_horisontal2::@8 gfx_init_plane_vertical gfx_init_plane_vertical::@1 gfx_init_plane_vertical::@2 gfx_init_plane_vertical::@3 gfx_init_plane_vertical::@4 gfx_init_plane_vertical::@return gfx_init_plane_vertical::@7 gfx_init_plane_vertical::@8 gfx_init_plane_horisontal gfx_init_plane_horisontal::@1 gfx_init_plane_horisontal::@2 gfx_init_plane_horisontal::@5 gfx_init_plane_horisontal::@4 gfx_init_plane_horisontal::@7 gfx_init_plane_horisontal::@8 gfx_init_plane_horisontal::@return gfx_init_plane_horisontal::@11 gfx_init_plane_horisontal::@12 gfx_init_plane_horisontal::@3 gfx_init_plane_charset8 gfx_init_plane_charset8::@9 gfx_init_plane_charset8::@1 gfx_init_plane_charset8::@2 gfx_init_plane_charset8::@3 gfx_init_plane_charset8::@5 gfx_init_plane_charset8::@4 gfx_init_plane_charset8::@6 gfx_init_plane_charset8::@7 gfx_init_plane_charset8::@8 gfx_init_plane_charset8::@return gfx_init_plane_charset8::@11 gfx_init_plane_charset8::@12 gfx_init_plane_charset8::@13 gfx_init_plane_8bppchunky gfx_init_plane_8bppchunky::@1 gfx_init_plane_8bppchunky::@2 gfx_init_plane_8bppchunky::@4 gfx_init_plane_8bppchunky::@8 gfx_init_plane_8bppchunky::@3 gfx_init_plane_8bppchunky::@5 gfx_init_plane_8bppchunky::@6 gfx_init_plane_8bppchunky::@return gfx_init_plane_8bppchunky::@10 gfx_init_plane_8bppchunky::@11 gfx_init_plane_8bppchunky::@12 gfx_init_vic_bitmap gfx_init_vic_bitmap::@3 gfx_init_vic_bitmap::@1 gfx_init_vic_bitmap::@5 gfx_init_vic_bitmap::@return gfx_init_vic_bitmap::@6 bitmap_line bitmap_line::@15 bitmap_line::@16 bitmap_line::@17 bitmap_line::@return bitmap_line::@3 bitmap_line::@2 bitmap_line::@20 bitmap_line::@6 bitmap_line::@1 bitmap_line::@23 bitmap_line::@24 bitmap_line::@10 bitmap_line::@9 bitmap_line::@27 bitmap_line::@13 bitmap_line_xdyi bitmap_line_xdyi::@1 bitmap_line_xdyi::@5 bitmap_line_xdyi::@3 bitmap_line_xdyi::@2 bitmap_line_xdyi::@return bitmap_line_xdyi::@6 bitmap_line_xdyi::@7 bitmap_plot bitmap_plot::@return bitmap_line_ydxi bitmap_line_ydxi::@1 bitmap_line_ydxi::@5 bitmap_line_ydxi::@3 bitmap_line_ydxi::@2 bitmap_line_ydxi::@return bitmap_line_ydxi::@6 bitmap_line_ydxi::@7 bitmap_line_xdyd bitmap_line_xdyd::@1 bitmap_line_xdyd::@5 bitmap_line_xdyd::@3 bitmap_line_xdyd::@2 bitmap_line_xdyd::@return bitmap_line_xdyd::@6 bitmap_line_xdyd::@7 bitmap_line_ydxd bitmap_line_ydxd::@1 bitmap_line_ydxd::@5 bitmap_line_ydxd::@3 bitmap_line_ydxd::@2 bitmap_line_ydxd::@return bitmap_line_ydxd::@6 bitmap_line_ydxd::@7 bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_clear::@5 bitmap_clear::@6 bitmap_init bitmap_init::@1 bitmap_init::@5 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return bitmap_init::@11 bitmap_init::@12 bitmap_init::@9 bitmap_init::@10 gfx_init_charset gfx_init_charset::@1 gfx_init_charset::@2 gfx_init_charset::@3 gfx_init_charset::@4 gfx_init_charset::@return gfx_init_charset::@5 gfx_init_charset::@6 gfx_init_screen4 gfx_init_screen4::@1 gfx_init_screen4::@2 gfx_init_screen4::@3 gfx_init_screen4::@return gfx_init_screen4::@5 gfx_init_screen4::@6 gfx_init_screen3 gfx_init_screen3::@1 gfx_init_screen3::@2 gfx_init_screen3::@3 gfx_init_screen3::@return gfx_init_screen3::@5 gfx_init_screen3::@6 gfx_init_screen2 gfx_init_screen2::@1 gfx_init_screen2::@2 gfx_init_screen2::@3 gfx_init_screen2::@return gfx_init_screen2::@5 gfx_init_screen2::@6 gfx_init_screen1 gfx_init_screen1::@1 gfx_init_screen1::@2 gfx_init_screen1::@3 gfx_init_screen1::@return gfx_init_screen1::@5 gfx_init_screen1::@6 gfx_init_screen0 gfx_init_screen0::@1 gfx_init_screen0::@2 gfx_init_screen0::@3 gfx_init_screen0::@return gfx_init_screen0::@5 gfx_init_screen0::@6 keyboard_init keyboard_init::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @62 Adding NOP phi() at start of @end @@ -16729,7 +16727,6 @@ Culled Empty Block (label) gfx_init_screen1::@5 Culled Empty Block (label) gfx_init_screen1::@6 Culled Empty Block (label) gfx_init_screen0::@5 Culled Empty Block (label) gfx_init_screen0::@6 -Block Sequence Planned @begin @62 @end main main::@7 main::@1 main::@2 main::@9 gfx_mode gfx_mode::@23 gfx_mode::@1 gfx_mode::@24 gfx_mode::@2 gfx_mode::@25 gfx_mode::@3 gfx_mode::@26 gfx_mode::@4 gfx_mode::@27 gfx_mode::@5 gfx_mode::@28 gfx_mode::@6 gfx_mode::@29 gfx_mode::@7 gfx_mode::@30 gfx_mode::@8 gfx_mode::@31 gfx_mode::@9 gfx_mode::@46 gfx_mode::@47 gfx_mode::@48 gfx_mode::@49 gfx_mode::@50 gfx_mode::@10 gfx_mode::@11 gfx_mode::@32 gfx_mode::@33 gfx_mode::@13 gfx_mode::@19 gfx_mode::@21 gfx_mode::@51 gfx_mode::@52 gfx_mode::@return gfx_mode::@15 keyboard_event_get keyboard_event_get::@3 keyboard_event_get::@return keyboard_event_scan keyboard_event_scan::@1 keyboard_event_scan::@25 keyboard_event_scan::@13 keyboard_event_scan::@3 keyboard_event_scan::@20 keyboard_event_scan::@26 keyboard_event_scan::@21 keyboard_event_scan::@9 keyboard_event_scan::@27 keyboard_event_scan::@22 keyboard_event_scan::@10 keyboard_event_scan::@28 keyboard_event_scan::@23 keyboard_event_scan::@11 keyboard_event_scan::@29 keyboard_event_scan::@24 keyboard_event_scan::@return keyboard_event_scan::@4 keyboard_event_scan::@15 keyboard_event_scan::@16 keyboard_event_scan::@17 keyboard_event_scan::@5 keyboard_event_scan::@19 keyboard_event_scan::@7 keyboard_event_pressed keyboard_event_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return get_vic_screen get_vic_screen::@10 get_vic_screen::@11 get_vic_screen::@12 get_vic_screen::@13 get_vic_screen::@return get_vic_screen::@9 get_vic_charset get_vic_charset::@4 get_vic_charset::@return get_vic_charset::@3 get_plane get_plane::@28 get_plane::@29 get_plane::@30 get_plane::@31 get_plane::@32 get_plane::@33 get_plane::@34 get_plane::@35 get_plane::@36 get_plane::@37 get_plane::@38 get_plane::@39 get_plane::@40 get_plane::@return get_plane::@27 form_mode form_mode::@21 form_mode::@22 form_mode::@23 form_mode::@24 form_mode::@25 form_mode::@26 form_mode::@27 form_mode::@28 form_mode::@29 form_mode::@1 form_mode::@10 form_mode::@2 form_mode::@5 form_mode::@7 form_mode::@30 form_mode::@return form_mode::@8 form_mode::@18 form_mode::@31 form_mode::@32 render_preset_name render_preset_name::@23 render_preset_name::@24 render_preset_name::@25 render_preset_name::@26 render_preset_name::@27 render_preset_name::@28 render_preset_name::@29 render_preset_name::@30 render_preset_name::@31 render_preset_name::@32 render_preset_name::@33 render_preset_name::@22 render_preset_name::@return print_str_at print_str_at::@1 print_str_at::@return print_str_at::@2 form_render_values form_render_values::@1 form_render_values::@3 form_render_values::@return form_field_ptr form_field_ptr::@return apply_preset apply_preset::@24 apply_preset::@25 apply_preset::@26 apply_preset::@27 apply_preset::@28 apply_preset::@29 apply_preset::@30 apply_preset::@31 apply_preset::@32 apply_preset::@33 apply_preset::@34 apply_preset::@22 apply_preset::@23 apply_preset::@return form_control form_control::@33 form_control::@1 form_control::@16 form_control::@3 form_control::@34 form_control::@35 form_control::@18 form_control::@19 form_control::@7 form_control::@return form_control::@37 form_control::@5 form_control::@38 form_control::@4 form_control::@24 form_control::@25 form_control::@26 form_control::@12 form_control::@10 form_control::@28 form_control::@9 form_control::@39 form_control::@2 form_control::@36 form_set_screen form_set_screen::@1 form_set_screen::@return print_str_lines print_str_lines::@1 print_str_lines::@return print_str_lines::@4 print_str_lines::@8 print_str_lines::@5 print_str_lines::@9 print_ln print_ln::@1 print_ln::@return print_cls print_cls::@1 print_cls::@return print_set_screen print_set_screen::@return gfx_init gfx_init::@1 gfx_init::@2 gfx_init::@3 gfx_init::@4 gfx_init::@5 gfx_init::@6 gfx_init::@7 gfx_init::@8 gfx_init::@9 gfx_init::@10 gfx_init::@11 gfx_init::@12 gfx_init::@13 gfx_init::@14 gfx_init::@return gfx_init_plane_full gfx_init_plane_full::@return gfx_init_plane_fill gfx_init_plane_fill::@5 gfx_init_plane_fill::@1 gfx_init_plane_fill::@2 gfx_init_plane_fill::@3 gfx_init_plane_fill::@4 gfx_init_plane_fill::@return dtvSetCpuBankSegment1 dtvSetCpuBankSegment1::@return gfx_init_plane_blank gfx_init_plane_blank::@return gfx_init_plane_vertical2 gfx_init_plane_vertical2::@return gfx_init_plane_horisontal2 gfx_init_plane_horisontal2::@1 gfx_init_plane_horisontal2::@2 gfx_init_plane_horisontal2::@3 gfx_init_plane_horisontal2::@4 gfx_init_plane_horisontal2::@return gfx_init_plane_vertical gfx_init_plane_vertical::@1 gfx_init_plane_vertical::@2 gfx_init_plane_vertical::@3 gfx_init_plane_vertical::@4 gfx_init_plane_vertical::@return gfx_init_plane_horisontal gfx_init_plane_horisontal::@1 gfx_init_plane_horisontal::@2 gfx_init_plane_horisontal::@5 gfx_init_plane_horisontal::@4 gfx_init_plane_horisontal::@7 gfx_init_plane_horisontal::@8 gfx_init_plane_horisontal::@return gfx_init_plane_horisontal::@3 gfx_init_plane_charset8 gfx_init_plane_charset8::@9 gfx_init_plane_charset8::@1 gfx_init_plane_charset8::@2 gfx_init_plane_charset8::@3 gfx_init_plane_charset8::@5 gfx_init_plane_charset8::@4 gfx_init_plane_charset8::@6 gfx_init_plane_charset8::@7 gfx_init_plane_charset8::@8 gfx_init_plane_charset8::@return gfx_init_plane_8bppchunky gfx_init_plane_8bppchunky::@1 gfx_init_plane_8bppchunky::@2 gfx_init_plane_8bppchunky::@4 gfx_init_plane_8bppchunky::@8 gfx_init_plane_8bppchunky::@3 gfx_init_plane_8bppchunky::@5 gfx_init_plane_8bppchunky::@6 gfx_init_plane_8bppchunky::@return gfx_init_vic_bitmap gfx_init_vic_bitmap::@3 gfx_init_vic_bitmap::@1 gfx_init_vic_bitmap::@5 gfx_init_vic_bitmap::@return bitmap_line bitmap_line::@15 bitmap_line::@16 bitmap_line::@17 bitmap_line::@return bitmap_line::@3 bitmap_line::@2 bitmap_line::@20 bitmap_line::@6 bitmap_line::@1 bitmap_line::@23 bitmap_line::@24 bitmap_line::@10 bitmap_line::@9 bitmap_line::@27 bitmap_line::@13 bitmap_line_xdyi bitmap_line_xdyi::@1 bitmap_line_xdyi::@5 bitmap_line_xdyi::@3 bitmap_line_xdyi::@2 bitmap_line_xdyi::@return bitmap_plot bitmap_plot::@return bitmap_line_ydxi bitmap_line_ydxi::@1 bitmap_line_ydxi::@5 bitmap_line_ydxi::@3 bitmap_line_ydxi::@2 bitmap_line_ydxi::@return bitmap_line_xdyd bitmap_line_xdyd::@1 bitmap_line_xdyd::@5 bitmap_line_xdyd::@3 bitmap_line_xdyd::@2 bitmap_line_xdyd::@return bitmap_line_ydxd bitmap_line_ydxd::@1 bitmap_line_ydxd::@5 bitmap_line_ydxd::@3 bitmap_line_ydxd::@2 bitmap_line_ydxd::@return bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_init bitmap_init::@1 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return bitmap_init::@10 gfx_init_charset gfx_init_charset::@1 gfx_init_charset::@2 gfx_init_charset::@3 gfx_init_charset::@4 gfx_init_charset::@return gfx_init_screen4 gfx_init_screen4::@1 gfx_init_screen4::@2 gfx_init_screen4::@3 gfx_init_screen4::@return gfx_init_screen3 gfx_init_screen3::@1 gfx_init_screen3::@2 gfx_init_screen3::@3 gfx_init_screen3::@return gfx_init_screen2 gfx_init_screen2::@1 gfx_init_screen2::@2 gfx_init_screen2::@3 gfx_init_screen2::@return gfx_init_screen1 gfx_init_screen1::@1 gfx_init_screen1::@2 gfx_init_screen1::@3 gfx_init_screen1::@return gfx_init_screen0 gfx_init_screen0::@1 gfx_init_screen0::@2 gfx_init_screen0::@3 gfx_init_screen0::@return keyboard_init keyboard_init::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @62 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-gfxmodes.log b/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-gfxmodes.log index 5de982f11..14572ab9a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-gfxmodes.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/c64dtv-gfxmodes.log @@ -12490,7 +12490,7 @@ Culled Empty Block (label) bitmap_line::@33 Culled Empty Block (label) bitmap_line::@34 Culled Empty Block (label) bitmap_line::@35 Culled Empty Block (label) bitmap_line::@36 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) print_str_lines::$2 ← (byte) print_str_lines::ch#0 == (byte) '@' from (bool~) print_str_lines::$1 ← (byte) print_str_lines::ch#0 != (byte) '@' Inversing boolean not (bool~) bitmap_init::$4 ← (byte) bitmap_init::bits#1 != (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) bitmap_init::$3 ← (byte) bitmap_init::bits#1 == (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) bitmap_init::$12 ← (byte~) bitmap_init::$10 != (byte/signed byte/word/signed word/dword/signed dword) 7 from (bool~) bitmap_init::$11 ← (byte~) bitmap_init::$10 == (byte/signed byte/word/signed word/dword/signed dword) 7 @@ -12521,7 +12521,7 @@ Inversing boolean not (bool~) mode_ctrl::$30 ← (byte~) mode_ctrl::$28 == (byte Inversing boolean not (bool~) mode_ctrl::$32 ← (byte) mode_ctrl::ctrl#14 == (byte) dtv_control#72 from (bool~) mode_ctrl::$31 ← (byte) mode_ctrl::ctrl#14 != (byte) dtv_control#72 Inversing boolean not (bool~) mode_8bpppixelcell::$21 ← (byte~) mode_8bpppixelcell::$19 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) mode_8bpppixelcell::$20 ← (byte~) mode_8bpppixelcell::$19 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) mode_8bppchunkybmm::$21 ← (byte*) mode_8bppchunkybmm::gfxb#3 != (word/dword/signed dword) 32768 from (bool~) mode_8bppchunkybmm::$20 ← (byte*) mode_8bppchunkybmm::gfxb#3 == (word/dword/signed dword) 32768 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte*) print_screen#0 = (byte*) print_line_cursor#0 (byte*) print_char_cursor#0 (byte*) print_screen#80 (byte*) print_line_cursor#99 (byte*) print_char_cursor#99 (byte*) print_screen#66 (byte*) print_line_cursor#85 (byte*) print_char_cursor#85 (byte*) print_screen#65 (byte*) print_line_cursor#83 (byte*) print_char_cursor#84 (byte*) print_screen#50 (byte*) print_line_cursor#67 (byte*) print_char_cursor#70 (byte*) print_screen#33 (byte*) print_line_cursor#49 (byte*) print_char_cursor#51 Alias (byte*) print_str_lines::str#2 = (byte*) print_str_lines::str#6 Alias (byte*) print_char_cursor#19 = (byte*) print_char_cursor#53 (byte*) print_char_cursor#33 (byte*) print_char_cursor#3 @@ -12845,7 +12845,7 @@ Alias (byte*) print_screen#16 = (byte*) print_screen#7 Alias (byte*) print_line_cursor#15 = (byte*) print_line_cursor#29 Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#30 Alias (byte) dtv_control#54 = (byte) dtv_control#97 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: print_screen#20 print_screen#20 Not aliassing identity: print_line_cursor#36 print_line_cursor#36 Not aliassing identity: print_char_cursor#38 print_char_cursor#38 @@ -12890,7 +12890,7 @@ Alias (byte) dtv_control#127 = (byte) dtv_control#218 Alias (word) mode_8bppchunkybmm::x#2 = (word) mode_8bppchunkybmm::x#3 Alias (byte) mode_8bppchunkybmm::y#2 = (byte) mode_8bppchunkybmm::y#4 Alias (byte) dtv_control#128 = (byte) dtv_control#220 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: print_screen#15 print_screen#15 Not aliassing identity: print_line_cursor#14 print_line_cursor#14 Not aliassing identity: print_char_cursor#15 print_char_cursor#15 @@ -12979,7 +12979,7 @@ Self Phi Eliminated (byte) dtv_control#127 Self Phi Eliminated (byte) dtv_control#245 Self Phi Eliminated (byte) mode_8bppchunkybmm::y#2 Self Phi Eliminated (byte) dtv_control#128 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) print_str_lines::str#4 (byte*) print_str_lines::str#1 Redundant Phi (byte*) print_char_cursor#52 (byte*) print_char_cursor#13 Redundant Phi (byte*) print_line_cursor#50 (byte*) print_line_cursor#12 @@ -13126,9 +13126,9 @@ Redundant Phi (byte*) print_screen#16 (byte*) print_screen#13 Redundant Phi (byte*) print_line_cursor#15 (byte*) print_line_cursor#10 Redundant Phi (byte*) print_char_cursor#16 (byte*) print_char_cursor#11 Redundant Phi (byte) dtv_control#54 (byte) dtv_control#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte) dtv_control#16 (byte) dtv_control#114 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) print_str_lines::$0 if(*((byte*) print_str_lines::str#2)!=(byte) '@') goto print_str_lines::@2 Simple Condition (bool~) print_str_lines::$2 if((byte) print_str_lines::ch#0==(byte) '@') goto print_str_lines::@5 Simple Condition (bool~) print_str_lines::$3 if((byte) print_str_lines::ch#0!=(byte) '@') goto print_str_lines::@4 @@ -13234,7 +13234,7 @@ Simple Condition (bool~) mode_8bppchunkybmm::$16 if((byte) mode_8bppchunkybmm::i Simple Condition (bool~) mode_8bppchunkybmm::$21 if((byte*) mode_8bppchunkybmm::gfxb#3!=(word/dword/signed dword) 32768) goto mode_8bppchunkybmm::@4 Simple Condition (bool~) mode_8bppchunkybmm::$25 if((word) mode_8bppchunkybmm::x#1!=rangelast(0,319)) goto mode_8bppchunkybmm::@3 Simple Condition (bool~) mode_8bppchunkybmm::$26 if((byte) mode_8bppchunkybmm::y#1!=rangelast(0,199)) goto mode_8bppchunkybmm::@2 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0 Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7 Constant (const byte*) PROCPORT#0 = ((byte*))1 @@ -13432,7 +13432,7 @@ Constant (const byte) mode_8bppchunkybmm::y#0 = 0 Constant (const word) mode_8bppchunkybmm::x#0 = 0 Constant (const byte*) mode_8bppchunkybmm::gfxb#2 = ((byte*))16384 Constant (const byte/signed byte/word/signed word/dword/signed dword) mode_8bppchunkybmm::$27 = 16384/16384 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const string) $2 = "C64DTV Graphics Modes CCLHBME@"+" OHIIMCC@"+" LUNCMMM@" Constant (const dword) menu::$0 = ((dword))menu::CHARSET#0 Constant (const dword) menu::$3 = DTV_COLOR_BANK_DEFAULT#0/1024 @@ -13562,7 +13562,7 @@ Constant (const word) mode_8bppchunkybmm::$12 = mode_8bppchunkybmm::PLANEB#0 Constant (const dword) mode_8bppchunkybmm::$17 = mode_8bppchunkybmm::PLANEB#0/16384 Constant (const byte) dtvSetCpuBankSegment1::cpuBankIdx#2 = ((byte))mode_8bppchunkybmm::$27 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) print_screen#1 = print_set_screen::screen#0 Constant (const byte) bitmap_init::$1 = >bitmap_init::bitmap#0 Constant (const string) $3 = "C64DTV Graphics Modes CCLHBME@"+" OHIIMCC@"+" LUNCMMM@"+"----------------------------------------@" @@ -13639,7 +13639,7 @@ Constant (const byte) mode_8bppchunkybmm::$11 = mode_8bppchunkybmm::$12 Constant (const byte) mode_8bppchunkybmm::$15 = (const byte*) mode_stdbitmap::BITMAP#0 Constant inlined dtv_control#39 = (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0 Constant inlined dtv_control#36 = (const byte) DTV_HIGHCOLOR#0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero bitmap_plot_xhi#0+0 Simplifying constant plus zero bitmap_plot_xlo#0+0 -Block Sequence Planned @begin @48 @end main main::@2 menu menu::@1 menu::@2 menu::@19 menu::@47 menu::@48 menu::@4 menu::@50 menu::@22 menu::@return menu::@6 menu::@51 menu::@24 menu::@7 menu::@53 menu::@26 menu::@8 menu::@55 menu::@28 menu::@9 menu::@57 menu::@30 menu::@10 menu::@59 menu::@32 menu::@11 menu::@61 menu::@34 menu::@12 menu::@63 menu::@36 menu::@13 menu::@65 menu::@38 menu::@14 menu::@67 menu::@40 menu::@15 menu::@69 menu::@42 menu::@16 menu::@71 menu::@44 mode_8bppchunkybmm mode_8bppchunkybmm::@1 mode_8bppchunkybmm::@5 mode_8bppchunkybmm::@2 mode_8bppchunkybmm::@3 mode_8bppchunkybmm::@6 mode_8bppchunkybmm::@10 mode_8bppchunkybmm::@4 mode_8bppchunkybmm::@7 mode_8bppchunkybmm::@8 mode_8bppchunkybmm::@11 mode_8bppchunkybmm::@return mode_ctrl mode_ctrl::@1 mode_ctrl::@4 mode_ctrl::@6 mode_ctrl::@32 mode_ctrl::@return mode_ctrl::@7 mode_ctrl::@33 mode_ctrl::@23 mode_ctrl::@8 mode_ctrl::@34 mode_ctrl::@24 mode_ctrl::@9 mode_ctrl::@35 mode_ctrl::@25 mode_ctrl::@10 mode_ctrl::@36 mode_ctrl::@26 mode_ctrl::@11 mode_ctrl::@37 mode_ctrl::@27 mode_ctrl::@12 mode_ctrl::@38 mode_ctrl::@28 mode_ctrl::@13 mode_ctrl::@39 mode_ctrl::@29 mode_ctrl::@14 mode_ctrl::@30 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return dtvSetCpuBankSegment1 dtvSetCpuBankSegment1::@return mode_8bpppixelcell mode_8bpppixelcell::@1 mode_8bpppixelcell::@2 mode_8bpppixelcell::@3 mode_8bpppixelcell::@9 mode_8bpppixelcell::@10 mode_8bpppixelcell::@4 mode_8bpppixelcell::@5 mode_8bpppixelcell::@6 mode_8bpppixelcell::@11 mode_8bpppixelcell::@7 mode_8bpppixelcell::@12 mode_8bpppixelcell::@13 mode_8bpppixelcell::@14 mode_8bpppixelcell::@return mode_sixsfred mode_sixsfred::@1 mode_sixsfred::@8 mode_sixsfred::@2 mode_sixsfred::@3 mode_sixsfred::@9 mode_sixsfred::@4 mode_sixsfred::@5 mode_sixsfred::@11 mode_sixsfred::@6 mode_sixsfred::@7 mode_sixsfred::@13 mode_sixsfred::@14 mode_sixsfred::@return mode_twoplanebitmap mode_twoplanebitmap::@1 mode_twoplanebitmap::@10 mode_twoplanebitmap::@2 mode_twoplanebitmap::@3 mode_twoplanebitmap::@11 mode_twoplanebitmap::@4 mode_twoplanebitmap::@5 mode_twoplanebitmap::@13 mode_twoplanebitmap::@7 mode_twoplanebitmap::@15 mode_twoplanebitmap::@8 mode_twoplanebitmap::@9 mode_twoplanebitmap::@17 mode_twoplanebitmap::@18 mode_twoplanebitmap::@return mode_twoplanebitmap::@6 mode_sixsfred2 mode_sixsfred2::@1 mode_sixsfred2::@8 mode_sixsfred2::@2 mode_sixsfred2::@3 mode_sixsfred2::@9 mode_sixsfred2::@4 mode_sixsfred2::@5 mode_sixsfred2::@11 mode_sixsfred2::@6 mode_sixsfred2::@7 mode_sixsfred2::@13 mode_sixsfred2::@14 mode_sixsfred2::@return mode_hicolmcchar mode_hicolmcchar::@1 mode_hicolmcchar::@4 mode_hicolmcchar::@2 mode_hicolmcchar::@3 mode_hicolmcchar::@5 mode_hicolmcchar::@6 mode_hicolmcchar::@return mode_hicolecmchar mode_hicolecmchar::@1 mode_hicolecmchar::@4 mode_hicolecmchar::@2 mode_hicolecmchar::@3 mode_hicolecmchar::@5 mode_hicolecmchar::@6 mode_hicolecmchar::@return mode_hicolstdchar mode_hicolstdchar::@1 mode_hicolstdchar::@4 mode_hicolstdchar::@2 mode_hicolstdchar::@3 mode_hicolstdchar::@5 mode_hicolstdchar::@6 mode_hicolstdchar::@return mode_stdbitmap mode_stdbitmap::@1 mode_stdbitmap::@5 mode_stdbitmap::@2 mode_stdbitmap::@3 mode_stdbitmap::@6 mode_stdbitmap::@7 mode_stdbitmap::@9 mode_stdbitmap::@4 mode_stdbitmap::@11 mode_stdbitmap::@8 mode_stdbitmap::@return bitmap_line bitmap_line::@15 bitmap_line::@16 bitmap_line::@17 bitmap_line::@return bitmap_line::@3 bitmap_line::@2 bitmap_line::@20 bitmap_line::@6 bitmap_line::@1 bitmap_line::@23 bitmap_line::@24 bitmap_line::@10 bitmap_line::@9 bitmap_line::@27 bitmap_line::@13 bitmap_line_xdyi bitmap_line_xdyi::@1 bitmap_line_xdyi::@5 bitmap_line_xdyi::@3 bitmap_line_xdyi::@2 bitmap_line_xdyi::@return bitmap_plot bitmap_plot::@return bitmap_line_ydxi bitmap_line_ydxi::@1 bitmap_line_ydxi::@5 bitmap_line_ydxi::@3 bitmap_line_ydxi::@2 bitmap_line_ydxi::@return bitmap_line_xdyd bitmap_line_xdyd::@1 bitmap_line_xdyd::@5 bitmap_line_xdyd::@3 bitmap_line_xdyd::@2 bitmap_line_xdyd::@return bitmap_line_ydxd bitmap_line_ydxd::@1 bitmap_line_ydxd::@5 bitmap_line_ydxd::@3 bitmap_line_ydxd::@2 bitmap_line_ydxd::@return bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_init bitmap_init::@1 bitmap_init::@5 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return mode_mcchar mode_mcchar::@1 mode_mcchar::@4 mode_mcchar::@2 mode_mcchar::@3 mode_mcchar::@5 mode_mcchar::@6 mode_mcchar::@return mode_ecmchar mode_ecmchar::@1 mode_ecmchar::@4 mode_ecmchar::@2 mode_ecmchar::@3 mode_ecmchar::@5 mode_ecmchar::@6 mode_ecmchar::@return mode_stdchar mode_stdchar::@1 mode_stdchar::@4 mode_stdchar::@2 mode_stdchar::@3 mode_stdchar::@5 mode_stdchar::@6 mode_stdchar::@return print_str_lines print_str_lines::@1 print_str_lines::@return print_str_lines::@4 print_str_lines::@8 print_str_lines::@5 print_str_lines::@9 print_ln print_ln::@1 print_ln::@return print_cls print_cls::@1 print_cls::@return print_set_screen print_set_screen::@return Added new block during phi lifting menu::@74(between menu::@1 and menu::@1) Added new block during phi lifting menu::@75(between menu::@2 and menu::@2) Added new block during phi lifting mode_8bppchunkybmm::@13(between mode_8bppchunkybmm::@1 and mode_8bppchunkybmm::@1) @@ -14613,7 +14612,6 @@ Added new block during phi lifting print_str_lines::@13(between print_str_lines: Added new block during phi lifting print_str_lines::@14(between print_str_lines::@4 and print_str_lines::@5) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) -Block Sequence Planned @begin @48 @end main main::@2 menu menu::@1 menu::@2 menu::@19 menu::@47 menu::@48 menu::@4 menu::@50 menu::@22 menu::@return menu::@6 menu::@51 menu::@24 menu::@7 menu::@53 menu::@26 menu::@8 menu::@55 menu::@28 menu::@9 menu::@57 menu::@30 menu::@10 menu::@59 menu::@32 menu::@11 menu::@61 menu::@34 menu::@12 menu::@63 menu::@36 menu::@13 menu::@65 menu::@38 menu::@14 menu::@67 menu::@40 menu::@15 menu::@69 menu::@42 menu::@16 menu::@71 menu::@44 menu::@75 menu::@74 mode_8bppchunkybmm mode_8bppchunkybmm::@1 mode_8bppchunkybmm::@5 mode_8bppchunkybmm::@2 mode_8bppchunkybmm::@3 mode_8bppchunkybmm::@6 mode_8bppchunkybmm::@10 mode_8bppchunkybmm::@4 mode_8bppchunkybmm::@7 mode_8bppchunkybmm::@8 mode_8bppchunkybmm::@11 mode_8bppchunkybmm::@return mode_8bppchunkybmm::@14 mode_8bppchunkybmm::@15 mode_8bppchunkybmm::@16 mode_8bppchunkybmm::@13 mode_ctrl mode_ctrl::@1 mode_ctrl::@4 mode_ctrl::@6 mode_ctrl::@32 mode_ctrl::@return mode_ctrl::@7 mode_ctrl::@33 mode_ctrl::@23 mode_ctrl::@8 mode_ctrl::@34 mode_ctrl::@24 mode_ctrl::@9 mode_ctrl::@35 mode_ctrl::@25 mode_ctrl::@10 mode_ctrl::@36 mode_ctrl::@26 mode_ctrl::@11 mode_ctrl::@37 mode_ctrl::@27 mode_ctrl::@12 mode_ctrl::@38 mode_ctrl::@28 mode_ctrl::@13 mode_ctrl::@39 mode_ctrl::@29 mode_ctrl::@14 mode_ctrl::@30 mode_ctrl::@46 mode_ctrl::@45 mode_ctrl::@44 mode_ctrl::@43 mode_ctrl::@42 mode_ctrl::@41 mode_ctrl::@40 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return dtvSetCpuBankSegment1 dtvSetCpuBankSegment1::@return mode_8bpppixelcell mode_8bpppixelcell::@1 mode_8bpppixelcell::@2 mode_8bpppixelcell::@3 mode_8bpppixelcell::@9 mode_8bpppixelcell::@10 mode_8bpppixelcell::@4 mode_8bpppixelcell::@5 mode_8bpppixelcell::@6 mode_8bpppixelcell::@11 mode_8bpppixelcell::@7 mode_8bpppixelcell::@12 mode_8bpppixelcell::@13 mode_8bpppixelcell::@14 mode_8bpppixelcell::@return mode_8bpppixelcell::@19 mode_8bpppixelcell::@20 mode_8bpppixelcell::@21 mode_8bpppixelcell::@17 mode_8bpppixelcell::@18 mode_8bpppixelcell::@16 mode_sixsfred mode_sixsfred::@1 mode_sixsfred::@8 mode_sixsfred::@2 mode_sixsfred::@3 mode_sixsfred::@9 mode_sixsfred::@4 mode_sixsfred::@5 mode_sixsfred::@11 mode_sixsfred::@6 mode_sixsfred::@7 mode_sixsfred::@13 mode_sixsfred::@14 mode_sixsfred::@return mode_sixsfred::@21 mode_sixsfred::@22 mode_sixsfred::@19 mode_sixsfred::@20 mode_sixsfred::@17 mode_sixsfred::@18 mode_sixsfred::@16 mode_twoplanebitmap mode_twoplanebitmap::@1 mode_twoplanebitmap::@10 mode_twoplanebitmap::@2 mode_twoplanebitmap::@3 mode_twoplanebitmap::@11 mode_twoplanebitmap::@4 mode_twoplanebitmap::@5 mode_twoplanebitmap::@13 mode_twoplanebitmap::@7 mode_twoplanebitmap::@15 mode_twoplanebitmap::@8 mode_twoplanebitmap::@9 mode_twoplanebitmap::@17 mode_twoplanebitmap::@18 mode_twoplanebitmap::@return mode_twoplanebitmap::@25 mode_twoplanebitmap::@26 mode_twoplanebitmap::@23 mode_twoplanebitmap::@24 mode_twoplanebitmap::@6 mode_twoplanebitmap::@21 mode_twoplanebitmap::@22 mode_twoplanebitmap::@20 mode_sixsfred2 mode_sixsfred2::@1 mode_sixsfred2::@8 mode_sixsfred2::@2 mode_sixsfred2::@3 mode_sixsfred2::@9 mode_sixsfred2::@4 mode_sixsfred2::@5 mode_sixsfred2::@11 mode_sixsfred2::@6 mode_sixsfred2::@7 mode_sixsfred2::@13 mode_sixsfred2::@14 mode_sixsfred2::@return mode_sixsfred2::@21 mode_sixsfred2::@22 mode_sixsfred2::@19 mode_sixsfred2::@20 mode_sixsfred2::@17 mode_sixsfred2::@18 mode_sixsfred2::@16 mode_hicolmcchar mode_hicolmcchar::@1 mode_hicolmcchar::@4 mode_hicolmcchar::@2 mode_hicolmcchar::@3 mode_hicolmcchar::@5 mode_hicolmcchar::@6 mode_hicolmcchar::@return mode_hicolmcchar::@9 mode_hicolmcchar::@10 mode_hicolmcchar::@8 mode_hicolecmchar mode_hicolecmchar::@1 mode_hicolecmchar::@4 mode_hicolecmchar::@2 mode_hicolecmchar::@3 mode_hicolecmchar::@5 mode_hicolecmchar::@6 mode_hicolecmchar::@return mode_hicolecmchar::@9 mode_hicolecmchar::@10 mode_hicolecmchar::@8 mode_hicolstdchar mode_hicolstdchar::@1 mode_hicolstdchar::@4 mode_hicolstdchar::@2 mode_hicolstdchar::@3 mode_hicolstdchar::@5 mode_hicolstdchar::@6 mode_hicolstdchar::@return mode_hicolstdchar::@9 mode_hicolstdchar::@10 mode_hicolstdchar::@8 mode_stdbitmap mode_stdbitmap::@1 mode_stdbitmap::@5 mode_stdbitmap::@2 mode_stdbitmap::@3 mode_stdbitmap::@6 mode_stdbitmap::@7 mode_stdbitmap::@9 mode_stdbitmap::@4 mode_stdbitmap::@11 mode_stdbitmap::@8 mode_stdbitmap::@return mode_stdbitmap::@16 mode_stdbitmap::@14 mode_stdbitmap::@15 mode_stdbitmap::@13 bitmap_line bitmap_line::@15 bitmap_line::@16 bitmap_line::@17 bitmap_line::@return bitmap_line::@3 bitmap_line::@2 bitmap_line::@20 bitmap_line::@6 bitmap_line::@1 bitmap_line::@23 bitmap_line::@24 bitmap_line::@10 bitmap_line::@9 bitmap_line::@27 bitmap_line::@13 bitmap_line_xdyi bitmap_line_xdyi::@1 bitmap_line_xdyi::@5 bitmap_line_xdyi::@3 bitmap_line_xdyi::@2 bitmap_line_xdyi::@return bitmap_line_xdyi::@6 bitmap_line_xdyi::@7 bitmap_plot bitmap_plot::@return bitmap_line_ydxi bitmap_line_ydxi::@1 bitmap_line_ydxi::@5 bitmap_line_ydxi::@3 bitmap_line_ydxi::@2 bitmap_line_ydxi::@return bitmap_line_ydxi::@6 bitmap_line_ydxi::@7 bitmap_line_xdyd bitmap_line_xdyd::@1 bitmap_line_xdyd::@5 bitmap_line_xdyd::@3 bitmap_line_xdyd::@2 bitmap_line_xdyd::@return bitmap_line_xdyd::@6 bitmap_line_xdyd::@7 bitmap_line_ydxd bitmap_line_ydxd::@1 bitmap_line_ydxd::@5 bitmap_line_ydxd::@3 bitmap_line_ydxd::@2 bitmap_line_ydxd::@return bitmap_line_ydxd::@6 bitmap_line_ydxd::@7 bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_clear::@5 bitmap_clear::@6 bitmap_init bitmap_init::@1 bitmap_init::@5 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return bitmap_init::@11 bitmap_init::@12 bitmap_init::@9 bitmap_init::@10 mode_mcchar mode_mcchar::@1 mode_mcchar::@4 mode_mcchar::@2 mode_mcchar::@3 mode_mcchar::@5 mode_mcchar::@6 mode_mcchar::@return mode_mcchar::@9 mode_mcchar::@10 mode_mcchar::@8 mode_ecmchar mode_ecmchar::@1 mode_ecmchar::@4 mode_ecmchar::@2 mode_ecmchar::@3 mode_ecmchar::@5 mode_ecmchar::@6 mode_ecmchar::@return mode_ecmchar::@9 mode_ecmchar::@10 mode_ecmchar::@8 mode_stdchar mode_stdchar::@1 mode_stdchar::@4 mode_stdchar::@2 mode_stdchar::@3 mode_stdchar::@5 mode_stdchar::@6 mode_stdchar::@return mode_stdchar::@9 mode_stdchar::@10 mode_stdchar::@8 print_str_lines print_str_lines::@1 print_str_lines::@return print_str_lines::@12 print_str_lines::@4 print_str_lines::@8 print_str_lines::@5 print_str_lines::@9 print_str_lines::@13 print_str_lines::@14 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_cls print_cls::@1 print_cls::@return print_cls::@3 print_set_screen print_set_screen::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @48 Adding NOP phi() at start of @end @@ -15090,7 +15088,6 @@ Culled Empty Block (label) print_str_lines::@13 Culled Empty Block (label) print_str_lines::@14 Culled Empty Block (label) print_ln::@3 Culled Empty Block (label) print_cls::@3 -Block Sequence Planned @begin @48 @end main main::@2 menu menu::@1 menu::@2 menu::@19 menu::@47 menu::@48 menu::@4 menu::@50 menu::@22 menu::@return menu::@6 menu::@51 menu::@24 menu::@7 menu::@53 menu::@26 menu::@8 menu::@55 menu::@28 menu::@9 menu::@57 menu::@30 menu::@10 menu::@59 menu::@32 menu::@11 menu::@61 menu::@34 menu::@12 menu::@63 menu::@36 menu::@13 menu::@65 menu::@38 menu::@14 menu::@67 menu::@40 menu::@15 menu::@69 menu::@42 menu::@16 menu::@71 menu::@44 mode_8bppchunkybmm mode_8bppchunkybmm::@1 mode_8bppchunkybmm::@5 mode_8bppchunkybmm::@2 mode_8bppchunkybmm::@3 mode_8bppchunkybmm::@6 mode_8bppchunkybmm::@10 mode_8bppchunkybmm::@4 mode_8bppchunkybmm::@7 mode_8bppchunkybmm::@8 mode_8bppchunkybmm::@11 mode_8bppchunkybmm::@return mode_ctrl mode_ctrl::@1 mode_ctrl::@4 mode_ctrl::@6 mode_ctrl::@32 mode_ctrl::@return mode_ctrl::@7 mode_ctrl::@33 mode_ctrl::@23 mode_ctrl::@8 mode_ctrl::@34 mode_ctrl::@24 mode_ctrl::@9 mode_ctrl::@35 mode_ctrl::@25 mode_ctrl::@10 mode_ctrl::@36 mode_ctrl::@26 mode_ctrl::@11 mode_ctrl::@37 mode_ctrl::@27 mode_ctrl::@12 mode_ctrl::@38 mode_ctrl::@28 mode_ctrl::@13 mode_ctrl::@39 mode_ctrl::@14 mode_ctrl::@30 mode_ctrl::@46 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return dtvSetCpuBankSegment1 dtvSetCpuBankSegment1::@return mode_8bpppixelcell mode_8bpppixelcell::@1 mode_8bpppixelcell::@2 mode_8bpppixelcell::@3 mode_8bpppixelcell::@9 mode_8bpppixelcell::@10 mode_8bpppixelcell::@4 mode_8bpppixelcell::@5 mode_8bpppixelcell::@6 mode_8bpppixelcell::@11 mode_8bpppixelcell::@7 mode_8bpppixelcell::@12 mode_8bpppixelcell::@13 mode_8bpppixelcell::@14 mode_8bpppixelcell::@return mode_sixsfred mode_sixsfred::@1 mode_sixsfred::@8 mode_sixsfred::@2 mode_sixsfred::@3 mode_sixsfred::@9 mode_sixsfred::@4 mode_sixsfred::@5 mode_sixsfred::@11 mode_sixsfred::@6 mode_sixsfred::@7 mode_sixsfred::@13 mode_sixsfred::@14 mode_sixsfred::@return mode_twoplanebitmap mode_twoplanebitmap::@1 mode_twoplanebitmap::@10 mode_twoplanebitmap::@2 mode_twoplanebitmap::@3 mode_twoplanebitmap::@11 mode_twoplanebitmap::@4 mode_twoplanebitmap::@5 mode_twoplanebitmap::@13 mode_twoplanebitmap::@7 mode_twoplanebitmap::@15 mode_twoplanebitmap::@8 mode_twoplanebitmap::@9 mode_twoplanebitmap::@17 mode_twoplanebitmap::@18 mode_twoplanebitmap::@return mode_twoplanebitmap::@6 mode_sixsfred2 mode_sixsfred2::@1 mode_sixsfred2::@8 mode_sixsfred2::@2 mode_sixsfred2::@3 mode_sixsfred2::@9 mode_sixsfred2::@4 mode_sixsfred2::@5 mode_sixsfred2::@11 mode_sixsfred2::@6 mode_sixsfred2::@7 mode_sixsfred2::@13 mode_sixsfred2::@14 mode_sixsfred2::@return mode_hicolmcchar mode_hicolmcchar::@1 mode_hicolmcchar::@4 mode_hicolmcchar::@2 mode_hicolmcchar::@3 mode_hicolmcchar::@5 mode_hicolmcchar::@6 mode_hicolmcchar::@return mode_hicolecmchar mode_hicolecmchar::@1 mode_hicolecmchar::@4 mode_hicolecmchar::@2 mode_hicolecmchar::@3 mode_hicolecmchar::@5 mode_hicolecmchar::@6 mode_hicolecmchar::@return mode_hicolstdchar mode_hicolstdchar::@1 mode_hicolstdchar::@4 mode_hicolstdchar::@2 mode_hicolstdchar::@3 mode_hicolstdchar::@5 mode_hicolstdchar::@6 mode_hicolstdchar::@return mode_stdbitmap mode_stdbitmap::@1 mode_stdbitmap::@5 mode_stdbitmap::@2 mode_stdbitmap::@3 mode_stdbitmap::@6 mode_stdbitmap::@7 mode_stdbitmap::@9 mode_stdbitmap::@4 mode_stdbitmap::@11 mode_stdbitmap::@8 mode_stdbitmap::@return bitmap_line bitmap_line::@15 bitmap_line::@16 bitmap_line::@17 bitmap_line::@return bitmap_line::@3 bitmap_line::@2 bitmap_line::@20 bitmap_line::@6 bitmap_line::@1 bitmap_line::@23 bitmap_line::@24 bitmap_line::@10 bitmap_line::@9 bitmap_line::@27 bitmap_line::@13 bitmap_line_xdyi bitmap_line_xdyi::@1 bitmap_line_xdyi::@5 bitmap_line_xdyi::@3 bitmap_line_xdyi::@2 bitmap_line_xdyi::@return bitmap_plot bitmap_plot::@return bitmap_line_ydxi bitmap_line_ydxi::@1 bitmap_line_ydxi::@5 bitmap_line_ydxi::@3 bitmap_line_ydxi::@2 bitmap_line_ydxi::@return bitmap_line_xdyd bitmap_line_xdyd::@1 bitmap_line_xdyd::@5 bitmap_line_xdyd::@3 bitmap_line_xdyd::@2 bitmap_line_xdyd::@return bitmap_line_ydxd bitmap_line_ydxd::@1 bitmap_line_ydxd::@5 bitmap_line_ydxd::@3 bitmap_line_ydxd::@2 bitmap_line_ydxd::@return bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_init bitmap_init::@1 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return bitmap_init::@10 mode_mcchar mode_mcchar::@1 mode_mcchar::@4 mode_mcchar::@2 mode_mcchar::@3 mode_mcchar::@5 mode_mcchar::@6 mode_mcchar::@return mode_ecmchar mode_ecmchar::@1 mode_ecmchar::@4 mode_ecmchar::@2 mode_ecmchar::@3 mode_ecmchar::@5 mode_ecmchar::@6 mode_ecmchar::@return mode_stdchar mode_stdchar::@1 mode_stdchar::@4 mode_stdchar::@2 mode_stdchar::@3 mode_stdchar::@5 mode_stdchar::@6 mode_stdchar::@return print_str_lines print_str_lines::@1 print_str_lines::@return print_str_lines::@4 print_str_lines::@8 print_str_lines::@5 print_str_lines::@9 print_ln print_ln::@1 print_ln::@return print_cls print_cls::@1 print_cls::@return print_set_screen print_set_screen::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @48 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/callconstparam.log b/src/test/java/dk/camelot64/kickc/test/ref/callconstparam.log index a84c72f93..4e847ca08 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/callconstparam.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/callconstparam.log @@ -191,26 +191,26 @@ Alias (byte) line::x#0 = (byte) line::x0#2 Alias (byte*) screen#11 = (byte*) screen#4 (byte*) screen#5 Alias (byte*) screen#0 = (byte*) screen#15 Alias (byte*) screen#12 = (byte*) screen#6 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) line::x1#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) screen#13 (byte*) screen#0 Redundant Phi (byte*) screen#1 (byte*) screen#11 Redundant Phi (byte*) screen#2 (byte*) screen#11 Redundant Phi (byte) line::x1#2 (byte) line::x1#3 Redundant Phi (byte*) screen#12 (byte*) screen#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) line::$0 if((byte) line::x#1<(byte) line::x1#3) goto line::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) screen#0 = ((byte*))1024 Constant (const byte) line::x0#0 = 1 Constant (const byte) line::x1#0 = 2 Constant (const byte) line::x0#1 = 3 Constant (const byte) line::x1#1 = 5 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Culled Empty Block (label) main::@2 Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with different constant siblings (const byte) line::x0#0 Inlining constant with var siblings (const byte) line::x1#0 @@ -222,10 +222,8 @@ Constant inlined line::x1#1 = (byte/signed byte/word/signed word/dword/signed dw Constant inlined screen#0 = ((byte*))(word/signed word/dword/signed dword) 1024 Constant inlined line::x1#0 = (byte/signed byte/word/signed word/dword/signed dword) 2 Constant inlined line::x0#1 = (byte/signed byte/word/signed word/dword/signed dword) 3 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@1 main::@return line line::@1 line::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting line::@3(between line::@1 and line::@1) -Block Sequence Planned @begin @2 @end main main::@1 main::@return line line::@1 line::@return line::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -250,7 +248,6 @@ Coalesced [18] line::x#4 ← line::x#1 Coalesced (already) [19] screen#18 ← screen#11 Coalesced down to 3 phi equivalence classes Culled Empty Block (label) line::@3 -Block Sequence Planned @begin @2 @end main main::@1 main::@return line line::@1 line::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/cast-deref.log b/src/test/java/dk/camelot64/kickc/test/ref/cast-deref.log index 1af4813f6..b3627b511 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/cast-deref.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/cast-deref.log @@ -118,24 +118,24 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Self Phi Eliminated (byte*) main::SCREEN#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::SCREEN#1 (byte*) main::SCREEN#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$5 if((byte) main::i#1!=rangelast(0,3)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const signed byte/signed word/signed dword) main::$0 = -1 Constant (const signed byte/signed word/signed dword) main::$1 = -2 Constant (const signed byte/signed word/signed dword) main::$2 = -3 Constant (const signed byte/signed word/signed dword) main::$3 = -4 Constant (const byte*) main::SCREEN#0 = ((byte*))1024 Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const signed byte[]) main::sbs#0 = { main::$0, main::$1, main::$2, main::$3 } -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Eliminating Noop Cast (byte~) main::$4 ← ((byte)) *((const signed byte[]) main::sbs#0 + (byte) main::i#2) -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,3)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 4 OPTIMIZING CONTROL FLOW GRAPH @@ -145,10 +145,8 @@ Constant inlined main::$3 = -(byte/signed byte/word/signed word/dword/signed dwo Constant inlined main::$1 = -(byte/signed byte/word/signed word/dword/signed dword) 2 Constant inlined main::$2 = -(byte/signed byte/word/signed word/dword/signed dword) 3 Constant inlined main::$0 = -(byte/signed byte/word/signed word/dword/signed dword) 1 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -162,7 +160,6 @@ Created 1 initial phi equivalence classes Coalesced [10] main::i#3 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/cast-precedence-problem.log b/src/test/java/dk/camelot64/kickc/test/ref/cast-precedence-problem.log index 5c07cd193..9995639a0 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/cast-precedence-problem.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/cast-precedence-problem.log @@ -177,47 +177,45 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::midw#0 = (byte/signed word/word/dword/signed dword~) main::$3 Alias (byte) main::sumb#0 = (byte~) main::$4 Alias (byte) main::midb#0 = (byte/signed word/word/dword/signed dword~) main::$6 Alias (byte*) main::BGCOL#0 = (byte*) main::BGCOL#1 (byte*) main::BGCOL#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Simple Condition (bool~) main::$7 if(*((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 0)==*((byte*) main::SCREEN#0 + (byte/signed byte/word/signed word/dword/signed dword) 1)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = ((byte*))1024 Constant (const byte) main::min#0 = 10 Constant (const byte) main::max#0 = 200 Constant (const byte*) main::BGCOL#0 = ((byte*))53281 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$0 = main::min#0+main::max#0 Constant (const byte) main::sumb#0 = main::min#0+main::max#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) main::sumw#0 = ((word))main::$0 Constant (const byte) main::$5 = main::sumb#0>>1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) main::$1 = main::sumw#0>>1 Constant (const byte) main::midb#0 = main::$5+1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$2 = ((byte))main::$1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::midw#0 = main::$2+1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::SCREEN#0+0) Consolidated array index constant in *(main::SCREEN#0+1) Consolidated array index constant in *(main::SCREEN#0+0) Consolidated array index constant in *(main::SCREEN#0+1) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Constant inlined main::$5 = (const byte) main::sumb#0>>(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined main::$1 = (const word) main::sumw#0>>(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined main::$2 = ((byte))(const word) main::sumw#0>>(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined main::$0 = (const byte) main::min#0+(const byte) main::max#0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero main::SCREEN#0+0 Simplifying constant plus zero main::SCREEN#0+0 -Block Sequence Planned @begin @1 @end main main::@3 main::@return main::@1 -Block Sequence Planned @begin @1 @end main main::@3 main::@return main::@1 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -227,7 +225,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@3 main::@return main::@1 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/casting.log b/src/test/java/dk/camelot64/kickc/test/ref/casting.log index 459aebd70..1ec694ff0 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/casting.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/casting.log @@ -313,7 +313,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@3 Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) SCREEN2#0 = (byte*~) $1 (byte*) SCREEN2#3 Alias (byte*) SCREEN3#0 = (byte*~) $3 (byte*) SCREEN3#6 Alias (byte*) SCREEN4#0 = (byte*~) $5 (byte*) SCREEN4#6 @@ -324,14 +324,14 @@ Alias (byte*) SCREEN4#3 = (byte*) SCREEN4#4 Alias (byte) w::b#0 = (byte~) w::$1 Alias (byte) w::b2#0 = (byte/signed word/word/dword/signed dword~) w::$3 Alias (byte*) SCREEN#0 = (byte*) SCREEN#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#1 Self Phi Eliminated (byte*) SCREEN2#1 Self Phi Eliminated (byte*) SCREEN3#3 Self Phi Eliminated (byte*) SCREEN4#3 Self Phi Eliminated (byte*) SCREEN3#1 Self Phi Eliminated (byte*) SCREEN4#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN2#2 (byte*) SCREEN2#0 Redundant Phi (byte*) SCREEN3#5 (byte*) SCREEN3#0 @@ -344,10 +344,10 @@ Redundant Phi (byte*) SCREEN3#2 (byte*) SCREEN3#3 Redundant Phi (byte*) SCREEN4#2 (byte*) SCREEN4#3 Redundant Phi (byte*) SCREEN3#1 (byte*) SCREEN3#2 Redundant Phi (byte*) SCREEN4#1 (byte*) SCREEN4#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$4 if((byte) main::b#1!=rangelast(0,100)) goto main::@1 Simple Condition (bool~) w::$4 if((byte) w::i#1!=rangelast(0,10)) goto w::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte/signed byte/word/signed word/dword/signed dword) $0 = 40*3 Constant (const byte/word/signed word/dword/signed dword) $2 = 40*6 @@ -357,17 +357,17 @@ Constant (const byte) w::i#0 = 0 Constant (const word) w::w1#0 = 1300 Constant (const word) w::w2#0 = 1250 Constant (const byte/signed byte/word/signed word/dword/signed dword) w::$2 = 1400-1350 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) SCREEN2#0 = SCREEN#0+$0 Constant (const byte*) SCREEN3#0 = SCREEN#0+$2 Constant (const byte*) SCREEN4#0 = SCREEN#0+$4 Constant (const word) w::$0 = w::w1#0-w::w2#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) w::b#0 = ((byte))w::$0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Eliminating Noop Cast (signed byte~) main::$1 ← ((signed byte)) (byte) main::b#2 Eliminating Noop Cast (byte~) main::$3 ← ((byte)) (signed byte) main::sb#0 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Resolved ranged next value main::b#1 ← ++ main::b#2 to ++ Resolved ranged comparison value if(main::b#1!=rangelast(0,100)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 101 Resolved ranged next value w::i#1 ← ++ w::i#2 to ++ @@ -382,11 +382,9 @@ Constant inlined w::$0 = (const word) w::w1#0-(const word) w::w2#0 Constant inlined $0 = (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 3 Constant inlined w::$2 = (word/signed word/dword/signed dword) 1400-(word/signed word/dword/signed dword) 1350 Constant inlined $2 = (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 6 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return w w::@1 w::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@4(between main::@1 and main::@1) Added new block during phi lifting w::@3(between w::@1 and w::@1) -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return main::@4 w w::@1 w::@return w::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -406,7 +404,6 @@ Coalesced [24] w::i#3 ← w::i#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) main::@4 Culled Empty Block (label) w::@3 -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return w w::@1 w::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/chained-assignment.log b/src/test/java/dk/camelot64/kickc/test/ref/chained-assignment.log index 27e76b14f..76d4c380a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/chained-assignment.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/chained-assignment.log @@ -93,13 +93,13 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Constant (const byte*) main::screen#0 = ((byte*))1024 Constant (const byte) main::a#0 = 'c' Constant (const byte) main::a#2 = 'l' -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte/signed word/word/dword/signed dword) main::$0 = 1+main::a#2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::screen#0+0) Consolidated array index constant in *(main::screen#0+40) Consolidated array index constant in *(main::screen#0+1) @@ -107,17 +107,15 @@ Consolidated array index constant in *(main::screen#0+1) Consolidated array index constant in *(main::screen#0+41) Consolidated array index constant in *(main::screen#0+2) Consolidated array index constant in *(main::screen#0+42) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::a#0 Inlining constant with var siblings (const byte) main::a#2 Constant inlined main::a#0 = (byte) 'c' Constant inlined main::a#2 = (byte) 'l' Constant inlined main::$0 = (byte/signed byte/word/signed word/dword/signed dword) 1+(byte) 'l' -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero main::screen#0+0 -Block Sequence Planned @begin @1 @end main main::@return -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -128,7 +126,6 @@ Propagating live ranges... Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.log b/src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.log index b7d280ea7..0280e6ca9 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/chargen-analysis.log @@ -3193,7 +3193,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @19 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) mul8u::$3 ← (byte~) mul8u::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) mul8u::$2 ← (byte~) mul8u::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) main::$17 ← (byte~) main::$15 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) main::$16 ← (byte~) main::$15 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) main::$20 ← (byte~) main::$18 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) main::$19 ← (byte~) main::$18 != (byte/signed byte/word/signed word/dword/signed dword) 0 @@ -3203,7 +3203,7 @@ Inversing boolean not (bool~) main::$31 ← (byte) main::key#0 == (byte/signed b Inversing boolean not (bool~) main::$34 ← (byte) main::pressed#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) main::$33 ← (byte) main::pressed#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) plot_chargen::$4 ← (byte) plot_chargen::shift#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) plot_chargen::$3 ← (byte) plot_chargen::shift#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) plot_chargen::$12 ← (byte~) plot_chargen::$10 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) plot_chargen::$11 ← (byte~) plot_chargen::$10 != (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) mul8u::a#2 = (byte) mul8u::a#3 (byte) mul8u::a#6 Alias (word) mul8u::mb#3 = (word) mul8u::mb#4 (word) mul8u::mb#5 Alias (word) mul8u::res#2 = (word) mul8u::res#5 (word) mul8u::res#4 (word) mul8u::return#0 (word) mul8u::res#3 (word) mul8u::return#3 (word) mul8u::return#1 @@ -3273,7 +3273,7 @@ Alias (byte) plot_chargen::y#3 = (byte) plot_chargen::y#4 Alias (byte*) plot_chargen::chargen#4 = (byte*) plot_chargen::chargen#7 Alias (byte*) plot_chargen::sc#2 = (byte*~) plot_chargen::$15 Alias (byte*) SCREEN#0 = (byte*) SCREEN#8 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte) mul8u::a#2 = (byte) mul8u::a#4 Alias (word) mul8u::mb#2 = (word) mul8u::mb#3 Alias (byte*) SCREEN#21 = (byte*) SCREEN#33 (byte*) SCREEN#36 (byte*) SCREEN#30 (byte*) SCREEN#27 (byte*) SCREEN#22 @@ -3289,7 +3289,7 @@ Alias (byte) plot_chargen::bits#2 = (byte) plot_chargen::bits#3 Alias (byte) plot_chargen::x#2 = (byte) plot_chargen::x#3 Alias (byte) plot_chargen::y#3 = (byte) plot_chargen::y#5 Alias (byte*) plot_chargen::chargen#4 = (byte*) plot_chargen::chargen#8 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: main::cur_pos#10 main::cur_pos#10 Not aliassing identity: main::shift#11 main::shift#11 Not aliassing identity: SCREEN#12 SCREEN#12 @@ -3300,7 +3300,7 @@ Self Phi Eliminated (byte) main::shift#11 Self Phi Eliminated (byte*) SCREEN#12 Self Phi Eliminated (byte) plot_chargen::y#3 Self Phi Eliminated (byte*) plot_chargen::chargen#4 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) mul8u::b#1 (byte) mul8u::b#0 Redundant Phi (byte) mul8u::a#5 (byte) mul8u::a#1 Redundant Phi (byte) keyboard_matrix_read::rowid#1 (byte) keyboard_matrix_read::rowid#0 @@ -3313,7 +3313,7 @@ Redundant Phi (byte) main::shift#11 (byte) main::shift#10 Redundant Phi (byte*) SCREEN#12 (byte*) SCREEN#21 Redundant Phi (byte) plot_chargen::y#3 (byte) plot_chargen::y#2 Redundant Phi (byte*) plot_chargen::chargen#4 (byte*) plot_chargen::chargen#3 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) mul8u::$0 if((byte) mul8u::a#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@2 Simple Condition (bool~) mul8u::$3 if((byte~) mul8u::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8u::@4 Simple Condition (bool~) main::$1 if((byte*) main::sc#1<(byte*~) main::$0) goto main::@1 @@ -3331,7 +3331,7 @@ Simple Condition (bool~) plot_chargen::$4 if((byte) plot_chargen::shift#2==(byte Simple Condition (bool~) plot_chargen::$12 if((byte~) plot_chargen::$10==(byte/signed byte/word/signed word/dword/signed dword) 0) goto plot_chargen::@4 Simple Condition (bool~) plot_chargen::$14 if((byte) plot_chargen::x#1!=rangelast(0,7)) goto plot_chargen::@3 Simple Condition (bool~) plot_chargen::$16 if((byte) plot_chargen::y#1!=rangelast(0,7)) goto plot_chargen::@2 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) PROCPORT#0 = ((byte*))1 Constant (const byte*) CHARGEN#0 = ((byte*))53248 Constant (const byte*) CIA1_PORT_A#0 = ((byte*))56320 @@ -3417,7 +3417,7 @@ Constant (const byte) plot_chargen::y#0 = 0 Constant (const byte) plot_chargen::x#0 = 0 Constant (const byte) plot_chargen::c#0 = '.' Constant (const byte) plot_chargen::c#1 = '*' -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) mul8u::mb#0 = ((word))mul8u::b#0 Constant (const byte[]) keyboard_char_keycodes#0 = { KEY_AT#0, KEY_A#0, KEY_B#0, KEY_C#0, KEY_D#0, KEY_E#0, KEY_F#0, KEY_G#0, KEY_H#0, KEY_I#0, KEY_J#0, KEY_K#0, KEY_L#0, KEY_M#0, KEY_N#0, KEY_O#0, KEY_P#0, KEY_Q#0, KEY_R#0, KEY_S#0, KEY_T#0, KEY_U#0, KEY_V#0, KEY_W#0, KEY_X#0, KEY_Y#0, KEY_Z#0, 63, KEY_POUND#0, 63, KEY_ARROW_UP#0, KEY_ARROW_LEFT#0, KEY_SPACE#0, 63, 63, 63, 63, 63, 63, 63, 63, 63, KEY_ASTERISK#0, KEY_PLUS#0, KEY_COMMA#0, KEY_MINUS#0, KEY_DOT#0, KEY_SLASH#0, KEY_0#0, KEY_1#0, KEY_2#0, KEY_3#0, KEY_4#0, KEY_5#0, KEY_6#0, KEY_7#0, KEY_8#0, KEY_9#0, KEY_COLON#0, KEY_SEMICOLON#0, 63, KEY_EQUALS#0, 63, 63 } Constant (const byte*) main::sc#0 = SCREEN#0 @@ -3431,19 +3431,19 @@ Constant (const byte) keyboard_key_pressed::key#1 = KEY_F3#0 Constant (const byte) keyboard_key_pressed::key#2 = KEY_F5#0 Constant (const byte) keyboard_key_pressed::key#3 = KEY_F7#0 Constant (const byte) keyboard_key_pressed::key#4 = KEY_LSHIFT#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) print_str_at::at#1 = main::$4+10 Constant (const byte*) print_str_at::at#2 = main::$7+20 Constant (const byte*) print_str_at::at#3 = main::$10+30 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated constant in assignment plot_chargen::$7 -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination if(true) goto main::@3 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating unused constant (const byte) main::shift#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,3)) goto main::@2 to (byte/signed byte/word/signed word/dword/signed dword) 4 Resolved ranged next value main::ch#1 ← ++ main::ch#2 to ++ @@ -3460,20 +3460,20 @@ Culled Empty Block (label) main::@14 Culled Empty Block (label) main::@8 Culled Empty Block (label) main::@37 Culled Empty Block (label) main::@23 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Not aliassing identity: plot_chargen::chargen#3 plot_chargen::chargen#3 Self Phi Eliminated (byte*) SCREEN#21 Self Phi Eliminated (byte*) plot_chargen::chargen#3 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#21 (const byte*) SCREEN#0 Redundant Phi (byte*) plot_chargen::chargen#3 (byte*) plot_chargen::chargen#5 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) SCREEN#10 (const byte*) SCREEN#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte*) plot_chargen::$6 = SCREEN#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) plot_chargen::$7 = plot_chargen::$6+40+1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const word) mul8u::res#0 Inlining constant with var siblings (const word) mul8u::mb#0 @@ -3545,8 +3545,7 @@ Constant inlined plot_chargen::y#0 = (byte/signed byte/word/signed word/dword/si Constant inlined main::$7 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined main::pressed#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined plot_chargen::x#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @18 @end main main::@1 main::@13 main::@25 main::@26 main::@27 main::@2 main::@29 main::@3 main::@30 main::@15 main::@4 main::@31 main::@16 main::@5 main::@32 main::@17 main::@6 main::@33 main::@18 main::@7 main::@34 main::@19 main::@9 main::@10 main::@35 main::@21 main::@36 main::@11 main::@22 main::@12 plot_chargen plot_chargen::@5 plot_chargen::@1 plot_chargen::@9 plot_chargen::@2 plot_chargen::@3 plot_chargen::@6 plot_chargen::@4 plot_chargen::@7 plot_chargen::@8 plot_chargen::@return mul8u mul8u::@1 mul8u::@return mul8u::@2 mul8u::@7 mul8u::@4 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return keyboard_get_keycode keyboard_get_keycode::@return print_str_at print_str_at::@1 print_str_at::@return print_str_at::@2 +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@38(between main::@1 and main::@1) Added new block during phi lifting main::@39(between main::@29 and main::@2) Added new block during phi lifting main::@40(between main::@12 and main::@3) @@ -3559,7 +3558,6 @@ Added new block during phi lifting plot_chargen::@10(between plot_chargen and pl Added new block during phi lifting plot_chargen::@11(between plot_chargen::@7 and plot_chargen::@2) Added new block during phi lifting plot_chargen::@12(between plot_chargen::@4 and plot_chargen::@3) Added new block during phi lifting mul8u::@10(between mul8u::@2 and mul8u::@4) -Block Sequence Planned @begin @18 @end main main::@1 main::@13 main::@25 main::@26 main::@27 main::@2 main::@29 main::@3 main::@30 main::@15 main::@4 main::@31 main::@16 main::@5 main::@32 main::@17 main::@6 main::@33 main::@18 main::@7 main::@34 main::@19 main::@9 main::@10 main::@35 main::@21 main::@36 main::@11 main::@22 main::@12 main::@40 main::@45 main::@44 main::@43 main::@42 main::@41 main::@39 main::@38 plot_chargen plot_chargen::@5 plot_chargen::@1 plot_chargen::@9 plot_chargen::@2 plot_chargen::@3 plot_chargen::@6 plot_chargen::@4 plot_chargen::@7 plot_chargen::@8 plot_chargen::@return plot_chargen::@11 plot_chargen::@12 plot_chargen::@10 mul8u mul8u::@1 mul8u::@return mul8u::@2 mul8u::@7 mul8u::@4 mul8u::@10 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return keyboard_get_keycode keyboard_get_keycode::@return print_str_at print_str_at::@1 print_str_at::@return print_str_at::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @18 Adding NOP phi() at start of @end @@ -3646,7 +3644,6 @@ Culled Empty Block (label) plot_chargen::@11 Culled Empty Block (label) plot_chargen::@12 Culled Empty Block (label) plot_chargen::@10 Culled Empty Block (label) mul8u::@10 -Block Sequence Planned @begin @18 @end main main::@1 main::@13 main::@25 main::@26 main::@27 main::@2 main::@29 main::@3 main::@30 main::@4 main::@31 main::@5 main::@32 main::@6 main::@33 main::@7 main::@34 main::@19 main::@9 main::@10 main::@35 main::@21 main::@36 main::@11 main::@22 main::@12 main::@44 main::@43 main::@42 main::@41 plot_chargen plot_chargen::@5 plot_chargen::@1 plot_chargen::@9 plot_chargen::@2 plot_chargen::@3 plot_chargen::@6 plot_chargen::@4 plot_chargen::@7 plot_chargen::@8 plot_chargen::@return mul8u mul8u::@1 mul8u::@return mul8u::@2 mul8u::@7 mul8u::@4 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return keyboard_get_keycode keyboard_get_keycode::@return print_str_at print_str_at::@1 print_str_at::@return print_str_at::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @18 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/chargen.log b/src/test/java/dk/camelot64/kickc/test/ref/chargen.log index 70cb37230..1cb2af248 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/chargen.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/chargen.log @@ -297,9 +297,9 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) main::$3 ← (byte~) main::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) main::$2 ← (byte~) main::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte*) main::CHAR_A#0 = (byte*~) main::$0 Alias (byte) main::bits#1 = (byte~) main::$4 Alias (byte*) main::sc#5 = (byte*) main::sc#6 @@ -316,29 +316,29 @@ Alias (byte*) main::sc#2 = (byte*~) main::$6 Alias (byte*) CHARGEN#0 = (byte*) CHARGEN#2 Alias (byte*) PROCPORT#0 = (byte*) PROCPORT#3 Alias (byte*) SCREEN#0 = (byte*) SCREEN#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte*) main::sc#3 = (byte*) main::sc#5 Alias (byte) main::bits#2 = (byte) main::bits#3 Alias (byte) main::x#2 = (byte) main::x#3 Alias (byte) main::y#3 = (byte) main::y#5 Alias (byte*) main::CHAR_A#2 = (byte*) main::CHAR_A#4 Alias (byte*) PROCPORT#2 = (byte*) PROCPORT#6 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) main::y#3 Self Phi Eliminated (byte*) main::CHAR_A#2 Self Phi Eliminated (byte*) PROCPORT#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) CHARGEN#1 (byte*) CHARGEN#0 Redundant Phi (byte*) PROCPORT#1 (byte*) PROCPORT#0 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 Redundant Phi (byte) main::y#3 (byte) main::y#2 Redundant Phi (byte*) main::CHAR_A#2 (byte*) main::CHAR_A#1 Redundant Phi (byte*) PROCPORT#2 (byte*) PROCPORT#8 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$3 if((byte~) main::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@3 Simple Condition (bool~) main::$5 if((byte) main::x#1!=rangelast(0,7)) goto main::@2 Simple Condition (bool~) main::$7 if((byte) main::y#1!=rangelast(0,7)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) PROCPORT#0 = ((byte*))1 Constant (const byte*) CHARGEN#0 = ((byte*))53248 Constant (const byte*) SCREEN#0 = ((byte*))1024 @@ -346,20 +346,20 @@ Constant (const byte) main::y#0 = 0 Constant (const byte) main::x#0 = 0 Constant (const byte) main::c#0 = '.' Constant (const byte) main::c#1 = '*' -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::CHAR_A#0 = CHARGEN#0+8 Constant (const byte*) main::sc#0 = SCREEN#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::x#1 ← ++ main::x#2 to ++ Resolved ranged comparison value if(main::x#1!=rangelast(0,7)) goto main::@2 to (byte/signed byte/word/signed word/dword/signed dword) 8 Resolved ranged next value main::y#1 ← ++ main::y#2 to ++ Resolved ranged comparison value if(main::y#1!=rangelast(0,7)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8 Self Phi Eliminated (byte*) main::CHAR_A#1 Self Phi Eliminated (byte*) PROCPORT#8 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::CHAR_A#1 (const byte*) main::CHAR_A#0 Redundant Phi (byte*) PROCPORT#8 (const byte*) PROCPORT#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::y#0 Inlining constant with var siblings (const byte) main::x#0 @@ -371,11 +371,9 @@ Constant inlined main::c#0 = (byte) '.' Constant inlined main::x#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::y#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::c#1 = (byte) '*' -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@4 main::@3 main::@5 main::@6 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@7(between main::@5 and main::@1) Added new block during phi lifting main::@8(between main::@3 and main::@2) -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@4 main::@3 main::@5 main::@6 main::@return main::@7 main::@8 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -408,7 +406,6 @@ Coalesced [30] main::x#5 ← main::x#1 Coalesced down to 5 phi equivalence classes Culled Empty Block (label) main::@7 Culled Empty Block (label) main::@8 -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@4 main::@3 main::@5 main::@6 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/chessboard.log b/src/test/java/dk/camelot64/kickc/test/ref/chessboard.log index b73d98a69..2b173b147 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/chessboard.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/chessboard.log @@ -192,7 +192,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::color#1 = (byte/word/dword~) main::$0 (byte) main::color#4 Alias (byte*) main::screen#2 = (byte*) main::screen#3 Alias (byte*) main::colors#2 = (byte*) main::colors#3 @@ -200,24 +200,24 @@ Alias (byte) main::row#2 = (byte) main::row#3 Alias (byte) main::color#2 = (byte/word/dword~) main::$2 Alias (byte*) main::screen#1 = (byte*~) main::$3 Alias (byte*) main::colors#1 = (byte*~) main::$4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::screen#2 Self Phi Eliminated (byte*) main::colors#2 Self Phi Eliminated (byte) main::row#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::screen#2 (byte*) main::screen#4 Redundant Phi (byte*) main::colors#2 (byte*) main::colors#4 Redundant Phi (byte) main::row#2 (byte) main::row#4 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((byte) main::column#1!=rangelast(0,7)) goto main::@2 Simple Condition (bool~) main::$5 if((byte) main::row#1!=rangelast(0,7)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::screen#0 = ((byte*))1024 Constant (const byte*) main::colors#0 = ((byte*))55296 Constant (const byte) main::color#0 = 1 Constant (const byte) main::row#0 = 0 Constant (const byte) main::column#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::column#1 ← ++ main::column#2 to ++ Resolved ranged comparison value if(main::column#1!=rangelast(0,7)) goto main::@2 to (byte/signed byte/word/signed word/dword/signed dword) 8 Resolved ranged next value main::row#1 ← ++ main::row#4 to ++ @@ -233,11 +233,9 @@ Constant inlined main::colors#0 = ((byte*))(word/dword/signed dword) 55296 Constant inlined main::color#0 = (byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined main::row#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::column#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@5(between main::@3 and main::@1) Added new block during phi lifting main::@6(between main::@2 and main::@2) -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@return main::@5 main::@6 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -268,7 +266,6 @@ Coalesced [24] main::color#8 ← main::color#1 Coalesced down to 5 phi equivalence classes Culled Empty Block (label) main::@5 Culled Empty Block (label) main::@6 -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/compound-assignment.log b/src/test/java/dk/camelot64/kickc/test/ref/compound-assignment.log index 82a4af230..146ef10b7 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/compound-assignment.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/compound-assignment.log @@ -581,7 +581,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) screen2#0 = (byte*~) $0 (byte*) screen2#13 Alias (byte) main::i#0 = (byte) main::i#12 Alias (byte) main::a#0 = (byte) main::a#11 @@ -617,7 +617,7 @@ Alias (byte*) screen1#0 = (byte*) screen1#13 Alias (byte) GREEN#0 = (byte) GREEN#14 Alias (byte*) cols#0 = (byte*) cols#15 Alias (byte) RED#0 = (byte) RED#14 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Redundant Phi (byte*) screen1#10 (byte*) screen1#0 Redundant Phi (byte*) screen2#10 (byte*) screen2#0 Redundant Phi (byte) GREEN#10 (byte) GREEN#0 @@ -628,9 +628,9 @@ Redundant Phi (byte*) screen2#1 (byte*) screen2#10 Redundant Phi (byte) GREEN#1 (byte) GREEN#10 Redundant Phi (byte*) cols#1 (byte*) cols#10 Redundant Phi (byte) RED#1 (byte) RED#10 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) test::$0 if(*((byte[]) ref#0 + (byte) test::i#11)==(byte) test::a#11) goto test::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte[]) ref#0 = { 3, 4, 3, 18, 9, 1, 4, 2, 4, 5, 1, 0 } Constant (const byte*) screen1#0 = ((byte*))1024 Constant (const byte*) cols#0 = ((byte*))55296 @@ -638,66 +638,66 @@ Constant (const byte) GREEN#0 = 5 Constant (const byte) RED#0 = 2 Constant (const byte) main::i#0 = 0 Constant (const byte) main::a#0 = 3 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) screen2#0 = screen1#0+40 Constant (const byte) test::i#0 = main::i#0 Constant (const byte) test::a#0 = main::a#0 Constant (const byte) main::i#1 = ++main::i#0 Constant (const byte) main::a#1 = main::a#0+1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) test::i#1 = main::i#1 Constant (const byte) test::a#1 = main::a#1 Constant (const byte) main::i#14 = ++main::i#1 Constant (const byte) main::a#13 = main::a#1-1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) test::i#2 = main::i#14 Constant (const byte) test::a#2 = main::a#13 Constant (const byte) main::i#15 = ++main::i#14 Constant (const byte) main::a#14 = main::a#13*6 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) test::i#3 = main::i#15 Constant (const byte) test::a#3 = main::a#14 Constant (const byte) main::i#16 = ++main::i#15 Constant (const byte) main::a#15 = main::a#14/2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) test::i#4 = main::i#16 Constant (const byte) test::a#4 = main::a#15 Constant (const byte) main::i#17 = ++main::i#16 Constant (const byte) main::a#16 = main::a#15%2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) test::i#5 = main::i#17 Constant (const byte) test::a#5 = main::a#16 Constant (const byte) main::i#18 = ++main::i#17 Constant (const byte) main::a#17 = main::a#16<<2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) test::i#6 = main::i#18 Constant (const byte) test::a#6 = main::a#17 Constant (const byte) main::i#19 = ++main::i#18 Constant (const byte) main::a#18 = main::a#17>>1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) test::i#7 = main::i#19 Constant (const byte) test::a#7 = main::a#18 Constant (const byte) main::i#20 = ++main::i#19 Constant (const byte) main::a#19 = main::a#18^6 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) test::i#8 = main::i#20 Constant (const byte) test::a#8 = main::a#19 Constant (const byte) main::i#21 = ++main::i#20 Constant (const byte) main::a#20 = main::a#19|1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) test::i#9 = main::i#21 Constant (const byte) test::a#9 = main::a#20 Constant (const byte) main::i#10 = ++main::i#21 Constant (const byte) main::a#10 = main::a#20&1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) test::i#10 = main::i#10 Constant (const byte) test::a#10 = main::a#10 Constant (const byte) main::i#11 = ++main::i#10 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Eliminating unused constant (const byte) main::i#11 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Culled Empty Block (label) main::@11 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with different constant siblings (const byte) main::i#0 Inlining constant with different constant siblings (const byte) main::a#0 @@ -787,7 +787,7 @@ Constant inlined test::a#0 = (byte/signed byte/word/signed word/dword/signed dwo Constant inlined test::a#1 = (byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined test::a#2 = (byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined test::a#3 = (byte/signed byte/word/signed word/dword/signed dword) 3+(byte/signed byte/word/signed word/dword/signed dword) 1-(byte/signed byte/word/signed word/dword/signed dword) 1*(byte/signed byte/word/signed word/dword/signed dword) 6 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant integer increment ++0 Simplifying constant integer increment ++0 Simplifying constant integer increment ++1 @@ -798,7 +798,7 @@ Simplifying constant integer increment ++4 Simplifying constant integer increment ++5 Simplifying constant integer increment ++6 Simplifying constant integer increment ++7 -Succesful SSA optimization Pass2ConstantSimplification +Successful SSA optimization Pass2ConstantSimplification Simplifying constant integer increment ++8 Simplifying constant integer increment ++2 Simplifying constant integer increment ++3 @@ -807,11 +807,9 @@ Simplifying constant integer increment ++5 Simplifying constant integer increment ++6 Simplifying constant integer increment ++7 Simplifying constant integer increment ++8 -Succesful SSA optimization Pass2ConstantSimplification +Successful SSA optimization Pass2ConstantSimplification Simplifying constant integer increment ++9 -Succesful SSA optimization Pass2ConstantSimplification -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@return test test::@3 test::@return test::@1 -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@return test test::@3 test::@return test::@1 +Successful SSA optimization Pass2ConstantSimplification Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -835,7 +833,6 @@ Propagating live ranges... Propagating live ranges... Created 2 initial phi equivalence classes Coalesced down to 2 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@return test test::@3 test::@return test::@1 Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/concat-char.log b/src/test/java/dk/camelot64/kickc/test/ref/concat-char.log index 7a9e2885c..cd8fb8544 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/concat-char.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/concat-char.log @@ -110,33 +110,31 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte[]) main::msg#0 = (string~) main::$0 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::screen#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::screen#1 (byte*) main::screen#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((byte) main::i#1!=rangelast(0,2)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::screen#0 = ((byte*))1024 Constant (const byte) main::l#0 = 'l' Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte[]) main::msg#0 = "cm"+'l' -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Eliminating unused constant (const string) main::$2 Eliminating unused constant (const byte) main::l#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,2)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 3 OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -150,7 +148,6 @@ Created 1 initial phi equivalence classes Coalesced [10] main::i#3 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/const-condition.log b/src/test/java/dk/camelot64/kickc/test/ref/const-condition.log index b19cddc07..8cd483eee 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/const-condition.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/const-condition.log @@ -96,22 +96,20 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Simple Condition (bool~) main::$0 if((byte/signed byte/word/signed word/dword/signed dword) 7<(byte/signed byte/word/signed word/dword/signed dword) 4) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::SCREEN#0+0) Consolidated array index constant in *(main::SCREEN#0+0) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always false - eliminating if((byte/signed byte/word/signed word/dword/signed dword) 7<(byte/signed byte/word/signed word/dword/signed dword) 4) goto main::@1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@1 -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks OPTIMIZING CONTROL FLOW GRAPH Simplifying constant plus zero main::SCREEN#0+0 -Block Sequence Planned @begin @1 @end main main::@3 main::@return -Block Sequence Planned @begin @1 @end main main::@3 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -122,7 +120,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@3 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/const-identification.log b/src/test/java/dk/camelot64/kickc/test/ref/const-identification.log index 331356947..b2417d07b 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/const-identification.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/const-identification.log @@ -286,54 +286,52 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) line::@7 Culled Empty Block (label) @4 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) line::x0#1 = (byte) line::x0#2 (byte) line::x#0 (byte) line::x0#3 Alias (byte) line::x1#1 = (byte) line::x1#4 Alias (byte) line::x#2 = (byte) line::x#3 Alias (byte) line::x1#2 = (byte) line::x1#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) line::x1#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) line::x0#1 (byte) line::x0#0 Redundant Phi (byte) line::x1#1 (byte) line::x1#0 Redundant Phi (byte) line::x1#2 (byte) line::x1#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$0 if((byte) main::i#1!=rangelast(0,39)) goto main::@1 Simple Condition (bool~) line::$0 if((byte) line::x0#0<(byte) line::x1#0) goto line::@1 Simple Condition (bool~) line::$3 if((byte) line::x#1<=(byte) line::x1#0) goto line::@3 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) plots#0 = ((byte*))4096 Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) main::i#0 = 0 Constant (const byte) line::x0#0 = 0 Constant (const byte) line::x1#0 = 10 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) plot::x#0 = line::x0#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@2 if() condition always true - replacing block destination if((const byte) line::x0#0<(const byte) line::x1#0) goto line::@1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return Removing PHI-reference to removed block (line::@4) in block plot Removing unused block line::@4 -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,39)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 40 Culled Empty Block (label) main::@5 Culled Empty Block (label) line::@1 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Redundant Phi (byte) plot::x#2 (byte) plot::x#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Eliminating unused constant (const byte) plot::x#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @3 @end main main::@1 main::@2 line line::@3 line::@8 line::@return plot plot::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@6(between main::@1 and main::@1) Added new block during phi lifting line::@9(between line::@8 and line::@3) -Block Sequence Planned @begin @3 @end main main::@1 main::@2 main::@6 line line::@3 line::@8 line::@return line::@9 plot plot::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end @@ -354,7 +352,6 @@ Coalesced [20] line::x#4 ← line::x#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) main::@6 Culled Empty Block (label) line::@9 -Block Sequence Planned @begin @3 @end main main::@1 main::@2 line line::@3 line::@8 line::@return plot plot::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/const-mult-div.log b/src/test/java/dk/camelot64/kickc/test/ref/const-mult-div.log index ead5907da..939d2be88 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/const-mult-div.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/const-mult-div.log @@ -84,27 +84,25 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::b#0 = (byte/signed word/word/dword/signed dword/signed byte~) main::$3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$0 = 14/3 Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$2 = 22%3 Constant (const byte*) main::screen#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte/signed word/word/dword/signed dword/signed byte) main::$1 = 6*main::$0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::b#0 = main::$1+main::$2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::screen#0+0) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Constant inlined main::$1 = (byte/signed byte/word/signed word/dword/signed dword) 6*(byte/signed byte/word/signed word/dword/signed dword) 14/(byte/signed byte/word/signed word/dword/signed dword) 3 Constant inlined main::$2 = (byte/signed byte/word/signed word/dword/signed dword) 22%(byte/signed byte/word/signed word/dword/signed dword) 3 Constant inlined main::$0 = (byte/signed byte/word/signed word/dword/signed dword) 14/(byte/signed byte/word/signed word/dword/signed dword) 3 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero main::screen#0+0 -Block Sequence Planned @begin @1 @end main main::@return -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -114,7 +112,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/const-param.log b/src/test/java/dk/camelot64/kickc/test/ref/const-param.log index 3a1c0f984..01d30c426 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/const-param.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/const-param.log @@ -176,27 +176,27 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) sum::return#0 = (byte) sum::return#5 Alias (byte*) main::screen#0 = (byte*) main::screen#1 (byte*) main::screen#2 (byte*) main::screen#3 Alias (byte) sum::return#1 = (byte) sum::return#6 Alias (byte) sum::return#2 = (byte) sum::return#7 Alias (byte) sum::return#3 = (byte~) sum::$0 (byte) sum::return#8 (byte) sum::return#4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Constant (const byte*) main::screen#0 = ((byte*))1024 Constant (const byte) main::reverse#0 = 128 Constant (const byte) sum::b#0 = 'c' Constant (const byte) sum::b#1 = 'm' Constant (const byte) sum::b#2 = 'l' -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) sum::a#0 = main::reverse#0 Constant (const byte) sum::a#1 = main::reverse#0 Constant (const byte) sum::a#2 = main::reverse#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::screen#0+0) Consolidated array index constant in *(main::screen#0+1) Consolidated array index constant in *(main::screen#0+2) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) sum::b#0 Inlining constant with var siblings (const byte) sum::b#1 @@ -210,12 +210,10 @@ Constant inlined sum::a#1 = (const byte) main::reverse#0 Constant inlined sum::b#0 = (byte) 'c' Constant inlined sum::b#2 = (byte) 'l' Constant inlined sum::a#0 = (const byte) main::reverse#0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Identical Phi Values (byte) sum::a#3 (const byte) main::reverse#0 -Succesful SSA optimization Pass2IdenticalPhiElimination +Successful SSA optimization Pass2IdenticalPhiElimination Simplifying constant plus zero main::screen#0+0 -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@return sum sum::@return -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@return sum sum::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -229,7 +227,6 @@ Propagating live ranges... Propagating live ranges... Created 1 initial phi equivalence classes Coalesced down to 1 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@return sum sum::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/const-pointer.log b/src/test/java/dk/camelot64/kickc/test/ref/const-pointer.log index a5393b8d1..c1ea5db98 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/const-pointer.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/const-pointer.log @@ -113,29 +113,27 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) main::screen#0 = (byte*) main::screen#1 (byte*) main::screen#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Simple Condition (bool~) main::$0 if((byte*) main::rem#0!=(byte*) main::NULL#0) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::screen#0 = ((byte*))1024 Constant (const byte*) main::NULL#0 = ((byte*))0 Constant (const byte*) main::rem#0 = ((byte*))255 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::screen#0+0) Consolidated array index constant in *(main::screen#0+0) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination if((const byte*) main::rem#0!=(const byte*) main::NULL#0) goto main::@1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating unused constant (const byte*) main::NULL#0 Eliminating unused constant (const byte*) main::rem#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Removing unused block main::@3 -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks OPTIMIZING CONTROL FLOW GRAPH Simplifying constant plus zero main::screen#0+0 -Block Sequence Planned @begin @1 @end main main::@1 main::@return -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -146,7 +144,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/const-word-pointer.log b/src/test/java/dk/camelot64/kickc/test/ref/const-word-pointer.log index 70ce28d2e..a74f54bfb 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/const-word-pointer.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/const-word-pointer.log @@ -108,21 +108,19 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (word*) main::wp#0 = (word*~) main::$0 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Constant (const byte*) main::screen#0 = ((byte*))1024 Constant (const word*) main::wp#0 = &main::w#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::screen#0+0) Consolidated array index constant in *(main::screen#0+1) Consolidated array index constant in *(main::screen#0+2) Consolidated array index constant in *(main::screen#0+3) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Simplifying constant plus zero main::screen#0+0 -Block Sequence Planned @begin @1 @end main main::@return -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -133,7 +131,6 @@ Propagating live ranges... Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/constabsmin.log b/src/test/java/dk/camelot64/kickc/test/ref/constabsmin.log index 6309e1bac..32214227b 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/constabsmin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/constabsmin.log @@ -61,12 +61,10 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Constant (const byte*) SCREEN#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH -Block Sequence Planned @begin @1 @end main main::@return -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -76,7 +74,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/constant-string-concat.log b/src/test/java/dk/camelot64/kickc/test/ref/constant-string-concat.log index 69c82b247..00be7051a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/constant-string-concat.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/constant-string-concat.log @@ -159,32 +159,32 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte[]) main::s#0 = (string~) main::$0 Alias (byte[]) main::s2#0 = (byte*~) main::$1 Alias (byte[]) main::s3#0 = (string~) main::$2 Alias (byte[]) main::s4#0 = (string~) main::$4 Alias (byte[]) main::s5#0 = (byte[]~) main::$5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::SCREEN#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::SCREEN#1 (byte*) main::SCREEN#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$6 if((byte) main::i#1!=rangelast(0,7)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte[]) main::s#0 = "e"+"l" Constant (const byte) main::e#0 = '!' Constant (const string) main::$3 = ""+'t' Constant (const byte*) main::SCREEN#0 = ((byte*))1024 Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte[]) main::s2#0 = main::s#0+'o' Constant (const byte[]) main::s4#0 = ""+'t'+'!' -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte[]) main::s3#0 = "cam"+main::s#0+'o' -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte[]) main::s5#0 = main::s3#0+main::s4#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Eliminating unused constant (const string) main::$7 Eliminating unused constant (const string) main::$8 Eliminating unused constant (const string) main::$9 @@ -192,16 +192,14 @@ Eliminating unused constant (const string) main::$10 Eliminating unused constant (const byte) main::e#0 Eliminating unused constant (const string) main::$3 Eliminating unused constant (const byte[]) main::s2#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,7)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8 OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -215,7 +213,6 @@ Created 1 initial phi equivalence classes Coalesced [10] main::i#3 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/constantmin.log b/src/test/java/dk/camelot64/kickc/test/ref/constantmin.log index 187087d14..6f5d2b6ea 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/constantmin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/constantmin.log @@ -146,27 +146,27 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) BGCOL#0 = (byte*~) $2 (byte*) BGCOL#2 Alias (byte) RED#0 = (byte) RED#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Redundant Phi (byte) RED#1 (byte) RED#0 Redundant Phi (byte*) BGCOL#1 (byte*) BGCOL#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((byte) main::i#1!=rangelast(40,79)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) STAR#0 = 81 Constant (const byte*) VIC#0 = ((byte*))53248 Constant (const byte/signed byte/word/signed word/dword/signed dword) $0 = 16*2 Constant (const byte) RED#0 = 2 Constant (const byte) main::i#0 = 40 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) $1 = VIC#0+$0 Constant (const byte/signed word/word/dword/signed dword) main::$0 = STAR#0+1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) BGCOL#0 = $1+1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(40,79)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 80 OPTIMIZING CONTROL FLOW GRAPH @@ -175,10 +175,8 @@ Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dwo Constant inlined $0 = (byte/signed byte/word/signed word/dword/signed dword) 16*(byte/signed byte/word/signed word/dword/signed dword) 2 Constant inlined $1 = (const byte*) VIC#0+(byte/signed byte/word/signed word/dword/signed dword) 16*(byte/signed byte/word/signed word/dword/signed dword) 2 Constant inlined main::$0 = (const byte) STAR#0+(byte/signed byte/word/signed word/dword/signed dword) 1 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -191,7 +189,6 @@ Created 1 initial phi equivalence classes Coalesced [11] main::i#3 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/constants.log b/src/test/java/dk/camelot64/kickc/test/ref/constants.log index 8c5e4a850..e60c2fc7d 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/constants.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/constants.log @@ -1635,13 +1635,13 @@ Alias (byte*) print_line_cursor#21 = (byte*) print_line_cursor#44 (byte*) print_ Alias (byte*) print_char_cursor#31 = (byte*) print_char_cursor#63 (byte*) print_char_cursor#64 (byte*) print_char_cursor#32 Alias (byte*) print_line_cursor#23 = (byte*) print_line_cursor#46 Alias (byte*) print_char_cursor#33 = (byte*) print_char_cursor#65 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte*) print_line_cursor#50 = (byte*) print_line_cursor#54 Alias (byte*) print_line_cursor#52 = (byte*) print_line_cursor#56 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) print_char_cursor#36 Self Phi Eliminated (byte*) print_line_cursor#27 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) print_char_cursor#36 (byte*) print_char_cursor#67 Redundant Phi (byte*) print_screen#1 (byte*) print_screen#4 Redundant Phi (byte*) print_line_cursor#27 (byte*) print_screen#1 @@ -1688,20 +1688,20 @@ Redundant Phi (byte*) print_line_cursor#21 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#31 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#23 (byte*) print_line_cursor#30 Redundant Phi (byte*) print_char_cursor#33 (byte*) print_char_cursor#10 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) print_char_cursor#73 (byte*) print_char_cursor#2 Redundant Phi (byte*) print_char_cursor#75 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#52 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#78 (byte*) print_char_cursor#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) print_char_cursor#67 (byte*) print_char_cursor#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) print_str::$0 if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 Simple Condition (bool~) print_ln::$1 if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 Simple Condition (bool~) assert_byte::$2 if((byte) assert_byte::b#3!=(byte) assert_byte::c#3) goto assert_byte::@1 Simple Condition (bool~) assert_sbyte::$2 if((signed byte) assert_sbyte::b#5!=(signed byte) assert_sbyte::c#5) goto assert_sbyte::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) print_line_cursor#0 = ((byte*))1024 Constant (const byte*) BGCOL#0 = ((byte*))53281 Constant (const byte) GREEN#0 = 5 @@ -1731,7 +1731,7 @@ Constant (const signed byte) assert_sbyte::c#4 = 2 Constant (const byte*) print_str::str#6 = assert_sbyte::str Constant (const byte*) print_str::str#7 = assert_sbyte::str1 Constant (const byte*) print_str::str#8 = assert_sbyte::str2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000 Constant (const byte) assert_byte::b#0 = test_bytes::bb#0 @@ -1739,23 +1739,23 @@ Constant (const byte) test_bytes::bc#0 = test_bytes::bb#0+2 Constant (const signed byte) assert_sbyte::b#0 = test_sbytes::bb#0 Constant (const signed byte) test_sbytes::bc#0 = test_sbytes::bb#0+2 Constant (const signed word/signed dword) test_sbytes::$9 = test_sbytes::$8-127 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) assert_byte::b#1 = test_bytes::bc#0 Constant (const signed byte) test_bytes::$3 = ((signed byte))test_bytes::bc#0 Constant (const signed byte) assert_sbyte::b#1 = test_sbytes::bc#0 Constant (const signed byte) test_sbytes::bd#0 = test_sbytes::bc#0-4 Constant (const signed byte) test_sbytes::bf#0 = ((signed byte))test_sbytes::$9 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const signed word/signed byte/signed dword) test_bytes::$4 = test_bytes::$3-4 Constant (const signed byte) assert_sbyte::b#2 = test_sbytes::bd#0 Constant (const signed byte) test_sbytes::be#0 = -test_sbytes::bd#0 Constant (const signed byte) assert_sbyte::b#4 = test_sbytes::bf#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) test_bytes::bd#0 = ((byte))test_bytes::$4 Constant (const signed byte) assert_sbyte::b#3 = test_sbytes::be#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) assert_byte::b#2 = test_bytes::bd#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Culled Empty Block (label) print_ln::@2 Culled Empty Block (label) print_cls::@2 Culled Empty Block (label) @14 @@ -1769,7 +1769,7 @@ Culled Empty Block (label) assert_sbyte::@7 Culled Empty Block (label) assert_sbyte::@8 Culled Empty Block (label) assert_sbyte::@9 Culled Empty Block (label) @20 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte*) print_str::str#2 Inlining constant with var siblings (const byte*) print_str::str#3 @@ -1840,11 +1840,9 @@ Constant inlined print_str::str#2 = (const string) assert_byte::str Constant inlined print_str::str#8 = (const string) assert_sbyte::str2 Constant inlined print_str::str#7 = (const string) assert_sbyte::str1 Constant inlined print_str::str#6 = (const string) assert_sbyte::str -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @19 @end main main::@1 main::@2 main::@return test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4 test_sbytes::@return assert_sbyte assert_sbyte::@5 assert_sbyte::@6 assert_sbyte::@3 assert_sbyte::@2 assert_sbyte::@return assert_sbyte::@1 print_str print_str::@1 print_str::@return print_str::@2 print_ln print_ln::@1 print_ln::@return test_bytes test_bytes::@1 test_bytes::@2 test_bytes::@return assert_byte assert_byte::@5 assert_byte::@6 assert_byte::@3 assert_byte::@2 assert_byte::@return assert_byte::@1 print_cls print_cls::@1 print_cls::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) -Block Sequence Planned @begin @19 @end main main::@1 main::@2 main::@return test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4 test_sbytes::@return assert_sbyte assert_sbyte::@5 assert_sbyte::@6 assert_sbyte::@3 assert_sbyte::@2 assert_sbyte::@return assert_sbyte::@1 print_str print_str::@1 print_str::@return print_str::@2 print_ln print_ln::@1 print_ln::@return print_ln::@3 test_bytes test_bytes::@1 test_bytes::@2 test_bytes::@return assert_byte assert_byte::@5 assert_byte::@6 assert_byte::@3 assert_byte::@2 assert_byte::@return assert_byte::@1 print_cls print_cls::@1 print_cls::@return print_cls::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @19 Adding NOP phi() at start of @end @@ -1903,7 +1901,6 @@ Coalesced [87] print_cls::sc#3 ← print_cls::sc#1 Coalesced down to 10 phi equivalence classes Culled Empty Block (label) print_ln::@3 Culled Empty Block (label) print_cls::@3 -Block Sequence Planned @begin @19 @end main main::@1 main::@2 main::@return test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4 test_sbytes::@return assert_sbyte assert_sbyte::@5 assert_sbyte::@6 assert_sbyte::@3 assert_sbyte::@2 assert_sbyte::@return assert_sbyte::@1 print_str print_str::@1 print_str::@return print_str::@2 print_ln print_ln::@1 print_ln::@return test_bytes test_bytes::@1 test_bytes::@2 test_bytes::@return assert_byte assert_byte::@5 assert_byte::@6 assert_byte::@3 assert_byte::@2 assert_byte::@return assert_byte::@1 print_cls print_cls::@1 print_cls::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @19 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/double-assignment.log b/src/test/java/dk/camelot64/kickc/test/ref/double-assignment.log index 462e6cb9d..65b9e12e7 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/double-assignment.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/double-assignment.log @@ -79,19 +79,17 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::a#0 = (byte) main::b#0 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Constant (const byte*) main::screen#0 = ((byte*))1024 Constant (const byte) main::a#0 = 12 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::screen#0+0) Consolidated array index constant in *(main::screen#0+1) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Simplifying constant plus zero main::screen#0+0 -Block Sequence Planned @begin @1 @end main main::@return -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -101,7 +99,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/double-import.log b/src/test/java/dk/camelot64/kickc/test/ref/double-import.log index 22c105626..033b200b9 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/double-import.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/double-import.log @@ -73,13 +73,11 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Constant (const byte*) BGCOL#0 = ((byte*))53281 Constant (const byte) RED#0 = 2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH -Block Sequence Planned @begin @1 @end main main::@return -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -89,7 +87,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/dword.log b/src/test/java/dk/camelot64/kickc/test/ref/dword.log index 9a76b96b3..c40fdfc23 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/dword.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/dword.log @@ -118,29 +118,27 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (dword) main::b#0 = (dword~) main::$0 Alias (byte) main::c#0 = (byte~) main::$1 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (dword) main::a#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (dword) main::a#1 (dword) main::a#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$2 if((byte) main::i#1!=rangelast(0,100)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const dword) main::a#0 = 4000000000 Constant (const byte) main::i#0 = 0 Constant (const byte*) main::SCREEN#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,100)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 101 OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -155,7 +153,6 @@ Created 1 initial phi equivalence classes Coalesced [12] main::i#3 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.log b/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.log index 35b443e77..504d60d2a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/emptyblock-error.log @@ -287,44 +287,42 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) menu::@8 Culled Empty Block (label) @4 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) mode::$1 ← *((byte*) B#1) != (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) mode::$0 ← *((byte*) B#1) == (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte*) B#11 = (byte*) B#8 (byte*) B#9 Alias (byte*) B#5 = (byte*) B#6 (byte*) B#7 Alias (byte*) B#1 = (byte*) B#2 (byte*) B#4 Alias (byte*) B#0 = (byte*) B#12 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) B#11 Self Phi Eliminated (byte*) B#1 Self Phi Eliminated (byte*) B#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) B#10 (byte*) B#0 Redundant Phi (byte*) B#11 (byte*) B#10 Redundant Phi (byte*) B#5 (byte*) B#11 Redundant Phi (byte*) B#3 (byte*) B#5 Redundant Phi (byte*) B#1 (byte*) B#3 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) mode::$1 if(*((byte*) B#0)!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mode::@4 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) B#0 = ((byte*))4096 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@2 if() condition always true - replacing block destination if(true) goto menu::@2 if() condition always true - replacing block destination if(true) goto mode::@2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return Removing unused block mode::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) main::@1 Culled Empty Block (label) main::@7 Culled Empty Block (label) menu::@1 Culled Empty Block (label) @2 Culled Empty Block (label) mode::@1 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH -Block Sequence Planned @begin @3 @end main main::@2 menu menu::@2 menu::@return mode mode::@2 mode::@4 -Block Sequence Planned @begin @3 @end main main::@2 menu menu::@2 menu::@return mode mode::@2 mode::@4 Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end @@ -342,7 +340,6 @@ Calls in [menu] to mode:9 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @3 @end main main::@2 menu menu::@2 menu::@return mode mode::@2 mode::@4 Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/fibmem.log b/src/test/java/dk/camelot64/kickc/test/ref/fibmem.log index aa65bb908..31a31a480 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/fibmem.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/fibmem.log @@ -109,29 +109,27 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Simple Condition (bool~) main::$3 if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 15) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte[15]) fibs#0 = ((byte*))4352 Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(fibs#0+0) Consolidated array index constant in *(fibs#0+1) Consolidated array index constant in assignment *(fibs#0+1 + main::$1) Consolidated array index constant in assignment *(fibs#0+2 + main::$0) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i#2 Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 Alias (byte) main::i#2 = (byte~) main::$0 (byte~) main::$1 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero fibs#0+0 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -144,7 +142,6 @@ Created 1 initial phi equivalence classes Coalesced [12] main::i#3 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/fillscreen.log b/src/test/java/dk/camelot64/kickc/test/ref/fillscreen.log index 1c0e162d0..b992d26e4 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/fillscreen.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/fillscreen.log @@ -183,39 +183,37 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@1 Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) fillscreen::SCREEN2#0 = (byte*~) fillscreen::$0 Alias (byte*) fillscreen::SCREEN3#0 = (byte*~) fillscreen::$1 Alias (byte*) fillscreen::SCREEN4#0 = (byte*~) fillscreen::$2 Alias (byte*) SCREEN#0 = (byte*) SCREEN#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#2 Self Phi Eliminated (byte) fillscreen::c#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN#4 (byte*) SCREEN#1 Redundant Phi (byte) fillscreen::c#2 (byte) fillscreen::c#0 Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#4 Redundant Phi (byte) fillscreen::c#1 (byte) fillscreen::c#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) fillscreen::$3 if((byte) fillscreen::j#1!=rangelast(0,255)) goto fillscreen::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) fillscreen::j#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) fillscreen::SCREEN2#0 = SCREEN#0+256 Constant (const byte*) fillscreen::SCREEN3#0 = SCREEN#0+512 Constant (const byte*) fillscreen::SCREEN4#0 = SCREEN#0+1000 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value fillscreen::j#1 ← ++ fillscreen::j#2 to ++ Resolved ranged comparison value if(fillscreen::j#1!=rangelast(0,255)) goto fillscreen::@1 to (byte/signed byte/word/signed word/dword/signed dword) 0 OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) fillscreen::j#0 Constant inlined fillscreen::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@return fillscreen fillscreen::@1 fillscreen::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting fillscreen::@3(between fillscreen::@1 and fillscreen::@1) -Block Sequence Planned @begin @2 @end main main::@return fillscreen fillscreen::@1 fillscreen::@return fillscreen::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -233,7 +231,6 @@ Created 1 initial phi equivalence classes Coalesced [17] fillscreen::j#3 ← fillscreen::j#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) fillscreen::@3 -Block Sequence Planned @begin @2 @end main main::@return fillscreen fillscreen::@1 fillscreen::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/flipper-rex2.log b/src/test/java/dk/camelot64/kickc/test/ref/flipper-rex2.log index de0b81fe3..b4ee45304 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/flipper-rex2.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/flipper-rex2.log @@ -600,7 +600,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @5 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) RASTER#6 = (byte*) RASTER#8 Alias (byte*) SCREEN#10 = (byte*) SCREEN#11 Alias (byte*) RASTER#11 = (byte*) RASTER#4 (byte*) RASTER#7 (byte*) RASTER#2 (byte*) RASTER#9 (byte*) RASTER#5 @@ -617,7 +617,7 @@ Alias (byte) plot::i#1 = (byte) plot::i#4 Alias (byte*) plot::line#1 = (byte*~) plot::$4 Alias (byte*) RASTER#0 = (byte*) RASTER#10 Alias (byte*) SCREEN#0 = (byte*) SCREEN#12 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) RASTER#1 Self Phi Eliminated (byte) main::c#4 Self Phi Eliminated (byte*) SCREEN#6 @@ -627,7 +627,7 @@ Self Phi Eliminated (byte*) SCREEN#2 Self Phi Eliminated (byte) flip::r#2 Self Phi Eliminated (byte*) plot::line#2 Self Phi Eliminated (byte) plot::y#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) RASTER#6 (byte*) RASTER#0 Redundant Phi (byte*) SCREEN#10 (byte*) SCREEN#0 Redundant Phi (byte*) RASTER#11 (byte*) RASTER#1 @@ -637,7 +637,7 @@ Redundant Phi (byte) flip::r#2 (byte) flip::r#4 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#2 Redundant Phi (byte*) plot::line#2 (byte*) plot::line#4 Redundant Phi (byte) plot::y#2 (byte) plot::y#4 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if(*((byte*) RASTER#1)!=(byte/word/signed word/dword/signed dword) 254) goto main::@3 Simple Condition (bool~) main::$2 if(*((byte*) RASTER#1)!=(byte/word/signed word/dword/signed dword) 255) goto main::@4 Simple Condition (bool~) main::$3 if((byte) main::c#1!=rangelast(25,1)) goto main::@2 @@ -647,7 +647,7 @@ Simple Condition (bool~) flip::$2 if((byte) flip::r#1!=rangelast(16,1)) goto fli Simple Condition (bool~) flip::$3 if((byte) flip::i#1!=rangelast(0,255)) goto flip::@3 Simple Condition (bool~) plot::$3 if((byte) plot::x#1<(byte/signed byte/word/signed word/dword/signed dword) 16) goto plot::@2 Simple Condition (bool~) plot::$5 if((byte) plot::y#1!=rangelast(16,1)) goto plot::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const word/signed word/dword/signed dword) $0 = 16*16 Constant (const word/signed word/dword/signed dword) $1 = 16*16 Constant (const byte*) RASTER#0 = ((byte*))53266 @@ -663,16 +663,16 @@ Constant (const byte/word/signed word/dword/signed dword) plot::$0 = 5*40 Constant (const byte) plot::i#0 = 0 Constant (const byte) plot::y#0 = 16 Constant (const byte) plot::x#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte[$0]) buffer1#0 = { fill( $0, 0) } Constant (const byte[$1]) buffer2#0 = { fill( $1, 0) } -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated constant in assignment plot::line#0 -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination if(true) goto main::@1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value main::c#1 ← -- main::c#4 to -- Resolved ranged comparison value if(main::c#1!=rangelast(25,1)) goto main::@2 to (byte/signed byte/word/signed word/dword/signed dword) 0 Resolved ranged next value prepare::i#1 ← ++ prepare::i#2 to ++ @@ -689,27 +689,27 @@ Culled Empty Block (label) main::@9 Culled Empty Block (label) main::@2 Culled Empty Block (label) main::@11 Culled Empty Block (label) flip::@5 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Self Phi Eliminated (byte*) RASTER#1 Self Phi Eliminated (byte*) SCREEN#6 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) RASTER#1 (byte*) RASTER#3 Redundant Phi (byte*) SCREEN#6 (byte*) SCREEN#7 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Not aliassing identity: RASTER#3 RASTER#3 Not aliassing identity: SCREEN#7 SCREEN#7 Self Phi Eliminated (byte*) RASTER#3 Self Phi Eliminated (byte*) SCREEN#7 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) RASTER#3 (const byte*) RASTER#0 Redundant Phi (byte*) SCREEN#7 (const byte*) SCREEN#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte*) plot::$1 = SCREEN#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) plot::line#0 = plot::$1+plot::$0+12 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Culled Empty Block (label) main::@1 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::c#0 Inlining constant with var siblings (const byte) prepare::i#0 @@ -737,8 +737,7 @@ Constant inlined flip::srcIdx#0 = (byte/signed byte/word/signed word/dword/signe Constant inlined prepare::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined plot::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined flip::c#0 = (byte/signed byte/word/signed word/dword/signed dword) 16 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @4 @end main main::@3 main::@4 main::@6 main::@7 main::@10 plot plot::@1 plot::@2 plot::@3 plot::@return flip flip::@1 flip::@2 flip::@4 flip::@3 flip::@return prepare prepare::@1 prepare::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@12(between main::@6 and main::@3) Added new block during phi lifting plot::@5(between plot::@3 and plot::@1) Added new block during phi lifting plot::@6(between plot::@2 and plot::@2) @@ -746,7 +745,6 @@ Added new block during phi lifting flip::@7(between flip::@4 and flip::@1) Added new block during phi lifting flip::@8(between flip::@2 and flip::@2) Added new block during phi lifting flip::@9(between flip::@3 and flip::@3) Added new block during phi lifting prepare::@3(between prepare::@1 and prepare::@1) -Block Sequence Planned @begin @4 @end main main::@3 main::@4 main::@6 main::@7 main::@10 main::@12 plot plot::@1 plot::@2 plot::@3 plot::@return plot::@5 plot::@6 flip flip::@1 flip::@2 flip::@4 flip::@3 flip::@return flip::@9 flip::@7 flip::@8 prepare prepare::@1 prepare::@return prepare::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @4 Adding NOP phi() at start of @end @@ -797,7 +795,6 @@ Culled Empty Block (label) flip::@9 Culled Empty Block (label) flip::@7 Culled Empty Block (label) flip::@8 Culled Empty Block (label) prepare::@3 -Block Sequence Planned @begin @4 @end main main::@3 main::@4 main::@6 main::@7 main::@10 plot plot::@1 plot::@2 plot::@3 plot::@return flip flip::@1 flip::@2 flip::@4 flip::@3 flip::@return prepare prepare::@1 prepare::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @4 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/forclassicmin.log b/src/test/java/dk/camelot64/kickc/test/ref/forclassicmin.log index 89f8388e6..2fe5c9782 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/forclassicmin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/forclassicmin.log @@ -106,26 +106,24 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) SCREEN#0 = (byte*~) $0 (byte*) SCREEN#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$0 if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 100) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -139,7 +137,6 @@ Created 1 initial phi equivalence classes Coalesced [10] main::i#3 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/forincrementassign.log b/src/test/java/dk/camelot64/kickc/test/ref/forincrementassign.log index 0eac2d6e4..1fbc9416a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/forincrementassign.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/forincrementassign.log @@ -103,27 +103,25 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::i#1 = (byte/signed word/word/dword/signed dword~) main::$0 Alias (byte*) SCREEN#0 = (byte*) SCREEN#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 40) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -137,7 +135,6 @@ Created 1 initial phi equivalence classes Coalesced [10] main::i#3 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/forrangedwords.log b/src/test/java/dk/camelot64/kickc/test/ref/forrangedwords.log index b11d3137e..59ba50e15 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/forrangedwords.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/forrangedwords.log @@ -155,47 +155,45 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Not aliassing identity: main::SCREEN#2 main::SCREEN#2 Alias (byte*) main::SCREEN#1 = (byte*) main::SCREEN#3 Alias (signed word) main::sw#0 = (signed word/signed dword~) main::$3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: main::SCREEN#2 main::SCREEN#2 Self Phi Eliminated (byte*) main::SCREEN#1 Self Phi Eliminated (byte*) main::SCREEN#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::SCREEN#1 (byte*) main::SCREEN#0 Redundant Phi (byte*) main::SCREEN#2 (byte*) main::SCREEN#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$2 if((word) main::w#1!=rangelast(0,65535)) goto main::@1 Simple Condition (bool~) main::$6 if((signed word) main::sw#1!=rangelast(main::sw#0,32766)) goto main::@2 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = ((byte*))1024 Constant (const word) main::w#0 = 0 Constant (const signed word) main::sw#0 = -32767 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::SCREEN#0+0) Consolidated array index constant in *(main::SCREEN#0+1) Consolidated array index constant in *(main::SCREEN#0+3) Consolidated array index constant in *(main::SCREEN#0+4) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Resolved ranged next value main::w#1 ← ++ main::w#2 to ++ Resolved ranged comparison value if(main::w#1!=rangelast(0,65535)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 0 Resolved ranged next value main::sw#1 ← ++ main::sw#2 to ++ Resolved ranged comparison value if(main::sw#1!=rangelast(main::sw#0,32766)) goto main::@2 to (word/signed word/dword/signed dword) 32767 Culled Empty Block (label) main::@3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const word) main::w#0 Inlining constant with var siblings (const signed word) main::sw#0 Constant inlined main::w#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::sw#0 = -(word/signed word/dword/signed dword) 32767 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero main::SCREEN#0+0 -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@return Added new block during phi lifting main::@5(between main::@1 and main::@1) Added new block during phi lifting main::@6(between main::@2 and main::@2) -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@return main::@6 main::@5 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -212,7 +210,6 @@ Coalesced [21] main::w#3 ← main::w#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) main::@6 Culled Empty Block (label) main::@5 -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/forrangemin.log b/src/test/java/dk/camelot64/kickc/test/ref/forrangemin.log index 42ab88bb4..8a6009226 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/forrangemin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/forrangemin.log @@ -154,47 +154,45 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Not aliassing identity: SCREEN2#1 SCREEN2#1 Alias (byte*) SCREEN2#2 = (byte*) SCREEN2#3 Alias (byte*) SCREEN1#0 = (byte*) SCREEN1#3 Alias (byte*) SCREEN2#0 = (byte*) SCREEN2#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: SCREEN2#1 SCREEN2#1 Self Phi Eliminated (byte*) SCREEN1#1 Self Phi Eliminated (byte*) SCREEN2#2 Self Phi Eliminated (byte*) SCREEN2#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN1#2 (byte*) SCREEN1#0 Redundant Phi (byte*) SCREEN2#4 (byte*) SCREEN2#0 Redundant Phi (byte*) SCREEN1#1 (byte*) SCREEN1#2 Redundant Phi (byte*) SCREEN2#2 (byte*) SCREEN2#4 Redundant Phi (byte*) SCREEN2#1 (byte*) SCREEN2#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$0 if((byte) main::i#1!=rangelast(0,255)) goto main::@1 Simple Condition (bool~) main::$1 if((byte) main::j#1!=rangelast(100,0)) goto main::@2 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN1#0 = ((byte*))1024 Constant (const byte*) SCREEN2#0 = ((byte*))1280 Constant (const byte) main::i#0 = 0 Constant (const byte) main::j#0 = 100 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,255)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 0 Resolved ranged next value main::j#1 ← -- main::j#2 to -- Resolved ranged comparison value if(main::j#1!=rangelast(100,0)) goto main::@2 to (byte/word/signed word/dword/signed dword) 255 Culled Empty Block (label) main::@3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::j#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 100 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@5(between main::@1 and main::@1) Added new block during phi lifting main::@6(between main::@2 and main::@2) -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@return main::@6 main::@5 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -210,7 +208,6 @@ Coalesced [15] main::i#3 ← main::i#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) main::@6 Culled Empty Block (label) main::@5 -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/forrangesymbolic.log b/src/test/java/dk/camelot64/kickc/test/ref/forrangesymbolic.log index 45ad69398..4f73db908 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/forrangesymbolic.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/forrangesymbolic.log @@ -95,24 +95,22 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) main::b#0 = (byte*~) main::$0 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Simple Condition (bool~) main::$1 if((byte*) main::b#1!=rangelast(main::b#0,main::BITMAP#0)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::BITMAP#0 = ((byte*))8192 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::b#0 = main::BITMAP#0+8191 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::b#1 ← -- main::b#2 to -- Resolved ranged comparison value if(main::b#1!=rangelast(main::b#0,main::BITMAP#0)) goto main::@1 to (byte*)(const byte*) main::BITMAP#0-(byte/signed byte/word/signed word/dword/signed dword) 1 OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte*) main::b#0 Constant inlined main::b#0 = (const byte*) main::BITMAP#0+(word/signed word/dword/signed dword) 8191 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -126,7 +124,6 @@ Created 1 initial phi equivalence classes Coalesced [10] main::b#3 ← main::b#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/fragment-synth.log b/src/test/java/dk/camelot64/kickc/test/ref/fragment-synth.log index 178a49eb3..68bbad031 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/fragment-synth.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/fragment-synth.log @@ -200,7 +200,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) fct::return#0 = (byte) fct::return#4 Alias (byte*) main::screen#0 = (byte*) main::screen#1 (byte*) main::screen#2 Alias (byte*) main::z#0 = (byte*) main::z#2 @@ -208,24 +208,24 @@ Alias (byte) main::a1#0 = (byte~) main::$0 Alias (byte) fct::return#1 = (byte) fct::return#5 Alias (byte) main::a2#0 = (byte~) main::$1 Alias (byte) fct::return#2 = (byte) fct::a#0 (byte~) fct::$0 (byte) fct::return#6 (byte) fct::return#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Constant (const byte*) main::screen#0 = ((byte*))1024 Constant (const byte*) main::z#0 = ((byte*))1104 Constant (const byte) main::x#0 = 170 Constant (const byte) main::x#1 = 85 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) fct::x#0 = main::x#0 Constant (const byte*) fct::z#0 = main::z#0 Constant (const byte*) main::z#1 = ++main::z#0 Constant (const byte) fct::x#1 = main::x#1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) fct::z#1 = main::z#1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::z#0+2) Consolidated array index constant in *(main::z#0+3) Consolidated array index constant in *(main::screen#0+0) Consolidated array index constant in *(main::screen#0+1) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with different constant siblings (const byte*) main::z#0 Inlining constant with different constant siblings (const byte) main::x#0 @@ -243,10 +243,8 @@ Constant inlined main::x#0 = (byte/word/signed word/dword/signed dword) 170 Constant inlined main::x#1 = (byte/signed byte/word/signed word/dword/signed dword) 85 Constant inlined fct::x#0 = (byte/word/signed word/dword/signed dword) 170 Constant inlined fct::x#1 = (byte/signed byte/word/signed word/dword/signed dword) 85 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero main::screen#0+0 -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return fct fct::@return -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return fct fct::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -259,7 +257,6 @@ Propagating live ranges... Propagating live ranges... Created 2 initial phi equivalence classes Coalesced down to 2 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return fct fct::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/halfscii.log b/src/test/java/dk/camelot64/kickc/test/ref/halfscii.log index 99bce064e..aeeec7cd4 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/halfscii.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/halfscii.log @@ -644,12 +644,12 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) main::$8 ← (byte) main::bits#0 < (byte/signed byte/word/signed word/dword/signed dword) 2 from (bool~) main::$7 ← (byte) main::bits#0 >= (byte/signed byte/word/signed word/dword/signed dword) 2 Inversing boolean not (bool~) main::$17 ← (byte) main::bits#1 < (byte/signed byte/word/signed word/dword/signed dword) 2 from (bool~) main::$16 ← (byte) main::bits#1 >= (byte/signed byte/word/signed word/dword/signed dword) 2 Inversing boolean not (bool~) main::$26 ← (byte) main::bits#2 < (byte/signed byte/word/signed word/dword/signed dword) 2 from (bool~) main::$25 ← (byte) main::bits#2 >= (byte/signed byte/word/signed word/dword/signed dword) 2 Inversing boolean not (bool~) main::$34 ← (byte) main::bits#3 < (byte/signed byte/word/signed word/dword/signed dword) 2 from (bool~) main::$33 ← (byte) main::bits#3 >= (byte/signed byte/word/signed word/dword/signed dword) 2 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte*) main::chargen1#0 = (byte*~) main::$0 (byte*) main::chargen1#4 Alias (byte) main::bits_gen#1 = (byte~) main::$10 (byte) main::bits_gen#12 Alias (byte) main::bits_gen#0 = (byte) main::bits_gen#10 @@ -696,7 +696,7 @@ Alias (byte*) CHARGEN#0 = (byte*) CHARGEN#3 Alias (byte*) CHARSET4#0 = (byte*) CHARSET4#2 Alias (byte*) SCREEN#0 = (byte*) SCREEN#13 Alias (byte*) D018#0 = (byte*) D018#14 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte*) main::chargen#10 = (byte*) main::chargen#3 (byte*) main::chargen#2 (byte*) main::chargen#4 (byte*) main::chargen#6 Alias (byte*) main::chargen1#0 = (byte*) main::chargen1#1 (byte*) main::chargen1#2 (byte*) main::chargen1#3 Alias (byte*) main::charset4#10 = (byte*) main::charset4#7 (byte*) main::charset4#5 (byte*) main::charset4#3 (byte*) main::charset4#2 @@ -704,14 +704,14 @@ Alias (byte*) CHARGEN#10 = (byte*) CHARGEN#8 (byte*) CHARGEN#6 (byte*) CHARGEN#4 Alias (byte*) PROCPORT#10 = (byte*) PROCPORT#11 (byte*) PROCPORT#7 (byte*) PROCPORT#5 (byte*) PROCPORT#2 Alias (byte*) SCREEN#10 = (byte*) SCREEN#8 (byte*) SCREEN#6 (byte*) SCREEN#4 (byte*) SCREEN#2 Alias (byte*) D018#10 = (byte*) D018#11 (byte*) D018#7 (byte*) D018#5 (byte*) D018#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) CHARGEN#10 Self Phi Eliminated (byte*) PROCPORT#10 Self Phi Eliminated (byte*) SCREEN#10 Self Phi Eliminated (byte*) D018#10 Self Phi Eliminated (byte*) SCREEN#1 Self Phi Eliminated (byte*) D018#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) PROCPORT#1 (byte*) PROCPORT#0 Redundant Phi (byte*) CHARGEN#1 (byte*) CHARGEN#0 Redundant Phi (byte*) CHARSET4#1 (byte*) CHARSET4#0 @@ -723,14 +723,14 @@ Redundant Phi (byte*) SCREEN#10 (byte*) SCREEN#12 Redundant Phi (byte*) D018#10 (byte*) D018#13 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#10 Redundant Phi (byte*) D018#1 (byte*) D018#10 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$8 if((byte) main::bits#0<(byte/signed byte/word/signed word/dword/signed dword) 2) goto main::@2 Simple Condition (bool~) main::$17 if((byte) main::bits#1<(byte/signed byte/word/signed word/dword/signed dword) 2) goto main::@3 Simple Condition (bool~) main::$26 if((byte) main::bits#2<(byte/signed byte/word/signed word/dword/signed dword) 2) goto main::@4 Simple Condition (bool~) main::$34 if((byte) main::bits#3<(byte/signed byte/word/signed word/dword/signed dword) 2) goto main::@5 Simple Condition (bool~) main::$39 if((byte*) main::chargen#1<(byte*~) main::$38) goto main::@1 Simple Condition (bool~) main::$40 if((byte) main::i#1!=rangelast(0,255)) goto main::@6 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte*) CHARGEN#0 = ((byte*))53248 Constant (const byte*) PROCPORT#0 = ((byte*))1 @@ -739,12 +739,12 @@ Constant (const byte*) CHARSET4#0 = ((byte*))10240 Constant (const byte[]) bits_count#0 = { 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4 } Constant (const byte) main::bits_gen#0 = 0 Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::chargen#0 = CHARGEN#0 Constant (const byte*) main::charset4#0 = CHARSET4#0 Constant (const byte) main::bits_gen#2 = main::bits_gen#0+1 Constant (const byte*) main::$38 = CHARGEN#0+2048 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,255)) goto main::@6 to (byte/signed byte/word/signed word/dword/signed dword) 0 OPTIMIZING CONTROL FLOW GRAPH @@ -759,15 +759,13 @@ Constant inlined main::chargen#0 = (const byte*) CHARGEN#0 Constant inlined main::bits_gen#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::$38 = (const byte*) CHARGEN#0+(word/signed word/dword/signed dword) 2048 Constant inlined main::charset4#0 = (const byte*) CHARSET4#0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero 0+1 -Block Sequence Planned @begin @1 @end main main::@1 main::@7 main::@2 main::@8 main::@3 main::@9 main::@4 main::@10 main::@5 main::@11 main::@6 main::@12 main::@return Added new block during phi lifting main::@13(between main::@5 and main::@1) Added new block during phi lifting main::@14(between main::@2 and main::@3) Added new block during phi lifting main::@15(between main::@3 and main::@4) Added new block during phi lifting main::@16(between main::@4 and main::@5) Added new block during phi lifting main::@17(between main::@6 and main::@6) -Block Sequence Planned @begin @1 @end main main::@1 main::@7 main::@2 main::@8 main::@3 main::@9 main::@4 main::@10 main::@5 main::@11 main::@6 main::@12 main::@return main::@17 main::@13 main::@16 main::@15 main::@14 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -830,7 +828,6 @@ Culled Empty Block (label) main::@13 Culled Empty Block (label) main::@16 Culled Empty Block (label) main::@15 Culled Empty Block (label) main::@14 -Block Sequence Planned @begin @1 @end main main::@1 main::@7 main::@2 main::@8 main::@3 main::@9 main::@4 main::@10 main::@5 main::@11 main::@6 main::@12 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/helloworld.log b/src/test/java/dk/camelot64/kickc/test/ref/helloworld.log index 15da5e438..23c7e8c3d 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/helloworld.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/helloworld.log @@ -751,9 +751,9 @@ Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#3 (byte*) print_l Alias (byte*) print_char_cursor#14 = (byte*) print_char_cursor#6 (byte*) print_char_cursor#15 (byte*) print_char_cursor#7 Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#8 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) print_char_cursor#11 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) print_str::str#4 (byte*) print_str::str#1 Redundant Phi (byte*) print_char_cursor#21 (byte*) print_char_cursor#19 Redundant Phi (byte*) print_line_cursor#12 (byte*) print_line_cursor#13 @@ -766,26 +766,24 @@ Redundant Phi (byte*) print_line_cursor#10 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#14 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#16 (byte*) print_char_cursor#14 Redundant Phi (byte*) print_line_cursor#11 (byte*) print_line_cursor#10 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) print_str::$0 if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 Simple Condition (bool~) print_ln::$1 if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) print_char_cursor#0 = ((byte*))1024 Constant (const byte*) print_str::str#1 = main::str -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Culled Empty Block (label) print_ln::@2 Culled Empty Block (label) main::@2 Culled Empty Block (label) @16 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte*) print_str::str#1 Inlining constant with var siblings (const byte*) print_char_cursor#0 Constant inlined print_char_cursor#0 = ((byte*))(word/signed word/dword/signed dword) 1024 Constant inlined print_str::str#1 = (const string) main::str -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @15 @end main main::@1 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) -Block Sequence Planned @begin @15 @end main main::@1 main::@return print_ln print_ln::@1 print_ln::@return print_ln::@3 print_str print_str::@1 print_str::@return print_str::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @15 Adding NOP phi() at start of @end @@ -810,7 +808,6 @@ Coalesced [22] print_str::str#5 ← print_str::str#0 Coalesced [23] print_char_cursor#22 ← print_char_cursor#1 Coalesced down to 3 phi equivalence classes Culled Empty Block (label) print_ln::@3 -Block Sequence Planned @begin @15 @end main main::@1 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @15 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/helloworld2.log b/src/test/java/dk/camelot64/kickc/test/ref/helloworld2.log index f8317588e..5fc1480df 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/helloworld2.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/helloworld2.log @@ -181,31 +181,31 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@2 Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) screen#1 = (byte*) screen#2 Alias (byte*) main::hello#0 = (byte*) main::hello#1 Alias (byte*) print2::at#1 = (byte*~) main::$1 Alias (byte*) screen#0 = (byte*) screen#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) print2::msg#2 Self Phi Eliminated (byte*) print2::at#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) screen#1 (byte*) screen#0 Redundant Phi (byte*) print2::msg#2 (byte*) print2::msg#3 Redundant Phi (byte*) print2::at#2 (byte*) print2::at#3 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) print2::$0 if(*((byte*) print2::msg#3 + (byte) print2::i#1)!=(byte) '@') goto print2::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) screen#0 = ((byte*))1024 Constant (const byte*) main::hello#0 = main::$3 Constant (const byte) print2::j#0 = 0 Constant (const byte) print2::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) print2::at#0 = screen#0 Constant (const byte*) print2::msg#0 = main::hello#0 Constant (const byte*) print2::at#1 = screen#0+80 Constant (const byte*) print2::msg#1 = main::hello#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) print2::j#0 Inlining constant with var siblings (const byte) print2::i#0 @@ -220,12 +220,10 @@ Constant inlined print2::i#0 = (byte/signed byte/word/signed word/dword/signed d Constant inlined print2::at#1 = (const byte*) screen#0+(byte/signed byte/word/signed word/dword/signed dword) 80 Constant inlined main::$3 = (const byte*) main::hello#0 Constant inlined print2::at#0 = (const byte*) screen#0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Identical Phi Values (byte*) print2::msg#3 (const byte*) main::hello#0 -Succesful SSA optimization Pass2IdenticalPhiElimination -Block Sequence Planned @begin @2 @end main main::@1 main::@return print2 print2::@1 print2::@return +Successful SSA optimization Pass2IdenticalPhiElimination Added new block during phi lifting print2::@3(between print2::@1 and print2::@1) -Block Sequence Planned @begin @2 @end main main::@1 main::@return print2 print2::@1 print2::@return print2::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -247,7 +245,6 @@ Coalesced [16] print2::i#3 ← print2::i#1 Coalesced [17] print2::j#3 ← print2::j#1 Coalesced down to 3 phi equivalence classes Culled Empty Block (label) print2::@3 -Block Sequence Planned @begin @2 @end main main::@1 main::@return print2 print2::@1 print2::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/ifmin.log b/src/test/java/dk/camelot64/kickc/test/ref/ifmin.log index 38699617c..5a9d26e94 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/ifmin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/ifmin.log @@ -133,34 +133,32 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) main::$1 ← (byte) main::i#2 >= (byte/signed byte/word/signed word/dword/signed dword) 50 from (bool~) main::$0 ← (byte) main::i#2 < (byte/signed byte/word/signed word/dword/signed dword) 50 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) main::i#2 = (byte) main::i#4 Alias (byte*) SCREEN#1 = (byte*) SCREEN#2 Alias (byte*) SCREEN#0 = (byte*) SCREEN#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte*) SCREEN#1 = (byte*) SCREEN#4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#3 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#3 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((byte) main::i#2>=(byte/signed byte/word/signed word/dword/signed dword) 50) goto main::@2 Simple Condition (bool~) main::$2 if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 100) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@5(between main::@2 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return main::@5 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -174,7 +172,6 @@ Created 1 initial phi equivalence classes Coalesced [11] main::i#5 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@5 -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/immzero.log b/src/test/java/dk/camelot64/kickc/test/ref/immzero.log index 7ae2d6638..f18183dee 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/immzero.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/immzero.log @@ -106,15 +106,15 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (word) main::w#0 = (byte/signed byte/word/signed word/dword/signed dword~) main::$0 Alias (word) main::w#1 = (word~) main::$1 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Simple Condition (bool~) main::$2 if((byte) main::j#1!=rangelast(0,10)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const word) main::w#0 = ((word))0 Constant (const byte) main::j#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::j#1 ← ++ main::j#2 to ++ Resolved ranged comparison value if(main::j#1!=rangelast(0,10)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 11 OPTIMIZING CONTROL FLOW GRAPH @@ -122,10 +122,8 @@ Inlining constant with var siblings (const word) main::w#0 Inlining constant with var siblings (const byte) main::j#0 Constant inlined main::w#0 = ((word))(byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -142,7 +140,6 @@ Coalesced [10] main::w#3 ← main::w#1 Coalesced [11] main::j#3 ← main::j#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/importing.log b/src/test/java/dk/camelot64/kickc/test/ref/importing.log index 70b5c6133..3d9b3c805 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/importing.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/importing.log @@ -81,14 +81,12 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Constant (const byte*) BGCOL#0 = ((byte*))53281 Constant (const byte) RED#0 = 2 Constant (const byte*) main::screen#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH -Block Sequence Planned @begin @1 @end main main::@return -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -98,7 +96,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/incd020.log b/src/test/java/dk/camelot64/kickc/test/ref/incd020.log index 8c3293f85..3f4336b5b 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/incd020.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/incd020.log @@ -90,23 +90,21 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) BGCOL#0 = (byte*) BGCOL#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) BGCOL#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) BGCOL#2 (byte*) BGCOL#0 Redundant Phi (byte*) BGCOL#1 (byte*) BGCOL#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte*) BGCOL#0 = ((byte*))53280 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks OPTIMIZING CONTROL FLOW GRAPH -Block Sequence Planned @begin @1 @end main main::@1 -Block Sequence Planned @begin @1 @end main main::@1 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -117,7 +115,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@1 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/incrementinarray.log b/src/test/java/dk/camelot64/kickc/test/ref/incrementinarray.log index 684d4f919..f162d6111 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/incrementinarray.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/incrementinarray.log @@ -877,10 +877,10 @@ Alias (byte*) print_line_cursor#14 = (byte*) print_line_cursor#6 (byte*) print_l Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#9 (byte*) print_char_cursor#19 (byte*) print_char_cursor#20 Alias (byte*) print_line_cursor#16 = (byte*) print_line_cursor#8 Alias (byte*) print_char_cursor#11 = (byte*) print_char_cursor#21 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) print_char_cursor#14 Self Phi Eliminated (byte*) print_line_cursor#12 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) print_str::str#4 (byte*) print_str::str#1 Redundant Phi (byte*) print_char_cursor#27 (byte*) print_char_cursor#25 Redundant Phi (byte*) print_line_cursor#17 (byte*) print_line_cursor#19 @@ -898,23 +898,23 @@ Redundant Phi (byte*) print_line_cursor#14 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#10 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#16 (byte*) print_line_cursor#14 Redundant Phi (byte*) print_char_cursor#11 (byte*) print_char_cursor#10 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) print_str::$0 if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 Simple Condition (bool~) print_ln::$1 if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@1 Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 Simple Condition (bool~) main::$3 if((byte) main::i#1!=rangelast(0,10)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) print_line_cursor#0 = ((byte*))1024 Constant (const byte[]) txt#0 = $0 Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000 Constant (const byte*) print_str::str#1 = txt#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(txt#0+1) Consolidated array index constant in *(txt#0+1) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,10)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 11 Culled Empty Block (label) print_ln::@2 @@ -922,7 +922,7 @@ Culled Empty Block (label) print_cls::@2 Culled Empty Block (label) @14 Culled Empty Block (label) main::@3 Culled Empty Block (label) @16 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte*) print_str::str#1 Inlining constant with var siblings (const byte*) print_cls::sc#0 @@ -934,12 +934,10 @@ Constant inlined print_cls::$0 = ((byte*))(word/signed word/dword/signed dword) Constant inlined print_cls::sc#0 = ((byte*))(word/signed word/dword/signed dword) 1024 Constant inlined $0 = (const byte[]) txt#0 Constant inlined print_line_cursor#0 = ((byte*))(word/signed word/dword/signed dword) 1024 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @15 @end main main::@1 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@6(between main::@5 and main::@1) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) -Block Sequence Planned @begin @15 @end main main::@1 main::@4 main::@5 main::@return main::@6 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @15 Adding NOP phi() at start of @end @@ -970,7 +968,6 @@ Coalesced [38] print_cls::sc#3 ← print_cls::sc#1 Coalesced down to 5 phi equivalence classes Culled Empty Block (label) print_ln::@3 Culled Empty Block (label) print_cls::@3 -Block Sequence Planned @begin @15 @end main main::@1 main::@4 main::@5 main::@return main::@6 print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @15 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inline-asm.log b/src/test/java/dk/camelot64/kickc/test/ref/inline-asm.log index 2ad9200e2..540c448fa 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inline-asm.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inline-asm.log @@ -65,10 +65,8 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH -Block Sequence Planned @begin @1 @end main main::@return -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -78,7 +76,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inline-assignment.log b/src/test/java/dk/camelot64/kickc/test/ref/inline-assignment.log index 35663c659..1a757ef97 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inline-assignment.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inline-assignment.log @@ -102,26 +102,24 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::a#0 = (byte) main::i#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Simple Condition (bool~) main::$1 if((byte) main::i#1!=rangelast(0,39)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$0 = SCREEN#0+80 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::a#0 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,39)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 40 OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::$0 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 80 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -135,7 +133,6 @@ Created 1 initial phi equivalence classes Coalesced [11] main::a#1 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inline-function-if.log b/src/test/java/dk/camelot64/kickc/test/ref/inline-function-if.log index 9426348b7..c755e744e 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inline-function-if.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inline-function-if.log @@ -243,7 +243,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::toUpper1_ch#0 = (byte) main::toUpper1_ch#1 (byte) main::toUpper1_res#0 (byte) main::toUpper1_res#3 Alias (bool) main::toUpper1_bo#0 = (bool) main::toUpper1_bo#1 Alias (byte*) screen#11 = (byte*) screen#7 (byte*) screen#8 @@ -254,53 +254,51 @@ Alias (bool) main::toUpper2_bo#0 = (bool) main::toUpper2_bo#1 Alias (byte) main::toUpper2_return#0 = (byte) main::toUpper2_res#2 (byte) main::toUpper2_return#2 (byte) main::toUpper2_return#1 (byte) main::toUpper2_return#3 (byte~) main::$1 Alias (byte*) screen#2 = (byte*) screen#4 (byte*) screen#6 Alias (byte*) screen#0 = (byte*) screen#12 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte*) screen#1 = (byte*) screen#11 (byte*) screen#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Redundant Phi (byte*) screen#1 (byte*) screen#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Rewriting ! if()-condition to reversed if() (bool) main::toUpper1_$0#0 ← ! (bool) main::toUpper1_bo#0 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Rewriting ! if()-condition to reversed if() (bool) main::toUpper2_$0#0 ← ! (bool) main::toUpper2_bo#0 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Constant (const byte*) screen#0 = ((byte*))1024 Constant (const byte) main::toUpper1_ch#0 = 'c' Constant (const bool) main::toUpper1_bo#0 = true Constant (const byte) main::toUpper2_ch#0 = 'm' Constant (const bool) main::toUpper2_bo#0 = false -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::toUpper1_res#1 = main::toUpper1_ch#0+64 Constant (const byte) main::toUpper2_res#1 = main::toUpper2_ch#0+64 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(screen#0+0) Consolidated array index constant in *(screen#0+1) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Removing PHI-reference to removed block (main::toUpper1) in block main::toUpper1_@1 if() condition always true - replacing block destination if((const bool) main::toUpper1_bo#0) goto main::toUpper1_@2 if() condition always false - eliminating if((const bool) main::toUpper2_bo#0) goto main::toUpper2_@2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating unused constant (const bool) main::toUpper1_bo#0 Eliminating unused constant (const bool) main::toUpper2_bo#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Removing PHI-reference to removed block (main::toUpper2_@2) in block main::toUpper2_@1 Removing unused block main::toUpper2_@2 -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) main::toUpper1_@2 Culled Empty Block (label) main::toUpper1_@return Culled Empty Block (label) main::toUpper2_@return -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Redundant Phi (byte) main::toUpper1_return#0 (const byte) main::toUpper1_res#1 Redundant Phi (byte) main::toUpper2_return#0 (const byte) main::toUpper2_ch#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Eliminating unused constant (const byte) main::toUpper2_res#1 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Culled Empty Block (label) main::toUpper1_@1 Culled Empty Block (label) main::toUpper2_@1 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Simplifying constant plus zero screen#0+0 -Block Sequence Planned @begin @2 @end main main::toUpper1 main::@1 main::toUpper2 main::@2 main::@return -Block Sequence Planned @begin @2 @end main main::toUpper1 main::@1 main::toUpper2 main::@2 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -313,7 +311,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::toUpper1 main::@1 main::toUpper2 main::@2 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inline-function-level2.log b/src/test/java/dk/camelot64/kickc/test/ref/inline-function-level2.log index 9964c0f64..040a730f7 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inline-function-level2.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inline-function-level2.log @@ -438,7 +438,7 @@ Alias (byte) main::line2_ysize#1 = (byte) main::line2_ysize#2 (byte) main::line2 Alias (byte*) cur_line#11 = (byte*) cur_line#3 (byte*) cur_line#4 Alias (byte*) cur_line#15 = (byte*) cur_line#5 Alias (byte*) cur_line#12 = (byte*) cur_line#6 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: main::line1_ch#1 main::line1_ch#1 Not aliassing identity: main::line1_xadd#1 main::line1_xadd#1 Not aliassing identity: main::line1_ysize#1 main::line1_ysize#1 @@ -451,7 +451,7 @@ Self Phi Eliminated (byte) main::line1_ysize#1 Self Phi Eliminated (byte) main::line2_ch#1 Self Phi Eliminated (byte) main::line2_xadd#1 Self Phi Eliminated (byte) main::line2_ysize#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) main::line1_ch#1 (byte) main::line1_ch#0 Redundant Phi (byte) main::line1_xadd#1 (byte) main::line1_xadd#0 Redundant Phi (byte) main::line1_ysize#1 (byte) main::line1_ysize#0 @@ -459,11 +459,11 @@ Redundant Phi (byte) main::line2_ch#1 (byte) main::line2_ch#0 Redundant Phi (byte) main::line2_xadd#1 (byte) main::line2_xadd#0 Redundant Phi (byte) main::line2_ysize#1 (byte) main::line2_ysize#0 Redundant Phi (byte*) cur_line#12 (byte*) cur_line#11 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((byte*) main::sc#1<(word/signed word/dword/signed dword~) main::$0) goto main::@1 Simple Condition (bool) main::line1_$2#0 if((byte) main::line1_i#1<(byte) main::line1_ysize#0) goto main::line1_@1 Simple Condition (bool) main::line2_$2#0 if((byte) main::line2_i#1<(byte) main::line2_ysize#0) goto main::line2_@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::sc#0 = ((byte*))1024 Constant (const word/signed word/dword/signed dword) main::$0 = 1024+1000 Constant (const byte) main::line1_xpos#0 = 2 @@ -479,25 +479,25 @@ Constant (const byte) main::line2_ch#0 = '.' Constant (const byte*) cur_line#2 = ((byte*))1024 Constant (const byte) main::line2_i#0 = 0 Constant (const byte*) cur_line#15 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Fixing inline constructor with main::$4 ← main::line1_xpos#0 w= 0 Fixing inline constructor with main::$5 ← main::line2_xpos#0 w= 0 -Succesful SSA optimization Pass2FixInlineConstructors +Successful SSA optimization Pass2FixInlineConstructors Inferred type updated to word/signed word/dword/signed dword in (word~) main::$4 ← (const byte) main::line1_xpos#0 w= (byte/signed byte/word/signed word/dword/signed dword) 0 Inferred type updated to word/signed word/dword/signed dword in (word~) main::$5 ← (const byte) main::line2_xpos#0 w= (byte/signed byte/word/signed word/dword/signed dword) 0 Eliminating unused constant (const byte*) cur_line#15 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Culled Empty Block (label) main::@2 Culled Empty Block (label) main::@3 Culled Empty Block (label) @1 Culled Empty Block (label) @4 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (word) main::line1_pos#0 = (word/signed word/dword/signed dword~) main::$4 Alias (word) main::line2_pos#0 = (word/signed word/dword/signed dword~) main::$5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Constant (const word) main::line1_pos#0 = main::line1_xpos#0*256+0 Constant (const word) main::line2_pos#0 = main::line2_xpos#0*256+0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte*) main::sc#0 Inlining constant with var siblings (const byte) main::line1_i#0 @@ -514,14 +514,12 @@ Constant inlined cur_line#0 = ((byte*))(word/signed word/dword/signed dword) 102 Constant inlined main::sc#0 = ((byte*))(word/signed word/dword/signed dword) 1024 Constant inlined cur_line#2 = ((byte*))(word/signed word/dword/signed dword) 1024 Constant inlined main::line1_pos#0 = (const byte) main::line1_xpos#0*(word/signed word/dword/signed dword) 256+(byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero main::line1_xpos#0*256+0 Simplifying constant plus zero main::line2_xpos#0*256+0 -Block Sequence Planned @begin @3 @end main main::@1 main::line1 main::line1_@1 main::plot1 main::@4 main::line2 main::line2_@1 main::plot2 main::@6 main::@return Added new block during phi lifting main::@7(between main::@1 and main::@1) Added new block during phi lifting main::@8(between main::@4 and main::line1_@1) Added new block during phi lifting main::@9(between main::@6 and main::line2_@1) -Block Sequence Planned @begin @3 @end main main::@1 main::line1 main::line1_@1 main::plot1 main::@4 main::line2 main::line2_@1 main::plot2 main::@6 main::@return main::@9 main::@8 main::@7 Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end @@ -550,7 +548,6 @@ Coalesced down to 7 phi equivalence classes Culled Empty Block (label) main::@9 Culled Empty Block (label) main::@8 Culled Empty Block (label) main::@7 -Block Sequence Planned @begin @3 @end main main::@1 main::line1 main::line1_@1 main::plot1 main::@4 main::line2 main::line2_@1 main::plot2 main::@6 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inline-function-min.log b/src/test/java/dk/camelot64/kickc/test/ref/inline-function-min.log index 61dc4c5ba..cf24442d3 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inline-function-min.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inline-function-min.log @@ -232,7 +232,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::sum1_a#0 = (byte) main::sum1_a#1 Alias (byte) main::sum1_b#0 = (byte) main::sum1_b#1 Alias (byte*) screen#1 = (byte*) screen#7 (byte*) screen#10 (byte*) screen#4 (byte*) screen#8 (byte*) screen#5 (byte*) screen#2 (byte*) screen#9 (byte*) screen#6 (byte*) screen#3 @@ -244,9 +244,9 @@ Alias (byte) main::sum3_a#0 = (byte) main::sum3_a#1 Alias (byte) main::sum3_b#0 = (byte) main::sum3_b#1 Alias (byte) main::sum3_return#0 = (byte) main::sum3_$0#0 (byte) main::sum3_return#2 (byte) main::sum3_return#1 (byte) main::sum3_return#3 (byte~) main::$2 Alias (byte*) screen#0 = (byte*) screen#11 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Redundant Phi (byte*) screen#1 (byte*) screen#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte*) screen#0 = ((byte*))1024 Constant (const byte) main::sum1_a#0 = 2 Constant (const byte) main::sum1_b#0 = 1 @@ -254,23 +254,21 @@ Constant (const byte) main::sum2_a#0 = 10 Constant (const byte) main::sum2_b#0 = 3 Constant (const byte) main::sum3_a#0 = 4 Constant (const byte) main::sum3_b#0 = 8 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::sum1_return#0 = main::sum1_a#0+main::sum1_b#0 Constant (const byte) main::sum2_return#0 = main::sum2_a#0+main::sum2_b#0 Constant (const byte) main::sum3_return#0 = main::sum3_a#0+main::sum3_b#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(screen#0+0) Consolidated array index constant in *(screen#0+1) Consolidated array index constant in *(screen#0+2) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Culled Empty Block (label) main::sum1_@return Culled Empty Block (label) main::sum2_@return Culled Empty Block (label) main::sum3_@return -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Simplifying constant plus zero screen#0+0 -Block Sequence Planned @begin @2 @end main main::sum1 main::@1 main::sum2 main::@2 main::sum3 main::@3 main::@return -Block Sequence Planned @begin @2 @end main main::sum1 main::@1 main::sum2 main::@2 main::sum3 main::@3 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -284,7 +282,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::sum1 main::@1 main::sum2 main::@2 main::sum3 main::@3 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inline-function-print.log b/src/test/java/dk/camelot64/kickc/test/ref/inline-function-print.log index 0843f9731..2629641b8 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inline-function-print.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inline-function-print.log @@ -229,7 +229,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) main::print1_msg#0 = (byte*) main::hello#0 (byte*) main::print1_msg#2 (byte*) main::hello#3 Alias (byte*) main::print1_at#0 = (byte*) main::print1_at#2 Alias (byte*) screen#1 = (byte*) screen#5 @@ -237,14 +237,14 @@ Alias (byte*) screen#2 = (byte*) screen#4 Alias (byte*) main::hello#1 = (byte*) main::hello#2 (byte*) main::print2_msg#0 (byte*) main::print2_msg#2 Alias (byte*) main::print2_at#0 = (byte*~) main::$2 (byte*) main::print2_at#2 Alias (byte*) screen#0 = (byte*) screen#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::print1_msg#1 Self Phi Eliminated (byte*) main::print1_at#1 Self Phi Eliminated (byte*) screen#2 Self Phi Eliminated (byte*) main::hello#1 Self Phi Eliminated (byte*) main::print2_msg#1 Self Phi Eliminated (byte*) main::print2_at#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) screen#1 (byte*) screen#0 Redundant Phi (byte*) main::print1_msg#1 (byte*) main::print1_msg#0 Redundant Phi (byte*) main::print1_at#1 (byte*) main::print1_at#0 @@ -252,10 +252,10 @@ Redundant Phi (byte*) screen#2 (byte*) screen#1 Redundant Phi (byte*) main::hello#1 (byte*) main::print1_msg#0 Redundant Phi (byte*) main::print2_msg#1 (byte*) main::hello#1 Redundant Phi (byte*) main::print2_at#1 (byte*) main::print2_at#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool) main::print1_$0#0 if(*((byte*) main::print1_msg#0 + (byte) main::print1_i#1)!=(byte) '@') goto main::print1_@1 Simple Condition (bool) main::print2_$0#0 if(*((byte*) main::print1_msg#0 + (byte) main::print2_i#1)!=(byte) '@') goto main::print2_@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) screen#0 = ((byte*))1024 Constant (const byte*) main::print1_msg#0 = main::$4 Constant (const byte) main::print1_j#0 = 0 @@ -263,12 +263,12 @@ Constant (const byte) main::print1_i#0 = 0 Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$1 = 2*40 Constant (const byte) main::print2_j#0 = 0 Constant (const byte) main::print2_i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::print1_at#0 = screen#0 Constant (const byte*) main::print2_at#0 = screen#0+main::$1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Culled Empty Block (label) main::@1 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::print1_j#0 Inlining constant with var siblings (const byte) main::print1_i#0 @@ -281,11 +281,9 @@ Constant inlined main::$1 = (byte/signed byte/word/signed word/dword/signed dwor Constant inlined main::$4 = (const byte*) main::print1_msg#0 Constant inlined main::print1_i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::print1_j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::print1 main::print1_@1 main::print2 main::print2_@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::print1_@1 and main::print1_@1) Added new block during phi lifting main::@4(between main::print2_@1 and main::print2_@1) -Block Sequence Planned @begin @2 @end main main::print1 main::print1_@1 main::print2 main::print2_@1 main::@return main::@4 main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -308,7 +306,6 @@ Coalesced [21] main::print1_j#3 ← main::print1_j#1 Coalesced down to 4 phi equivalence classes Culled Empty Block (label) main::@4 Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @2 @end main main::print1 main::print1_@1 main::print2 main::print2_@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inline-function.log b/src/test/java/dk/camelot64/kickc/test/ref/inline-function.log index 3a5a47b9e..aaaac6057 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inline-function.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inline-function.log @@ -561,7 +561,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) RASTER#3 = (byte*) RASTER#7 Alias (byte*) screen#5 = (byte*) screen#9 Alias (byte*) charset1#3 = (byte*) charset1#5 @@ -592,7 +592,7 @@ Alias (byte*) charset1#0 = (byte*) charset1#8 Alias (byte*) D018#0 = (byte*) D018#16 Alias (byte*) BGCOL#0 = (byte*) BGCOL#16 Alias (byte*) charset2#0 = (byte*) charset2#14 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) RASTER#1 Self Phi Eliminated (byte*) screen#1 Self Phi Eliminated (byte*) charset1#1 @@ -605,7 +605,7 @@ Self Phi Eliminated (byte*) charset2#1 Self Phi Eliminated (byte*) D018#10 Self Phi Eliminated (byte*) BGCOL#10 Self Phi Eliminated (byte*) charset1#10 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) RASTER#9 (byte*) RASTER#0 Redundant Phi (byte*) screen#11 (byte*) screen#0 Redundant Phi (byte*) charset1#6 (byte*) charset1#0 @@ -624,66 +624,66 @@ Redundant Phi (byte*) charset2#1 (byte*) charset2#10 Redundant Phi (byte*) D018#10 (byte*) D018#1 Redundant Phi (byte*) BGCOL#10 (byte*) BGCOL#1 Redundant Phi (byte*) charset1#10 (byte*) charset1#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$0 if(*((byte*) RASTER#3)!=(byte/word/signed word/dword/signed dword) 255) goto main::@5 Simple Condition (bool~) main::$2 if(*((byte*) RASTER#3)!=(byte/signed byte/word/signed word/dword/signed dword) 98) goto main::@8 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) RASTER#0 = ((byte*))53266 Constant (const byte*) D018#0 = ((byte*))53272 Constant (const byte*) BGCOL#0 = ((byte*))53281 Constant (const byte*) screen#0 = ((byte*))1024 Constant (const byte*) charset1#0 = ((byte*))4096 Constant (const byte*) charset2#0 = ((byte*))6144 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating Noop Cast (word) main::toD0181_$0#0 ← ((word)) (byte*) main::toD0181_screen#0 Eliminating Noop Cast (word) main::toD0181_$2#0 ← ((word)) (byte*) main::toD0181_charset#0 Eliminating Noop Cast (word) main::toD0182_$0#0 ← ((word)) (byte*) main::toD0182_screen#0 Eliminating Noop Cast (word) main::toD0182_$2#0 ← ((word)) (byte*) main::toD0182_charset#0 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) main::@2 Culled Empty Block (label) main::@5 Culled Empty Block (label) main::toD0181_@return Culled Empty Block (label) main::@8 Culled Empty Block (label) main::toD0182_@return -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Self Phi Eliminated (byte*) RASTER#3 Self Phi Eliminated (byte*) screen#5 Self Phi Eliminated (byte*) charset1#3 Self Phi Eliminated (byte*) D018#11 Self Phi Eliminated (byte*) BGCOL#11 Self Phi Eliminated (byte*) charset2#11 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) RASTER#3 (const byte*) RASTER#0 Redundant Phi (byte*) screen#5 (const byte*) screen#0 Redundant Phi (byte*) charset1#3 (const byte*) charset1#0 Redundant Phi (byte*) D018#11 (const byte*) D018#0 Redundant Phi (byte*) BGCOL#11 (const byte*) BGCOL#0 Redundant Phi (byte*) charset2#11 (const byte*) charset2#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte*) main::toD0181_screen#0 = screen#0 Constant (const byte*) main::toD0181_charset#0 = charset1#0 Constant (const byte*) main::toD0182_screen#0 = screen#0 Constant (const byte*) main::toD0182_charset#0 = charset2#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word/signed dword/dword) main::toD0181_$1#0 = (word)main::toD0181_screen#0/64 Constant (const word/signed dword/dword) main::toD0181_$3#0 = (word)main::toD0181_charset#0/1024 Constant (const word/signed dword/dword) main::toD0182_$1#0 = (word)main::toD0182_screen#0/64 Constant (const word/signed dword/dword) main::toD0182_$3#0 = (word)main::toD0182_charset#0/1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word/dword) main::toD0181_$4#0 = main::toD0181_$1#0|main::toD0181_$3#0 Constant (const word/dword) main::toD0182_$4#0 = main::toD0182_$1#0|main::toD0182_$3#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::toD0181_return#0 = ((byte))main::toD0181_$4#0 Constant (const byte) main::toD0182_return#0 = ((byte))main::toD0182_$4#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Culled Empty Block (label) main::@1 Culled Empty Block (label) main::@6 Culled Empty Block (label) main::@9 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Constant inlined main::toD0181_screen#0 = (const byte*) screen#0 Constant inlined main::toD0182_charset#0 = (const byte*) charset2#0 @@ -695,9 +695,7 @@ Constant inlined main::toD0182_$4#0 = (word)(const byte*) screen#0/(byte/signed Constant inlined main::toD0182_$3#0 = (word)(const byte*) charset2#0/(word/signed word/dword/signed dword) 1024 Constant inlined main::toD0181_$1#0 = (word)(const byte*) screen#0/(byte/signed byte/word/signed word/dword/signed dword) 64 Constant inlined main::toD0181_charset#0 = (const byte*) charset1#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@4 main::toD0181 main::@19 main::@7 main::toD0182 main::@20 -Block Sequence Planned @begin @2 @end main main::@4 main::toD0181 main::@19 main::@7 main::toD0182 main::@20 +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -709,7 +707,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@4 main::toD0181 main::@19 main::@7 main::toD0182 main::@20 Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inline-string-2.log b/src/test/java/dk/camelot64/kickc/test/ref/inline-string-2.log index 65c83d42c..dc5a354d3 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inline-string-2.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inline-string-2.log @@ -300,9 +300,9 @@ Alias (byte*) print::msg#2 = (byte*) print::msg#3 Alias (byte*) screen#14 = (byte*) screen#19 (byte*) screen#15 (byte*) screen#7 Alias (byte*) screen#20 = (byte*) screen#5 Alias (byte*) screen#16 = (byte*) screen#8 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte*) screen#18 = (byte*) screen#21 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Redundant Phi (byte*) screen#17 (byte*) screen#20 Redundant Phi (byte*) screen#0 (byte*) screen#12 Redundant Phi (byte*) screen#1 (byte*) screen#12 @@ -310,22 +310,22 @@ Redundant Phi (byte*) screen#12 (byte*) screen#14 Redundant Phi (byte*) print::msg#4 (byte*) print::msg#0 Redundant Phi (byte*) screen#23 (byte*) screen#18 Redundant Phi (byte*) screen#16 (byte*) screen#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) print_msg::$0 if((byte) print_msg::idx#2==(byte/signed byte/word/signed word/dword/signed dword) 1) goto print_msg::@1 Simple Condition (bool~) print::$0 if(*((byte*) print::msg#2)!=(byte) '@') goto print::@2 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) print_msg::idx#0 = 1 Constant (const byte) print_msg::idx#1 = 2 Constant (const byte*) print_msg::msg#0 = print_msg::$2 Constant (const byte*) print_msg::msg#1 = print_msg::$3 Constant (const byte*) screen#20 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Culled Empty Block (label) main::@2 Culled Empty Block (label) print_msg::@1 Culled Empty Block (label) print_msg::@5 Culled Empty Block (label) @2 Culled Empty Block (label) @4 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) print_msg::idx#0 Inlining constant with var siblings (const byte) print_msg::idx#1 @@ -337,13 +337,11 @@ Constant inlined print_msg::idx#0 = (byte/signed byte/word/signed word/dword/sig Constant inlined screen#20 = ((byte*))(word/signed word/dword/signed dword) 1024 Constant inlined print_msg::$3 = (const byte*) print_msg::msg#1 Constant inlined print_msg::$2 = (const byte*) print_msg::msg#0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Inlining constant with var siblings (const byte*) print_msg::msg#0 Inlining constant with var siblings (const byte*) print_msg::msg#1 Inlining constant with var siblings (const byte*) print_msg::msg#0 Inlining constant with var siblings (const byte*) print_msg::msg#1 -Block Sequence Planned @begin @3 @end main main::@1 main::@return print_msg print_msg::@3 print_msg::@2 print_msg::@return print print::@1 print::@return print::@2 -Block Sequence Planned @begin @3 @end main main::@1 main::@return print_msg print_msg::@3 print_msg::@2 print_msg::@return print print::@1 print::@return print::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end @@ -367,7 +365,6 @@ Coalesced (already) [17] screen#26 ← screen#18 Coalesced [24] print::msg#6 ← print::msg#1 Coalesced [25] screen#27 ← screen#6 Coalesced down to 4 phi equivalence classes -Block Sequence Planned @begin @3 @end main main::@1 main::@return print_msg print_msg::@3 print_msg::@2 print_msg::@return print print::@1 print::@return print::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inline-string-3.log b/src/test/java/dk/camelot64/kickc/test/ref/inline-string-3.log index 7944c27b3..2150e4ea6 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inline-string-3.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inline-string-3.log @@ -110,31 +110,29 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) main::ptr#0 = (byte*~) main::$4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Constant (const byte[]) main::STRING#0 = main::$5 Constant (const byte*) main::PTR#0 = ((byte*))40958 Constant (const byte*) main::SCREEN#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$0 = main::STRING#0 Constant (const byte*) main::$3 = main::PTR#0+1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Fixing inline constructor with main::$6 ← *(main::$3) w= *(main::PTR#0) -Succesful SSA optimization Pass2FixInlineConstructors +Successful SSA optimization Pass2FixInlineConstructors Eliminating Noop Cast (byte*) main::ptr#0 ← ((byte*)) (word~) main::$6 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination OPTIMIZING CONTROL FLOW GRAPH Constant inlined main::$5 = (const byte[]) main::STRING#0 Constant inlined main::$3 = (const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined main::$1 = (const byte*) main::PTR#0+(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined main::$2 = >(const byte[]) main::STRING#0 Constant inlined main::$0 = <(const byte[]) main::STRING#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@return -Block Sequence Planned @begin @1 @end main main::@return +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -145,7 +143,6 @@ Propagating live ranges... Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inline-string.log b/src/test/java/dk/camelot64/kickc/test/ref/inline-string.log index 9d5c6dee9..a1b501096 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inline-string.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inline-string.log @@ -230,27 +230,27 @@ Alias (byte*) print::msg#4 = (byte*) print::msg#5 Alias (byte*) screen#12 = (byte*) screen#16 (byte*) screen#13 (byte*) screen#6 Alias (byte*) screen#17 = (byte*) screen#4 Alias (byte*) screen#14 = (byte*) screen#7 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Redundant Phi (byte*) screen#15 (byte*) screen#17 Redundant Phi (byte*) screen#0 (byte*) screen#12 Redundant Phi (byte*) screen#1 (byte*) screen#12 Redundant Phi (byte*) screen#10 (byte*) screen#12 Redundant Phi (byte*) screen#14 (byte*) screen#10 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) print::$0 if(*((byte*) print::msg#4)!=(byte) '@') goto print::@2 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte[]) msg1#0 = $0 Constant (const byte[]) main::msg2#0 = main::$3 Constant (const byte*) print::msg#2 = main::msg Constant (const byte*) screen#17 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) print::msg#0 = msg1#0 Constant (const byte*) print::msg#1 = main::msg2#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Culled Empty Block (label) main::@3 Culled Empty Block (label) @1 Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte*) print::msg#2 Inlining constant with var siblings (const byte*) print::msg#0 @@ -262,9 +262,7 @@ Constant inlined $0 = (const byte[]) msg1#0 Constant inlined print::msg#1 = (const byte[]) main::msg2#0 Constant inlined print::msg#0 = (const byte[]) msg1#0 Constant inlined screen#17 = ((byte*))(word/signed word/dword/signed dword) 1024 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return print print::@1 print::@return print::@2 -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return print print::@1 print::@return print::@2 +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -285,7 +283,6 @@ Coalesced (already) [13] screen#21 ← screen#18 Coalesced [20] print::msg#8 ← print::msg#3 Coalesced [21] screen#22 ← screen#5 Coalesced down to 2 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return print print::@1 print::@return print::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inline-word.log b/src/test/java/dk/camelot64/kickc/test/ref/inline-word.log index 382c03057..cab5409f0 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inline-word.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inline-word.log @@ -166,40 +166,40 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) main::sc#0 = (byte*~) main::$5 Alias (byte) main::h#2 = (byte) main::h#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) main::h#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) main::h#2 (byte) main::h#4 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$6 if((byte) main::l#1!=rangelast(4,7)) goto main::@2 Simple Condition (bool~) main::$7 if((byte) main::h#1!=rangelast(0,2)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) main::h#0 = 0 Constant (const byte) main::l#0 = 4 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$0 = >SCREEN#0 Constant (const byte*) main::$1 = SCREEN#0+256 Constant (const byte*) main::$3 = SCREEN#0+512 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$2 = >main::$1 Constant (const byte) main::$4 = >main::$3 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte[]) main::his#0 = { main::$0, main::$2, main::$4 } -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Fixing inline constructor with main::$8 ← *(main::his#0 + main::h#4) w= main::l#2 -Succesful SSA optimization Pass2FixInlineConstructors +Successful SSA optimization Pass2FixInlineConstructors Eliminating Noop Cast (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Resolved ranged next value main::l#1 ← ++ main::l#2 to ++ Resolved ranged comparison value if(main::l#1!=rangelast(4,7)) goto main::@2 to (byte/signed byte/word/signed word/dword/signed dword) 8 Resolved ranged next value main::h#1 ← ++ main::h#4 to ++ Resolved ranged comparison value if(main::h#1!=rangelast(0,2)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 3 Alias (word) main::w#0 = (word~) main::$8 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::h#0 Inlining constant with var siblings (const byte) main::l#0 @@ -210,11 +210,9 @@ Constant inlined main::$0 = >(const byte*) SCREEN#0 Constant inlined main::h#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::$3 = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 512 Constant inlined main::$4 = >(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 512 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@5(between main::@3 and main::@1) Added new block during phi lifting main::@6(between main::@2 and main::@2) -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@return main::@5 main::@6 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -233,7 +231,6 @@ Coalesced [15] main::l#3 ← main::l#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) main::@5 Culled Empty Block (label) main::@6 -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inlinearrayproblem.log b/src/test/java/dk/camelot64/kickc/test/ref/inlinearrayproblem.log index 3b8dbb929..067754c29 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inlinearrayproblem.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inlinearrayproblem.log @@ -133,28 +133,28 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) SCREEN#0 = (byte*) SCREEN#3 Alias (byte*) SCREEN2#0 = (byte*) SCREEN2#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#1 Self Phi Eliminated (byte*) SCREEN2#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN2#2 (byte*) SCREEN2#0 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#2 Redundant Phi (byte*) SCREEN2#1 (byte*) SCREEN2#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$0 if((byte) main::i#1!=rangelast(0,3)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const word/signed word/dword/signed dword) $0 = 1024+40 Constant (const byte[]) main::txt#0 = main::$1 Constant (const byte[]) main::data#0 = { 1, 2, 3 } Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) SCREEN2#0 = ((byte*))$0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,3)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 4 OPTIMIZING CONTROL FLOW GRAPH @@ -162,10 +162,8 @@ Inlining constant with var siblings (const byte) main::i#0 Constant inlined $0 = (word/signed word/dword/signed dword) 1024+(byte/signed byte/word/signed word/dword/signed dword) 40 Constant inlined main::$1 = (const byte[]) main::txt#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -179,7 +177,6 @@ Created 1 initial phi equivalence classes Coalesced [11] main::i#3 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inmem-const-array.log b/src/test/java/dk/camelot64/kickc/test/ref/inmem-const-array.log index 0bfb1efd6..72b0f1a14 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inmem-const-array.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inmem-const-array.log @@ -196,32 +196,32 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word/dword/signed dword) 3 from (bool~) main::$0 ← (byte) main::j#1 == (byte/signed byte/word/signed word/dword/signed dword) 3 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) main::i#2 = (byte) main::i#4 Alias (byte*) main::screen#1 = (byte*) main::screen#3 Alias (byte*) main::cols#1 = (byte*) main::cols#3 Alias (byte) WHITE#0 = (byte) WHITE#2 Alias (byte) RED#0 = (byte) RED#2 Alias (byte) GREEN#0 = (byte) GREEN#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte*) main::screen#1 = (byte*) main::screen#2 Alias (byte*) main::cols#1 = (byte*) main::cols#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::screen#1 Self Phi Eliminated (byte*) main::cols#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) WHITE#1 (byte) WHITE#0 Redundant Phi (byte) RED#1 (byte) RED#0 Redundant Phi (byte) GREEN#1 (byte) GREEN#0 Redundant Phi (byte*) main::screen#1 (byte*) main::screen#0 Redundant Phi (byte*) main::cols#1 (byte*) main::cols#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto main::@2 Simple Condition (bool~) main::$2 if((byte) main::i#1!=rangelast(0,39)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) WHITE#0 = 1 Constant (const byte) RED#0 = 2 Constant (const byte) GREEN#0 = 5 @@ -230,9 +230,9 @@ Constant (const byte*) main::cols#0 = ((byte*))55296 Constant (const byte) main::j#0 = 0 Constant (const byte) main::i#0 = 0 Constant (const byte) main::j#2 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte[]) main::colseq#0 = { WHITE#0, RED#0, GREEN#0 } -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,39)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 40 OPTIMIZING CONTROL FLOW GRAPH @@ -242,11 +242,9 @@ Inlining constant with var siblings (const byte) main::j#2 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@5(between main::@2 and main::@1) Added new block during phi lifting main::@6(between main::@1 and main::@2) -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return main::@5 main::@6 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -267,7 +265,6 @@ Coalesced [17] main::j#6 ← main::j#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) main::@3 Culled Empty Block (label) main::@5 -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@return main::@6 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inmemarray.log b/src/test/java/dk/camelot64/kickc/test/ref/inmemarray.log index 77dd5eac5..22587e8c8 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inmemarray.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inmemarray.log @@ -154,30 +154,30 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word/dword/signed dword) 8 from (bool~) main::$0 ← (byte) main::j#1 == (byte/signed byte/word/signed word/dword/signed dword) 8 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) main::i#2 = (byte) main::i#4 Alias (byte*) SCREEN#1 = (byte*) SCREEN#5 Alias (byte*) SCREEN#0 = (byte*) SCREEN#4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte*) SCREEN#1 = (byte*) SCREEN#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((byte) main::j#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@2 Simple Condition (bool~) main::$2 if((byte) main::i#1!=rangelast(0,100)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte[]) TXT#0 = { 3, 1, 13, 5, 12, 15, 20, 32 } Constant (const byte) main::j#0 = 0 Constant (const byte) main::i#0 = 0 Constant (const byte) main::j#2 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,100)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 101 OPTIMIZING CONTROL FLOW GRAPH @@ -187,11 +187,9 @@ Inlining constant with var siblings (const byte) main::j#2 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::j#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@5(between main::@2 and main::@1) Added new block during phi lifting main::@6(between main::@1 and main::@2) -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return main::@5 main::@6 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -212,7 +210,6 @@ Coalesced [16] main::j#6 ← main::j#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) main::@3 Culled Empty Block (label) main::@5 -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@return main::@6 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/inmemstring.log b/src/test/java/dk/camelot64/kickc/test/ref/inmemstring.log index b8879ba6d..5e0dd350f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/inmemstring.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/inmemstring.log @@ -161,32 +161,32 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) main::$1 ← (byte) main::i#1 != (byte/signed byte/word/signed word/dword/signed dword) 8 from (bool~) main::$0 ← (byte) main::i#1 == (byte/signed byte/word/signed word/dword/signed dword) 8 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte*) main::cursor#2 = (byte*) main::cursor#4 Alias (byte*) SCREEN#4 = (byte*) SCREEN#5 Alias (byte*) SCREEN#0 = (byte*) SCREEN#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte*) main::cursor#2 = (byte*) main::cursor#3 Alias (byte*) SCREEN#2 = (byte*) SCREEN#4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto main::@2 Simple Condition (bool~) main::$3 if((byte*) main::cursor#1<(byte*~) main::$2) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte[]) TEXT#0 = $0 Constant (const byte) main::i#0 = 0 Constant (const byte) main::i#2 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::cursor#0 = SCREEN#0 Constant (const byte*) main::$2 = SCREEN#0+1000 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::i#2 @@ -196,11 +196,9 @@ Constant inlined main::i#2 = (byte/signed byte/word/signed word/dword/signed dwo Constant inlined $0 = (const byte[]) TEXT#0 Constant inlined main::$2 = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000 Constant inlined main::cursor#0 = (const byte*) SCREEN#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@5(between main::@2 and main::@1) Added new block during phi lifting main::@6(between main::@1 and main::@2) -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return main::@5 main::@6 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -221,7 +219,6 @@ Coalesced [16] main::i#6 ← main::i#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) main::@3 Culled Empty Block (label) main::@5 -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@return main::@6 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/irq-hardware-clobber-jsr.log b/src/test/java/dk/camelot64/kickc/test/ref/irq-hardware-clobber-jsr.log index 0023677a2..b60f0f848 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/irq-hardware-clobber-jsr.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/irq-hardware-clobber-jsr.log @@ -706,7 +706,7 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) irq::@1 Culled Empty Block (label) @7 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0 Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7 Constant (const byte*) PROCPORT#0 = ((byte*))1 @@ -724,18 +724,16 @@ Constant (const void()**) HARDWARE_IRQ#0 = ((void()**))65534 Constant (const byte) BLACK#0 = 0 Constant (const byte) WHITE#0 = 1 Constant (const void()*) main::$0 = &irq -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) main::@1 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Constant inlined main::$0 = &interrupt(HARDWARE_CLOBBER)(void()) irq() -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @6 @end main main::@2 irq irq::@return do_irq do_irq::@return -Block Sequence Planned @begin @6 @end main main::@2 irq irq::@return do_irq do_irq::@return +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @6 Adding NOP phi() at start of @end @@ -747,7 +745,6 @@ Calls in [irq] to do_irq:15 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @6 @end main main::@2 irq irq::@return do_irq do_irq::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @6 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/irq-hardware-clobber.log b/src/test/java/dk/camelot64/kickc/test/ref/irq-hardware-clobber.log index c3db434c3..0f14d8bef 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/irq-hardware-clobber.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/irq-hardware-clobber.log @@ -289,7 +289,7 @@ interrupt(HARDWARE_CLOBBER)(void()) irq() OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Constant (const void()**) HARDWARE_IRQ#0 = ((void()**))65534 Constant (const byte*) RASTER#0 = ((byte*))53266 Constant (const byte*) VIC_CONTROL#0 = ((byte*))53265 @@ -307,18 +307,16 @@ Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7 Constant (const byte*) PROCPORT#0 = ((byte*))1 Constant (const byte) PROCPORT_RAM_IO#0 = 53 Constant (const void()*) main::$0 = &irq -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) main::@1 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Constant inlined main::$0 = &interrupt(HARDWARE_CLOBBER)(void()) irq() -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@2 irq irq::@return -Block Sequence Planned @begin @2 @end main main::@2 irq irq::@return +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -328,7 +326,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@2 irq irq::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/irq-hardware.log b/src/test/java/dk/camelot64/kickc/test/ref/irq-hardware.log index 0b981f83a..49ecc4ebc 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/irq-hardware.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/irq-hardware.log @@ -289,7 +289,7 @@ interrupt(HARDWARE_ALL)(void()) irq() OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Constant (const void()**) HARDWARE_IRQ#0 = ((void()**))65534 Constant (const byte*) RASTER#0 = ((byte*))53266 Constant (const byte*) VIC_CONTROL#0 = ((byte*))53265 @@ -307,18 +307,16 @@ Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7 Constant (const byte*) PROCPORT#0 = ((byte*))1 Constant (const byte) PROCPORT_RAM_IO#0 = 53 Constant (const void()*) main::$0 = &irq -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) main::@1 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Constant inlined main::$0 = &interrupt(HARDWARE_ALL)(void()) irq() -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@2 irq irq::@return -Block Sequence Planned @begin @2 @end main main::@2 irq irq::@return +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -328,7 +326,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@2 irq irq::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/irq-hyperscreen.log b/src/test/java/dk/camelot64/kickc/test/ref/irq-hyperscreen.log index bb6e34814..4ccee7144 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/irq-hyperscreen.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/irq-hyperscreen.log @@ -290,7 +290,7 @@ interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2() OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @4 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Constant (const void()**) KERNEL_IRQ#0 = ((void()**))788 Constant (const byte*) RASTER#0 = ((byte*))53266 Constant (const byte*) VIC_CONTROL#0 = ((byte*))53265 @@ -307,17 +307,15 @@ Constant (const byte*) GHOST_BYTE#0 = ((byte*))16383 Constant (const void()*) main::$0 = &irq_bottom_1 Constant (const void()*) irq_bottom_1::$1 = &irq_bottom_2 Constant (const void()*) irq_bottom_2::$0 = &irq_bottom_1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte/word/dword) irq_bottom_1::$0 = 255^VIC_RSEL#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Constant inlined irq_bottom_2::$0 = &interrupt(KERNEL_MIN)(void()) irq_bottom_1() Constant inlined irq_bottom_1::$0 = (byte/word/signed word/dword/signed dword) 255^(const byte) VIC_RSEL#0 Constant inlined main::$0 = &interrupt(KERNEL_MIN)(void()) irq_bottom_1() Constant inlined irq_bottom_1::$1 = &interrupt(KERNEL_KEYBOARD)(void()) irq_bottom_2() -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @3 @end main main::@return irq_bottom_2 irq_bottom_2::@return irq_bottom_1 irq_bottom_1::@return -Block Sequence Planned @begin @3 @end main main::@return irq_bottom_2 irq_bottom_2::@return irq_bottom_1 irq_bottom_1::@return +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end @@ -327,7 +325,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @3 @end main main::@return irq_bottom_2 irq_bottom_2::@return irq_bottom_1 irq_bottom_1::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/irq-kernel.log b/src/test/java/dk/camelot64/kickc/test/ref/irq-kernel.log index 295c79249..5effa11e5 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/irq-kernel.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/irq-kernel.log @@ -201,7 +201,7 @@ interrupt(KERNEL_KEYBOARD)(void()) irq() OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Constant (const void()**) KERNEL_IRQ#0 = ((void()**))788 Constant (const byte*) RASTER#0 = ((byte*))53266 Constant (const byte*) VIC_CONTROL#0 = ((byte*))53265 @@ -214,12 +214,10 @@ Constant (const byte) BLACK#0 = 0 Constant (const byte*) CIA1_INTERRUPT#0 = ((byte*))56333 Constant (const byte) CIA_INTERRUPT_CLEAR#0 = 127 Constant (const void()*) main::$0 = &irq -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Constant inlined main::$0 = &interrupt(KERNEL_KEYBOARD)(void()) irq() -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@return irq irq::@return -Block Sequence Planned @begin @2 @end main main::@return irq irq::@return +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -229,7 +227,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@return irq irq::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/irq-raster.log b/src/test/java/dk/camelot64/kickc/test/ref/irq-raster.log index 2f782e63f..ec77cd7e2 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/irq-raster.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/irq-raster.log @@ -201,7 +201,7 @@ interrupt(KERNEL_MIN)(void()) irq() OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Constant (const void()**) KERNEL_IRQ#0 = ((void()**))788 Constant (const byte*) RASTER#0 = ((byte*))53266 Constant (const byte*) VIC_CONTROL#0 = ((byte*))53265 @@ -214,12 +214,10 @@ Constant (const byte) BLACK#0 = 0 Constant (const byte*) CIA1_INTERRUPT#0 = ((byte*))56333 Constant (const byte) CIA_INTERRUPT_CLEAR#0 = 127 Constant (const void()*) main::$0 = &irq -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Constant inlined main::$0 = &interrupt(KERNEL_MIN)(void()) irq() -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@return irq irq::@return -Block Sequence Planned @begin @2 @end main main::@return irq irq::@return +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -229,7 +227,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@return irq irq::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/iterarray.log b/src/test/java/dk/camelot64/kickc/test/ref/iterarray.log index 16e116db2..9c32d72dc 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/iterarray.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/iterarray.log @@ -102,26 +102,24 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::i#1 = (byte/signed word/word/dword/signed dword~) main::$2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Simple Condition (bool~) main::$3 if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte[16]) main::buf#0 = ((byte*))4352 Constant (const byte) main::i#0 = 5 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated constant in assignment main::$1 -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i#2 Alias (byte) main::i#2 = (byte~) main::$0 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 5 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -135,7 +133,6 @@ Created 1 initial phi equivalence classes Coalesced [11] main::i#3 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/keyboard-glitch.log b/src/test/java/dk/camelot64/kickc/test/ref/keyboard-glitch.log index eb58bd1f0..946cde40b 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/keyboard-glitch.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/keyboard-glitch.log @@ -1843,12 +1843,12 @@ OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) menu::@18 Culled Empty Block (label) pressed::@4 Culled Empty Block (label) @14 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) menu::$2 ← (byte~) menu::$0 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) menu::$1 ← (byte~) menu::$0 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) menu::$6 ← (byte~) menu::$4 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) menu::$5 ← (byte~) menu::$4 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) menu::$9 ← (byte~) menu::$7 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) menu::$8 ← (byte~) menu::$7 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) pressed::$2 ← (byte~) pressed::$0 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) pressed::$1 ← (byte~) pressed::$0 != (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) keyboard_matrix_read::return#0 = (byte) keyboard_matrix_read::row_pressed_bits#0 (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#3 (byte) keyboard_matrix_read::return#1 Alias (byte) keyboard_key_pressed::colidx#0 = (byte~) keyboard_key_pressed::$0 (byte) keyboard_key_pressed::colidx#1 Alias (byte) keyboard_key_pressed::rowidx#0 = (byte~) keyboard_key_pressed::$1 @@ -1861,21 +1861,21 @@ Alias (byte) keyboard_key_pressed::return#3 = (byte) keyboard_key_pressed::retur Alias (byte) keyboard_key_pressed::return#4 = (byte) keyboard_key_pressed::return#9 Alias (byte) keyboard_key_pressed::return#10 = (byte) keyboard_key_pressed::return#5 Alias (byte*) SCREEN#0 = (byte*) SCREEN#14 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#10 Self Phi Eliminated (byte*) SCREEN#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) keyboard_matrix_read::rowid#1 (byte) keyboard_matrix_read::rowid#0 Redundant Phi (byte*) SCREEN#12 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN#10 (byte*) SCREEN#12 Redundant Phi (byte*) SCREEN#9 (byte*) SCREEN#10 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#9 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) menu::$2 if((byte~) menu::$0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto menu::@4 Simple Condition (bool~) menu::$6 if((byte~) menu::$4==(byte/signed byte/word/signed word/dword/signed dword) 0) goto menu::@5 Simple Condition (bool~) menu::$9 if((byte~) menu::$7==(byte/signed byte/word/signed word/dword/signed dword) 0) goto menu::@6 Simple Condition (bool~) pressed::$2 if((byte~) pressed::$0==(byte/signed byte/word/signed word/dword/signed dword) 0) goto pressed::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) BORDERCOL#0 = ((byte*))53280 Constant (const byte*) BGCOL#0 = ((byte*))53281 Constant (const byte*) CIA1_PORT_A#0 = ((byte*))56320 @@ -1889,25 +1889,25 @@ Constant (const byte) KEY_SPACE#0 = 60 Constant (const byte[8]) keyboard_matrix_row_bitmask#0 = { 254, 253, 251, 247, 239, 223, 191, 127 } Constant (const byte[8]) keyboard_matrix_col_bitmask#0 = { 1, 2, 4, 8, 16, 32, 64, 128 } Constant (const byte*) SCREEN#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) keyboard_key_pressed::key#0 = KEY_C#0 Constant (const byte) keyboard_key_pressed::key#1 = KEY_I#0 Constant (const byte) keyboard_key_pressed::key#2 = KEY_E#0 Constant (const byte) keyboard_key_pressed::key#3 = KEY_SPACE#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@2 if() condition always true - replacing block destination if(true) goto menu::@2 if() condition always true - replacing block destination if(true) goto pressed::@2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) @3 Culled Empty Block (label) main::@1 Culled Empty Block (label) main::@7 Culled Empty Block (label) @11 Culled Empty Block (label) menu::@1 Culled Empty Block (label) pressed::@1 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) keyboard_key_pressed::key#0 Inlining constant with var siblings (const byte) keyboard_key_pressed::key#1 @@ -1917,9 +1917,7 @@ Constant inlined keyboard_key_pressed::key#0 = (const byte) KEY_C#0 Constant inlined keyboard_key_pressed::key#1 = (const byte) KEY_I#0 Constant inlined keyboard_key_pressed::key#2 = (const byte) KEY_E#0 Constant inlined keyboard_key_pressed::key#3 = (const byte) KEY_SPACE#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @13 @end main main::@2 menu menu::@2 menu::@16 menu::@9 menu::@return menu::@4 menu::@17 menu::@11 menu::@5 menu::@19 menu::@13 menu::@6 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return pressed pressed::@2 pressed::@10 pressed::@return -Block Sequence Planned @begin @13 @end main main::@2 menu menu::@2 menu::@16 menu::@9 menu::@return menu::@4 menu::@17 menu::@11 menu::@5 menu::@19 menu::@13 menu::@6 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return pressed pressed::@2 pressed::@10 pressed::@return +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @13 Adding NOP phi() at start of @end @@ -1946,7 +1944,6 @@ Propagating live ranges... Propagating live ranges... Created 1 initial phi equivalence classes Coalesced down to 1 phi equivalence classes -Block Sequence Planned @begin @13 @end main main::@2 menu menu::@2 menu::@16 menu::@9 menu::@return menu::@4 menu::@17 menu::@11 menu::@5 menu::@19 menu::@13 menu::@6 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return pressed pressed::@2 pressed::@10 pressed::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @13 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/line-anim.log b/src/test/java/dk/camelot64/kickc/test/ref/line-anim.log index 1af03aaa8..ff8787f82 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/line-anim.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/line-anim.log @@ -3046,12 +3046,12 @@ OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@3 Culled Empty Block (label) main::@6 Culled Empty Block (label) @19 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) divr16u::$4 ← (byte~) divr16u::$2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) divr16u::$9 ← (word) divr16u::rem#5 < (word) divr16u::divisor#1 from (bool~) divr16u::$8 ← (word) divr16u::rem#5 >= (word) divr16u::divisor#1 Inversing boolean not (bool~) bitmap_init::$1 ← (byte) bitmap_init::bits#1 != (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) bitmap_init::$0 ← (byte) bitmap_init::bits#1 == (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) bitmap_init::$9 ← (byte~) bitmap_init::$7 != (byte/signed byte/word/signed word/dword/signed dword) 7 from (bool~) bitmap_init::$8 ← (byte~) bitmap_init::$7 == (byte/signed byte/word/signed word/dword/signed dword) 7 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#6 Alias (word) divr16u::dividend#0 = (word~) divr16u::$6 (word) divr16u::dividend#7 Alias (word) divr16u::quotient#1 = (word~) divr16u::$7 (word) divr16u::quotient#4 @@ -3131,7 +3131,7 @@ Alias (byte*) bitmap_clear::bitmap#0 = (byte*~) bitmap_clear::$0 Alias (byte) bitmap_clear::y#2 = (byte) bitmap_clear::y#3 Alias (byte*) bitmap_clear::bitmap#1 = (byte*) bitmap_clear::bitmap#4 Alias (byte*) bitmap_plot::plotter#0 = (byte*~) bitmap_plot::$0 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (word) divr16u::dividend#2 = (word) divr16u::dividend#3 Alias (word) divr16u::quotient#3 = (word) divr16u::quotient#6 Alias (word) divr16u::divisor#1 = (word) divr16u::divisor#3 (word) divr16u::divisor#6 @@ -3147,16 +3147,16 @@ Alias (byte) point_init::point_idx1#0 = (byte) point_init::point_idx1#11 (byte) Alias (byte) bitmap_init::x#2 = (byte) bitmap_init::x#3 Alias (byte*) bitmap_init::bitmap#1 = (byte*) bitmap_init::bitmap#3 Alias (byte) bitmap_init::y#2 = (byte) bitmap_init::y#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte) point_init::point_idx#1 = (byte) point_init::point_idx#2 Alias (byte) point_init::point_idx1#0 = (byte) point_init::point_idx1#1 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (word) divr16u::divisor#1 Self Phi Eliminated (byte) screen_fill::ch#1 Self Phi Eliminated (byte) screen_fill::y#2 Self Phi Eliminated (byte*) bitmap_init::bitmap#1 Self Phi Eliminated (byte) bitmap_clear::y#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (word) divr16u::rem#8 (word) divr16u::rem#3 Redundant Phi (word) divr16u::dividend#4 (word) divr16u::dividend#1 Redundant Phi (word) divr16u::divisor#5 (word) divr16u::divisor#0 @@ -3176,7 +3176,7 @@ Redundant Phi (byte*) bitmap_init::bitmap#1 (byte*) bitmap_init::bitmap#5 Redundant Phi (byte) bitmap_clear::y#2 (byte) bitmap_clear::y#4 Redundant Phi (byte) bitmap_plot::y#1 (byte) bitmap_plot::y#0 Redundant Phi (word) bitmap_plot::x#1 (word) bitmap_plot::x#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) divr16u::$4 if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 Simple Condition (bool~) divr16u::$9 if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 Simple Condition (bool~) divr16u::$11 if((byte) divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 @@ -3196,9 +3196,9 @@ Simple Condition (bool~) bitmap_init::$9 if((byte~) bitmap_init::$7!=(byte/signe Simple Condition (bool~) bitmap_init::$12 if((byte) bitmap_init::y#1!=rangelast(0,255)) goto bitmap_init::@3 Simple Condition (bool~) bitmap_clear::$1 if((byte) bitmap_clear::x#1!=rangelast(0,199)) goto bitmap_clear::@2 Simple Condition (bool~) bitmap_clear::$2 if((byte) bitmap_clear::y#1!=rangelast(0,39)) goto bitmap_clear::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Rewriting || if()-condition to two if()s (bool~) divr16s::$2 ← (bool~) divr16s::$0 || (bool~) divr16s::$1 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0 Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7 Constant (const byte*) PROCPORT#0 = ((byte*))1 @@ -3247,7 +3247,7 @@ Constant (const byte) bitmap_init::y#0 = 0 Constant (const word/signed word/dword/signed dword) bitmap_init::$10 = 40*8 Constant (const byte) bitmap_clear::y#0 = 0 Constant (const byte) bitmap_clear::x#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const bool) divr16s::$0 = divr16s::dividend#0<0 Constant (const signed word) divr16s::$5 = -divr16s::dividend#0 Constant (const word) divr16s::dividendu#2 = ((word))divr16s::dividend#0 @@ -3257,39 +3257,39 @@ Constant (const byte*) main::toD0181_screen#0 = SCREEN#0 Constant (const byte*) main::toD0181_gfx#0 = BITMAP#0 Constant (const byte*) bitmap_init::bitmap#0 = BITMAP#0 Constant (const byte*) screen_fill::screen#0 = SCREEN#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) divr16s::dividendu#1 = ((word))divr16s::$5 Constant (const byte) main::$1 = main::$0|VIC_RSEL#0 Constant (const word) main::vicSelectGfxBank1_toDd001_$0#0 = ((word))main::vicSelectGfxBank1_gfx#0 Constant (const word) main::toD0181_$0#0 = ((word))main::toD0181_screen#0 Constant (const word) main::toD0181_$4#0 = ((word))main::toD0181_gfx#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte/word/dword) main::$2 = main::$1|3 Constant (const byte) main::vicSelectGfxBank1_toDd001_$1#0 = >main::vicSelectGfxBank1_toDd001_$0#0 Constant (const word) main::toD0181_$1#0 = main::toD0181_$0#0&16383 Constant (const byte) main::toD0181_$5#0 = >main::toD0181_$4#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::vicSelectGfxBank1_toDd001_$2#0 = main::vicSelectGfxBank1_toDd001_$1#0>>6 Constant (const word) main::toD0181_$2#0 = main::toD0181_$1#0<<2 Constant (const byte) main::toD0181_$6#0 = main::toD0181_$5#0>>2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::vicSelectGfxBank1_toDd001_return#0 = 3^main::vicSelectGfxBank1_toDd001_$2#0 Constant (const byte) main::toD0181_$3#0 = >main::toD0181_$2#0 Constant (const byte) main::toD0181_$7#0 = main::toD0181_$6#0&15 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::toD0181_return#0 = main::toD0181_$3#0|main::toD0181_$7#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always false - eliminating if((const bool) divr16s::$0) goto divr16s::@1 if() condition always true - replacing block destination if(true) goto main::@5 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Fixing inline constructor with bitmap_clear::$3 ← *(bitmap_plot_yhi#0 + 0) w= *(bitmap_plot_ylo#0 + 0) Fixing inline constructor with bitmap_plot::$3 ← *(bitmap_plot_yhi#0 + bitmap_plot::y#0) w= *(bitmap_plot_ylo#0 + bitmap_plot::y#0) -Succesful SSA optimization Pass2FixInlineConstructors +Successful SSA optimization Pass2FixInlineConstructors Eliminating unused constant (const word) divr16s::dividendu#0 Eliminating unused constant (const word) divr16s::remu#0 Eliminating unused constant (const word) divr16s::divisoru#0 Eliminating unused constant (const bool) divr16s::$0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating Noop Cast (word) divr16s::remu#1 ← ((word)) (signed word~) divr16s::$7 Eliminating Noop Cast (word) divr16s::remu#2 ← ((word)) (signed word) divr16s::rem#0 Eliminating Noop Cast (word) divr16s::divisoru#1 ← ((word)) (signed word~) divr16s::$11 @@ -3305,9 +3305,9 @@ Eliminating Noop Cast (word) point_init::abs16s2_return#1 ← ((word)) (signed w Eliminating Noop Cast (signed byte~) point_init::$15 ← ((signed byte)) (byte~) point_init::$14 Eliminating Noop Cast (byte*) bitmap_clear::bitmap#0 ← ((byte*)) (word~) bitmap_clear::$3 Eliminating Noop Cast (byte*) bitmap_plot::plotter#0 ← ((byte*)) (word~) bitmap_plot::$3 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value divr16u::i#1 ← ++ divr16u::i#2 to ++ Resolved ranged comparison value if(divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 to (byte/signed byte/word/signed word/dword/signed dword) 16 Resolved ranged next value screen_fill::x#1 ← ++ screen_fill::x#2 to ++ @@ -3337,16 +3337,16 @@ Culled Empty Block (label) point_init::@9 Culled Empty Block (label) point_init::abs16s2_@3 Culled Empty Block (label) @15 Culled Empty Block (label) bitmap_init::@6 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Self Phi Eliminated (byte) screen_fill::ch#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) screen_fill::ch#2 (const byte) screen_fill::ch#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) divr16s::$1 if((signed word) divr16s::rem#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Consolidated array index constant in *(bitmap_plot_yhi#0+0) Consolidated array index constant in *(bitmap_plot_ylo#0+0) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 @@ -3401,10 +3401,9 @@ Constant inlined bitmap_init::y#0 = (byte/signed byte/word/signed word/dword/sig Constant inlined screen_fill::y#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined bitmap_init::x#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined bitmap_init::bitmap#0 = (const byte*) BITMAP#0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero bitmap_plot_yhi#0+0 Simplifying constant plus zero bitmap_plot_ylo#0+0 -Block Sequence Planned @begin @18 @end main main::vicSelectGfxBank1 main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_@1 main::toD0181 main::@16 main::@17 main::@18 main::@1 main::@20 main::@21 main::@5 main::@7 bitmap_plot bitmap_plot::@return point_init point_init::abs16s1 point_init::abs16s1_@return point_init::abs16s2 point_init::abs16s2_@return point_init::@10 point_init::@2 point_init::@return point_init::@1 point_init::@7 point_init::@4 point_init::@11 point_init::@3 point_init::abs16s2_@1 point_init::abs16s1_@1 divr16s divr16s::@16 divr16s::@2 divr16s::@4 divr16s::@15 divr16s::@11 divr16s::@return divr16s::@3 divr16s::@1 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@return screen_fill screen_fill::@1 screen_fill::@2 screen_fill::@3 screen_fill::@return bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_init bitmap_init::@1 bitmap_init::@5 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return Added new block during phi lifting main::@22(between main::@21 and main::@1) Added new block during phi lifting point_init::@12(between point_init::abs16s1 and point_init::abs16s1_@return) Added new block during phi lifting point_init::@13(between point_init::abs16s2 and point_init::abs16s2_@return) @@ -3424,7 +3423,6 @@ Added new block during phi lifting bitmap_init::@9(between bitmap_init::@2 and b Added new block during phi lifting bitmap_init::@10(between bitmap_init::@1 and bitmap_init::@2) Added new block during phi lifting bitmap_init::@11(between bitmap_init::@4 and bitmap_init::@3) Added new block during phi lifting bitmap_init::@12(between bitmap_init::@3 and bitmap_init::@4) -Block Sequence Planned @begin @18 @end main main::vicSelectGfxBank1 main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_@1 main::toD0181 main::@16 main::@17 main::@18 main::@1 main::@20 main::@21 main::@5 main::@7 main::@22 bitmap_plot bitmap_plot::@return point_init point_init::abs16s1 point_init::@12 point_init::abs16s1_@return point_init::abs16s2 point_init::@13 point_init::abs16s2_@return point_init::@10 point_init::@2 point_init::@return point_init::@1 point_init::@7 point_init::@4 point_init::@11 point_init::@3 point_init::abs16s2_@1 point_init::abs16s1_@1 divr16s divr16s::@16 divr16s::@17 divr16s::@2 divr16s::@18 divr16s::@4 divr16s::@15 divr16s::@11 divr16s::@return divr16s::@19 divr16s::@3 divr16s::@1 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9 screen_fill screen_fill::@1 screen_fill::@2 screen_fill::@3 screen_fill::@return screen_fill::@5 screen_fill::@6 bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_clear::@5 bitmap_clear::@6 bitmap_init bitmap_init::@1 bitmap_init::@5 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return bitmap_init::@11 bitmap_init::@12 bitmap_init::@9 bitmap_init::@10 Adding NOP phi() at start of @begin Adding NOP phi() at start of @18 Adding NOP phi() at start of @end @@ -3507,7 +3505,6 @@ Culled Empty Block (label) bitmap_init::@5 Culled Empty Block (label) bitmap_init::@11 Culled Empty Block (label) bitmap_init::@12 Culled Empty Block (label) bitmap_init::@9 -Block Sequence Planned @begin @18 @end main main::vicSelectGfxBank1 main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_@1 main::toD0181 main::@16 main::@17 main::@18 main::@1 main::@20 main::@21 main::@5 main::@7 bitmap_plot bitmap_plot::@return point_init point_init::abs16s1 point_init::@12 point_init::abs16s1_@return point_init::abs16s2 point_init::@13 point_init::abs16s2_@return point_init::@10 point_init::@2 point_init::@return point_init::@1 point_init::@7 point_init::@4 point_init::@11 point_init::@3 point_init::abs16s2_@1 point_init::abs16s1_@1 divr16s divr16s::@16 divr16s::@17 divr16s::@2 divr16s::@18 divr16s::@4 divr16s::@15 divr16s::@11 divr16s::@return divr16s::@19 divr16s::@3 divr16s::@1 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@return screen_fill screen_fill::@1 screen_fill::@2 screen_fill::@3 screen_fill::@return bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_init bitmap_init::@1 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return bitmap_init::@10 Adding NOP phi() at start of @begin Adding NOP phi() at start of @18 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/linegen.log b/src/test/java/dk/camelot64/kickc/test/ref/linegen.log index 58e98acbe..0020a9847 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/linegen.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/linegen.log @@ -2551,7 +2551,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Inversing boolean not (bool~) divr16u::$4 ← (byte~) divr16u::$2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) divr16u::$9 ← (word) divr16u::rem#6 < (word) divr16u::divisor#2 from (bool~) divr16u::$8 ← (word) divr16u::rem#6 >= (word) divr16u::divisor#2 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Not aliassing identity: lin16u_gen::step#1 lin16u_gen::step#1 Not aliassing identity: lin16u_gen::length#5 lin16u_gen::length#5 Not aliassing identity: rem16u#23 rem16u#23 @@ -2640,7 +2640,7 @@ Alias (word) rem16u#18 = (word) rem16u#23 (word) rem16u#9 Alias (word) rem16u#10 = (word) rem16u#19 Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#20 Alias (byte*) print_char_cursor#39 = (byte*) print_char_cursor#77 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: lin16u_gen::step#1 lin16u_gen::step#1 Not aliassing identity: lin16u_gen::length#5 lin16u_gen::length#5 Not aliassing identity: rem16u#18 rem16u#18 @@ -2649,7 +2649,7 @@ Alias (word) divr16u::quotient#3 = (word) divr16u::quotient#6 Alias (word) divr16u::divisor#2 = (word) divr16u::divisor#4 (word) divr16u::divisor#7 Alias (byte) divr16u::i#2 = (byte) divr16u::i#3 (byte) divr16u::i#5 Alias (word) divr16u::dividend#0 = (word) divr16u::dividend#6 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: lin16u_gen::step#1 lin16u_gen::step#1 Not aliassing identity: lin16u_gen::length#5 lin16u_gen::length#5 Not aliassing identity: rem16u#18 rem16u#18 @@ -2660,7 +2660,7 @@ Self Phi Eliminated (word) rem16u#15 Self Phi Eliminated (dword) lin16u_gen::step#1 Self Phi Eliminated (word) lin16u_gen::length#5 Self Phi Eliminated (word) rem16u#18 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (word) divr16u::divisor#2 (word) divr16u::divisor#6 Redundant Phi (byte*) print_char_cursor#42 (byte*) print_char_cursor#79 Redundant Phi (byte*) print_char_cursor#44 (byte*) print_char_cursor#10 @@ -2712,12 +2712,12 @@ Redundant Phi (word) rem16u#18 (word) rem16u#17 Redundant Phi (word) rem16u#10 (word) rem16u#15 Redundant Phi (byte*) print_line_cursor#10 (byte*) print_line_cursor#18 Redundant Phi (byte*) print_char_cursor#39 (byte*) print_char_cursor#37 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) print_char_cursor#79 (byte*) print_char_cursor#11 Redundant Phi (byte*) print_char_cursor#80 (byte*) print_char_cursor#2 Redundant Phi (byte*) print_char_cursor#83 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#24 (byte*) print_line_cursor#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) divr16u::$4 if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 Simple Condition (bool~) divr16u::$9 if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 Simple Condition (bool~) divr16u::$11 if((byte) divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 @@ -2726,7 +2726,7 @@ Simple Condition (bool~) print_ln::$1 if((byte*) print_line_cursor#1<(byte*) pri Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 Simple Condition (bool~) main::$21 if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword~) main::$20) goto main::@1 Simple Condition (bool~) lin16u_gen::$8 if((word) lin16u_gen::i#1<(word) lin16u_gen::length#3) goto lin16u_gen::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const word) rem16u#0 = 0 Constant (const word) divr16u::quotient#0 = 0 Constant (const byte) divr16u::i#0 = 0 @@ -2764,20 +2764,20 @@ Constant (const word) print_word::w#8 = 25736 Constant (const word) divr16u::rem#3 = 0 Constant (const word) divr16u::dividend#2 = 0 Constant (const word) lin16u_gen::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000 Constant (const word*) lin16u_gen::lintab#0 = main::lintab1#0 Constant (const word*) lin16u_gen::lintab#1 = main::lintab2#0 Constant (const word*) lin16u_gen::lintab#2 = main::lintab3#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Fixing inline constructor with lin16u_gen::$9 ← lin16u_gen::stepi#0 dw= lin16u_gen::stepf#0 Fixing inline constructor with lin16u_gen::$10 ← lin16u_gen::min#3 dw= 0 -Succesful SSA optimization Pass2FixInlineConstructors +Successful SSA optimization Pass2FixInlineConstructors Eliminating unused variable - keeping the phi block (word) rem16u#22 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const word) rem16u#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Resolved ranged next value divr16u::i#1 ← ++ divr16u::i#2 to ++ Resolved ranged comparison value if(divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 to (byte/signed byte/word/signed word/dword/signed dword) 16 Culled Empty Block (label) @2 @@ -2790,10 +2790,10 @@ Culled Empty Block (label) print_cls::@2 Culled Empty Block (label) main::@13 Culled Empty Block (label) main::@28 Culled Empty Block (label) @25 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (dword) lin16u_gen::step#0 = (dword~) lin16u_gen::$9 Alias (dword) lin16u_gen::val#0 = (dword~) lin16u_gen::$10 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 @@ -2868,18 +2868,17 @@ Constant inlined lin16u_gen::min#2 = (byte/signed byte/word/signed word/dword/si Constant inlined print_str::str#6 = (const string) main::str5 Constant inlined lin16u_gen::lintab#0 = (const word[20]) main::lintab1#0 Constant inlined print_str::str#5 = (const string) main::str4 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Identical Phi Values (word) lin16u_gen::length#3 (byte/signed byte/word/signed word/dword/signed dword) 20 -Succesful SSA optimization Pass2IdenticalPhiElimination +Successful SSA optimization Pass2IdenticalPhiElimination Constant (const word) divr16u::divisor#0 = 20-1 Constant (const word) divr16u::divisor#1 = 20-1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Inlining constant with var siblings (const word) divr16u::divisor#0 Inlining constant with var siblings (const word) divr16u::divisor#1 Constant inlined divr16u::divisor#1 = (byte/signed byte/word/signed word/dword/signed dword) 20-(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined divr16u::divisor#0 = (byte/signed byte/word/signed word/dword/signed dword) 20-(byte/signed byte/word/signed word/dword/signed dword) 1 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @24 @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@1 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@2 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 main::@return print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@29(between main::@21 and main::@1) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) @@ -2887,7 +2886,6 @@ Added new block during phi lifting lin16u_gen::@5(between lin16u_gen::@1 and lin Added new block during phi lifting divr16u::@8(between divr16u::@3 and divr16u::@1) Added new block during phi lifting divr16u::@9(between divr16u::@1 and divr16u::@2) Added new block during phi lifting divr16u::@10(between divr16u::@2 and divr16u::@3) -Block Sequence Planned @begin @24 @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@1 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@2 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 main::@return main::@29 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3 lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return lin16u_gen::@5 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9 Adding NOP phi() at start of @begin Adding NOP phi() at start of @24 Adding NOP phi() at start of @end @@ -2988,7 +2986,6 @@ Culled Empty Block (label) lin16u_gen::@5 Culled Empty Block (label) divr16u::@8 Culled Empty Block (label) divr16u::@10 Culled Empty Block (label) divr16u::@9 -Block Sequence Planned @begin @24 @end main main::@3 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@1 main::@14 main::@15 main::@16 main::@17 main::@18 main::@19 main::@20 main::@21 main::@2 main::@22 main::@23 main::@24 main::@25 main::@26 main::@27 main::@return print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return lin16u_gen lin16u_gen::@3 lin16u_gen::@4 lin16u_gen::@1 lin16u_gen::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @24 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/literals.log b/src/test/java/dk/camelot64/kickc/test/ref/literals.log index b7db3639d..e72b515f6 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/literals.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/literals.log @@ -158,53 +158,51 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte[]) str#0 = (string~) $1 Alias (byte) char#0 = (byte) char#2 Alias (byte*) SCREEN#0 = (byte*) SCREEN#3 Alias (byte) num#0 = (byte) num#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) char#1 (byte) char#0 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 Redundant Phi (byte) num#1 (byte) num#0 Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$2 if((byte) main::i#1!=rangelast(0,3)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) char#0 = 'a' Constant (const byte) num#0 = 1 Constant (const string) $0 = "bc"+"d" Constant (const byte[]) nums#0 = { 2, 3, 4, 5 } Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte[]) str#0 = "bc"+"d"+'e' -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(SCREEN#0+0) Consolidated array index constant in *(SCREEN#0+2) Consolidated array index constant in assignment *(SCREEN#0+4 + main::$0) Consolidated array index constant in assignment *(SCREEN#0+9 + main::$1) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) main::$0 ← (byte) main::i#2 Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) main::$1 ← (byte) main::i#2 Eliminating unused constant (const string) $2 Eliminating unused constant (const string) $3 Eliminating unused constant (const string) $0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,3)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 4 Alias (byte) main::i#2 = (byte~) main::$0 (byte~) main::$1 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero SCREEN#0+0 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -217,7 +215,6 @@ Created 1 initial phi equivalence classes Coalesced [12] main::i#3 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.log b/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.log index 431061563..8d18b964d 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/liverange-call-problem.log @@ -146,10 +146,8 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@4 Culled Empty Block (label) @4 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH -Block Sequence Planned @begin @3 @end main main::@1 main::@2 main::@3 main::@return incw2 incw2::@return incw1 incw1::@return -Block Sequence Planned @begin @3 @end main main::@1 main::@2 main::@3 main::@return incw2 incw2::@return incw1 incw1::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end @@ -166,7 +164,6 @@ Calls in [main] to incw1:5 incw2:7 incw1:9 incw2:11 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @3 @end main main::@1 main::@2 main::@3 main::@return incw2 incw2::@return incw1 incw1::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/liverange.log b/src/test/java/dk/camelot64/kickc/test/ref/liverange.log index d95c17295..c4b255530 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/liverange.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/liverange.log @@ -207,29 +207,27 @@ Alias (byte) i#11 = (byte) i#4 (byte/signed word/word/dword/signed dword~) inci: Alias (byte) inci::return#2 = (byte) inci::return#6 (byte) inci::return#3 Alias (byte) i#0 = (byte) i#14 Alias (byte) i#12 = (byte) i#6 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Redundant Phi (byte) i#13 (byte) i#0 Redundant Phi (byte) i#1 (byte) i#11 Redundant Phi (byte) i#2 (byte) i#11 Redundant Phi (byte) i#12 (byte) i#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) i#0 = 0 Constant (const byte) main::a#0 = 4 Constant (const byte*) main::SCREEN#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$4 = main::SCREEN#0+1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::a#0 Inlining constant with var siblings (const byte) i#0 Constant inlined main::a#0 = (byte/signed byte/word/signed word/dword/signed dword) 4 Constant inlined main::$4 = (const byte*) main::SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return inci inci::@return -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return inci inci::@return +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -247,7 +245,6 @@ Propagating live ranges... Created 1 initial phi equivalence classes Coalesced [9] i#15 ← i#11 Coalesced down to 1 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return inci inci::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/local-string.log b/src/test/java/dk/camelot64/kickc/test/ref/local-string.log index 458a3f470..81d82a96a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/local-string.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/local-string.log @@ -125,27 +125,25 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte*) main::screen#1 = (byte*) main::screen#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::screen#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::screen#1 (byte*) main::screen#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$0 if(*((byte[]) main::msg#0 + (byte) main::i#2)!=(byte) '@') goto main::@2 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::screen#0 = ((byte*))1024 Constant (const byte[]) main::msg#0 = main::$1 Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::$1 = (const byte[]) main::msg#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -158,7 +156,6 @@ Propagating live ranges... Created 1 initial phi equivalence classes Coalesced [10] main::i#4 ← main::i#1 Coalesced down to 1 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/longjump.log b/src/test/java/dk/camelot64/kickc/test/ref/longjump.log index 1b0f773bc..af4a0e864 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/longjump.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/longjump.log @@ -353,25 +353,23 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Self Phi Eliminated (byte*) main::SCREEN#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::SCREEN#1 (byte*) main::SCREEN#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$0 if((byte) main::i#1!=rangelast(0,10)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = ((byte*))1024 Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,10)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 11 OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -386,7 +384,6 @@ Created 1 initial phi equivalence classes Coalesced [11] main::i#3 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/longjump2.log b/src/test/java/dk/camelot64/kickc/test/ref/longjump2.log index 5c8a32a5c..fb35e6b3d 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/longjump2.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/longjump2.log @@ -713,21 +713,21 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@2 Culled Empty Block (label) @4 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Self Phi Eliminated (byte*) long1::SCREEN#1 Self Phi Eliminated (byte*) long2::SCREEN#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) long1::SCREEN#1 (byte*) long1::SCREEN#0 Redundant Phi (byte*) long2::SCREEN#1 (byte*) long2::SCREEN#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) long1::$0 if((byte) long1::i#1!=rangelast(0,10)) goto long1::@1 Simple Condition (bool~) long2::$0 if((byte) long2::i#1!=rangelast(0,10)) goto long2::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) long1::SCREEN#0 = ((byte*))1024 Constant (const byte) long1::i#0 = 0 Constant (const byte*) long2::SCREEN#0 = ((byte*))1024 Constant (const byte) long2::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value long1::i#1 ← ++ long1::i#2 to ++ Resolved ranged comparison value if(long1::i#1!=rangelast(0,10)) goto long1::@1 to (byte/signed byte/word/signed word/dword/signed dword) 11 Resolved ranged next value long2::i#1 ← ++ long2::i#2 to ++ @@ -737,11 +737,9 @@ Inlining constant with var siblings (const byte) long1::i#0 Inlining constant with var siblings (const byte) long2::i#0 Constant inlined long1::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined long2::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @3 @end main main::@1 main::@return long2 long2::@1 long2::@return long1 long1::@1 long1::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting long2::@3(between long2::@1 and long2::@1) Added new block during phi lifting long1::@3(between long1::@1 and long1::@1) -Block Sequence Planned @begin @3 @end main main::@1 main::@return long2 long2::@1 long2::@return long2::@3 long1 long1::@1 long1::@return long1::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end @@ -762,7 +760,6 @@ Coalesced [24] long1::i#3 ← long1::i#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) long2::@3 Culled Empty Block (label) long1::@3 -Block Sequence Planned @begin @3 @end main main::@1 main::@return long2 long2::@1 long2::@return long1 long1::@1 long1::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loop-problem.log b/src/test/java/dk/camelot64/kickc/test/ref/loop-problem.log index 6ce49843a..9017073d5 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loop-problem.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/loop-problem.log @@ -181,34 +181,32 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@2 Culled Empty Block (label) @4 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) SCREEN#1 = (byte*) SCREEN#7 Alias (byte) b::i#2 = (byte) b::i#3 Alias (byte*) SCREEN#4 = (byte*) SCREEN#6 Alias (byte*) SCREEN#0 = (byte*) SCREEN#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#4 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN#5 (byte*) SCREEN#1 Redundant Phi (byte*) SCREEN#4 (byte*) SCREEN#5 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) b::$1 if((byte) b::i#1!=rangelast(0,3)) goto b::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) b::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value b::i#1 ← ++ b::i#2 to ++ Resolved ranged comparison value if(b::i#1!=rangelast(0,3)) goto b::@1 to (byte/signed byte/word/signed word/dword/signed dword) 4 OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) b::i#0 Constant inlined b::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @3 @end main main::@1 main::@return b b::@1 b::@3 b::@return d d::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting b::@4(between b::@3 and b::@1) -Block Sequence Planned @begin @3 @end main main::@1 main::@return b b::@1 b::@3 b::@return b::@4 d d::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end @@ -226,7 +224,6 @@ Created 1 initial phi equivalence classes Coalesced [15] b::i#4 ← b::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) b::@4 -Block Sequence Planned @begin @3 @end main main::@1 main::@return b b::@1 b::@3 b::@return d d::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loop-problem2.log b/src/test/java/dk/camelot64/kickc/test/ref/loop-problem2.log index f795f748a..fddb44fe5 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loop-problem2.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/loop-problem2.log @@ -235,30 +235,28 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@2 Culled Empty Block (label) @4 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 Simple Condition (bool~) mode_ctrl::$0 if((byte) mode_ctrl::before#0==(byte/word/signed word/dword/signed dword) 255) goto mode_ctrl::@4 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) BORDERCOL#0 = ((byte*))53280 Constant (const byte*) SCREEN#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) print_cls::sc#0 = SCREEN#0 Constant (const byte*) print_cls::$0 = SCREEN#0+1000 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto mode_ctrl::@2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block mode_ctrl::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) mode_ctrl::@1 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte*) print_cls::sc#0 Constant inlined print_cls::$0 = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000 Constant inlined print_cls::sc#0 = (const byte*) SCREEN#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @3 @end main main::@1 main::@return mode_ctrl mode_ctrl::@2 mode_ctrl::@8 mode_ctrl::@4 print_cls print_cls::@1 print_cls::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) -Block Sequence Planned @begin @3 @end main main::@1 main::@return mode_ctrl mode_ctrl::@2 mode_ctrl::@8 mode_ctrl::@4 print_cls print_cls::@1 print_cls::@return print_cls::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end @@ -276,7 +274,6 @@ Created 1 initial phi equivalence classes Coalesced [20] print_cls::sc#3 ← print_cls::sc#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) print_cls::@3 -Block Sequence Planned @begin @3 @end main main::@1 main::@return mode_ctrl mode_ctrl::@2 mode_ctrl::@8 mode_ctrl::@4 print_cls print_cls::@1 print_cls::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loop100.log b/src/test/java/dk/camelot64/kickc/test/ref/loop100.log index d01d29138..fb3558797 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loop100.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/loop100.log @@ -79,18 +79,16 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Simple Condition (bool~) main::$0 if((byte) main::i#1<(byte/signed byte/word/signed word/dword/signed dword) 100) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -104,7 +102,6 @@ Created 1 initial phi equivalence classes Coalesced [9] main::i#3 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loopmin.log b/src/test/java/dk/camelot64/kickc/test/ref/loopmin.log index f987be930..3ddaf7d1d 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loopmin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/loopmin.log @@ -131,31 +131,29 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) main::$1 ← (byte) main::i#2 <= (byte/signed byte/word/signed word/dword/signed dword) 5 from (bool~) main::$0 ← (byte) main::i#2 > (byte/signed byte/word/signed word/dword/signed dword) 5 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) main::s#2 = (byte) main::s#3 Alias (byte) main::i#2 = (byte) main::i#4 Alias (byte) main::s#1 = (byte~) main::$2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte) main::i#2 = (byte) main::i#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Simple Condition (bool~) main::$1 if((byte) main::i#2<=(byte/signed byte/word/signed word/dword/signed dword) 5) goto main::@2 Simple Condition (bool~) main::$3 if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) main::i#0 = 10 Constant (const byte) main::s#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::s#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 10 Constant inlined main::s#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@5(between main::@2 and main::@1) Added new block during phi lifting main::@6(between main::@1 and main::@2) -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return main::@5 main::@6 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -176,7 +174,6 @@ Coalesced (already) [15] main::s#6 ← main::s#2 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) main::@5 Culled Empty Block (label) main::@6 -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loopnest.log b/src/test/java/dk/camelot64/kickc/test/ref/loopnest.log index 7d8627bf4..252b2c8de 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loopnest.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/loopnest.log @@ -169,36 +169,34 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte*) SCREEN#3 = (byte*) SCREEN#5 Alias (byte*) SCREEN#0 = (byte*) SCREEN#6 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#3 Self Phi Eliminated (byte*) SCREEN#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#4 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN#3 (byte*) SCREEN#4 Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#3 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1 Simple Condition (bool~) nest::$0 if((byte) nest::j#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto nest::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) main::i#0 = 100 Constant (const byte) nest::j#0 = 100 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) nest::j#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 100 Constant inlined nest::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 100 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@1 main::@3 main::@return nest nest::@1 nest::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@4(between main::@3 and main::@1) Added new block during phi lifting nest::@3(between nest::@1 and nest::@1) -Block Sequence Planned @begin @2 @end main main::@1 main::@3 main::@return main::@4 nest nest::@1 nest::@return nest::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -217,7 +215,6 @@ Coalesced [17] nest::j#3 ← nest::j#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) main::@4 Culled Empty Block (label) nest::@3 -Block Sequence Planned @begin @2 @end main main::@1 main::@3 main::@return nest nest::@1 nest::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loopnest2.log b/src/test/java/dk/camelot64/kickc/test/ref/loopnest2.log index dd5247af4..c104d194f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loopnest2.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/loopnest2.log @@ -365,7 +365,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @4 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::j#2 = (byte) main::j#3 Alias (byte) main::i#2 = (byte) main::i#3 (byte) main::i#4 Alias (byte*) SCREEN#10 = (byte*) SCREEN#12 (byte*) SCREEN#14 @@ -375,14 +375,14 @@ Alias (byte*) SCREEN#5 = (byte*) SCREEN#7 (byte*) SCREEN#9 Alias (byte) nest2::i#2 = (byte) nest2::i#3 Alias (byte*) SCREEN#1 = (byte*) SCREEN#4 Alias (byte*) SCREEN#0 = (byte*) SCREEN#15 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) main::i#2 Self Phi Eliminated (byte*) SCREEN#10 Self Phi Eliminated (byte) nest1::i#2 Self Phi Eliminated (byte*) SCREEN#5 Self Phi Eliminated (byte*) SCREEN#1 Self Phi Eliminated (byte) nest2::i#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#13 (byte*) SCREEN#0 Redundant Phi (byte) main::i#2 (byte) main::i#5 Redundant Phi (byte*) SCREEN#10 (byte*) SCREEN#11 @@ -392,14 +392,14 @@ Redundant Phi (byte*) SCREEN#5 (byte*) SCREEN#6 Redundant Phi (byte*) SCREEN#3 (byte*) SCREEN#5 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#2 Redundant Phi (byte) nest2::i#2 (byte) nest2::i#4 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((byte) main::j#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 Simple Condition (bool~) main::$2 if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@1 Simple Condition (bool~) nest1::$1 if((byte) nest1::j#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto nest1::@2 Simple Condition (bool~) nest1::$2 if((byte) nest1::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto nest1::@1 Simple Condition (bool~) nest2::$0 if((byte) nest2::j#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto nest2::@2 Simple Condition (bool~) nest2::$1 if((byte) nest2::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto nest2::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) main::i#0 = 100 Constant (const byte) main::j#0 = 100 @@ -407,15 +407,15 @@ Constant (const byte) nest1::i#0 = 100 Constant (const byte) nest1::j#0 = 100 Constant (const byte) nest2::i#0 = 100 Constant (const byte) nest2::j#0 = 100 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Self Phi Eliminated (byte*) SCREEN#11 Self Phi Eliminated (byte*) SCREEN#6 Self Phi Eliminated (byte*) SCREEN#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#11 (const byte*) SCREEN#0 Redundant Phi (byte*) SCREEN#6 (byte*) SCREEN#11 Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#6 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::j#0 @@ -429,15 +429,13 @@ Constant inlined main::j#0 = (byte/signed byte/word/signed word/dword/signed dwo Constant inlined nest2::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 100 Constant inlined nest1::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 100 Constant inlined nest1::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 100 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @3 @end main main::@1 main::@2 main::@5 main::@3 main::@return nest1 nest1::@1 nest1::@2 nest1::@5 nest1::@3 nest1::@return nest2 nest2::@1 nest2::@2 nest2::@3 nest2::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@6(between main::@3 and main::@1) Added new block during phi lifting main::@7(between main::@5 and main::@2) Added new block during phi lifting nest1::@6(between nest1::@3 and nest1::@1) Added new block during phi lifting nest1::@7(between nest1::@5 and nest1::@2) Added new block during phi lifting nest2::@5(between nest2::@3 and nest2::@1) Added new block during phi lifting nest2::@6(between nest2::@2 and nest2::@2) -Block Sequence Planned @begin @3 @end main main::@1 main::@2 main::@5 main::@3 main::@return main::@6 main::@7 nest1 nest1::@1 nest1::@2 nest1::@5 nest1::@3 nest1::@return nest1::@6 nest1::@7 nest2 nest2::@1 nest2::@2 nest2::@3 nest2::@return nest2::@5 nest2::@6 Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end @@ -469,7 +467,6 @@ Culled Empty Block (label) nest1::@6 Culled Empty Block (label) nest1::@7 Culled Empty Block (label) nest2::@5 Culled Empty Block (label) nest2::@6 -Block Sequence Planned @begin @3 @end main main::@1 main::@2 main::@5 main::@3 main::@return nest1 nest1::@1 nest1::@2 nest1::@5 nest1::@3 nest1::@return nest2 nest2::@1 nest2::@2 nest2::@3 nest2::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loopnest3.log b/src/test/java/dk/camelot64/kickc/test/ref/loopnest3.log index f10edc123..bc2867fc4 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loopnest3.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/loopnest3.log @@ -196,38 +196,36 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) b::@1 Culled Empty Block (label) @4 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::i#2 = (byte) main::i#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) c::i#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) b::i#1 (byte) b::i#0 Redundant Phi (byte) c::i#2 (byte) c::i#0 Redundant Phi (byte) c::i#1 (byte) c::i#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((byte) main::i#1!=rangelast(0,100)) goto main::@1 Simple Condition (bool~) c::$0 if((byte) c::j#1!=rangelast(0,100)) goto c::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) main::i#0 = 0 Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) c::j#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,100)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 101 Resolved ranged next value c::j#1 ← ++ c::j#2 to ++ Resolved ranged comparison value if(c::j#1!=rangelast(0,100)) goto c::@1 to (byte/signed byte/word/signed word/dword/signed dword) 101 Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) c::j#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined c::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @3 @end main main::@1 main::@3 main::@return b b::@return c c::@1 c::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@4(between main::@3 and main::@1) Added new block during phi lifting c::@3(between c::@1 and c::@1) -Block Sequence Planned @begin @3 @end main main::@1 main::@3 main::@return main::@4 b b::@return c c::@1 c::@return c::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end @@ -249,7 +247,6 @@ Coalesced [21] c::j#3 ← c::j#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) main::@4 Culled Empty Block (label) c::@3 -Block Sequence Planned @begin @3 @end main main::@1 main::@3 main::@return b b::@return c c::@1 c::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.log b/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.log index d702ec3b3..00f9e62c0 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/loopsplit.log @@ -143,21 +143,19 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::i#1 = (byte) main::i#3 (byte) main::i#4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Simple Condition (bool~) main::$0 if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 Simple Condition (bool~) main::$1 if((byte) main::i#1>(byte/signed byte/word/signed word/dword/signed dword) 50) goto main::@4 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) main::i#0 = 100 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 100 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 main::@4 +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@11(between main::@2 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 main::@11 main::@4 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -172,7 +170,6 @@ Coalesced [10] main::i#5 ← main::i#1 Coalesced (already) [11] main::i#6 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@11 -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 main::@4 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/mem-alignment.log b/src/test/java/dk/camelot64/kickc/test/ref/mem-alignment.log index 9470a3920..c7e008621 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/mem-alignment.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/mem-alignment.log @@ -141,22 +141,22 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Simple Condition (bool~) main::$0 if((byte) main::i#1!=rangelast(0,255)) goto main::@1 Simple Condition (bool~) main::$1 if((byte) main::i#3!=rangelast(0,255)) goto main::@2 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte[256]) bs#0 = { fill( 256, 0) } Constant (const byte[256]) main::cs#0 = { fill( 256, 0) } Constant (const byte) main::i#0 = 0 Constant (const byte) main::j#0 = 255 Constant (const byte) main::i#2 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::i#4 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,255)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 0 Resolved ranged next value main::i#3 ← ++ main::i#5 to ++ Resolved ranged comparison value if(main::i#3!=rangelast(0,255)) goto main::@2 to (byte/signed byte/word/signed word/dword/signed dword) 0 Culled Empty Block (label) main::@3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::j#0 @@ -164,11 +164,9 @@ Inlining constant with var siblings (const byte) main::i#2 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::i#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::j#0 = (byte/word/signed word/dword/signed dword) 255 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@5(between main::@1 and main::@1) Added new block during phi lifting main::@6(between main::@2 and main::@2) -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@return main::@6 main::@5 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -187,7 +185,6 @@ Coalesced [17] main::i#6 ← main::i#1 Coalesced down to 3 phi equivalence classes Culled Empty Block (label) main::@6 Culled Empty Block (label) main::@5 -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/modglobal.log b/src/test/java/dk/camelot64/kickc/test/ref/modglobal.log index b896845d5..61be12d3c 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/modglobal.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/modglobal.log @@ -196,27 +196,25 @@ Alias (byte) inccnt::return#2 = (byte) inccnt::return#6 (byte) inccnt::return#3 Alias (byte) cnt#12 = (byte) cnt#5 (byte) cnt#6 Alias (byte) cnt#0 = (byte) cnt#15 Alias (byte) cnt#13 = (byte) cnt#7 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Redundant Phi (byte) cnt#14 (byte) cnt#0 Redundant Phi (byte) cnt#1 (byte) cnt#12 Redundant Phi (byte) cnt#10 (byte) cnt#12 Redundant Phi (byte) cnt#13 (byte) cnt#10 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) cnt#0 = 0 Constant (const byte[256]) SCREEN#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(SCREEN#0+0) Consolidated array index constant in *(SCREEN#0+1) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) cnt#0 Constant inlined cnt#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero SCREEN#0+0 -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return inccnt inccnt::@return -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return inccnt inccnt::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -234,7 +232,6 @@ Propagating live ranges... Created 1 initial phi equivalence classes Coalesced [10] cnt#16 ← cnt#2 Coalesced down to 1 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return inccnt inccnt::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/modglobalmin.log b/src/test/java/dk/camelot64/kickc/test/ref/modglobalmin.log index 96ae7d43c..a80f08c54 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/modglobalmin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/modglobalmin.log @@ -158,27 +158,25 @@ Alias (byte) cnt#11 = (byte) cnt#4 (byte) cnt#5 Alias (byte) cnt#13 = (byte) cnt#6 (byte) cnt#7 Alias (byte) cnt#0 = (byte) cnt#16 Alias (byte) cnt#14 = (byte) cnt#8 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Redundant Phi (byte) cnt#15 (byte) cnt#0 Redundant Phi (byte) cnt#1 (byte) cnt#13 Redundant Phi (byte) cnt#10 (byte) cnt#13 Redundant Phi (byte) cnt#14 (byte) cnt#11 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) cnt#0 = 0 Constant (const byte[256]) SCREEN#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(SCREEN#0+0) Consolidated array index constant in *(SCREEN#0+1) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) cnt#0 Constant inlined cnt#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero SCREEN#0+0 -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return inccnt inccnt::@return -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return inccnt inccnt::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -193,7 +191,6 @@ Propagating live ranges... Created 1 initial phi equivalence classes Coalesced [8] cnt#17 ← cnt#2 Coalesced down to 1 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@return inccnt inccnt::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/norom-charset.log b/src/test/java/dk/camelot64/kickc/test/ref/norom-charset.log index d98880335..8a4f9fb2b 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/norom-charset.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/norom-charset.log @@ -407,9 +407,9 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) gen_char3::$3 ← (byte~) gen_char3::$1 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) gen_char3::$2 ← (byte~) gen_char3::$1 != (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte*) main::charset#0 = (byte*~) main::$0 Alias (byte*) main::charset#2 = (byte*) main::charset#3 Alias (byte) main::c#2 = (byte) main::c#3 @@ -431,18 +431,18 @@ Alias (byte) gen_char3::r#2 = (byte) gen_char3::r#3 Alias (byte*) CHARSET#0 = (byte*) CHARSET#3 Alias (byte*) SCREEN#0 = (byte*) SCREEN#5 Alias (byte*) VIC_MEMORY#0 = (byte*) VIC_MEMORY#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (word) gen_char3::spec#2 = (word) gen_char3::spec#3 Alias (byte) gen_char3::c#2 = (byte) gen_char3::c#3 Alias (byte*) gen_char3::dst#1 = (byte*) gen_char3::dst#3 Alias (byte) gen_char3::r#2 = (byte) gen_char3::r#4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#1 Self Phi Eliminated (byte*) CHARSET#2 Self Phi Eliminated (byte*) VIC_MEMORY#1 Self Phi Eliminated (byte*) gen_char3::dst#1 Self Phi Eliminated (byte) gen_char3::r#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) CHARSET#1 (byte*) CHARSET#0 Redundant Phi (byte*) SCREEN#4 (byte*) SCREEN#0 Redundant Phi (byte*) VIC_MEMORY#4 (byte*) VIC_MEMORY#0 @@ -453,12 +453,12 @@ Redundant Phi (word) gen_char3::spec#6 (word) gen_char3::spec#0 Redundant Phi (byte*) gen_char3::dst#6 (byte*) gen_char3::dst#0 Redundant Phi (byte*) gen_char3::dst#1 (byte*) gen_char3::dst#5 Redundant Phi (byte) gen_char3::r#2 (byte) gen_char3::r#6 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$4 if((byte) main::c#1!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto main::@1 Simple Condition (bool~) gen_char3::$3 if((byte~) gen_char3::$1==(byte/signed byte/word/signed word/dword/signed dword) 0) goto gen_char3::@3 Simple Condition (bool~) gen_char3::$7 if((byte) gen_char3::c#1!=rangelast(0,2)) goto gen_char3::@2 Simple Condition (bool~) gen_char3::$8 if((byte) gen_char3::r#1!=rangelast(0,4)) goto gen_char3::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) VIC_MEMORY#0 = ((byte*))53272 Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte*) CHARSET#0 = ((byte*))12288 @@ -467,26 +467,26 @@ Constant (const byte) main::c#0 = 0 Constant (const byte) gen_char3::r#0 = 0 Constant (const byte) gen_char3::b#0 = 0 Constant (const byte) gen_char3::c#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::charset#0 = CHARSET#0+8 Constant (const word) main::$5 = ((word))SCREEN#0 Constant (const word) main::$7 = ((word))CHARSET#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word/signed dword/dword) main::$6 = main::$5/64 Constant (const word/signed dword/dword) main::$8 = main::$7/1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word/dword) main::$9 = main::$6|main::$8 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$10 = ((byte))main::$9 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value gen_char3::c#1 ← ++ gen_char3::c#2 to ++ Resolved ranged comparison value if(gen_char3::c#1!=rangelast(0,2)) goto gen_char3::@2 to (byte/signed byte/word/signed word/dword/signed dword) 3 Resolved ranged next value gen_char3::r#1 ← ++ gen_char3::r#6 to ++ Resolved ranged comparison value if(gen_char3::r#1!=rangelast(0,4)) goto gen_char3::@1 to (byte/signed byte/word/signed word/dword/signed dword) 5 Self Phi Eliminated (byte*) gen_char3::dst#5 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) gen_char3::dst#5 (byte*) gen_char3::dst#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::c#0 Inlining constant with var siblings (const byte*) main::charset#0 @@ -504,13 +504,11 @@ Constant inlined main::$9 = ((word))(const byte*) SCREEN#0/(byte/signed byte/wor Constant inlined main::$7 = ((word))(const byte*) CHARSET#0 Constant inlined main::$10 = ((byte))((word))(const byte*) SCREEN#0/(byte/signed byte/word/signed word/dword/signed dword) 64|((word))(const byte*) CHARSET#0/(word/signed word/dword/signed dword) 1024 Constant inlined main::$8 = ((word))(const byte*) CHARSET#0/(word/signed word/dword/signed dword) 1024 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@1 main::@3 main::@2 main::@return gen_char3 gen_char3::@1 gen_char3::@2 gen_char3::@4 gen_char3::@3 gen_char3::@5 gen_char3::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@4(between main::@3 and main::@1) Added new block during phi lifting gen_char3::@7(between gen_char3::@5 and gen_char3::@1) Added new block during phi lifting gen_char3::@8(between gen_char3::@3 and gen_char3::@2) Added new block during phi lifting gen_char3::@9(between gen_char3::@2 and gen_char3::@3) -Block Sequence Planned @begin @2 @end main main::@1 main::@3 main::@2 main::@return main::@4 gen_char3 gen_char3::@1 gen_char3::@2 gen_char3::@4 gen_char3::@3 gen_char3::@5 gen_char3::@return gen_char3::@7 gen_char3::@8 gen_char3::@9 Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -552,7 +550,6 @@ Culled Empty Block (label) main::@4 Culled Empty Block (label) gen_char3::@7 Culled Empty Block (label) gen_char3::@8 Culled Empty Block (label) gen_char3::@9 -Block Sequence Planned @begin @2 @end main main::@1 main::@3 main::@2 main::@return gen_char3 gen_char3::@1 gen_char3::@2 gen_char3::@4 gen_char3::@3 gen_char3::@5 gen_char3::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/operator-lohi-problem.log b/src/test/java/dk/camelot64/kickc/test/ref/operator-lohi-problem.log index 652427987..4ac4818ec 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/operator-lohi-problem.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/operator-lohi-problem.log @@ -100,22 +100,22 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Constant (const dword) DVAL#0 = 131072 Constant (const byte*) SCREEN#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const dword) main::$0 = DVAL#0/1024 Constant (const dword) main::$3 = DVAL#0/1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) main::$1 = ((word))main::$0 Constant (const word) main::$4 = ((word))main::$3 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::$2 = main::$4 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(SCREEN#0+0) Consolidated array index constant in *(SCREEN#0+1) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Constant inlined main::$1 = ((word))(const dword) DVAL#0/(word/signed word/dword/signed dword) 1024 Constant inlined main::$2 = <((word))(const dword) DVAL#0/(word/signed word/dword/signed dword) 1024 @@ -123,10 +123,8 @@ Constant inlined main::$0 = (const dword) DVAL#0/(word/signed word/dword/signed Constant inlined main::$5 = >((word))(const dword) DVAL#0/(word/signed word/dword/signed dword) 1024 Constant inlined main::$3 = (const dword) DVAL#0/(word/signed word/dword/signed dword) 1024 Constant inlined main::$4 = ((word))(const dword) DVAL#0/(word/signed word/dword/signed dword) 1024 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero SCREEN#0+0 -Block Sequence Planned @begin @1 @end main main::@return -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -136,7 +134,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation-2.log b/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation-2.log index 3d0ab1951..f0a2e6b97 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation-2.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation-2.log @@ -246,7 +246,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) line::@2 Culled Empty Block (label) @4 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte*) SCREEN#4 = (byte*) SCREEN#7 (byte*) SCREEN#8 Alias (byte) main::j#2 = (byte) main::j#3 @@ -255,40 +255,38 @@ Alias (byte) line::l#2 = (byte) line::l#3 Alias (byte*) SCREEN#2 = (byte*) SCREEN#3 Alias (byte) plot::x#1 = (byte/signed word/word/dword/signed dword~) line::$1 Alias (byte*) SCREEN#0 = (byte*) SCREEN#10 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#4 Self Phi Eliminated (byte*) SCREEN#5 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#6 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN#4 (byte*) SCREEN#6 Redundant Phi (byte*) SCREEN#5 (byte*) SCREEN#4 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((byte) main::i#1!=rangelast(0,8)) goto main::@1 Simple Condition (bool~) main::$3 if((byte) main::j#1!=rangelast(10,18)) goto main::@2 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) main::i#0 = 0 Constant (const byte) main::j#0 = 10 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,8)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 9 Resolved ranged next value main::j#1 ← ++ main::j#2 to ++ Resolved ranged comparison value if(main::j#1!=rangelast(10,18)) goto main::@2 to (byte/signed byte/word/signed word/dword/signed dword) 19 Culled Empty Block (label) main::@3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::j#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 10 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @3 @end main main::@1 main::@5 main::@2 main::@6 main::@return line line::@1 line::@return plot plot::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@7(between main::@5 and main::@1) Added new block during phi lifting main::@8(between main::@6 and main::@2) -Block Sequence Planned @begin @3 @end main main::@1 main::@5 main::@2 main::@6 main::@return main::@8 main::@7 line line::@1 line::@return plot plot::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end @@ -312,7 +310,6 @@ Coalesced [25] plot::x#4 ← plot::x#1 Coalesced down to 4 phi equivalence classes Culled Empty Block (label) main::@8 Culled Empty Block (label) main::@7 -Block Sequence Planned @begin @3 @end main main::@1 main::@5 main::@2 main::@6 main::@return line line::@1 line::@return plot plot::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation.log b/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation.log index fe07cbe21..04d674cc4 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/overlap-allocation.log @@ -238,7 +238,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte*) SCREEN#2 = (byte*) SCREEN#6 (byte*) SCREEN#7 Alias (byte) main::j#2 = (byte) main::j#3 @@ -246,27 +246,27 @@ Alias (byte*) SCREEN#3 = (byte*) SCREEN#8 (byte*) SCREEN#9 Alias (byte) main::k#2 = (byte) main::k#3 Alias (byte*) SCREEN#10 = (byte*) SCREEN#4 Alias (byte*) SCREEN#0 = (byte*) SCREEN#11 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#2 Self Phi Eliminated (byte*) SCREEN#3 Self Phi Eliminated (byte*) SCREEN#10 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#5 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#5 Redundant Phi (byte*) SCREEN#3 (byte*) SCREEN#2 Redundant Phi (byte*) SCREEN#10 (byte*) SCREEN#3 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((byte) main::i#1!=rangelast(0,10)) goto main::@1 Simple Condition (bool~) main::$3 if((byte) main::j#1!=rangelast(0,10)) goto main::@2 Simple Condition (bool~) main::$5 if((byte) main::k#1!=rangelast(0,10)) goto main::@3 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) main::i#0 = 0 Constant (const byte) main::j#0 = 0 Constant (const byte) main::k#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,10)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 11 Resolved ranged next value main::j#1 ← ++ main::j#2 to ++ @@ -275,7 +275,7 @@ Resolved ranged next value main::k#1 ← ++ main::k#2 to ++ Resolved ranged comparison value if(main::k#1!=rangelast(0,10)) goto main::@3 to (byte/signed byte/word/signed word/dword/signed dword) 11 Culled Empty Block (label) main::@4 Culled Empty Block (label) main::@5 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte) main::j#0 @@ -283,12 +283,10 @@ Inlining constant with var siblings (const byte) main::k#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::k#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@1 main::@7 main::@2 main::@8 main::@3 main::@9 main::@return plot plot::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@10(between main::@7 and main::@1) Added new block during phi lifting main::@11(between main::@8 and main::@2) Added new block during phi lifting main::@12(between main::@9 and main::@3) -Block Sequence Planned @begin @2 @end main main::@1 main::@7 main::@2 main::@8 main::@3 main::@9 main::@return main::@12 main::@11 main::@10 plot plot::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -312,7 +310,6 @@ Coalesced down to 4 phi equivalence classes Culled Empty Block (label) main::@12 Culled Empty Block (label) main::@11 Culled Empty Block (label) main::@10 -Block Sequence Planned @begin @2 @end main main::@1 main::@7 main::@2 main::@8 main::@3 main::@9 main::@return plot plot::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/print-problem.log b/src/test/java/dk/camelot64/kickc/test/ref/print-problem.log index f0c7b09e9..dd5f3c3b1 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/print-problem.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/print-problem.log @@ -233,7 +233,7 @@ Alias (byte) line#13 = (byte) line#5 (byte/signed word/word/dword/signed dword~) Alias (byte*) SCREEN#0 = (byte*) SCREEN#5 Alias (byte) line#14 = (byte) line#7 Alias (byte) char#15 = (byte) char#9 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Redundant Phi (byte) line#15 (byte) line#0 Redundant Phi (byte) char#16 (byte) line#0 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 @@ -245,21 +245,19 @@ Redundant Phi (byte) line#10 (byte) line#13 Redundant Phi (byte) char#12 (byte) line#13 Redundant Phi (byte) line#14 (byte) line#10 Redundant Phi (byte) char#15 (byte) char#12 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) line#0 = 64 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Eliminating unused variable (byte) char#2 and assignment [1] (byte) char#2 ← ++ (byte) line#13 Eliminating unused variable (byte) char#4 and assignment [3] (byte) char#4 ← ++ (byte) line#13 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) line#0 Constant inlined line#0 = (byte/signed byte/word/signed word/dword/signed dword) 64 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@return ln ln::@return -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@return ln ln::@return +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -275,7 +273,6 @@ Created 1 initial phi equivalence classes Coalesced [6] line#17 ← line#13 Coalesced (already) [8] line#18 ← line#13 Coalesced down to 1 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@return ln ln::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/printmsg.log b/src/test/java/dk/camelot64/kickc/test/ref/printmsg.log index 454d26d14..1ba1a078a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/printmsg.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/printmsg.log @@ -851,9 +851,9 @@ Alias (byte*) print_line_cursor#13 = (byte*) print_line_cursor#5 (byte*) print_l Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#22 (byte*) print_char_cursor#23 (byte*) print_char_cursor#11 Alias (byte*) print_char_cursor#12 = (byte*) print_char_cursor#24 Alias (byte*) print_line_cursor#15 = (byte*) print_line_cursor#7 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) print_char_cursor#15 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) print_char_cursor#15 (byte*) print_char_cursor#26 Redundant Phi (byte*) print_char_cursor#27 (byte*) print_char_cursor#0 Redundant Phi (byte*) print_line_cursor#17 (byte*) print_char_cursor#0 @@ -868,26 +868,26 @@ Redundant Phi (byte*) print_line_cursor#13 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#10 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#12 (byte*) print_char_cursor#10 Redundant Phi (byte*) print_line_cursor#15 (byte*) print_line_cursor#13 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) print_char_cursor#26 (byte*) print_char_cursor#13 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) print_str::$0 if(*((byte*) print_str::str#4)!=(byte) '@') goto print_str::@2 Simple Condition (bool~) print_ln::$1 if((byte*) print_line_cursor#1<(byte*) print_char_cursor#13) goto print_ln::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) print_char_cursor#0 = ((byte*))1024 Constant (const byte[]) msg#0 = $0 Constant (const byte[]) msg2#0 = $1 Constant (const byte[]) msg3#0 = $2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) print_str::str#1 = msg#0 Constant (const byte*) print_str::str#2 = msg2#0 Constant (const byte*) print_str::str#3 = msg3#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Culled Empty Block (label) print_ln::@2 Culled Empty Block (label) @14 Culled Empty Block (label) main::@6 Culled Empty Block (label) @16 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte*) print_str::str#1 Inlining constant with var siblings (const byte*) print_str::str#2 @@ -900,10 +900,8 @@ Constant inlined print_str::str#1 = (const byte[]) msg#0 Constant inlined $0 = (const byte[]) msg#0 Constant inlined $1 = (const byte[]) msg2#0 Constant inlined $2 = (const byte[]) msg3#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @15 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) -Block Sequence Planned @begin @15 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_ln::@3 print_str print_str::@1 print_str::@return print_str::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @15 Adding NOP phi() at start of @end @@ -934,7 +932,6 @@ Coalesced [33] print_str::str#8 ← print_str::str#0 Coalesced [34] print_char_cursor#34 ← print_char_cursor#1 Coalesced down to 3 phi equivalence classes Culled Empty Block (label) print_ln::@3 -Block Sequence Planned @begin @15 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @15 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/ptr-complex.log b/src/test/java/dk/camelot64/kickc/test/ref/ptr-complex.log index 360c683fa..44dac0ae7 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/ptr-complex.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/ptr-complex.log @@ -255,28 +255,28 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Not aliassing identity: main::screen#3 main::screen#3 Alias (byte*) main::screen#1 = (byte*) main::screen#2 Alias (byte*) main::sc2#0 = (byte*~) main::$4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: main::screen#3 main::screen#3 Self Phi Eliminated (byte*) main::screen#1 Self Phi Eliminated (byte*) main::screen#3 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::screen#1 (byte*) main::screen#0 Redundant Phi (byte*) main::screen#3 (byte*) main::screen#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$3 if((byte) main::i#1!=rangelast(0,10)) goto main::@1 Simple Condition (bool~) main::$12 if((byte) main::j#1!=rangelast(0,10)) goto main::@2 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::screen#0 = ((byte*))1024 Constant (const byte) main::i#0 = 0 Constant (const byte) main::j#0 = 0 Constant (const byte*) main::$13 = ((byte*))53280 Constant (const word/dword/signed dword) main::$16 = 53248+33 Constant (const byte*) main::BGCOL#0 = ((byte*))53280 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$1 = main::screen#0+40 Constant (const byte*) main::sc2#0 = main::screen#0+81 Constant (const byte*) main::$5 = main::screen#0+121 @@ -285,7 +285,7 @@ Constant (const byte*) main::$7 = main::screen#0+122 Constant (const byte*) main::$8 = main::screen#0+160 Constant (const byte*) main::$10 = main::screen#0+200 Constant (const byte*) main::$17 = ((byte*))main::$16 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,10)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 11 Resolved ranged next value main::j#1 ← ++ main::j#2 to ++ @@ -304,11 +304,9 @@ Constant inlined main::j#0 = (byte/signed byte/word/signed word/dword/signed dwo Constant inlined main::$7 = (const byte*) main::screen#0+(byte/signed byte/word/signed word/dword/signed dword) 122 Constant inlined main::$10 = (const byte*) main::screen#0+(byte/word/signed word/dword/signed dword) 200 Constant inlined main::$8 = (const byte*) main::screen#0+(byte/word/signed word/dword/signed dword) 160 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@4 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@5(between main::@1 and main::@1) Added new block during phi lifting main::@6(between main::@2 and main::@2) -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@4 main::@return main::@6 main::@5 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -325,7 +323,6 @@ Coalesced [23] main::i#3 ← main::i#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) main::@6 Culled Empty Block (label) main::@5 -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@4 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.log b/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.log index 4c8cad615..bdbfeeac1 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/ptrtest.log @@ -470,23 +470,23 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@4 Culled Empty Block (label) @6 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) lvalue::i#2 = (byte) lvalue::i#3 Alias (byte) rvalue::i#2 = (byte) rvalue::i#3 Alias (byte) lvaluevar::b#1 = (byte) lvaluevar::b#2 Alias (byte*) lvaluevar::screen#2 = (byte*) lvaluevar::screen#3 Alias (byte) lvaluevar::i#2 = (byte) lvaluevar::i#3 Alias (byte) rvaluevar::i#2 = (byte) rvaluevar::i#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) lvaluevar::b#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) lvaluevar::b#1 (byte) lvaluevar::b#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) lvalue::$0 if((byte) lvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto lvalue::@2 Simple Condition (bool~) rvalue::$0 if((byte) rvalue::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvalue::@2 Simple Condition (bool~) lvaluevar::$0 if((byte) lvaluevar::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto lvaluevar::@2 Simple Condition (bool~) rvaluevar::$0 if((byte) rvaluevar::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto rvaluevar::@2 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte[1024]) lvalue::SCREEN#0 = ((byte*))1024 Constant (const byte) lvalue::i#0 = 2 Constant (const byte) rvalue::i#0 = 2 @@ -494,9 +494,9 @@ Constant (const byte*) lvaluevar::screen#0 = ((byte*))1024 Constant (const byte) lvaluevar::b#0 = 4 Constant (const byte) lvaluevar::i#0 = 2 Constant (const byte) rvaluevar::i#0 = 2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(lvalue::SCREEN#0+1) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) lvalue::i#0 Inlining constant with var siblings (const byte) rvalue::i#0 @@ -508,9 +508,7 @@ Constant inlined lvaluevar::i#0 = (byte/signed byte/word/signed word/dword/signe Constant inlined lvalue::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 2 Constant inlined lvaluevar::screen#0 = ((byte*))(word/signed word/dword/signed dword) 1024 Constant inlined rvaluevar::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 2 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @5 @end main main::@1 main::@2 main::@3 main::@return lvaluevar lvaluevar::@1 lvaluevar::@return lvaluevar::@2 rvaluevar rvaluevar::@1 rvaluevar::@return rvaluevar::@2 rvalue rvalue::@1 rvalue::@return rvalue::@2 lvalue lvalue::@1 lvalue::@return lvalue::@2 -Block Sequence Planned @begin @5 @end main main::@1 main::@2 main::@3 main::@return lvaluevar lvaluevar::@1 lvaluevar::@return lvaluevar::@2 rvaluevar rvaluevar::@1 rvaluevar::@return rvaluevar::@2 rvalue rvalue::@1 rvalue::@return rvalue::@2 lvalue lvalue::@1 lvalue::@return lvalue::@2 +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end @@ -536,7 +534,6 @@ Coalesced [27] rvaluevar::i#4 ← rvaluevar::i#1 Coalesced [33] rvalue::i#4 ← rvalue::i#1 Coalesced [41] lvalue::i#4 ← lvalue::i#1 Coalesced down to 5 phi equivalence classes -Block Sequence Planned @begin @5 @end main main::@1 main::@2 main::@3 main::@return lvaluevar lvaluevar::@1 lvaluevar::@return lvaluevar::@2 rvaluevar rvaluevar::@1 rvaluevar::@return rvaluevar::@2 rvalue rvalue::@1 rvalue::@return rvalue::@2 lvalue lvalue::@1 lvalue::@return lvalue::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/ptrtestmin.log b/src/test/java/dk/camelot64/kickc/test/ref/ptrtestmin.log index a0a75f321..a17528203 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/ptrtestmin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/ptrtestmin.log @@ -119,19 +119,17 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::i#2 = (byte) main::i#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Simple Condition (bool~) main::$0 if((byte) main::i#2<(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@2 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) main::i#0 = 2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 2 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -144,7 +142,6 @@ Propagating live ranges... Created 1 initial phi equivalence classes Coalesced [9] main::i#4 ← main::i#1 Coalesced down to 1 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/raster-bars.log b/src/test/java/dk/camelot64/kickc/test/ref/raster-bars.log index 97be5145c..2e96ca032 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/raster-bars.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/raster-bars.log @@ -737,34 +737,32 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@1 Culled Empty Block (label) @6 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Simple Condition (bool~) main::$0 if(*((byte*) RASTER#0)!=(byte/signed byte/word/signed word/dword/signed dword) 10) goto main::@2 Simple Condition (bool~) main::$1 if(*((byte*) RASTER#0)!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@3 Simple Condition (bool~) raster::$0 if((byte) raster::col#1!=(byte/word/signed word/dword/signed dword) 255) goto raster::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) RASTER#0 = ((byte*))53266 Constant (const byte*) BORDERCOL#0 = ((byte*))53280 Constant (const byte*) BGCOL#0 = ((byte*))53281 Constant (const byte[]) rastercols#0 = { 11, 0, 11, 11, 12, 11, 12, 12, 15, 12, 15, 15, 1, 15, 1, 1, 15, 1, 15, 15, 12, 15, 12, 12, 11, 12, 11, 11, 0, 11, 0, 255 } Constant (const byte) raster::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(rastercols#0+raster::i#0) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination if(true) goto main::@2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) main::@7 Culled Empty Block (label) @4 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) raster::i#0 Constant inlined raster::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero rastercols#0+0 -Block Sequence Planned @begin @5 @end main main::@2 main::@3 main::@5 raster raster::@1 raster::@return Added new block during phi lifting raster::@3(between raster::@1 and raster::@1) -Block Sequence Planned @begin @5 @end main main::@2 main::@3 main::@5 raster raster::@1 raster::@return raster::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end @@ -784,7 +782,6 @@ Coalesced [20] raster::col#4 ← raster::col#1 Coalesced [21] raster::i#3 ← raster::i#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) raster::@3 -Block Sequence Planned @begin @5 @end main main::@2 main::@3 main::@5 raster raster::@1 raster::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/scroll-clobber.log b/src/test/java/dk/camelot64/kickc/test/ref/scroll-clobber.log index 0bb809c19..cdcb21da8 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/scroll-clobber.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/scroll-clobber.log @@ -173,34 +173,34 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) main::$1 ← (byte) main::c#0 != (byte) '@' from (bool~) main::$0 ← (byte) main::c#0 == (byte) '@' -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) main::i#3 = (byte) main::i#4 Alias (byte*) SCREEN#2 = (byte*) SCREEN#3 Alias (byte*) SCREEN#0 = (byte*) SCREEN#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte*) SCREEN#1 = (byte*) SCREEN#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#4 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#4 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((byte) main::c#0!=(byte) '@') goto main::@2 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte[]) TEXT#0 = $0 Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::nxt#0 = TEXT#0 Constant (const byte*) main::nxt#2 = TEXT#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Inlining constant with var siblings (const byte*) main::nxt#0 @@ -209,10 +209,8 @@ Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dwo Constant inlined main::nxt#0 = (const byte[]) TEXT#0 Constant inlined $0 = (const byte[]) TEXT#0 Constant inlined main::nxt#2 = (const byte[]) TEXT#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@5(between main::@1 and main::@2) -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@5 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -234,7 +232,6 @@ Coalesced [16] main::c#3 ← main::c#0 Coalesced [17] main::nxt#6 ← main::nxt#3 Coalesced down to 3 phi equivalence classes Culled Empty Block (label) main::@5 -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/scroll.log b/src/test/java/dk/camelot64/kickc/test/ref/scroll.log index 356b8ecfc..32fb5da33 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/scroll.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/scroll.log @@ -528,10 +528,10 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) main::$5 ← (byte) main::scroll#1 != (byte/word/signed word/dword/signed dword) 255 from (bool~) main::$4 ← (byte) main::scroll#1 == (byte/word/signed word/dword/signed dword) 255 Inversing boolean not (bool~) main::$9 ← (byte) main::c#0 != (byte) '@' from (bool~) main::$8 ← (byte) main::c#0 == (byte) '@' -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Not aliassing identity: main::nxt#5 main::nxt#5 Not aliassing identity: TEXT#6 TEXT#6 Not aliassing identity: main::scroll#11 main::scroll#11 @@ -568,7 +568,7 @@ Alias (byte*) TEXT#0 = (byte*) TEXT#5 Alias (byte*) RASTER#0 = (byte*) RASTER#7 Alias (byte*) BGCOL#0 = (byte*) BGCOL#13 Alias (byte*) SCROLL#0 = (byte*) SCROLL#13 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: main::nxt#3 main::nxt#3 Not aliassing identity: TEXT#2 TEXT#2 Not aliassing identity: main::scroll#11 main::scroll#11 @@ -580,7 +580,7 @@ Alias (byte*) SCROLL#2 = (byte*) SCROLL#5 Alias (byte*) BGCOL#10 = (byte*) BGCOL#4 Alias (byte*) RASTER#10 = (byte*) RASTER#8 Alias (byte*) TEXT#13 = (byte*) TEXT#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: main::nxt#3 main::nxt#3 Not aliassing identity: TEXT#13 TEXT#13 Not aliassing identity: main::scroll#11 main::scroll#11 @@ -607,7 +607,7 @@ Self Phi Eliminated (byte*) BGCOL#10 Self Phi Eliminated (byte*) RASTER#10 Self Phi Eliminated (byte) fillscreen::fill#1 Self Phi Eliminated (byte*) fillscreen::screen#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 Redundant Phi (byte*) TEXT#1 (byte*) TEXT#0 Redundant Phi (byte*) RASTER#4 (byte*) RASTER#0 @@ -629,19 +629,19 @@ Redundant Phi (byte*) fillscreen::cursor#0 (byte*) fillscreen::screen#0 Redundant Phi (byte) fillscreen::fill#2 (byte) fillscreen::fill#0 Redundant Phi (byte) fillscreen::fill#1 (byte) fillscreen::fill#2 Redundant Phi (byte*) fillscreen::screen#2 (byte*) fillscreen::cursor#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) SCROLL#1 (byte*) SCROLL#7 Redundant Phi (byte*) BGCOL#2 (byte*) BGCOL#5 Redundant Phi (byte*) RASTER#3 (byte*) RASTER#1 Redundant Phi (byte*) TEXT#11 (byte*) TEXT#10 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$2 if(*((byte*) RASTER#1)!=(byte/word/signed word/dword/signed dword) 254) goto main::@2 Simple Condition (bool~) main::$3 if(*((byte*) RASTER#1)!=(byte/word/signed word/dword/signed dword) 255) goto main::@3 Simple Condition (bool~) main::$5 if((byte) main::scroll#1!=(byte/word/signed word/dword/signed dword) 255) goto main::@4 Simple Condition (bool~) main::$7 if((byte) main::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 39) goto main::@5 Simple Condition (bool~) main::$9 if((byte) main::c#0!=(byte) '@') goto main::@6 Simple Condition (bool~) fillscreen::$1 if((byte*) fillscreen::cursor#1<(byte*~) fillscreen::$0) goto fillscreen::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte*) RASTER#0 = ((byte*))53266 Constant (const byte*) BGCOL#0 = ((byte*))53280 @@ -651,31 +651,31 @@ Constant (const byte) fillscreen::fill#0 = 32 Constant (const byte) main::scroll#0 = 7 Constant (const byte) main::scroll#2 = 7 Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) fillscreen::screen#0 = SCREEN#0 Constant (const byte*) main::nxt#0 = TEXT#0 Constant (const byte[]) main::line#0 = SCREEN#0+40 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) fillscreen::$0 = fillscreen::screen#0+1000 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in assignment *(main::line#0+1 + main::$6) Consolidated array index constant in *(main::line#0+39) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination if(true) goto main::@1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) main::$6 ← (byte) main::i#2 Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) main::@13 Culled Empty Block (label) main::@1 Culled Empty Block (label) main::@9 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Not aliassing identity: RASTER#1 RASTER#1 Not aliassing identity: BGCOL#5 BGCOL#5 Not aliassing identity: SCROLL#7 SCROLL#7 Not aliassing identity: TEXT#10 TEXT#10 Alias (byte) main::i#2 = (byte~) main::$6 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: RASTER#1 RASTER#1 Not aliassing identity: BGCOL#5 BGCOL#5 Not aliassing identity: SCROLL#7 SCROLL#7 @@ -684,14 +684,14 @@ Self Phi Eliminated (byte*) RASTER#1 Self Phi Eliminated (byte*) BGCOL#5 Self Phi Eliminated (byte*) SCROLL#7 Self Phi Eliminated (byte*) TEXT#10 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) RASTER#1 (const byte*) RASTER#0 Redundant Phi (byte*) BGCOL#5 (const byte*) BGCOL#0 Redundant Phi (byte*) SCROLL#7 (const byte*) SCROLL#0 Redundant Phi (byte*) TEXT#10 (const byte*) TEXT#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte*) main::nxt#2 = TEXT#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::scroll#0 Inlining constant with var siblings (const byte) main::scroll#2 @@ -706,13 +706,11 @@ Constant inlined main::scroll#2 = (byte/signed byte/word/signed word/dword/signe Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined $0 = (const byte*) TEXT#0 Constant inlined main::nxt#2 = (const byte*) TEXT#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@2 main::@3 main::@8 main::@5 main::@10 main::@11 main::@6 main::@4 fillscreen fillscreen::@1 fillscreen::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@14(between main::@5 and main::@5) Added new block during phi lifting main::@15(between main::@10 and main::@6) Added new block during phi lifting main::@16(between main::@8 and main::@4) Added new block during phi lifting fillscreen::@3(between fillscreen::@1 and fillscreen::@1) -Block Sequence Planned @begin @2 @end main main::@2 main::@3 main::@8 main::@5 main::@10 main::@11 main::@6 main::@4 main::@15 main::@14 main::@16 fillscreen fillscreen::@1 fillscreen::@return fillscreen::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -746,7 +744,6 @@ Culled Empty Block (label) main::@15 Culled Empty Block (label) main::@14 Culled Empty Block (label) main::@16 Culled Empty Block (label) fillscreen::@3 -Block Sequence Planned @begin @2 @end main main::@2 main::@3 main::@8 main::@5 main::@10 main::@11 main::@6 main::@4 fillscreen fillscreen::@1 fillscreen::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/scrollbig.log b/src/test/java/dk/camelot64/kickc/test/ref/scrollbig.log index e1710205d..aea0c857b 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/scrollbig.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/scrollbig.log @@ -1373,7 +1373,7 @@ Inversing boolean not (bool~) scroll_soft::$1 ← (byte) scroll#3 != (byte/word/ Inversing boolean not (bool~) scroll_bit::$2 ← (byte) current_bit#5 != (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) scroll_bit::$1 ← (byte) current_bit#5 == (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) scroll_bit::$11 ← (byte~) scroll_bit::$9 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) scroll_bit::$10 ← (byte~) scroll_bit::$9 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) next_char::$1 ← (byte) next_char::c#0 != (byte) '@' from (bool~) next_char::$0 ← (byte) next_char::c#0 == (byte) '@' -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte*) RASTER#4 = (byte*) RASTER#5 Alias (byte*) BGCOL#6 = (byte*) BGCOL#7 Alias (byte) scroll#21 = (byte) scroll#22 @@ -1460,7 +1460,7 @@ Alias (byte) scroll#12 = (byte) scroll#6 Alias (byte) current_bit#16 = (byte) current_bit#8 Alias (byte*) nxt#10 = (byte*) nxt#20 Alias (byte*) current_chargen#14 = (byte*) current_chargen#7 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte*) SCROLL#1 = (byte*) SCROLL#2 Alias (byte*) PROCPORT#1 = (byte*) PROCPORT#10 Alias (byte*) SCREEN#11 = (byte*) SCREEN#2 @@ -1470,7 +1470,7 @@ Alias (byte*) current_chargen#12 = (byte*) current_chargen#13 Alias (byte) current_bit#14 = (byte) current_bit#15 Alias (byte*) PROCPORT#2 = (byte*) PROCPORT#7 Alias (byte*) nxt#16 = (byte*) nxt#32 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: current_chargen#12 current_chargen#12 Not aliassing identity: current_bit#14 current_bit#14 Not aliassing identity: PROCPORT#2 PROCPORT#2 @@ -1504,7 +1504,7 @@ Self Phi Eliminated (byte*) nxt#16 Self Phi Eliminated (byte*) SCREEN#3 Self Phi Eliminated (byte) fillscreen::fill#1 Self Phi Eliminated (byte*) fillscreen::screen#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 Redundant Phi (byte*) RASTER#4 (byte*) RASTER#0 Redundant Phi (byte*) BGCOL#6 (byte*) BGCOL#0 @@ -1567,7 +1567,7 @@ Redundant Phi (byte) scroll#12 (byte) scroll#0 Redundant Phi (byte) current_bit#16 (byte) current_bit#0 Redundant Phi (byte*) nxt#10 (byte*) nxt#0 Redundant Phi (byte*) current_chargen#14 (byte*) current_chargen#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if(*((byte*) RASTER#1)!=(byte/word/signed word/dword/signed dword) 254) goto main::@2 Simple Condition (bool~) main::$2 if(*((byte*) RASTER#1)!=(byte/word/signed word/dword/signed dword) 255) goto main::@3 Simple Condition (bool~) scroll_soft::$1 if((byte) scroll#3!=(byte/word/signed word/dword/signed dword) 255) goto scroll_soft::@1 @@ -1577,7 +1577,7 @@ Simple Condition (bool~) scroll_bit::$14 if((byte) scroll_bit::r#1!=rangelast(0, Simple Condition (bool~) next_char::$1 if((byte) next_char::c#0!=(byte) '@') goto next_char::@1 Simple Condition (bool~) scroll_hard::$40 if((byte) scroll_hard::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 39) goto scroll_hard::@1 Simple Condition (bool~) fillscreen::$1 if((byte*) fillscreen::cursor#1<(byte*~) fillscreen::$0) goto fillscreen::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) PROCPORT#0 = ((byte*))1 Constant (const byte*) CHARGEN#0 = ((byte*))53248 Constant (const byte*) SCREEN#0 = ((byte*))1024 @@ -1610,17 +1610,17 @@ Constant (const byte/word/signed word/dword/signed dword) scroll_hard::$30 = 40* Constant (const byte/word/signed word/dword/signed dword) scroll_hard::$32 = 40*6 Constant (const word/signed word/dword/signed dword) scroll_hard::$35 = 40*7 Constant (const word/signed word/dword/signed dword) scroll_hard::$37 = 40*7 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) fillscreen::screen#0 = SCREEN#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) fillscreen::$0 = fillscreen::screen#0+1000 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated constant in assignment scroll_bit::sc#0 -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination if(true) goto main::@1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value scroll_bit::r#1 ← ++ scroll_bit::r#2 to ++ Resolved ranged comparison value if(scroll_bit::r#1!=rangelast(0,7)) goto scroll_bit::@2 to (byte/signed byte/word/signed word/dword/signed dword) 8 Culled Empty Block (label) main::@7 @@ -1630,7 +1630,7 @@ Culled Empty Block (label) scroll_soft::@3 Culled Empty Block (label) @2 Culled Empty Block (label) @3 Culled Empty Block (label) @7 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Not aliassing identity: RASTER#1 RASTER#1 Not aliassing identity: BGCOL#4 BGCOL#4 Not aliassing identity: SCROLL#7 SCROLL#7 @@ -1645,7 +1645,7 @@ Self Phi Eliminated (byte*) PROCPORT#14 Self Phi Eliminated (byte*) SCREEN#17 Self Phi Eliminated (byte*) CHARGEN#10 Self Phi Eliminated (byte*) TEXT#12 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) RASTER#1 (const byte*) RASTER#0 Redundant Phi (byte*) BGCOL#4 (const byte*) BGCOL#0 Redundant Phi (byte*) SCROLL#7 (const byte*) SCROLL#0 @@ -1653,7 +1653,7 @@ Redundant Phi (byte*) PROCPORT#14 (const byte*) PROCPORT#0 Redundant Phi (byte*) SCREEN#17 (const byte*) SCREEN#0 Redundant Phi (byte*) CHARGEN#10 (const byte*) CHARGEN#0 Redundant Phi (byte*) TEXT#12 (const byte*) TEXT#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte*) scroll_bit::$7 = SCREEN#0 Constant (const byte*) scroll_hard::$1 = SCREEN#0+scroll_hard::$0 Constant (const byte*) scroll_hard::$3 = SCREEN#0+scroll_hard::$2 @@ -1671,9 +1671,9 @@ Constant (const byte*) scroll_hard::$31 = SCREEN#0+scroll_hard::$30 Constant (const byte*) scroll_hard::$33 = SCREEN#0+scroll_hard::$32 Constant (const byte*) scroll_hard::$36 = SCREEN#0+scroll_hard::$35 Constant (const byte*) scroll_hard::$38 = SCREEN#0+scroll_hard::$37 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) scroll_bit::sc#0 = scroll_bit::$7+40+39 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in assignment *(scroll_hard::$3+1 + scroll_hard::$4) Consolidated array index constant in assignment *(scroll_hard::$8+1 + scroll_hard::$9) Consolidated array index constant in assignment *(scroll_hard::$13+1 + scroll_hard::$14) @@ -1682,7 +1682,7 @@ Consolidated array index constant in assignment *(scroll_hard::$23+1 + scroll_ha Consolidated array index constant in assignment *(scroll_hard::$28+1 + scroll_hard::$29) Consolidated array index constant in assignment *(scroll_hard::$33+1 + scroll_hard::$34) Consolidated array index constant in assignment *(scroll_hard::$38+1 + scroll_hard::$39) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) scroll_hard::$4 ← (byte) scroll_hard::i#2 Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) scroll_hard::$9 ← (byte) scroll_hard::i#2 Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) scroll_hard::$14 ← (byte) scroll_hard::i#2 @@ -1692,7 +1692,7 @@ Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) scr Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) scroll_hard::$34 ← (byte) scroll_hard::i#2 Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) scroll_hard::$39 ← (byte) scroll_hard::i#2 Alias (byte) scroll_hard::i#2 = (byte~) scroll_hard::$4 (byte~) scroll_hard::$9 (byte~) scroll_hard::$14 (byte~) scroll_hard::$19 (byte~) scroll_hard::$24 (byte~) scroll_hard::$29 (byte~) scroll_hard::$34 (byte~) scroll_hard::$39 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) scroll_bit::r#0 Inlining constant with var siblings (const byte) scroll_bit::b#0 @@ -1748,19 +1748,17 @@ Constant inlined scroll_hard::$32 = (byte/signed byte/word/signed word/dword/sig Constant inlined scroll_hard::$11 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 2 Constant inlined scroll_hard::$33 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 6 Constant inlined scroll#14 = (byte/signed byte/word/signed word/dword/signed dword) 7 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant multiply by zero 40*0 Simplifying constant multiply by zero 40*0 Simplifying constant plus zero SCREEN#0+0 Simplifying constant plus zero SCREEN#0+0 -Block Sequence Planned @begin @6 @end main main::@2 main::@3 main::@5 main::@8 scroll_soft scroll_soft::@2 scroll_soft::@1 scroll_soft::@return scroll_bit scroll_bit::@4 scroll_bit::@8 scroll_bit::@1 scroll_bit::@7 scroll_bit::@2 scroll_bit::@5 scroll_bit::@3 scroll_bit::@6 scroll_bit::@return scroll_hard scroll_hard::@1 scroll_hard::@return next_char next_char::@2 next_char::@1 next_char::@return fillscreen fillscreen::@1 fillscreen::@return Added new block during phi lifting scroll_soft::@4(between scroll_soft and scroll_soft::@1) Added new block during phi lifting scroll_bit::@9(between scroll_bit and scroll_bit::@1) Added new block during phi lifting scroll_bit::@10(between scroll_bit::@3 and scroll_bit::@2) Added new block during phi lifting scroll_hard::@3(between scroll_hard::@1 and scroll_hard::@1) Added new block during phi lifting next_char::@4(between next_char and next_char::@1) Added new block during phi lifting fillscreen::@3(between fillscreen::@1 and fillscreen::@1) -Block Sequence Planned @begin @6 @end main main::@2 main::@3 main::@5 main::@8 scroll_soft scroll_soft::@2 scroll_soft::@1 scroll_soft::@return scroll_soft::@4 scroll_bit scroll_bit::@4 scroll_bit::@8 scroll_bit::@1 scroll_bit::@7 scroll_bit::@2 scroll_bit::@5 scroll_bit::@3 scroll_bit::@6 scroll_bit::@return scroll_bit::@10 scroll_bit::@9 scroll_hard scroll_hard::@1 scroll_hard::@return scroll_hard::@3 next_char next_char::@2 next_char::@1 next_char::@return next_char::@4 fillscreen fillscreen::@1 fillscreen::@return fillscreen::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @6 Adding NOP phi() at start of @end @@ -1825,7 +1823,6 @@ Culled Empty Block (label) scroll_bit::@9 Culled Empty Block (label) scroll_hard::@3 Culled Empty Block (label) next_char::@4 Culled Empty Block (label) fillscreen::@3 -Block Sequence Planned @begin @6 @end main main::@2 main::@3 main::@5 main::@8 scroll_soft scroll_soft::@2 scroll_soft::@1 scroll_soft::@return scroll_bit scroll_bit::@4 scroll_bit::@8 scroll_bit::@1 scroll_bit::@7 scroll_bit::@2 scroll_bit::@5 scroll_bit::@3 scroll_bit::@6 scroll_bit::@return scroll_hard scroll_hard::@1 scroll_hard::@return next_char next_char::@2 next_char::@1 next_char::@return fillscreen fillscreen::@1 fillscreen::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @6 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/scrolllogo.log b/src/test/java/dk/camelot64/kickc/test/ref/scrolllogo.log index 68aa2d2fd..f8da69f32 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/scrolllogo.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/scrolllogo.log @@ -4352,7 +4352,7 @@ Inversing boolean not (bool~) sin16s::$1 ← (dword) sin16s::x#3 < (dword) PI_u4 Inversing boolean not (bool~) sin16s::$4 ← (dword) sin16s::x#4 < (dword) PI_HALF_u4f28#0 from (bool~) sin16s::$3 ← (dword) sin16s::x#4 >= (dword) PI_HALF_u4f28#0 Inversing boolean not (bool~) sin16s::$19 ← (byte) sin16s::isUpper#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) sin16s::$18 ← (byte) sin16s::isUpper#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) loop::$5 ← (word) xsin_idx#3 != (word/signed dword/dword~) loop::$3 from (bool~) loop::$4 ← (word) xsin_idx#3 == (word/signed dword/dword~) loop::$3 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Not aliassing identity: SCREEN#3 SCREEN#3 Not aliassing identity: rem16u#27 rem16u#27 Not aliassing identity: xsin_idx#22 xsin_idx#22 @@ -4497,7 +4497,7 @@ Alias (byte*) SCREEN#28 = (byte*) SCREEN#7 Alias (word) xsin_idx#16 = (word) xsin_idx#2 Alias (word) rem16u#10 = (word) rem16u#19 Alias (word) xsin_idx#12 = (word) xsin_idx#6 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: SCREEN#3 SCREEN#3 Not aliassing identity: rem16u#23 rem16u#23 Not aliassing identity: xsin_idx#13 xsin_idx#13 @@ -4512,7 +4512,7 @@ Alias (signed word) mul16s::b#1 = (signed word) mul16s::b#2 Alias (signed word) mul16s::a#1 = (signed word) mul16s::a#3 Alias (byte) sin16s::isUpper#2 = (byte) sin16s::isUpper#8 Alias (byte*) SCREEN#30 = (byte*) SCREEN#36 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: SCREEN#3 SCREEN#3 Not aliassing identity: rem16u#23 rem16u#23 Not aliassing identity: xsin_idx#13 xsin_idx#13 @@ -4540,7 +4540,7 @@ Self Phi Eliminated (byte) render_logo::logo_idx#7 Self Phi Eliminated (byte) render_logo::screen_idx#12 Self Phi Eliminated (byte*) SCREEN#28 Self Phi Eliminated (byte) render_logo::screen_idx#15 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (word) divr16u::divisor#2 (word) divr16u::divisor#6 Redundant Phi (dword) div32u16u::dividend#1 (dword) div32u16u::dividend#0 Redundant Phi (word) div32u16u::divisor#1 (word) div32u16u::divisor#0 @@ -4591,7 +4591,7 @@ Redundant Phi (byte*) SCREEN#28 (byte*) SCREEN#14 Redundant Phi (byte) render_logo::screen_idx#15 (byte) render_logo::screen_idx#14 Redundant Phi (word) rem16u#10 (word) rem16u#17 Redundant Phi (word) xsin_idx#12 (word) xsin_idx#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) divr16u::$4 if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 Simple Condition (bool~) divr16u::$9 if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 Simple Condition (bool~) divr16u::$11 if((byte) divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 @@ -4616,7 +4616,7 @@ Simple Condition (bool~) render_logo::$19 if((byte) render_logo::logo_idx#10!=(b Simple Condition (bool~) render_logo::$24 unroll if((byte) render_logo::line#6!=rangelast(0,5)) goto render_logo::@14 Simple Condition (bool~) render_logo::$25 if((byte) render_logo::screen_idx#14!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render_logo::@16 Simple Condition (bool~) render_logo::$28 unroll if((byte) render_logo::line#8!=rangelast(0,5)) goto render_logo::@18 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) RASTER#0 = ((byte*))53266 Constant (const byte*) BORDERCOL#0 = ((byte*))53280 Constant (const byte*) BGCOL#0 = ((byte*))53281 @@ -4666,7 +4666,7 @@ Constant (const byte) render_logo::logo_idx#1 = 0 Constant (const byte) render_logo::line#3 = 0 Constant (const byte) render_logo::line#5 = 0 Constant (const byte) render_logo::line#7 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const signed word) sin16s_gen2::ampl#0 = sin16s_gen2::max#0-sin16s_gen2::min#0 Constant (const dword) div32u16u::dividend#0 = PI2_u4f28#0 Constant (const word/signed word/dword/signed dword) $1 = $0*8 @@ -4679,7 +4679,7 @@ Constant (const byte) fill::val#1 = WHITE#0|8 Constant (const byte*) fill::start#1 = COLS#0 Constant (const word) sin16s_gen2::wavelength#0 = XSIN_SIZE#0 Constant (const word/signed dword/dword) loop::$3 = XSIN_SIZE#0*2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#2 = >1 @@ -4688,7 +4688,7 @@ Constant (const signed word) mul16s::b#0 = sin16s_gen2::ampl#0 Constant (const word) main::toD0181_$0#0 = ((word))main::toD0181_screen#0 Constant (const word) main::toD0181_$4#0 = ((word))main::toD0181_gfx#0 Constant (const signed word*) sin16s_gen2::sintab#1 = xsin#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) divr16u::divisor#0 = div32u16u::divisor#0 Constant (const word) divr16u::divisor#1 = div32u16u::divisor#0 Constant (const word) mul16u::b#0 = ((word))mul16s::b#0 @@ -4696,23 +4696,23 @@ Constant (const word) mul16s::$7 = ((word))mul16s::b#0 Constant (const signed word) sin16s_gen2::offs#0 = sin16s_gen2::min#0+sin16s_gen2::$1 Constant (const word) main::toD0181_$1#0 = main::toD0181_$0#0&16383 Constant (const byte) main::toD0181_$5#0 = >main::toD0181_$4#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) main::toD0181_$2#0 = main::toD0181_$1#0<<2 Constant (const byte) main::toD0181_$6#0 = main::toD0181_$5#0>>2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::toD0181_$3#0 = >main::toD0181_$2#0 Constant (const byte) main::toD0181_$7#0 = main::toD0181_$6#0&15 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::toD0181_return#0 = main::toD0181_$3#0|main::toD0181_$7#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if((const signed word) mul16s::b#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@2 if() condition always true - replacing block destination if(true) goto loop::@2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Fixing inline constructor with div32u16u::$4 ← div32u16u::quotient_hi#0 dw= div32u16u::quotient_lo#0 -Succesful SSA optimization Pass2FixInlineConstructors +Successful SSA optimization Pass2FixInlineConstructors Eliminating unused constant (const byte) render_logo::line#0 Eliminating unused constant (const word) rem16u#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating Noop Cast (word) mul16u::a#1 ← ((word)) (signed word) mul16s::a#0 Eliminating Noop Cast (word~) mul16s::$13 ← ((word)) (signed word) mul16s::a#0 Eliminating Noop Cast (signed word~) sin16s_gen2::$7 ← ((signed word)) (word~) sin16s_gen2::$6 @@ -4720,14 +4720,14 @@ Eliminating Noop Cast (signed word) sin16s::sinx#0 ← ((signed word)) (word) si Eliminating Noop Cast (signed word~) sin16s::$20 ← ((signed word)) (word) sin16s::usinx#1 Eliminating Noop Cast (byte) render_logo::logo_idx#0 ← ((byte)) (signed byte~) render_logo::$17 Eliminating Noop Cast (byte) render_logo::logo_start#0 ← ((byte)) (signed byte) render_logo::x_char#0 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Eliminating variable (word~) mul16s::$12 from unused block mul16s::@4 Eliminating variable (word~) mul16s::$17 from unused block mul16s::@4 Eliminating variable (dword) mul16s::m#2 from unused block mul16s::@4 Removing PHI-reference to removed block (mul16s::@4) in block mul16s::@2 Removing unused block mul16s::@4 Removing unused block loop::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value divr16u::i#1 ← ++ divr16u::i#2 to ++ Resolved ranged comparison value if(divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 to (byte/signed byte/word/signed word/dword/signed dword) 16 Resolved ranged next value main::ch#1 ← ++ main::ch#2 to ++ @@ -4756,11 +4756,11 @@ Culled Empty Block (label) render_logo::@7 Culled Empty Block (label) render_logo::@12 Culled Empty Block (label) render_logo::@16 Culled Empty Block (label) @28 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Not aliassing identity: SCREEN#12 SCREEN#12 Alias (dword) div32u16u::return#0 = (dword~) div32u16u::$4 Alias (dword) mul16s::m#4 = (dword) mul16s::m#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: SCREEN#12 SCREEN#12 Self Phi Eliminated (byte*) SCREEN#32 Self Phi Eliminated (byte) render_logo::logo_start#1 @@ -4768,113 +4768,107 @@ Self Phi Eliminated (byte*) SCREEN#11 Self Phi Eliminated (byte*) SCREEN#12 Self Phi Eliminated (byte*) SCREEN#13 Self Phi Eliminated (byte*) SCREEN#14 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#32 (const byte*) SCREEN#0 Redundant Phi (byte) render_logo::logo_start#1 (byte)(signed byte) render_logo::x_char#0 Redundant Phi (byte*) SCREEN#11 (byte*) SCREEN#32 Redundant Phi (byte*) SCREEN#12 (byte*) SCREEN#11 Redundant Phi (byte*) SCREEN#13 (byte*) SCREEN#32 Redundant Phi (byte*) SCREEN#14 (byte*) SCREEN#13 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Unrolling loop Loop head: render_logo::@5 tails: render_logo::@5 blocks: render_logo::@5 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#9 (const byte) render_logo::line#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$8 = 40*render_logo::line#1 Constant (const byte) render_logo::line#2 = ++render_logo::line#1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$9 = SCREEN#0+render_logo::$8 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [165] if((const byte) render_logo::line#2!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@5_1 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@9 tails: render_logo::@9 blocks: render_logo::@9 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#10 (const byte) render_logo::line#3 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$12 = 40*render_logo::line#3 Constant (const byte/signed word/word/dword/signed dword) render_logo::$14 = 40*render_logo::line#3 Constant (const byte) render_logo::line#4 = ++render_logo::line#3 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$13 = SCREEN#0+render_logo::$12 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [48] if((const byte) render_logo::line#4!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@9_1 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@9_1 tails: render_logo::@9_1 blocks: render_logo::@9_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#15 (const byte) render_logo::line#4 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$31 = 40*render_logo::line#4 Constant (const byte/signed word/word/dword/signed dword) render_logo::$33 = 40*render_logo::line#4 Constant (const byte) render_logo::line#16 = ++render_logo::line#4 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$32 = SCREEN#0+render_logo::$31 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [50] if((const byte) render_logo::line#16!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@9_2 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@9_2 tails: render_logo::@9_2 blocks: render_logo::@9_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#17 (const byte) render_logo::line#16 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$35 = 40*render_logo::line#16 Constant (const byte/signed word/word/dword/signed dword) render_logo::$37 = 40*render_logo::line#16 Constant (const byte) render_logo::line#18 = ++render_logo::line#16 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$36 = SCREEN#0+render_logo::$35 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [52] if((const byte) render_logo::line#18!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@9_3 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@9_3 tails: render_logo::@9_3 blocks: render_logo::@9_3 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#19 (const byte) render_logo::line#18 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$39 = 40*render_logo::line#18 Constant (const byte/signed word/word/dword/signed dword) render_logo::$41 = 40*render_logo::line#18 Constant (const byte) render_logo::line#20 = ++render_logo::line#18 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$40 = SCREEN#0+render_logo::$39 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [54] if((const byte) render_logo::line#20!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@9_4 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@9_4 tails: render_logo::@9_4 blocks: render_logo::@9_4 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#21 (const byte) render_logo::line#20 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$43 = 40*render_logo::line#20 Constant (const byte/signed word/word/dword/signed dword) render_logo::$45 = 40*render_logo::line#20 Constant (const byte) render_logo::line#22 = ++render_logo::line#20 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$44 = SCREEN#0+render_logo::$43 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [56] if((const byte) render_logo::line#22!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@9_5 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@9_5 tails: render_logo::@9_5 blocks: render_logo::@9_5 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#23 (const byte) render_logo::line#22 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$47 = 40*render_logo::line#22 Constant (const byte/signed word/word/dword/signed dword) render_logo::$49 = 40*render_logo::line#22 Constant (const byte) render_logo::line#24 = ++render_logo::line#22 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$48 = SCREEN#0+render_logo::$47 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Removing PHI-reference to removed block (render_logo::@9_5) in block render_logo::@9_6 if() condition always false - eliminating [58] if((const byte) render_logo::line#24!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@9_6 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating unused constant (const byte) render_logo::line#24 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating variable (byte) render_logo::line#25 from unused block render_logo::@9_6 Eliminating variable (byte/signed word/word/dword/signed dword~) render_logo::$51 from unused block render_logo::@9_6 Eliminating variable (byte*~) render_logo::$52 from unused block render_logo::@9_6 @@ -4882,255 +4876,238 @@ Eliminating variable (byte/signed word/word/dword/signed dword~) render_logo::$5 Eliminating variable (byte/signed word/word/dword/signed dword~) render_logo::$54 from unused block render_logo::@9_6 Eliminating variable (byte) render_logo::line#26 from unused block render_logo::@9_6 Removing unused block render_logo::@9_6 -Succesful SSA optimization Pass2EliminateUnusedBlocks -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2EliminateUnusedBlocks Unrolling loop Loop head: render_logo::@5_1 tails: render_logo::@5_1 blocks: render_logo::@5_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#13 (const byte) render_logo::line#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$29 = 40*render_logo::line#2 Constant (const byte) render_logo::line#14 = ++render_logo::line#2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$30 = SCREEN#0+render_logo::$29 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [61] if((const byte) render_logo::line#14!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@5_2 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@5_2 tails: render_logo::@5_2 blocks: render_logo::@5_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#27 (const byte) render_logo::line#14 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$55 = 40*render_logo::line#14 Constant (const byte) render_logo::line#28 = ++render_logo::line#14 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$56 = SCREEN#0+render_logo::$55 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [62] if((const byte) render_logo::line#28!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@5_3 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@5_3 tails: render_logo::@5_3 blocks: render_logo::@5_3 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#29 (const byte) render_logo::line#28 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$57 = 40*render_logo::line#28 Constant (const byte) render_logo::line#30 = ++render_logo::line#28 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$58 = SCREEN#0+render_logo::$57 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [63] if((const byte) render_logo::line#30!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@5_4 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@5_4 tails: render_logo::@5_4 blocks: render_logo::@5_4 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#31 (const byte) render_logo::line#30 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$59 = 40*render_logo::line#30 Constant (const byte) render_logo::line#32 = ++render_logo::line#30 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$60 = SCREEN#0+render_logo::$59 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [64] if((const byte) render_logo::line#32!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@5_5 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@5_5 tails: render_logo::@5_5 blocks: render_logo::@5_5 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#33 (const byte) render_logo::line#32 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$61 = 40*render_logo::line#32 Constant (const byte) render_logo::line#34 = ++render_logo::line#32 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$62 = SCREEN#0+render_logo::$61 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Removing PHI-reference to removed block (render_logo::@5_5) in block render_logo::@5_6 if() condition always false - eliminating [65] if((const byte) render_logo::line#34!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@5_6 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating unused constant (const byte) render_logo::line#34 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating variable (byte) render_logo::line#35 from unused block render_logo::@5_6 Eliminating variable (byte/signed word/word/dword/signed dword~) render_logo::$63 from unused block render_logo::@5_6 Eliminating variable (byte*~) render_logo::$64 from unused block render_logo::@5_6 Eliminating variable (byte) render_logo::line#36 from unused block render_logo::@5_6 Removing unused block render_logo::@5_6 -Succesful SSA optimization Pass2EliminateUnusedBlocks -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2EliminateUnusedBlocks Unrolling loop Loop head: render_logo::@18 tails: render_logo::@18 blocks: render_logo::@18 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#12 (const byte) render_logo::line#7 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$26 = 40*render_logo::line#7 Constant (const byte) render_logo::line#8 = ++render_logo::line#7 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$27 = SCREEN#0+render_logo::$26 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [72] if((const byte) render_logo::line#8!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@18_1 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@18_1 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@18_1 tails: render_logo::@18_1 blocks: render_logo::@18_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#37 (const byte) render_logo::line#8 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$65 = 40*render_logo::line#8 Constant (const byte) render_logo::line#38 = ++render_logo::line#8 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$66 = SCREEN#0+render_logo::$65 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [73] if((const byte) render_logo::line#38!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@18_2 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@18_1 render_logo::@18_2 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@18_2 tails: render_logo::@18_2 blocks: render_logo::@18_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#39 (const byte) render_logo::line#38 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$67 = 40*render_logo::line#38 Constant (const byte) render_logo::line#40 = ++render_logo::line#38 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$68 = SCREEN#0+render_logo::$67 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [74] if((const byte) render_logo::line#40!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@18_3 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@18_1 render_logo::@18_2 render_logo::@18_3 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@18_3 tails: render_logo::@18_3 blocks: render_logo::@18_3 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#41 (const byte) render_logo::line#40 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$69 = 40*render_logo::line#40 Constant (const byte) render_logo::line#42 = ++render_logo::line#40 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$70 = SCREEN#0+render_logo::$69 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [75] if((const byte) render_logo::line#42!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@18_4 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@18_1 render_logo::@18_2 render_logo::@18_3 render_logo::@18_4 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@18_4 tails: render_logo::@18_4 blocks: render_logo::@18_4 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#43 (const byte) render_logo::line#42 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$71 = 40*render_logo::line#42 Constant (const byte) render_logo::line#44 = ++render_logo::line#42 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$72 = SCREEN#0+render_logo::$71 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [76] if((const byte) render_logo::line#44!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@18_5 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@18_1 render_logo::@18_2 render_logo::@18_3 render_logo::@18_4 render_logo::@18_5 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@18_5 tails: render_logo::@18_5 blocks: render_logo::@18_5 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#45 (const byte) render_logo::line#44 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$73 = 40*render_logo::line#44 Constant (const byte) render_logo::line#46 = ++render_logo::line#44 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$74 = SCREEN#0+render_logo::$73 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Removing PHI-reference to removed block (render_logo::@18_5) in block render_logo::@18_6 if() condition always false - eliminating [77] if((const byte) render_logo::line#46!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@18_6 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating unused constant (const byte) render_logo::line#46 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating variable (byte) render_logo::line#47 from unused block render_logo::@18_6 Eliminating variable (byte/signed word/word/dword/signed dword~) render_logo::$75 from unused block render_logo::@18_6 Eliminating variable (byte*~) render_logo::$76 from unused block render_logo::@18_6 Eliminating variable (byte) render_logo::line#48 from unused block render_logo::@18_6 Removing unused block render_logo::@18_6 -Succesful SSA optimization Pass2EliminateUnusedBlocks -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@18_1 render_logo::@18_2 render_logo::@18_3 render_logo::@18_4 render_logo::@18_5 render_logo::@35 render_logo::@14 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2EliminateUnusedBlocks Unrolling loop Loop head: render_logo::@14 tails: render_logo::@14 blocks: render_logo::@14 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#11 (const byte) render_logo::line#5 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$20 = 40*render_logo::line#5 Constant (const byte/signed word/word/dword/signed dword) render_logo::$22 = 40*render_logo::line#5 Constant (const byte) render_logo::line#6 = ++render_logo::line#5 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$21 = SCREEN#0+render_logo::$20 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [81] if((const byte) render_logo::line#6!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@14_1 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@18_1 render_logo::@18_2 render_logo::@18_3 render_logo::@18_4 render_logo::@18_5 render_logo::@35 render_logo::@14 render_logo::@14_1 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@14_1 tails: render_logo::@14_1 blocks: render_logo::@14_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#49 (const byte) render_logo::line#6 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$77 = 40*render_logo::line#6 Constant (const byte/signed word/word/dword/signed dword) render_logo::$79 = 40*render_logo::line#6 Constant (const byte) render_logo::line#50 = ++render_logo::line#6 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$78 = SCREEN#0+render_logo::$77 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [83] if((const byte) render_logo::line#50!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@14_2 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@18_1 render_logo::@18_2 render_logo::@18_3 render_logo::@18_4 render_logo::@18_5 render_logo::@35 render_logo::@14 render_logo::@14_1 render_logo::@14_2 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@14_2 tails: render_logo::@14_2 blocks: render_logo::@14_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#51 (const byte) render_logo::line#50 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$81 = 40*render_logo::line#50 Constant (const byte/signed word/word/dword/signed dword) render_logo::$83 = 40*render_logo::line#50 Constant (const byte) render_logo::line#52 = ++render_logo::line#50 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$82 = SCREEN#0+render_logo::$81 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [85] if((const byte) render_logo::line#52!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@14_3 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@18_1 render_logo::@18_2 render_logo::@18_3 render_logo::@18_4 render_logo::@18_5 render_logo::@35 render_logo::@14 render_logo::@14_1 render_logo::@14_2 render_logo::@14_3 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@14_3 tails: render_logo::@14_3 blocks: render_logo::@14_3 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#53 (const byte) render_logo::line#52 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$85 = 40*render_logo::line#52 Constant (const byte/signed word/word/dword/signed dword) render_logo::$87 = 40*render_logo::line#52 Constant (const byte) render_logo::line#54 = ++render_logo::line#52 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$86 = SCREEN#0+render_logo::$85 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [87] if((const byte) render_logo::line#54!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@14_4 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@18_1 render_logo::@18_2 render_logo::@18_3 render_logo::@18_4 render_logo::@18_5 render_logo::@35 render_logo::@14 render_logo::@14_1 render_logo::@14_2 render_logo::@14_3 render_logo::@14_4 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@14_4 tails: render_logo::@14_4 blocks: render_logo::@14_4 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#55 (const byte) render_logo::line#54 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$89 = 40*render_logo::line#54 Constant (const byte/signed word/word/dword/signed dword) render_logo::$91 = 40*render_logo::line#54 Constant (const byte) render_logo::line#56 = ++render_logo::line#54 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$90 = SCREEN#0+render_logo::$89 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [89] if((const byte) render_logo::line#56!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@14_5 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@18_1 render_logo::@18_2 render_logo::@18_3 render_logo::@18_4 render_logo::@18_5 render_logo::@35 render_logo::@14 render_logo::@14_1 render_logo::@14_2 render_logo::@14_3 render_logo::@14_4 render_logo::@14_5 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: render_logo::@14_5 tails: render_logo::@14_5 blocks: render_logo::@14_5 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) render_logo::line#57 (const byte) render_logo::line#56 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) render_logo::$93 = 40*render_logo::line#56 Constant (const byte/signed word/word/dword/signed dword) render_logo::$95 = 40*render_logo::line#56 Constant (const byte) render_logo::line#58 = ++render_logo::line#56 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) render_logo::$94 = SCREEN#0+render_logo::$93 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Removing PHI-reference to removed block (render_logo::@14_5) in block render_logo::@14_6 if() condition always false - eliminating [91] if((const byte) render_logo::line#58!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto render_logo::@14_6 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating unused constant (const byte) render_logo::line#58 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating variable (byte) render_logo::line#59 from unused block render_logo::@14_6 Eliminating variable (byte/signed word/word/dword/signed dword~) render_logo::$97 from unused block render_logo::@14_6 Eliminating variable (byte*~) render_logo::$98 from unused block render_logo::@14_6 @@ -5138,8 +5115,7 @@ Eliminating variable (byte/signed word/word/dword/signed dword~) render_logo::$9 Eliminating variable (byte/signed word/word/dword/signed dword~) render_logo::$100 from unused block render_logo::@14_6 Eliminating variable (byte) render_logo::line#60 from unused block render_logo::@14_6 Removing unused block render_logo::@14_6 -Succesful SSA optimization Pass2EliminateUnusedBlocks -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@18_1 render_logo::@18_2 render_logo::@18_3 render_logo::@18_4 render_logo::@18_5 render_logo::@35 render_logo::@14 render_logo::@14_1 render_logo::@14_2 render_logo::@14_3 render_logo::@14_4 render_logo::@14_5 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2EliminateUnusedBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 @@ -5330,10 +5306,10 @@ Constant inlined render_logo::$27 = (const byte*) SCREEN#0+(byte/signed byte/wor Constant inlined render_logo::line#38 = ++++(byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined render_logo::$26 = (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined render_logo::$29 = (byte/signed byte/word/signed word/dword/signed dword) 40*++(byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Identical Phi Values (word) divr16u::divisor#6 (const word) XSIN_SIZE#0 Identical Phi Values (word) fill::size#2 (word/signed word/dword/signed dword) 1000 -Succesful SSA optimization Pass2IdenticalPhiElimination +Successful SSA optimization Pass2IdenticalPhiElimination Simplifying constant multiply by zero 40*0 Simplifying constant multiply by zero 40*0 Simplifying constant integer increment ++0 @@ -5370,7 +5346,7 @@ Simplifying constant integer increment ++2 Simplifying constant integer increment ++3 Simplifying constant integer increment ++3 Simplifying constant integer increment ++4 -Succesful SSA optimization Pass2ConstantSimplification +Successful SSA optimization Pass2ConstantSimplification Simplifying constant plus zero SCREEN#0+0 Simplifying constant integer increment ++1 Simplifying constant integer increment ++2 @@ -5391,8 +5367,7 @@ Simplifying constant integer increment ++1 Simplifying constant integer increment ++2 Simplifying constant integer increment ++3 Simplifying constant integer increment ++4 -Succesful SSA optimization Pass2ConstantSimplification -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@18_1 render_logo::@18_2 render_logo::@18_3 render_logo::@18_4 render_logo::@18_5 render_logo::@35 render_logo::@14 render_logo::@14_1 render_logo::@14_2 render_logo::@14_3 render_logo::@14_4 render_logo::@14_5 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantSimplification Added new block during phi lifting main::@8(between main::@1 and main::@1) Added new block during phi lifting loop::@16(between loop::@15 and loop::@7) Added new block during phi lifting render_logo::@37(between render_logo::@2 and render_logo::@6) @@ -5409,7 +5384,6 @@ Added new block during phi lifting divr16u::@8(between divr16u::@3 and divr16u:: Added new block during phi lifting divr16u::@9(between divr16u::@1 and divr16u::@2) Added new block during phi lifting divr16u::@10(between divr16u::@2 and divr16u::@3) Added new block during phi lifting fill::@3(between fill::@1 and fill::@1) -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return main::@8 loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@13 loop::@7 loop::@16 render_logo render_logo::@2 render_logo::@37 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@38 render_logo::@15 render_logo::@18 render_logo::@18_1 render_logo::@18_2 render_logo::@18_3 render_logo::@18_4 render_logo::@18_5 render_logo::@35 render_logo::@14 render_logo::@14_1 render_logo::@14_2 render_logo::@14_3 render_logo::@14_4 render_logo::@14_5 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return sin16s_gen2::@6 mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16s::@7 mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 mul16u::@10 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return sin16s::@15 sin16s::@14 sin16s::@13 mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9 fill fill::@1 fill::@return fill::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @27 Adding NOP phi() at start of @end @@ -5542,7 +5516,6 @@ Culled Empty Block (label) divr16u::@8 Culled Empty Block (label) divr16u::@10 Culled Empty Block (label) divr16u::@9 Culled Empty Block (label) fill::@3 -Block Sequence Planned @begin @24 @27 @end main main::toD0181 main::@3 main::@4 main::@1 main::@2 main::@6 main::@return loop loop::@1 loop::@4 loop::@6 loop::@15 loop::@7 loop::@16 render_logo render_logo::@2 render_logo::@6 render_logo::@return render_logo::@9 render_logo::@9_1 render_logo::@9_2 render_logo::@9_3 render_logo::@9_4 render_logo::@9_5 render_logo::@26 render_logo::@5 render_logo::@5_1 render_logo::@5_2 render_logo::@5_3 render_logo::@5_4 render_logo::@5_5 render_logo::@22 render_logo::@1 render_logo::@11 render_logo::@15 render_logo::@18 render_logo::@18_1 render_logo::@18_2 render_logo::@18_3 render_logo::@18_4 render_logo::@18_5 render_logo::@35 render_logo::@14 render_logo::@14_1 render_logo::@14_2 render_logo::@14_3 render_logo::@14_4 render_logo::@14_5 render_logo::@31 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return sin16s::@15 mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return fill fill::@1 fill::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @27 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/showlogo.log b/src/test/java/dk/camelot64/kickc/test/ref/showlogo.log index d9cfa57cf..28f6534ad 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/showlogo.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/showlogo.log @@ -921,7 +921,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @6 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Not aliassing identity: SCREEN#3 SCREEN#3 Alias (byte*) main::toD0181_screen#0 = (byte*) main::toD0181_screen#1 Alias (byte*) main::toD0181_gfx#0 = (byte*) main::toD0181_gfx#1 @@ -935,23 +935,23 @@ Alias (byte*) fill::end#0 = (byte*~) fill::$0 Alias (byte*) fill::addr#0 = (byte*) fill::start#2 Alias (byte*) SCREEN#0 = (byte*) SCREEN#5 Alias (byte*) LOGO#0 = (byte*) LOGO#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: SCREEN#3 SCREEN#3 Self Phi Eliminated (byte*) SCREEN#3 Self Phi Eliminated (byte*) SCREEN#4 Self Phi Eliminated (byte) fill::val#2 Self Phi Eliminated (byte*) fill::end#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 Redundant Phi (byte*) LOGO#1 (byte*) LOGO#0 Redundant Phi (byte*) SCREEN#3 (byte*) SCREEN#1 Redundant Phi (byte*) SCREEN#4 (byte*) SCREEN#3 Redundant Phi (byte) fill::val#2 (byte) fill::val#3 Redundant Phi (byte*) fill::end#1 (byte*) fill::end#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$7 if((byte) main::ch#1!=rangelast(0,239)) goto main::@1 Simple Condition (bool~) fill::$1 if((byte*) fill::addr#1!=(byte*) fill::end#0) goto fill::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) BORDERCOL#0 = ((byte*))53280 Constant (const byte*) BGCOL#0 = ((byte*))53281 Constant (const byte*) BGCOL2#0 = ((byte*))53282 @@ -970,7 +970,7 @@ Constant (const byte/word/signed word/dword/signed dword) $0 = 6*40 Constant (const word) fill::size#0 = 40*25 Constant (const word) fill::size#1 = 40*25 Constant (const byte) main::ch#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word/signed word/dword/signed dword) $1 = $0*8 Constant (const byte*) main::toD0181_screen#0 = SCREEN#0 Constant (const byte*) main::toD0181_gfx#0 = LOGO#0 @@ -980,31 +980,31 @@ Constant (const byte) fill::val#0 = BLACK#0 Constant (const byte) fill::val#1 = WHITE#0|8 Constant (const byte*) fill::start#1 = COLS#0 Constant (const byte*) main::$10 = SCREEN#0+999 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) main::toD0181_$0#0 = ((word))main::toD0181_screen#0 Constant (const word) main::toD0181_$4#0 = ((word))main::toD0181_gfx#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) main::toD0181_$1#0 = main::toD0181_$0#0&16383 Constant (const byte) main::toD0181_$5#0 = >main::toD0181_$4#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) main::toD0181_$2#0 = main::toD0181_$1#0<<2 Constant (const byte) main::toD0181_$6#0 = main::toD0181_$5#0>>2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::toD0181_$3#0 = >main::toD0181_$2#0 Constant (const byte) main::toD0181_$7#0 = main::toD0181_$6#0&15 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::toD0181_return#0 = main::toD0181_$3#0|main::toD0181_$7#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@3 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value main::ch#1 ← ++ main::ch#2 to ++ Resolved ranged comparison value if(main::ch#1!=rangelast(0,239)) goto main::@1 to (byte/word/signed word/dword/signed dword) 240 Culled Empty Block (label) main::toD0181_@return Culled Empty Block (label) main::@11 Culled Empty Block (label) main::@2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::ch#0 Inlining constant with var siblings (const word) fill::size#0 @@ -1032,11 +1032,9 @@ Constant inlined fill::start#0 = (const byte*) SCREEN#0 Constant inlined main::toD0181_$4#0 = ((word))(const byte*) LOGO#0 Constant inlined main::toD0181_$5#0 = >((word))(const byte*) LOGO#0 Constant inlined main::ch#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @3 @5 @end main main::toD0181 main::@9 main::@10 main::@1 main::@3 fill fill::@1 fill::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@12(between main::@1 and main::@1) Added new block during phi lifting fill::@3(between fill::@1 and fill::@1) -Block Sequence Planned @begin @3 @5 @end main main::toD0181 main::@9 main::@10 main::@1 main::@3 main::@12 fill fill::@1 fill::@return fill::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end @@ -1059,7 +1057,6 @@ Coalesced [30] fill::addr#4 ← fill::addr#1 Coalesced down to 4 phi equivalence classes Culled Empty Block (label) main::@12 Culled Empty Block (label) fill::@3 -Block Sequence Planned @begin @3 @5 @end main main::toD0181 main::@9 main::@10 main::@1 main::@3 fill fill::@1 fill::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/signed-bytes.log b/src/test/java/dk/camelot64/kickc/test/ref/signed-bytes.log index 2bfbe0a15..91d89e0e5 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/signed-bytes.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/signed-bytes.log @@ -141,32 +141,30 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (signed byte) main::i#0 = (signed byte/signed word/signed dword~) main::$0 Alias (signed byte) main::i#2 = (signed byte) main::i#3 Alias (byte*) main::screen#1 = (byte*) main::screen#2 Alias (byte) main::j#2 = (byte) main::j#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::screen#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::screen#1 (byte*) main::screen#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((signed byte) main::i#2<(byte/signed byte/word/signed word/dword/signed dword) 127) goto main::@2 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::screen#0 = ((byte*))1024 Constant (const byte) main::j#0 = 0 Constant (const signed byte) main::i#0 = -127 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Eliminating Noop Cast (byte~) main::$2 ← ((byte)) (signed byte) main::i#2 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::j#0 Inlining constant with var siblings (const signed byte) main::i#0 Constant inlined main::i#0 = -(byte/signed byte/word/signed word/dword/signed dword) 127 Constant inlined main::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -181,7 +179,6 @@ Created 2 initial phi equivalence classes Coalesced [11] main::i#4 ← main::i#1 Coalesced [12] main::j#4 ← main::j#1 Coalesced down to 2 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/signed-words.log b/src/test/java/dk/camelot64/kickc/test/ref/signed-words.log index 4c05ad62a..9e363a576 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/signed-words.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/signed-words.log @@ -1181,7 +1181,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Inversing boolean not (bool~) anim::$1 ← (signed word) ypos#9 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) anim::$0 ← (signed word) ypos#9 < (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) anim::$6 ← (signed word) yvel_init#3 >= (signed word/signed dword~) anim::$4 from (bool~) anim::$5 ← (signed word) yvel_init#3 < (signed word/signed dword~) anim::$4 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte*) SPRITES_PTR#0 = (byte*~) $0 Alias (signed word) yvel#17 = (signed word) yvel#18 Alias (signed word) xpos#19 = (signed word) xpos#20 @@ -1222,17 +1222,17 @@ Alias (signed word) xpos#11 = (signed word) xpos#6 Alias (signed word) ypos#12 = (signed word) ypos#6 Alias (signed word) xvel#11 = (signed word) xvel#5 Alias (signed word) yvel_init#12 = (signed word) yvel_init#6 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (signed word) xpos#14 = (signed word) xpos#17 Alias (signed word) xvel#14 = (signed word) xvel#17 Alias (signed word) ypos#14 = (signed word) ypos#17 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (signed word) yvel#12 Self Phi Eliminated (signed word) xpos#12 Self Phi Eliminated (signed word) ypos#13 Self Phi Eliminated (signed word) xvel#12 Self Phi Eliminated (signed word) yvel_init#13 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (signed word) yvel#17 (signed word) yvel#14 Redundant Phi (signed word) xpos#19 (signed word) xpos#15 Redundant Phi (signed word) ypos#19 (signed word) ypos#15 @@ -1253,13 +1253,13 @@ Redundant Phi (signed word) xpos#11 (signed word) xpos#0 Redundant Phi (signed word) ypos#12 (signed word) ypos#0 Redundant Phi (signed word) xvel#11 (signed word) xvel#0 Redundant Phi (signed word) yvel_init#12 (signed word) yvel_init#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if(*((byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@2 Simple Condition (bool~) init::$3 if((byte*) init::sc#1!=(byte*~) init::$2) goto init::@1 Simple Condition (bool~) init::$4 if((byte) init::i#1!=rangelast(0,63)) goto init::@2 Simple Condition (bool~) anim::$1 if((signed word) ypos#13>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto anim::@1 Simple Condition (bool~) anim::$6 if((signed word) yvel_init#3>=(signed word/signed dword~) anim::$4) goto anim::@2 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SPRITES_XPOS#0 = ((byte*))53248 Constant (const byte*) SPRITES_YPOS#0 = ((byte*))53249 Constant (const byte*) SPRITES_XMSB#0 = ((byte*))53264 @@ -1281,25 +1281,25 @@ Constant (const signed word) xpos#14 = 0 Constant (const signed word) ypos#14 = 0 Constant (const signed word/signed dword) anim::$4 = -200 Constant (const signed word) yvel_init#4 = 200 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) SPRITES_PTR#0 = SCREEN#0+1016 Constant (const byte*) init::$0 = SPRITE#0/64 Constant (const byte*) init::sc#0 = SCREEN#0 Constant (const byte*) init::$2 = SCREEN#0+1000 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) init::$1 = ((byte))init::$0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(SPRITES_XPOS#0+0) Consolidated array index constant in *(SPRITES_YPOS#0+0) Consolidated array index constant in *(SPRITES_COLS#0+0) Consolidated array index constant in *(SPRITES_PTR#0+0) Consolidated array index constant in *(SPRITES_XPOS#0+0) Consolidated array index constant in *(SPRITES_YPOS#0+0) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination if(true) goto main::@1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value init::i#1 ← ++ init::i#2 to ++ Resolved ranged comparison value if(init::i#1!=rangelast(0,63)) goto init::@2 to (byte/signed byte/word/signed word/dword/signed dword) 64 Culled Empty Block (label) @3 @@ -1309,7 +1309,7 @@ Culled Empty Block (label) main::@6 Culled Empty Block (label) init::@3 Culled Empty Block (label) @5 Culled Empty Block (label) @7 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) init::i#0 Inlining constant with var siblings (const byte*) init::sc#0 @@ -1333,19 +1333,17 @@ Constant inlined xpos#15 = (byte/signed byte/word/signed word/dword/signed dword Constant inlined xpos#14 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined yvel_init#4 = (byte/word/signed word/dword/signed dword) 200 Constant inlined init::sc#0 = (const byte*) SCREEN#0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero SPRITES_XPOS#0+0 Simplifying constant plus zero SPRITES_YPOS#0+0 Simplifying constant plus zero SPRITES_COLS#0+0 Simplifying constant plus zero SPRITES_PTR#0+0 Simplifying constant plus zero SPRITES_XPOS#0+0 Simplifying constant plus zero SPRITES_YPOS#0+0 -Block Sequence Planned @begin @6 @end main main::@2 main::@3 anim anim::@3 anim::@4 anim::@2 anim::@1 anim::@return init init::@1 init::@2 init::@return Added new block during phi lifting anim::@5(between anim::@3 and anim::@2) Added new block during phi lifting anim::@6(between anim and anim::@1) Added new block during phi lifting init::@5(between init::@1 and init::@1) Added new block during phi lifting init::@6(between init::@2 and init::@2) -Block Sequence Planned @begin @6 @end main main::@2 main::@3 anim anim::@3 anim::@4 anim::@2 anim::@1 anim::@return anim::@5 anim::@6 init init::@1 init::@2 init::@return init::@6 init::@5 Adding NOP phi() at start of @begin Adding NOP phi() at start of @6 Adding NOP phi() at start of @end @@ -1398,7 +1396,6 @@ Culled Empty Block (label) anim::@4 Culled Empty Block (label) anim::@6 Culled Empty Block (label) init::@6 Culled Empty Block (label) init::@5 -Block Sequence Planned @begin @6 @end main main::@2 main::@3 anim anim::@3 anim::@2 anim::@1 anim::@return anim::@5 init init::@1 init::@2 init::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @6 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/simple-multiplexer.log b/src/test/java/dk/camelot64/kickc/test/ref/simple-multiplexer.log index f768dba96..4ab1cbcf8 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/simple-multiplexer.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/simple-multiplexer.log @@ -2514,7 +2514,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Inversing boolean not (bool~) plexSort::$3 ← (byte) plexSort::nxt_y#0 >= *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2)) from (bool~) plexSort::$2 ← (byte) plexSort::nxt_y#0 < *((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2)) Inversing boolean not (bool~) plexShowSprite::$10 ← (byte) plex_sprite_msb#3 != (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) plexShowSprite::$9 ← (byte) plex_sprite_msb#3 == (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Not aliassing identity: PLEX_SCREEN_PTR#15 PLEX_SCREEN_PTR#15 Not aliassing identity: plexSort::nxt_y#1 plexSort::nxt_y#1 Not aliassing identity: plexSort::nxt_idx#2 plexSort::nxt_idx#2 @@ -2637,7 +2637,7 @@ Alias (byte) plex_show_idx#10 = (byte) plex_show_idx#21 Alias (byte) plex_sprite_idx#10 = (byte) plex_sprite_idx#21 Alias (byte) plex_sprite_msb#11 = (byte) plex_sprite_msb#22 Alias (byte) plex_free_next#10 = (byte) plex_free_next#20 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: PLEX_SCREEN_PTR#15 PLEX_SCREEN_PTR#15 Not aliassing identity: plexSort::nxt_y#1 plexSort::nxt_y#1 Not aliassing identity: plexSort::nxt_idx#1 plexSort::nxt_idx#1 @@ -2660,7 +2660,7 @@ Alias (byte) plex_sprite_msb#13 = (byte) plex_sprite_msb#15 Alias (byte) plex_free_next#13 = (byte) plex_free_next#22 (byte) plex_free_next#2 Alias (byte) plex_sprite_idx#15 = (byte) plex_sprite_idx#27 Alias (byte) plex_show_idx#15 = (byte) plex_show_idx#27 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: PLEX_SCREEN_PTR#15 PLEX_SCREEN_PTR#15 Not aliassing identity: plexSort::nxt_y#1 plexSort::nxt_y#1 Not aliassing identity: plexSort::nxt_idx#1 plexSort::nxt_idx#1 @@ -2717,7 +2717,7 @@ Self Phi Eliminated (byte) loop::ss#2 Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#26 Self Phi Eliminated (byte) loop::sin_idx#10 Self Phi Eliminated (byte*) YSIN#10 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) plexInit::plexSetScreen1_screen#0 (byte*) plexInit::screen#0 Redundant Phi (byte*) PLEX_SCREEN_PTR#15 (byte*) PLEX_SCREEN_PTR#1 Redundant Phi (byte) plexSort::nxt_y#1 (byte) plexSort::nxt_y#0 @@ -2800,9 +2800,9 @@ Redundant Phi (byte) plex_show_idx#10 (byte) plex_show_idx#16 Redundant Phi (byte) plex_sprite_idx#10 (byte) plex_sprite_idx#16 Redundant Phi (byte) plex_sprite_msb#11 (byte) plex_sprite_msb#17 Redundant Phi (byte) plex_free_next#10 (byte) plex_free_next#14 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte) plexSort::m#3 (byte) plexSort::m#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) plexInit::$2 if((byte) plexInit::i#1!=rangelast(0,plexInit::$1)) goto plexInit::@1 Simple Condition (bool~) plexSort::$3 if((byte) plexSort::nxt_y#0>=*((byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::m#2))) goto plexSort::@2 Simple Condition (bool~) plexSort::$8 if((byte) plexSort::m#1!=rangelast(0,plexSort::$0)) goto plexSort::@1 @@ -2816,9 +2816,9 @@ Simple Condition (bool~) loop::$2 if((byte) loop::sy#1!=rangelast(0,loop::$1)) g Simple Condition (bool~) loop::$5 if((byte~) loop::$4!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto loop::@9 Simple Condition (bool~) loop::$8 if(*((byte*) RASTER#0)<(byte) loop::plexFreeNextYpos1_return#0) goto loop::@13 Simple Condition (bool~) loop::$10 if((byte) loop::ss#1!=rangelast(0,loop::$6)) goto loop::@11 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Rewriting && if()-condition to two if()s (bool~) plexSort::$7 ← (bool~) plexSort::$5 && (bool~) plexSort::$6 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Constant (const byte*) SPRITES_XPOS#0 = ((byte*))53248 Constant (const byte*) SPRITES_YPOS#0 = ((byte*))53249 Constant (const byte*) SPRITES_XMSB#0 = ((byte*))53264 @@ -2856,7 +2856,7 @@ Constant (const byte) init::ss#0 = 0 Constant (const byte) loop::sin_idx#0 = 0 Constant (const byte) loop::sy#0 = 0 Constant (const byte) loop::ss#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word[PLEX_COUNT#0]) PLEX_XPOS#0 = { fill( PLEX_COUNT#0, 0) } Constant (const byte[PLEX_COUNT#0]) PLEX_YPOS#0 = { fill( PLEX_COUNT#0, 0) } Constant (const byte[PLEX_COUNT#0]) PLEX_PTR#0 = { fill( PLEX_COUNT#0, 0) } @@ -2870,16 +2870,16 @@ Constant (const byte/signed word/word/dword/signed dword) init::$3 = PLEX_COUNT# Constant (const byte*) init::$4 = SPRITE#0/64 Constant (const byte/signed word/word/dword/signed dword) loop::$1 = PLEX_COUNT#0-1 Constant (const byte/signed word/word/dword/signed dword) loop::$6 = PLEX_COUNT#0-1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) PLEX_SCREEN_PTR#1 = plexInit::screen#0+1016 Constant (const byte/word/dword) init::$1 = init::$0|3 Constant (const byte) init::$5 = ((byte))init::$4 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in assignment *(PLEX_SORTED_IDX#0+1 + plexSort::$1) Consolidated array index constant in assignment *(PLEX_SORTED_IDX#0+1 + plexSort::$4) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination if(true) goto loop::@2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) plexSort::$1 ← (byte) plexSort::m#2 Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) plexSort::$4 ← (byte) plexSort::s#3 Eliminating unused variable - keeping the phi block (byte) plex_show_idx#20 @@ -2887,15 +2887,15 @@ Eliminating unused variable - keeping the phi block (byte) plex_sprite_idx#20 Eliminating unused variable - keeping the phi block (byte) plex_sprite_msb#10 Eliminating unused variable - keeping the phi block (byte) plex_free_next#19 Eliminating unused constant (const byte*) PLEX_SCREEN_PTR#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const word/signed word/dword/signed dword) $0 Eliminating unused constant (const byte) plex_show_idx#0 Eliminating unused constant (const byte) plex_sprite_idx#0 Eliminating unused constant (const byte) plex_sprite_msb#0 Eliminating unused constant (const byte) plex_free_next#29 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Removing unused block loop::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value plexInit::i#1 ← ++ plexInit::i#2 to ++ Resolved ranged comparison value if(plexInit::i#1!=rangelast(0,plexInit::$1)) goto plexInit::@1 to (const byte/signed word/word/dword/signed dword) plexInit::$1+(byte/signed byte/word/signed word/dword/signed dword) 1 Resolved ranged next value plexSort::m#1 ← ++ plexSort::m#2 to ++ @@ -2927,27 +2927,27 @@ Culled Empty Block (label) loop::plexFreeNextYpos1_@return Culled Empty Block (label) loop::@29 Culled Empty Block (label) loop::@13 Culled Empty Block (label) @15 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) plexSort::m#2 = (byte~) plexSort::$1 Alias (byte) plexSort::s#3 = (byte~) plexSort::$4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#31 Self Phi Eliminated (byte) loop::sin_idx#14 Self Phi Eliminated (byte*) YSIN#16 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) PLEX_SCREEN_PTR#31 (byte*) PLEX_SCREEN_PTR#44 Redundant Phi (byte) loop::sin_idx#14 (byte) loop::sin_idx#1 Redundant Phi (byte*) YSIN#16 (byte*) YSIN#4 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) plexSort::$5 if((byte) plexSort::s#1!=(byte/word/signed word/dword/signed dword) 255) goto plexSort::@8 Simple Condition (bool~) plexSort::$6 if((byte) plexSort::nxt_y#0<*((const byte[PLEX_COUNT#0]) PLEX_YPOS#0 + *((const byte[PLEX_COUNT#0]) PLEX_SORTED_IDX#0 + (byte) plexSort::s#1))) goto plexSort::@3 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Self Phi Eliminated (byte*) YSIN#4 Self Phi Eliminated (byte*) PLEX_SCREEN_PTR#44 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) YSIN#4 (const byte*) YSIN#0 Redundant Phi (byte*) PLEX_SCREEN_PTR#44 (const byte*) PLEX_SCREEN_PTR#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) plexInit::i#0 Inlining constant with var siblings (const byte) plexSort::m#0 @@ -2987,8 +2987,7 @@ Constant inlined plex_free_next#0 = (byte/signed byte/word/signed word/dword/sig Constant inlined loop::$6 = (const byte) PLEX_COUNT#0-(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined loop::ss#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined init::sx#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @11 @14 @end main main::@1 main::@return loop loop::@1 loop::@4 loop::@6 loop::@7 loop::@20 loop::@30 loop::@8 loop::@11 loop::plexFreeNextYpos1 loop::@12 loop::@14 loop::@31 loop::@27 plexShowSprite plexShowSprite::plexFreeAdd1 plexShowSprite::@7 plexShowSprite::@4 plexShowSprite::@2 plexShowSprite::@6 plexShowSprite::@return plexShowSprite::@1 plexSort plexSort::@1 plexSort::@3 plexSort::@5 plexSort::@2 plexSort::plexFreePrepare1 plexSort::plexFreePrepare1_@1 plexSort::@return plexSort::@8 init init::@1 init::@3 init::@2 init::@return plexInit plexInit::plexSetScreen1 plexInit::@1 plexInit::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting loop::@32(between loop::@7 and loop::@7) Added new block during phi lifting loop::@33(between loop::@31 and loop::@11) Added new block during phi lifting plexShowSprite::@8(between plexShowSprite::@2 and plexShowSprite::@return) @@ -2999,7 +2998,6 @@ Added new block during phi lifting plexSort::@12(between plexSort::plexFreePrepa Added new block during phi lifting init::@6(between init::@1 and init::@1) Added new block during phi lifting init::@7(between init::@2 and init::@2) Added new block during phi lifting plexInit::@4(between plexInit::@1 and plexInit::@1) -Block Sequence Planned @begin @11 @14 @end main main::@1 main::@return loop loop::@1 loop::@4 loop::@6 loop::@7 loop::@20 loop::@30 loop::@8 loop::@11 loop::plexFreeNextYpos1 loop::@12 loop::@14 loop::@31 loop::@27 loop::@33 loop::@32 plexShowSprite plexShowSprite::plexFreeAdd1 plexShowSprite::@7 plexShowSprite::@4 plexShowSprite::@2 plexShowSprite::@6 plexShowSprite::@return plexShowSprite::@8 plexShowSprite::@1 plexSort plexSort::@1 plexSort::@11 plexSort::@3 plexSort::@5 plexSort::@2 plexSort::plexFreePrepare1 plexSort::plexFreePrepare1_@1 plexSort::@return plexSort::@12 plexSort::@9 plexSort::@8 plexSort::@10 init init::@1 init::@3 init::@2 init::@return init::@7 init::@6 plexInit plexInit::plexSetScreen1 plexInit::@1 plexInit::@return plexInit::@4 Adding NOP phi() at start of @begin Adding NOP phi() at start of @14 Adding NOP phi() at start of @end @@ -3064,7 +3062,6 @@ Culled Empty Block (label) plexSort::@10 Culled Empty Block (label) init::@7 Culled Empty Block (label) init::@6 Culled Empty Block (label) plexInit::@4 -Block Sequence Planned @begin @11 @14 @end main main::@1 main::@return loop loop::@1 loop::@4 loop::@6 loop::@7 loop::@20 loop::@30 loop::@8 loop::@11 loop::plexFreeNextYpos1 loop::@12 loop::@14 loop::@31 loop::@27 plexShowSprite plexShowSprite::plexFreeAdd1 plexShowSprite::@7 plexShowSprite::@4 plexShowSprite::@2 plexShowSprite::@return plexShowSprite::@8 plexShowSprite::@1 plexSort plexSort::@1 plexSort::@11 plexSort::@3 plexSort::@5 plexSort::@2 plexSort::plexFreePrepare1 plexSort::plexFreePrepare1_@1 plexSort::@return plexSort::@8 init init::@1 init::@3 init::@2 init::@return plexInit plexInit::plexSetScreen1 plexInit::@1 plexInit::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @14 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sine-plotter.log b/src/test/java/dk/camelot64/kickc/test/ref/sine-plotter.log index db1fd138b..a47ed96cd 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sine-plotter.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sine-plotter.log @@ -4495,7 +4495,7 @@ Inversing boolean not (bool~) sin16s::$19 ← (byte) sin16s::isUpper#2 == (byte/ Inversing boolean not (bool~) bitmap_init::$1 ← (byte) bitmap_init::bits#1 != (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) bitmap_init::$0 ← (byte) bitmap_init::bits#1 == (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) bitmap_init::$9 ← (byte~) bitmap_init::$7 != (byte/signed byte/word/signed word/dword/signed dword) 7 from (bool~) bitmap_init::$8 ← (byte~) bitmap_init::$7 == (byte/signed byte/word/signed word/dword/signed dword) 7 Inversing boolean not (bool~) render_sine::$10 ← (word) render_sine::xpos#1 != (word/signed word/dword/signed dword) 320 from (bool~) render_sine::$9 ← (word) render_sine::xpos#1 == (word/signed word/dword/signed dword) 320 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#7 Alias (word) divr16u::dividend#0 = (word~) divr16u::$6 (word) divr16u::dividend#8 Alias (word) divr16u::quotient#1 = (word~) divr16u::$7 (word) divr16u::quotient#4 @@ -4626,7 +4626,7 @@ Alias (byte*) SCREEN#0 = (byte*) SCREEN#4 Alias (byte*) BITMAP#0 = (byte*) BITMAP#11 Alias (signed word*) sin2#0 = (signed word*) sin2#22 Alias (word) rem16u#10 = (word) rem16u#19 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (word) divr16u::dividend#3 = (word) divr16u::dividend#4 Alias (word) divr16u::quotient#3 = (word) divr16u::quotient#6 Alias (word) divr16u::divisor#2 = (word) divr16u::divisor#4 (word) divr16u::divisor#7 @@ -4642,7 +4642,7 @@ Alias (byte*) bitmap_init::bitmap#1 = (byte*) bitmap_init::bitmap#3 Alias (byte) bitmap_init::y#2 = (byte) bitmap_init::y#3 Alias (word) render_sine::sin_idx#2 = (word) render_sine::sin_idx#4 Alias (signed word*) sin2#1 = (signed word*) sin2#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (word) divr16u::divisor#2 Self Phi Eliminated (signed word) sin16s_gen2::ampl#1 Self Phi Eliminated (signed word) sin16s_gen2::offs#1 @@ -4655,7 +4655,7 @@ Self Phi Eliminated (byte*) bitmap_init::bitmap#1 Self Phi Eliminated (byte) bitmap_clear::y#2 Self Phi Eliminated (word) rem16u#18 Self Phi Eliminated (signed word*) sin2#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (word) divr16u::divisor#2 (word) divr16u::divisor#6 Redundant Phi (dword) div32u16u::dividend#1 (dword) div32u16u::dividend#0 Redundant Phi (word) div32u16u::divisor#1 (word) div32u16u::divisor#0 @@ -4693,7 +4693,7 @@ Redundant Phi (word) rem16u#18 (word) rem16u#17 Redundant Phi (signed word*) sin2#4 (signed word*) sin2#11 Redundant Phi (signed word*) sin2#1 (signed word*) sin2#4 Redundant Phi (word) rem16u#10 (word) rem16u#18 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) divr16u::$4 if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 Simple Condition (bool~) divr16u::$9 if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 Simple Condition (bool~) divr16u::$11 if((byte) divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 @@ -4716,7 +4716,7 @@ Simple Condition (bool~) render_sine::$10 if((word) render_sine::xpos#1!=(word/s Simple Condition (bool~) render_sine::$11 if((word) render_sine::sin_idx#1<(word) SIN_SIZE#0) goto render_sine::@1 Simple Condition (bool~) wrap_y::$0 if((signed word) wrap_y::y#4>=(byte/word/signed word/dword/signed dword) 200) goto wrap_y::@2 Simple Condition (bool~) wrap_y::$1 if((signed word) wrap_y::y#6<(byte/signed byte/word/signed word/dword/signed dword) 0) goto wrap_y::@5 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) PROCPORT_DDR#0 = ((byte*))0 Constant (const byte) PROCPORT_DDR_MEMORY_MASK#0 = 7 Constant (const byte*) PROCPORT#0 = ((byte*))1 @@ -4771,7 +4771,7 @@ Constant (const signed word) sin16s_gen2::max#0 = 320 Constant (const word) render_sine::xpos#0 = 0 Constant (const word) render_sine::sin_idx#0 = 0 Constant (const word) render_sine::xpos#2 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const signed word) sin16s_gen2::ampl#0 = sin16s_gen2::max#0-sin16s_gen2::min#0 Constant (const dword) div32u16u::dividend#0 = PI2_u4f28#0 Constant (const byte) main::$0 = VIC_BMM#0|VIC_DEN#0 @@ -4783,7 +4783,7 @@ Constant (const byte) fill::val#0 = WHITE#0 Constant (const byte*) bitmap_init::bitmap#0 = BITMAP#0 Constant (const signed word*) sin16s_gen2::sintab#1 = sin#0 Constant (const word) sin16s_gen2::wavelength#0 = SIN_SIZE#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#2 = >1 @@ -4794,7 +4794,7 @@ Constant (const byte) main::$1 = main::$0|VIC_RSEL#0 Constant (const word) main::vicSelectGfxBank1_toDd001_$0#0 = ((word))main::vicSelectGfxBank1_gfx#0 Constant (const word) main::toD0181_$0#0 = ((word))main::toD0181_screen#0 Constant (const word) main::toD0181_$4#0 = ((word))main::toD0181_gfx#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) divr16u::divisor#0 = div32u16u::divisor#0 Constant (const word) divr16u::divisor#1 = div32u16u::divisor#0 Constant (const word) mul16u::b#0 = ((word))mul16s::b#0 @@ -4804,26 +4804,26 @@ Constant (const byte/word/dword) main::$2 = main::$1|3 Constant (const byte) main::vicSelectGfxBank1_toDd001_$1#0 = >main::vicSelectGfxBank1_toDd001_$0#0 Constant (const word) main::toD0181_$1#0 = main::toD0181_$0#0&16383 Constant (const byte) main::toD0181_$5#0 = >main::toD0181_$4#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::vicSelectGfxBank1_toDd001_$2#0 = main::vicSelectGfxBank1_toDd001_$1#0>>6 Constant (const word) main::toD0181_$2#0 = main::toD0181_$1#0<<2 Constant (const byte) main::toD0181_$6#0 = main::toD0181_$5#0>>2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::vicSelectGfxBank1_toDd001_return#0 = 3^main::vicSelectGfxBank1_toDd001_$2#0 Constant (const byte) main::toD0181_$3#0 = >main::toD0181_$2#0 Constant (const byte) main::toD0181_$7#0 = main::toD0181_$6#0&15 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) main::toD0181_return#0 = main::toD0181_$3#0|main::toD0181_$7#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if((const signed word) mul16s::b#0>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s::@2 if() condition always true - replacing block destination if(true) goto main::@2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Fixing inline constructor with bitmap_clear::$3 ← *(bitmap_plot_yhi#0 + 0) w= *(bitmap_plot_ylo#0 + 0) Fixing inline constructor with bitmap_plot::$3 ← *(bitmap_plot_yhi#0 + bitmap_plot::y#2) w= *(bitmap_plot_ylo#0 + bitmap_plot::y#2) Fixing inline constructor with div32u16u::$4 ← div32u16u::quotient_hi#0 dw= div32u16u::quotient_lo#0 -Succesful SSA optimization Pass2FixInlineConstructors +Successful SSA optimization Pass2FixInlineConstructors Eliminating unused constant (const word) rem16u#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating Noop Cast (word) mul16u::a#1 ← ((word)) (signed word) mul16s::a#0 Eliminating Noop Cast (word~) mul16s::$13 ← ((word)) (signed word) mul16s::a#0 Eliminating Noop Cast (signed word~) sin16s_gen2::$7 ← ((signed word)) (word~) sin16s_gen2::$6 @@ -4831,14 +4831,14 @@ Eliminating Noop Cast (signed word) sin16s::sinx#0 ← ((signed word)) (word) si Eliminating Noop Cast (signed word~) sin16s::$20 ← ((signed word)) (word) sin16s::usinx#1 Eliminating Noop Cast (byte*) bitmap_clear::bitmap#0 ← ((byte*)) (word~) bitmap_clear::$3 Eliminating Noop Cast (byte*) bitmap_plot::plotter#0 ← ((byte*)) (word~) bitmap_plot::$3 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Eliminating variable (word~) mul16s::$12 from unused block mul16s::@4 Eliminating variable (word~) mul16s::$17 from unused block mul16s::@4 Eliminating variable (dword) mul16s::m#2 from unused block mul16s::@4 Removing PHI-reference to removed block (mul16s::@4) in block mul16s::@2 Removing unused block mul16s::@4 Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value divr16u::i#1 ← ++ divr16u::i#2 to ++ Resolved ranged comparison value if(divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 to (byte/signed byte/word/signed word/dword/signed dword) 16 Resolved ranged next value bitmap_init::x#1 ← ++ bitmap_init::x#2 to ++ @@ -4859,13 +4859,13 @@ Culled Empty Block (label) main::toD0181_@return Culled Empty Block (label) main::@13 Culled Empty Block (label) main::@1 Culled Empty Block (label) @32 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (dword) div32u16u::return#0 = (dword~) div32u16u::$4 Alias (dword) mul16s::m#4 = (dword) mul16s::m#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Consolidated array index constant in *(bitmap_plot_yhi#0+0) Consolidated array index constant in *(bitmap_plot_ylo#0+0) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 @@ -4952,12 +4952,11 @@ Constant inlined mulu16_sel::v2#2 = (dword/signed dword) 65536/(byte/signed byte Constant inlined main::vicSelectGfxBank1_gfx#0 = (const byte*) SCREEN#0 Constant inlined bitmap_init::y#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined div32u16u::divisor#0 = (const word) SIN_SIZE#0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Identical Phi Values (word) divr16u::divisor#6 (const word) SIN_SIZE#0 -Succesful SSA optimization Pass2IdenticalPhiElimination +Successful SSA optimization Pass2IdenticalPhiElimination Simplifying constant plus zero bitmap_plot_yhi#0+0 Simplifying constant plus zero bitmap_plot_ylo#0+0 -Block Sequence Planned @begin @28 @31 @end main main::vicSelectGfxBank1 main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_@1 main::@7 main::toD0181 main::@8 main::@9 main::@10 main::@11 main::@12 main::@2 render_sine render_sine::@1 render_sine::@5 render_sine::@6 render_sine::@7 render_sine::@8 render_sine::@3 render_sine::@2 render_sine::@return bitmap_plot bitmap_plot::@return wrap_y wrap_y::@1 wrap_y::@4 wrap_y::@6 wrap_y::@return wrap_y::@5 wrap_y::@2 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_init bitmap_init::@1 bitmap_init::@5 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return fill fill::@1 fill::@return Added new block during phi lifting render_sine::@9(between render_sine::@2 and render_sine::@1) Added new block during phi lifting render_sine::@10(between render_sine::@8 and render_sine::@2) Added new block during phi lifting wrap_y::@14(between wrap_y::@1 and wrap_y::@4) @@ -4978,7 +4977,6 @@ Added new block during phi lifting bitmap_init::@10(between bitmap_init::@1 and Added new block during phi lifting bitmap_init::@11(between bitmap_init::@4 and bitmap_init::@3) Added new block during phi lifting bitmap_init::@12(between bitmap_init::@3 and bitmap_init::@4) Added new block during phi lifting fill::@3(between fill::@1 and fill::@1) -Block Sequence Planned @begin @28 @31 @end main main::vicSelectGfxBank1 main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_@1 main::@7 main::toD0181 main::@8 main::@9 main::@10 main::@11 main::@12 main::@2 render_sine render_sine::@1 render_sine::@5 render_sine::@6 render_sine::@7 render_sine::@8 render_sine::@3 render_sine::@2 render_sine::@return render_sine::@9 render_sine::@10 bitmap_plot bitmap_plot::@return wrap_y wrap_y::@1 wrap_y::@14 wrap_y::@4 wrap_y::@6 wrap_y::@return wrap_y::@5 wrap_y::@2 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return sin16s_gen2::@6 mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16s::@7 mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 mul16u::@10 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return sin16s::@15 sin16s::@14 sin16s::@13 mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9 bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_clear::@5 bitmap_clear::@6 bitmap_init bitmap_init::@1 bitmap_init::@5 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return bitmap_init::@11 bitmap_init::@12 bitmap_init::@9 bitmap_init::@10 fill fill::@1 fill::@return fill::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @31 Adding NOP phi() at start of @end @@ -5134,7 +5132,6 @@ Culled Empty Block (label) bitmap_init::@11 Culled Empty Block (label) bitmap_init::@12 Culled Empty Block (label) bitmap_init::@9 Culled Empty Block (label) fill::@3 -Block Sequence Planned @begin @28 @31 @end main main::vicSelectGfxBank1 main::vicSelectGfxBank1_toDd001 main::vicSelectGfxBank1_@1 main::@7 main::toD0181 main::@8 main::@9 main::@10 main::@11 main::@12 main::@2 render_sine render_sine::@1 render_sine::@5 render_sine::@6 render_sine::@7 render_sine::@8 render_sine::@2 render_sine::@return render_sine::@10 bitmap_plot bitmap_plot::@return wrap_y wrap_y::@1 wrap_y::@4 wrap_y::@6 wrap_y::@return wrap_y::@5 wrap_y::@2 sin16s_gen2 sin16s_gen2::@3 sin16s_gen2::@1 sin16s_gen2::@4 sin16s_gen2::@5 sin16s_gen2::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return sin16s::@15 mulu16_sel mulu16_sel::@2 mulu16_sel::@return div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return bitmap_clear bitmap_clear::@1 bitmap_clear::@2 bitmap_clear::@3 bitmap_clear::@return bitmap_init bitmap_init::@1 bitmap_init::@2 bitmap_init::@3 bitmap_init::@7 bitmap_init::@4 bitmap_init::@return bitmap_init::@10 fill fill::@1 fill::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @31 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinus-basic.log b/src/test/java/dk/camelot64/kickc/test/ref/sinus-basic.log index b961fedd7..2c6d91589 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinus-basic.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinus-basic.log @@ -1923,9 +1923,9 @@ Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#3 (byte*) print_l Alias (byte*) print_char_cursor#12 = (byte*) print_char_cursor#26 (byte*) print_char_cursor#27 (byte*) print_char_cursor#13 Alias (byte*) print_char_cursor#14 = (byte*) print_char_cursor#28 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) print_char_cursor#15 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) print_line_cursor#12 (byte*) print_line_cursor#13 Redundant Phi (byte*) print_char_cursor#29 (byte*) print_char_cursor#11 Redundant Phi (byte*) print_char_cursor#15 (byte*) print_char_cursor#29 @@ -1944,10 +1944,10 @@ Redundant Phi (byte*) print_line_cursor#10 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#12 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#14 (byte*) print_char_cursor#12 Redundant Phi (byte*) print_line_cursor#11 (byte*) print_line_cursor#10 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) print_ln::$1 if((byte*) print_line_cursor#1<(byte*) print_char_cursor#10) goto print_ln::@1 Simple Condition (bool~) main::$15 if((byte) main::i#1!=rangelast(1,25)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) print_char_cursor#0 = ((byte*))1024 Constant (const byte[]) print_hextab#0 = $0 Constant (const byte*) memLo#0 = ((byte*))254 @@ -1958,21 +1958,21 @@ Constant (const byte*) main::f_2pi#0 = ((byte*))58085 Constant (const word) setFAC::w#0 = 1275 Constant (const byte) main::i#0 = 1 Constant (const word) setFAC::w#2 = 25 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) setMEMtoFAC::mem#0 = main::f_127#0 Constant (const byte*) mulFACbyMEM::mem#0 = main::f_2pi#0 Constant (const byte*) setMEMtoFAC::mem#1 = main::f_i#0 Constant (const byte*) divMEMbyFAC::mem#0 = main::f_i#0 Constant (const byte*) mulFACbyMEM::mem#1 = main::f_127#0 Constant (const byte*) addMEMtoFAC::mem#0 = main::f_127#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) prepareMEM::mem#2 = addMEMtoFAC::mem#0 Constant (const byte*) prepareMEM::mem#3 = divMEMbyFAC::mem#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Fixing inline constructor with getFAC::$0 ← *(memHi#0) w= *(memLo#0) -Succesful SSA optimization Pass2FixInlineConstructors +Successful SSA optimization Pass2FixInlineConstructors Eliminating Noop Cast (byte*) prepareMEM::mem#0 ← ((byte*)) (word) setFAC::w#3 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Resolved ranged next value main::i#1 ← ++ main::i#10 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(1,25)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 26 Culled Empty Block (label) print_ln::@2 @@ -1982,9 +1982,9 @@ Culled Empty Block (label) print_byte::@2 Culled Empty Block (label) @14 Culled Empty Block (label) main::@5 Culled Empty Block (label) @43 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (word) getFAC::return#0 = (word~) getFAC::$0 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte*) prepareMEM::mem#2 Inlining constant with var siblings (const byte*) prepareMEM::mem#3 @@ -2009,11 +2009,9 @@ Constant inlined mulFACbyMEM::mem#0 = (const byte*) main::f_2pi#0 Constant inlined setMEMtoFAC::mem#0 = (const byte[]) main::f_127#0 Constant inlined mulFACbyMEM::mem#1 = (const byte[]) main::f_127#0 Constant inlined setFAC::w#0 = (word/signed word/dword/signed dword) 1275 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @42 @end main main::@3 main::@4 main::@1 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@return print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return divFACby10 divFACby10::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@17(between main::@16 and main::@1) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) -Block Sequence Planned @begin @42 @end main main::@3 main::@4 main::@1 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@return main::@17 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return divFACby10 divFACby10::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @42 Adding NOP phi() at start of @end @@ -2086,7 +2084,6 @@ Coalesced [87] prepareMEM::mem#6 ← prepareMEM::mem#4 Coalesced [104] prepareMEM::mem#8 ← prepareMEM::mem#1 Coalesced down to 9 phi equivalence classes Culled Empty Block (label) print_ln::@3 -Block Sequence Planned @begin @42 @end main main::@3 main::@4 main::@1 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@return main::@17 print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return divFACby10 divFACby10::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @42 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinus-sprites.log b/src/test/java/dk/camelot64/kickc/test/ref/sinus-sprites.log index 3fcb1ed22..e4620adb2 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinus-sprites.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinus-sprites.log @@ -4228,7 +4228,7 @@ Inversing boolean not (bool~) anim::$17 ← (byte) sin_idx_x#3 < (byte) sinlen_x Inversing boolean not (bool~) anim::$19 ← (byte) sin_idx_y#3 < (byte) sinlen_y#0 from (bool~) anim::$18 ← (byte) sin_idx_y#3 >= (byte) sinlen_y#0 Inversing boolean not (bool~) gen_chargen_sprite::$5 ← (byte~) gen_chargen_sprite::$3 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) gen_chargen_sprite::$4 ← (byte~) gen_chargen_sprite::$3 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) gen_chargen_sprite::$9 ← (byte) gen_chargen_sprite::s_gen_cnt#1 != (byte/signed byte/word/signed word/dword/signed dword) 8 from (bool~) gen_chargen_sprite::$8 ← (byte) gen_chargen_sprite::s_gen_cnt#1 == (byte/signed byte/word/signed word/dword/signed dword) 8 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Not aliassing identity: progress_cursor#44 progress_cursor#44 Not aliassing identity: progress_idx#44 progress_idx#44 Alias (byte*) prepareMEM::mem#0 = (byte*~) setFAC::$0 @@ -4344,7 +4344,7 @@ Alias (byte*) progress_cursor#14 = (byte*) progress_cursor#28 Alias (byte) progress_idx#15 = (byte) progress_idx#29 Alias (byte) sin_idx_x#12 = (byte) sin_idx_x#6 Alias (byte) sin_idx_y#12 = (byte) sin_idx_y#6 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: progress_cursor#1 progress_cursor#1 Not aliassing identity: progress_idx#1 progress_idx#1 Not aliassing identity: progress_cursor#31 progress_cursor#31 @@ -4370,7 +4370,7 @@ Alias (byte) gen_chargen_sprite::bits#3 = (byte) gen_chargen_sprite::bits#5 Alias (byte) gen_chargen_sprite::x#2 = (byte) gen_chargen_sprite::x#4 Alias (byte) gen_chargen_sprite::y#3 = (byte) gen_chargen_sprite::y#6 Alias (byte*) gen_chargen_sprite::chargen#2 = (byte*) gen_chargen_sprite::chargen#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: progress_cursor#1 progress_cursor#1 Not aliassing identity: progress_idx#1 progress_idx#1 Not aliassing identity: progress_cursor#31 progress_cursor#31 @@ -4394,7 +4394,7 @@ Self Phi Eliminated (byte*) gen_chargen_sprite::chargen#2 Self Phi Eliminated (byte*) gen_sintab::f_2pi#1 Self Phi Eliminated (byte) gen_sintab::length#11 Self Phi Eliminated (byte*) gen_sintab::sintab#10 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) progress_cursor#29 (byte*) SCREEN#0 Redundant Phi (byte) progress_idx#30 (byte) progress_idx#35 Redundant Phi (byte) sin_idx_x#23 (byte) sin_idx_x#16 @@ -4440,10 +4440,10 @@ Redundant Phi (byte*) progress_cursor#14 (byte*) progress_cursor#1 Redundant Phi (byte) progress_idx#15 (byte) progress_idx#1 Redundant Phi (byte) sin_idx_x#12 (byte) sin_idx_x#0 Redundant Phi (byte) sin_idx_y#12 (byte) sin_idx_y#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte) progress_idx#54 (byte) progress_idx#23 Redundant Phi (byte*) progress_cursor#54 (byte*) progress_cursor#22 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if(*((byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@2 Simple Condition (bool~) init::$2 if((byte) init::i#1!=rangelast(0,39)) goto init::@1 Simple Condition (bool~) clear_screen::$1 if((byte*) clear_screen::sc#1<(byte*~) clear_screen::$0) goto clear_screen::@1 @@ -4461,7 +4461,7 @@ Simple Condition (bool~) gen_chargen_sprite::$10 if((byte) gen_chargen_sprite::b Simple Condition (bool~) gen_chargen_sprite::$12 if((byte) gen_chargen_sprite::x#1!=rangelast(0,7)) goto gen_chargen_sprite::@2 Simple Condition (bool~) gen_chargen_sprite::$14 if((byte) gen_chargen_sprite::y#1!=rangelast(0,7)) goto gen_chargen_sprite::@1 Simple Condition (bool~) gen_sintab::$26 if((byte) gen_sintab::i#1<(byte) gen_sintab::length#10) goto gen_sintab::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) PROCPORT#0 = ((byte*))1 Constant (const byte*) CHARGEN#0 = ((byte*))53248 Constant (const byte*) SPRITES_XPOS#0 = ((byte*))53248 @@ -4521,7 +4521,7 @@ Constant (const byte[]) gen_sintab::f_amp#0 = { 0, 0, 0, 0, 0 } Constant (const byte*) gen_sintab::f_2pi#0 = ((byte*))58085 Constant (const word) setFAC::w#2 = 2 Constant (const byte) gen_sintab::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) progress_init::line#0 = SCREEN#0 Constant (const byte*) gen_sintab::sintab#0 = sintab_x#0 Constant (const byte) gen_sintab::length#0 = sinlen_x#0 @@ -4544,23 +4544,23 @@ Constant (const byte*) setMEMtoFAC::mem#4 = gen_sintab::f_i#0 Constant (const byte*) divMEMbyFAC::mem#1 = gen_sintab::f_i#0 Constant (const byte*) mulFACbyMEM::mem#1 = gen_sintab::f_amp#0 Constant (const byte*) addMEMtoFAC::mem#1 = gen_sintab::f_min#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) place_sprites::spr_id#0 = ((byte))place_sprites::$1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in assignment *(COLS#0+40 + init::$1) Consolidated array index constant in *(progress_inc::progress_chars#0+8) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination if(true) goto main::@1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Fixing inline constructor with getFAC::$0 ← *(memHi#0) w= *(memLo#0) -Succesful SSA optimization Pass2FixInlineConstructors +Successful SSA optimization Pass2FixInlineConstructors Inferred type updated to byte in (byte/signed word/word/dword/signed dword~) init::$1 ← (byte) init::i#2 Eliminating unused constant (const byte) progress_idx#35 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating Noop Cast (byte*) prepareMEM::mem#0 ← ((byte*)) (word) setFAC::w#5 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value init::i#1 ← ++ init::i#2 to ++ Resolved ranged comparison value if(init::i#1!=rangelast(0,39)) goto init::@1 to (byte/signed byte/word/signed word/dword/signed dword) 40 Resolved ranged next value anim::j#1 ← ++ anim::j#2 to ++ @@ -4586,20 +4586,20 @@ Culled Empty Block (label) @47 Culled Empty Block (label) @49 Culled Empty Block (label) gen_sintab::@13 Culled Empty Block (label) @55 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (word) getFAC::return#0 = (word~) getFAC::$0 Alias (byte) init::i#2 = (byte~) init::$1 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) gen_chargen_sprite::y#10 Self Phi Eliminated (byte*) gen_chargen_sprite::chargen#7 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) gen_chargen_sprite::y#10 (byte) gen_chargen_sprite::y#2 Redundant Phi (byte*) gen_chargen_sprite::chargen#7 (byte*) gen_chargen_sprite::chargen#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Self Phi Eliminated (byte*) gen_chargen_sprite::chargen#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) gen_chargen_sprite::chargen#1 (byte*) gen_chargen_sprite::chargen#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const word) setFAC::w#2 Inlining constant with var siblings (const byte*) setMEMtoFAC::mem#0 @@ -4706,15 +4706,14 @@ Constant inlined sin_idx_y#4 = (byte/signed byte/word/signed word/dword/signed d Constant inlined progress_idx#11 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined gen_sprites::$3 = (const byte[]) gen_sprites::cml#0 Constant inlined anim::j2#0 = (byte/signed byte/word/signed word/dword/signed dword) 12 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Identical Phi Values (byte*) addMEMtoFAC::mem#2 (const byte[]) gen_sintab::f_min#0 -Succesful SSA optimization Pass2IdenticalPhiElimination +Successful SSA optimization Pass2IdenticalPhiElimination Constant (const byte*) prepareMEM::mem#2 = gen_sintab::f_min#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Inlining constant with var siblings (const byte*) prepareMEM::mem#2 Constant inlined prepareMEM::mem#2 = (const byte[]) gen_sintab::f_min#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @54 @end main main::@2 main::@3 anim anim::@1 anim::@6 anim::@2 anim::@7 anim::@3 anim::@8 anim::@9 anim::@4 anim::@10 anim::@5 anim::@return init init::@1 init::@2 init::@4 init::@5 init::@6 init::@7 init::@8 init::@9 init::@return clear_screen clear_screen::@1 clear_screen::@return gen_sintab gen_sintab::@3 gen_sintab::@4 gen_sintab::@5 gen_sintab::@6 gen_sintab::@7 gen_sintab::@8 gen_sintab::@9 gen_sintab::@10 gen_sintab::@11 gen_sintab::@12 gen_sintab::@1 gen_sintab::@14 gen_sintab::@15 gen_sintab::@16 gen_sintab::@17 gen_sintab::@18 gen_sintab::@19 gen_sintab::@20 gen_sintab::@21 gen_sintab::@22 gen_sintab::@23 gen_sintab::@return progress_inc progress_inc::@2 progress_inc::@1 progress_inc::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return subFACfromARG subFACfromARG::@return setARGtoFAC setARGtoFAC::@return progress_init progress_init::@return gen_sprites gen_sprites::@1 gen_sprites::@3 gen_sprites::@return gen_chargen_sprite gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite::@7 gen_chargen_sprite::@5 gen_chargen_sprite::@8 gen_chargen_sprite::@9 gen_chargen_sprite::@10 gen_chargen_sprite::@return place_sprites place_sprites::@1 place_sprites::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting anim::@11(between anim::@3 and anim::@1) Added new block during phi lifting anim::@12(between anim::@1 and anim::@2) Added new block during phi lifting anim::@13(between anim::@2 and anim::@3) @@ -4730,7 +4729,6 @@ Added new block during phi lifting gen_chargen_sprite::@12(between gen_chargen_s Added new block during phi lifting gen_chargen_sprite::@13(between gen_chargen_sprite::@5 and gen_chargen_sprite::@4) Added new block during phi lifting gen_chargen_sprite::@14(between gen_chargen_sprite::@4 and gen_chargen_sprite::@5) Added new block during phi lifting place_sprites::@3(between place_sprites::@1 and place_sprites::@1) -Block Sequence Planned @begin @54 @end main main::@2 main::@3 anim anim::@1 anim::@6 anim::@2 anim::@7 anim::@3 anim::@8 anim::@9 anim::@4 anim::@10 anim::@5 anim::@return anim::@15 anim::@14 anim::@11 anim::@13 anim::@12 init init::@1 init::@2 init::@4 init::@5 init::@6 init::@7 init::@8 init::@9 init::@return init::@11 clear_screen clear_screen::@1 clear_screen::@return clear_screen::@3 gen_sintab gen_sintab::@3 gen_sintab::@4 gen_sintab::@5 gen_sintab::@6 gen_sintab::@7 gen_sintab::@8 gen_sintab::@9 gen_sintab::@10 gen_sintab::@11 gen_sintab::@12 gen_sintab::@1 gen_sintab::@14 gen_sintab::@15 gen_sintab::@16 gen_sintab::@17 gen_sintab::@18 gen_sintab::@19 gen_sintab::@20 gen_sintab::@21 gen_sintab::@22 gen_sintab::@23 gen_sintab::@return gen_sintab::@24 progress_inc progress_inc::@2 progress_inc::@1 progress_inc::@return progress_inc::@3 getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return subFACfromARG subFACfromARG::@return setARGtoFAC setARGtoFAC::@return progress_init progress_init::@return gen_sprites gen_sprites::@1 gen_sprites::@3 gen_sprites::@return gen_sprites::@4 gen_chargen_sprite gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite::@7 gen_chargen_sprite::@5 gen_chargen_sprite::@8 gen_chargen_sprite::@9 gen_chargen_sprite::@10 gen_chargen_sprite::@return gen_chargen_sprite::@11 gen_chargen_sprite::@12 gen_chargen_sprite::@13 gen_chargen_sprite::@14 place_sprites place_sprites::@1 place_sprites::@return place_sprites::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @54 Adding NOP phi() at start of @end @@ -4907,7 +4905,6 @@ Culled Empty Block (label) gen_chargen_sprite::@12 Culled Empty Block (label) gen_chargen_sprite::@13 Culled Empty Block (label) gen_chargen_sprite::@14 Culled Empty Block (label) place_sprites::@3 -Block Sequence Planned @begin @54 @end main main::@2 main::@3 anim anim::@1 anim::@6 anim::@2 anim::@7 anim::@3 anim::@8 anim::@4 anim::@5 anim::@return anim::@15 anim::@14 init init::@1 init::@2 init::@4 init::@5 init::@6 init::@7 init::@8 init::@9 init::@return clear_screen clear_screen::@1 clear_screen::@return gen_sintab gen_sintab::@3 gen_sintab::@4 gen_sintab::@5 gen_sintab::@6 gen_sintab::@7 gen_sintab::@8 gen_sintab::@9 gen_sintab::@10 gen_sintab::@11 gen_sintab::@12 gen_sintab::@1 gen_sintab::@14 gen_sintab::@15 gen_sintab::@16 gen_sintab::@17 gen_sintab::@18 gen_sintab::@19 gen_sintab::@20 gen_sintab::@21 gen_sintab::@22 gen_sintab::@23 gen_sintab::@return progress_inc progress_inc::@2 progress_inc::@1 progress_inc::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return subFACfromARG subFACfromARG::@return setARGtoFAC setARGtoFAC::@return progress_init progress_init::@return gen_sprites gen_sprites::@1 gen_sprites::@3 gen_sprites::@return gen_chargen_sprite gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite::@7 gen_chargen_sprite::@5 gen_chargen_sprite::@8 gen_chargen_sprite::@9 gen_chargen_sprite::@10 gen_chargen_sprite::@return place_sprites place_sprites::@1 place_sprites::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @54 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16.log b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16.log index d5b34a592..89e86c069 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen16.log @@ -3554,7 +3554,7 @@ Inversing boolean not (bool~) sin16s::$4 ← (dword) sin16s::x#4 < (dword) PI_HA Inversing boolean not (bool~) sin16s::$19 ← (byte) sin16s::isUpper#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) sin16s::$18 ← (byte) sin16s::isUpper#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) print_sword::$1 ← (signed word) print_sword::w#2 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) print_sword::$0 ← (signed word) print_sword::w#2 < (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) main::$3 ← (signed word) main::sw#0 < (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) main::$2 ← (signed word) main::sw#0 >= (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#7 Alias (word) divr16u::dividend#0 = (word~) divr16u::$6 (word) divr16u::dividend#8 Alias (word) divr16u::quotient#1 = (word~) divr16u::$7 (word) divr16u::quotient#4 @@ -3673,7 +3673,7 @@ Alias (byte*) print_char_cursor#19 = (byte*) print_char_cursor#39 Alias (word) rem16u#10 = (word) rem16u#19 Alias (byte*) print_line_cursor#5 = (byte*) print_line_cursor#9 Alias (byte*) print_char_cursor#21 = (byte*) print_char_cursor#41 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (word) divr16u::dividend#3 = (word) divr16u::dividend#4 Alias (word) divr16u::quotient#3 = (word) divr16u::quotient#6 Alias (word) divr16u::divisor#2 = (word) divr16u::divisor#4 (word) divr16u::divisor#7 @@ -3687,7 +3687,7 @@ Alias (signed word*) main::st1#2 = (signed word*) main::st1#3 Alias (word) main::wavelength#1 = (word) main::wavelength#4 Alias (word) rem16u#18 = (word) rem16u#32 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#17 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (word) divr16u::divisor#2 Self Phi Eliminated (dword) sin16s_gen::step#1 Self Phi Eliminated (word) sin16s_gen::wavelength#2 @@ -3696,7 +3696,7 @@ Self Phi Eliminated (byte*) print_line_cursor#1 Self Phi Eliminated (word) main::wavelength#1 Self Phi Eliminated (word) rem16u#18 Self Phi Eliminated (byte*) print_line_cursor#11 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (word) divr16u::divisor#2 (word) divr16u::divisor#6 Redundant Phi (dword) div32u16u::dividend#1 (dword) div32u16u::dividend#0 Redundant Phi (word) div32u16u::divisor#1 (word) div32u16u::divisor#0 @@ -3741,7 +3741,7 @@ Redundant Phi (byte*) print_char_cursor#19 (byte*) print_char_cursor#2 Redundant Phi (word) rem16u#10 (word) rem16u#18 Redundant Phi (byte*) print_line_cursor#5 (byte*) print_line_cursor#11 Redundant Phi (byte*) print_char_cursor#21 (byte*) print_char_cursor#18 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) divr16u::$4 if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 Simple Condition (bool~) divr16u::$9 if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 Simple Condition (bool~) divr16u::$11 if((byte) divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 @@ -3756,7 +3756,7 @@ Simple Condition (bool~) print_sword::$1 if((signed word) print_sword::w#1>=(byt Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 Simple Condition (bool~) main::$3 if((signed word) main::sw#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 Simple Condition (bool~) main::$10 if((signed word*) main::st1#1<(signed word*~) main::$9) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const word) rem16u#0 = 0 Constant (const word) divr16u::quotient#0 = 0 Constant (const byte) divr16u::i#0 = 0 @@ -3782,30 +3782,30 @@ Constant (const word) main::wavelength#0 = 120 Constant (const signed word[120]) main::sintab1#0 = { fill( 120, 0) } Constant (const byte*) print_str::str#1 = main::str Constant (const byte*) print_str::str#2 = main::str1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const dword) div32u16u::dividend#0 = PI2_u4f28#0 Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000 Constant (const signed word*) sin16s_gen::sintab#1 = main::sintab1#0 Constant (const word) sin16s_gen::wavelength#0 = main::wavelength#0 Constant (const word/signed dword/dword) main::$8 = main::wavelength#0*2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) divr16u::dividend#1 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#2 = = (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) print_sword::$0 ← (signed word) print_sword::w#2 < (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) main::$5 ← (signed word) main::sw#0 < (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) main::$4 ← (signed word) main::sw#0 >= (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#7 Alias (word) divr16u::dividend#0 = (word~) divr16u::$6 (word) divr16u::dividend#8 Alias (word) divr16u::quotient#1 = (word~) divr16u::$7 (word) divr16u::quotient#4 @@ -4328,7 +4328,7 @@ Alias (byte*) print_char_cursor#19 = (byte*) print_char_cursor#39 Alias (word) rem16u#13 = (word) rem16u#25 Alias (byte*) print_line_cursor#5 = (byte*) print_line_cursor#9 Alias (byte*) print_char_cursor#21 = (byte*) print_char_cursor#41 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (word) divr16u::dividend#3 = (word) divr16u::dividend#4 Alias (word) divr16u::quotient#3 = (word) divr16u::quotient#6 Alias (word) divr16u::divisor#2 = (word) divr16u::divisor#4 (word) divr16u::divisor#7 @@ -4344,7 +4344,7 @@ Alias (signed word*) main::st2#2 = (signed word*) main::st2#3 Alias (byte) main::i#2 = (byte) main::i#5 Alias (word) rem16u#12 = (word) rem16u#41 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#18 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (word) divr16u::divisor#2 Self Phi Eliminated (dword) sin16s_gen::step#1 Self Phi Eliminated (word) sin16s_gen::wavelength#2 @@ -4355,7 +4355,7 @@ Self Phi Eliminated (word) rem16u#21 Self Phi Eliminated (byte*) print_line_cursor#1 Self Phi Eliminated (word) rem16u#12 Self Phi Eliminated (byte*) print_line_cursor#11 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (word) divr16u::divisor#2 (word) divr16u::divisor#6 Redundant Phi (word) rem16u#15 (word) rem16u#1 Redundant Phi (word) rem16u#16 (word) rem16u#1 @@ -4405,7 +4405,7 @@ Redundant Phi (byte*) print_char_cursor#19 (byte*) print_char_cursor#2 Redundant Phi (word) rem16u#13 (word) rem16u#12 Redundant Phi (byte*) print_line_cursor#5 (byte*) print_line_cursor#11 Redundant Phi (byte*) print_char_cursor#21 (byte*) print_char_cursor#18 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) divr16u::$4 if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 Simple Condition (bool~) divr16u::$9 if((word) divr16u::rem#6<(word) divr16u::divisor#6) goto divr16u::@3 Simple Condition (bool~) divr16u::$11 if((byte) divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 @@ -4424,7 +4424,7 @@ Simple Condition (bool~) print_sword::$1 if((signed word) print_sword::w#1>=(byt Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 Simple Condition (bool~) main::$5 if((signed word) main::sw#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 Simple Condition (bool~) main::$11 if((byte) main::i#1!=rangelast(0,119)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const word) rem16u#0 = 0 Constant (const word) divr16u::quotient#0 = 0 Constant (const byte) divr16u::i#0 = 0 @@ -4464,7 +4464,7 @@ Constant (const signed word[120]) main::sintab2#0 = { fill( 120, 0) } Constant (const byte) main::i#0 = 0 Constant (const byte*) print_str::str#1 = main::str Constant (const byte*) print_str::str#2 = main::str1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const dword) div32u16u::dividend#0 = PI2_u4f28#0 Constant (const dword) div32u16u::dividend#1 = PI2_u4f28#0 Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 @@ -4473,22 +4473,22 @@ Constant (const signed word*) sin16s_gen::sintab#1 = main::sintab1#0 Constant (const word) sin16s_gen::wavelength#0 = main::wavelength#0 Constant (const signed word*) sin16s_genb::sintab#1 = main::sintab2#0 Constant (const word) sin16s_genb::wavelength#0 = main::wavelength#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) div32u16u::divisor#0 = sin16s_gen::wavelength#0 Constant (const word) div32u16u::divisor#1 = sin16s_genb::wavelength#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Fixing inline constructor with div32u16u::$4 ← div32u16u::quotient_hi#0 dw= div32u16u::quotient_lo#0 -Succesful SSA optimization Pass2FixInlineConstructors +Successful SSA optimization Pass2FixInlineConstructors Eliminating unused variable - keeping the phi block (word) rem16u#26 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const word) rem16u#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating Noop Cast (signed word) sin16s::sinx#0 ← ((signed word)) (word) sin16s::usinx#1 Eliminating Noop Cast (signed word~) sin16s::$20 ← ((signed word)) (word) sin16s::usinx#1 Eliminating Noop Cast (signed word) sin16sb::sinx#0 ← ((signed word)) (word) sin16sb::usinx#1 Eliminating Noop Cast (signed word~) sin16sb::$19 ← ((signed word)) (word) sin16sb::usinx#1 Eliminating Noop Cast (word) print_word::w#0 ← ((word)) (signed word) print_sword::w#3 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Resolved ranged next value divr16u::i#1 ← ++ divr16u::i#2 to ++ Resolved ranged comparison value if(divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 to (byte/signed byte/word/signed word/dword/signed dword) 16 Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ @@ -4505,9 +4505,9 @@ Culled Empty Block (label) print_cls::@2 Culled Empty Block (label) main::@7 Culled Empty Block (label) main::@10 Culled Empty Block (label) @38 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (dword) div32u16u::return#0 = (dword~) div32u16u::$4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 @@ -4583,15 +4583,15 @@ Constant inlined div32u16u::divisor#1 = (const word) main::wavelength#0 Constant inlined print_str::str#2 = (const string) main::str1 Constant inlined div32u16u::divisor#0 = (const word) main::wavelength#0 Constant inlined print_str::str#1 = (const string) main::str -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Identical Phi Values (dword) div32u16u::dividend#2 (const dword) PI2_u4f28#0 Identical Phi Values (word) div32u16u::divisor#2 (const word) main::wavelength#0 -Succesful SSA optimization Pass2IdenticalPhiElimination +Successful SSA optimization Pass2IdenticalPhiElimination Constant (const word) divr16u::dividend#1 = >PI2_u4f28#0 Constant (const word) divr16u::divisor#0 = main::wavelength#0 Constant (const word) divr16u::dividend#2 = (const dword) PI2_u4f28#0 Constant inlined divr16u::divisor#0 = (const word) main::wavelength#0 Constant inlined divr16u::dividend#2 = <(const dword) PI2_u4f28#0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Identical Phi Values (word) divr16u::divisor#6 (const word) main::wavelength#0 -Succesful SSA optimization Pass2IdenticalPhiElimination -Block Sequence Planned @begin @37 @end main main::@5 main::@6 main::@1 main::@3 main::@2 main::@8 main::@9 main::@return print_str print_str::@1 print_str::@return print_str::@2 print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_cls print_cls::@1 print_cls::@return sin16s_genb sin16s_genb::@3 sin16s_genb::@1 sin16s_genb::@4 sin16s_genb::@return sin16sb sin16sb::@4 sin16sb::@1 sin16sb::@5 sin16sb::@2 sin16sb::@8 sin16sb::@9 sin16sb::@10 sin16sb::@11 sin16sb::@12 sin16sb::@6 sin16sb::@3 sin16sb::@return mulu16_sel mulu16_sel::@2 mulu16_sel::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return sin16s_gen sin16s_gen::@3 sin16s_gen::@1 sin16s_gen::@4 sin16s_gen::@return sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return +Successful SSA optimization Pass2IdenticalPhiElimination Added new block during phi lifting main::@11(between main::@9 and main::@1) Added new block during phi lifting main::@12(between main::@1 and main::@2) Added new block during phi lifting print_sword::@5(between print_sword and print_sword::@1) @@ -4622,7 +4621,6 @@ Added new block during phi lifting sin16s::@13(between sin16s and sin16s::@1) Fixing phi predecessor for sin16s::isUpper#2 to new block ( sin16s -> sin16s::@13 ) during phi lifting. Added new block during phi lifting sin16s::@14(between sin16s::@1 and sin16s::@2) Added new block during phi lifting sin16s::@15(between sin16s::@12 and sin16s::@3) -Block Sequence Planned @begin @37 @end main main::@5 main::@6 main::@1 main::@3 main::@2 main::@8 main::@9 main::@return main::@11 main::@12 print_str print_str::@1 print_str::@return print_str::@2 print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_sword::@5 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_cls print_cls::@1 print_cls::@return print_cls::@3 sin16s_genb sin16s_genb::@3 sin16s_genb::@1 sin16s_genb::@4 sin16s_genb::@return sin16s_genb::@5 sin16sb sin16sb::@4 sin16sb::@1 sin16sb::@5 sin16sb::@2 sin16sb::@8 sin16sb::@9 sin16sb::@10 sin16sb::@11 sin16sb::@12 sin16sb::@6 sin16sb::@3 sin16sb::@return sin16sb::@15 sin16sb::@14 sin16sb::@13 mulu16_sel mulu16_sel::@2 mulu16_sel::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 mul16u::@10 div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9 sin16s_gen sin16s_gen::@3 sin16s_gen::@1 sin16s_gen::@4 sin16s_gen::@return sin16s_gen::@5 sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return sin16s::@15 sin16s::@14 sin16s::@13 Adding NOP phi() at start of @begin Adding NOP phi() at start of @37 Adding NOP phi() at start of @end @@ -4784,7 +4782,6 @@ Culled Empty Block (label) divr16u::@9 Culled Empty Block (label) sin16s_gen::@5 Culled Empty Block (label) sin16s::@14 Culled Empty Block (label) sin16s::@13 -Block Sequence Planned @begin @37 @end main main::@5 main::@6 main::@1 main::@3 main::@2 main::@8 main::@9 main::@return print_str print_str::@1 print_str::@return print_str::@2 print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_cls print_cls::@1 print_cls::@return sin16s_genb sin16s_genb::@3 sin16s_genb::@1 sin16s_genb::@4 sin16s_genb::@return sin16sb sin16sb::@4 sin16sb::@1 sin16sb::@5 sin16sb::@2 sin16sb::@8 sin16sb::@9 sin16sb::@10 sin16sb::@11 sin16sb::@12 sin16sb::@6 sin16sb::@3 sin16sb::@return sin16sb::@15 mulu16_sel mulu16_sel::@2 mulu16_sel::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 div32u16u div32u16u::@2 div32u16u::@3 div32u16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return sin16s_gen sin16s_gen::@3 sin16s_gen::@1 sin16s_gen::@4 sin16s_gen::@return sin16s sin16s::@4 sin16s::@1 sin16s::@5 sin16s::@2 sin16s::@8 sin16s::@9 sin16s::@10 sin16s::@11 sin16s::@12 sin16s::@6 sin16s::@3 sin16s::@return sin16s::@15 Adding NOP phi() at start of @begin Adding NOP phi() at start of @37 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.log b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.log index b6fe66574..3bfddc396 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8.log @@ -3417,7 +3417,7 @@ Inversing boolean not (bool~) sin8s::$17 ← (byte) sin8s::usinx#1 < (byte/word/ Inversing boolean not (bool~) sin8s::$20 ← (byte) sin8s::isUpper#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) sin8s::$19 ← (byte) sin8s::isUpper#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) print_sbyte::$1 ← (signed byte) print_sbyte::b#2 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#2 < (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) main::$5 ← (signed byte) main::sb#0 < (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) main::$4 ← (signed byte) main::sb#0 >= (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#6 Alias (word) divr16u::dividend#0 = (word~) divr16u::$6 (word) divr16u::dividend#7 Alias (word) divr16u::quotient#1 = (word~) divr16u::$7 (word) divr16u::quotient#4 @@ -3507,7 +3507,7 @@ Alias (byte*) print_line_cursor#17 = (byte*) print_line_cursor#19 (byte*) print_ Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#33 Alias (byte*) print_line_cursor#5 = (byte*) print_line_cursor#9 Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#35 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (word) divr16u::dividend#2 = (word) divr16u::dividend#3 Alias (word) divr16u::quotient#3 = (word) divr16u::quotient#6 Alias (word) divr16u::divisor#1 = (word) divr16u::divisor#3 (word) divr16u::divisor#6 @@ -3519,13 +3519,13 @@ Alias (byte) sin8s::isUpper#10 = (byte) sin8s::isUpper#3 (byte) sin8s::isUpper#2 Alias (signed byte) main::sb#0 = (signed byte) main::sb#1 Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#17 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (word) divr16u::divisor#1 Self Phi Eliminated (word) sin8s_gen::step#1 Self Phi Eliminated (word) sin8s_gen::wavelength#2 Self Phi Eliminated (byte*) print_line_cursor#1 Self Phi Eliminated (byte*) print_line_cursor#11 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (word) divr16u::rem#8 (word) divr16u::rem#3 Redundant Phi (word) divr16u::dividend#4 (word) divr16u::dividend#1 Redundant Phi (word) divr16u::divisor#5 (word) divr16u::divisor#0 @@ -3560,7 +3560,7 @@ Redundant Phi (byte*) print_char_cursor#15 (byte*) print_char_cursor#19 Redundant Phi (byte*) print_char_cursor#16 (byte*) print_char_cursor#19 Redundant Phi (byte*) print_line_cursor#5 (byte*) print_line_cursor#11 Redundant Phi (byte*) print_char_cursor#18 (byte*) print_char_cursor#15 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) divr16u::$4 if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 Simple Condition (bool~) divr16u::$9 if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 Simple Condition (bool~) divr16u::$11 if((byte) divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 @@ -3576,7 +3576,7 @@ Simple Condition (bool~) print_sbyte::$1 if((signed byte) print_sbyte::b#1>=(byt Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 Simple Condition (bool~) main::$5 if((signed byte) main::sb#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 Simple Condition (bool~) main::$9 if((byte) main::i#1!=rangelast(0,191)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const word) divr16u::quotient#0 = 0 Constant (const byte) divr16u::i#0 = 0 Constant (const word) divr16u::rem#3 = 0 @@ -3603,24 +3603,24 @@ Constant (const byte[]) main::sintabref#0 = { 0, 4, 8, 12, 17, 21, 25, 29, 33, 3 Constant (const byte) main::i#0 = 0 Constant (const byte*) print_str::str#1 = main::str Constant (const byte*) print_str::str#2 = main::str1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) div16u::dividend#0 = PI2_u4f12#0 Constant (const byte) mulu8_sel::v2#2 = sin8s::DIV_6#0 Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000 Constant (const signed byte*) sin8s_gen::sintab#1 = main::sintab2#0 Constant (const word) sin8s_gen::wavelength#0 = main::wavelength#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) divr16u::dividend#1 = div16u::dividend#0 Constant (const word) div16u::divisor#0 = sin8s_gen::wavelength#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) divr16u::divisor#0 = div16u::divisor#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Eliminating Noop Cast (signed byte) sin8s::sinx#0 ← ((signed byte)) (byte) sin8s::usinx#4 Eliminating Noop Cast (signed byte~) sin8s::$21 ← ((signed byte)) (byte) sin8s::usinx#4 Eliminating Noop Cast (byte) print_byte::b#0 ← ((byte)) (signed byte) print_sbyte::b#3 Eliminating Noop Cast (signed byte~) main::$2 ← ((signed byte)) *((const byte[]) main::sintabref#0 + (byte) main::i#2) -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Resolved ranged next value divr16u::i#1 ← ++ divr16u::i#2 to ++ Resolved ranged comparison value if(divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 to (byte/signed byte/word/signed word/dword/signed dword) 16 Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ @@ -3636,7 +3636,7 @@ Culled Empty Block (label) print_cls::@2 Culled Empty Block (label) main::@6 Culled Empty Block (label) main::@9 Culled Empty Block (label) @36 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 @@ -3686,8 +3686,7 @@ Constant inlined sin8s_gen::wavelength#0 = (const word) main::wavelength#0 Constant inlined print_str::str#2 = (const string) main::str1 Constant inlined print_str::str#1 = (const string) main::str Constant inlined sin8s_gen::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @35 @end main main::@5 main::@1 main::@3 main::@2 main::@7 main::@8 main::@return print_str print_str::@1 print_str::@return print_str::@2 print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_cls print_cls::@1 print_cls::@return sin8s_gen sin8s_gen::@3 sin8s_gen::@1 sin8s_gen::@4 sin8s_gen::@return sin8s sin8s::@5 sin8s::@1 sin8s::@6 sin8s::@2 sin8s::@10 sin8s::@11 sin8s::@12 sin8s::@13 sin8s::@14 sin8s::@7 sin8s::@3 sin8s::@8 sin8s::@4 sin8s::@return mulu8_sel mulu8_sel::@2 mulu8_sel::@return mul8u mul8u::@1 mul8u::@return mul8u::@2 mul8u::@7 mul8u::@4 div16u div16u::@2 div16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@10(between main::@8 and main::@1) Added new block during phi lifting main::@11(between main::@1 and main::@2) Added new block during phi lifting print_sbyte::@5(between print_sbyte and print_sbyte::@1) @@ -3702,7 +3701,6 @@ Added new block during phi lifting mul8u::@10(between mul8u::@2 and mul8u::@4) Added new block during phi lifting divr16u::@8(between divr16u::@3 and divr16u::@1) Added new block during phi lifting divr16u::@9(between divr16u::@1 and divr16u::@2) Added new block during phi lifting divr16u::@10(between divr16u::@2 and divr16u::@3) -Block Sequence Planned @begin @35 @end main main::@5 main::@1 main::@3 main::@2 main::@7 main::@8 main::@return main::@10 main::@11 print_str print_str::@1 print_str::@return print_str::@2 print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return print_sbyte::@5 print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_cls print_cls::@1 print_cls::@return print_cls::@3 sin8s_gen sin8s_gen::@3 sin8s_gen::@1 sin8s_gen::@4 sin8s_gen::@return sin8s_gen::@5 sin8s sin8s::@5 sin8s::@1 sin8s::@6 sin8s::@2 sin8s::@10 sin8s::@11 sin8s::@12 sin8s::@13 sin8s::@14 sin8s::@7 sin8s::@3 sin8s::@8 sin8s::@4 sin8s::@return sin8s::@18 sin8s::@17 sin8s::@16 sin8s::@15 mulu8_sel mulu8_sel::@2 mulu8_sel::@return mul8u mul8u::@1 mul8u::@return mul8u::@2 mul8u::@7 mul8u::@4 mul8u::@10 div16u div16u::@2 div16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9 Adding NOP phi() at start of @begin Adding NOP phi() at start of @35 Adding NOP phi() at start of @end @@ -3836,7 +3834,6 @@ Culled Empty Block (label) mul8u::@10 Culled Empty Block (label) divr16u::@8 Culled Empty Block (label) divr16u::@10 Culled Empty Block (label) divr16u::@9 -Block Sequence Planned @begin @35 @end main main::@5 main::@1 main::@3 main::@2 main::@7 main::@8 main::@return print_str print_str::@1 print_str::@return print_str::@2 print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_cls print_cls::@1 print_cls::@return sin8s_gen sin8s_gen::@3 sin8s_gen::@1 sin8s_gen::@4 sin8s_gen::@return sin8s sin8s::@5 sin8s::@1 sin8s::@6 sin8s::@2 sin8s::@10 sin8s::@11 sin8s::@12 sin8s::@13 sin8s::@14 sin8s::@7 sin8s::@3 sin8s::@8 sin8s::@4 sin8s::@return sin8s::@18 mulu8_sel mulu8_sel::@2 mulu8_sel::@return mul8u mul8u::@1 mul8u::@return mul8u::@2 mul8u::@7 mul8u::@4 div16u div16u::@2 div16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @35 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8b.log b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8b.log index 1dabbb698..c233f0772 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8b.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/sinusgen8b.log @@ -4099,7 +4099,7 @@ Inversing boolean not (bool~) sin8s::$17 ← (byte) sin8s::usinx#1 < (byte/word/ Inversing boolean not (bool~) sin8s::$20 ← (byte) sin8s::isUpper#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) sin8s::$19 ← (byte) sin8s::isUpper#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) print_sbyte::$1 ← (signed byte) print_sbyte::b#2 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#2 < (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) main::$10 ← (signed byte) main::sd#0 < (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) main::$9 ← (signed byte) main::sd#0 >= (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#8 Alias (word) divr16u::dividend#0 = (word~) divr16u::$6 (word) divr16u::dividend#9 Alias (word) divr16u::quotient#1 = (word~) divr16u::$7 (word) divr16u::quotient#4 @@ -4259,7 +4259,7 @@ Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#33 Alias (word) rem16u#15 = (word) rem16u#29 Alias (byte*) print_line_cursor#5 = (byte*) print_line_cursor#9 Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#35 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (word) divr16u::dividend#4 = (word) divr16u::dividend#5 Alias (word) divr16u::quotient#3 = (word) divr16u::quotient#6 Alias (word) divr16u::divisor#3 = (word) divr16u::divisor#5 (word) divr16u::divisor#8 @@ -4275,7 +4275,7 @@ Alias (signed byte) main::sd#0 = (signed byte) main::sd#1 Alias (byte) main::i#2 = (byte) main::i#3 Alias (word) rem16u#14 = (word) rem16u#46 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#18 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (word) divr16u::divisor#3 Self Phi Eliminated (dword) sin16s_gen::step#1 Self Phi Eliminated (word) sin16s_gen::wavelength#2 @@ -4286,7 +4286,7 @@ Self Phi Eliminated (word) rem16u#11 Self Phi Eliminated (byte*) print_line_cursor#1 Self Phi Eliminated (word) rem16u#14 Self Phi Eliminated (byte*) print_line_cursor#11 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (word) divr16u::divisor#3 (word) divr16u::divisor#7 Redundant Phi (word) div16u::dividend#1 (word) div16u::dividend#0 Redundant Phi (word) div16u::divisor#1 (word) div16u::divisor#0 @@ -4343,7 +4343,7 @@ Redundant Phi (byte*) print_char_cursor#16 (byte*) print_char_cursor#19 Redundant Phi (word) rem16u#15 (word) rem16u#14 Redundant Phi (byte*) print_line_cursor#5 (byte*) print_line_cursor#11 Redundant Phi (byte*) print_char_cursor#18 (byte*) print_char_cursor#15 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) divr16u::$4 if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 Simple Condition (bool~) divr16u::$9 if((word) divr16u::rem#7<(word) divr16u::divisor#7) goto divr16u::@3 Simple Condition (bool~) divr16u::$11 if((byte) divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 @@ -4365,7 +4365,7 @@ Simple Condition (bool~) print_sbyte::$1 if((signed byte) print_sbyte::b#1>=(byt Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 Simple Condition (bool~) main::$10 if((signed byte) main::sd#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@2 Simple Condition (bool~) main::$14 if((byte) main::i#1!=rangelast(0,191)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const word) rem16u#0 = 0 Constant (const word) divr16u::quotient#0 = 0 Constant (const byte) divr16u::i#0 = 0 @@ -4408,7 +4408,7 @@ Constant (const signed word[192]) main::sintabw#0 = { fill( 192, 0) } Constant (const byte) main::i#0 = 0 Constant (const byte*) print_str::str#1 = main::str Constant (const byte*) print_str::str#2 = main::str1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const dword) div32u16u::dividend#0 = PI2_u4f28#0 Constant (const word) div16u::dividend#0 = PI2_u4f12#0 Constant (const byte) mulu8_sel::v2#2 = sin8s::DIV_6#0 @@ -4418,28 +4418,28 @@ Constant (const signed byte*) sin8s_gen::sintab#1 = main::sintabb#0 Constant (const word) sin8s_gen::wavelength#0 = main::wavelength#0 Constant (const signed word*) sin16s_gen::sintab#1 = main::sintabw#0 Constant (const word) sin16s_gen::wavelength#0 = main::wavelength#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) divr16u::dividend#1 = div16u::dividend#0 Constant (const word) divr16u::dividend#2 = >div32u16u::dividend#0 Constant (const word) divr16u::dividend#3 = = (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) print_sword::$0 ← (signed word) print_sword::w#2 < (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) print_sbyte::$1 ← (signed byte) print_sbyte::b#2 >= (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) print_sbyte::$0 ← (signed byte) print_sbyte::b#2 < (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (word) divr16u::rem#0 = (word~) divr16u::$0 (word) divr16u::rem#6 Alias (word) divr16u::dividend#0 = (word~) divr16u::$6 (word) divr16u::dividend#7 Alias (word) divr16u::quotient#1 = (word~) divr16u::$7 (word) divr16u::quotient#4 @@ -4491,7 +4491,7 @@ Alias (byte*) print_char_cursor#43 = (byte*) print_char_cursor#87 (byte*) print_ Alias (word) sin8u_table::x#1 = (word~) sin8u_table::$32 Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#22 Alias (byte*) print_char_cursor#45 = (byte*) print_char_cursor#89 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (word) divr16u::dividend#2 = (word) divr16u::dividend#3 Alias (word) divr16u::quotient#3 = (word) divr16u::quotient#6 Alias (word) divr16u::divisor#1 = (word) divr16u::divisor#3 (word) divr16u::divisor#6 @@ -4500,7 +4500,7 @@ Alias (word) divr16u::dividend#0 = (word) divr16u::dividend#5 Alias (byte) mul8u::a#3 = (byte) mul8u::a#5 Alias (word) mul8u::mb#2 = (word) mul8u::mb#3 Alias (byte) sin8s::isUpper#10 = (byte) sin8s::isUpper#3 (byte) sin8s::isUpper#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (word) divr16u::divisor#1 Self Phi Eliminated (byte*) print_char_cursor#48 Self Phi Eliminated (byte*) print_line_cursor#15 @@ -4508,7 +4508,7 @@ Self Phi Eliminated (byte) sin8u_table::amplitude#10 Self Phi Eliminated (byte) sin8u_table::mid#12 Self Phi Eliminated (word) sin8u_table::step#10 Self Phi Eliminated (word) sin8u_table::tabsize#10 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (word) divr16u::rem#8 (word) divr16u::rem#3 Redundant Phi (word) divr16u::dividend#4 (word) divr16u::dividend#1 Redundant Phi (word) divr16u::divisor#5 (word) divr16u::divisor#0 @@ -4574,11 +4574,11 @@ Redundant Phi (byte*) print_line_cursor#10 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#43 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#11 (byte*) print_line_cursor#17 Redundant Phi (byte*) print_char_cursor#45 (byte*) print_char_cursor#22 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) print_char_cursor#91 (byte*) print_char_cursor#17 Redundant Phi (byte*) print_char_cursor#100 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#26 (byte*) print_line_cursor#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) divr16u::$4 if((byte~) divr16u::$2==(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16u::@2 Simple Condition (bool~) divr16u::$9 if((word) divr16u::rem#5<(word) divr16u::divisor#0) goto divr16u::@3 Simple Condition (bool~) divr16u::$11 if((byte) divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 @@ -4595,7 +4595,7 @@ Simple Condition (bool~) print_sword::$1 if((signed word) print_sword::w#1>=(byt Simple Condition (bool~) print_sbyte::$1 if((signed byte) print_sbyte::b#1>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sbyte::@1 Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 Simple Condition (bool~) sin8u_table::$33 if((word) sin8u_table::i#1<(word) sin8u_table::tabsize#0) goto sin8u_table::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const word) divr16u::quotient#0 = 0 Constant (const byte) divr16u::i#0 = 0 Constant (const word) divr16u::rem#3 = 0 @@ -4630,7 +4630,7 @@ Constant (const byte*) print_str::str#6 = sin8u_table::str5 Constant (const byte*) print_str::str#7 = sin8u_table::str6 Constant (const byte*) print_str::str#8 = sin8u_table::str7 Constant (const byte*) print_str::str#9 = sin8u_table::str8 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) mulu8_sel::v2#2 = sin8s::DIV_6#0 Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000 @@ -4641,31 +4641,31 @@ Constant (const word) sin8u_table::$1 = ((word))sin8u_table::min#0 Constant (const word) div16u::dividend#0 = PI2_u4f12#0 Constant (const byte) print_byte::b#3 = sin8u_table::min#0 Constant (const byte) print_byte::b#4 = sin8u_table::max#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) divr16u::dividend#1 = div16u::dividend#0 Constant (const word) sin8u_table::sum#0 = sin8u_table::$1+sin8u_table::max#0 Constant (const word) div16u::divisor#0 = sin8u_table::tabsize#0 Constant (const byte) print_byte::b#5 = sin8u_table::amplitude#0 Constant (const byte) mul8su::b#0 = sin8u_table::amplitude#0+1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) divr16u::divisor#0 = div16u::divisor#0 Constant (const byte) mul8u::b#0 = ((byte))mul8su::b#0 Constant (const byte) mul8su::$7 = ((byte))mul8su::b#0 Constant (const word) sin8u_table::$3 = sin8u_table::sum#0>>1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word/signed dword/dword) sin8u_table::$4 = sin8u_table::$3+1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) sin8u_table::mid#0 = ((byte))sin8u_table::$4 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) print_byte::b#6 = sin8u_table::mid#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Eliminating Noop Cast (byte) mul8u::a#1 ← ((byte)) (signed byte) mul8su::a#0 Eliminating Noop Cast (signed word) mul8su::return#0 ← ((signed word)) (word) mul8su::m#2 Eliminating Noop Cast (signed byte) sin8s::sinx#0 ← ((signed byte)) (byte) sin8s::usinx#4 Eliminating Noop Cast (signed byte~) sin8s::$21 ← ((signed byte)) (byte) sin8s::usinx#4 Eliminating Noop Cast (word) print_word::w#0 ← ((word)) (signed word) print_sword::w#3 Eliminating Noop Cast (byte) print_byte::b#0 ← ((byte)) (signed byte) print_sbyte::b#3 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Resolved ranged next value divr16u::i#1 ← ++ divr16u::i#2 to ++ Resolved ranged comparison value if(divr16u::i#1!=rangelast(0,15)) goto divr16u::@1 to (byte/signed byte/word/signed word/dword/signed dword) 16 Culled Empty Block (label) divr16u::@6 @@ -4682,7 +4682,7 @@ Culled Empty Block (label) print_cls::@2 Culled Empty Block (label) main::@2 Culled Empty Block (label) sin8u_table::@14 Culled Empty Block (label) @37 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const word) divr16u::quotient#0 Inlining constant with var siblings (const byte) divr16u::i#0 @@ -4762,8 +4762,7 @@ Constant inlined print_str::str#8 = (const string) sin8u_table::str7 Constant inlined print_str::str#7 = (const string) sin8u_table::str6 Constant inlined print_str::str#6 = (const string) sin8u_table::str5 Constant inlined print_str::str#5 = (const string) sin8u_table::str4 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @36 @end main main::@1 main::@return sin8u_table sin8u_table::@3 sin8u_table::@4 sin8u_table::@5 sin8u_table::@6 sin8u_table::@7 sin8u_table::@8 sin8u_table::@9 sin8u_table::@10 sin8u_table::@11 sin8u_table::@12 sin8u_table::@13 sin8u_table::@1 sin8u_table::@15 sin8u_table::@16 sin8u_table::@17 sin8u_table::@18 sin8u_table::@19 sin8u_table::@20 sin8u_table::@21 sin8u_table::@22 sin8u_table::@23 sin8u_table::@24 sin8u_table::@25 sin8u_table::@return print_ln print_ln::@1 print_ln::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return mul8su mul8su::@4 mul8su::@2 mul8su::@1 mul8su::@return mul8u mul8u::@1 mul8u::@return mul8u::@2 mul8u::@7 mul8u::@4 sin8s sin8s::@5 sin8s::@1 sin8s::@6 sin8s::@2 sin8s::@10 sin8s::@11 sin8s::@12 sin8s::@13 sin8s::@14 sin8s::@7 sin8s::@3 sin8s::@8 sin8s::@4 sin8s::@return mulu8_sel mulu8_sel::@2 mulu8_sel::@return div16u div16u::@2 div16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@return print_cls print_cls::@1 print_cls::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting sin8u_table::@26(between sin8u_table::@25 and sin8u_table::@1) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) Added new block during phi lifting print_sword::@5(between print_sword and print_sword::@1) @@ -4779,7 +4778,6 @@ Added new block during phi lifting divr16u::@8(between divr16u::@3 and divr16u:: Added new block during phi lifting divr16u::@9(between divr16u::@1 and divr16u::@2) Added new block during phi lifting divr16u::@10(between divr16u::@2 and divr16u::@3) Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) -Block Sequence Planned @begin @36 @end main main::@1 main::@return sin8u_table sin8u_table::@3 sin8u_table::@4 sin8u_table::@5 sin8u_table::@6 sin8u_table::@7 sin8u_table::@8 sin8u_table::@9 sin8u_table::@10 sin8u_table::@11 sin8u_table::@12 sin8u_table::@13 sin8u_table::@1 sin8u_table::@15 sin8u_table::@16 sin8u_table::@17 sin8u_table::@18 sin8u_table::@19 sin8u_table::@20 sin8u_table::@21 sin8u_table::@22 sin8u_table::@23 sin8u_table::@24 sin8u_table::@25 sin8u_table::@return sin8u_table::@26 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_sword::@5 print_word print_word::@1 print_word::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return print_sbyte::@5 mul8su mul8su::@4 mul8su::@2 mul8su::@1 mul8su::@return mul8su::@5 mul8u mul8u::@1 mul8u::@return mul8u::@2 mul8u::@7 mul8u::@4 mul8u::@10 sin8s sin8s::@5 sin8s::@1 sin8s::@6 sin8s::@2 sin8s::@10 sin8s::@11 sin8s::@12 sin8s::@13 sin8s::@14 sin8s::@7 sin8s::@3 sin8s::@8 sin8s::@4 sin8s::@return sin8s::@18 sin8s::@17 sin8s::@16 sin8s::@15 mulu8_sel mulu8_sel::@2 mulu8_sel::@return div16u div16u::@2 div16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9 print_cls print_cls::@1 print_cls::@return print_cls::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @36 Adding NOP phi() at start of @end @@ -4962,7 +4960,6 @@ Culled Empty Block (label) divr16u::@8 Culled Empty Block (label) divr16u::@10 Culled Empty Block (label) divr16u::@9 Culled Empty Block (label) print_cls::@3 -Block Sequence Planned @begin @36 @end main main::@1 main::@return sin8u_table sin8u_table::@3 sin8u_table::@4 sin8u_table::@5 sin8u_table::@6 sin8u_table::@7 sin8u_table::@8 sin8u_table::@9 sin8u_table::@10 sin8u_table::@11 sin8u_table::@12 sin8u_table::@13 sin8u_table::@1 sin8u_table::@15 sin8u_table::@16 sin8u_table::@17 sin8u_table::@18 sin8u_table::@19 sin8u_table::@20 sin8u_table::@21 sin8u_table::@22 sin8u_table::@23 sin8u_table::@24 sin8u_table::@25 sin8u_table::@return print_ln print_ln::@1 print_ln::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return mul8su mul8su::@4 mul8su::@2 mul8su::@1 mul8su::@return mul8u mul8u::@1 mul8u::@return mul8u::@2 mul8u::@7 mul8u::@4 sin8s sin8s::@5 sin8s::@1 sin8s::@6 sin8s::@2 sin8s::@10 sin8s::@11 sin8s::@12 sin8s::@13 sin8s::@14 sin8s::@7 sin8s::@3 sin8s::@8 sin8s::@4 sin8s::@return sin8s::@18 mulu8_sel mulu8_sel::@2 mulu8_sel::@return div16u div16u::@2 div16u::@return divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@return print_cls print_cls::@1 print_cls::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @36 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/summin.log b/src/test/java/dk/camelot64/kickc/test/ref/summin.log index 437a1c0c5..30b588ddf 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/summin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/summin.log @@ -210,7 +210,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) sum::return#0 = (byte) sum::return#5 Alias (byte*) screen#1 = (byte*) screen#3 (byte*) screen#4 (byte*) screen#2 Alias (byte) main::s1#0 = (byte~) main::$0 (byte) main::s1#2 (byte) main::s1#1 @@ -221,9 +221,9 @@ Alias (byte) main::s3#0 = (byte~) main::$2 Alias (byte) main::s4#0 = (byte~) main::$4 Alias (byte) sum::return#3 = (byte~) sum::$0 (byte) sum::return#8 (byte) sum::return#4 Alias (byte*) screen#0 = (byte*) screen#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Redundant Phi (byte*) screen#1 (byte*) screen#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte*) screen#0 = ((byte*))1024 Constant (const byte) sum::a#0 = 1 Constant (const byte) sum::b#0 = 2 @@ -231,7 +231,7 @@ Constant (const byte) sum::a#1 = 3 Constant (const byte) sum::b#1 = 4 Constant (const byte) sum::a#2 = 9 Constant (const byte) sum::b#2 = 13 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) sum::a#0 Inlining constant with var siblings (const byte) sum::b#0 @@ -245,9 +245,7 @@ Constant inlined sum::b#0 = (byte/signed byte/word/signed word/dword/signed dwor Constant inlined sum::a#1 = (byte/signed byte/word/signed word/dword/signed dword) 3 Constant inlined sum::b#2 = (byte/signed byte/word/signed word/dword/signed dword) 13 Constant inlined sum::a#0 = (byte/signed byte/word/signed word/dword/signed dword) 1 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@return sum sum::@return -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@return sum sum::@return +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -266,7 +264,6 @@ Propagating live ranges... Propagating live ranges... Created 2 initial phi equivalence classes Coalesced down to 2 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@return sum sum::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-address-of-param.log b/src/test/java/dk/camelot64/kickc/test/ref/test-address-of-param.log index 1e30d1761..6f13be6e7 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-address-of-param.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-address-of-param.log @@ -193,7 +193,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) setByte::ptr#0 = (byte*~) main::$0 Alias (byte) main::b2#0 = (byte) main::b2#1 (byte) main::b2#3 (byte) main::b2#2 Alias (byte) main::b3#0 = (byte) main::b3#3 (byte) main::b3#1 (byte) main::b3#2 @@ -201,7 +201,7 @@ Alias (byte) main::b1#0 = (byte) main::b1#3 (byte) main::b1#2 (byte) main::b1#1 Alias (byte*) main::SCREEN#0 = (byte*) main::SCREEN#3 (byte*) main::SCREEN#2 (byte*) main::SCREEN#1 Alias (byte*) setByte::ptr#1 = (byte*~) main::$2 Alias (byte*) setByte::ptr#2 = (byte*~) main::$4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Constant (const byte*) main::SCREEN#0 = ((byte*))1024 Constant (const byte*) setByte::ptr#0 = &main::b1#0 Constant (const byte) setByte::b#0 = 'c' @@ -209,11 +209,11 @@ Constant (const byte*) setByte::ptr#1 = &main::b2#0 Constant (const byte) setByte::b#1 = 'm' Constant (const byte*) setByte::ptr#2 = &main::b3#0 Constant (const byte) setByte::b#2 = 'l' -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::SCREEN#0+0) Consolidated array index constant in *(main::SCREEN#0+1) Consolidated array index constant in *(main::SCREEN#0+2) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte*) setByte::ptr#0 Inlining constant with var siblings (const byte) setByte::b#0 @@ -227,10 +227,8 @@ Constant inlined setByte::ptr#0 = &(byte) main::b1#0 Constant inlined setByte::b#2 = (byte) 'l' Constant inlined setByte::b#1 = (byte) 'm' Constant inlined setByte::b#0 = (byte) 'c' -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero main::SCREEN#0+0 -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@return setByte setByte::@return -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@return setByte setByte::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -250,7 +248,6 @@ Propagating live ranges... Propagating live ranges... Created 2 initial phi equivalence classes Coalesced down to 2 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@return setByte setByte::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-address-of.log b/src/test/java/dk/camelot64/kickc/test/ref/test-address-of.log index b55782b54..a5535c69b 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-address-of.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-address-of.log @@ -113,29 +113,27 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) main::bp#0 = (byte*~) main::$0 Alias (byte) main::c#0 = (byte/signed word/word/dword/signed dword~) main::$1 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::SCREEN#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::SCREEN#1 (byte*) main::SCREEN#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$2 if((byte) main::b#1!=rangelast(0,10)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = ((byte*))1024 Constant (const byte) main::b#0 = 0 Constant (const byte*) main::bp#0 = &main::b#2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::b#1 ← ++ main::b#2 to ++ Resolved ranged comparison value if(main::b#1!=rangelast(0,10)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 11 OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::b#0 Constant inlined main::b#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -150,7 +148,6 @@ Created 1 initial phi equivalence classes Coalesced [11] main::b#3 ← main::b#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.log b/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.log index 3c1b4a075..807ad90e0 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-comparisons.log @@ -2800,7 +2800,7 @@ Inversing boolean not (bool~) main::$55 ← (byte) main::a#34 != (byte) main::b# Inversing boolean not (bool~) main::$58 ← (byte) main::a#36 != (byte/signed byte/word/signed word/dword/signed dword) 55 from (bool~) main::$57 ← (byte) main::a#36 == (byte/signed byte/word/signed word/dword/signed dword) 55 Inversing boolean not (bool~) main::$61 ← (byte) main::a#38 != *((byte[5]) main::cs#0 + (byte) main::i#10) from (bool~) main::$60 ← (byte) main::a#38 == *((byte[5]) main::cs#0 + (byte) main::i#10) Inversing boolean not (bool~) main::$64 ← (byte) main::a#40 != (byte) main::a#40 from (bool~) main::$63 ← (byte) main::a#40 == (byte) main::a#40 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Not aliassing identity: print_line_cursor#32 print_line_cursor#32 Not aliassing identity: print_char_cursor#117 print_char_cursor#117 Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#39 (byte*) print_char_cursor#141 (byte*) print_screen#6 (byte*) print_line_cursor#33 (byte*) print_char_cursor#118 (byte*) print_screen#5 @@ -2940,7 +2940,7 @@ Alias (byte*) print_char_cursor#43 = (byte*) print_char_cursor#88 Alias (byte*) print_char_cursor#44 = (byte*) print_char_cursor#89 (byte*) print_char_cursor#90 (byte*) print_char_cursor#45 Alias (byte*) print_line_cursor#12 = (byte*) print_line_cursor#24 Alias (byte*) print_char_cursor#46 = (byte*) print_char_cursor#91 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: print_line_cursor#11 print_line_cursor#11 Not aliassing identity: print_char_cursor#117 print_char_cursor#117 Alias (byte) main::a#10 = (byte) main::a#3 (byte) main::a#2 (byte) main::a#45 (byte) main::a#46 (byte) main::a#11 (byte) main::a#13 (byte) main::a#15 (byte) main::a#17 (byte) main::a#19 (byte) main::a#21 (byte) main::a#23 (byte) main::a#25 (byte) main::a#27 (byte) main::a#29 (byte) main::a#31 (byte) main::a#33 (byte) main::a#35 (byte) main::a#37 (byte) main::a#39 (byte) main::a#41 @@ -2971,14 +2971,14 @@ Alias (byte*) print_line_cursor#21 = (byte*) print_line_cursor#78 (byte*) print_ Alias (byte*) print_char_cursor#114 = (byte*) print_char_cursor#138 Alias (byte*) print_char_cursor#115 = (byte*) print_char_cursor#139 Alias (byte*) print_char_cursor#116 = (byte*) print_char_cursor#140 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: print_line_cursor#11 print_line_cursor#11 Not aliassing identity: print_char_cursor#117 print_char_cursor#117 Self Phi Eliminated (byte*) print_char_cursor#49 Self Phi Eliminated (byte*) print_line_cursor#16 Self Phi Eliminated (byte*) print_line_cursor#11 Self Phi Eliminated (byte*) print_char_cursor#117 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) print_str::str#4 (byte*) print_str::str#1 Redundant Phi (byte*) print_char_cursor#119 (byte*) print_char_cursor#40 Redundant Phi (byte*) print_char_cursor#49 (byte*) print_char_cursor#93 @@ -3031,9 +3031,9 @@ Redundant Phi (byte*) print_char_cursor#43 (byte*) print_char_cursor#55 Redundant Phi (byte*) print_char_cursor#44 (byte*) print_char_cursor#55 Redundant Phi (byte*) print_line_cursor#12 (byte*) print_line_cursor#11 Redundant Phi (byte*) print_char_cursor#46 (byte*) print_char_cursor#117 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) print_char_cursor#93 (byte*) print_char_cursor#55 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) print_str::$0 if(*((byte*) print_str::str#2)!=(byte) '@') goto print_str::@2 Simple Condition (bool~) print_ln::$1 if((byte*) print_line_cursor#1<(byte*) print_char_cursor#55) goto print_ln::@1 Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 @@ -3058,7 +3058,7 @@ Simple Condition (bool~) main::$58 if((byte) main::a#10!=(byte/signed byte/word/ Simple Condition (bool~) main::$61 if((byte) main::a#10!=*((byte[5]) main::cs#0 + (byte) main::i#10)) goto main::@20 Simple Condition (bool~) main::$64 if((byte) main::a#10!=(byte) main::a#10) goto main::@21 Simple Condition (bool~) main::$68 if((byte) main::i#1!=rangelast(0,4)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) print_line_cursor#0 = ((byte*))1024 Constant (const byte[]) print_hextab#0 = $0 Constant (const byte) main::a#0 = 7 @@ -3131,14 +3131,14 @@ Constant (const byte[]) printu::op#19 = main::op19 Constant (const byte) main::r#39 = '+' Constant (const byte) print_char::ch#2 = ' ' Constant (const byte) print_char::ch#3 = ' ' -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@22 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value main::i#1 ← ++ main::i#10 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,4)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 5 Culled Empty Block (label) print_ln::@2 @@ -3148,7 +3148,7 @@ Culled Empty Block (label) print_cls::@2 Culled Empty Block (label) main::@45 Culled Empty Block (label) printu::@6 Culled Empty Block (label) @17 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) print_char::ch#2 Inlining constant with var siblings (const byte) print_char::ch#3 @@ -3294,12 +3294,10 @@ Constant inlined printu::op#15 = (const string) main::op15 Constant inlined main::r#24 = (byte) '+' Constant inlined printu::op#16 = (const string) main::op16 Constant inlined main::r#25 = (byte) '-' -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @16 @end main main::@1 main::@23 main::@2 main::@46 main::@24 main::@3 main::@47 main::@25 main::@4 main::@48 main::@26 main::@5 main::@49 main::@50 main::@27 main::@6 main::@51 main::@28 main::@7 main::@52 main::@29 main::@8 main::@53 main::@30 main::@9 main::@54 main::@55 main::@31 main::@10 main::@56 main::@32 main::@11 main::@57 main::@33 main::@12 main::@58 main::@34 main::@13 main::@59 main::@60 main::@35 main::@14 main::@61 main::@36 main::@15 main::@62 main::@37 main::@16 main::@63 main::@38 main::@17 main::@64 main::@65 main::@39 main::@18 main::@66 main::@40 main::@19 main::@67 main::@41 main::@20 main::@68 main::@42 main::@21 main::@69 main::@70 main::@22 print_ln print_ln::@1 print_ln::@return printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@71(between main::@70 and main::@1) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) -Block Sequence Planned @begin @16 @end main main::@1 main::@23 main::@2 main::@46 main::@24 main::@3 main::@47 main::@25 main::@4 main::@48 main::@26 main::@5 main::@49 main::@50 main::@27 main::@6 main::@51 main::@28 main::@7 main::@52 main::@29 main::@8 main::@53 main::@30 main::@9 main::@54 main::@55 main::@31 main::@10 main::@56 main::@32 main::@11 main::@57 main::@33 main::@12 main::@58 main::@34 main::@13 main::@59 main::@60 main::@35 main::@14 main::@61 main::@36 main::@15 main::@62 main::@37 main::@16 main::@63 main::@38 main::@17 main::@64 main::@65 main::@39 main::@18 main::@66 main::@40 main::@19 main::@67 main::@41 main::@20 main::@68 main::@42 main::@21 main::@69 main::@70 main::@22 main::@71 print_ln print_ln::@1 print_ln::@return print_ln::@3 printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @16 Adding NOP phi() at start of @end @@ -3480,7 +3478,6 @@ Coalesced [295] print_cls::sc#3 ← print_cls::sc#1 Coalesced down to 32 phi equivalence classes Culled Empty Block (label) print_ln::@3 Culled Empty Block (label) print_cls::@3 -Block Sequence Planned @begin @16 @end main main::@1 main::@23 main::@2 main::@46 main::@24 main::@3 main::@47 main::@25 main::@4 main::@48 main::@26 main::@5 main::@49 main::@50 main::@27 main::@6 main::@51 main::@28 main::@7 main::@52 main::@29 main::@8 main::@53 main::@30 main::@9 main::@54 main::@55 main::@31 main::@10 main::@56 main::@32 main::@11 main::@57 main::@33 main::@12 main::@58 main::@34 main::@13 main::@59 main::@60 main::@35 main::@14 main::@61 main::@36 main::@15 main::@62 main::@37 main::@16 main::@63 main::@38 main::@17 main::@64 main::@65 main::@39 main::@18 main::@66 main::@40 main::@19 main::@67 main::@41 main::@20 main::@68 main::@42 main::@21 main::@69 main::@70 main::@22 main::@71 print_ln print_ln::@1 print_ln::@return printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @16 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-division.log b/src/test/java/dk/camelot64/kickc/test/ref/test-division.log index f8daeb25b..a065ae6d6 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-division.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-division.log @@ -4178,7 +4178,7 @@ Inversing boolean not (bool~) divr8u::$3 ← (byte~) divr8u::$1 == (byte/signed Inversing boolean not (bool~) divr8u::$8 ← (byte) divr8u::rem#5 < (byte) divr8u::divisor#1 from (bool~) divr8u::$7 ← (byte) divr8u::rem#5 >= (byte) divr8u::divisor#1 Inversing boolean not (bool~) divr16u::$4 ← (byte~) divr16u::$2 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) divr16u::$3 ← (byte~) divr16u::$2 != (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) divr16u::$9 ← (word) divr16u::rem#6 < (word) divr16u::divisor#2 from (bool~) divr16u::$8 ← (word) divr16u::rem#6 >= (word) divr16u::divisor#2 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#66 (byte*) print_char_cursor#155 (byte*) print_screen#10 (byte*) print_line_cursor#61 (byte*) print_char_cursor#154 (byte*) print_screen#9 (byte*) print_line_cursor#56 (byte*) print_char_cursor#153 (byte*) print_screen#8 (byte*) print_line_cursor#51 (byte*) print_char_cursor#148 (byte*) print_screen#7 (byte*) print_line_cursor#50 (byte*) print_char_cursor#147 (byte*) print_screen#6 (byte*) print_line_cursor#45 (byte*) print_char_cursor#139 (byte*) print_screen#5 Alias (byte*) print_str::str#13 = (byte*) print_str::str#14 Alias (byte*) print_char_cursor#126 = (byte*) print_char_cursor#64 (byte*) print_char_cursor#65 (byte*) print_char_cursor#2 @@ -4399,7 +4399,7 @@ Alias (byte) rem8u#14 = (byte) rem8u#30 Alias (word) rem16u#16 = (word) rem16u#34 Alias (signed byte) rem8s#15 = (signed byte) rem8s#8 Alias (signed word) rem16s#10 = (signed word) rem16s#19 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte) divr8u::dividend#2 = (byte) divr8u::dividend#3 Alias (byte) divr8u::quotient#3 = (byte) divr8u::quotient#6 Alias (byte) divr8u::divisor#1 = (byte) divr8u::divisor#3 (byte) divr8u::divisor#6 @@ -4419,12 +4419,12 @@ Alias (word) rem16u#36 = (word) rem16u#46 (word) rem16u#60 Alias (word) divr16s::dividendu#3 = (word) divr16s::dividendu#4 Alias (word) divr16s::remu#3 = (word) divr16s::remu#4 Alias (word) rem16u#20 = (word) rem16u#23 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) print_char_cursor#66 Self Phi Eliminated (byte*) print_line_cursor#23 Self Phi Eliminated (byte) divr8u::divisor#1 Self Phi Eliminated (word) divr16u::divisor#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) print_char_cursor#66 (byte*) print_char_cursor#127 Redundant Phi (byte*) print_char_cursor#5 (byte*) print_char_cursor#12 Redundant Phi (byte*) print_char_cursor#6 (byte*) print_char_cursor#17 @@ -4546,7 +4546,7 @@ Redundant Phi (byte) rem8u#14 (byte) rem8u#23 Redundant Phi (word) rem16u#16 (word) rem16u#10 Redundant Phi (signed byte) rem8s#15 (signed byte) rem8s#10 Redundant Phi (signed word) rem16s#10 (signed word) rem16s#14 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) print_char_cursor#140 (byte*) print_char_cursor#17 Redundant Phi (byte*) print_char_cursor#127 (byte*) print_char_cursor#17 Redundant Phi (byte*) print_char_cursor#136 (byte*) print_line_cursor#1 @@ -4557,7 +4557,7 @@ Redundant Phi (byte*) print_line_cursor#43 (byte*) print_line_cursor#1 Redundant Phi (word) rem16u#43 (word) rem16u#1 Redundant Phi (byte*) print_char_cursor#138 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#44 (byte*) print_line_cursor#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) print_str::$0 if(*((byte*) print_str::str#13)!=(byte) '@') goto print_str::@2 Simple Condition (bool~) print_ln::$1 if((byte*) print_line_cursor#1<(byte*) print_char_cursor#17) goto print_ln::@1 Simple Condition (bool~) print_sword::$1 if((signed word) print_sword::w#5>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 @@ -4578,9 +4578,9 @@ Simple Condition (bool~) test_8u::$9 if((byte) test_8u::i#1!=rangelast(0,5)) got Simple Condition (bool~) test_16u::$10 if((byte) test_16u::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 12) goto test_16u::@1 Simple Condition (bool~) test_8s::$13 if((byte) test_8s::i#1!=rangelast(0,5)) goto test_8s::@1 Simple Condition (bool~) test_16s::$16 if((byte) test_16s::i#1!=(byte/signed byte/word/signed word/dword/signed dword) 12) goto test_16s::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Rewriting || if()-condition to two if()s (bool~) divr16s::$2 ← (bool~) divr16s::$0 || (bool~) divr16s::$1 -Succesful SSA optimization Pass2ConditionalAndOrRewriting +Successful SSA optimization Pass2ConditionalAndOrRewriting Constant (const byte*) print_line_cursor#0 = ((byte*))1024 Constant (const byte) print_char::ch#0 = '-' Constant (const byte) print_char::ch#1 = '-' @@ -4635,7 +4635,7 @@ Constant (const byte) test_16s::i#0 = 0 Constant (const byte*) print_str::str#10 = test_16s::str Constant (const byte*) print_str::str#11 = test_16s::str1 Constant (const byte*) print_str::str#12 = test_16s::str2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000 Constant (const bool) divr16s::$1 = divr16s::rem#0<0 @@ -4645,11 +4645,11 @@ Constant (const signed byte[]) test_8s::dividends#0 = { 127, test_8s::$0, test_8 Constant (const signed byte[]) test_8s::divisors#0 = { 5, 7, test_8s::$2, test_8s::$3, 17, 19 } Constant (const signed word[]) test_16s::dividends#0 = { 32767, 32767, test_16s::$0, test_16s::$1, 32767, test_16s::$2 } Constant (const signed word[]) test_16s::divisors#0 = { 5, test_16s::$3, 11, test_16s::$4, test_16s::$5, 19 } -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) divr16s::remu#1 = ((word))divr16s::$7 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always false - eliminating if((const bool) divr16s::$1) goto divr16s::@1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating unused variable - keeping the phi block (byte) rem8u#31 Eliminating unused variable - keeping the phi block (word) rem16u#40 Eliminating unused variable - keeping the phi block (signed byte) rem8s#18 @@ -4660,14 +4660,14 @@ Eliminating unused constant (const word) divr16s::dividendu#0 Eliminating unused constant (const word) divr16s::remu#0 Eliminating unused constant (const word) divr16s::divisoru#0 Eliminating unused constant (const bool) divr16s::$1 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating unused variable - keeping the phi block (byte) rem8u#36 Eliminating unused constant (const word) rem16u#0 Eliminating unused constant (const signed byte) rem8s#0 Eliminating unused constant (const signed word) rem16s#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const byte) rem8u#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating Noop Cast (word) print_word::w#0 ← ((word)) (signed word) print_sword::w#6 Eliminating Noop Cast (byte) print_byte::b#0 ← ((byte)) (signed byte) print_sbyte::b#6 Eliminating Noop Cast (byte) div8s::dividendu#1 ← ((byte)) (signed byte~) div8s::$2 @@ -4686,7 +4686,7 @@ Eliminating Noop Cast (signed word) rem16s#1 ← ((signed word)) (word) rem16u#1 Eliminating Noop Cast (signed word) divr16s::return#0 ← ((signed word)) (word) divr16s::resultu#0 Eliminating Noop Cast (signed word~) divr16s::$16 ← ((signed word)) (word) rem16u#1 Eliminating Noop Cast (signed word~) divr16s::$18 ← ((signed word)) (word) divr16s::resultu#0 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Resolved ranged next value divr8u::i#1 ← ++ divr8u::i#2 to ++ Resolved ranged comparison value if(divr8u::i#1!=rangelast(0,7)) goto divr8u::@1 to (byte/signed byte/word/signed word/dword/signed dword) 8 Resolved ranged next value divr16u::i#1 ← ++ divr16u::i#2 to ++ @@ -4715,9 +4715,9 @@ Culled Empty Block (label) divr16s::@5 Culled Empty Block (label) main::@5 Culled Empty Block (label) @28 Culled Empty Block (label) divr16s::@16 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Simple Condition (bool~) divr16s::$0 if((signed word) divr16s::dividend#0<(byte/signed byte/word/signed word/dword/signed dword) 0) goto divr16s::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte*) print_str::str#1 Inlining constant with var siblings (const byte*) print_str::str#2 @@ -4796,8 +4796,7 @@ Constant inlined test_8s::i#0 = (byte/signed byte/word/signed word/dword/signed Constant inlined test_16s::$2 = -(word/signed word/dword/signed dword) 32767 Constant inlined print_str::str#5 = (const string) test_16u::str1 Constant inlined divr16s::remu#2 = ((word))(const signed word) divr16s::rem#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @27 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return print_ln print_ln::@1 print_ln::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@2 div16s::@return divr16s divr16s::@2 divr16s::@4 divr16s::@15 divr16s::@11 divr16s::@return divr16s::@3 divr16s::@1 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return div8s div8s::@2 div8s::@4 div8s::@15 div8s::@11 div8s::@return div8s::@3 div8s::@1 div8u div8u::@2 div8u::@return divr8u divr8u::@1 divr8u::@4 divr8u::@2 divr8u::@5 divr8u::@3 divr8u::@6 divr8u::@return test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return div16u div16u::@2 div16u::@return test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return print_cls print_cls::@1 print_cls::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting test_16s::@12(between test_16s::@11 and test_16s::@1) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) Added new block during phi lifting print_sword::@5(between print_sword and print_sword::@1) @@ -4821,7 +4820,6 @@ Added new block during phi lifting divr8u::@10(between divr8u::@2 and divr8u::@3 Added new block during phi lifting test_16u::@12(between test_16u::@11 and test_16u::@1) Added new block during phi lifting test_8u::@12(between test_8u::@11 and test_8u::@1) Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) -Block Sequence Planned @begin @27 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return test_16s::@12 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_sword::@5 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@2 div16s::@return divr16s divr16s::@17 divr16s::@2 divr16s::@18 divr16s::@4 divr16s::@15 divr16s::@11 divr16s::@return divr16s::@19 divr16s::@3 divr16s::@1 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return divr16u::@8 divr16u::@10 divr16u::@9 test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return test_8s::@12 print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return print_sbyte::@5 div8s div8s::@16 div8s::@2 div8s::@17 div8s::@4 div8s::@15 div8s::@11 div8s::@return div8s::@18 div8s::@3 div8s::@1 div8u div8u::@2 div8u::@return divr8u divr8u::@1 divr8u::@4 divr8u::@2 divr8u::@5 divr8u::@3 divr8u::@6 divr8u::@return divr8u::@8 divr8u::@10 divr8u::@9 test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_16u::@12 div16u div16u::@2 div16u::@return test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return test_8u::@12 print_cls print_cls::@1 print_cls::@return print_cls::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @27 Adding NOP phi() at start of @end @@ -5021,7 +5019,6 @@ Culled Empty Block (label) divr8u::@10 Culled Empty Block (label) divr8u::@9 Culled Empty Block (label) test_16u::@12 Culled Empty Block (label) print_cls::@3 -Block Sequence Planned @begin @27 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return print_ln print_ln::@1 print_ln::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@2 div16s::@return divr16s divr16s::@17 divr16s::@2 divr16s::@18 divr16s::@4 divr16s::@15 divr16s::@11 divr16s::@return divr16s::@19 divr16s::@3 divr16s::@1 divr16u divr16u::@1 divr16u::@4 divr16u::@2 divr16u::@5 divr16u::@3 divr16u::@6 divr16u::@return test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return div8s div8s::@16 div8s::@2 div8s::@17 div8s::@4 div8s::@15 div8s::@11 div8s::@return div8s::@18 div8s::@3 div8s::@1 div8u div8u::@2 div8u::@return divr8u divr8u::@1 divr8u::@4 divr8u::@2 divr8u::@5 divr8u::@3 divr8u::@6 divr8u::@return test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return div16u div16u::@2 div16u::@return test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return test_8u::@12 print_cls print_cls::@1 print_cls::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @27 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-interrupt-volatile.log b/src/test/java/dk/camelot64/kickc/test/ref/test-interrupt-volatile.log index 9f54866b6..438340d8a 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-interrupt-volatile.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-interrupt-volatile.log @@ -169,26 +169,24 @@ OPTIMIZING CONTROL FLOW GRAPH Alias (byte) col#2 = (byte) col#4 (byte) col#8 (byte) col#5 Alias (byte) col#0 = (byte) col#9 Alias (byte) col#3 = (byte) col#7 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Redundant Phi (byte) col#10 (byte) col#0 Redundant Phi (byte) col#6 (byte) col#0 Redundant Phi (byte) col#3 (byte) col#2 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const void()**) KERNEL_IRQ#0 = ((void()**))788 Constant (const byte*) BGCOL#0 = ((byte*))53280 Constant (const void()*) main::$0 = &irq -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Constant inlined main::$0 = &interrupt(KERNEL_MIN)(void()) irq() -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@1 main::@2 irq irq::@return -Block Sequence Planned @begin @2 @end main main::@1 main::@2 irq irq::@return +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @2 Adding NOP phi() at start of @end CALL GRAPH @@ -202,7 +200,6 @@ Created 1 initial phi equivalence classes Coalesced [5] col#11 ← col#0 Coalesced [8] col#12 ← col#1 Coalesced down to 1 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@1 main::@2 irq irq::@return Adding NOP phi() at start of @2 Adding NOP phi() at start of @end Propagating live ranges... diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-interrupt.log b/src/test/java/dk/camelot64/kickc/test/ref/test-interrupt.log index f3e6efb17..10b79291d 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-interrupt.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-interrupt.log @@ -147,23 +147,21 @@ interrupt(KERNEL_MIN)(void()) irq() OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Constant (const void()**) KERNEL_IRQ#0 = ((void()**))788 Constant (const byte*) BGCOL#0 = ((byte*))53280 Constant (const byte*) FGCOL#0 = ((byte*))53281 Constant (const void()*) main::$0 = &irq -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) main::@1 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Constant inlined main::$0 = &interrupt(KERNEL_MIN)(void()) irq() -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@2 irq irq::@return -Block Sequence Planned @begin @2 @end main main::@2 irq irq::@return +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -173,7 +171,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@2 irq irq::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-kasm.log b/src/test/java/dk/camelot64/kickc/test/ref/test-kasm.log index 84a26dbc5..22032b374 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-kasm.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-kasm.log @@ -99,16 +99,14 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks if() condition always true - replacing block destination if(true) goto main::@2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) main::@1 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH -Block Sequence Planned @begin @1 @end main main::@2 -Block Sequence Planned @begin @1 @end main main::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @end Adding NOP phi() at start of main @@ -118,7 +116,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @end Adding NOP phi() at start of main diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-keyboard-space.log b/src/test/java/dk/camelot64/kickc/test/ref/test-keyboard-space.log index 00fba96c5..36b59aa69 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-keyboard-space.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-keyboard-space.log @@ -1549,20 +1549,20 @@ OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@13 Culled Empty Block (label) main::@2 Culled Empty Block (label) @12 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) keyboard_matrix_read::return#0 = (byte) keyboard_matrix_read::row_pressed_bits#0 (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#3 (byte) keyboard_matrix_read::return#1 Alias (byte) keyboard_key_pressed::colidx#0 = (byte~) keyboard_key_pressed::$0 (byte) keyboard_key_pressed::colidx#1 Alias (byte) keyboard_key_pressed::rowidx#0 = (byte~) keyboard_key_pressed::$1 Alias (byte) keyboard_matrix_read::return#2 = (byte) keyboard_matrix_read::return#4 Alias (byte) keyboard_key_pressed::return#0 = (byte~) keyboard_key_pressed::$3 (byte) keyboard_key_pressed::return#3 (byte) keyboard_key_pressed::return#1 Alias (byte) keyboard_key_pressed::return#2 = (byte) keyboard_key_pressed::return#4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Redundant Phi (byte) keyboard_matrix_read::rowid#1 (byte) keyboard_matrix_read::rowid#0 Redundant Phi (byte) keyboard_key_pressed::key#1 (byte) keyboard_key_pressed::key#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if(*((byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@4 Simple Condition (bool~) main::$3 if((byte~) main::$2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@5 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) RASTER#0 = ((byte*))53266 Constant (const byte*) BGCOL#0 = ((byte*))53281 Constant (const byte*) CIA1_PORT_A#0 = ((byte*))56320 @@ -1574,30 +1574,28 @@ Constant (const byte) BLUE#0 = 6 Constant (const byte) KEY_SPACE#0 = 60 Constant (const byte[8]) keyboard_matrix_row_bitmask#0 = { 254, 253, 251, 247, 239, 223, 191, 127 } Constant (const byte[8]) keyboard_matrix_col_bitmask#0 = { 1, 2, 4, 8, 16, 32, 64, 128 } -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) keyboard_key_pressed::key#0 = KEY_SPACE#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) keyboard_key_pressed::colidx#0 = keyboard_key_pressed::key#0&7 Constant (const byte) keyboard_key_pressed::rowidx#0 = keyboard_key_pressed::key#0>>3 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) keyboard_matrix_read::rowid#0 = keyboard_key_pressed::rowidx#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(keyboard_matrix_row_bitmask#0+keyboard_matrix_read::rowid#0) Consolidated array index constant in *(keyboard_matrix_col_bitmask#0+keyboard_key_pressed::colidx#0) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination if(true) goto main::@4 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) @3 Culled Empty Block (label) main::@1 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Constant inlined keyboard_key_pressed::key#0 = (const byte) KEY_SPACE#0 Constant inlined keyboard_matrix_read::rowid#0 = (const byte) keyboard_key_pressed::rowidx#0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @11 @end main main::@4 main::@9 main::@14 main::@10 main::@5 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return keyboard_init keyboard_init::@return -Block Sequence Planned @begin @11 @end main main::@4 main::@9 main::@14 main::@10 main::@5 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return keyboard_init keyboard_init::@return +Successful SSA optimization Pass2ConstantInlining Adding NOP phi() at start of @begin Adding NOP phi() at start of @11 Adding NOP phi() at start of @end @@ -1614,7 +1612,6 @@ Propagating live ranges... Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @11 @end main main::@4 main::@9 main::@14 main::@10 main::@5 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return keyboard_init keyboard_init::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @11 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-keyboard.log b/src/test/java/dk/camelot64/kickc/test/ref/test-keyboard.log index dbf3cedaf..81a56c9e1 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-keyboard.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-keyboard.log @@ -2049,10 +2049,10 @@ OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) main::@27 Culled Empty Block (label) main::@3 Culled Empty Block (label) @12 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) main::$14 ← (byte) main::key#0 == (byte/signed byte/word/signed word/dword/signed dword) 63 from (bool~) main::$13 ← (byte) main::key#0 != (byte/signed byte/word/signed word/dword/signed dword) 63 Inversing boolean not (bool~) main::$17 ← (byte~) main::$15 == (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) main::$16 ← (byte~) main::$15 != (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) keyboard_matrix_read::return#0 = (byte) keyboard_matrix_read::row_pressed_bits#0 (byte~) keyboard_matrix_read::$0 (byte) keyboard_matrix_read::return#4 (byte) keyboard_matrix_read::return#1 Alias (byte) keyboard_key_pressed::colidx#0 = (byte~) keyboard_key_pressed::$0 (byte) keyboard_key_pressed::colidx#1 Alias (byte) keyboard_key_pressed::rowidx#0 = (byte~) keyboard_key_pressed::$1 @@ -2078,27 +2078,27 @@ Alias (byte*) main::screen#11 = (byte*) main::screen#15 (byte*) main::screen#18 Alias (byte) main::i#10 = (byte) main::i#8 (byte) main::i#9 (byte) main::i#5 (byte) main::i#7 (byte) main::i#3 Alias (byte) main::key#0 = (byte~) main::$12 (byte) main::key#1 Alias (byte) keyboard_key_pressed::return#2 = (byte) keyboard_key_pressed::return#4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte) main::row_pressed_bits#2 = (byte) main::row_pressed_bits#3 Alias (byte) main::col#2 = (byte) main::col#4 Alias (byte*) main::screen#10 = (byte*) main::screen#3 Alias (byte) main::row#3 = (byte) main::row#5 Alias (byte) main::ch#2 = (byte) main::ch#3 Alias (byte*) main::screen#11 = (byte*) main::screen#12 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: main::screen#11 main::screen#11 Self Phi Eliminated (byte*) main::screen#10 Self Phi Eliminated (byte) main::row#3 Self Phi Eliminated (byte*) main::screen#11 Self Phi Eliminated (byte*) main::screen#8 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) keyboard_key_pressed::key#1 (byte) keyboard_key_pressed::key#0 Redundant Phi (byte) keyboard_get_keycode::ch#1 (byte) keyboard_get_keycode::ch#0 Redundant Phi (byte*) main::screen#10 (byte*) main::screen#13 Redundant Phi (byte) main::row#3 (byte) main::row#2 Redundant Phi (byte*) main::screen#11 (byte*) main::screen#2 Redundant Phi (byte*) main::screen#8 (byte*) main::screen#11 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$1 if((byte*) main::sc#1<(word/signed word/dword/signed dword~) main::$0) goto main::@1 Simple Condition (bool~) main::$3 if(*((byte*) RASTER#0)!=(byte/word/signed word/dword/signed dword) 255) goto main::@5 Simple Condition (bool~) main::$6 if((byte~) main::$5!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@8 @@ -2108,7 +2108,7 @@ Simple Condition (bool~) main::$14 if((byte) main::key#0==(byte/signed byte/word Simple Condition (bool~) main::$18 if((byte) main::ch#1!=rangelast(0,63)) goto main::@10 Simple Condition (bool~) main::$17 if((byte~) main::$15==(byte/signed byte/word/signed word/dword/signed dword) 0) goto main::@12 Simple Condition (bool~) main::$19 if((byte) main::i#2<(byte/signed byte/word/signed word/dword/signed dword) 5) goto main::@13 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) RASTER#0 = ((byte*))53266 Constant (const byte*) CIA1_PORT_A#0 = ((byte*))56320 Constant (const byte*) CIA1_PORT_B#0 = ((byte*))56321 @@ -2173,13 +2173,13 @@ Constant (const byte) main::row#0 = 0 Constant (const byte) main::col#0 = 0 Constant (const byte) main::i#0 = 0 Constant (const byte) main::ch#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte[]) keyboard_char_keycodes#0 = { KEY_AT#0, KEY_A#0, KEY_B#0, KEY_C#0, KEY_D#0, KEY_E#0, KEY_F#0, KEY_G#0, KEY_H#0, KEY_I#0, KEY_J#0, KEY_K#0, KEY_L#0, KEY_M#0, KEY_N#0, KEY_O#0, KEY_P#0, KEY_Q#0, KEY_R#0, KEY_S#0, KEY_T#0, KEY_U#0, KEY_V#0, KEY_W#0, KEY_X#0, KEY_Y#0, KEY_Z#0, 63, KEY_POUND#0, 63, KEY_ARROW_UP#0, KEY_ARROW_LEFT#0, KEY_SPACE#0, 63, 63, 63, 63, 63, 63, 63, 63, 63, KEY_ASTERISK#0, KEY_PLUS#0, KEY_COMMA#0, KEY_MINUS#0, KEY_DOT#0, KEY_SLASH#0, KEY_0#0, KEY_1#0, KEY_2#0, KEY_3#0, KEY_4#0, KEY_5#0, KEY_6#0, KEY_7#0, KEY_8#0, KEY_9#0, KEY_COLON#0, KEY_SEMICOLON#0, 63, KEY_EQUALS#0, 63, 63 } -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@5 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value main::col#1 ← ++ main::col#2 to ++ Resolved ranged comparison value if(main::col#1!=rangelast(0,7)) goto main::@7 to (byte/signed byte/word/signed word/dword/signed dword) 8 Resolved ranged next value main::row#1 ← ++ main::row#2 to ++ @@ -2190,7 +2190,7 @@ Culled Empty Block (label) @3 Culled Empty Block (label) main::@2 Culled Empty Block (label) main::@17 Culled Empty Block (label) main::@12 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte*) main::sc#0 Inlining constant with var siblings (const byte*) main::screen#0 @@ -2205,8 +2205,7 @@ Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dwo Constant inlined main::sc#0 = ((byte*))(word/signed word/dword/signed dword) 1024 Constant inlined main::row#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::ch#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @11 @end main main::@1 main::@14 main::@5 main::@6 main::@28 main::@7 main::@18 main::@9 main::@20 main::@21 main::@10 main::@29 main::@22 main::@30 main::@23 main::@11 main::@13 main::@8 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return keyboard_get_keycode keyboard_get_keycode::@return keyboard_init keyboard_init::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@31(between main::@1 and main::@1) Added new block during phi lifting main::@32(between main::@20 and main::@6) Added new block during phi lifting main::@33(between main::@9 and main::@7) @@ -2215,7 +2214,6 @@ Added new block during phi lifting main::@35(between main::@30 and main::@11) Added new block during phi lifting main::@36(between main::@29 and main::@11) Added new block during phi lifting main::@37(between main::@11 and main::@13) Added new block during phi lifting main::@38(between main::@13 and main::@13) -Block Sequence Planned @begin @11 @end main main::@1 main::@14 main::@5 main::@6 main::@28 main::@7 main::@18 main::@9 main::@20 main::@21 main::@10 main::@29 main::@22 main::@30 main::@23 main::@11 main::@37 main::@13 main::@38 main::@34 main::@35 main::@36 main::@32 main::@33 main::@8 main::@31 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return keyboard_get_keycode keyboard_get_keycode::@return keyboard_init keyboard_init::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @11 Adding NOP phi() at start of @end @@ -2265,7 +2263,6 @@ Culled Empty Block (label) main::@36 Culled Empty Block (label) main::@32 Culled Empty Block (label) main::@33 Culled Empty Block (label) main::@31 -Block Sequence Planned @begin @11 @end main main::@1 main::@14 main::@5 main::@6 main::@28 main::@7 main::@18 main::@9 main::@20 main::@21 main::@10 main::@29 main::@22 main::@30 main::@23 main::@11 main::@13 main::@8 keyboard_key_pressed keyboard_key_pressed::@2 keyboard_key_pressed::@return keyboard_matrix_read keyboard_matrix_read::@return keyboard_get_keycode keyboard_get_keycode::@return keyboard_init keyboard_init::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @11 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-lohiconst.log b/src/test/java/dk/camelot64/kickc/test/ref/test-lohiconst.log index e14faf679..26dd267ad 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-lohiconst.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-lohiconst.log @@ -109,25 +109,25 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Constant (const dword) PI_u4f28#0 = 843314857 Constant (const byte*) main::SCREEN#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) main::$0 = >PI_u4f28#0 Constant (const word) main::$2 = >PI_u4f28#0 Constant (const word) main::$4 = main::$0 Constant (const byte) main::$3 = main::$4 Constant (const byte) main::$7 = >(const dword) PI_u4f28#0 Constant inlined main::$2 = >(const dword) PI_u4f28#0 @@ -137,10 +137,8 @@ Constant inlined main::$6 = <(const dword) PI_u4f28#0 Constant inlined main::$3 = <>(const dword) PI_u4f28#0 Constant inlined main::$4 = <(const dword) PI_u4f28#0 Constant inlined main::$7 = <<(const dword) PI_u4f28#0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero main::SCREEN#0+0 -Block Sequence Planned @begin @1 @end main main::@return -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -150,7 +148,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-lowhigh.log b/src/test/java/dk/camelot64/kickc/test/ref/test-lowhigh.log index f5adb1f7c..3f4a80bee 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-lowhigh.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-lowhigh.log @@ -1345,10 +1345,10 @@ Alias (byte*) print_line_cursor#14 = (byte*) print_line_cursor#6 (byte*) print_l Alias (byte*) print_char_cursor#30 = (byte*) print_char_cursor#61 (byte*) print_char_cursor#62 (byte*) print_char_cursor#31 Alias (byte*) print_line_cursor#16 = (byte*) print_line_cursor#8 Alias (byte*) print_char_cursor#32 = (byte*) print_char_cursor#63 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) print_char_cursor#33 Self Phi Eliminated (byte*) print_line_cursor#12 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) print_line_cursor#17 (byte*) print_line_cursor#19 Redundant Phi (byte*) print_char_cursor#64 (byte*) print_char_cursor#29 Redundant Phi (byte*) print_char_cursor#33 (byte*) print_char_cursor#64 @@ -1384,11 +1384,11 @@ Redundant Phi (byte*) print_line_cursor#14 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#30 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#16 (byte*) print_line_cursor#14 Redundant Phi (byte*) print_char_cursor#32 (byte*) print_char_cursor#30 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) print_ln::$1 if((byte*) print_line_cursor#1<(byte*) print_char_cursor#12) goto print_ln::@1 Simple Condition (bool~) print_cls::$1 if((byte*) print_cls::sc#1!=(byte*~) print_cls::$0) goto print_cls::@1 Simple Condition (bool~) main::$31 if((dword) main::dw#1!=(dword/signed dword) 305419920) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) print_line_cursor#0 = ((byte*))1024 Constant (const byte[]) print_hextab#0 = $0 Constant (const dword) main::dw#0 = 305419896 @@ -1398,10 +1398,10 @@ Constant (const byte) print_char::ch#4 = ' ' Constant (const byte) print_char::ch#5 = ' ' Constant (const byte) print_char::ch#6 = ' ' Constant (const byte) print_char::ch#7 = ' ' -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Culled Empty Block (label) print_ln::@2 Culled Empty Block (label) print_word::@2 Culled Empty Block (label) print_dword::@2 @@ -1410,7 +1410,7 @@ Culled Empty Block (label) print_byte::@2 Culled Empty Block (label) print_cls::@2 Culled Empty Block (label) main::@3 Culled Empty Block (label) @16 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) print_char::ch#2 Inlining constant with var siblings (const byte) print_char::ch#3 @@ -1432,12 +1432,10 @@ Constant inlined $0 = (const byte[]) print_hextab#0 Constant inlined print_char::ch#7 = (byte) ' ' Constant inlined main::dw#0 = (dword/signed dword) 305419896 Constant inlined print_char::ch#6 = (byte) ' ' -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @15 @end main main::@1 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@17 main::@return print_ln print_ln::@1 print_ln::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_word print_word::@1 print_word::@return print_dword print_dword::@1 print_dword::@return print_cls print_cls::@1 print_cls::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@18(between main::@17 and main::@1) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) -Block Sequence Planned @begin @15 @end main main::@1 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@17 main::@return main::@18 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_word print_word::@1 print_word::@return print_dword print_dword::@1 print_dword::@return print_cls print_cls::@1 print_cls::@return print_cls::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @15 Adding NOP phi() at start of @end @@ -1542,7 +1540,6 @@ Coalesced [110] print_cls::sc#3 ← print_cls::sc#1 Coalesced down to 7 phi equivalence classes Culled Empty Block (label) print_ln::@3 Culled Empty Block (label) print_cls::@3 -Block Sequence Planned @begin @15 @end main main::@1 main::@4 main::@5 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@17 main::@return main::@18 print_ln print_ln::@1 print_ln::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_word print_word::@1 print_word::@return print_dword print_dword::@1 print_dword::@return print_cls print_cls::@1 print_cls::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @15 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-16bit.log b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-16bit.log index 05c2312a7..5c4f839b6 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-16bit.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-16bit.log @@ -3968,7 +3968,7 @@ Inversing boolean not (bool~) mul16u_compare::$5 ← (dword) mul16u_compare::ms# Inversing boolean not (bool~) mul16u_compare::$7 ← (byte) mul16u_compare::ok#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) mul16u_compare::$6 ← (byte) mul16u_compare::ok#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 Inversing boolean not (bool~) mul16s_compare::$7 ← (signed dword) mul16s_compare::ms#1 == (signed dword) mul16s_compare::mn#0 from (bool~) mul16s_compare::$6 ← (signed dword) mul16s_compare::ms#1 != (signed dword) mul16s_compare::mn#0 Inversing boolean not (bool~) mul16s_compare::$9 ← (byte) mul16s_compare::ok#2 != (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) mul16s_compare::$8 ← (byte) mul16s_compare::ok#2 == (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Not aliassing identity: muls16u::b#1 muls16u::b#1 Not aliassing identity: muls16u::a#2 muls16u::a#2 Not aliassing identity: muls16s::b#1 muls16s::b#1 @@ -4140,7 +4140,7 @@ Alias (byte*) print_char_cursor#109 = (byte*) print_char_cursor#54 (byte*) print Alias (byte*) BGCOL#0 = (byte*) BGCOL#4 Alias (byte*) print_line_cursor#19 = (byte*) print_line_cursor#38 Alias (byte*) print_char_cursor#111 = (byte*) print_char_cursor#56 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: muls16u::b#1 muls16u::b#1 Not aliassing identity: muls16u::a#2 muls16u::a#2 Not aliassing identity: muls16s::b#1 muls16s::b#1 @@ -4173,7 +4173,7 @@ Alias (signed dword) mul16s_compare::mn#0 = (signed dword) mul16s_compare::mn#1 Alias (byte) mul16s_compare::i#2 = (byte) mul16s_compare::i#5 Alias (byte*) print_char_cursor#126 = (byte*) print_char_cursor#142 Alias (byte*) print_line_cursor#45 = (byte*) print_line_cursor#61 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: muls16u::b#1 muls16u::b#1 Not aliassing identity: muls16u::a#2 muls16u::a#2 Not aliassing identity: muls16s::b#1 muls16s::b#1 @@ -4194,7 +4194,7 @@ Self Phi Eliminated (byte*) BGCOL#10 Self Phi Eliminated (byte) mul16s_compare::i#2 Self Phi Eliminated (byte*) print_char_cursor#126 Self Phi Eliminated (byte*) print_line_cursor#45 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) print_char_cursor#59 (byte*) print_char_cursor#113 Redundant Phi (byte*) print_char_cursor#5 (byte*) print_char_cursor#10 Redundant Phi (byte*) print_char_cursor#6 (byte*) print_char_cursor#20 @@ -4288,14 +4288,14 @@ Redundant Phi (byte*) print_line_cursor#17 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#109 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#19 (byte*) print_line_cursor#26 Redundant Phi (byte*) print_char_cursor#111 (byte*) print_char_cursor#26 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) print_char_cursor#115 (byte*) print_char_cursor#112 Redundant Phi (byte*) print_char_cursor#119 (byte*) print_char_cursor#112 Redundant Phi (byte*) print_char_cursor#29 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#10 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#43 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#15 (byte*) print_line_cursor#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) print_str::$0 if(*((byte*) print_str::str#11)!=(byte) '@') goto print_str::@2 Simple Condition (bool~) print_ln::$1 if((byte*) print_line_cursor#1<(byte*) print_char_cursor#113) goto print_ln::@1 Simple Condition (bool~) print_sword::$1 if((signed word) print_sword::w#3>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 @@ -4323,7 +4323,7 @@ Simple Condition (bool~) mul16s_compare::$7 if((signed dword) mul16s_compare::ms Simple Condition (bool~) mul16s_compare::$9 if((byte) mul16s_compare::ok#2!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul16s_compare::@4 Simple Condition (bool~) mul16s_compare::$11 if((byte) mul16s_compare::j#1!=rangelast(0,15)) goto mul16s_compare::@2 Simple Condition (bool~) mul16s_compare::$12 if((byte) mul16s_compare::i#1!=rangelast(0,15)) goto mul16s_compare::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) print_line_cursor#0 = ((byte*))1024 Constant (const byte) print_char::ch#0 = '-' Constant (const byte) print_char::ch#1 = '-' @@ -4367,7 +4367,7 @@ Constant (const byte*) print_str::str#7 = mul16s_error::str Constant (const byte*) print_str::str#8 = mul16s_error::str1 Constant (const byte*) print_str::str#9 = mul16s_error::str2 Constant (const byte*) print_str::str#10 = mul16s_error::str3 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000 Constant (const byte*) mulf_init::sqr1_hi#0 = mulf_sqr1_hi#0+1 @@ -4381,13 +4381,13 @@ Constant (const byte*) mulf_init::$17 = mulf_sqr2_lo#0+511 Constant (const byte*) mulf_init::$18 = mulf_sqr1_lo#0+256 Constant (const byte*) mulf_init::$19 = mulf_sqr2_hi#0+511 Constant (const byte*) mulf_init::$20 = mulf_sqr1_hi#0+256 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Eliminating Noop Cast (word) print_word::w#0 ← ((word)) (signed word) print_sword::w#4 Eliminating Noop Cast (word) mul16u::a#1 ← ((word)) (signed word) mul16s::a#0 Eliminating Noop Cast (word) mul16u::b#0 ← ((word)) (signed word) mul16s::b#0 Eliminating Noop Cast (word~) mul16s::$7 ← ((word)) (signed word) mul16s::b#0 Eliminating Noop Cast (word~) mul16s::$13 ← ((word)) (signed word) mul16s::a#0 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Resolved ranged next value mul16u_compare::j#1 ← ++ mul16u_compare::j#2 to ++ Resolved ranged comparison value if(mul16u_compare::j#1!=rangelast(0,15)) goto mul16u_compare::@2 to (byte/signed byte/word/signed word/dword/signed dword) 16 Resolved ranged next value mul16u_compare::i#1 ← ++ mul16u_compare::i#9 to ++ @@ -4420,21 +4420,21 @@ Culled Empty Block (label) mul16s_compare::@12 Culled Empty Block (label) mul16s_compare::@14 Culled Empty Block (label) mul16s_error::@9 Culled Empty Block (label) @30 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Self Phi Eliminated (byte*) BGCOL#15 Self Phi Eliminated (byte*) print_char_cursor#150 Self Phi Eliminated (byte*) print_line_cursor#76 Self Phi Eliminated (byte*) BGCOL#17 Self Phi Eliminated (byte*) print_char_cursor#151 Self Phi Eliminated (byte*) print_line_cursor#78 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) BGCOL#15 (const byte*) BGCOL#0 Redundant Phi (byte*) print_char_cursor#150 (const byte*) print_line_cursor#0 Redundant Phi (byte*) print_line_cursor#76 (const byte*) print_line_cursor#0 Redundant Phi (byte*) BGCOL#17 (const byte*) BGCOL#0 Redundant Phi (byte*) print_char_cursor#151 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#78 (byte*) print_line_cursor#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte*) print_str::str#1 Inlining constant with var siblings (const byte*) print_str::str#2 @@ -4529,8 +4529,7 @@ Constant inlined print_cls::sc#0 = ((byte*))(word/signed word/dword/signed dword Constant inlined mulf_init::$8 = (const byte[512]) mulf_sqr1_lo#0+(word/signed word/dword/signed dword) 512 Constant inlined print_char::ch#1 = (byte) '-' Constant inlined print_char::ch#0 = (byte) '-' -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @29 @end main main::@1 main::@2 main::@3 main::@return mul16s_compare mul16s_compare::@1 mul16s_compare::@2 mul16s_compare::@10 mul16s_compare::@11 mul16s_compare::@5 mul16s_compare::@3 mul16s_compare::@6 mul16s_compare::@return mul16s_compare::@4 mul16s_compare::@8 mul16s_compare::@9 mul16s_compare::@13 print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 mul16s_error mul16s_error::@1 mul16s_error::@2 mul16s_error::@3 mul16s_error::@4 mul16s_error::@5 mul16s_error::@6 mul16s_error::@7 mul16s_error::@8 mul16s_error::@return print_sdword print_sdword::@2 print_sdword::@4 print_sdword::@1 print_sdword::@return print_dword print_dword::@1 print_dword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@4 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 muls16s muls16s::@6 muls16s::@3 muls16s::@4 muls16s::@return muls16s::@5 mul16u_compare mul16u_compare::@1 mul16u_compare::@2 mul16u_compare::@10 mul16u_compare::@11 mul16u_compare::@5 mul16u_compare::@3 mul16u_compare::@6 mul16u_compare::@return mul16u_compare::@4 mul16u_compare::@8 mul16u_compare::@9 mul16u_compare::@13 mul16u_error mul16u_error::@1 mul16u_error::@2 mul16u_error::@3 mul16u_error::@4 mul16u_error::@5 mul16u_error::@6 mul16u_error::@7 mul16u_error::@8 mul16u_error::@return muls16u muls16u::@2 muls16u::@1 muls16u::@return mulf_init mulf_init::@1 mulf_init::@5 mulf_init::@2 mulf_init::@3 mulf_init::@7 mulf_init::@4 mulf_init::@8 mulf_init::@return print_cls print_cls::@1 print_cls::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting mul16s_compare::@15(between mul16s_compare::@8 and mul16s_compare::@1) Added new block during phi lifting mul16s_compare::@16(between mul16s_compare::@4 and mul16s_compare::@2) Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1) @@ -4552,7 +4551,6 @@ Added new block during phi lifting mulf_init::@10(between mulf_init::@1 and mulf Added new block during phi lifting mulf_init::@11(between mulf_init::@4 and mulf_init::@3) Added new block during phi lifting mulf_init::@12(between mulf_init::@3 and mulf_init::@4) Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) -Block Sequence Planned @begin @29 @end main main::@1 main::@2 main::@3 main::@return mul16s_compare mul16s_compare::@1 mul16s_compare::@2 mul16s_compare::@10 mul16s_compare::@11 mul16s_compare::@5 mul16s_compare::@3 mul16s_compare::@6 mul16s_compare::@return mul16s_compare::@4 mul16s_compare::@8 mul16s_compare::@9 mul16s_compare::@13 mul16s_compare::@15 mul16s_compare::@16 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_str print_str::@1 print_str::@return print_str::@2 mul16s_error mul16s_error::@1 mul16s_error::@2 mul16s_error::@3 mul16s_error::@4 mul16s_error::@5 mul16s_error::@6 mul16s_error::@7 mul16s_error::@8 mul16s_error::@return print_sdword print_sdword::@2 print_sdword::@4 print_sdword::@1 print_sdword::@return print_sdword::@5 print_dword print_dword::@1 print_dword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_sword::@5 mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@4 mul16s::@2 mul16s::@return mul16s::@8 mul16s::@7 mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 mul16u::@10 muls16s muls16s::@6 muls16s::@3 muls16s::@13 muls16s::@4 muls16s::@return muls16s::@12 muls16s::@5 muls16s::@14 muls16s::@15 mul16u_compare mul16u_compare::@1 mul16u_compare::@2 mul16u_compare::@10 mul16u_compare::@11 mul16u_compare::@5 mul16u_compare::@3 mul16u_compare::@6 mul16u_compare::@return mul16u_compare::@4 mul16u_compare::@8 mul16u_compare::@9 mul16u_compare::@13 mul16u_compare::@15 mul16u_compare::@16 mul16u_error mul16u_error::@1 mul16u_error::@2 mul16u_error::@3 mul16u_error::@4 mul16u_error::@5 mul16u_error::@6 mul16u_error::@7 mul16u_error::@8 mul16u_error::@return muls16u muls16u::@2 muls16u::@7 muls16u::@1 muls16u::@return muls16u::@6 mulf_init mulf_init::@1 mulf_init::@5 mulf_init::@2 mulf_init::@3 mulf_init::@7 mulf_init::@4 mulf_init::@8 mulf_init::@return mulf_init::@11 mulf_init::@12 mulf_init::@9 mulf_init::@10 print_cls print_cls::@1 print_cls::@return print_cls::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @29 Adding NOP phi() at start of @end @@ -4744,7 +4742,6 @@ Culled Empty Block (label) mulf_init::@11 Culled Empty Block (label) mulf_init::@9 Culled Empty Block (label) mulf_init::@10 Culled Empty Block (label) print_cls::@3 -Block Sequence Planned @begin @29 @end main main::@1 main::@2 main::@3 main::@return mul16s_compare mul16s_compare::@1 mul16s_compare::@2 mul16s_compare::@10 mul16s_compare::@11 mul16s_compare::@5 mul16s_compare::@3 mul16s_compare::@6 mul16s_compare::@return mul16s_compare::@4 mul16s_compare::@8 mul16s_compare::@9 mul16s_compare::@13 print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 mul16s_error mul16s_error::@1 mul16s_error::@2 mul16s_error::@3 mul16s_error::@4 mul16s_error::@5 mul16s_error::@6 mul16s_error::@7 mul16s_error::@8 mul16s_error::@return print_sdword print_sdword::@2 print_sdword::@4 print_sdword::@1 print_sdword::@return print_dword print_dword::@1 print_dword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return mul16s mul16s::@6 mul16s::@3 mul16s::@1 mul16s::@4 mul16s::@2 mul16s::@return mul16u mul16u::@1 mul16u::@return mul16u::@2 mul16u::@7 mul16u::@4 muls16s muls16s::@6 muls16s::@3 muls16s::@4 muls16s::@return muls16s::@5 mul16u_compare mul16u_compare::@1 mul16u_compare::@2 mul16u_compare::@10 mul16u_compare::@11 mul16u_compare::@5 mul16u_compare::@3 mul16u_compare::@6 mul16u_compare::@return mul16u_compare::@4 mul16u_compare::@8 mul16u_compare::@9 mul16u_compare::@13 mul16u_error mul16u_error::@1 mul16u_error::@2 mul16u_error::@3 mul16u_error::@4 mul16u_error::@5 mul16u_error::@6 mul16u_error::@7 mul16u_error::@8 mul16u_error::@return muls16u muls16u::@2 muls16u::@1 muls16u::@return mulf_init mulf_init::@1 mulf_init::@5 mulf_init::@2 mulf_init::@3 mulf_init::@4 mulf_init::@8 mulf_init::@return mulf_init::@12 print_cls print_cls::@1 print_cls::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @29 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-8bit.log b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-8bit.log index 755fb581e..e3c0a8788 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-8bit.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/test-multiply-8bit.log @@ -4711,7 +4711,7 @@ Inversing boolean not (bool~) mul8u_compare::$8 ← (byte) mul8u_compare::ok#3 ! Inversing boolean not (bool~) mul8s_compare::$6 ← (signed word) mul8s_compare::ms#1 == (signed word) mul8s_compare::mf#1 from (bool~) mul8s_compare::$5 ← (signed word) mul8s_compare::ms#1 != (signed word) mul8s_compare::mf#1 Inversing boolean not (bool~) mul8s_compare::$8 ← (signed word) mul8s_compare::ms#2 == (signed word) mul8s_compare::mn#1 from (bool~) mul8s_compare::$7 ← (signed word) mul8s_compare::ms#2 != (signed word) mul8s_compare::mn#1 Inversing boolean not (bool~) mul8s_compare::$10 ← (byte) mul8s_compare::ok#3 != (byte/signed byte/word/signed word/dword/signed dword) 0 from (bool~) mul8s_compare::$9 ← (byte) mul8s_compare::ok#3 == (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Not aliassing identity: muls8u::b#1 muls8u::b#1 Not aliassing identity: muls8u::a#2 muls8u::a#2 Not aliassing identity: muls8s::b#1 muls8s::b#1 @@ -4928,7 +4928,7 @@ Alias (byte*) print_line_cursor#20 = (byte*) print_line_cursor#42 (byte*) print_ Alias (byte*) print_char_cursor#127 = (byte*) print_char_cursor#63 (byte*) print_char_cursor#128 (byte*) print_char_cursor#64 Alias (byte*) print_line_cursor#22 = (byte*) print_line_cursor#44 Alias (byte*) print_char_cursor#129 = (byte*) print_char_cursor#65 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: muls8u::b#1 muls8u::b#1 Not aliassing identity: muls8u::a#2 muls8u::a#2 Not aliassing identity: muls8s::b#1 muls8s::b#1 @@ -4961,7 +4961,7 @@ Alias (signed byte) mul8s_compare::a#10 = (signed byte) mul8s_compare::a#12 (sig Alias (signed word) mul8s_compare::mf#0 = (signed word) mul8s_compare::mf#4 (signed word) mul8s_compare::mf#2 Alias (byte*) print_char_cursor#145 = (byte*) print_char_cursor#165 (byte*) print_char_cursor#171 Alias (byte*) print_line_cursor#102 = (byte*) print_line_cursor#74 (byte*) print_line_cursor#53 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: muls8u::b#1 muls8u::b#1 Not aliassing identity: muls8u::a#2 muls8u::a#2 Not aliassing identity: muls8s::b#1 muls8s::b#1 @@ -4985,7 +4985,7 @@ Self Phi Eliminated (signed byte) mul8s_compare::a#10 Self Phi Eliminated (byte*) BGCOL#13 Self Phi Eliminated (byte*) print_char_cursor#145 Self Phi Eliminated (byte*) print_line_cursor#102 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) print_char_cursor#68 (byte*) print_char_cursor#131 Redundant Phi (byte*) print_char_cursor#5 (byte*) print_char_cursor#12 Redundant Phi (byte*) print_char_cursor#6 (byte*) print_char_cursor#17 @@ -5100,14 +5100,14 @@ Redundant Phi (byte*) print_line_cursor#20 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#127 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#22 (byte*) print_line_cursor#30 Redundant Phi (byte*) print_char_cursor#129 (byte*) print_char_cursor#24 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Redundant Phi (byte*) print_char_cursor#133 (byte*) print_char_cursor#130 Redundant Phi (byte*) print_char_cursor#135 (byte*) print_char_cursor#130 Redundant Phi (byte*) print_char_cursor#34 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#13 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_char_cursor#114 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#18 (byte*) print_line_cursor#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) print_str::$0 if(*((byte*) print_str::str#16)!=(byte) '@') goto print_str::@2 Simple Condition (bool~) print_ln::$1 if((byte*) print_line_cursor#1<(byte*) print_char_cursor#131) goto print_ln::@1 Simple Condition (bool~) print_sword::$1 if((signed word) print_sword::w#4>=(byte/signed byte/word/signed word/dword/signed dword) 0) goto print_sword::@1 @@ -5141,7 +5141,7 @@ Simple Condition (bool~) mul8s_compare::$8 if((signed word) mul8s_compare::ms#0= Simple Condition (bool~) mul8s_compare::$10 if((byte) mul8s_compare::ok#3!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto mul8s_compare::@5 Simple Condition (bool~) mul8s_compare::$13 if((signed byte) mul8s_compare::b#1!=(signed byte/signed word/signed dword~) mul8s_compare::$12) goto mul8s_compare::@2 Simple Condition (bool~) mul8s_compare::$15 if((signed byte) mul8s_compare::a#1!=(signed byte/signed word/signed dword~) mul8s_compare::$14) goto mul8s_compare::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) print_line_cursor#0 = ((byte*))1024 Constant (const byte) print_char::ch#0 = '-' Constant (const byte) print_char::ch#1 = '-' @@ -5198,7 +5198,7 @@ Constant (const byte*) print_str::str#12 = mul8s_error::str1 Constant (const byte*) print_str::str#13 = mul8s_error::str2 Constant (const byte*) print_str::str#14 = mul8s_error::str3 Constant (const byte*) print_str::str#15 = mul8s_error::str4 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) print_cls::sc#0 = print_line_cursor#0 Constant (const byte*) print_cls::$0 = print_line_cursor#0+1000 Constant (const byte*) mulf_init::sqr1_hi#0 = mulf_sqr1_hi#0+1 @@ -5215,9 +5215,9 @@ Constant (const byte*) mulf_init::$20 = mulf_sqr1_hi#0+256 Constant (const byte*) mulf_tables_cmp::asm_sqr#0 = mula_sqr1_lo#0 Constant (const byte*) mulf_tables_cmp::kc_sqr#0 = mulf_sqr1_lo#0 Constant (const byte*) mulf_tables_cmp::$9 = mulf_sqr1_lo#0+mulf_tables_cmp::$8 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Fixing inline constructor with mulf8u::$0 ← *(mulf8u::memB#0) w= *(mulf8u::memA#0) -Succesful SSA optimization Pass2FixInlineConstructors +Successful SSA optimization Pass2FixInlineConstructors Eliminating Noop Cast (word) print_word::w#0 ← ((word)) (signed word) print_sword::w#5 Eliminating Noop Cast (byte) print_byte::b#0 ← ((byte)) (signed byte) print_sbyte::b#4 Eliminating Noop Cast (byte) mul8u::a#1 ← ((byte)) (signed byte) mul8s::a#0 @@ -5232,7 +5232,7 @@ Eliminating Noop Cast (signed word) mulf8s::return#0 ← ((signed word)) (word) Eliminating Noop Cast (byte~) mulf8s::$13 ← ((byte)) (signed byte) mulf8s::a#0 Eliminating Noop Cast (word) print_word::w#1 ← ((word)) (byte*) mulf_tables_cmp::asm_sqr#2 Eliminating Noop Cast (word) print_word::w#2 ← ((word)) (byte*) mulf_tables_cmp::kc_sqr#2 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Resolved ranged next value mul8u_compare::b#1 ← ++ mul8u_compare::b#10 to ++ Resolved ranged comparison value if(mul8u_compare::b#1!=rangelast(0,255)) goto mul8u_compare::@2 to (byte/signed byte/word/signed word/dword/signed dword) 0 Resolved ranged next value mul8u_compare::a#1 ← ++ mul8u_compare::a#7 to ++ @@ -5263,23 +5263,23 @@ Culled Empty Block (label) mul8s_compare::@15 Culled Empty Block (label) mul8s_compare::@17 Culled Empty Block (label) mul8s_error::@11 Culled Empty Block (label) @32 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (word) mulf8u::return#0 = (word~) mulf8u::$0 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) BGCOL#29 Self Phi Eliminated (byte*) print_char_cursor#180 Self Phi Eliminated (byte*) print_line_cursor#104 Self Phi Eliminated (byte*) BGCOL#31 Self Phi Eliminated (byte*) print_char_cursor#181 Self Phi Eliminated (byte*) print_line_cursor#106 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) BGCOL#29 (const byte*) BGCOL#0 Redundant Phi (byte*) print_char_cursor#180 (byte*) print_char_cursor#30 Redundant Phi (byte*) print_line_cursor#104 (byte*) print_line_cursor#10 Redundant Phi (byte*) BGCOL#31 (const byte*) BGCOL#0 Redundant Phi (byte*) print_char_cursor#181 (byte*) print_line_cursor#1 Redundant Phi (byte*) print_line_cursor#106 (byte*) print_line_cursor#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte*) print_str::str#1 Inlining constant with var siblings (const byte*) print_str::str#2 @@ -5388,8 +5388,7 @@ Constant inlined muls8s::j#0 = (byte/signed byte/word/signed word/dword/signed d Constant inlined mulf_tables_cmp::asm_sqr#0 = (const byte[512]) mula_sqr1_lo#0 Constant inlined print_char::ch#1 = (byte) '-' Constant inlined print_char::ch#0 = (byte) '-' -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @31 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return mul8s_compare mul8s_compare::@1 mul8s_compare::@2 mul8s_compare::@12 mul8s_compare::@13 mul8s_compare::@14 mul8s_compare::@6 mul8s_compare::@3 mul8s_compare::@7 mul8s_compare::@4 mul8s_compare::@8 mul8s_compare::@return mul8s_compare::@5 mul8s_compare::@10 mul8s_compare::@11 mul8s_compare::@16 print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 mul8s_error mul8s_error::@1 mul8s_error::@2 mul8s_error::@3 mul8s_error::@4 mul8s_error::@5 mul8s_error::@6 mul8s_error::@7 mul8s_error::@8 mul8s_error::@9 mul8s_error::@10 mul8s_error::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return mul8s mul8s::@6 mul8s::@3 mul8s::@1 mul8s::@4 mul8s::@2 mul8s::@return mul8u mul8u::@1 mul8u::@return mul8u::@2 mul8u::@7 mul8u::@4 mulf8s mulf8s::@6 mulf8s::@3 mulf8s::@1 mulf8s::@4 mulf8s::@2 mulf8s::@return mulf8u mulf8u::@return muls8s muls8s::@6 muls8s::@3 muls8s::@4 muls8s::@return muls8s::@5 mul8u_compare mul8u_compare::@1 mul8u_compare::@2 mul8u_compare::@12 mul8u_compare::@13 mul8u_compare::@14 mul8u_compare::@6 mul8u_compare::@3 mul8u_compare::@7 mul8u_compare::@4 mul8u_compare::@8 mul8u_compare::@return mul8u_compare::@5 mul8u_compare::@10 mul8u_compare::@11 mul8u_compare::@16 mul8u_error mul8u_error::@1 mul8u_error::@2 mul8u_error::@3 mul8u_error::@4 mul8u_error::@5 mul8u_error::@6 mul8u_error::@7 mul8u_error::@8 mul8u_error::@9 mul8u_error::@10 mul8u_error::@return muls8u muls8u::@2 muls8u::@1 muls8u::@return mulf_tables_cmp mulf_tables_cmp::@1 mulf_tables_cmp::@3 mulf_tables_cmp::@6 mulf_tables_cmp::@7 mulf_tables_cmp::@8 mulf_tables_cmp::@return mulf_tables_cmp::@2 mulf_tables_cmp::@5 mulf_tables_cmp::@10 mulf_init_asm mulf_init_asm::@return mulf_init mulf_init::@1 mulf_init::@5 mulf_init::@2 mulf_init::@3 mulf_init::@7 mulf_init::@4 mulf_init::@8 mulf_init::@return print_cls print_cls::@1 print_cls::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting mul8s_compare::@18(between mul8s_compare::@10 and mul8s_compare::@1) Added new block during phi lifting mul8s_compare::@19(between mul8s_compare::@5 and mul8s_compare::@2) Added new block during phi lifting mul8s_compare::@20(between mul8s_compare::@3 and mul8s_compare::@4) @@ -5416,7 +5415,6 @@ Added new block during phi lifting mulf_init::@10(between mulf_init::@1 and mulf Added new block during phi lifting mulf_init::@11(between mulf_init::@4 and mulf_init::@3) Added new block during phi lifting mulf_init::@12(between mulf_init::@3 and mulf_init::@4) Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1) -Block Sequence Planned @begin @31 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return mul8s_compare mul8s_compare::@1 mul8s_compare::@2 mul8s_compare::@12 mul8s_compare::@13 mul8s_compare::@14 mul8s_compare::@6 mul8s_compare::@3 mul8s_compare::@7 mul8s_compare::@4 mul8s_compare::@8 mul8s_compare::@return mul8s_compare::@5 mul8s_compare::@10 mul8s_compare::@11 mul8s_compare::@16 mul8s_compare::@18 mul8s_compare::@19 mul8s_compare::@20 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_str print_str::@1 print_str::@return print_str::@2 mul8s_error mul8s_error::@1 mul8s_error::@2 mul8s_error::@3 mul8s_error::@4 mul8s_error::@5 mul8s_error::@6 mul8s_error::@7 mul8s_error::@8 mul8s_error::@9 mul8s_error::@10 mul8s_error::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_sword::@5 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return print_sbyte::@5 mul8s mul8s::@6 mul8s::@3 mul8s::@1 mul8s::@4 mul8s::@2 mul8s::@return mul8s::@8 mul8s::@7 mul8u mul8u::@1 mul8u::@return mul8u::@2 mul8u::@7 mul8u::@4 mul8u::@10 mulf8s mulf8s::@6 mulf8s::@3 mulf8s::@1 mulf8s::@4 mulf8s::@2 mulf8s::@return mulf8s::@8 mulf8s::@7 mulf8u mulf8u::@return muls8s muls8s::@6 muls8s::@3 muls8s::@13 muls8s::@4 muls8s::@return muls8s::@12 muls8s::@5 muls8s::@14 muls8s::@15 mul8u_compare mul8u_compare::@1 mul8u_compare::@2 mul8u_compare::@12 mul8u_compare::@13 mul8u_compare::@14 mul8u_compare::@6 mul8u_compare::@3 mul8u_compare::@7 mul8u_compare::@4 mul8u_compare::@8 mul8u_compare::@return mul8u_compare::@5 mul8u_compare::@10 mul8u_compare::@11 mul8u_compare::@16 mul8u_compare::@18 mul8u_compare::@19 mul8u_compare::@20 mul8u_error mul8u_error::@1 mul8u_error::@2 mul8u_error::@3 mul8u_error::@4 mul8u_error::@5 mul8u_error::@6 mul8u_error::@7 mul8u_error::@8 mul8u_error::@9 mul8u_error::@10 mul8u_error::@return muls8u muls8u::@2 muls8u::@7 muls8u::@1 muls8u::@return muls8u::@6 mulf_tables_cmp mulf_tables_cmp::@1 mulf_tables_cmp::@3 mulf_tables_cmp::@6 mulf_tables_cmp::@7 mulf_tables_cmp::@8 mulf_tables_cmp::@return mulf_tables_cmp::@2 mulf_tables_cmp::@5 mulf_tables_cmp::@10 mulf_tables_cmp::@12 mulf_init_asm mulf_init_asm::@return mulf_init mulf_init::@1 mulf_init::@5 mulf_init::@2 mulf_init::@3 mulf_init::@7 mulf_init::@4 mulf_init::@8 mulf_init::@return mulf_init::@11 mulf_init::@12 mulf_init::@9 mulf_init::@10 print_cls print_cls::@1 print_cls::@return print_cls::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @31 Adding NOP phi() at start of @end @@ -5635,7 +5633,6 @@ Culled Empty Block (label) mulf_init::@11 Culled Empty Block (label) mulf_init::@9 Culled Empty Block (label) mulf_init::@10 Culled Empty Block (label) print_cls::@3 -Block Sequence Planned @begin @31 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return mul8s_compare mul8s_compare::@1 mul8s_compare::@2 mul8s_compare::@12 mul8s_compare::@13 mul8s_compare::@14 mul8s_compare::@6 mul8s_compare::@3 mul8s_compare::@4 mul8s_compare::@8 mul8s_compare::@return mul8s_compare::@5 mul8s_compare::@10 mul8s_compare::@11 mul8s_compare::@16 mul8s_compare::@20 print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 mul8s_error mul8s_error::@1 mul8s_error::@2 mul8s_error::@3 mul8s_error::@4 mul8s_error::@5 mul8s_error::@6 mul8s_error::@7 mul8s_error::@8 mul8s_error::@9 mul8s_error::@10 mul8s_error::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return mul8s mul8s::@6 mul8s::@3 mul8s::@1 mul8s::@4 mul8s::@2 mul8s::@return mul8u mul8u::@1 mul8u::@return mul8u::@2 mul8u::@7 mul8u::@4 mulf8s mulf8s::@6 mulf8s::@3 mulf8s::@1 mulf8s::@4 mulf8s::@2 mulf8s::@return mulf8u mulf8u::@return muls8s muls8s::@6 muls8s::@3 muls8s::@4 muls8s::@return muls8s::@5 mul8u_compare mul8u_compare::@1 mul8u_compare::@2 mul8u_compare::@12 mul8u_compare::@13 mul8u_compare::@14 mul8u_compare::@6 mul8u_compare::@3 mul8u_compare::@4 mul8u_compare::@8 mul8u_compare::@return mul8u_compare::@5 mul8u_compare::@10 mul8u_compare::@11 mul8u_compare::@16 mul8u_compare::@20 mul8u_error mul8u_error::@1 mul8u_error::@2 mul8u_error::@3 mul8u_error::@4 mul8u_error::@5 mul8u_error::@6 mul8u_error::@7 mul8u_error::@8 mul8u_error::@9 mul8u_error::@10 mul8u_error::@return muls8u muls8u::@2 muls8u::@1 muls8u::@return mulf_tables_cmp mulf_tables_cmp::@1 mulf_tables_cmp::@3 mulf_tables_cmp::@6 mulf_tables_cmp::@7 mulf_tables_cmp::@8 mulf_tables_cmp::@return mulf_tables_cmp::@2 mulf_tables_cmp::@5 mulf_tables_cmp::@10 mulf_init_asm mulf_init_asm::@return mulf_init mulf_init::@1 mulf_init::@5 mulf_init::@2 mulf_init::@3 mulf_init::@4 mulf_init::@8 mulf_init::@return mulf_init::@12 print_cls print_cls::@1 print_cls::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @31 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/true-inline-words.log b/src/test/java/dk/camelot64/kickc/test/ref/true-inline-words.log index 8bf59ad47..4632de55d 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/true-inline-words.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/true-inline-words.log @@ -150,49 +150,47 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (word) main::w2#0 = (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$1 Alias (byte*) main::bgcol#0 = (byte*) main::bgcol#1 (byte*) main::bgcol#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Simple Condition (bool~) main::$2 if(*((byte*) main::pos#0)==(byte) 'm') goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte[]) main::bs#0 = { 'c', 'm' } Constant (const byte) main::b#0 = 4 Constant (const byte*) main::pos#0 = ((byte*))1281 Constant (const byte*) main::bgcol#0 = ((byte*))53281 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::bs#0+1) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Fixing inline constructor with main::$3 ← main::b#0 w= 0 Fixing inline constructor with main::$4 ← 1 w= 1 Fixing inline constructor with main::$5 ← 0 w= 0 -Succesful SSA optimization Pass2FixInlineConstructors +Successful SSA optimization Pass2FixInlineConstructors Inferred type updated to word/signed word/dword/signed dword in (word~) main::$3 ← (const byte) main::b#0 w= (byte/signed byte/word/signed word/dword/signed dword) 0 Inferred type updated to word/signed word/dword/signed dword in (word~) main::$4 ← (byte/signed byte/word/signed word/dword/signed dword) 1 w= (byte/signed byte/word/signed word/dword/signed dword) 1 Inferred type updated to word/signed dword/dword in (byte/signed byte/word/signed word/dword/signed dword*/word~) main::$0 ← (word/signed word/dword/signed dword~) main::$4 + (word) main::w#0 Inferred type updated to byte/signed byte/word/signed word/dword/signed dword in (word~) main::$5 ← (byte/signed byte/word/signed word/dword/signed dword) 0 w= (byte/signed byte/word/signed word/dword/signed dword) 0 Eliminating Noop Cast (byte*) main::sc#0 ← ((byte*)) (word) main::w2#0 -Succesful SSA optimization Pass2NopCastElimination +Successful SSA optimization Pass2NopCastElimination Alias (word) main::w#0 = (word/signed word/dword/signed dword~) main::$3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Constant (const word) main::w#0 = main::b#0*256+0 Constant (const word/signed word/dword/signed dword) main::$4 = 1*256+1 Constant (const byte/signed byte/word/signed word/dword/signed dword) main::$5 = 0*256+0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word/signed dword/dword) main::$0 = main::$4+main::w#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const word) main::w2#0 = main::$0+main::$5 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH Constant inlined main::$5 = (byte/signed byte/word/signed word/dword/signed dword) 0*(word/signed word/dword/signed dword) 256+(byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::$4 = (byte/signed byte/word/signed word/dword/signed dword) 1*(word/signed word/dword/signed dword) 256+(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined main::$0 = (byte/signed byte/word/signed word/dword/signed dword) 1*(word/signed word/dword/signed dword) 256+(byte/signed byte/word/signed word/dword/signed dword) 1+(const word) main::w#0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero main::b#0*256+0 Simplifying constant plus zero 0*256+0 Simplifying constant multiply by zero 0*256 -Block Sequence Planned @begin @1 @end main main::@3 main::@return main::@1 -Block Sequence Planned @begin @1 @end main main::@3 main::@return main::@1 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -202,7 +200,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@3 main::@return main::@1 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/unroll-loop-modifyvar.log b/src/test/java/dk/camelot64/kickc/test/ref/unroll-loop-modifyvar.log index 4a19ad9bb..b2e2d622f 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/unroll-loop-modifyvar.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/unroll-loop-modifyvar.log @@ -106,202 +106,191 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::a#1 = (byte) main::a#3 Alias (byte*) main::SCREEN#1 = (byte*) main::SCREEN#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::SCREEN#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::SCREEN#1 (byte*) main::SCREEN#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$0 unroll if((byte) main::a#1<(byte/signed byte/word/signed word/dword/signed dword) 14) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = ((byte*))1024 Constant (const byte) main::a#0 = 3 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Creating PHI for main::a#1 in block main::@2 - (byte) main::a#4 ← phi( main::@1/(byte) main::a#1 ) Unrolling loop Loop head: main::@1 tails: main::@1 blocks: main::@1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::a#2 (const byte) main::a#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::a#1 = ++main::a#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::SCREEN#0+main::a#0) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Removing PHI-reference to removed block (main::@1) in block main::@2 if() condition always true - replacing block destination [3] if((const byte) main::a#1<(byte/signed byte/word/signed word/dword/signed dword) 14) goto main::@1_1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Alias (byte) main::a#4 = (byte) main::a#6 -Succesful SSA optimization Pass2AliasElimination -Block Sequence Planned @begin @1 @end main main::@1 main::@1_1 main::@2 main::@return +Successful SSA optimization Pass2AliasElimination Creating PHI for main::a#4 in block main::@2 - (byte) main::a#7 ← phi( main::@1_1/(byte) main::a#4 ) Unrolling loop Loop head: main::@1_1 tails: main::@1_1 blocks: main::@1_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::a#5 (const byte) main::a#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::a#4 = ++main::a#1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::SCREEN#0+main::a#1) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Removing PHI-reference to removed block (main::@1_1) in block main::@2 if() condition always true - replacing block destination [5] if((const byte) main::a#4<(byte/signed byte/word/signed word/dword/signed dword) 14) goto main::@1_2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Alias (byte) main::a#7 = (byte) main::a#9 -Succesful SSA optimization Pass2AliasElimination -Block Sequence Planned @begin @1 @end main main::@1 main::@1_1 main::@1_2 main::@2 main::@return +Successful SSA optimization Pass2AliasElimination Creating PHI for main::a#7 in block main::@2 - (byte) main::a#10 ← phi( main::@1_2/(byte) main::a#7 ) Unrolling loop Loop head: main::@1_2 tails: main::@1_2 blocks: main::@1_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::a#8 (const byte) main::a#4 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::a#7 = ++main::a#4 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::SCREEN#0+main::a#4) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Removing PHI-reference to removed block (main::@1_2) in block main::@2 if() condition always true - replacing block destination [6] if((const byte) main::a#7<(byte/signed byte/word/signed word/dword/signed dword) 14) goto main::@1_3 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Alias (byte) main::a#10 = (byte) main::a#12 -Succesful SSA optimization Pass2AliasElimination -Block Sequence Planned @begin @1 @end main main::@1 main::@1_1 main::@1_2 main::@1_3 main::@2 main::@return +Successful SSA optimization Pass2AliasElimination Creating PHI for main::a#10 in block main::@2 - (byte) main::a#13 ← phi( main::@1_3/(byte) main::a#10 ) Unrolling loop Loop head: main::@1_3 tails: main::@1_3 blocks: main::@1_3 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::a#11 (const byte) main::a#7 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::a#10 = ++main::a#7 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::SCREEN#0+main::a#7) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Removing PHI-reference to removed block (main::@1_3) in block main::@2 if() condition always true - replacing block destination [7] if((const byte) main::a#10<(byte/signed byte/word/signed word/dword/signed dword) 14) goto main::@1_4 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Alias (byte) main::a#13 = (byte) main::a#15 -Succesful SSA optimization Pass2AliasElimination -Block Sequence Planned @begin @1 @end main main::@1 main::@1_1 main::@1_2 main::@1_3 main::@1_4 main::@2 main::@return +Successful SSA optimization Pass2AliasElimination Creating PHI for main::a#13 in block main::@2 - (byte) main::a#16 ← phi( main::@1_4/(byte) main::a#13 ) Unrolling loop Loop head: main::@1_4 tails: main::@1_4 blocks: main::@1_4 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::a#14 (const byte) main::a#10 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::a#13 = ++main::a#10 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::SCREEN#0+main::a#10) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Removing PHI-reference to removed block (main::@1_4) in block main::@2 if() condition always true - replacing block destination [8] if((const byte) main::a#13<(byte/signed byte/word/signed word/dword/signed dword) 14) goto main::@1_5 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Alias (byte) main::a#16 = (byte) main::a#18 -Succesful SSA optimization Pass2AliasElimination -Block Sequence Planned @begin @1 @end main main::@1 main::@1_1 main::@1_2 main::@1_3 main::@1_4 main::@1_5 main::@2 main::@return +Successful SSA optimization Pass2AliasElimination Creating PHI for main::a#16 in block main::@2 - (byte) main::a#19 ← phi( main::@1_5/(byte) main::a#16 ) Unrolling loop Loop head: main::@1_5 tails: main::@1_5 blocks: main::@1_5 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::a#17 (const byte) main::a#13 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::a#16 = ++main::a#13 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::SCREEN#0+main::a#13) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Removing PHI-reference to removed block (main::@1_5) in block main::@2 if() condition always true - replacing block destination [9] if((const byte) main::a#16<(byte/signed byte/word/signed word/dword/signed dword) 14) goto main::@1_6 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Alias (byte) main::a#19 = (byte) main::a#21 -Succesful SSA optimization Pass2AliasElimination -Block Sequence Planned @begin @1 @end main main::@1 main::@1_1 main::@1_2 main::@1_3 main::@1_4 main::@1_5 main::@1_6 main::@2 main::@return +Successful SSA optimization Pass2AliasElimination Creating PHI for main::a#19 in block main::@2 - (byte) main::a#22 ← phi( main::@1_6/(byte) main::a#19 ) Unrolling loop Loop head: main::@1_6 tails: main::@1_6 blocks: main::@1_6 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::a#20 (const byte) main::a#16 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::a#19 = ++main::a#16 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::SCREEN#0+main::a#16) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Removing PHI-reference to removed block (main::@1_6) in block main::@2 if() condition always true - replacing block destination [10] if((const byte) main::a#19<(byte/signed byte/word/signed word/dword/signed dword) 14) goto main::@1_7 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Alias (byte) main::a#22 = (byte) main::a#24 -Succesful SSA optimization Pass2AliasElimination -Block Sequence Planned @begin @1 @end main main::@1 main::@1_1 main::@1_2 main::@1_3 main::@1_4 main::@1_5 main::@1_6 main::@1_7 main::@2 main::@return +Successful SSA optimization Pass2AliasElimination Creating PHI for main::a#22 in block main::@2 - (byte) main::a#25 ← phi( main::@1_7/(byte) main::a#22 ) Unrolling loop Loop head: main::@1_7 tails: main::@1_7 blocks: main::@1_7 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::a#23 (const byte) main::a#19 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::a#22 = ++main::a#19 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::SCREEN#0+main::a#19) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Removing PHI-reference to removed block (main::@1_7) in block main::@2 if() condition always true - replacing block destination [11] if((const byte) main::a#22<(byte/signed byte/word/signed word/dword/signed dword) 14) goto main::@1_8 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Alias (byte) main::a#25 = (byte) main::a#27 -Succesful SSA optimization Pass2AliasElimination -Block Sequence Planned @begin @1 @end main main::@1 main::@1_1 main::@1_2 main::@1_3 main::@1_4 main::@1_5 main::@1_6 main::@1_7 main::@1_8 main::@2 main::@return +Successful SSA optimization Pass2AliasElimination Creating PHI for main::a#25 in block main::@2 - (byte) main::a#28 ← phi( main::@1_8/(byte) main::a#25 ) Unrolling loop Loop head: main::@1_8 tails: main::@1_8 blocks: main::@1_8 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::a#26 (const byte) main::a#22 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::a#25 = ++main::a#22 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::SCREEN#0+main::a#22) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Removing PHI-reference to removed block (main::@1_8) in block main::@2 if() condition always true - replacing block destination [12] if((const byte) main::a#25<(byte/signed byte/word/signed word/dword/signed dword) 14) goto main::@1_9 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Alias (byte) main::a#28 = (byte) main::a#30 -Succesful SSA optimization Pass2AliasElimination -Block Sequence Planned @begin @1 @end main main::@1 main::@1_1 main::@1_2 main::@1_3 main::@1_4 main::@1_5 main::@1_6 main::@1_7 main::@1_8 main::@1_9 main::@2 main::@return +Successful SSA optimization Pass2AliasElimination Creating PHI for main::a#28 in block main::@2 - (byte) main::a#31 ← phi( main::@1_9/(byte) main::a#28 ) Unrolling loop Loop head: main::@1_9 tails: main::@1_9 blocks: main::@1_9 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::a#29 (const byte) main::a#25 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::a#28 = ++main::a#25 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::SCREEN#0+main::a#25) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Removing PHI-reference to removed block (main::@1_9) in block main::@2 if() condition always true - replacing block destination [13] if((const byte) main::a#28<(byte/signed byte/word/signed word/dword/signed dword) 14) goto main::@1_10 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Alias (byte) main::a#31 = (byte) main::a#33 -Succesful SSA optimization Pass2AliasElimination -Block Sequence Planned @begin @1 @end main main::@1 main::@1_1 main::@1_2 main::@1_3 main::@1_4 main::@1_5 main::@1_6 main::@1_7 main::@1_8 main::@1_9 main::@1_10 main::@2 main::@return +Successful SSA optimization Pass2AliasElimination Creating PHI for main::a#31 in block main::@2 - (byte) main::a#34 ← phi( main::@1_10/(byte) main::a#31 ) Unrolling loop Loop head: main::@1_10 tails: main::@1_10 blocks: main::@1_10 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::a#32 (const byte) main::a#28 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::a#31 = ++main::a#28 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::SCREEN#0+main::a#28) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Removing PHI-reference to removed block (main::@1_10) in block main::@1_11 if() condition always false - eliminating [14] if((const byte) main::a#31<(byte/signed byte/word/signed word/dword/signed dword) 14) goto main::@1_11 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating variable (byte) main::a#35 from unused block main::@1_11 Eliminating variable (byte) main::a#36 from unused block main::@1_11 Removing PHI-reference to removed block (main::@1_11) in block main::@2 Removing unused block main::@1_11 -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Redundant Phi (byte) main::a#34 (const byte) main::a#31 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Consolidated array index constant in *(main::SCREEN#0+main::a#31) -Succesful SSA optimization Pass2ConstantAdditionElimination -Block Sequence Planned @begin @1 @end main main::@1 main::@1_1 main::@1_2 main::@1_3 main::@1_4 main::@1_5 main::@1_6 main::@1_7 main::@1_8 main::@1_9 main::@1_10 main::@2 main::@return +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with different constant siblings (const byte) main::a#0 Inlining constant with different constant siblings (const byte) main::a#1 @@ -327,7 +316,7 @@ Constant inlined main::a#1 = ++(byte/signed byte/word/signed word/dword/signed d Constant inlined main::a#16 = ++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 3 Constant inlined main::a#7 = ++++++(byte/signed byte/word/signed word/dword/signed dword) 3 Constant inlined main::a#4 = ++++(byte/signed byte/word/signed word/dword/signed dword) 3 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant integer increment ++3 Simplifying constant integer increment ++3 Simplifying constant integer increment ++3 @@ -350,7 +339,7 @@ Simplifying constant integer increment ++11 Simplifying constant integer increment ++12 Simplifying constant integer increment ++12 Simplifying constant integer increment ++13 -Succesful SSA optimization Pass2ConstantSimplification +Successful SSA optimization Pass2ConstantSimplification Simplifying constant integer increment ++4 Simplifying constant integer increment ++5 Simplifying constant integer increment ++6 @@ -361,9 +350,7 @@ Simplifying constant integer increment ++10 Simplifying constant integer increment ++11 Simplifying constant integer increment ++12 Simplifying constant integer increment ++13 -Succesful SSA optimization Pass2ConstantSimplification -Block Sequence Planned @begin @1 @end main main::@1 main::@1_1 main::@1_2 main::@1_3 main::@1_4 main::@1_5 main::@1_6 main::@1_7 main::@1_8 main::@1_9 main::@1_10 main::@2 main::@return -Block Sequence Planned @begin @1 @end main main::@1 main::@1_1 main::@1_2 main::@1_3 main::@1_4 main::@1_5 main::@1_6 main::@1_7 main::@1_8 main::@1_9 main::@1_10 main::@2 main::@return +Successful SSA optimization Pass2ConstantSimplification Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -374,7 +361,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@1 main::@1_1 main::@1_2 main::@1_3 main::@1_4 main::@1_5 main::@1_6 main::@1_7 main::@1_8 main::@1_9 main::@1_10 main::@2 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/unroll-screenfill-for-double.log b/src/test/java/dk/camelot64/kickc/test/ref/unroll-screenfill-for-double.log index 5e0373b4f..ab33a4982 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/unroll-screenfill-for-double.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/unroll-screenfill-for-double.log @@ -141,190 +141,179 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::x#2 = (byte) main::x#3 Alias (byte*) main::SCREEN#1 = (byte*) main::SCREEN#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::SCREEN#1 Self Phi Eliminated (byte) main::x#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::SCREEN#1 (byte*) main::SCREEN#2 Redundant Phi (byte) main::x#2 (byte) main::x#4 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$2 unroll if((byte) main::line#1!=rangelast(0,10)) goto main::@2 Simple Condition (bool~) main::$3 unroll if((byte) main::x#1!=rangelast(0,10)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = ((byte*))1024 Constant (const byte) main::x#0 = 0 Constant (const byte) main::line#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::line#1 ← ++ main::line#2 to ++ Resolved ranged comparison value unroll if(main::line#1!=rangelast(0,10)) goto main::@2 to (byte/signed byte/word/signed word/dword/signed dword) 11 Resolved ranged next value main::x#1 ← ++ main::x#4 to ++ Resolved ranged comparison value unroll if(main::x#1!=rangelast(0,10)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 11 Self Phi Eliminated (byte*) main::SCREEN#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::SCREEN#2 (const byte*) main::SCREEN#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Unrolling loop Loop head: main::@2 tails: main::@2 blocks: main::@2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#2 (const byte) main::line#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$0 = main::line#0*40 Constant (const byte) main::line#1 = ++main::line#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$1 = main::SCREEN#0+main::$0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [6] if((const byte) main::line#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@2_1 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_1 tails: main::@2_1 blocks: main::@2_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#3 (const byte) main::line#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$4 = main::line#1*40 Constant (const byte) main::line#4 = ++main::line#1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$5 = main::SCREEN#0+main::$4 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [8] if((const byte) main::line#4!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@2_2 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_2 tails: main::@2_2 blocks: main::@2_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#5 (const byte) main::line#4 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$6 = main::line#4*40 Constant (const byte) main::line#6 = ++main::line#4 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$7 = main::SCREEN#0+main::$6 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [9] if((const byte) main::line#6!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@2_3 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_3 tails: main::@2_3 blocks: main::@2_3 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#7 (const byte) main::line#6 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$8 = main::line#6*40 Constant (const byte) main::line#8 = ++main::line#6 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$9 = main::SCREEN#0+main::$8 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [10] if((const byte) main::line#8!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@2_4 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_4 tails: main::@2_4 blocks: main::@2_4 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#9 (const byte) main::line#8 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$10 = main::line#8*40 Constant (const byte) main::line#10 = ++main::line#8 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$11 = main::SCREEN#0+main::$10 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [11] if((const byte) main::line#10!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@2_5 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_5 tails: main::@2_5 blocks: main::@2_5 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#11 (const byte) main::line#10 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$12 = main::line#10*40 Constant (const byte) main::line#12 = ++main::line#10 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$13 = main::SCREEN#0+main::$12 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [12] if((const byte) main::line#12!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@2_6 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_6 tails: main::@2_6 blocks: main::@2_6 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#13 (const byte) main::line#12 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$14 = main::line#12*40 Constant (const byte) main::line#14 = ++main::line#12 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$15 = main::SCREEN#0+main::$14 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [13] if((const byte) main::line#14!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@2_7 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_7 tails: main::@2_7 blocks: main::@2_7 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#15 (const byte) main::line#14 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$16 = main::line#14*40 Constant (const byte) main::line#16 = ++main::line#14 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$17 = main::SCREEN#0+main::$16 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [14] if((const byte) main::line#16!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@2_8 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_8 tails: main::@2_8 blocks: main::@2_8 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#17 (const byte) main::line#16 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$18 = main::line#16*40 Constant (const byte) main::line#18 = ++main::line#16 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$19 = main::SCREEN#0+main::$18 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [15] if((const byte) main::line#18!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@2_9 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_9 tails: main::@2_9 blocks: main::@2_9 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#19 (const byte) main::line#18 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$20 = main::line#18*40 Constant (const byte) main::line#20 = ++main::line#18 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$21 = main::SCREEN#0+main::$20 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [16] if((const byte) main::line#20!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@2_10 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_10 tails: main::@2_10 blocks: main::@2_10 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#21 (const byte) main::line#20 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$22 = main::line#20*40 Constant (const byte) main::line#22 = ++main::line#20 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$23 = main::SCREEN#0+main::$22 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Removing PHI-reference to removed block (main::@2_10) in block main::@2_11 if() condition always false - eliminating [17] if((const byte) main::line#22!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@2_11 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating unused constant (const byte) main::line#22 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating variable (byte) main::line#23 from unused block main::@2_11 Eliminating variable (byte/signed word/word/dword/signed dword~) main::$24 from unused block main::@2_11 Eliminating variable (byte*~) main::$25 from unused block main::@2_11 Eliminating variable (byte) main::line#24 from unused block main::@2_11 Removing unused block main::@2_11 -Succesful SSA optimization Pass2EliminateUnusedBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@3 main::@return +Successful SSA optimization Pass2EliminateUnusedBlocks Unrolling loop Loop head: main::@1 tails: main::@3 blocks: main::@3 main::@2_10 main::@2_9 main::@2_8 main::@2_7 main::@2_6 main::@2_5 main::@2_4 main::@2_3 main::@2_2 main::@2_1 main::@2 main::@1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::x#4 (const byte) main::x#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::x#1 = ++main::x#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::$1+main::x#0) Consolidated array index constant in *(main::$5+main::x#0) Consolidated array index constant in *(main::$7+main::x#0) @@ -336,20 +325,19 @@ Consolidated array index constant in *(main::$17+main::x#0) Consolidated array index constant in *(main::$19+main::x#0) Consolidated array index constant in *(main::$21+main::x#0) Consolidated array index constant in *(main::$23+main::x#0) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination [14] if((const byte) main::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1_1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@1 Culled Empty Block (label) main::@3 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@1_1 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@3_1 main::@return +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@1_1 tails: main::@3_1 blocks: main::@3_1 main::@2_21 main::@2_20 main::@2_19 main::@2_18 main::@2_17 main::@2_16 main::@2_15 main::@2_14 main::@2_13 main::@2_12 main::@2_11 main::@1_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::x#5 (const byte) main::x#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::x#6 = ++main::x#1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::$1+main::x#1) Consolidated array index constant in *(main::$5+main::x#1) Consolidated array index constant in *(main::$7+main::x#1) @@ -361,20 +349,19 @@ Consolidated array index constant in *(main::$17+main::x#1) Consolidated array index constant in *(main::$19+main::x#1) Consolidated array index constant in *(main::$21+main::x#1) Consolidated array index constant in *(main::$23+main::x#1) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination [25] if((const byte) main::x#6!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1_2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@3_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@1_2 main::@2_22 main::@2_23 main::@2_24 main::@2_25 main::@2_26 main::@2_27 main::@2_28 main::@2_29 main::@2_30 main::@2_31 main::@2_32 main::@3_2 main::@return +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@1_2 tails: main::@3_2 blocks: main::@3_2 main::@2_32 main::@2_31 main::@2_30 main::@2_29 main::@2_28 main::@2_27 main::@2_26 main::@2_25 main::@2_24 main::@2_23 main::@2_22 main::@1_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::x#7 (const byte) main::x#6 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::x#8 = ++main::x#6 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::$1+main::x#6) Consolidated array index constant in *(main::$5+main::x#6) Consolidated array index constant in *(main::$7+main::x#6) @@ -386,20 +373,19 @@ Consolidated array index constant in *(main::$17+main::x#6) Consolidated array index constant in *(main::$19+main::x#6) Consolidated array index constant in *(main::$21+main::x#6) Consolidated array index constant in *(main::$23+main::x#6) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination [36] if((const byte) main::x#8!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1_1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@1_2 Culled Empty Block (label) main::@3_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@2_25 main::@2_26 main::@2_27 main::@2_28 main::@2_29 main::@2_30 main::@2_31 main::@2_32 main::@1_1 main::@2_33 main::@2_34 main::@2_35 main::@2_36 main::@2_37 main::@2_38 main::@2_39 main::@2_40 main::@2_41 main::@2_42 main::@2_43 main::@3_1 main::@return +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@1_1 tails: main::@3_1 blocks: main::@3_1 main::@2_43 main::@2_42 main::@2_41 main::@2_40 main::@2_39 main::@2_38 main::@2_37 main::@2_36 main::@2_35 main::@2_34 main::@2_33 main::@1_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::x#9 (const byte) main::x#8 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::x#10 = ++main::x#8 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::$1+main::x#8) Consolidated array index constant in *(main::$5+main::x#8) Consolidated array index constant in *(main::$7+main::x#8) @@ -411,20 +397,19 @@ Consolidated array index constant in *(main::$17+main::x#8) Consolidated array index constant in *(main::$19+main::x#8) Consolidated array index constant in *(main::$21+main::x#8) Consolidated array index constant in *(main::$23+main::x#8) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination [47] if((const byte) main::x#10!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1_2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@3_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@2_25 main::@2_26 main::@2_27 main::@2_28 main::@2_29 main::@2_30 main::@2_31 main::@2_32 main::@2_33 main::@2_34 main::@2_35 main::@2_36 main::@2_37 main::@2_38 main::@2_39 main::@2_40 main::@2_41 main::@2_42 main::@2_43 main::@1_2 main::@2_44 main::@2_45 main::@2_46 main::@2_47 main::@2_48 main::@2_49 main::@2_50 main::@2_51 main::@2_52 main::@2_53 main::@2_54 main::@3_2 main::@return +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@1_2 tails: main::@3_2 blocks: main::@3_2 main::@2_54 main::@2_53 main::@2_52 main::@2_51 main::@2_50 main::@2_49 main::@2_48 main::@2_47 main::@2_46 main::@2_45 main::@2_44 main::@1_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::x#11 (const byte) main::x#10 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::x#12 = ++main::x#10 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::$1+main::x#10) Consolidated array index constant in *(main::$5+main::x#10) Consolidated array index constant in *(main::$7+main::x#10) @@ -436,20 +421,19 @@ Consolidated array index constant in *(main::$17+main::x#10) Consolidated array index constant in *(main::$19+main::x#10) Consolidated array index constant in *(main::$21+main::x#10) Consolidated array index constant in *(main::$23+main::x#10) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination [58] if((const byte) main::x#12!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1_1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@1_2 Culled Empty Block (label) main::@3_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@2_25 main::@2_26 main::@2_27 main::@2_28 main::@2_29 main::@2_30 main::@2_31 main::@2_32 main::@2_33 main::@2_34 main::@2_35 main::@2_36 main::@2_37 main::@2_38 main::@2_39 main::@2_40 main::@2_41 main::@2_42 main::@2_43 main::@2_44 main::@2_45 main::@2_46 main::@2_47 main::@2_48 main::@2_49 main::@2_50 main::@2_51 main::@2_52 main::@2_53 main::@2_54 main::@1_1 main::@2_55 main::@2_56 main::@2_57 main::@2_58 main::@2_59 main::@2_60 main::@2_61 main::@2_62 main::@2_63 main::@2_64 main::@2_65 main::@3_1 main::@return +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@1_1 tails: main::@3_1 blocks: main::@3_1 main::@2_65 main::@2_64 main::@2_63 main::@2_62 main::@2_61 main::@2_60 main::@2_59 main::@2_58 main::@2_57 main::@2_56 main::@2_55 main::@1_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::x#13 (const byte) main::x#12 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::x#14 = ++main::x#12 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::$1+main::x#12) Consolidated array index constant in *(main::$5+main::x#12) Consolidated array index constant in *(main::$7+main::x#12) @@ -461,20 +445,19 @@ Consolidated array index constant in *(main::$17+main::x#12) Consolidated array index constant in *(main::$19+main::x#12) Consolidated array index constant in *(main::$21+main::x#12) Consolidated array index constant in *(main::$23+main::x#12) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination [69] if((const byte) main::x#14!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1_2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@3_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@2_25 main::@2_26 main::@2_27 main::@2_28 main::@2_29 main::@2_30 main::@2_31 main::@2_32 main::@2_33 main::@2_34 main::@2_35 main::@2_36 main::@2_37 main::@2_38 main::@2_39 main::@2_40 main::@2_41 main::@2_42 main::@2_43 main::@2_44 main::@2_45 main::@2_46 main::@2_47 main::@2_48 main::@2_49 main::@2_50 main::@2_51 main::@2_52 main::@2_53 main::@2_54 main::@2_55 main::@2_56 main::@2_57 main::@2_58 main::@2_59 main::@2_60 main::@2_61 main::@2_62 main::@2_63 main::@2_64 main::@2_65 main::@1_2 main::@2_66 main::@2_67 main::@2_68 main::@2_69 main::@2_70 main::@2_71 main::@2_72 main::@2_73 main::@2_74 main::@2_75 main::@2_76 main::@3_2 main::@return +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@1_2 tails: main::@3_2 blocks: main::@3_2 main::@2_76 main::@2_75 main::@2_74 main::@2_73 main::@2_72 main::@2_71 main::@2_70 main::@2_69 main::@2_68 main::@2_67 main::@2_66 main::@1_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::x#15 (const byte) main::x#14 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::x#16 = ++main::x#14 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::$1+main::x#14) Consolidated array index constant in *(main::$5+main::x#14) Consolidated array index constant in *(main::$7+main::x#14) @@ -486,20 +469,19 @@ Consolidated array index constant in *(main::$17+main::x#14) Consolidated array index constant in *(main::$19+main::x#14) Consolidated array index constant in *(main::$21+main::x#14) Consolidated array index constant in *(main::$23+main::x#14) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination [80] if((const byte) main::x#16!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1_1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@1_2 Culled Empty Block (label) main::@3_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@2_25 main::@2_26 main::@2_27 main::@2_28 main::@2_29 main::@2_30 main::@2_31 main::@2_32 main::@2_33 main::@2_34 main::@2_35 main::@2_36 main::@2_37 main::@2_38 main::@2_39 main::@2_40 main::@2_41 main::@2_42 main::@2_43 main::@2_44 main::@2_45 main::@2_46 main::@2_47 main::@2_48 main::@2_49 main::@2_50 main::@2_51 main::@2_52 main::@2_53 main::@2_54 main::@2_55 main::@2_56 main::@2_57 main::@2_58 main::@2_59 main::@2_60 main::@2_61 main::@2_62 main::@2_63 main::@2_64 main::@2_65 main::@2_66 main::@2_67 main::@2_68 main::@2_69 main::@2_70 main::@2_71 main::@2_72 main::@2_73 main::@2_74 main::@2_75 main::@2_76 main::@1_1 main::@2_77 main::@2_78 main::@2_79 main::@2_80 main::@2_81 main::@2_82 main::@2_83 main::@2_84 main::@2_85 main::@2_86 main::@2_87 main::@3_1 main::@return +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@1_1 tails: main::@3_1 blocks: main::@3_1 main::@2_87 main::@2_86 main::@2_85 main::@2_84 main::@2_83 main::@2_82 main::@2_81 main::@2_80 main::@2_79 main::@2_78 main::@2_77 main::@1_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::x#17 (const byte) main::x#16 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::x#18 = ++main::x#16 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::$1+main::x#16) Consolidated array index constant in *(main::$5+main::x#16) Consolidated array index constant in *(main::$7+main::x#16) @@ -511,20 +493,19 @@ Consolidated array index constant in *(main::$17+main::x#16) Consolidated array index constant in *(main::$19+main::x#16) Consolidated array index constant in *(main::$21+main::x#16) Consolidated array index constant in *(main::$23+main::x#16) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination [91] if((const byte) main::x#18!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1_2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@3_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@2_25 main::@2_26 main::@2_27 main::@2_28 main::@2_29 main::@2_30 main::@2_31 main::@2_32 main::@2_33 main::@2_34 main::@2_35 main::@2_36 main::@2_37 main::@2_38 main::@2_39 main::@2_40 main::@2_41 main::@2_42 main::@2_43 main::@2_44 main::@2_45 main::@2_46 main::@2_47 main::@2_48 main::@2_49 main::@2_50 main::@2_51 main::@2_52 main::@2_53 main::@2_54 main::@2_55 main::@2_56 main::@2_57 main::@2_58 main::@2_59 main::@2_60 main::@2_61 main::@2_62 main::@2_63 main::@2_64 main::@2_65 main::@2_66 main::@2_67 main::@2_68 main::@2_69 main::@2_70 main::@2_71 main::@2_72 main::@2_73 main::@2_74 main::@2_75 main::@2_76 main::@2_77 main::@2_78 main::@2_79 main::@2_80 main::@2_81 main::@2_82 main::@2_83 main::@2_84 main::@2_85 main::@2_86 main::@2_87 main::@1_2 main::@2_88 main::@2_89 main::@2_90 main::@2_91 main::@2_92 main::@2_93 main::@2_94 main::@2_95 main::@2_96 main::@2_97 main::@2_98 main::@3_2 main::@return +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@1_2 tails: main::@3_2 blocks: main::@3_2 main::@2_98 main::@2_97 main::@2_96 main::@2_95 main::@2_94 main::@2_93 main::@2_92 main::@2_91 main::@2_90 main::@2_89 main::@2_88 main::@1_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::x#19 (const byte) main::x#18 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::x#20 = ++main::x#18 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::$1+main::x#18) Consolidated array index constant in *(main::$5+main::x#18) Consolidated array index constant in *(main::$7+main::x#18) @@ -536,20 +517,19 @@ Consolidated array index constant in *(main::$17+main::x#18) Consolidated array index constant in *(main::$19+main::x#18) Consolidated array index constant in *(main::$21+main::x#18) Consolidated array index constant in *(main::$23+main::x#18) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination [102] if((const byte) main::x#20!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1_1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@1_2 Culled Empty Block (label) main::@3_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@2_25 main::@2_26 main::@2_27 main::@2_28 main::@2_29 main::@2_30 main::@2_31 main::@2_32 main::@2_33 main::@2_34 main::@2_35 main::@2_36 main::@2_37 main::@2_38 main::@2_39 main::@2_40 main::@2_41 main::@2_42 main::@2_43 main::@2_44 main::@2_45 main::@2_46 main::@2_47 main::@2_48 main::@2_49 main::@2_50 main::@2_51 main::@2_52 main::@2_53 main::@2_54 main::@2_55 main::@2_56 main::@2_57 main::@2_58 main::@2_59 main::@2_60 main::@2_61 main::@2_62 main::@2_63 main::@2_64 main::@2_65 main::@2_66 main::@2_67 main::@2_68 main::@2_69 main::@2_70 main::@2_71 main::@2_72 main::@2_73 main::@2_74 main::@2_75 main::@2_76 main::@2_77 main::@2_78 main::@2_79 main::@2_80 main::@2_81 main::@2_82 main::@2_83 main::@2_84 main::@2_85 main::@2_86 main::@2_87 main::@2_88 main::@2_89 main::@2_90 main::@2_91 main::@2_92 main::@2_93 main::@2_94 main::@2_95 main::@2_96 main::@2_97 main::@2_98 main::@1_1 main::@2_99 main::@2_100 main::@2_101 main::@2_102 main::@2_103 main::@2_104 main::@2_105 main::@2_106 main::@2_107 main::@2_108 main::@2_109 main::@3_1 main::@return +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@1_1 tails: main::@3_1 blocks: main::@3_1 main::@2_109 main::@2_108 main::@2_107 main::@2_106 main::@2_105 main::@2_104 main::@2_103 main::@2_102 main::@2_101 main::@2_100 main::@2_99 main::@1_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::x#21 (const byte) main::x#20 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::x#22 = ++main::x#20 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::$1+main::x#20) Consolidated array index constant in *(main::$5+main::x#20) Consolidated array index constant in *(main::$7+main::x#20) @@ -561,20 +541,19 @@ Consolidated array index constant in *(main::$17+main::x#20) Consolidated array index constant in *(main::$19+main::x#20) Consolidated array index constant in *(main::$21+main::x#20) Consolidated array index constant in *(main::$23+main::x#20) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination [113] if((const byte) main::x#22!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1_2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@1_1 Culled Empty Block (label) main::@3_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@2_25 main::@2_26 main::@2_27 main::@2_28 main::@2_29 main::@2_30 main::@2_31 main::@2_32 main::@2_33 main::@2_34 main::@2_35 main::@2_36 main::@2_37 main::@2_38 main::@2_39 main::@2_40 main::@2_41 main::@2_42 main::@2_43 main::@2_44 main::@2_45 main::@2_46 main::@2_47 main::@2_48 main::@2_49 main::@2_50 main::@2_51 main::@2_52 main::@2_53 main::@2_54 main::@2_55 main::@2_56 main::@2_57 main::@2_58 main::@2_59 main::@2_60 main::@2_61 main::@2_62 main::@2_63 main::@2_64 main::@2_65 main::@2_66 main::@2_67 main::@2_68 main::@2_69 main::@2_70 main::@2_71 main::@2_72 main::@2_73 main::@2_74 main::@2_75 main::@2_76 main::@2_77 main::@2_78 main::@2_79 main::@2_80 main::@2_81 main::@2_82 main::@2_83 main::@2_84 main::@2_85 main::@2_86 main::@2_87 main::@2_88 main::@2_89 main::@2_90 main::@2_91 main::@2_92 main::@2_93 main::@2_94 main::@2_95 main::@2_96 main::@2_97 main::@2_98 main::@2_99 main::@2_100 main::@2_101 main::@2_102 main::@2_103 main::@2_104 main::@2_105 main::@2_106 main::@2_107 main::@2_108 main::@2_109 main::@1_2 main::@2_110 main::@2_111 main::@2_112 main::@2_113 main::@2_114 main::@2_115 main::@2_116 main::@2_117 main::@2_118 main::@2_119 main::@2_120 main::@3_2 main::@return +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@1_2 tails: main::@3_2 blocks: main::@3_2 main::@2_120 main::@2_119 main::@2_118 main::@2_117 main::@2_116 main::@2_115 main::@2_114 main::@2_113 main::@2_112 main::@2_111 main::@2_110 main::@1_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::x#23 (const byte) main::x#22 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte) main::x#24 = ++main::x#22 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::$1+main::x#22) Consolidated array index constant in *(main::$5+main::x#22) Consolidated array index constant in *(main::$7+main::x#22) @@ -586,12 +565,12 @@ Consolidated array index constant in *(main::$17+main::x#22) Consolidated array index constant in *(main::$19+main::x#22) Consolidated array index constant in *(main::$21+main::x#22) Consolidated array index constant in *(main::$23+main::x#22) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination Removing PHI-reference to removed block (main::@3_2) in block main::@1_1 if() condition always false - eliminating [124] if((const byte) main::x#24!=(byte/signed byte/word/signed word/dword/signed dword) 11) goto main::@1_1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating unused constant (const byte) main::x#24 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating variable (byte) main::x#25 from unused block main::@1_1 Eliminating variable (byte) main::x#26 from unused block main::@3_1 Removing unused block main::@1_1 @@ -607,11 +586,10 @@ Removing unused block main::@2_129 Removing unused block main::@2_130 Removing unused block main::@2_131 Removing unused block main::@3_1 -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) main::@1_2 Culled Empty Block (label) main::@3_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@2_25 main::@2_26 main::@2_27 main::@2_28 main::@2_29 main::@2_30 main::@2_31 main::@2_32 main::@2_33 main::@2_34 main::@2_35 main::@2_36 main::@2_37 main::@2_38 main::@2_39 main::@2_40 main::@2_41 main::@2_42 main::@2_43 main::@2_44 main::@2_45 main::@2_46 main::@2_47 main::@2_48 main::@2_49 main::@2_50 main::@2_51 main::@2_52 main::@2_53 main::@2_54 main::@2_55 main::@2_56 main::@2_57 main::@2_58 main::@2_59 main::@2_60 main::@2_61 main::@2_62 main::@2_63 main::@2_64 main::@2_65 main::@2_66 main::@2_67 main::@2_68 main::@2_69 main::@2_70 main::@2_71 main::@2_72 main::@2_73 main::@2_74 main::@2_75 main::@2_76 main::@2_77 main::@2_78 main::@2_79 main::@2_80 main::@2_81 main::@2_82 main::@2_83 main::@2_84 main::@2_85 main::@2_86 main::@2_87 main::@2_88 main::@2_89 main::@2_90 main::@2_91 main::@2_92 main::@2_93 main::@2_94 main::@2_95 main::@2_96 main::@2_97 main::@2_98 main::@2_99 main::@2_100 main::@2_101 main::@2_102 main::@2_103 main::@2_104 main::@2_105 main::@2_106 main::@2_107 main::@2_108 main::@2_109 main::@2_110 main::@2_111 main::@2_112 main::@2_113 main::@2_114 main::@2_115 main::@2_116 main::@2_117 main::@2_118 main::@2_119 main::@2_120 main::@return +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with different constant siblings (const byte) main::x#0 Inlining constant with different constant siblings (const byte) main::line#0 @@ -679,7 +657,7 @@ Constant inlined main::$7 = (const byte*) main::SCREEN#0+++++(byte/signed byte/w Constant inlined main::line#16 = ++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::$8 = ++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) 40 Constant inlined main::x#20 = ++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero main::SCREEN#0+0*40+0 Simplifying constant multiply by zero 0*40 Simplifying constant plus zero main::SCREEN#0+++0*40+0 @@ -941,7 +919,7 @@ Simplifying constant integer increment ++9 Simplifying constant integer increment ++9 Simplifying constant integer increment ++9 Simplifying constant integer increment ++9 -Succesful SSA optimization Pass2ConstantSimplification +Successful SSA optimization Pass2ConstantSimplification Simplifying constant plus zero main::SCREEN#0+0 Simplifying constant integer increment ++1 Simplifying constant integer increment ++2 @@ -952,9 +930,7 @@ Simplifying constant integer increment ++6 Simplifying constant integer increment ++7 Simplifying constant integer increment ++8 Simplifying constant integer increment ++9 -Succesful SSA optimization Pass2ConstantSimplification -Block Sequence Planned @begin @1 @end main main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@2_25 main::@2_26 main::@2_27 main::@2_28 main::@2_29 main::@2_30 main::@2_31 main::@2_32 main::@2_33 main::@2_34 main::@2_35 main::@2_36 main::@2_37 main::@2_38 main::@2_39 main::@2_40 main::@2_41 main::@2_42 main::@2_43 main::@2_44 main::@2_45 main::@2_46 main::@2_47 main::@2_48 main::@2_49 main::@2_50 main::@2_51 main::@2_52 main::@2_53 main::@2_54 main::@2_55 main::@2_56 main::@2_57 main::@2_58 main::@2_59 main::@2_60 main::@2_61 main::@2_62 main::@2_63 main::@2_64 main::@2_65 main::@2_66 main::@2_67 main::@2_68 main::@2_69 main::@2_70 main::@2_71 main::@2_72 main::@2_73 main::@2_74 main::@2_75 main::@2_76 main::@2_77 main::@2_78 main::@2_79 main::@2_80 main::@2_81 main::@2_82 main::@2_83 main::@2_84 main::@2_85 main::@2_86 main::@2_87 main::@2_88 main::@2_89 main::@2_90 main::@2_91 main::@2_92 main::@2_93 main::@2_94 main::@2_95 main::@2_96 main::@2_97 main::@2_98 main::@2_99 main::@2_100 main::@2_101 main::@2_102 main::@2_103 main::@2_104 main::@2_105 main::@2_106 main::@2_107 main::@2_108 main::@2_109 main::@2_110 main::@2_111 main::@2_112 main::@2_113 main::@2_114 main::@2_115 main::@2_116 main::@2_117 main::@2_118 main::@2_119 main::@2_120 main::@return -Block Sequence Planned @begin @1 @end main main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@2_25 main::@2_26 main::@2_27 main::@2_28 main::@2_29 main::@2_30 main::@2_31 main::@2_32 main::@2_33 main::@2_34 main::@2_35 main::@2_36 main::@2_37 main::@2_38 main::@2_39 main::@2_40 main::@2_41 main::@2_42 main::@2_43 main::@2_44 main::@2_45 main::@2_46 main::@2_47 main::@2_48 main::@2_49 main::@2_50 main::@2_51 main::@2_52 main::@2_53 main::@2_54 main::@2_55 main::@2_56 main::@2_57 main::@2_58 main::@2_59 main::@2_60 main::@2_61 main::@2_62 main::@2_63 main::@2_64 main::@2_65 main::@2_66 main::@2_67 main::@2_68 main::@2_69 main::@2_70 main::@2_71 main::@2_72 main::@2_73 main::@2_74 main::@2_75 main::@2_76 main::@2_77 main::@2_78 main::@2_79 main::@2_80 main::@2_81 main::@2_82 main::@2_83 main::@2_84 main::@2_85 main::@2_86 main::@2_87 main::@2_88 main::@2_89 main::@2_90 main::@2_91 main::@2_92 main::@2_93 main::@2_94 main::@2_95 main::@2_96 main::@2_97 main::@2_98 main::@2_99 main::@2_100 main::@2_101 main::@2_102 main::@2_103 main::@2_104 main::@2_105 main::@2_106 main::@2_107 main::@2_108 main::@2_109 main::@2_110 main::@2_111 main::@2_112 main::@2_113 main::@2_114 main::@2_115 main::@2_116 main::@2_117 main::@2_118 main::@2_119 main::@2_120 main::@return +Successful SSA optimization Pass2ConstantSimplification Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -965,7 +941,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@2_25 main::@2_26 main::@2_27 main::@2_28 main::@2_29 main::@2_30 main::@2_31 main::@2_32 main::@2_33 main::@2_34 main::@2_35 main::@2_36 main::@2_37 main::@2_38 main::@2_39 main::@2_40 main::@2_41 main::@2_42 main::@2_43 main::@2_44 main::@2_45 main::@2_46 main::@2_47 main::@2_48 main::@2_49 main::@2_50 main::@2_51 main::@2_52 main::@2_53 main::@2_54 main::@2_55 main::@2_56 main::@2_57 main::@2_58 main::@2_59 main::@2_60 main::@2_61 main::@2_62 main::@2_63 main::@2_64 main::@2_65 main::@2_66 main::@2_67 main::@2_68 main::@2_69 main::@2_70 main::@2_71 main::@2_72 main::@2_73 main::@2_74 main::@2_75 main::@2_76 main::@2_77 main::@2_78 main::@2_79 main::@2_80 main::@2_81 main::@2_82 main::@2_83 main::@2_84 main::@2_85 main::@2_86 main::@2_87 main::@2_88 main::@2_89 main::@2_90 main::@2_91 main::@2_92 main::@2_93 main::@2_94 main::@2_95 main::@2_96 main::@2_97 main::@2_98 main::@2_99 main::@2_100 main::@2_101 main::@2_102 main::@2_103 main::@2_104 main::@2_105 main::@2_106 main::@2_107 main::@2_108 main::@2_109 main::@2_110 main::@2_111 main::@2_112 main::@2_113 main::@2_114 main::@2_115 main::@2_116 main::@2_117 main::@2_118 main::@2_119 main::@2_120 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/unroll-screenfill-for.log b/src/test/java/dk/camelot64/kickc/test/ref/unroll-screenfill-for.log index 482ef4c35..10554b9a0 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/unroll-screenfill-for.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/unroll-screenfill-for.log @@ -143,365 +143,340 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::x#2 = (byte) main::x#3 Alias (byte*) main::SCREEN#1 = (byte*) main::SCREEN#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::SCREEN#1 Self Phi Eliminated (byte) main::x#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::SCREEN#1 (byte*) main::SCREEN#2 Redundant Phi (byte) main::x#2 (byte) main::x#4 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$2 unroll if((byte) main::line#1!=rangelast(0,24)) goto main::@2 Simple Condition (bool~) main::$3 if((byte) main::x#1!=rangelast(0,39)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = ((byte*))1024 Constant (const byte) main::x#0 = 0 Constant (const byte) main::line#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::line#1 ← ++ main::line#2 to ++ Resolved ranged comparison value unroll if(main::line#1!=rangelast(0,24)) goto main::@2 to (byte/signed byte/word/signed word/dword/signed dword) 25 Resolved ranged next value main::x#1 ← ++ main::x#4 to ++ Resolved ranged comparison value if(main::x#1!=rangelast(0,39)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 40 Self Phi Eliminated (byte*) main::SCREEN#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::SCREEN#2 (const byte*) main::SCREEN#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Unrolling loop Loop head: main::@2 tails: main::@2 blocks: main::@2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#2 (const byte) main::line#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$0 = main::line#0*40 Constant (const byte) main::line#1 = ++main::line#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$1 = main::SCREEN#0+main::$0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [6] if((const byte) main::line#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_1 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_1 tails: main::@2_1 blocks: main::@2_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#3 (const byte) main::line#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$4 = main::line#1*40 Constant (const byte) main::line#4 = ++main::line#1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$5 = main::SCREEN#0+main::$4 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [8] if((const byte) main::line#4!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_2 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_2 tails: main::@2_2 blocks: main::@2_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#5 (const byte) main::line#4 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$6 = main::line#4*40 Constant (const byte) main::line#6 = ++main::line#4 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$7 = main::SCREEN#0+main::$6 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [9] if((const byte) main::line#6!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_3 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_3 tails: main::@2_3 blocks: main::@2_3 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#7 (const byte) main::line#6 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$8 = main::line#6*40 Constant (const byte) main::line#8 = ++main::line#6 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$9 = main::SCREEN#0+main::$8 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [10] if((const byte) main::line#8!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_4 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_4 tails: main::@2_4 blocks: main::@2_4 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#9 (const byte) main::line#8 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$10 = main::line#8*40 Constant (const byte) main::line#10 = ++main::line#8 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$11 = main::SCREEN#0+main::$10 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [11] if((const byte) main::line#10!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_5 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_5 tails: main::@2_5 blocks: main::@2_5 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#11 (const byte) main::line#10 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$12 = main::line#10*40 Constant (const byte) main::line#12 = ++main::line#10 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$13 = main::SCREEN#0+main::$12 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [12] if((const byte) main::line#12!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_6 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_6 tails: main::@2_6 blocks: main::@2_6 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#13 (const byte) main::line#12 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$14 = main::line#12*40 Constant (const byte) main::line#14 = ++main::line#12 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$15 = main::SCREEN#0+main::$14 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [13] if((const byte) main::line#14!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_7 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_7 tails: main::@2_7 blocks: main::@2_7 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#15 (const byte) main::line#14 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$16 = main::line#14*40 Constant (const byte) main::line#16 = ++main::line#14 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$17 = main::SCREEN#0+main::$16 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [14] if((const byte) main::line#16!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_8 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_8 tails: main::@2_8 blocks: main::@2_8 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#17 (const byte) main::line#16 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$18 = main::line#16*40 Constant (const byte) main::line#18 = ++main::line#16 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$19 = main::SCREEN#0+main::$18 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [15] if((const byte) main::line#18!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_9 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_9 tails: main::@2_9 blocks: main::@2_9 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#19 (const byte) main::line#18 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$20 = main::line#18*40 Constant (const byte) main::line#20 = ++main::line#18 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$21 = main::SCREEN#0+main::$20 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [16] if((const byte) main::line#20!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_10 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_10 tails: main::@2_10 blocks: main::@2_10 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#21 (const byte) main::line#20 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$22 = main::line#20*40 Constant (const byte) main::line#22 = ++main::line#20 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$23 = main::SCREEN#0+main::$22 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [17] if((const byte) main::line#22!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_11 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_11 tails: main::@2_11 blocks: main::@2_11 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#23 (const byte) main::line#22 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$24 = main::line#22*40 Constant (const byte) main::line#24 = ++main::line#22 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$25 = main::SCREEN#0+main::$24 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [18] if((const byte) main::line#24!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_12 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_12 tails: main::@2_12 blocks: main::@2_12 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#25 (const byte) main::line#24 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$26 = main::line#24*40 Constant (const byte) main::line#26 = ++main::line#24 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$27 = main::SCREEN#0+main::$26 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [19] if((const byte) main::line#26!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_13 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_13 tails: main::@2_13 blocks: main::@2_13 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#27 (const byte) main::line#26 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$28 = main::line#26*40 Constant (const byte) main::line#28 = ++main::line#26 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$29 = main::SCREEN#0+main::$28 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [20] if((const byte) main::line#28!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_14 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_14 tails: main::@2_14 blocks: main::@2_14 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#29 (const byte) main::line#28 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$30 = main::line#28*40 Constant (const byte) main::line#30 = ++main::line#28 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$31 = main::SCREEN#0+main::$30 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [21] if((const byte) main::line#30!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_15 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_15 tails: main::@2_15 blocks: main::@2_15 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#31 (const byte) main::line#30 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$32 = main::line#30*40 Constant (const byte) main::line#32 = ++main::line#30 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$33 = main::SCREEN#0+main::$32 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [22] if((const byte) main::line#32!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_16 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_16 tails: main::@2_16 blocks: main::@2_16 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#33 (const byte) main::line#32 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$34 = main::line#32*40 Constant (const byte) main::line#34 = ++main::line#32 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$35 = main::SCREEN#0+main::$34 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [23] if((const byte) main::line#34!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_17 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_17 tails: main::@2_17 blocks: main::@2_17 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#35 (const byte) main::line#34 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$36 = main::line#34*40 Constant (const byte) main::line#36 = ++main::line#34 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$37 = main::SCREEN#0+main::$36 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [24] if((const byte) main::line#36!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_18 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_18 tails: main::@2_18 blocks: main::@2_18 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#37 (const byte) main::line#36 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$38 = main::line#36*40 Constant (const byte) main::line#38 = ++main::line#36 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$39 = main::SCREEN#0+main::$38 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [25] if((const byte) main::line#38!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_19 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_19 tails: main::@2_19 blocks: main::@2_19 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#39 (const byte) main::line#38 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$40 = main::line#38*40 Constant (const byte) main::line#40 = ++main::line#38 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$41 = main::SCREEN#0+main::$40 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [26] if((const byte) main::line#40!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_20 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_20 tails: main::@2_20 blocks: main::@2_20 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#41 (const byte) main::line#40 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$42 = main::line#40*40 Constant (const byte) main::line#42 = ++main::line#40 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$43 = main::SCREEN#0+main::$42 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [27] if((const byte) main::line#42!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_21 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_21 tails: main::@2_21 blocks: main::@2_21 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#43 (const byte) main::line#42 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$44 = main::line#42*40 Constant (const byte) main::line#44 = ++main::line#42 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$45 = main::SCREEN#0+main::$44 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [28] if((const byte) main::line#44!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_22 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_22 tails: main::@2_22 blocks: main::@2_22 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#45 (const byte) main::line#44 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$46 = main::line#44*40 Constant (const byte) main::line#46 = ++main::line#44 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$47 = main::SCREEN#0+main::$46 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [29] if((const byte) main::line#46!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_23 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_23 tails: main::@2_23 blocks: main::@2_23 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#47 (const byte) main::line#46 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$48 = main::line#46*40 Constant (const byte) main::line#48 = ++main::line#46 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$49 = main::SCREEN#0+main::$48 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [30] if((const byte) main::line#48!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_24 -Succesful SSA optimization Pass2ConstantIfs -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@3 main::@return +Successful SSA optimization Pass2ConstantIfs Unrolling loop Loop head: main::@2_24 tails: main::@2_24 blocks: main::@2_24 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#49 (const byte) main::line#48 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$50 = main::line#48*40 Constant (const byte) main::line#50 = ++main::line#48 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$51 = main::SCREEN#0+main::$50 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Removing PHI-reference to removed block (main::@2_24) in block main::@2_25 if() condition always false - eliminating [31] if((const byte) main::line#50!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@2_25 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating unused constant (const byte) main::line#50 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating variable (byte) main::line#51 from unused block main::@2_25 Eliminating variable (byte/signed word/word/dword/signed dword~) main::$52 from unused block main::@2_25 Eliminating variable (byte*~) main::$53 from unused block main::@2_25 Eliminating variable (byte) main::line#52 from unused block main::@2_25 Removing unused block main::@2_25 -Succesful SSA optimization Pass2EliminateUnusedBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@3 main::@return +Successful SSA optimization Pass2EliminateUnusedBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::x#0 Inlining constant with different constant siblings (const byte) main::line#0 @@ -605,7 +580,7 @@ Constant inlined main::line#36 = ++++++++++++++++++++++++++++++++++++(byte/signe Constant inlined main::$7 = (const byte*) main::SCREEN#0+++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) 40 Constant inlined main::line#38 = ++++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::$8 = ++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) 40 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant multiply by zero 0*40 Simplifying constant integer increment ++0 Simplifying constant integer increment ++0 @@ -631,7 +606,7 @@ Simplifying constant integer increment ++19 Simplifying constant integer increment ++20 Simplifying constant integer increment ++21 Simplifying constant integer increment ++22 -Succesful SSA optimization Pass2ConstantSimplification +Successful SSA optimization Pass2ConstantSimplification Simplifying constant plus zero main::SCREEN#0+0 Simplifying constant integer increment ++1 Simplifying constant integer increment ++2 @@ -656,10 +631,8 @@ Simplifying constant integer increment ++20 Simplifying constant integer increment ++21 Simplifying constant integer increment ++22 Simplifying constant integer increment ++23 -Succesful SSA optimization Pass2ConstantSimplification -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@3 main::@return +Successful SSA optimization Pass2ConstantSimplification Added new block during phi lifting main::@5(between main::@3 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@3 main::@return main::@5 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -673,7 +646,6 @@ Created 1 initial phi equivalence classes Coalesced [34] main::x#5 ← main::x#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@5 -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@2_1 main::@2_2 main::@2_3 main::@2_4 main::@2_5 main::@2_6 main::@2_7 main::@2_8 main::@2_9 main::@2_10 main::@2_11 main::@2_12 main::@2_13 main::@2_14 main::@2_15 main::@2_16 main::@2_17 main::@2_18 main::@2_19 main::@2_20 main::@2_21 main::@2_22 main::@2_23 main::@2_24 main::@3 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/unroll-screenfill-while.log b/src/test/java/dk/camelot64/kickc/test/ref/unroll-screenfill-while.log index 5ac8922a2..65180be85 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/unroll-screenfill-while.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/unroll-screenfill-while.log @@ -169,417 +169,392 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::line#2 = (byte) main::line#3 Alias (byte*) main::SCREEN#1 = (byte*) main::SCREEN#2 (byte*) main::SCREEN#4 Alias (byte) main::x#2 = (byte) main::x#4 (byte) main::x#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::SCREEN#1 Self Phi Eliminated (byte) main::x#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::SCREEN#1 (byte*) main::SCREEN#3 Redundant Phi (byte) main::x#2 (byte) main::x#5 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$0 unroll if((byte) main::line#2!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3 Simple Condition (bool~) main::$3 if((byte) main::x#1!=rangelast(0,39)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = ((byte*))1024 Constant (const byte) main::x#0 = 0 Constant (const byte) main::line#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::x#1 ← ++ main::x#5 to ++ Resolved ranged comparison value if(main::x#1!=rangelast(0,39)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 40 Self Phi Eliminated (byte*) main::SCREEN#3 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::SCREEN#3 (const byte*) main::SCREEN#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Unrolling loop Loop head: main::@2 tails: main::@3 blocks: main::@3 main::@2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#2 (const byte) main::line#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$1 = main::line#0*40 Constant (const byte) main::line#1 = ++main::line#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$2 = main::SCREEN#0+main::$1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [2] if((const byte) main::line#0!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2_1 main::@4 main::@return main::@3_1 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_1 tails: main::@3_1 blocks: main::@3_1 main::@2_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#4 (const byte) main::line#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$4 = main::line#1*40 Constant (const byte) main::line#5 = ++main::line#1 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$5 = main::SCREEN#0+main::$4 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [4] if((const byte) main::line#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@2_2 main::@4 main::@return main::@3_2 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_2 tails: main::@3_2 blocks: main::@3_2 main::@2_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#6 (const byte) main::line#5 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$6 = main::line#5*40 Constant (const byte) main::line#7 = ++main::line#5 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$7 = main::SCREEN#0+main::$6 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [5] if((const byte) main::line#5!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@2_1 main::@4 main::@return main::@3_3 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_1 tails: main::@3_3 blocks: main::@3_3 main::@2_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#8 (const byte) main::line#7 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$8 = main::line#7*40 Constant (const byte) main::line#9 = ++main::line#7 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$9 = main::SCREEN#0+main::$8 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [6] if((const byte) main::line#7!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_3 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@2_2 main::@4 main::@return main::@3_4 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_2 tails: main::@3_4 blocks: main::@3_4 main::@2_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#10 (const byte) main::line#9 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$10 = main::line#9*40 Constant (const byte) main::line#11 = ++main::line#9 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$11 = main::SCREEN#0+main::$10 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [7] if((const byte) main::line#9!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_4 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@2_1 main::@4 main::@return main::@3_5 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_1 tails: main::@3_5 blocks: main::@3_5 main::@2_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#12 (const byte) main::line#11 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$12 = main::line#11*40 Constant (const byte) main::line#13 = ++main::line#11 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$13 = main::SCREEN#0+main::$12 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [8] if((const byte) main::line#11!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_5 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@2_2 main::@4 main::@return main::@3_6 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_2 tails: main::@3_6 blocks: main::@3_6 main::@2_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#14 (const byte) main::line#13 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte/signed word/word/dword/signed dword) main::$14 = main::line#13*40 Constant (const byte) main::line#15 = ++main::line#13 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$15 = main::SCREEN#0+main::$14 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [9] if((const byte) main::line#13!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_6 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@2_1 main::@4 main::@return main::@3_7 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_1 tails: main::@3_7 blocks: main::@3_7 main::@2_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#16 (const byte) main::line#15 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$16 = main::line#15*40 Constant (const byte) main::line#17 = ++main::line#15 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$17 = main::SCREEN#0+main::$16 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [10] if((const byte) main::line#15!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_7 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@2_2 main::@4 main::@return main::@3_8 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_2 tails: main::@3_8 blocks: main::@3_8 main::@2_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#18 (const byte) main::line#17 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$18 = main::line#17*40 Constant (const byte) main::line#19 = ++main::line#17 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$19 = main::SCREEN#0+main::$18 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [11] if((const byte) main::line#17!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_8 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@2_1 main::@4 main::@return main::@3_9 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_1 tails: main::@3_9 blocks: main::@3_9 main::@2_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#20 (const byte) main::line#19 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$20 = main::line#19*40 Constant (const byte) main::line#21 = ++main::line#19 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$21 = main::SCREEN#0+main::$20 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [12] if((const byte) main::line#19!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_9 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@2_2 main::@4 main::@return main::@3_10 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_2 tails: main::@3_10 blocks: main::@3_10 main::@2_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#22 (const byte) main::line#21 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$22 = main::line#21*40 Constant (const byte) main::line#23 = ++main::line#21 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$23 = main::SCREEN#0+main::$22 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [13] if((const byte) main::line#21!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_10 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@2_1 main::@4 main::@return main::@3_11 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_1 tails: main::@3_11 blocks: main::@3_11 main::@2_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#24 (const byte) main::line#23 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$24 = main::line#23*40 Constant (const byte) main::line#25 = ++main::line#23 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$25 = main::SCREEN#0+main::$24 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [14] if((const byte) main::line#23!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_11 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@2_2 main::@4 main::@return main::@3_12 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_2 tails: main::@3_12 blocks: main::@3_12 main::@2_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#26 (const byte) main::line#25 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$26 = main::line#25*40 Constant (const byte) main::line#27 = ++main::line#25 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$27 = main::SCREEN#0+main::$26 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [15] if((const byte) main::line#25!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_12 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@2_1 main::@4 main::@return main::@3_13 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_1 tails: main::@3_13 blocks: main::@3_13 main::@2_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#28 (const byte) main::line#27 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$28 = main::line#27*40 Constant (const byte) main::line#29 = ++main::line#27 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$29 = main::SCREEN#0+main::$28 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [16] if((const byte) main::line#27!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_13 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@3_13 main::@2_2 main::@4 main::@return main::@3_14 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_2 tails: main::@3_14 blocks: main::@3_14 main::@2_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#30 (const byte) main::line#29 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$30 = main::line#29*40 Constant (const byte) main::line#31 = ++main::line#29 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$31 = main::SCREEN#0+main::$30 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [17] if((const byte) main::line#29!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_14 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@3_13 main::@3_14 main::@2_1 main::@4 main::@return main::@3_15 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_1 tails: main::@3_15 blocks: main::@3_15 main::@2_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#32 (const byte) main::line#31 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$32 = main::line#31*40 Constant (const byte) main::line#33 = ++main::line#31 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$33 = main::SCREEN#0+main::$32 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [18] if((const byte) main::line#31!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_15 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@3_13 main::@3_14 main::@3_15 main::@2_2 main::@4 main::@return main::@3_16 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_2 tails: main::@3_16 blocks: main::@3_16 main::@2_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#34 (const byte) main::line#33 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$34 = main::line#33*40 Constant (const byte) main::line#35 = ++main::line#33 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$35 = main::SCREEN#0+main::$34 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [19] if((const byte) main::line#33!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_16 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@3_13 main::@3_14 main::@3_15 main::@3_16 main::@2_1 main::@4 main::@return main::@3_17 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_1 tails: main::@3_17 blocks: main::@3_17 main::@2_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#36 (const byte) main::line#35 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$36 = main::line#35*40 Constant (const byte) main::line#37 = ++main::line#35 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$37 = main::SCREEN#0+main::$36 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [20] if((const byte) main::line#35!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_17 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@3_13 main::@3_14 main::@3_15 main::@3_16 main::@3_17 main::@2_2 main::@4 main::@return main::@3_18 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_2 tails: main::@3_18 blocks: main::@3_18 main::@2_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#38 (const byte) main::line#37 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$38 = main::line#37*40 Constant (const byte) main::line#39 = ++main::line#37 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$39 = main::SCREEN#0+main::$38 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [21] if((const byte) main::line#37!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_18 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@3_13 main::@3_14 main::@3_15 main::@3_16 main::@3_17 main::@3_18 main::@2_1 main::@4 main::@return main::@3_19 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_1 tails: main::@3_19 blocks: main::@3_19 main::@2_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#40 (const byte) main::line#39 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$40 = main::line#39*40 Constant (const byte) main::line#41 = ++main::line#39 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$41 = main::SCREEN#0+main::$40 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [22] if((const byte) main::line#39!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_19 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@3_13 main::@3_14 main::@3_15 main::@3_16 main::@3_17 main::@3_18 main::@3_19 main::@2_2 main::@4 main::@return main::@3_20 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_2 tails: main::@3_20 blocks: main::@3_20 main::@2_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#42 (const byte) main::line#41 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$42 = main::line#41*40 Constant (const byte) main::line#43 = ++main::line#41 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$43 = main::SCREEN#0+main::$42 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [23] if((const byte) main::line#41!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_20 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@3_13 main::@3_14 main::@3_15 main::@3_16 main::@3_17 main::@3_18 main::@3_19 main::@3_20 main::@2_1 main::@4 main::@return main::@3_21 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_1 tails: main::@3_21 blocks: main::@3_21 main::@2_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#44 (const byte) main::line#43 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$44 = main::line#43*40 Constant (const byte) main::line#45 = ++main::line#43 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$45 = main::SCREEN#0+main::$44 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [24] if((const byte) main::line#43!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_21 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@3_13 main::@3_14 main::@3_15 main::@3_16 main::@3_17 main::@3_18 main::@3_19 main::@3_20 main::@3_21 main::@2_2 main::@4 main::@return main::@3_22 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_2 tails: main::@3_22 blocks: main::@3_22 main::@2_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#46 (const byte) main::line#45 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$46 = main::line#45*40 Constant (const byte) main::line#47 = ++main::line#45 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$47 = main::SCREEN#0+main::$46 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [25] if((const byte) main::line#45!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_22 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@3_13 main::@3_14 main::@3_15 main::@3_16 main::@3_17 main::@3_18 main::@3_19 main::@3_20 main::@3_21 main::@3_22 main::@2_1 main::@4 main::@return main::@3_23 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_1 tails: main::@3_23 blocks: main::@3_23 main::@2_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#48 (const byte) main::line#47 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$48 = main::line#47*40 Constant (const byte) main::line#49 = ++main::line#47 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$49 = main::SCREEN#0+main::$48 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [26] if((const byte) main::line#47!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_23 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_1 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@3_13 main::@3_14 main::@3_15 main::@3_16 main::@3_17 main::@3_18 main::@3_19 main::@3_20 main::@3_21 main::@3_22 main::@3_23 main::@2_2 main::@4 main::@return main::@3_24 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_2 tails: main::@3_24 blocks: main::@3_24 main::@2_2 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#50 (const byte) main::line#49 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$50 = main::line#49*40 Constant (const byte) main::line#51 = ++main::line#49 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$51 = main::SCREEN#0+main::$50 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination [27] if((const byte) main::line#49!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_24 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Culled Empty Block (label) main::@2_2 -Succesful SSA optimization Pass2CullEmptyBlocks -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@3_13 main::@3_14 main::@3_15 main::@3_16 main::@3_17 main::@3_18 main::@3_19 main::@3_20 main::@3_21 main::@3_22 main::@3_23 main::@3_24 main::@2_1 main::@4 main::@return main::@3_25 +Successful SSA optimization Pass2CullEmptyBlocks Unrolling loop Loop head: main::@2_1 tails: main::@3_25 blocks: main::@3_25 main::@2_1 Successful SSA optimization Pass2LoopUnroll OPTIMIZING CONTROL FLOW GRAPH Redundant Phi (byte) main::line#52 (const byte) main::line#51 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const word/signed word/dword/signed dword) main::$52 = main::line#51*40 Constant (const byte) main::line#53 = ++main::line#51 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) main::$53 = main::SCREEN#0+main::$52 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always false - eliminating [28] if((const byte) main::line#51!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto main::@3_25 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating variable (byte) main::line#54 from unused block main::@2_2 Eliminating variable (byte/signed word/word/dword/signed dword~) main::$54 from unused block main::@3_26 Eliminating variable (byte*~) main::$55 from unused block main::@3_26 @@ -588,17 +563,16 @@ Removing PHI-reference to removed block (main::@3_25) in block main::@2_2 Removing unused block main::@3_25 Removing unused block main::@2_2 Removing unused block main::@3_26 -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) main::@2_1 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Eliminating unused constant (const byte) main::line#53 Eliminating unused constant (const byte*) main::$53 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const word/signed word/dword/signed dword) main::$52 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const byte) main::line#51 -Succesful SSA optimization PassNEliminateUnusedVars -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@3_13 main::@3_14 main::@3_15 main::@3_16 main::@3_17 main::@3_18 main::@3_19 main::@3_20 main::@3_21 main::@3_22 main::@3_23 main::@3_24 main::@4 main::@return +Successful SSA optimization PassNEliminateUnusedVars OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::x#0 Inlining constant with different constant siblings (const byte) main::line#0 @@ -702,7 +676,7 @@ Constant inlined main::line#35 = ++++++++++++++++++++++++++++++++++(byte/signed Constant inlined main::$7 = (const byte*) main::SCREEN#0+++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) 40 Constant inlined main::$8 = ++++++(byte/signed byte/word/signed word/dword/signed dword) 0*(byte/signed byte/word/signed word/dword/signed dword) 40 Constant inlined main::line#37 = ++++++++++++++++++++++++++++++++++++(byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant multiply by zero 0*40 Simplifying constant integer increment ++0 Simplifying constant integer increment ++0 @@ -728,7 +702,7 @@ Simplifying constant integer increment ++19 Simplifying constant integer increment ++20 Simplifying constant integer increment ++21 Simplifying constant integer increment ++22 -Succesful SSA optimization Pass2ConstantSimplification +Successful SSA optimization Pass2ConstantSimplification Simplifying constant plus zero main::SCREEN#0+0 Simplifying constant integer increment ++1 Simplifying constant integer increment ++2 @@ -753,10 +727,8 @@ Simplifying constant integer increment ++20 Simplifying constant integer increment ++21 Simplifying constant integer increment ++22 Simplifying constant integer increment ++23 -Succesful SSA optimization Pass2ConstantSimplification -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@3_13 main::@3_14 main::@3_15 main::@3_16 main::@3_17 main::@3_18 main::@3_19 main::@3_20 main::@3_21 main::@3_22 main::@3_23 main::@3_24 main::@4 main::@return +Successful SSA optimization Pass2ConstantSimplification Added new block during phi lifting main::@9(between main::@4 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@3_13 main::@3_14 main::@3_15 main::@3_16 main::@3_17 main::@3_18 main::@3_19 main::@3_20 main::@3_21 main::@3_22 main::@3_23 main::@3_24 main::@4 main::@return main::@9 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -770,7 +742,6 @@ Created 1 initial phi equivalence classes Coalesced [34] main::x#6 ← main::x#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@9 -Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@3_1 main::@3_2 main::@3_3 main::@3_4 main::@3_5 main::@3_6 main::@3_7 main::@3_8 main::@3_9 main::@3_10 main::@3_11 main::@3_12 main::@3_13 main::@3_14 main::@3_15 main::@3_16 main::@3_17 main::@3_18 main::@3_19 main::@3_20 main::@3_21 main::@3_22 main::@3_23 main::@3_24 main::@4 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/unused-method.log b/src/test/java/dk/camelot64/kickc/test/ref/unused-method.log index ed6656f0e..4a9be1549 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/unused-method.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/unused-method.log @@ -86,15 +86,13 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Constant (const byte*) main::screen#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(main::screen#0+0) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination OPTIMIZING CONTROL FLOW GRAPH Simplifying constant plus zero main::screen#0+0 -Block Sequence Planned @begin @2 @end main main::@return -Block Sequence Planned @begin @2 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -104,7 +102,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @2 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/unused-vars.log b/src/test/java/dk/camelot64/kickc/test/ref/unused-vars.log index 01f05ff65..860c80908 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/unused-vars.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/unused-vars.log @@ -287,14 +287,14 @@ Alias (byte) b#3 = (byte) b#9 (byte) b#8 Alias (byte) s::return#1 = (byte) s::return#3 (byte) s::return#2 Alias (byte) b#11 = (byte) b#4 (byte) b#5 Alias (byte) b#12 = (byte) b#6 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Not aliassing identity: main::col#1 main::col#1 Not aliassing identity: main::COLS#1 main::COLS#1 Not aliassing identity: b#3 b#3 Self Phi Eliminated (byte) main::col#1 Self Phi Eliminated (byte*) main::COLS#1 Self Phi Eliminated (byte) b#3 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) b#13 (byte) b#0 Redundant Phi (byte) b#1 (byte) b#11 Redundant Phi (byte) main::col#1 (byte) main::col#0 @@ -302,30 +302,30 @@ Redundant Phi (byte*) main::COLS#1 (byte*) main::COLS#0 Redundant Phi (byte) b#3 (byte) b#2 Redundant Phi (byte) b#10 (byte) b#13 Redundant Phi (byte) b#12 (byte) b#3 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$8 if((byte) main::i#1!=rangelast(0,100)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte) b#0 = 2>>1 Constant (const byte) main::col#0 = 2 Constant (const byte*) main::COLS#0 = ((byte*))55296 Constant (const byte) main::i#0 = 0 Constant (const byte) s::return#1 = 2 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) s::return#0 = s::return#1 Constant (const byte) b#11 = ++b#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte) b#2 = ++b#11 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Eliminating unused constant (const byte) s::return#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Eliminating unused constant (const byte) s::return#1 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,100)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 101 Culled Empty Block (label) main::@3 Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Inlining constant with different constant siblings (const byte) b#0 @@ -335,10 +335,8 @@ Constant inlined b#2 = ++++(byte/signed byte/word/signed word/dword/signed dword Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined b#11 = ++(byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1 Constant inlined b#0 = (byte/signed byte/word/signed word/dword/signed dword) 2>>(byte/signed byte/word/signed word/dword/signed dword) 1 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@1 main::@return s s::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@4(between main::@1 and main::@1) -Block Sequence Planned @begin @2 @end main main::@1 main::@return main::@4 s s::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -354,7 +352,6 @@ Created 1 initial phi equivalence classes Coalesced [12] main::i#3 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@4 -Block Sequence Planned @begin @2 @end main main::@1 main::@return s s::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/unusedblockproblem.log b/src/test/java/dk/camelot64/kickc/test/ref/unusedblockproblem.log index 21e534cd1..ff032dfee 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/unusedblockproblem.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/unusedblockproblem.log @@ -137,36 +137,34 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) main::SCREEN#1 = (byte*) main::SCREEN#3 (byte*) main::SCREEN#4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::SCREEN#1 Self Phi Eliminated (byte*) main::SCREEN#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::SCREEN#1 (byte*) main::SCREEN#0 Redundant Phi (byte*) main::SCREEN#2 (byte*) main::SCREEN#1 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$0 if((byte) main::line#1!=rangelast(0,24)) goto main::@4 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = ((byte*))1024 Constant (const byte) main::line#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification if() condition always true - replacing block destination if(true) goto main::@2 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Eliminating variable (byte) main::line#2 from unused block main::@4 Eliminating variable (byte) main::line#1 from unused block main::@4 Removing PHI-reference to removed block (main::@3) in block main::@4 Removing unused block main::@3 Removing unused block main::@4 Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Culled Empty Block (label) main::@1 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Eliminating unused constant (const byte) main::line#0 -Succesful SSA optimization PassNEliminateUnusedVars +Successful SSA optimization PassNEliminateUnusedVars OPTIMIZING CONTROL FLOW GRAPH -Block Sequence Planned @begin @1 @end main main::@2 -Block Sequence Planned @begin @1 @end main main::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -177,7 +175,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@2 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/useglobal.log b/src/test/java/dk/camelot64/kickc/test/ref/useglobal.log index 09653011f..8919ce644 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/useglobal.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/useglobal.log @@ -66,16 +66,14 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) SCREEN#0 = (byte*) SCREEN#2 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Constant (const byte*) SCREEN#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH -Block Sequence Planned @begin @1 @end main main::@return -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -85,7 +83,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/var-forward-problem.log b/src/test/java/dk/camelot64/kickc/test/ref/var-forward-problem.log index cf22333d9..8ca35b9ff 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/var-forward-problem.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/var-forward-problem.log @@ -71,13 +71,11 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Constant (const byte*) screen#0 = ((byte*))1024 Constant (const byte) b#0 = 'a' -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification OPTIMIZING CONTROL FLOW GRAPH -Block Sequence Planned @begin @1 @end main main::@return -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -87,7 +85,6 @@ Calls in [] to main:2 Propagating live ranges... Created 0 initial phi equivalence classes Coalesced down to 0 phi equivalence classes -Block Sequence Planned @begin @1 @end main main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/var-register.log b/src/test/java/dk/camelot64/kickc/test/ref/var-register.log index 3f502ea02..17071aa35 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/var-register.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/var-register.log @@ -221,29 +221,29 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @3 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) main::val1#0 = (byte~) main::$0 Alias (byte) main::a#2 = (byte) main::a#3 Alias (byte) main::x#2 = (byte) main::x#5 (byte) main::x#6 (byte) main::x#3 Alias (byte) main::y#2 = (byte) main::y#5 (byte) main::y#3 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) main::x#2 Self Phi Eliminated (byte) main::y#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) main::x#2 (byte) main::x#4 Redundant Phi (byte) main::y#2 (byte) main::y#4 Redundant Phi (byte) print::val#1 (byte) print::val#0 Redundant Phi (byte) print::idx#1 (byte) print::idx#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$2 if((byte) main::a#1!=rangelast(0,100)) goto main::@3 Simple Condition (bool~) main::$3 if((byte) main::y#1!=rangelast(0,100)) goto main::@2 Simple Condition (bool~) main::$4 if((byte) main::x#1!=rangelast(0,100)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) main::x#0 = 0 Constant (const byte) main::y#0 = 0 Constant (const byte) main::a#0 = 0 Constant (const byte*) print::SCREEN#0 = ((byte*))1024 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::a#1 ← ++ main::a#2 to ++ Resolved ranged comparison value if(main::a#1!=rangelast(0,100)) goto main::@3 to (byte/signed byte/word/signed word/dword/signed dword) 101 Resolved ranged next value main::y#1 ← ++ main::y#4 to ++ @@ -251,9 +251,9 @@ Resolved ranged comparison value if(main::y#1!=rangelast(0,100)) goto main::@2 t Resolved ranged next value main::x#1 ← ++ main::x#4 to ++ Resolved ranged comparison value if(main::x#1!=rangelast(0,100)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 101 Self Phi Eliminated (byte) main::x#4 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) main::x#4 (byte) main::x#7 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::x#0 Inlining constant with var siblings (const byte) main::y#0 @@ -261,12 +261,10 @@ Inlining constant with var siblings (const byte) main::a#0 Constant inlined main::a#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::x#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::y#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@7 main::@4 main::@5 main::@return print print::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@8(between main::@5 and main::@1) Added new block during phi lifting main::@9(between main::@4 and main::@2) Added new block during phi lifting main::@10(between main::@7 and main::@3) -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@7 main::@4 main::@5 main::@return main::@8 main::@9 main::@10 print print::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end @@ -291,7 +289,6 @@ Coalesced down to 3 phi equivalence classes Culled Empty Block (label) main::@8 Culled Empty Block (label) main::@9 Culled Empty Block (label) main::@10 -Block Sequence Planned @begin @2 @end main main::@1 main::@2 main::@3 main::@7 main::@4 main::@5 main::@return print print::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @2 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/voronoi.log b/src/test/java/dk/camelot64/kickc/test/ref/voronoi.log index 47cbdb362..713e41cff 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/voronoi.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/voronoi.log @@ -1100,7 +1100,7 @@ OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) animate::@5 Culled Empty Block (label) animate::@6 Culled Empty Block (label) @6 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Inversing boolean not (bool~) animate::$2 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) != (byte/signed byte/word/signed word/dword/signed dword) 40 from (bool~) animate::$1 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) == (byte/signed byte/word/signed word/dword/signed dword) 40 Inversing boolean not (bool~) animate::$5 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) != (byte/signed byte/word/signed word/dword/signed dword) 25 from (bool~) animate::$4 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) == (byte/signed byte/word/signed word/dword/signed dword) 25 Inversing boolean not (bool~) animate::$8 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) != (byte/word/signed word/dword/signed dword) 255 from (bool~) animate::$7 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) == (byte/word/signed word/dword/signed dword) 255 @@ -1110,7 +1110,7 @@ Inversing boolean not (bool~) animate::$17 ← *((byte[]) XPOS#0 + (byte/signed Inversing boolean not (bool~) findcol::$1 ← (byte) findcol::x#1 != (byte) findcol::xp#0 from (bool~) findcol::$0 ← (byte) findcol::x#1 == (byte) findcol::xp#0 Inversing boolean not (bool~) findcol::$3 ← (byte) findcol::y#1 != (byte) findcol::yp#1 from (bool~) findcol::$2 ← (byte) findcol::y#1 == (byte) findcol::yp#1 Inversing boolean not (bool~) findcol::$13 ← (byte) findcol::diff#6 >= (byte) findcol::mindiff#2 from (bool~) findcol::$12 ← (byte) findcol::diff#6 < (byte) findcol::mindiff#2 -Succesful SSA optimization Pass2UnaryNotSimplification +Successful SSA optimization Pass2UnaryNotSimplification Alias (byte*) COLORS#3 = (byte*) COLORS#5 Alias (byte) numpoints#20 = (byte) numpoints#22 Alias (byte*) COLORS#2 = (byte*) COLORS#6 (byte*) COLORS#4 @@ -1161,7 +1161,7 @@ Alias (byte*) SCREEN#0 = (byte*) SCREEN#4 Alias (byte) FILL#0 = (byte) FILL#4 Alias (byte*) COLORS#0 = (byte*) COLORS#7 Alias (byte) numpoints#0 = (byte) numpoints#24 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Alias (byte) findcol::x#1 = (byte) findcol::x#2 (byte) findcol::x#11 (byte) findcol::x#10 (byte) findcol::x#6 Alias (byte) findcol::xp#0 = (byte) findcol::xp#1 Alias (byte) findcol::y#1 = (byte) findcol::y#10 (byte) findcol::y#2 (byte) findcol::y#12 (byte) findcol::y#9 @@ -1170,7 +1170,7 @@ Alias (byte) findcol::mindiff#10 = (byte) findcol::mindiff#6 (byte) findcol::min Alias (byte) findcol::i#10 = (byte) findcol::i#12 (byte) findcol::i#6 (byte) findcol::i#4 (byte) findcol::i#3 Alias (byte) numpoints#1 = (byte) numpoints#7 (byte) numpoints#10 (byte) numpoints#4 (byte) numpoints#2 Alias (byte) findcol::mincol#10 = (byte) findcol::mincol#11 (byte) findcol::mincol#5 (byte) findcol::mincol#4 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) COLORS#2 Self Phi Eliminated (byte) numpoints#19 Self Phi Eliminated (byte) FILL#1 @@ -1181,7 +1181,7 @@ Self Phi Eliminated (byte) numpoints#14 Self Phi Eliminated (byte) findcol::x#1 Self Phi Eliminated (byte) findcol::y#1 Self Phi Eliminated (byte) numpoints#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#3 (byte*) SCREEN#0 Redundant Phi (byte) FILL#3 (byte) FILL#0 Redundant Phi (byte*) COLORS#3 (byte*) COLORS#0 @@ -1203,7 +1203,7 @@ Redundant Phi (byte) numpoints#12 (byte) numpoints#14 Redundant Phi (byte) findcol::x#1 (byte) findcol::x#5 Redundant Phi (byte) findcol::y#1 (byte) findcol::y#8 Redundant Phi (byte) numpoints#1 (byte) numpoints#12 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) animate::$2 if(*((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@1 Simple Condition (bool~) animate::$5 if(*((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@2 Simple Condition (bool~) animate::$8 if(*((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 1)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@3 @@ -1219,7 +1219,7 @@ Simple Condition (bool~) findcol::$3 if((byte) findcol::y#0!=(byte) findcol::yp# Simple Condition (bool~) findcol::$7 if((byte) findcol::y#0<(byte) findcol::yp#0) goto findcol::@6 Simple Condition (bool~) findcol::$13 if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@8 Simple Condition (bool~) findcol::$14 if((byte) findcol::i#1<(byte) numpoints#15) goto findcol::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const byte*) COLORS#0 = ((byte*))55296 Constant (const byte) FILL#0 = 230 @@ -1233,11 +1233,11 @@ Constant (const byte) findcol::mindiff#0 = 255 Constant (const byte) findcol::mincol#0 = 0 Constant (const byte) findcol::i#0 = 0 Constant (const byte) findcol::return#1 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) initscreen::screen#0 = SCREEN#0 Constant (const byte*) initscreen::$0 = SCREEN#0+1000 Constant (const byte*) render::colline#0 = COLORS#0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Consolidated array index constant in *(XPOS#0+0) Consolidated array index constant in *(XPOS#0+0) Consolidated array index constant in *(XPOS#0+0) @@ -1263,11 +1263,11 @@ Consolidated array index constant in *(XPOS#0+3) Consolidated array index constant in *(XPOS#0+3) Consolidated array index constant in *(XPOS#0+3) Consolidated array index constant in *(XPOS#0+3) -Succesful SSA optimization Pass2ConstantAdditionElimination +Successful SSA optimization Pass2ConstantAdditionElimination if() condition always true - replacing block destination if(true) goto main::@1 -Succesful SSA optimization Pass2ConstantIfs +Successful SSA optimization Pass2ConstantIfs Removing unused block main::@return -Succesful SSA optimization Pass2EliminateUnusedBlocks +Successful SSA optimization Pass2EliminateUnusedBlocks Resolved ranged next value render::x#1 ← ++ render::x#2 to ++ Resolved ranged comparison value if(render::x#1!=rangelast(0,39)) goto render::@2 to (byte/signed byte/word/signed word/dword/signed dword) 40 Resolved ranged next value render::y#1 ← ++ render::y#4 to ++ @@ -1277,11 +1277,11 @@ Culled Empty Block (label) main::@5 Culled Empty Block (label) findcol::@3 Culled Empty Block (label) findcol::@10 Culled Empty Block (label) findcol::@17 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Self Phi Eliminated (byte) numpoints#15 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte) numpoints#15 (const byte) numpoints#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte*) initscreen::screen#0 Inlining constant with var siblings (const byte) render::y#0 @@ -1300,7 +1300,7 @@ Constant inlined render::y#0 = (byte/signed byte/word/signed word/dword/signed d Constant inlined findcol::mincol#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined findcol::mindiff#0 = (byte/word/signed word/dword/signed dword) 255 Constant inlined initscreen::$0 = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000 -Succesful SSA optimization Pass2ConstantInlining +Successful SSA optimization Pass2ConstantInlining Simplifying constant plus zero XPOS#0+0 Simplifying constant plus zero XPOS#0+0 Simplifying constant plus zero XPOS#0+0 @@ -1309,14 +1309,12 @@ Simplifying constant plus zero YPOS#0+0 Simplifying constant plus zero YPOS#0+0 Simplifying constant plus zero XPOS#0+0 Simplifying constant plus zero YPOS#0+0 -Block Sequence Planned @begin @5 @end main main::@1 main::@4 animate animate::@7 animate::@1 animate::@8 animate::@2 animate::@9 animate::@3 animate::@10 animate::@4 animate::@11 animate::@12 animate::@return render render::@1 render::@2 render::@5 render::@3 render::@return findcol findcol::@1 findcol::@9 findcol::@return findcol::@2 findcol::@12 findcol::@5 findcol::@14 findcol::@7 findcol::@16 findcol::@8 findcol::@6 findcol::@4 initscreen initscreen::@1 initscreen::@return Added new block during phi lifting render::@6(between render::@3 and render::@1) Added new block during phi lifting render::@7(between render::@5 and render::@2) Added new block during phi lifting findcol::@19(between findcol::@8 and findcol::@1) Added new block during phi lifting findcol::@20(between findcol::@8 and findcol::@return) Added new block during phi lifting findcol::@21(between findcol::@7 and findcol::@8) Added new block during phi lifting initscreen::@3(between initscreen::@1 and initscreen::@1) -Block Sequence Planned @begin @5 @end main main::@1 main::@4 animate animate::@7 animate::@1 animate::@8 animate::@2 animate::@9 animate::@3 animate::@10 animate::@4 animate::@11 animate::@12 animate::@return render render::@1 render::@2 render::@5 render::@3 render::@return render::@6 render::@7 findcol findcol::@1 findcol::@9 findcol::@return findcol::@2 findcol::@12 findcol::@5 findcol::@14 findcol::@7 findcol::@16 findcol::@8 findcol::@20 findcol::@19 findcol::@21 findcol::@6 findcol::@4 initscreen initscreen::@1 initscreen::@return initscreen::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end @@ -1371,7 +1369,6 @@ Culled Empty Block (label) render::@6 Culled Empty Block (label) render::@7 Culled Empty Block (label) findcol::@20 Culled Empty Block (label) initscreen::@3 -Block Sequence Planned @begin @5 @end main main::@1 main::@4 animate animate::@7 animate::@1 animate::@8 animate::@2 animate::@9 animate::@3 animate::@10 animate::@4 animate::@11 animate::@12 animate::@return render render::@1 render::@2 render::@5 render::@3 render::@return findcol findcol::@1 findcol::@9 findcol::@return findcol::@2 findcol::@12 findcol::@5 findcol::@14 findcol::@7 findcol::@16 findcol::@8 findcol::@19 findcol::@21 findcol::@6 findcol::@4 initscreen initscreen::@1 initscreen::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @5 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/wordexpr.log b/src/test/java/dk/camelot64/kickc/test/ref/wordexpr.log index ebebf7311..741325efc 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/wordexpr.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/wordexpr.log @@ -101,15 +101,15 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (word) main::b#1 = (word/signed dword/dword~) main::$1 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Simple Condition (bool~) main::$2 if((byte) main::i#1!=rangelast(0,10)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const word) main::b#0 = 0 Constant (const byte) main::i#0 = 0 Constant (const word/signed word/dword/signed dword) main::$0 = 40*8 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,10)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 11 OPTIMIZING CONTROL FLOW GRAPH @@ -118,10 +118,8 @@ Inlining constant with var siblings (const byte) main::i#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::$0 = (byte/signed byte/word/signed word/dword/signed dword) 40*(byte/signed byte/word/signed word/dword/signed dword) 8 Constant inlined main::b#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@3(between main::@1 and main::@1) -Block Sequence Planned @begin @1 @end main main::@1 main::@return main::@3 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -138,7 +136,6 @@ Coalesced [10] main::b#3 ← main::b#1 Coalesced [11] main::i#3 ← main::i#1 Coalesced down to 2 phi equivalence classes Culled Empty Block (label) main::@3 -Block Sequence Planned @begin @1 @end main main::@1 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.log b/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.log index a0fb3010e..e01a51256 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/zpparammin.log @@ -296,7 +296,7 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @4 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte) sum::b#0 = (byte/signed word/word/dword/signed dword~) main::$0 Alias (byte) sum::c#0 = (byte/signed word/word/dword/signed dword~) main::$1 Alias (byte) sum::return#0 = (byte) sum::return#3 @@ -310,10 +310,10 @@ Alias (byte) sum::return#1 = (byte~) sum::$1 (byte) sum::return#4 (byte) sum::re Alias (byte) sum2::return#1 = (byte~) sum2::$1 (byte) sum2::return#4 (byte) sum2::return#2 Alias (byte*) SCREEN#0 = (byte*) SCREEN#5 Alias (byte*) SCREEN2#0 = (byte*) SCREEN2#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN#1 Self Phi Eliminated (byte*) SCREEN2#1 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) SCREEN#3 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN2#4 (byte*) SCREEN2#0 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#3 @@ -324,25 +324,23 @@ Redundant Phi (byte) sum::c#1 (byte) sum::c#0 Redundant Phi (byte) sum2::a#1 (byte) sum2::a#0 Redundant Phi (byte) sum2::b#1 (byte) sum2::b#0 Redundant Phi (byte) sum2::c#1 (byte) sum2::c#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$6 if((byte) main::i#1!=rangelast(0,10)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) SCREEN#0 = ((byte*))1024 Constant (const word/signed word/dword/signed dword) $0 = 1024+40 Constant (const byte) main::i#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Constant (const byte*) SCREEN2#0 = ((byte*))$0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::i#1 ← ++ main::i#2 to ++ Resolved ranged comparison value if(main::i#1!=rangelast(0,10)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 11 OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::i#0 Constant inlined $0 = (word/signed word/dword/signed dword) 1024+(byte/signed byte/word/signed word/dword/signed dword) 40 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @3 @end main main::@1 main::@3 main::@4 main::@return sum2 sum2::@return sum sum::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@5(between main::@4 and main::@1) -Block Sequence Planned @begin @3 @end main main::@1 main::@3 main::@4 main::@return main::@5 sum2 sum2::@return sum sum::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end @@ -360,7 +358,6 @@ Created 1 initial phi equivalence classes Coalesced [23] main::i#5 ← main::i#1 Coalesced down to 1 phi equivalence classes Culled Empty Block (label) main::@5 -Block Sequence Planned @begin @3 @end main main::@1 main::@3 main::@4 main::@return sum2 sum2::@return sum sum::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @3 Adding NOP phi() at start of @end diff --git a/src/test/java/dk/camelot64/kickc/test/ref/zpptr.log b/src/test/java/dk/camelot64/kickc/test/ref/zpptr.log index 9a2cb14f5..039861a37 100644 --- a/src/test/java/dk/camelot64/kickc/test/ref/zpptr.log +++ b/src/test/java/dk/camelot64/kickc/test/ref/zpptr.log @@ -202,31 +202,31 @@ SYMBOL TABLE SSA OPTIMIZING CONTROL FLOW GRAPH Culled Empty Block (label) @2 -Succesful SSA optimization Pass2CullEmptyBlocks +Successful SSA optimization Pass2CullEmptyBlocks Alias (byte*) main::zpptr2#0 = (byte*~) main::$0 Alias (word) main::w#0 = (word~) main::$1 Alias (byte*) main::zpptr2#1 = (byte*~) main::$2 Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte) main::j#2 = (byte) main::j#5 (byte) main::j#3 Alias (byte*) main::zpptr#1 = (byte*) main::zpptr#4 (byte*) main::zpptr#5 -Succesful SSA optimization Pass2AliasElimination +Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) main::zpptr#1 Self Phi Eliminated (byte) main::i#2 Self Phi Eliminated (byte) main::j#2 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::zpptr#1 (byte*) main::zpptr#2 Redundant Phi (byte) main::i#2 (byte) main::i#4 Redundant Phi (byte) main::j#2 (byte) main::j#4 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Simple Condition (bool~) main::$3 if((byte) main::k#1!=rangelast(0,10)) goto main::@3 Simple Condition (bool~) main::$4 if((byte) main::i#1!=rangelast(0,10)) goto main::@2 Simple Condition (bool~) main::$5 if((byte) main::j#1!=rangelast(0,10)) goto main::@1 -Succesful SSA optimization Pass2ConditionalJumpSimplification +Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::zpptr#0 = ((byte*))4096 Constant (const byte) main::j#0 = 0 Constant (const byte) main::i#0 = 0 Constant (const byte) main::k#0 = 0 -Succesful SSA optimization Pass2ConstantIdentification +Successful SSA optimization Pass2ConstantIdentification Resolved ranged next value main::k#1 ← ++ main::k#2 to ++ Resolved ranged comparison value if(main::k#1!=rangelast(0,10)) goto main::@3 to (byte/signed byte/word/signed word/dword/signed dword) 11 Resolved ranged next value main::i#1 ← ++ main::i#4 to ++ @@ -235,14 +235,14 @@ Resolved ranged next value main::j#1 ← ++ main::j#4 to ++ Resolved ranged comparison value if(main::j#1!=rangelast(0,10)) goto main::@1 to (byte/signed byte/word/signed word/dword/signed dword) 11 Self Phi Eliminated (byte*) main::zpptr#2 Self Phi Eliminated (byte) main::j#4 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::zpptr#2 (byte*) main::zpptr#3 Redundant Phi (byte) main::j#4 (byte) main::j#6 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination Self Phi Eliminated (byte*) main::zpptr#3 -Succesful SSA optimization Pass2SelfPhiElimination +Successful SSA optimization Pass2SelfPhiElimination Redundant Phi (byte*) main::zpptr#3 (const byte*) main::zpptr#0 -Succesful SSA optimization Pass2RedundantPhiElimination +Successful SSA optimization Pass2RedundantPhiElimination OPTIMIZING CONTROL FLOW GRAPH Inlining constant with var siblings (const byte) main::j#0 Inlining constant with var siblings (const byte) main::i#0 @@ -250,12 +250,10 @@ Inlining constant with var siblings (const byte) main::k#0 Constant inlined main::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::k#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 Constant inlined main::j#0 = (byte/signed byte/word/signed word/dword/signed dword) 0 -Succesful SSA optimization Pass2ConstantInlining -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return +Successful SSA optimization Pass2ConstantInlining Added new block during phi lifting main::@7(between main::@5 and main::@1) Added new block during phi lifting main::@8(between main::@4 and main::@2) Added new block during phi lifting main::@9(between main::@3 and main::@3) -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return main::@7 main::@8 main::@9 Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end @@ -279,7 +277,6 @@ Coalesced down to 3 phi equivalence classes Culled Empty Block (label) main::@7 Culled Empty Block (label) main::@8 Culled Empty Block (label) main::@9 -Block Sequence Planned @begin @1 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return Adding NOP phi() at start of @begin Adding NOP phi() at start of @1 Adding NOP phi() at start of @end