From d13ca4e03b8b2c87ee516e940005607eb57afb8d Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 31 Mar 2019 17:10:41 +0200 Subject: [PATCH] Implemented block label renumbering ensuring generated ASM labels are slightly more sensible to the reader. --- .../java/dk/camelot64/kickc/Compiler.java | 2 +- .../kickc/model/iterator/ProgramValue.java | 20 + .../model/iterator/ProgramValueIterator.java | 1 + .../camelot64/kickc/model/symbols/Scope.java | 8 + .../kickc/passes/PassNRenumberLabels.java | 74 + .../dk/camelot64/kickc/test/TestPrograms.java | 4 +- src/test/kc/localscope-loops.kc | 7 +- src/test/ref/assignment-compound.cfg | 14 +- src/test/ref/assignment-compound.log | 94 +- src/test/ref/assignment-compound.sym | 4 +- src/test/ref/bgblack.cfg | 8 +- src/test/ref/bgblack.log | 55 +- src/test/ref/bgblack.sym | 2 +- src/test/ref/bitmap-plotter.asm | 20 +- src/test/ref/bitmap-plotter.cfg | 82 +- src/test/ref/bitmap-plotter.log | 629 +- src/test/ref/bitmap-plotter.sym | 14 +- src/test/ref/bool-const.cfg | 14 +- src/test/ref/bool-const.log | 94 +- src/test/ref/bool-const.sym | 4 +- src/test/ref/bool-function.cfg | 16 +- src/test/ref/bool-function.log | 96 +- src/test/ref/bool-function.sym | 4 +- src/test/ref/bool-ifs.asm | 12 +- src/test/ref/bool-ifs.cfg | 50 +- src/test/ref/bool-ifs.log | 257 +- src/test/ref/bool-ifs.sym | 12 +- src/test/ref/bool-nullpointer-exception.asm | 6 +- src/test/ref/bool-nullpointer-exception.cfg | 10 +- src/test/ref/bool-nullpointer-exception.log | 63 +- src/test/ref/bool-nullpointer-exception.sym | 2 +- src/test/ref/bool-pointer.asm | 4 +- src/test/ref/bool-pointer.cfg | 6 +- src/test/ref/bool-pointer.log | 35 +- src/test/ref/bool-pointer.sym | 2 +- src/test/ref/bool-vars.asm | 12 +- src/test/ref/bool-vars.cfg | 50 +- src/test/ref/bool-vars.log | 261 +- src/test/ref/bool-vars.sym | 12 +- src/test/ref/c64dtv-8bppcharstretch.asm | 16 +- src/test/ref/c64dtv-8bppcharstretch.cfg | 42 +- src/test/ref/c64dtv-8bppcharstretch.log | 297 +- src/test/ref/c64dtv-8bppcharstretch.sym | 10 +- src/test/ref/c64dtv-8bppchunkystretch.asm | 16 +- src/test/ref/c64dtv-8bppchunkystretch.cfg | 52 +- src/test/ref/c64dtv-8bppchunkystretch.log | 352 +- src/test/ref/c64dtv-8bppchunkystretch.sym | 12 +- src/test/ref/c64dtv-blittermin.asm | 6 +- src/test/ref/c64dtv-blittermin.cfg | 24 +- src/test/ref/c64dtv-blittermin.log | 199 +- src/test/ref/c64dtv-blittermin.sym | 4 +- src/test/ref/c64dtv-color.asm | 14 +- src/test/ref/c64dtv-color.cfg | 36 +- src/test/ref/c64dtv-color.log | 301 +- src/test/ref/c64dtv-color.sym | 10 +- src/test/ref/c64dtv-gfxexplorer.asm | 638 +- src/test/ref/c64dtv-gfxexplorer.cfg | 1094 +- src/test/ref/c64dtv-gfxexplorer.log | 9828 +++++++++-------- src/test/ref/c64dtv-gfxexplorer.sym | 216 +- src/test/ref/c64dtv-gfxmodes.asm | 228 +- src/test/ref/c64dtv-gfxmodes.cfg | 878 +- src/test/ref/c64dtv-gfxmodes.log | 7578 ++++++------- src/test/ref/c64dtv-gfxmodes.sym | 112 +- src/test/ref/callconstparam.cfg | 8 +- src/test/ref/callconstparam.log | 67 +- src/test/ref/callconstparam.sym | 2 +- src/test/ref/cast-precedence-problem.cfg | 6 +- src/test/ref/cast-precedence-problem.log | 27 +- src/test/ref/cast-precedence-problem.sym | 2 +- src/test/ref/casting.cfg | 8 +- src/test/ref/casting.log | 67 +- src/test/ref/casting.sym | 2 +- src/test/ref/complex-conditional-problem.asm | 14 +- src/test/ref/complex-conditional-problem.cfg | 24 +- src/test/ref/complex-conditional-problem.log | 196 +- src/test/ref/complex-conditional-problem.sym | 6 +- src/test/ref/complex/tetris/test-sprites.asm | 20 +- src/test/ref/complex/tetris/test-sprites.cfg | 130 +- src/test/ref/complex/tetris/test-sprites.log | 848 +- src/test/ref/complex/tetris/test-sprites.sym | 22 +- src/test/ref/complex/tetris/tetris.asm | 154 +- src/test/ref/complex/tetris/tetris.cfg | 1000 +- src/test/ref/complex/tetris/tetris.log | 7410 +++++++------ src/test/ref/complex/tetris/tetris.sym | 140 +- src/test/ref/const-condition.cfg | 6 +- src/test/ref/const-condition.log | 27 +- src/test/ref/const-condition.sym | 2 +- src/test/ref/const-early-identification.cfg | 8 +- src/test/ref/const-early-identification.log | 55 +- src/test/ref/const-early-identification.sym | 2 +- src/test/ref/const-identification.asm | 10 +- src/test/ref/const-identification.cfg | 32 +- src/test/ref/const-identification.log | 256 +- src/test/ref/const-identification.sym | 8 +- src/test/ref/const-if-problem.cfg | 8 +- src/test/ref/const-if-problem.log | 67 +- src/test/ref/const-if-problem.sym | 2 +- src/test/ref/const-param.cfg | 8 +- src/test/ref/const-param.log | 67 +- src/test/ref/const-param.sym | 2 +- src/test/ref/constants.cfg | 38 +- src/test/ref/constants.log | 269 +- src/test/ref/constants.sym | 6 +- src/test/ref/duplicate-loop-problem.asm | 4 +- src/test/ref/duplicate-loop-problem.cfg | 10 +- src/test/ref/duplicate-loop-problem.log | 63 +- src/test/ref/duplicate-loop-problem.sym | 2 +- src/test/ref/emptyblock-error.cfg | 24 +- src/test/ref/emptyblock-error.log | 175 +- src/test/ref/emptyblock-error.sym | 6 +- src/test/ref/examples/3d/3d.asm | 18 +- src/test/ref/examples/3d/3d.cfg | 246 +- src/test/ref/examples/3d/3d.log | 1847 ++-- src/test/ref/examples/3d/3d.sym | 34 +- src/test/ref/examples/3d/perspective.cfg | 16 +- src/test/ref/examples/3d/perspective.log | 94 +- src/test/ref/examples/3d/perspective.sym | 4 +- .../examples/bresenham/bitmap-bresenham.asm | 32 +- .../examples/bresenham/bitmap-bresenham.cfg | 212 +- .../examples/bresenham/bitmap-bresenham.log | 1505 +-- .../examples/bresenham/bitmap-bresenham.sym | 30 +- .../ref/examples/chargen/chargen-analysis.asm | 44 +- .../ref/examples/chargen/chargen-analysis.cfg | 200 +- .../ref/examples/chargen/chargen-analysis.log | 1707 +-- .../ref/examples/chargen/chargen-analysis.sym | 28 +- .../examples/fastmultiply/fastmultiply8.asm | 12 +- .../examples/fastmultiply/fastmultiply8.cfg | 80 +- .../examples/fastmultiply/fastmultiply8.log | 595 +- .../examples/fastmultiply/fastmultiply8.sym | 12 +- .../ref/examples/helloworld/helloworld.cfg | 8 +- .../ref/examples/helloworld/helloworld.log | 67 +- .../ref/examples/helloworld/helloworld.sym | 2 +- src/test/ref/examples/irq/irq-hyperscreen.cfg | 8 +- src/test/ref/examples/irq/irq-hyperscreen.log | 55 +- src/test/ref/examples/irq/irq-hyperscreen.sym | 2 +- .../multiplexer/simple-multiplexer.asm | 26 +- .../multiplexer/simple-multiplexer.cfg | 124 +- .../multiplexer/simple-multiplexer.log | 834 +- .../multiplexer/simple-multiplexer.sym | 24 +- src/test/ref/examples/music/music.asm | 6 +- src/test/ref/examples/music/music.cfg | 22 +- src/test/ref/examples/music/music.log | 150 +- src/test/ref/examples/music/music.sym | 6 +- src/test/ref/examples/music/music_irq.cfg | 12 +- src/test/ref/examples/music/music_irq.log | 80 +- src/test/ref/examples/music/music_irq.sym | 4 +- .../ref/examples/rasterbars/raster-bars.asm | 10 +- .../ref/examples/rasterbars/raster-bars.cfg | 26 +- .../ref/examples/rasterbars/raster-bars.log | 180 +- .../ref/examples/rasterbars/raster-bars.sym | 6 +- src/test/ref/examples/rotate/rotate.asm | 28 +- src/test/ref/examples/rotate/rotate.cfg | 134 +- src/test/ref/examples/rotate/rotate.log | 978 +- src/test/ref/examples/rotate/rotate.sym | 24 +- src/test/ref/examples/scroll/scroll.asm | 22 +- src/test/ref/examples/scroll/scroll.cfg | 64 +- src/test/ref/examples/scroll/scroll.log | 571 +- src/test/ref/examples/scroll/scroll.sym | 8 +- src/test/ref/examples/scrollbig/scrollbig.asm | 10 +- src/test/ref/examples/scrollbig/scrollbig.cfg | 38 +- src/test/ref/examples/scrollbig/scrollbig.log | 303 +- src/test/ref/examples/scrollbig/scrollbig.sym | 6 +- .../ref/examples/scrolllogo/scrolllogo.asm | 46 +- .../ref/examples/scrolllogo/scrolllogo.cfg | 244 +- .../ref/examples/scrolllogo/scrolllogo.log | 1635 +-- .../ref/examples/scrolllogo/scrolllogo.sym | 42 +- src/test/ref/examples/showlogo/showlogo.asm | 8 +- src/test/ref/examples/showlogo/showlogo.cfg | 42 +- src/test/ref/examples/showlogo/showlogo.log | 326 +- src/test/ref/examples/showlogo/showlogo.sym | 10 +- .../ref/examples/sinplotter/sine-plotter.asm | 24 +- .../ref/examples/sinplotter/sine-plotter.cfg | 252 +- .../ref/examples/sinplotter/sine-plotter.log | 1802 +-- .../ref/examples/sinplotter/sine-plotter.sym | 38 +- .../ref/examples/sinsprites/sinus-sprites.asm | 18 +- .../ref/examples/sinsprites/sinus-sprites.cfg | 256 +- .../ref/examples/sinsprites/sinus-sprites.log | 2042 ++-- .../ref/examples/sinsprites/sinus-sprites.sym | 16 +- src/test/ref/fillscreen.cfg | 8 +- src/test/ref/fillscreen.log | 55 +- src/test/ref/fillscreen.sym | 2 +- src/test/ref/flipper-rex2.asm | 18 +- src/test/ref/flipper-rex2.cfg | 50 +- src/test/ref/flipper-rex2.log | 459 +- src/test/ref/flipper-rex2.sym | 10 +- src/test/ref/forrangedwords.asm | 6 +- src/test/ref/forrangedwords.cfg | 10 +- src/test/ref/forrangedwords.log | 97 +- src/test/ref/forrangedwords.sym | 2 +- src/test/ref/forrangemin.asm | 4 +- src/test/ref/forrangemin.cfg | 10 +- src/test/ref/forrangemin.log | 87 +- src/test/ref/forrangemin.sym | 2 +- src/test/ref/fragment-synth.cfg | 8 +- src/test/ref/fragment-synth.log | 55 +- src/test/ref/fragment-synth.sym | 2 +- src/test/ref/helloworld2-inline.cfg | 8 +- src/test/ref/helloworld2-inline.log | 67 +- src/test/ref/helloworld2-inline.sym | 2 +- src/test/ref/helloworld2.cfg | 8 +- src/test/ref/helloworld2.log | 67 +- src/test/ref/helloworld2.sym | 2 +- src/test/ref/incrementinarray.asm | 4 +- src/test/ref/incrementinarray.cfg | 32 +- src/test/ref/incrementinarray.log | 214 +- src/test/ref/incrementinarray.sym | 6 +- src/test/ref/infloop-error.asm | 8 +- src/test/ref/infloop-error.cfg | 32 +- src/test/ref/infloop-error.log | 216 +- src/test/ref/infloop-error.sym | 6 +- src/test/ref/init-volatiles.cfg | 6 +- src/test/ref/init-volatiles.log | 27 +- src/test/ref/init-volatiles.sym | 2 +- src/test/ref/inline-asm-clobber.asm | 8 +- src/test/ref/inline-asm-clobber.cfg | 20 +- src/test/ref/inline-asm-clobber.log | 185 +- src/test/ref/inline-asm-clobber.sym | 2 +- src/test/ref/inline-asm-ref-scoped.cfg | 8 +- src/test/ref/inline-asm-ref-scoped.log | 55 +- src/test/ref/inline-asm-ref-scoped.sym | 2 +- src/test/ref/inline-function-if.cfg | 8 +- src/test/ref/inline-function-if.log | 67 +- src/test/ref/inline-function-if.sym | 2 +- src/test/ref/inline-function-level2.cfg | 36 +- src/test/ref/inline-function-level2.log | 221 +- src/test/ref/inline-function-level2.sym | 6 +- src/test/ref/inline-function-min.cfg | 8 +- src/test/ref/inline-function-min.log | 67 +- src/test/ref/inline-function-min.sym | 2 +- src/test/ref/inline-function-print.cfg | 8 +- src/test/ref/inline-function-print.log | 67 +- src/test/ref/inline-function-print.sym | 2 +- src/test/ref/inline-function.asm | 10 +- src/test/ref/inline-function.cfg | 34 +- src/test/ref/inline-function.log | 223 +- src/test/ref/inline-function.sym | 10 +- src/test/ref/inline-string-2.asm | 8 +- src/test/ref/inline-string-2.cfg | 24 +- src/test/ref/inline-string-2.log | 203 +- src/test/ref/inline-string-2.sym | 4 +- src/test/ref/inline-string.cfg | 8 +- src/test/ref/inline-string.log | 67 +- src/test/ref/inline-string.sym | 2 +- src/test/ref/inmem-const-array.cfg | 8 +- src/test/ref/inmem-const-array.log | 75 +- src/test/ref/inmem-const-array.sym | 2 +- src/test/ref/inmemarray.cfg | 8 +- src/test/ref/inmemarray.log | 75 +- src/test/ref/inmemarray.sym | 2 +- src/test/ref/inmemstring.cfg | 8 +- src/test/ref/inmemstring.log | 75 +- src/test/ref/inmemstring.sym | 2 +- .../ref/interrupt-volatile-reuse-problem1.cfg | 8 +- .../ref/interrupt-volatile-reuse-problem1.log | 55 +- .../ref/interrupt-volatile-reuse-problem1.sym | 2 +- .../ref/interrupt-volatile-reuse-problem2.asm | 16 +- .../ref/interrupt-volatile-reuse-problem2.cfg | 46 +- .../ref/interrupt-volatile-reuse-problem2.log | 409 +- .../ref/interrupt-volatile-reuse-problem2.sym | 12 +- src/test/ref/irq-hardware-clobber-jsr.asm | 4 +- src/test/ref/irq-hardware-clobber-jsr.cfg | 14 +- src/test/ref/irq-hardware-clobber-jsr.log | 88 +- src/test/ref/irq-hardware-clobber-jsr.sym | 4 +- src/test/ref/irq-hardware-clobber.asm | 4 +- src/test/ref/irq-hardware-clobber.cfg | 14 +- src/test/ref/irq-hardware-clobber.log | 88 +- src/test/ref/irq-hardware-clobber.sym | 4 +- src/test/ref/irq-hardware.asm | 4 +- src/test/ref/irq-hardware.cfg | 14 +- src/test/ref/irq-hardware.log | 88 +- src/test/ref/irq-hardware.sym | 4 +- src/test/ref/irq-idx-problem.cfg | 28 +- src/test/ref/irq-idx-problem.log | 159 +- src/test/ref/irq-idx-problem.sym | 10 +- src/test/ref/irq-kernel-minimal.cfg | 8 +- src/test/ref/irq-kernel-minimal.log | 55 +- src/test/ref/irq-kernel-minimal.sym | 2 +- src/test/ref/irq-kernel.cfg | 8 +- src/test/ref/irq-kernel.log | 55 +- src/test/ref/irq-kernel.sym | 2 +- .../ref/irq-local-var-overlap-problem.asm | 16 +- .../ref/irq-local-var-overlap-problem.cfg | 52 +- .../ref/irq-local-var-overlap-problem.log | 448 +- .../ref/irq-local-var-overlap-problem.sym | 12 +- src/test/ref/irq-raster.cfg | 8 +- src/test/ref/irq-raster.log | 55 +- src/test/ref/irq-raster.sym | 2 +- src/test/ref/irq-volatile-bool-problem.asm | 6 +- src/test/ref/irq-volatile-bool-problem.cfg | 10 +- src/test/ref/irq-volatile-bool-problem.log | 68 +- src/test/ref/irq-volatile-bool-problem.sym | 2 +- src/test/ref/keyboard-glitch.asm | 24 +- src/test/ref/keyboard-glitch.cfg | 84 +- src/test/ref/keyboard-glitch.log | 663 +- src/test/ref/keyboard-glitch.sym | 18 +- src/test/ref/line-anim.asm | 34 +- src/test/ref/line-anim.cfg | 188 +- src/test/ref/line-anim.log | 1276 +-- src/test/ref/line-anim.sym | 38 +- src/test/ref/linegen.cfg | 110 +- src/test/ref/linegen.log | 895 +- src/test/ref/linegen.sym | 6 +- src/test/ref/liverange-call-problem.cfg | 8 +- src/test/ref/liverange-call-problem.log | 67 +- src/test/ref/liverange-call-problem.sym | 2 +- src/test/ref/liverange.cfg | 8 +- src/test/ref/liverange.log | 67 +- src/test/ref/liverange.sym | 2 +- src/test/ref/localscope-loops.asm | 100 +- src/test/ref/localscope-loops.cfg | 80 +- src/test/ref/localscope-loops.log | 1305 +-- src/test/ref/localscope-loops.sym | 51 +- src/test/ref/longbranch-interrupt-problem.cfg | 22 +- src/test/ref/longbranch-interrupt-problem.log | 135 +- src/test/ref/longbranch-interrupt-problem.sym | 6 +- src/test/ref/longjump2.cfg | 8 +- src/test/ref/longjump2.log | 67 +- src/test/ref/longjump2.sym | 2 +- src/test/ref/loop-problem.cfg | 18 +- src/test/ref/loop-problem.log | 112 +- src/test/ref/loop-problem.sym | 4 +- src/test/ref/loop-problem2.asm | 10 +- src/test/ref/loop-problem2.cfg | 24 +- src/test/ref/loop-problem2.log | 160 +- src/test/ref/loop-problem2.sym | 6 +- src/test/ref/loopnest.cfg | 18 +- src/test/ref/loopnest.log | 122 +- src/test/ref/loopnest.sym | 4 +- src/test/ref/loopnest2.cfg | 28 +- src/test/ref/loopnest2.log | 177 +- src/test/ref/loopnest2.sym | 6 +- src/test/ref/loopnest3.cfg | 18 +- src/test/ref/loopnest3.log | 122 +- src/test/ref/loopnest3.sym | 4 +- src/test/ref/loopsplit.asm | 4 +- src/test/ref/loopsplit.cfg | 14 +- src/test/ref/loopsplit.log | 98 +- src/test/ref/loopsplit.sym | 4 +- src/test/ref/mem-alignment.asm | 4 +- src/test/ref/mem-alignment.cfg | 12 +- src/test/ref/mem-alignment.log | 101 +- src/test/ref/mem-alignment.sym | 2 +- src/test/ref/min-fmul-16.asm | 16 +- src/test/ref/min-fmul-16.cfg | 72 +- src/test/ref/min-fmul-16.log | 568 +- src/test/ref/min-fmul-16.sym | 14 +- src/test/ref/modglobal.cfg | 8 +- src/test/ref/modglobal.log | 67 +- src/test/ref/modglobal.sym | 2 +- src/test/ref/modglobalmin.cfg | 8 +- src/test/ref/modglobalmin.log | 67 +- src/test/ref/modglobalmin.sym | 2 +- .../simple-multiplexer-irq.asm | 20 +- .../simple-multiplexer-irq.cfg | 120 +- .../simple-multiplexer-irq.log | 754 +- .../simple-multiplexer-irq.sym | 26 +- src/test/ref/no-recursion-heavy.cfg | 488 +- src/test/ref/no-recursion-heavy.log | 3362 +++--- src/test/ref/no-recursion-heavy.sym | 12 +- src/test/ref/norom-charset.cfg | 8 +- src/test/ref/norom-charset.log | 67 +- src/test/ref/norom-charset.sym | 2 +- src/test/ref/overlap-allocation-2.asm | 4 +- src/test/ref/overlap-allocation-2.cfg | 34 +- src/test/ref/overlap-allocation-2.log | 250 +- src/test/ref/overlap-allocation-2.sym | 6 +- src/test/ref/overlap-allocation.asm | 12 +- src/test/ref/overlap-allocation.cfg | 46 +- src/test/ref/overlap-allocation.log | 372 +- src/test/ref/overlap-allocation.sym | 8 +- src/test/ref/print-problem.cfg | 8 +- src/test/ref/print-problem.log | 67 +- src/test/ref/print-problem.sym | 2 +- src/test/ref/printmsg.cfg | 8 +- src/test/ref/printmsg.log | 67 +- src/test/ref/printmsg.sym | 2 +- src/test/ref/ptrtest.cfg | 8 +- src/test/ref/ptrtest.log | 67 +- src/test/ref/ptrtest.sym | 2 +- src/test/ref/roll-sprite-msb.cfg | 26 +- src/test/ref/roll-sprite-msb.log | 157 +- src/test/ref/roll-sprite-msb.sym | 6 +- src/test/ref/runtime-unused-procedure.cfg | 8 +- src/test/ref/runtime-unused-procedure.log | 55 +- src/test/ref/runtime-unused-procedure.sym | 2 +- src/test/ref/scan-desire-problem.asm | 8 +- src/test/ref/scan-desire-problem.cfg | 44 +- src/test/ref/scan-desire-problem.log | 305 +- src/test/ref/scan-desire-problem.sym | 8 +- src/test/ref/scrollbig-clobber.cfg | 20 +- src/test/ref/scrollbig-clobber.log | 130 +- src/test/ref/scrollbig-clobber.sym | 4 +- src/test/ref/signed-indexed-subtract.asm | 4 +- src/test/ref/signed-indexed-subtract.cfg | 66 +- src/test/ref/signed-indexed-subtract.log | 424 +- src/test/ref/signed-indexed-subtract.sym | 8 +- src/test/ref/signed-words.asm | 14 +- src/test/ref/signed-words.cfg | 64 +- src/test/ref/signed-words.log | 536 +- src/test/ref/signed-words.sym | 8 +- src/test/ref/sinus-basic.asm | 4 +- src/test/ref/sinus-basic.cfg | 100 +- src/test/ref/sinus-basic.log | 711 +- src/test/ref/sinus-basic.sym | 6 +- src/test/ref/sinusgen16.asm | 4 +- src/test/ref/sinusgen16.cfg | 144 +- src/test/ref/sinusgen16.log | 1022 +- src/test/ref/sinusgen16.sym | 20 +- src/test/ref/sinusgen16b.asm | 4 +- src/test/ref/sinusgen16b.cfg | 202 +- src/test/ref/sinusgen16b.log | 1477 +-- src/test/ref/sinusgen16b.sym | 24 +- src/test/ref/sinusgen8.asm | 8 +- src/test/ref/sinusgen8.cfg | 136 +- src/test/ref/sinusgen8.log | 957 +- src/test/ref/sinusgen8.sym | 20 +- src/test/ref/sinusgen8b.asm | 12 +- src/test/ref/sinusgen8b.cfg | 240 +- src/test/ref/sinusgen8b.log | 1655 +-- src/test/ref/sinusgen8b.sym | 32 +- src/test/ref/sinusgenscale8.asm | 8 +- src/test/ref/sinusgenscale8.cfg | 236 +- src/test/ref/sinusgenscale8.log | 1818 +-- src/test/ref/sinusgenscale8.sym | 22 +- .../ref/string-const-consolidation-noroot.cfg | 8 +- .../ref/string-const-consolidation-noroot.log | 67 +- .../ref/string-const-consolidation-noroot.sym | 2 +- src/test/ref/string-const-consolidation.cfg | 8 +- src/test/ref/string-const-consolidation.log | 67 +- src/test/ref/string-const-consolidation.sym | 2 +- src/test/ref/summin.cfg | 8 +- src/test/ref/summin.log | 67 +- src/test/ref/summin.sym | 2 +- src/test/ref/test-address-of-param.cfg | 8 +- src/test/ref/test-address-of-param.log | 55 +- src/test/ref/test-address-of-param.sym | 2 +- src/test/ref/test-comments-block.cfg | 20 +- src/test/ref/test-comments-block.log | 130 +- src/test/ref/test-comments-block.sym | 4 +- src/test/ref/test-comments-single.cfg | 20 +- src/test/ref/test-comments-single.log | 130 +- src/test/ref/test-comments-single.sym | 4 +- src/test/ref/test-comparisons-sword.asm | 88 +- src/test/ref/test-comparisons-sword.cfg | 274 +- src/test/ref/test-comparisons-sword.log | 2361 ++-- src/test/ref/test-comparisons-sword.sym | 34 +- src/test/ref/test-comparisons-word.asm | 84 +- src/test/ref/test-comparisons-word.cfg | 246 +- src/test/ref/test-comparisons-word.log | 2133 ++-- src/test/ref/test-comparisons-word.sym | 32 +- src/test/ref/test-comparisons.asm | 8 +- src/test/ref/test-comparisons.cfg | 246 +- src/test/ref/test-comparisons.log | 1706 +-- src/test/ref/test-comparisons.sym | 8 +- src/test/ref/test-division.asm | 8 +- src/test/ref/test-division.cfg | 330 +- src/test/ref/test-division.log | 2551 ++--- src/test/ref/test-division.sym | 40 +- src/test/ref/test-interrupt-notype.asm | 4 +- src/test/ref/test-interrupt-notype.cfg | 14 +- src/test/ref/test-interrupt-notype.log | 88 +- src/test/ref/test-interrupt-notype.sym | 4 +- .../ref/test-interrupt-volatile-write.cfg | 22 +- .../ref/test-interrupt-volatile-write.log | 131 +- .../ref/test-interrupt-volatile-write.sym | 6 +- src/test/ref/test-interrupt-volatile.cfg | 8 +- src/test/ref/test-interrupt-volatile.log | 55 +- src/test/ref/test-interrupt-volatile.sym | 2 +- src/test/ref/test-interrupt.asm | 4 +- src/test/ref/test-interrupt.cfg | 14 +- src/test/ref/test-interrupt.log | 88 +- src/test/ref/test-interrupt.sym | 4 +- src/test/ref/test-kasm.asm | 4 +- src/test/ref/test-kasm.cfg | 6 +- src/test/ref/test-kasm.log | 33 +- src/test/ref/test-kasm.sym | 2 +- src/test/ref/test-keyboard-space.asm | 12 +- src/test/ref/test-keyboard-space.cfg | 42 +- src/test/ref/test-keyboard-space.log | 281 +- src/test/ref/test-keyboard-space.sym | 14 +- src/test/ref/test-keyboard.asm | 42 +- src/test/ref/test-keyboard.cfg | 134 +- src/test/ref/test-keyboard.log | 1000 +- src/test/ref/test-keyboard.sym | 18 +- src/test/ref/test-lowhigh.asm | 10 +- src/test/ref/test-lowhigh.cfg | 98 +- src/test/ref/test-lowhigh.log | 814 +- src/test/ref/test-lowhigh.sym | 6 +- src/test/ref/test-multiply-16bit.asm | 52 +- src/test/ref/test-multiply-16bit.cfg | 298 +- src/test/ref/test-multiply-16bit.log | 2367 ++-- src/test/ref/test-multiply-16bit.sym | 36 +- src/test/ref/test-multiply-8bit.asm | 44 +- src/test/ref/test-multiply-8bit.cfg | 330 +- src/test/ref/test-multiply-8bit.log | 2430 ++-- src/test/ref/test-multiply-8bit.sym | 38 +- src/test/ref/test-scroll-up.cfg | 8 +- src/test/ref/test-scroll-up.log | 67 +- src/test/ref/test-scroll-up.sym | 2 +- src/test/ref/test-signed-word-minus-byte.asm | 4 +- src/test/ref/test-signed-word-minus-byte.cfg | 64 +- src/test/ref/test-signed-word-minus-byte.log | 387 +- src/test/ref/test-signed-word-minus-byte.sym | 8 +- src/test/ref/test-word-size-arrays.asm | 4 +- src/test/ref/test-word-size-arrays.cfg | 10 +- src/test/ref/test-word-size-arrays.log | 87 +- src/test/ref/test-word-size-arrays.sym | 2 +- src/test/ref/travis1.asm | 4 +- src/test/ref/travis1.cfg | 44 +- src/test/ref/travis1.log | 273 +- src/test/ref/travis1.sym | 8 +- src/test/ref/true-inline-words.cfg | 6 +- src/test/ref/true-inline-words.log | 27 +- src/test/ref/true-inline-words.sym | 2 +- src/test/ref/unroll-screenfill-for-double.cfg | 6 +- src/test/ref/unroll-screenfill-for-double.log | 27 +- src/test/ref/unroll-screenfill-for-double.sym | 2 +- src/test/ref/unroll-screenfill-while.asm | 4 +- src/test/ref/unroll-screenfill-while.cfg | 16 +- src/test/ref/unroll-screenfill-while.log | 86 +- src/test/ref/unroll-screenfill-while.sym | 2 +- src/test/ref/unused-method.cfg | 8 +- src/test/ref/unused-method.log | 55 +- src/test/ref/unused-method.sym | 2 +- src/test/ref/unused-vars.cfg | 8 +- src/test/ref/unused-vars.log | 67 +- src/test/ref/unused-vars.sym | 2 +- src/test/ref/unusedblockproblem.asm | 4 +- src/test/ref/unusedblockproblem.cfg | 6 +- src/test/ref/unusedblockproblem.log | 33 +- src/test/ref/unusedblockproblem.sym | 2 +- src/test/ref/var-register.cfg | 18 +- src/test/ref/var-register.log | 122 +- src/test/ref/var-register.sym | 4 +- src/test/ref/voronoi.asm | 28 +- src/test/ref/voronoi.cfg | 132 +- src/test/ref/voronoi.log | 810 +- src/test/ref/voronoi.sym | 16 +- src/test/ref/wfragment1.cfg | 18 +- src/test/ref/wfragment1.log | 122 +- src/test/ref/wfragment1.sym | 4 +- src/test/ref/zpparammin.cfg | 24 +- src/test/ref/zpparammin.log | 143 +- src/test/ref/zpparammin.sym | 4 +- 544 files changed, 52097 insertions(+), 51522 deletions(-) create mode 100644 src/main/java/dk/camelot64/kickc/passes/PassNRenumberLabels.java diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index 3b643b110..9b0362173 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -151,7 +151,6 @@ public class Compiler { new Pass1GenerateControlFlowGraph(program).execute(); new Pass1ResolveForwardReferences(program).execute(); new Pass1UnwindBlockScopes(program).execute(); - new Pass1TypeInference(program).execute(); if(getLog().isVerbosePass1CreateSsa()) { @@ -375,6 +374,7 @@ 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 PassNRenumberLabels(program).execute(); new PassNBlockSequencePlanner(program).step(); new Pass3AddNopBeforeCallOns(program).generate(); new PassNStatementIndices(program).execute(); diff --git a/src/main/java/dk/camelot64/kickc/model/iterator/ProgramValue.java b/src/main/java/dk/camelot64/kickc/model/iterator/ProgramValue.java index bbadebdd5..a6499b3d9 100644 --- a/src/main/java/dk/camelot64/kickc/model/iterator/ProgramValue.java +++ b/src/main/java/dk/camelot64/kickc/model/iterator/ProgramValue.java @@ -634,6 +634,26 @@ public abstract class ProgramValue { } } + public static class PhiValuePredecessor extends ProgramValue { + private final StatementPhiBlock.PhiVariable phiVariable; + private final int i; + + PhiValuePredecessor(StatementPhiBlock.PhiVariable phiVariable, int i) { + this.phiVariable = phiVariable; + this.i = i; + } + + @Override + public Value get() { + return phiVariable.getValues().get(i).getPredecessor(); + } + + @Override + public void set(Value value) { + phiVariable.getValues().get(i).setPredecessor((LabelRef) value); + } + } + /** * LValue as part of an assignment statement (or a call). */ diff --git a/src/main/java/dk/camelot64/kickc/model/iterator/ProgramValueIterator.java b/src/main/java/dk/camelot64/kickc/model/iterator/ProgramValueIterator.java index fff65cc8f..cbfe5bc53 100644 --- a/src/main/java/dk/camelot64/kickc/model/iterator/ProgramValueIterator.java +++ b/src/main/java/dk/camelot64/kickc/model/iterator/ProgramValueIterator.java @@ -118,6 +118,7 @@ public class ProgramValueIterator { for(StatementPhiBlock.PhiVariable phiVariable : ((StatementPhiBlock) statement).getPhiVariables()) { int size = phiVariable.getValues().size(); for(int i = 0; i < size; i++) { + execute(new ProgramValue.PhiValuePredecessor(phiVariable, i), handler, statement, statementsIt, block); execute(new ProgramValue.PhiValue(phiVariable, i), handler, statement, statementsIt, block); } execute(new ProgramValue.PhiVariable(phiVariable), handler, statement, statementsIt, block); diff --git a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java index 379c56f76..78982f4b9 100644 --- a/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java +++ b/src/main/java/dk/camelot64/kickc/model/symbols/Scope.java @@ -362,6 +362,14 @@ public abstract class Scope implements Symbol { return symbols.values(); } + /** + * Set the value of the counter used to number intermediate labels + * @param intermediateLabelCount The new counter value + */ + public void setIntermediateLabelCount(int intermediateLabelCount) { + this.intermediateLabelCount = intermediateLabelCount; + } + @Override public boolean equals(Object o) { if(this == o) { diff --git a/src/main/java/dk/camelot64/kickc/passes/PassNRenumberLabels.java b/src/main/java/dk/camelot64/kickc/passes/PassNRenumberLabels.java new file mode 100644 index 000000000..ff538f911 --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/passes/PassNRenumberLabels.java @@ -0,0 +1,74 @@ +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.model.Program; +import dk.camelot64.kickc.model.iterator.ProgramValueIterator; +import dk.camelot64.kickc.model.symbols.Label; +import dk.camelot64.kickc.model.symbols.Scope; +import dk.camelot64.kickc.model.symbols.Symbol; +import dk.camelot64.kickc.model.values.LabelRef; +import dk.camelot64.kickc.model.values.Value; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * Renumber all labels in the program + */ +public class PassNRenumberLabels extends Pass2SsaOptimization { + + public PassNRenumberLabels(Program program) { + super(program); + } + + @Override + public boolean step() { + Map renamed = new LinkedHashMap<>(); + renumberLabels(getScope(), renamed); + for(Scope scope : getScope().getAllScopes(true)) { + renumberLabels(scope, renamed); + } + ProgramValueIterator.execute(getGraph(), (programValue, currentStmt, stmtIt, currentBlock) -> { + Value value = programValue.get(); + if(value instanceof LabelRef) { + LabelRef newLabelRef = renamed.get(value); + if(newLabelRef!=null) { + programValue.set(newLabelRef); + } + } + } + ); + return false; + } + + private void renumberLabels(Scope scope, Map renamed) { + int labelIdx = 1; + List