Inlined call call __init CONTROL FLOW GRAPH SSA void main() main: scope:[main] from __start::@1 main::$0 = main::x1 - main::x0 main::xd#0 = main::$0 main::$1 = main::y1 - main::y0 main::yd#0 = main::$1 main::x#0 = main::x0 main::y#0 = main::y0 main::$2 = main::yd#0 / 2 main::e#0 = main::$2 main::$3 = main::y#0 * $28 main::$4 = SCREEN + main::$3 main::$5 = main::$4 + main::x#0 main::cursor#0 = main::$5 to:main::@1 main::@1: scope:[main] from main main::@2 main::y#3 = phi( main/main::y#0, main::@2/main::y#4 ) main::xd#1 = phi( main/main::xd#0, main::@2/main::xd#3 ) main::yd#1 = phi( main/main::yd#0, main::@2/main::yd#2 ) main::e#3 = phi( main/main::e#0, main::@2/main::e#5 ) main::x#2 = phi( main/main::x#0, main::@2/main::x#3 ) main::cursor#3 = phi( main/main::cursor#0, main::@2/main::cursor#5 ) *main::cursor#3 = STAR main::$6 = main::x#2 + 1 main::x#1 = main::$6 main::$7 = main::cursor#3 + 1 main::cursor#1 = main::$7 main::$8 = main::e#3 + main::yd#1 main::e#1 = main::$8 main::$9 = main::xd#1 <= main::e#1 main::$10 = ! main::$9 if(main::$10) goto main::@2 to:main::@3 main::@2: scope:[main] from main::@1 main::@3 main::y#4 = phi( main::@1/main::y#3, main::@3/main::y#1 ) main::xd#3 = phi( main::@1/main::xd#1, main::@3/main::xd#2 ) main::yd#2 = phi( main::@1/main::yd#1, main::@3/main::yd#3 ) main::e#5 = phi( main::@1/main::e#1, main::@3/main::e#2 ) main::cursor#5 = phi( main::@1/main::cursor#1, main::@3/main::cursor#2 ) main::x#3 = phi( main::@1/main::x#1, main::@3/main::x#4 ) main::$14 = main::x1 + 1 main::$15 = main::x#3 < main::$14 if(main::$15) goto main::@1 to:main::@return main::@3: scope:[main] from main::@1 main::yd#3 = phi( main::@1/main::yd#1 ) main::x#4 = phi( main::@1/main::x#1 ) main::xd#2 = phi( main::@1/main::xd#1 ) main::e#4 = phi( main::@1/main::e#1 ) main::cursor#4 = phi( main::@1/main::cursor#1 ) main::y#2 = phi( main::@1/main::y#3 ) main::$11 = main::y#2 + 1 main::y#1 = main::$11 main::$12 = main::cursor#4 + $28 main::cursor#2 = main::$12 main::$13 = main::e#4 - main::xd#2 main::e#2 = main::$13 to:main::@2 main::@return: scope:[main] from main::@2 return to:@return void __start() __start: scope:[__start] from to:__start::__init1 __start::__init1: scope:[__start] from __start to:__start::@1 __start::@1: scope:[__start] from __start::__init1 call main to:__start::@2 __start::@2: scope:[__start] from __start::@1 to:__start::@return __start::@return: scope:[__start] from __start::@2 return to:@return SYMBOL TABLE SSA const byte* SCREEN[$28*$19] = (byte*)$400 const byte STAR = $51 void __start() void main() byte~ main::$0 byte~ main::$1 bool~ main::$10 number~ main::$11 byte*~ main::$12 byte~ main::$13 number~ main::$14 bool~ main::$15 number~ main::$2 number~ main::$3 byte*~ main::$4 byte*~ main::$5 number~ main::$6 byte*~ main::$7 byte~ main::$8 bool~ main::$9 byte* main::cursor byte* main::cursor#0 byte* main::cursor#1 byte* main::cursor#2 byte* main::cursor#3 byte* main::cursor#4 byte* main::cursor#5 byte main::e byte main::e#0 byte main::e#1 byte main::e#2 byte main::e#3 byte main::e#4 byte main::e#5 byte main::x byte main::x#0 byte main::x#1 byte main::x#2 byte main::x#3 byte main::x#4 const byte main::x0 = 4 const byte main::x1 = $27 byte main::xd byte main::xd#0 byte main::xd#1 byte main::xd#2 byte main::xd#3 byte main::y byte main::y#0 byte main::y#1 byte main::y#2 byte main::y#3 byte main::y#4 const byte main::y0 = 4 const byte main::y1 = $18 byte main::yd byte main::yd#0 byte main::yd#1 byte main::yd#2 byte main::yd#3 Adding number conversion cast (unumber) 2 in main::$2 = main::yd#0 / 2 Adding number conversion cast (unumber) main::$2 in main::$2 = main::yd#0 / (unumber)2 Adding number conversion cast (unumber) $28 in main::$3 = main::y#0 * $28 Adding number conversion cast (unumber) main::$3 in main::$3 = main::y#0 * (unumber)$28 Adding number conversion cast (unumber) 1 in main::$6 = main::x#2 + 1 Adding number conversion cast (unumber) main::$6 in main::$6 = main::x#2 + (unumber)1 Adding number conversion cast (unumber) 1 in main::$7 = main::cursor#3 + 1 Adding number conversion cast (unumber) 1 in main::$14 = main::x1 + 1 Adding number conversion cast (unumber) main::$14 in main::$14 = main::x1 + (unumber)1 Adding number conversion cast (unumber) 1 in main::$11 = main::y#2 + 1 Adding number conversion cast (unumber) main::$11 in main::$11 = main::y#2 + (unumber)1 Adding number conversion cast (unumber) $28 in main::$12 = main::cursor#4 + $28 Successful SSA optimization PassNAddNumberTypeConversions Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 2 Simplifying constant integer cast $28 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in main::$2 = main::yd#0 / 2 Inferred type updated to byte in main::$3 = main::y#0 * $28 Inferred type updated to byte in main::$6 = main::x#2 + 1 Inferred type updated to byte in main::$14 = main::x1 + 1 Inferred type updated to byte in main::$11 = main::y#2 + 1 Inversing boolean not [21] main::$10 = main::xd#1 > main::e#1 from [20] main::$9 = main::xd#1 <= main::e#1 Successful SSA optimization Pass2UnaryNotSimplification Alias main::xd#0 = main::$0 Alias main::yd#0 = main::$1 Alias main::e#0 = main::$2 Alias main::cursor#0 = main::$5 Alias main::x#1 = main::$6 main::x#4 Alias main::cursor#1 = main::$7 main::cursor#4 Alias main::e#1 = main::$8 main::e#4 Alias main::y#2 = main::y#3 Alias main::xd#1 = main::xd#2 Alias main::yd#1 = main::yd#3 Alias main::y#1 = main::$11 Alias main::cursor#2 = main::$12 Alias main::e#2 = main::$13 Successful SSA optimization Pass2AliasElimination Alias main::x#1 = main::x#3 Alias main::yd#1 = main::yd#2 Alias main::xd#1 = main::xd#3 Successful SSA optimization Pass2AliasElimination Identical Phi Values main::yd#1 main::yd#0 Identical Phi Values main::xd#1 main::xd#0 Successful SSA optimization Pass2IdenticalPhiElimination Simple Condition main::$10 [14] if(main::xd#0>main::e#1) goto main::@2 Simple Condition main::$15 [18] if(main::x#1main::e#1) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@1 [7] main::y#1 = main::y#2 + 1 [8] main::cursor#2 = main::cursor#1 + $28 [9] main::e#2 = main::e#1 - main::xd#0 to:main::@2 main::@2: scope:[main] from main::@1 main::@3 [10] main::y#4 = phi( main::@1/main::y#2, main::@3/main::y#1 ) [10] main::e#5 = phi( main::@1/main::e#1, main::@3/main::e#2 ) [10] main::cursor#5 = phi( main::@1/main::cursor#1, main::@3/main::cursor#2 ) [11] if(main::x#1main::@1] __b1_from_main: // [1] phi main::y#2 = main::y0 [phi:main->main::@1#0] -- vbuz1=vbuc1 lda #y0 sta.z y // [1] phi main::e#3 = main::yd#0/2 [phi:main->main::@1#1] -- vbuxx=vbuc1 ldx #yd/2 // [1] phi main::x#2 = main::x0 [phi:main->main::@1#2] -- vbuz1=vbuc1 lda #x0 sta.z x // [1] phi main::cursor#3 = SCREEN+main::y0*$28+main::x0 [phi:main->main::@1#3] -- pbuz1=pbuc1 lda #SCREEN+y0*$28+x0 sta.z cursor+1 jmp __b1 // [1] phi from main::@2 to main::@1 [phi:main::@2->main::@1] __b1_from___b2: // [1] phi main::y#2 = main::y#4 [phi:main::@2->main::@1#0] -- register_copy // [1] phi main::e#3 = main::e#5 [phi:main::@2->main::@1#1] -- register_copy // [1] phi main::x#2 = main::x#1 [phi:main::@2->main::@1#2] -- register_copy // [1] phi main::cursor#3 = main::cursor#5 [phi:main::@2->main::@1#3] -- register_copy jmp __b1 // main::@1 __b1: // [2] *main::cursor#3 = STAR -- _deref_pbuz1=vbuc1 lda #STAR ldy #0 sta (cursor),y // [3] main::x#1 = main::x#2 + 1 -- vbuz1=vbuz1_plus_1 inc.z x // [4] main::cursor#1 = main::cursor#3 + 1 -- pbuz1=pbuz1_plus_1 inc.z cursor bne !+ inc.z cursor+1 !: // [5] main::e#1 = main::e#3 + main::yd#0 -- vbuxx=vbuxx_plus_vbuc1 txa axs #-[yd] // [6] if(main::xd#0>main::e#1) goto main::@2 -- vbuc1_gt_vbuxx_then_la1 cpx #xd bcc __b2_from___b1 jmp __b3 // main::@3 __b3: // [7] main::y#1 = main::y#2 + 1 -- vbuz1=vbuz1_plus_1 inc.z y // [8] main::cursor#2 = main::cursor#1 + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z cursor sta.z cursor bcc !+ inc.z cursor+1 !: // [9] main::e#2 = main::e#1 - main::xd#0 -- vbuxx=vbuxx_minus_vbuc1 txa axs #xd // [10] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] __b2_from___b1: __b2_from___b3: // [10] phi main::y#4 = main::y#2 [phi:main::@1/main::@3->main::@2#0] -- register_copy // [10] phi main::e#5 = main::e#1 [phi:main::@1/main::@3->main::@2#1] -- register_copy // [10] phi main::cursor#5 = main::cursor#1 [phi:main::@1/main::@3->main::@2#2] -- register_copy jmp __b2 // main::@2 __b2: // [11] if(main::x#1main::@1] // [1] phi main::y#2 = main::y0 [phi:main->main::@1#0] -- vbuz1=vbuc1 lda #y0 sta.z y // [1] phi main::e#3 = main::yd#0/2 [phi:main->main::@1#1] -- vbuxx=vbuc1 ldx #yd/2 // [1] phi main::x#2 = main::x0 [phi:main->main::@1#2] -- vbuz1=vbuc1 lda #x0 sta.z x // [1] phi main::cursor#3 = SCREEN+main::y0*$28+main::x0 [phi:main->main::@1#3] -- pbuz1=pbuc1 lda #SCREEN+y0*$28+x0 sta.z cursor+1 // [1] phi from main::@2 to main::@1 [phi:main::@2->main::@1] // [1] phi main::y#2 = main::y#4 [phi:main::@2->main::@1#0] -- register_copy // [1] phi main::e#3 = main::e#5 [phi:main::@2->main::@1#1] -- register_copy // [1] phi main::x#2 = main::x#1 [phi:main::@2->main::@1#2] -- register_copy // [1] phi main::cursor#3 = main::cursor#5 [phi:main::@2->main::@1#3] -- register_copy // main::@1 __b1: // *cursor = STAR // [2] *main::cursor#3 = STAR -- _deref_pbuz1=vbuc1 lda #STAR ldy #0 sta (cursor),y // x = x + 1 // [3] main::x#1 = main::x#2 + 1 -- vbuz1=vbuz1_plus_1 inc.z x // cursor = cursor + 1 // [4] main::cursor#1 = main::cursor#3 + 1 -- pbuz1=pbuz1_plus_1 inc.z cursor bne !+ inc.z cursor+1 !: // e = e+yd // [5] main::e#1 = main::e#3 + main::yd#0 -- vbuxx=vbuxx_plus_vbuc1 txa axs #-[yd] // if(xd<=e) // [6] if(main::xd#0>main::e#1) goto main::@2 -- vbuc1_gt_vbuxx_then_la1 cpx #xd bcc __b2 // main::@3 // y = y+1 // [7] main::y#1 = main::y#2 + 1 -- vbuz1=vbuz1_plus_1 inc.z y // cursor = cursor + 40 // [8] main::cursor#2 = main::cursor#1 + $28 -- pbuz1=pbuz1_plus_vbuc1 lda #$28 clc adc.z cursor sta.z cursor bcc !+ inc.z cursor+1 !: // e = e - xd // [9] main::e#2 = main::e#1 - main::xd#0 -- vbuxx=vbuxx_minus_vbuc1 txa axs #xd // [10] phi from main::@1 main::@3 to main::@2 [phi:main::@1/main::@3->main::@2] // [10] phi main::y#4 = main::y#2 [phi:main::@1/main::@3->main::@2#0] -- register_copy // [10] phi main::e#5 = main::e#1 [phi:main::@1/main::@3->main::@2#1] -- register_copy // [10] phi main::cursor#5 = main::cursor#1 [phi:main::@1/main::@3->main::@2#2] -- register_copy // main::@2 __b2: // while (x<(x1+1)) // [11] if(main::x#1