mirror of https://gitlab.com/camelot/kickc.git
594 lines
22 KiB
Plaintext
594 lines
22 KiB
Plaintext
|
|
CONTROL FLOW GRAPH SSA
|
|
|
|
void main()
|
|
main: scope:[main] from __start
|
|
main::a#0 = 3
|
|
to:main::@1
|
|
main::@1: scope:[main] from main main::@1
|
|
main::a#2 = phi( main/main::a#0, main::@1/main::a#1 )
|
|
main::SCREEN[main::a#2] = main::a#2
|
|
main::a#1 = ++ main::a#2
|
|
main::$0 = main::a#1 < $e
|
|
unroll if(main::$0) goto main::@1
|
|
to:main::@2
|
|
main::@2: scope:[main] from main::@1
|
|
main::a#3 = phi( main::@1/main::a#1 )
|
|
main::SCREEN[main::a#3] = main::a#3
|
|
to:main::@return
|
|
main::@return: scope:[main] from main::@2
|
|
return
|
|
to:@return
|
|
|
|
void __start()
|
|
__start: scope:[__start] from
|
|
call main
|
|
to:__start::@1
|
|
__start::@1: scope:[__start] from __start
|
|
to:__start::@return
|
|
__start::@return: scope:[__start] from __start::@1
|
|
return
|
|
to:@return
|
|
|
|
SYMBOL TABLE SSA
|
|
void __start()
|
|
void main()
|
|
bool main::$0
|
|
__constant char *main::SCREEN = (char *)$400
|
|
char main::a
|
|
char main::a#0
|
|
char main::a#1
|
|
char main::a#2
|
|
char main::a#3
|
|
|
|
Adding number conversion cast (unumber) $e in main::$0 = main::a#1 < $e
|
|
Successful SSA optimization PassNAddNumberTypeConversions
|
|
Simplifying constant pointer cast (char *) 1024
|
|
Simplifying constant integer cast $e
|
|
Successful SSA optimization PassNCastSimplification
|
|
Finalized unsigned number type (char) $e
|
|
Successful SSA optimization PassNFinalizeNumberTypeConversions
|
|
Alias main::a#1 = main::a#3
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Simple Condition main::$0 [5] unroll if(main::a#1<$e) goto main::@1
|
|
Successful SSA optimization Pass2ConditionalJumpSimplification
|
|
Constant main::a#0 = 3
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Removing unused procedure __start
|
|
Removing unused procedure block __start
|
|
Removing unused procedure block __start::@1
|
|
Removing unused procedure block __start::@return
|
|
Successful SSA optimization PassNEliminateEmptyStart
|
|
Unrolling loop Loop head: main::@1 tails: main::@1 blocks: main::@1
|
|
Successful SSA optimization Pass2LoopUnroll
|
|
Identical Phi Values main::a#2 main::a#0
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Negating conditional jump and destination [3] if(main::a#1>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
|
|
Constant right-side identified [2] main::a#1 = ++ main::a#0
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant main::a#1 = ++main::a#0
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Removing PHI-reference to removed block (main::@1) in block main::@2
|
|
if() condition always false - eliminating [3] if(main::a#1>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Alias main::a#4 = main::a#6
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Unrolling loop Loop head: main::@1_1 tails: main::@1_1 blocks: main::@1_1
|
|
Successful SSA optimization Pass2LoopUnroll
|
|
Identical Phi Values main::a#5 main::a#1
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Negating conditional jump and destination [4] if(main::a#4>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
|
|
Constant right-side identified [3] main::a#4 = ++ main::a#1
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant main::a#4 = ++main::a#1
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Removing PHI-reference to removed block (main::@1_1) in block main::@2
|
|
if() condition always false - eliminating [4] if(main::a#4>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Alias main::a#7 = main::a#9
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Unrolling loop Loop head: main::@1_2 tails: main::@1_2 blocks: main::@1_2
|
|
Successful SSA optimization Pass2LoopUnroll
|
|
Identical Phi Values main::a#8 main::a#4
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Negating conditional jump and destination [5] if(main::a#7>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
|
|
Constant right-side identified [4] main::a#7 = ++ main::a#4
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant main::a#7 = ++main::a#4
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Removing PHI-reference to removed block (main::@1_2) in block main::@2
|
|
if() condition always false - eliminating [5] if(main::a#7>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Alias main::a#10 = main::a#12
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Unrolling loop Loop head: main::@1_3 tails: main::@1_3 blocks: main::@1_3
|
|
Successful SSA optimization Pass2LoopUnroll
|
|
Identical Phi Values main::a#11 main::a#7
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Negating conditional jump and destination [6] if(main::a#10>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
|
|
Constant right-side identified [5] main::a#10 = ++ main::a#7
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant main::a#10 = ++main::a#7
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Removing PHI-reference to removed block (main::@1_3) in block main::@2
|
|
if() condition always false - eliminating [6] if(main::a#10>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Alias main::a#13 = main::a#15
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Unrolling loop Loop head: main::@1_4 tails: main::@1_4 blocks: main::@1_4
|
|
Successful SSA optimization Pass2LoopUnroll
|
|
Identical Phi Values main::a#14 main::a#10
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Negating conditional jump and destination [7] if(main::a#13>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
|
|
Constant right-side identified [6] main::a#13 = ++ main::a#10
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant main::a#13 = ++main::a#10
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Removing PHI-reference to removed block (main::@1_4) in block main::@2
|
|
if() condition always false - eliminating [7] if(main::a#13>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Alias main::a#16 = main::a#18
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Unrolling loop Loop head: main::@1_5 tails: main::@1_5 blocks: main::@1_5
|
|
Successful SSA optimization Pass2LoopUnroll
|
|
Identical Phi Values main::a#17 main::a#13
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Negating conditional jump and destination [8] if(main::a#16>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
|
|
Constant right-side identified [7] main::a#16 = ++ main::a#13
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant main::a#16 = ++main::a#13
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Removing PHI-reference to removed block (main::@1_5) in block main::@2
|
|
if() condition always false - eliminating [8] if(main::a#16>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Alias main::a#19 = main::a#21
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Unrolling loop Loop head: main::@1_6 tails: main::@1_6 blocks: main::@1_6
|
|
Successful SSA optimization Pass2LoopUnroll
|
|
Identical Phi Values main::a#20 main::a#16
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Negating conditional jump and destination [9] if(main::a#19>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
|
|
Constant right-side identified [8] main::a#19 = ++ main::a#16
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant main::a#19 = ++main::a#16
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Removing PHI-reference to removed block (main::@1_6) in block main::@2
|
|
if() condition always false - eliminating [9] if(main::a#19>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Alias main::a#22 = main::a#24
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Unrolling loop Loop head: main::@1_7 tails: main::@1_7 blocks: main::@1_7
|
|
Successful SSA optimization Pass2LoopUnroll
|
|
Identical Phi Values main::a#23 main::a#19
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Negating conditional jump and destination [10] if(main::a#22>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
|
|
Constant right-side identified [9] main::a#22 = ++ main::a#19
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant main::a#22 = ++main::a#19
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Removing PHI-reference to removed block (main::@1_7) in block main::@2
|
|
if() condition always false - eliminating [10] if(main::a#22>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Alias main::a#25 = main::a#27
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Unrolling loop Loop head: main::@1_8 tails: main::@1_8 blocks: main::@1_8
|
|
Successful SSA optimization Pass2LoopUnroll
|
|
Identical Phi Values main::a#26 main::a#22
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Negating conditional jump and destination [11] if(main::a#25>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
|
|
Constant right-side identified [10] main::a#25 = ++ main::a#22
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant main::a#25 = ++main::a#22
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Removing PHI-reference to removed block (main::@1_8) in block main::@2
|
|
if() condition always false - eliminating [11] if(main::a#25>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Alias main::a#28 = main::a#30
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Unrolling loop Loop head: main::@1_9 tails: main::@1_9 blocks: main::@1_9
|
|
Successful SSA optimization Pass2LoopUnroll
|
|
Identical Phi Values main::a#29 main::a#25
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Negating conditional jump and destination [12] if(main::a#28>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
|
|
Constant right-side identified [11] main::a#28 = ++ main::a#25
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant main::a#28 = ++main::a#25
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Removing PHI-reference to removed block (main::@1_9) in block main::@2
|
|
if() condition always false - eliminating [12] if(main::a#28>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Alias main::a#31 = main::a#33
|
|
Successful SSA optimization Pass2AliasElimination
|
|
Unrolling loop Loop head: main::@1_10 tails: main::@1_10 blocks: main::@1_10
|
|
Successful SSA optimization Pass2LoopUnroll
|
|
Identical Phi Values main::a#32 main::a#28
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Negating conditional jump and destination [13] if(main::a#31>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
|
|
Constant right-side identified [12] main::a#31 = ++ main::a#28
|
|
Successful SSA optimization Pass2ConstantRValueConsolidation
|
|
Constant main::a#31 = ++main::a#28
|
|
Successful SSA optimization Pass2ConstantIdentification
|
|
Removing PHI-reference to removed block (main::@1_10) in block main::@1_11
|
|
if() condition always true - replacing block destination [13] if(main::a#31>=$e) goto main::@2
|
|
Successful SSA optimization Pass2ConstantIfs
|
|
Eliminating variable main::a#35 from unused block main::@1_11
|
|
Eliminating variable 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
|
|
Successful SSA optimization Pass2EliminateUnusedBlocks
|
|
Identical Phi Values main::a#34 main::a#31
|
|
Successful SSA optimization Pass2IdenticalPhiElimination
|
|
Inlining constant with different constant siblings main::a#0
|
|
Inlining constant with different constant siblings main::a#1
|
|
Inlining constant with different constant siblings main::a#4
|
|
Inlining constant with different constant siblings main::a#7
|
|
Inlining constant with different constant siblings main::a#10
|
|
Inlining constant with different constant siblings main::a#13
|
|
Inlining constant with different constant siblings main::a#16
|
|
Inlining constant with different constant siblings main::a#19
|
|
Inlining constant with different constant siblings main::a#22
|
|
Inlining constant with different constant siblings main::a#25
|
|
Inlining constant with different constant siblings main::a#28
|
|
Inlining constant with different constant siblings main::a#31
|
|
Constant inlined main::a#0 = 3
|
|
Constant inlined main::a#19 = ++++++++++++++3
|
|
Constant inlined main::a#28 = ++++++++++++++++++++3
|
|
Constant inlined main::a#1 = ++3
|
|
Constant inlined main::a#16 = ++++++++++++3
|
|
Constant inlined main::a#22 = ++++++++++++++++3
|
|
Constant inlined main::a#7 = ++++++3
|
|
Constant inlined main::a#10 = ++++++++3
|
|
Constant inlined main::a#31 = ++++++++++++++++++++++3
|
|
Constant inlined main::a#4 = ++++3
|
|
Constant inlined main::a#25 = ++++++++++++++++++3
|
|
Constant inlined main::a#13 = ++++++++++3
|
|
Successful SSA optimization Pass2ConstantInlining
|
|
Consolidated array index constant in *(main::SCREEN+3)
|
|
Consolidated array index constant in *(main::SCREEN+++3)
|
|
Consolidated array index constant in *(main::SCREEN+++++3)
|
|
Consolidated array index constant in *(main::SCREEN+++++++3)
|
|
Consolidated array index constant in *(main::SCREEN+++++++++3)
|
|
Consolidated array index constant in *(main::SCREEN+++++++++++3)
|
|
Consolidated array index constant in *(main::SCREEN+++++++++++++3)
|
|
Consolidated array index constant in *(main::SCREEN+++++++++++++++3)
|
|
Consolidated array index constant in *(main::SCREEN+++++++++++++++++3)
|
|
Consolidated array index constant in *(main::SCREEN+++++++++++++++++++3)
|
|
Consolidated array index constant in *(main::SCREEN+++++++++++++++++++++3)
|
|
Consolidated array index constant in *(main::SCREEN+++++++++++++++++++++++3)
|
|
Successful SSA optimization Pass2ConstantAdditionElimination
|
|
Simplifying constant integer increment ++3
|
|
Simplifying constant integer increment ++3
|
|
Simplifying constant integer increment ++3
|
|
Simplifying constant integer increment ++4
|
|
Simplifying constant integer increment ++4
|
|
Simplifying constant integer increment ++5
|
|
Simplifying constant integer increment ++5
|
|
Simplifying constant integer increment ++6
|
|
Simplifying constant integer increment ++6
|
|
Simplifying constant integer increment ++7
|
|
Simplifying constant integer increment ++7
|
|
Simplifying constant integer increment ++8
|
|
Simplifying constant integer increment ++8
|
|
Simplifying constant integer increment ++9
|
|
Simplifying constant integer increment ++9
|
|
Simplifying constant integer increment ++$a
|
|
Simplifying constant integer increment ++$a
|
|
Simplifying constant integer increment ++$b
|
|
Simplifying constant integer increment ++$b
|
|
Simplifying constant integer increment ++$c
|
|
Simplifying constant integer increment ++$c
|
|
Simplifying constant integer increment ++$d
|
|
Successful SSA optimization Pass2ConstantSimplification
|
|
Simplifying constant integer increment ++4
|
|
Simplifying constant integer increment ++5
|
|
Simplifying constant integer increment ++6
|
|
Simplifying constant integer increment ++7
|
|
Simplifying constant integer increment ++8
|
|
Simplifying constant integer increment ++9
|
|
Simplifying constant integer increment ++$a
|
|
Simplifying constant integer increment ++$b
|
|
Simplifying constant integer increment ++$c
|
|
Simplifying constant integer increment ++$d
|
|
Successful SSA optimization Pass2ConstantSimplification
|
|
Adding NOP phi() at start of main
|
|
CALL GRAPH
|
|
|
|
Created 0 initial phi equivalence classes
|
|
Coalesced down to 0 phi equivalence classes
|
|
Adding NOP phi() at start of main
|
|
|
|
FINAL CONTROL FLOW GRAPH
|
|
|
|
void main()
|
|
main: scope:[main] from
|
|
[0] phi()
|
|
to:main::@1
|
|
main::@1: scope:[main] from main
|
|
[1] *(main::SCREEN+3) = 3
|
|
to:main::@1_1
|
|
main::@1_1: scope:[main] from main::@1
|
|
[2] *(main::SCREEN+4) = 4
|
|
to:main::@1_2
|
|
main::@1_2: scope:[main] from main::@1_1
|
|
[3] *(main::SCREEN+5) = 5
|
|
to:main::@1_3
|
|
main::@1_3: scope:[main] from main::@1_2
|
|
[4] *(main::SCREEN+6) = 6
|
|
to:main::@1_4
|
|
main::@1_4: scope:[main] from main::@1_3
|
|
[5] *(main::SCREEN+7) = 7
|
|
to:main::@1_5
|
|
main::@1_5: scope:[main] from main::@1_4
|
|
[6] *(main::SCREEN+8) = 8
|
|
to:main::@1_6
|
|
main::@1_6: scope:[main] from main::@1_5
|
|
[7] *(main::SCREEN+9) = 9
|
|
to:main::@1_7
|
|
main::@1_7: scope:[main] from main::@1_6
|
|
[8] *(main::SCREEN+$a) = $a
|
|
to:main::@1_8
|
|
main::@1_8: scope:[main] from main::@1_7
|
|
[9] *(main::SCREEN+$b) = $b
|
|
to:main::@1_9
|
|
main::@1_9: scope:[main] from main::@1_8
|
|
[10] *(main::SCREEN+$c) = $c
|
|
to:main::@1_10
|
|
main::@1_10: scope:[main] from main::@1_9
|
|
[11] *(main::SCREEN+$d) = $d
|
|
to:main::@2
|
|
main::@2: scope:[main] from main::@1_10
|
|
[12] *(main::SCREEN+$e) = $e
|
|
to:main::@return
|
|
main::@return: scope:[main] from main::@2
|
|
[13] return
|
|
to:@return
|
|
|
|
|
|
VARIABLE REGISTER WEIGHTS
|
|
void main()
|
|
char main::a
|
|
|
|
Initial phi equivalence classes
|
|
Complete equivalence classes
|
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
|
Statement [1] *(main::SCREEN+3) = 3 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [2] *(main::SCREEN+4) = 4 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [3] *(main::SCREEN+5) = 5 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [4] *(main::SCREEN+6) = 6 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [5] *(main::SCREEN+7) = 7 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [6] *(main::SCREEN+8) = 8 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [7] *(main::SCREEN+9) = 9 [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [8] *(main::SCREEN+$a) = $a [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [9] *(main::SCREEN+$b) = $b [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [10] *(main::SCREEN+$c) = $c [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [11] *(main::SCREEN+$d) = $d [ ] ( [ ] { } ) always clobbers reg byte a
|
|
Statement [12] *(main::SCREEN+$e) = $e [ ] ( [ ] { } ) always clobbers reg byte a
|
|
|
|
REGISTER UPLIFT SCOPES
|
|
Uplift Scope [main]
|
|
Uplift Scope []
|
|
|
|
Uplifting [main] best 144 combination
|
|
Uplifting [] best 144 combination
|
|
|
|
ASSEMBLER BEFORE OPTIMIZATION
|
|
// File Comments
|
|
// An unrolled loop modifying a var used later
|
|
// Upstart
|
|
// Commodore 64 PRG executable file
|
|
.file [name="unroll-loop-modifyvar.prg", type="prg", segments="Program"]
|
|
.segmentdef Program [segments="Basic, Code, Data"]
|
|
.segmentdef Basic [start=$0801]
|
|
.segmentdef Code [start=$80d]
|
|
.segmentdef Data [startAfter="Code"]
|
|
.segment Basic
|
|
:BasicUpstart(main)
|
|
// Global Constants & labels
|
|
.segment Code
|
|
// main
|
|
main: {
|
|
.label SCREEN = $400
|
|
jmp __b1
|
|
// main::@1
|
|
__b1:
|
|
// [1] *(main::SCREEN+3) = 3 -- _deref_pbuc1=vbuc2
|
|
lda #3
|
|
sta SCREEN+3
|
|
jmp __b1_1
|
|
// main::@1_1
|
|
__b1_1:
|
|
// [2] *(main::SCREEN+4) = 4 -- _deref_pbuc1=vbuc2
|
|
lda #4
|
|
sta SCREEN+4
|
|
jmp __b1_2
|
|
// main::@1_2
|
|
__b1_2:
|
|
// [3] *(main::SCREEN+5) = 5 -- _deref_pbuc1=vbuc2
|
|
lda #5
|
|
sta SCREEN+5
|
|
jmp __b1_3
|
|
// main::@1_3
|
|
__b1_3:
|
|
// [4] *(main::SCREEN+6) = 6 -- _deref_pbuc1=vbuc2
|
|
lda #6
|
|
sta SCREEN+6
|
|
jmp __b1_4
|
|
// main::@1_4
|
|
__b1_4:
|
|
// [5] *(main::SCREEN+7) = 7 -- _deref_pbuc1=vbuc2
|
|
lda #7
|
|
sta SCREEN+7
|
|
jmp __b1_5
|
|
// main::@1_5
|
|
__b1_5:
|
|
// [6] *(main::SCREEN+8) = 8 -- _deref_pbuc1=vbuc2
|
|
lda #8
|
|
sta SCREEN+8
|
|
jmp __b1_6
|
|
// main::@1_6
|
|
__b1_6:
|
|
// [7] *(main::SCREEN+9) = 9 -- _deref_pbuc1=vbuc2
|
|
lda #9
|
|
sta SCREEN+9
|
|
jmp __b1_7
|
|
// main::@1_7
|
|
__b1_7:
|
|
// [8] *(main::SCREEN+$a) = $a -- _deref_pbuc1=vbuc2
|
|
lda #$a
|
|
sta SCREEN+$a
|
|
jmp __b1_8
|
|
// main::@1_8
|
|
__b1_8:
|
|
// [9] *(main::SCREEN+$b) = $b -- _deref_pbuc1=vbuc2
|
|
lda #$b
|
|
sta SCREEN+$b
|
|
jmp __b1_9
|
|
// main::@1_9
|
|
__b1_9:
|
|
// [10] *(main::SCREEN+$c) = $c -- _deref_pbuc1=vbuc2
|
|
lda #$c
|
|
sta SCREEN+$c
|
|
jmp __b1_10
|
|
// main::@1_10
|
|
__b1_10:
|
|
// [11] *(main::SCREEN+$d) = $d -- _deref_pbuc1=vbuc2
|
|
lda #$d
|
|
sta SCREEN+$d
|
|
jmp __b2
|
|
// main::@2
|
|
__b2:
|
|
// [12] *(main::SCREEN+$e) = $e -- _deref_pbuc1=vbuc2
|
|
lda #$e
|
|
sta SCREEN+$e
|
|
jmp __breturn
|
|
// main::@return
|
|
__breturn:
|
|
// [13] return
|
|
rts
|
|
}
|
|
// File Data
|
|
|
|
ASSEMBLER OPTIMIZATIONS
|
|
Removing instruction jmp __b1
|
|
Removing instruction jmp __b1_1
|
|
Removing instruction jmp __b1_2
|
|
Removing instruction jmp __b1_3
|
|
Removing instruction jmp __b1_4
|
|
Removing instruction jmp __b1_5
|
|
Removing instruction jmp __b1_6
|
|
Removing instruction jmp __b1_7
|
|
Removing instruction jmp __b1_8
|
|
Removing instruction jmp __b1_9
|
|
Removing instruction jmp __b1_10
|
|
Removing instruction jmp __b2
|
|
Removing instruction jmp __breturn
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
|
Removing instruction __b1:
|
|
Removing instruction __b1_1:
|
|
Removing instruction __b1_2:
|
|
Removing instruction __b1_3:
|
|
Removing instruction __b1_4:
|
|
Removing instruction __b1_5:
|
|
Removing instruction __b1_6:
|
|
Removing instruction __b1_7:
|
|
Removing instruction __b1_8:
|
|
Removing instruction __b1_9:
|
|
Removing instruction __b1_10:
|
|
Removing instruction __b2:
|
|
Removing instruction __breturn:
|
|
Succesful ASM optimization Pass5UnusedLabelElimination
|
|
|
|
FINAL SYMBOL TABLE
|
|
void main()
|
|
__constant char *main::SCREEN = (char *) 1024
|
|
char main::a
|
|
|
|
|
|
|
|
FINAL ASSEMBLER
|
|
Score: 78
|
|
|
|
// File Comments
|
|
// An unrolled loop modifying a var used later
|
|
// Upstart
|
|
// Commodore 64 PRG executable file
|
|
.file [name="unroll-loop-modifyvar.prg", type="prg", segments="Program"]
|
|
.segmentdef Program [segments="Basic, Code, Data"]
|
|
.segmentdef Basic [start=$0801]
|
|
.segmentdef Code [start=$80d]
|
|
.segmentdef Data [startAfter="Code"]
|
|
.segment Basic
|
|
:BasicUpstart(main)
|
|
// Global Constants & labels
|
|
.segment Code
|
|
// main
|
|
main: {
|
|
.label SCREEN = $400
|
|
// main::@1
|
|
// SCREEN[a]=a
|
|
// [1] *(main::SCREEN+3) = 3 -- _deref_pbuc1=vbuc2
|
|
lda #3
|
|
sta SCREEN+3
|
|
// main::@1_1
|
|
// [2] *(main::SCREEN+4) = 4 -- _deref_pbuc1=vbuc2
|
|
lda #4
|
|
sta SCREEN+4
|
|
// main::@1_2
|
|
// [3] *(main::SCREEN+5) = 5 -- _deref_pbuc1=vbuc2
|
|
lda #5
|
|
sta SCREEN+5
|
|
// main::@1_3
|
|
// [4] *(main::SCREEN+6) = 6 -- _deref_pbuc1=vbuc2
|
|
lda #6
|
|
sta SCREEN+6
|
|
// main::@1_4
|
|
// [5] *(main::SCREEN+7) = 7 -- _deref_pbuc1=vbuc2
|
|
lda #7
|
|
sta SCREEN+7
|
|
// main::@1_5
|
|
// [6] *(main::SCREEN+8) = 8 -- _deref_pbuc1=vbuc2
|
|
lda #8
|
|
sta SCREEN+8
|
|
// main::@1_6
|
|
// [7] *(main::SCREEN+9) = 9 -- _deref_pbuc1=vbuc2
|
|
lda #9
|
|
sta SCREEN+9
|
|
// main::@1_7
|
|
// [8] *(main::SCREEN+$a) = $a -- _deref_pbuc1=vbuc2
|
|
lda #$a
|
|
sta SCREEN+$a
|
|
// main::@1_8
|
|
// [9] *(main::SCREEN+$b) = $b -- _deref_pbuc1=vbuc2
|
|
lda #$b
|
|
sta SCREEN+$b
|
|
// main::@1_9
|
|
// [10] *(main::SCREEN+$c) = $c -- _deref_pbuc1=vbuc2
|
|
lda #$c
|
|
sta SCREEN+$c
|
|
// main::@1_10
|
|
// [11] *(main::SCREEN+$d) = $d -- _deref_pbuc1=vbuc2
|
|
lda #$d
|
|
sta SCREEN+$d
|
|
// main::@2
|
|
// [12] *(main::SCREEN+$e) = $e -- _deref_pbuc1=vbuc2
|
|
lda #$e
|
|
sta SCREEN+$e
|
|
// main::@return
|
|
// }
|
|
// [13] return
|
|
rts
|
|
}
|
|
// File Data
|
|
|