1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-29 03:56:15 +00:00

Added a few more c's to test.

This commit is contained in:
jespergravgaard 2020-04-09 09:36:09 +02:00
parent 23ae5cf5f5
commit ab10bd59b4
5 changed files with 126 additions and 122 deletions

View File

@ -2,9 +2,11 @@
char * const SCREEN = 0x0400;
char idx;
char c;
// And a little code using them
void main() {
char c;
for( char c: 0..10)
for( char c: 0..10)
SCREEN[idx++] = '*';

View File

@ -5,9 +5,9 @@
.label SCREEN = $400
// And a little code using them
main: {
.label c = 2
.label c1 = 2
lda #0
sta.z c
sta.z c1
tay
__b1:
ldx #0
@ -21,9 +21,9 @@ main: {
inx
cpx #$b
bne __b2
inc.z c
inc.z c1
lda #$b
cmp.z c
cmp.z c1
bne __b1
// }
rts

View File

@ -13,20 +13,20 @@ main: scope:[main] from @1
[4] phi()
to:main::@1
main::@1: scope:[main] from main main::@3
[5] (byte) main::c#4 ← phi( main/(byte) 0 main::@3/(byte) main::c#1 )
[5] (byte) main::c1#4 ← phi( main/(byte) 0 main::@3/(byte) main::c1#1 )
[5] (byte) idx#7 ← phi( main/(byte) 0 main::@3/(byte) idx#1 )
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
[6] (byte) main::c1#2 ← phi( main::@1/(byte) 0 main::@2/(byte) main::c1#1 )
[6] (byte) main::c2#2 ← phi( main::@1/(byte) 0 main::@2/(byte) main::c2#1 )
[6] (byte) idx#4 ← phi( main::@1/(byte) idx#7 main::@2/(byte) idx#1 )
[7] *((const nomodify byte*) SCREEN + (byte) idx#4) ← (byte) '*'
[8] (byte) idx#1 ← ++ (byte) idx#4
[9] (byte) main::c1#1 ← ++ (byte) main::c1#2
[10] if((byte) main::c1#1!=(byte) $b) goto main::@2
[9] (byte) main::c2#1 ← ++ (byte) main::c2#2
[10] if((byte) main::c2#1!=(byte) $b) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@2
[11] (byte) main::c#1 ← ++ (byte) main::c#4
[12] if((byte) main::c#1!=(byte) $b) goto main::@1
[11] (byte) main::c1#1 ← ++ (byte) main::c1#4
[12] if((byte) main::c1#1!=(byte) $b) goto main::@1
to:main::@return
main::@return: scope:[main] from main::@3
[13] return

View File

@ -1,3 +1,5 @@
Identified constant variable (byte) c
Identified constant variable (byte) main::c
Culled Empty Block (label) main::@4
CONTROL FLOW GRAPH SSA
@ -8,28 +10,28 @@ CONTROL FLOW GRAPH SSA
(void()) main()
main: scope:[main] from @1
(byte) idx#10 ← phi( @1/(byte) idx#9 )
(byte) main::c#0 ← (byte) 0
(byte) main::c1#0 ← (byte) 0
to:main::@1
main::@1: scope:[main] from main main::@3
(byte) main::c#4 ← phi( main/(byte) main::c#0 main::@3/(byte) main::c#1 )
(byte) main::c1#4 ← phi( main/(byte) main::c1#0 main::@3/(byte) main::c1#1 )
(byte) idx#7 ← phi( main/(byte) idx#10 main::@3/(byte) idx#8 )
(byte) main::c1#0 ← (byte) 0
(byte) main::c2#0 ← (byte) 0
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
(byte) main::c#3 ← phi( main::@1/(byte) main::c#4 main::@2/(byte) main::c#3 )
(byte) main::c1#2 ← phi( main::@1/(byte) main::c1#0 main::@2/(byte) main::c1#1 )
(byte) main::c1#3 ← phi( main::@1/(byte) main::c1#4 main::@2/(byte) main::c1#3 )
(byte) main::c2#2 ← phi( main::@1/(byte) main::c2#0 main::@2/(byte) main::c2#1 )
(byte) idx#4 ← phi( main::@1/(byte) idx#7 main::@2/(byte) idx#1 )
*((const nomodify byte*) SCREEN + (byte) idx#4) ← (byte) '*'
(byte) idx#1 ← ++ (byte) idx#4
(byte) main::c1#1 ← (byte) main::c1#2 + rangenext(0,$a)
(bool~) main::$0 ← (byte) main::c1#1 != rangelast(0,$a)
(byte) main::c2#1 ← (byte) main::c2#2 + rangenext(0,$a)
(bool~) main::$0 ← (byte) main::c2#1 != rangelast(0,$a)
if((bool~) main::$0) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@2
(byte) idx#8 ← phi( main::@2/(byte) idx#1 )
(byte) main::c#2 ← phi( main::@2/(byte) main::c#3 )
(byte) main::c#1 ← (byte) main::c#2 + rangenext(0,$a)
(bool~) main::$1 ← (byte) main::c#1 != rangelast(0,$a)
(byte) main::c1#2 ← phi( main::@2/(byte) main::c1#3 )
(byte) main::c1#1 ← (byte) main::c1#2 + rangenext(0,$a)
(bool~) main::$1 ← (byte) main::c1#1 != rangelast(0,$a)
if((bool~) main::$1) goto main::@1
to:main::@return
main::@return: scope:[main] from main::@3
@ -72,41 +74,41 @@ SYMBOL TABLE SSA
(label) main::@2
(label) main::@3
(label) main::@return
(byte) main::c
(byte) main::c#0
(byte) main::c#1
(byte) main::c#2
(byte) main::c#3
(byte) main::c#4
(byte) main::c1
(byte) main::c1#0
(byte) main::c1#1
(byte) main::c1#2
(byte) main::c1#3
(byte) main::c1#4
(byte) main::c2
(byte) main::c2#0
(byte) main::c2#1
(byte) main::c2#2
Simplifying constant pointer cast (byte*) 1024
Successful SSA optimization PassNCastSimplification
Alias main::c#2 = main::c#3
Alias main::c1#2 = main::c1#3
Alias idx#1 = idx#8 idx#5 idx#2
Alias idx#0 = idx#9
Alias idx#3 = idx#6
Successful SSA optimization Pass2AliasElimination
Identical Phi Values (byte) idx#10 (byte) idx#0
Identical Phi Values (byte) main::c#2 (byte) main::c#4
Identical Phi Values (byte) main::c1#2 (byte) main::c1#4
Identical Phi Values (byte) idx#3 (byte) idx#1
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) main::$0 [10] if((byte) main::c1#1!=rangelast(0,$a)) goto main::@2
Simple Condition (bool~) main::$1 [13] if((byte) main::c#1!=rangelast(0,$a)) goto main::@1
Simple Condition (bool~) main::$0 [10] if((byte) main::c2#1!=rangelast(0,$a)) goto main::@2
Simple Condition (bool~) main::$1 [13] if((byte) main::c1#1!=rangelast(0,$a)) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte) idx#0 = 0
Constant (const byte) main::c#0 = 0
Constant (const byte) main::c1#0 = 0
Constant (const byte) main::c2#0 = 0
Successful SSA optimization Pass2ConstantIdentification
Resolved ranged next value [8] main::c1#1 ← ++ main::c1#2 to ++
Resolved ranged comparison value [10] if(main::c1#1!=rangelast(0,$a)) goto main::@2 to (number) $b
Resolved ranged next value [11] main::c#1 ← ++ main::c#4 to ++
Resolved ranged comparison value [13] if(main::c#1!=rangelast(0,$a)) goto main::@1 to (number) $b
Adding number conversion cast (unumber) $b in if((byte) main::c1#1!=(number) $b) goto main::@2
Adding number conversion cast (unumber) $b in if((byte) main::c#1!=(number) $b) goto main::@1
Resolved ranged next value [8] main::c2#1 ← ++ main::c2#2 to ++
Resolved ranged comparison value [10] if(main::c2#1!=rangelast(0,$a)) goto main::@2 to (number) $b
Resolved ranged next value [11] main::c1#1 ← ++ main::c1#4 to ++
Resolved ranged comparison value [13] if(main::c1#1!=rangelast(0,$a)) goto main::@1 to (number) $b
Adding number conversion cast (unumber) $b in if((byte) main::c2#1!=(number) $b) goto main::@2
Adding number conversion cast (unumber) $b in if((byte) main::c1#1!=(number) $b) goto main::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast $b
Simplifying constant integer cast $b
@ -114,11 +116,11 @@ Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) $b
Finalized unsigned number type (byte) $b
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inlining constant with var siblings (const byte) main::c#0
Inlining constant with var siblings (const byte) main::c1#0
Inlining constant with var siblings (const byte) main::c2#0
Inlining constant with var siblings (const byte) idx#0
Constant inlined main::c1#0 = (byte) 0
Constant inlined main::c#0 = (byte) 0
Constant inlined main::c2#0 = (byte) 0
Constant inlined idx#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@5(between main::@3 and main::@1)
@ -134,9 +136,9 @@ Calls in [] to main:2
Created 4 initial phi equivalence classes
Coalesced [7] idx#12 ← idx#7
Coalesced [16] idx#11 ← idx#1
Coalesced [17] main::c#5 ← main::c#1
Coalesced [17] main::c1#5 ← main::c1#1
Coalesced (already) [18] idx#13 ← idx#1
Coalesced [19] main::c1#3 ← main::c1#1
Coalesced [19] main::c2#3 ← main::c2#1
Coalesced down to 3 phi equivalence classes
Culled Empty Block (label) @2
Culled Empty Block (label) main::@5
@ -162,20 +164,20 @@ main: scope:[main] from @1
[4] phi()
to:main::@1
main::@1: scope:[main] from main main::@3
[5] (byte) main::c#4 ← phi( main/(byte) 0 main::@3/(byte) main::c#1 )
[5] (byte) main::c1#4 ← phi( main/(byte) 0 main::@3/(byte) main::c1#1 )
[5] (byte) idx#7 ← phi( main/(byte) 0 main::@3/(byte) idx#1 )
to:main::@2
main::@2: scope:[main] from main::@1 main::@2
[6] (byte) main::c1#2 ← phi( main::@1/(byte) 0 main::@2/(byte) main::c1#1 )
[6] (byte) main::c2#2 ← phi( main::@1/(byte) 0 main::@2/(byte) main::c2#1 )
[6] (byte) idx#4 ← phi( main::@1/(byte) idx#7 main::@2/(byte) idx#1 )
[7] *((const nomodify byte*) SCREEN + (byte) idx#4) ← (byte) '*'
[8] (byte) idx#1 ← ++ (byte) idx#4
[9] (byte) main::c1#1 ← ++ (byte) main::c1#2
[10] if((byte) main::c1#1!=(byte) $b) goto main::@2
[9] (byte) main::c2#1 ← ++ (byte) main::c2#2
[10] if((byte) main::c2#1!=(byte) $b) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@2
[11] (byte) main::c#1 ← ++ (byte) main::c#4
[12] if((byte) main::c#1!=(byte) $b) goto main::@1
[11] (byte) main::c1#1 ← ++ (byte) main::c1#4
[12] if((byte) main::c1#1!=(byte) $b) goto main::@1
to:main::@return
main::@return: scope:[main] from main::@3
[13] return
@ -188,24 +190,24 @@ VARIABLE REGISTER WEIGHTS
(byte) idx#4 1552.0
(byte) idx#7 202.0
(void()) main()
(byte) main::c
(byte) main::c#1 151.5
(byte) main::c#4 33.666666666666664
(byte) main::c1
(byte) main::c1#1 1501.5
(byte) main::c1#2 667.3333333333334
(byte) main::c1#1 151.5
(byte) main::c1#4 33.666666666666664
(byte) main::c2
(byte) main::c2#1 1501.5
(byte) main::c2#2 667.3333333333334
Initial phi equivalence classes
[ main::c#4 main::c#1 ]
[ main::c1#4 main::c1#1 ]
[ idx#4 idx#7 idx#1 ]
[ main::c1#2 main::c1#1 ]
[ main::c2#2 main::c2#1 ]
Complete equivalence classes
[ main::c#4 main::c#1 ]
[ main::c1#4 main::c1#1 ]
[ idx#4 idx#7 idx#1 ]
[ main::c1#2 main::c1#1 ]
Allocated zp[1]:2 [ main::c#4 main::c#1 ]
[ main::c2#2 main::c2#1 ]
Allocated zp[1]:2 [ main::c1#4 main::c1#1 ]
Allocated zp[1]:3 [ idx#4 idx#7 idx#1 ]
Allocated zp[1]:4 [ main::c1#2 main::c1#1 ]
Allocated zp[1]:4 [ main::c2#2 main::c2#1 ]
INITIAL ASM
Target platform is c64basic / MOS6502X
@ -237,34 +239,34 @@ __bend:
// main
// And a little code using them
main: {
.label c1 = 4
.label c = 2
.label c2 = 4
.label c1 = 2
// [5] phi from main to main::@1 [phi:main->main::@1]
__b1_from_main:
// [5] phi (byte) main::c#4 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
// [5] phi (byte) main::c1#4 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
lda #0
sta.z c
sta.z c1
// [5] phi (byte) idx#7 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1
lda #0
sta.z idx
jmp __b1
// [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
__b1_from___b3:
// [5] phi (byte) main::c#4 = (byte) main::c#1 [phi:main::@3->main::@1#0] -- register_copy
// [5] phi (byte) main::c1#4 = (byte) main::c1#1 [phi:main::@3->main::@1#0] -- register_copy
// [5] phi (byte) idx#7 = (byte) idx#1 [phi:main::@3->main::@1#1] -- register_copy
jmp __b1
// main::@1
__b1:
// [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
__b2_from___b1:
// [6] phi (byte) main::c1#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1
// [6] phi (byte) main::c2#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuz1=vbuc1
lda #0
sta.z c1
sta.z c2
// [6] phi (byte) idx#4 = (byte) idx#7 [phi:main::@1->main::@2#1] -- register_copy
jmp __b2
// [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
__b2_from___b2:
// [6] phi (byte) main::c1#2 = (byte) main::c1#1 [phi:main::@2->main::@2#0] -- register_copy
// [6] phi (byte) main::c2#2 = (byte) main::c2#1 [phi:main::@2->main::@2#0] -- register_copy
// [6] phi (byte) idx#4 = (byte) idx#1 [phi:main::@2->main::@2#1] -- register_copy
jmp __b2
// main::@2
@ -275,20 +277,20 @@ main: {
sta SCREEN,y
// [8] (byte) idx#1 ← ++ (byte) idx#4 -- vbuz1=_inc_vbuz1
inc.z idx
// [9] (byte) main::c1#1 ← ++ (byte) main::c1#2 -- vbuz1=_inc_vbuz1
inc.z c1
// [10] if((byte) main::c1#1!=(byte) $b) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
// [9] (byte) main::c2#1 ← ++ (byte) main::c2#2 -- vbuz1=_inc_vbuz1
inc.z c2
// [10] if((byte) main::c2#1!=(byte) $b) goto main::@2 -- vbuz1_neq_vbuc1_then_la1
lda #$b
cmp.z c1
cmp.z c2
bne __b2_from___b2
jmp __b3
// main::@3
__b3:
// [11] (byte) main::c#1 ← ++ (byte) main::c#4 -- vbuz1=_inc_vbuz1
inc.z c
// [12] if((byte) main::c#1!=(byte) $b) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
// [11] (byte) main::c1#1 ← ++ (byte) main::c1#4 -- vbuz1=_inc_vbuz1
inc.z c1
// [12] if((byte) main::c1#1!=(byte) $b) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$b
cmp.z c
cmp.z c1
bne __b1_from___b3
jmp __breturn
// main::@return
@ -299,23 +301,23 @@ main: {
// File Data
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [7] *((const nomodify byte*) SCREEN + (byte) idx#4) ← (byte) '*' [ main::c#4 idx#4 main::c1#2 ] ( main:2 [ main::c#4 idx#4 main::c1#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::c#4 main::c#1 ]
Statement [7] *((const nomodify byte*) SCREEN + (byte) idx#4) ← (byte) '*' [ main::c1#4 idx#4 main::c2#2 ] ( main:2 [ main::c1#4 idx#4 main::c2#2 ] { } ) always clobbers reg byte a
Removing always clobbered register reg byte a as potential for zp[1]:2 [ main::c1#4 main::c1#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:3 [ idx#4 idx#7 idx#1 ]
Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::c1#2 main::c1#1 ]
Statement [7] *((const nomodify byte*) SCREEN + (byte) idx#4) ← (byte) '*' [ main::c#4 idx#4 main::c1#2 ] ( main:2 [ main::c#4 idx#4 main::c1#2 ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::c#4 main::c#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Removing always clobbered register reg byte a as potential for zp[1]:4 [ main::c2#2 main::c2#1 ]
Statement [7] *((const nomodify byte*) SCREEN + (byte) idx#4) ← (byte) '*' [ main::c1#4 idx#4 main::c2#2 ] ( main:2 [ main::c1#4 idx#4 main::c2#2 ] { } ) always clobbers reg byte a
Potential registers zp[1]:2 [ main::c1#4 main::c1#1 ] : zp[1]:2 , reg byte x , reg byte y ,
Potential registers zp[1]:3 [ idx#4 idx#7 idx#1 ] : zp[1]:3 , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::c1#2 main::c1#1 ] : zp[1]:4 , reg byte x , reg byte y ,
Potential registers zp[1]:4 [ main::c2#2 main::c2#1 ] : zp[1]:4 , reg byte x , reg byte y ,
REGISTER UPLIFT SCOPES
Uplift Scope [main] 2,168.83: zp[1]:4 [ main::c1#2 main::c1#1 ] 185.17: zp[1]:2 [ main::c#4 main::c#1 ]
Uplift Scope [main] 2,168.83: zp[1]:4 [ main::c2#2 main::c2#1 ] 185.17: zp[1]:2 [ main::c1#4 main::c1#1 ]
Uplift Scope [] 2,174.6: zp[1]:3 [ idx#4 idx#7 idx#1 ]
Uplifting [main] best 3583 combination reg byte x [ main::c1#2 main::c1#1 ] zp[1]:2 [ main::c#4 main::c#1 ]
Uplifting [main] best 3583 combination reg byte x [ main::c2#2 main::c2#1 ] zp[1]:2 [ main::c1#4 main::c1#1 ]
Uplifting [] best 2953 combination reg byte y [ idx#4 idx#7 idx#1 ]
Attempting to uplift remaining variables inzp[1]:2 [ main::c#4 main::c#1 ]
Uplifting [main] best 2953 combination zp[1]:2 [ main::c#4 main::c#1 ]
Attempting to uplift remaining variables inzp[1]:2 [ main::c1#4 main::c1#1 ]
Uplifting [main] best 2953 combination zp[1]:2 [ main::c1#4 main::c1#1 ]
ASSEMBLER BEFORE OPTIMIZATION
// File Comments
@ -345,31 +347,31 @@ __bend:
// main
// And a little code using them
main: {
.label c = 2
.label c1 = 2
// [5] phi from main to main::@1 [phi:main->main::@1]
__b1_from_main:
// [5] phi (byte) main::c#4 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
// [5] phi (byte) main::c1#4 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
lda #0
sta.z c
sta.z c1
// [5] phi (byte) idx#7 = (byte) 0 [phi:main->main::@1#1] -- vbuyy=vbuc1
ldy #0
jmp __b1
// [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
__b1_from___b3:
// [5] phi (byte) main::c#4 = (byte) main::c#1 [phi:main::@3->main::@1#0] -- register_copy
// [5] phi (byte) main::c1#4 = (byte) main::c1#1 [phi:main::@3->main::@1#0] -- register_copy
// [5] phi (byte) idx#7 = (byte) idx#1 [phi:main::@3->main::@1#1] -- register_copy
jmp __b1
// main::@1
__b1:
// [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
__b2_from___b1:
// [6] phi (byte) main::c1#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1
// [6] phi (byte) main::c2#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1
ldx #0
// [6] phi (byte) idx#4 = (byte) idx#7 [phi:main::@1->main::@2#1] -- register_copy
jmp __b2
// [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
__b2_from___b2:
// [6] phi (byte) main::c1#2 = (byte) main::c1#1 [phi:main::@2->main::@2#0] -- register_copy
// [6] phi (byte) main::c2#2 = (byte) main::c2#1 [phi:main::@2->main::@2#0] -- register_copy
// [6] phi (byte) idx#4 = (byte) idx#1 [phi:main::@2->main::@2#1] -- register_copy
jmp __b2
// main::@2
@ -379,19 +381,19 @@ main: {
sta SCREEN,y
// [8] (byte) idx#1 ← ++ (byte) idx#4 -- vbuyy=_inc_vbuyy
iny
// [9] (byte) main::c1#1 ← ++ (byte) main::c1#2 -- vbuxx=_inc_vbuxx
// [9] (byte) main::c2#1 ← ++ (byte) main::c2#2 -- vbuxx=_inc_vbuxx
inx
// [10] if((byte) main::c1#1!=(byte) $b) goto main::@2 -- vbuxx_neq_vbuc1_then_la1
// [10] if((byte) main::c2#1!=(byte) $b) goto main::@2 -- vbuxx_neq_vbuc1_then_la1
cpx #$b
bne __b2_from___b2
jmp __b3
// main::@3
__b3:
// [11] (byte) main::c#1 ← ++ (byte) main::c#4 -- vbuz1=_inc_vbuz1
inc.z c
// [12] if((byte) main::c#1!=(byte) $b) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
// [11] (byte) main::c1#1 ← ++ (byte) main::c1#4 -- vbuz1=_inc_vbuz1
inc.z c1
// [12] if((byte) main::c1#1!=(byte) $b) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$b
cmp.z c
cmp.z c1
bne __b1_from___b3
jmp __breturn
// main::@return
@ -448,16 +450,16 @@ FINAL SYMBOL TABLE
(label) main::@2
(label) main::@3
(label) main::@return
(byte) main::c
(byte) main::c#1 c zp[1]:2 151.5
(byte) main::c#4 c zp[1]:2 33.666666666666664
(byte) main::c1
(byte) main::c1#1 reg byte x 1501.5
(byte) main::c1#2 reg byte x 667.3333333333334
(byte) main::c1#1 c1 zp[1]:2 151.5
(byte) main::c1#4 c1 zp[1]:2 33.666666666666664
(byte) main::c2
(byte) main::c2#1 reg byte x 1501.5
(byte) main::c2#2 reg byte x 667.3333333333334
zp[1]:2 [ main::c#4 main::c#1 ]
zp[1]:2 [ main::c1#4 main::c1#1 ]
reg byte y [ idx#4 idx#7 idx#1 ]
reg byte x [ main::c1#2 main::c1#1 ]
reg byte x [ main::c2#2 main::c2#1 ]
FINAL ASSEMBLER
@ -481,24 +483,24 @@ Score: 1951
// main
// And a little code using them
main: {
.label c = 2
.label c1 = 2
// [5] phi from main to main::@1 [phi:main->main::@1]
// [5] phi (byte) main::c#4 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
// [5] phi (byte) main::c1#4 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1
lda #0
sta.z c
sta.z c1
// [5] phi (byte) idx#7 = (byte) 0 [phi:main->main::@1#1] -- vbuyy=vbuc1
tay
// [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1]
// [5] phi (byte) main::c#4 = (byte) main::c#1 [phi:main::@3->main::@1#0] -- register_copy
// [5] phi (byte) main::c1#4 = (byte) main::c1#1 [phi:main::@3->main::@1#0] -- register_copy
// [5] phi (byte) idx#7 = (byte) idx#1 [phi:main::@3->main::@1#1] -- register_copy
// main::@1
__b1:
// [6] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
// [6] phi (byte) main::c1#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1
// [6] phi (byte) main::c2#2 = (byte) 0 [phi:main::@1->main::@2#0] -- vbuxx=vbuc1
ldx #0
// [6] phi (byte) idx#4 = (byte) idx#7 [phi:main::@1->main::@2#1] -- register_copy
// [6] phi from main::@2 to main::@2 [phi:main::@2->main::@2]
// [6] phi (byte) main::c1#2 = (byte) main::c1#1 [phi:main::@2->main::@2#0] -- register_copy
// [6] phi (byte) main::c2#2 = (byte) main::c2#1 [phi:main::@2->main::@2#0] -- register_copy
// [6] phi (byte) idx#4 = (byte) idx#1 [phi:main::@2->main::@2#1] -- register_copy
// main::@2
__b2:
@ -510,17 +512,17 @@ main: {
// [8] (byte) idx#1 ← ++ (byte) idx#4 -- vbuyy=_inc_vbuyy
iny
// for( char c: 0..10)
// [9] (byte) main::c1#1 ← ++ (byte) main::c1#2 -- vbuxx=_inc_vbuxx
// [9] (byte) main::c2#1 ← ++ (byte) main::c2#2 -- vbuxx=_inc_vbuxx
inx
// [10] if((byte) main::c1#1!=(byte) $b) goto main::@2 -- vbuxx_neq_vbuc1_then_la1
// [10] if((byte) main::c2#1!=(byte) $b) goto main::@2 -- vbuxx_neq_vbuc1_then_la1
cpx #$b
bne __b2
// main::@3
// [11] (byte) main::c#1 ← ++ (byte) main::c#4 -- vbuz1=_inc_vbuz1
inc.z c
// [12] if((byte) main::c#1!=(byte) $b) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
// [11] (byte) main::c1#1 ← ++ (byte) main::c1#4 -- vbuz1=_inc_vbuz1
inc.z c1
// [12] if((byte) main::c1#1!=(byte) $b) goto main::@1 -- vbuz1_neq_vbuc1_then_la1
lda #$b
cmp.z c
cmp.z c1
bne __b1
// main::@return
// }

View File

@ -11,13 +11,13 @@
(label) main::@2
(label) main::@3
(label) main::@return
(byte) main::c
(byte) main::c#1 c zp[1]:2 151.5
(byte) main::c#4 c zp[1]:2 33.666666666666664
(byte) main::c1
(byte) main::c1#1 reg byte x 1501.5
(byte) main::c1#2 reg byte x 667.3333333333334
(byte) main::c1#1 c1 zp[1]:2 151.5
(byte) main::c1#4 c1 zp[1]:2 33.666666666666664
(byte) main::c2
(byte) main::c2#1 reg byte x 1501.5
(byte) main::c2#2 reg byte x 667.3333333333334
zp[1]:2 [ main::c#4 main::c#1 ]
zp[1]:2 [ main::c1#4 main::c1#1 ]
reg byte y [ idx#4 idx#7 idx#1 ]
reg byte x [ main::c1#2 main::c1#1 ]
reg byte x [ main::c2#2 main::c2#1 ]