
CONTROL FLOW GRAPH SSA

void main()
main: scope:[main]  from __start
  call lvalue
  to:main::@1
main::@1: scope:[main]  from main
  call rvalue
  to:main::@2
main::@2: scope:[main]  from main::@1
  call rvaluevar
  to:main::@3
main::@3: scope:[main]  from main::@2
  call lvaluevar
  to:main::@4
main::@4: scope:[main]  from main::@3
  to:main::@return
main::@return: scope:[main]  from main::@4
  return 
  to:@return

void lvalue()
lvalue: scope:[lvalue]  from main
  *lvalue::SCREEN = 1
  lvalue::SCREEN[1] = 2
  lvalue::i#0 = 2
  to:lvalue::@1
lvalue::@1: scope:[lvalue]  from lvalue lvalue::@2
  lvalue::i#2 = phi( lvalue/lvalue::i#0, lvalue::@2/lvalue::i#1 )
  lvalue::$0 = lvalue::i#2 < $a
  if(lvalue::$0) goto lvalue::@2
  to:lvalue::@return
lvalue::@2: scope:[lvalue]  from lvalue::@1
  lvalue::i#3 = phi( lvalue::@1/lvalue::i#2 )
  lvalue::SCREEN[lvalue::i#3] = 3
  lvalue::i#1 = ++ lvalue::i#3
  to:lvalue::@1
lvalue::@return: scope:[lvalue]  from lvalue::@1
  return 
  to:@return

void rvalue()
rvalue: scope:[rvalue]  from main::@1
  rvalue::b#0 = *rvalue::SCREEN
  rvalue::b#1 = rvalue::SCREEN[1]
  rvalue::i#0 = 2
  to:rvalue::@1
rvalue::@1: scope:[rvalue]  from rvalue rvalue::@2
  rvalue::b#4 = phi( rvalue/rvalue::b#1, rvalue::@2/rvalue::b#2 )
  rvalue::i#2 = phi( rvalue/rvalue::i#0, rvalue::@2/rvalue::i#1 )
  rvalue::$0 = rvalue::i#2 < $a
  if(rvalue::$0) goto rvalue::@2
  to:rvalue::@3
rvalue::@2: scope:[rvalue]  from rvalue::@1
  rvalue::i#3 = phi( rvalue::@1/rvalue::i#2 )
  rvalue::b#2 = rvalue::SCREEN[rvalue::i#3]
  rvalue::i#1 = ++ rvalue::i#3
  to:rvalue::@1
rvalue::@3: scope:[rvalue]  from rvalue::@1
  rvalue::b#3 = phi( rvalue::@1/rvalue::b#4 )
  *rvalue::screen2 = rvalue::b#3
  to:rvalue::@return
rvalue::@return: scope:[rvalue]  from rvalue::@3
  return 
  to:@return

void lvaluevar()
lvaluevar: scope:[lvaluevar]  from main::@3
  lvaluevar::screen#0 = (char *)$400
  lvaluevar::i#0 = 2
  to:lvaluevar::@1
lvaluevar::@1: scope:[lvaluevar]  from lvaluevar lvaluevar::@2
  lvaluevar::screen#3 = phi( lvaluevar/lvaluevar::screen#0, lvaluevar::@2/lvaluevar::screen#1 )
  lvaluevar::i#2 = phi( lvaluevar/lvaluevar::i#0, lvaluevar::@2/lvaluevar::i#1 )
  lvaluevar::$0 = lvaluevar::i#2 < $a
  if(lvaluevar::$0) goto lvaluevar::@2
  to:lvaluevar::@return
lvaluevar::@2: scope:[lvaluevar]  from lvaluevar::@1
  lvaluevar::i#3 = phi( lvaluevar::@1/lvaluevar::i#2 )
  lvaluevar::screen#2 = phi( lvaluevar::@1/lvaluevar::screen#3 )
  *lvaluevar::screen#2 = lvaluevar::b
  lvaluevar::screen#1 = ++ lvaluevar::screen#2
  lvaluevar::i#1 = ++ lvaluevar::i#3
  to:lvaluevar::@1
lvaluevar::@return: scope:[lvaluevar]  from lvaluevar::@1
  return 
  to:@return

void rvaluevar()
rvaluevar: scope:[rvaluevar]  from main::@2
  rvaluevar::screen#0 = (char *)$400
  rvaluevar::b#0 = 0
  rvaluevar::i#0 = 2
  to:rvaluevar::@1
rvaluevar::@1: scope:[rvaluevar]  from rvaluevar rvaluevar::@2
  rvaluevar::b#3 = phi( rvaluevar/rvaluevar::b#0, rvaluevar::@2/rvaluevar::b#1 )
  rvaluevar::screen#3 = phi( rvaluevar/rvaluevar::screen#0, rvaluevar::@2/rvaluevar::screen#1 )
  rvaluevar::i#2 = phi( rvaluevar/rvaluevar::i#0, rvaluevar::@2/rvaluevar::i#1 )
  rvaluevar::$0 = rvaluevar::i#2 < $a
  if(rvaluevar::$0) goto rvaluevar::@2
  to:rvaluevar::@3
rvaluevar::@2: scope:[rvaluevar]  from rvaluevar::@1
  rvaluevar::i#3 = phi( rvaluevar::@1/rvaluevar::i#2 )
  rvaluevar::screen#2 = phi( rvaluevar::@1/rvaluevar::screen#3 )
  rvaluevar::b#1 = *rvaluevar::screen#2
  rvaluevar::screen#1 = ++ rvaluevar::screen#2
  rvaluevar::i#1 = ++ rvaluevar::i#3
  to:rvaluevar::@1
rvaluevar::@3: scope:[rvaluevar]  from rvaluevar::@1
  rvaluevar::b#2 = phi( rvaluevar::@1/rvaluevar::b#3 )
  *rvaluevar::screen2 = rvaluevar::b#2
  to:rvaluevar::@return
rvaluevar::@return: scope:[rvaluevar]  from rvaluevar::@3
  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 lvalue()
bool lvalue::$0
__constant char lvalue::SCREEN[$400] = (char *)$400
char lvalue::i
char lvalue::i#0
char lvalue::i#1
char lvalue::i#2
char lvalue::i#3
void lvaluevar()
bool lvaluevar::$0
__constant char lvaluevar::b = 4
char lvaluevar::i
char lvaluevar::i#0
char lvaluevar::i#1
char lvaluevar::i#2
char lvaluevar::i#3
char *lvaluevar::screen
char *lvaluevar::screen#0
char *lvaluevar::screen#1
char *lvaluevar::screen#2
char *lvaluevar::screen#3
void main()
void rvalue()
bool rvalue::$0
__constant char rvalue::SCREEN[$400] = (char *)$400
char rvalue::b
char rvalue::b#0
char rvalue::b#1
char rvalue::b#2
char rvalue::b#3
char rvalue::b#4
char rvalue::i
char rvalue::i#0
char rvalue::i#1
char rvalue::i#2
char rvalue::i#3
__constant char *rvalue::screen2 = (char *)$400
void rvaluevar()
bool rvaluevar::$0
char rvaluevar::b
char rvaluevar::b#0
char rvaluevar::b#1
char rvaluevar::b#2
char rvaluevar::b#3
char rvaluevar::i
char rvaluevar::i#0
char rvaluevar::i#1
char rvaluevar::i#2
char rvaluevar::i#3
char *rvaluevar::screen
char *rvaluevar::screen#0
char *rvaluevar::screen#1
char *rvaluevar::screen#2
char *rvaluevar::screen#3
__constant char *rvaluevar::screen2 = (char *)$400

Adding number conversion cast (unumber) 1 in *lvalue::SCREEN = 1
Adding number conversion cast (unumber) 2 in lvalue::SCREEN[1] = 2
Adding number conversion cast (unumber) 1 in lvalue::SCREEN[1] = ((unumber)) 2
Adding number conversion cast (unumber) $a in lvalue::$0 = lvalue::i#2 < $a
Adding number conversion cast (unumber) 3 in lvalue::SCREEN[lvalue::i#3] = 3
Adding number conversion cast (unumber) 1 in rvalue::b#1 = rvalue::SCREEN[1]
Adding number conversion cast (unumber) $a in rvalue::$0 = rvalue::i#2 < $a
Adding number conversion cast (unumber) $a in lvaluevar::$0 = lvaluevar::i#2 < $a
Adding number conversion cast (unumber) $a in rvaluevar::$0 = rvaluevar::i#2 < $a
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast *lvalue::SCREEN = (unumber)1
Inlining cast lvalue::SCREEN[(unumber)1] = (unumber)2
Inlining cast lvalue::SCREEN[lvalue::i#3] = (unumber)3
Successful SSA optimization Pass2InlineCast
Simplifying constant pointer cast (char *) 1024
Simplifying constant pointer cast (char *) 1024
Simplifying constant pointer cast (char *) 1024
Simplifying constant pointer cast (char *) 1024
Simplifying constant integer cast 1
Simplifying constant integer cast 2
Simplifying constant integer cast 1
Simplifying constant integer cast $a
Simplifying constant integer cast 3
Simplifying constant integer cast 1
Simplifying constant integer cast $a
Simplifying constant pointer cast (char *) 1024
Simplifying constant integer cast $a
Simplifying constant pointer cast (char *) 1024
Simplifying constant integer cast $a
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) 2
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) $a
Finalized unsigned number type (char) 3
Finalized unsigned number type (char) 1
Finalized unsigned number type (char) $a
Finalized unsigned number type (char) $a
Finalized unsigned number type (char) $a
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias lvalue::i#2 = lvalue::i#3 
Alias rvalue::i#2 = rvalue::i#3 
Alias rvalue::b#3 = rvalue::b#4 
Alias lvaluevar::screen#2 = lvaluevar::screen#3 
Alias lvaluevar::i#2 = lvaluevar::i#3 
Alias rvaluevar::screen#2 = rvaluevar::screen#3 
Alias rvaluevar::i#2 = rvaluevar::i#3 
Alias rvaluevar::b#2 = rvaluevar::b#3 
Successful SSA optimization Pass2AliasElimination
Simple Condition lvalue::$0 [10] if(lvalue::i#2<$a) goto lvalue::@2
Simple Condition rvalue::$0 [19] if(rvalue::i#2<$a) goto rvalue::@2
Simple Condition lvaluevar::$0 [28] if(lvaluevar::i#2<$a) goto lvaluevar::@2
Simple Condition rvaluevar::$0 [38] if(rvaluevar::i#2<$a) goto rvaluevar::@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant lvalue::i#0 = 2
Constant rvalue::i#0 = 2
Constant lvaluevar::screen#0 = (char *) 1024
Constant lvaluevar::i#0 = 2
Constant rvaluevar::screen#0 = (char *) 1024
Constant rvaluevar::b#0 = 0
Constant rvaluevar::i#0 = 2
Successful SSA optimization Pass2ConstantIdentification
Eliminating unused variable rvalue::b#0 and assignment [12] rvalue::b#0 = *rvalue::SCREEN
Successful SSA optimization PassNEliminateUnusedVars
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
Inlining constant with var siblings lvalue::i#0
Inlining constant with var siblings rvalue::i#0
Inlining constant with var siblings lvaluevar::screen#0
Inlining constant with var siblings lvaluevar::i#0
Inlining constant with var siblings rvaluevar::screen#0
Inlining constant with var siblings rvaluevar::b#0
Inlining constant with var siblings rvaluevar::i#0
Constant inlined lvalue::i#0 = 2
Constant inlined rvaluevar::screen#0 = (char *) 1024
Constant inlined rvaluevar::b#0 = 0
Constant inlined rvalue::i#0 = 2
Constant inlined lvaluevar::i#0 = 2
Constant inlined lvaluevar::screen#0 = (char *) 1024
Constant inlined rvaluevar::i#0 = 2
Successful SSA optimization Pass2ConstantInlining
Consolidated array index constant in *(lvalue::SCREEN+1)
Consolidated array index constant in *(rvalue::SCREEN+1)
Successful SSA optimization Pass2ConstantAdditionElimination
Finalized unsigned number type (unsigned int) $400
Finalized unsigned number type (unsigned int) $400
Successful SSA optimization PassNFinalizeNumberTypeConversions
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of rvaluevar
Adding NOP phi() at start of lvaluevar
CALL GRAPH
Calls in [main] to lvalue:1 rvalue:3 rvaluevar:5 lvaluevar:7 

Created 8 initial phi equivalence classes
Coalesced [17] lvalue::i#4 = lvalue::i#1
Coalesced [19] rvalue::b#5 = rvalue::b#1
Coalesced [26] rvalue::i#4 = rvalue::i#1
Coalesced [27] rvalue::b#6 = rvalue::b#2
Coalesced [36] rvaluevar::i#4 = rvaluevar::i#1
Coalesced [37] rvaluevar::screen#4 = rvaluevar::screen#1
Coalesced [38] rvaluevar::b#4 = rvaluevar::b#1
Coalesced [46] lvaluevar::i#4 = lvaluevar::i#1
Coalesced [47] lvaluevar::screen#4 = lvaluevar::screen#1
Coalesced down to 8 phi equivalence classes
Culled Empty Block label main::@4
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of rvaluevar
Adding NOP phi() at start of lvaluevar

FINAL CONTROL FLOW GRAPH

void main()
main: scope:[main]  from
  [0] phi()
  [1] call lvalue
  to:main::@1
main::@1: scope:[main]  from main
  [2] phi()
  [3] call rvalue
  to:main::@2
main::@2: scope:[main]  from main::@1
  [4] phi()
  [5] call rvaluevar
  to:main::@3
main::@3: scope:[main]  from main::@2
  [6] phi()
  [7] call lvaluevar
  to:main::@return
main::@return: scope:[main]  from main::@3
  [8] return 
  to:@return

void lvalue()
lvalue: scope:[lvalue]  from main
  [9] *lvalue::SCREEN = 1
  [10] *(lvalue::SCREEN+1) = 2
  to:lvalue::@1
lvalue::@1: scope:[lvalue]  from lvalue lvalue::@2
  [11] lvalue::i#2 = phi( lvalue/2, lvalue::@2/lvalue::i#1 )
  [12] if(lvalue::i#2<$a) goto lvalue::@2
  to:lvalue::@return
lvalue::@return: scope:[lvalue]  from lvalue::@1
  [13] return 
  to:@return
lvalue::@2: scope:[lvalue]  from lvalue::@1
  [14] lvalue::SCREEN[lvalue::i#2] = 3
  [15] lvalue::i#1 = ++ lvalue::i#2
  to:lvalue::@1

void rvalue()
rvalue: scope:[rvalue]  from main::@1
  [16] rvalue::b#1 = *(rvalue::SCREEN+1)
  to:rvalue::@1
rvalue::@1: scope:[rvalue]  from rvalue rvalue::@2
  [17] rvalue::b#3 = phi( rvalue/rvalue::b#1, rvalue::@2/rvalue::b#2 )
  [17] rvalue::i#2 = phi( rvalue/2, rvalue::@2/rvalue::i#1 )
  [18] if(rvalue::i#2<$a) goto rvalue::@2
  to:rvalue::@3
rvalue::@3: scope:[rvalue]  from rvalue::@1
  [19] *rvalue::screen2 = rvalue::b#3
  to:rvalue::@return
rvalue::@return: scope:[rvalue]  from rvalue::@3
  [20] return 
  to:@return
rvalue::@2: scope:[rvalue]  from rvalue::@1
  [21] rvalue::b#2 = rvalue::SCREEN[rvalue::i#2]
  [22] rvalue::i#1 = ++ rvalue::i#2
  to:rvalue::@1

void rvaluevar()
rvaluevar: scope:[rvaluevar]  from main::@2
  [23] phi()
  to:rvaluevar::@1
rvaluevar::@1: scope:[rvaluevar]  from rvaluevar rvaluevar::@2
  [24] rvaluevar::b#2 = phi( rvaluevar/0, rvaluevar::@2/rvaluevar::b#1 )
  [24] rvaluevar::screen#2 = phi( rvaluevar/(char *) 1024, rvaluevar::@2/rvaluevar::screen#1 )
  [24] rvaluevar::i#2 = phi( rvaluevar/2, rvaluevar::@2/rvaluevar::i#1 )
  [25] if(rvaluevar::i#2<$a) goto rvaluevar::@2
  to:rvaluevar::@3
rvaluevar::@3: scope:[rvaluevar]  from rvaluevar::@1
  [26] *rvaluevar::screen2 = rvaluevar::b#2
  to:rvaluevar::@return
rvaluevar::@return: scope:[rvaluevar]  from rvaluevar::@3
  [27] return 
  to:@return
rvaluevar::@2: scope:[rvaluevar]  from rvaluevar::@1
  [28] rvaluevar::b#1 = *rvaluevar::screen#2
  [29] rvaluevar::screen#1 = ++ rvaluevar::screen#2
  [30] rvaluevar::i#1 = ++ rvaluevar::i#2
  to:rvaluevar::@1

void lvaluevar()
lvaluevar: scope:[lvaluevar]  from main::@3
  [31] phi()
  to:lvaluevar::@1
lvaluevar::@1: scope:[lvaluevar]  from lvaluevar lvaluevar::@2
  [32] lvaluevar::screen#2 = phi( lvaluevar/(char *) 1024, lvaluevar::@2/lvaluevar::screen#1 )
  [32] lvaluevar::i#2 = phi( lvaluevar/2, lvaluevar::@2/lvaluevar::i#1 )
  [33] if(lvaluevar::i#2<$a) goto lvaluevar::@2
  to:lvaluevar::@return
lvaluevar::@return: scope:[lvaluevar]  from lvaluevar::@1
  [34] return 
  to:@return
lvaluevar::@2: scope:[lvaluevar]  from lvaluevar::@1
  [35] *lvaluevar::screen#2 = lvaluevar::b
  [36] lvaluevar::screen#1 = ++ lvaluevar::screen#2
  [37] lvaluevar::i#1 = ++ lvaluevar::i#2
  to:lvaluevar::@1


VARIABLE REGISTER WEIGHTS
void lvalue()
char lvalue::i
char lvalue::i#1 // 202.0
char lvalue::i#2 // 134.66666666666666
void lvaluevar()
char lvaluevar::i
char lvaluevar::i#1 // 202.0
char lvaluevar::i#2 // 75.75
char *lvaluevar::screen
char *lvaluevar::screen#1 // 101.0
char *lvaluevar::screen#2 // 101.0
void main()
void rvalue()
char rvalue::b
char rvalue::b#1 // 22.0
char rvalue::b#2 // 101.0
char rvalue::b#3 // 61.5
char rvalue::i
char rvalue::i#1 // 202.0
char rvalue::i#2 // 134.66666666666666
void rvaluevar()
char rvaluevar::b
char rvaluevar::b#1 // 67.33333333333333
char rvaluevar::b#2 // 56.0
char rvaluevar::i
char rvaluevar::i#1 // 202.0
char rvaluevar::i#2 // 75.75
char *rvaluevar::screen
char *rvaluevar::screen#1 // 101.0
char *rvaluevar::screen#2 // 101.0

Initial phi equivalence classes
[ lvalue::i#2 lvalue::i#1 ]
[ rvalue::i#2 rvalue::i#1 ]
[ rvalue::b#3 rvalue::b#1 rvalue::b#2 ]
[ rvaluevar::i#2 rvaluevar::i#1 ]
[ rvaluevar::screen#2 rvaluevar::screen#1 ]
[ rvaluevar::b#2 rvaluevar::b#1 ]
[ lvaluevar::i#2 lvaluevar::i#1 ]
[ lvaluevar::screen#2 lvaluevar::screen#1 ]
Complete equivalence classes
[ lvalue::i#2 lvalue::i#1 ]
[ rvalue::i#2 rvalue::i#1 ]
[ rvalue::b#3 rvalue::b#1 rvalue::b#2 ]
[ rvaluevar::i#2 rvaluevar::i#1 ]
[ rvaluevar::screen#2 rvaluevar::screen#1 ]
[ rvaluevar::b#2 rvaluevar::b#1 ]
[ lvaluevar::i#2 lvaluevar::i#1 ]
[ lvaluevar::screen#2 lvaluevar::screen#1 ]
Allocated zp[1]:2 [ lvalue::i#2 lvalue::i#1 ]
Allocated zp[1]:3 [ rvalue::i#2 rvalue::i#1 ]
Allocated zp[1]:4 [ rvaluevar::i#2 rvaluevar::i#1 ]
Allocated zp[1]:5 [ lvaluevar::i#2 lvaluevar::i#1 ]
Allocated zp[2]:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Allocated zp[2]:8 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
Allocated zp[1]:10 [ rvalue::b#3 rvalue::b#1 rvalue::b#2 ]
Allocated zp[1]:11 [ rvaluevar::b#2 rvaluevar::b#1 ]
REGISTER UPLIFT POTENTIAL REGISTERS
Statement [9] *lvalue::SCREEN = 1 [ ] ( lvalue:1 [ ] { }  ) always clobbers reg byte a 
Statement [10] *(lvalue::SCREEN+1) = 2 [ ] ( lvalue:1 [ ] { }  ) always clobbers reg byte a 
Statement [14] lvalue::SCREEN[lvalue::i#2] = 3 [ lvalue::i#2 ] ( lvalue:1 [ lvalue::i#2 ] { }  ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp[1]:2 [ lvalue::i#2 lvalue::i#1 ]
Statement [28] rvaluevar::b#1 = *rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#2 rvaluevar::b#1 ] ( rvaluevar:5 [ rvaluevar::i#2 rvaluevar::screen#2 rvaluevar::b#1 ] { }  ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte a as potential for zp[1]:4 [ rvaluevar::i#2 rvaluevar::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:4 [ rvaluevar::i#2 rvaluevar::i#1 ]
Statement [35] *lvaluevar::screen#2 = lvaluevar::b [ lvaluevar::i#2 lvaluevar::screen#2 ] ( lvaluevar:7 [ lvaluevar::i#2 lvaluevar::screen#2 ] { }  ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte a as potential for zp[1]:5 [ lvaluevar::i#2 lvaluevar::i#1 ]
Removing always clobbered register reg byte y as potential for zp[1]:5 [ lvaluevar::i#2 lvaluevar::i#1 ]
Statement [9] *lvalue::SCREEN = 1 [ ] ( lvalue:1 [ ] { }  ) always clobbers reg byte a 
Statement [10] *(lvalue::SCREEN+1) = 2 [ ] ( lvalue:1 [ ] { }  ) always clobbers reg byte a 
Statement [14] lvalue::SCREEN[lvalue::i#2] = 3 [ lvalue::i#2 ] ( lvalue:1 [ lvalue::i#2 ] { }  ) always clobbers reg byte a 
Statement [28] rvaluevar::b#1 = *rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#2 rvaluevar::b#1 ] ( rvaluevar:5 [ rvaluevar::i#2 rvaluevar::screen#2 rvaluevar::b#1 ] { }  ) always clobbers reg byte a reg byte y 
Statement [35] *lvaluevar::screen#2 = lvaluevar::b [ lvaluevar::i#2 lvaluevar::screen#2 ] ( lvaluevar:7 [ lvaluevar::i#2 lvaluevar::screen#2 ] { }  ) always clobbers reg byte a reg byte y 
Potential registers zp[1]:2 [ lvalue::i#2 lvalue::i#1 ] : zp[1]:2 , reg byte x , reg byte y , 
Potential registers zp[1]:3 [ rvalue::i#2 rvalue::i#1 ] : zp[1]:3 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:10 [ rvalue::b#3 rvalue::b#1 rvalue::b#2 ] : zp[1]:10 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:4 [ rvaluevar::i#2 rvaluevar::i#1 ] : zp[1]:4 , reg byte x , 
Potential registers zp[2]:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] : zp[2]:6 , 
Potential registers zp[1]:11 [ rvaluevar::b#2 rvaluevar::b#1 ] : zp[1]:11 , reg byte a , reg byte x , reg byte y , 
Potential registers zp[1]:5 [ lvaluevar::i#2 lvaluevar::i#1 ] : zp[1]:5 , reg byte x , 
Potential registers zp[2]:8 [ lvaluevar::screen#2 lvaluevar::screen#1 ] : zp[2]:8 , 

REGISTER UPLIFT SCOPES
Uplift Scope [rvaluevar] 277.75: zp[1]:4 [ rvaluevar::i#2 rvaluevar::i#1 ] 202: zp[2]:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] 123.33: zp[1]:11 [ rvaluevar::b#2 rvaluevar::b#1 ] 
Uplift Scope [rvalue] 336.67: zp[1]:3 [ rvalue::i#2 rvalue::i#1 ] 184.5: zp[1]:10 [ rvalue::b#3 rvalue::b#1 rvalue::b#2 ] 
Uplift Scope [lvaluevar] 277.75: zp[1]:5 [ lvaluevar::i#2 lvaluevar::i#1 ] 202: zp[2]:8 [ lvaluevar::screen#2 lvaluevar::screen#1 ] 
Uplift Scope [lvalue] 336.67: zp[1]:2 [ lvalue::i#2 lvalue::i#1 ] 
Uplift Scope [main] 
Uplift Scope [] 

Uplifting [rvaluevar] best 1942 combination reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp[2]:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] reg byte y [ rvaluevar::b#2 rvaluevar::b#1 ] 
Uplifting [rvalue] best 1786 combination reg byte x [ rvalue::i#2 rvalue::i#1 ] reg byte a [ rvalue::b#3 rvalue::b#1 rvalue::b#2 ] 
Uplifting [lvaluevar] best 1696 combination reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] zp[2]:8 [ lvaluevar::screen#2 lvaluevar::screen#1 ] 
Uplifting [lvalue] best 1576 combination reg byte x [ lvalue::i#2 lvalue::i#1 ] 
Uplifting [main] best 1576 combination 
Uplifting [] best 1576 combination 
Coalescing zero page register [ zp[2]:8 [ lvaluevar::screen#2 lvaluevar::screen#1 ] ] with [ zp[2]:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] ]
Allocated (was zp[2]:8) zp[2]:2 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ]

ASSEMBLER BEFORE OPTIMIZATION
  // File Comments
// Test all types of pointers
  // Upstart
  // Commodore 64 PRG executable file
.file [name="ptrtest.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: {
    // [1] call lvalue
    jsr lvalue
    // [2] phi from main to main::@1 [phi:main->main::@1]
  __b1_from_main:
    jmp __b1
    // main::@1
  __b1:
    // [3] call rvalue
    jsr rvalue
    // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  __b2_from___b1:
    jmp __b2
    // main::@2
  __b2:
    // [5] call rvaluevar
    // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar]
  rvaluevar_from___b2:
    jsr rvaluevar
    // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
  __b3_from___b2:
    jmp __b3
    // main::@3
  __b3:
    // [7] call lvaluevar
    // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar]
  lvaluevar_from___b3:
    jsr lvaluevar
    jmp __breturn
    // main::@return
  __breturn:
    // [8] return 
    rts
}
  // lvalue
lvalue: {
    // A constant pointer
    .label SCREEN = $400
    // [9] *lvalue::SCREEN = 1 -- _deref_pbuc1=vbuc2 
    // LValue constant pointer dereference
    lda #1
    sta SCREEN
    // [10] *(lvalue::SCREEN+1) = 2 -- _deref_pbuc1=vbuc2 
    // LValue constant array constant indexing
    lda #2
    sta SCREEN+1
    // [11] phi from lvalue to lvalue::@1 [phi:lvalue->lvalue::@1]
  __b1_from_lvalue:
    // [11] phi lvalue::i#2 = 2 [phi:lvalue->lvalue::@1#0] -- vbuxx=vbuc1 
    ldx #2
    jmp __b1
    // lvalue::@1
  __b1:
    // [12] if(lvalue::i#2<$a) goto lvalue::@2 -- vbuxx_lt_vbuc1_then_la1 
    cpx #$a
    bcc __b2
    jmp __breturn
    // lvalue::@return
  __breturn:
    // [13] return 
    rts
    // lvalue::@2
  __b2:
    // [14] lvalue::SCREEN[lvalue::i#2] = 3 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #3
    sta SCREEN,x
    // [15] lvalue::i#1 = ++ lvalue::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [11] phi from lvalue::@2 to lvalue::@1 [phi:lvalue::@2->lvalue::@1]
  __b1_from___b2:
    // [11] phi lvalue::i#2 = lvalue::i#1 [phi:lvalue::@2->lvalue::@1#0] -- register_copy 
    jmp __b1
}
  // rvalue
rvalue: {
    // A constant pointer
    .label SCREEN = $400
    .label screen2 = $400
    // [16] rvalue::b#1 = *(rvalue::SCREEN+1) -- vbuaa=_deref_pbuc1 
    // RValue constant array pointer constant index
    lda SCREEN+1
    // [17] phi from rvalue to rvalue::@1 [phi:rvalue->rvalue::@1]
  __b1_from_rvalue:
    // [17] phi rvalue::b#3 = rvalue::b#1 [phi:rvalue->rvalue::@1#0] -- register_copy 
    // [17] phi rvalue::i#2 = 2 [phi:rvalue->rvalue::@1#1] -- vbuxx=vbuc1 
    ldx #2
    jmp __b1
    // rvalue::@1
  __b1:
    // [18] if(rvalue::i#2<$a) goto rvalue::@2 -- vbuxx_lt_vbuc1_then_la1 
    cpx #$a
    bcc __b2
    jmp __b3
    // rvalue::@3
  __b3:
    // [19] *rvalue::screen2 = rvalue::b#3 -- _deref_pbuc1=vbuaa 
    sta screen2
    jmp __breturn
    // rvalue::@return
  __breturn:
    // [20] return 
    rts
    // rvalue::@2
  __b2:
    // [21] rvalue::b#2 = rvalue::SCREEN[rvalue::i#2] -- vbuaa=pbuc1_derefidx_vbuxx 
    lda SCREEN,x
    // [22] rvalue::i#1 = ++ rvalue::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [17] phi from rvalue::@2 to rvalue::@1 [phi:rvalue::@2->rvalue::@1]
  __b1_from___b2:
    // [17] phi rvalue::b#3 = rvalue::b#2 [phi:rvalue::@2->rvalue::@1#0] -- register_copy 
    // [17] phi rvalue::i#2 = rvalue::i#1 [phi:rvalue::@2->rvalue::@1#1] -- register_copy 
    jmp __b1
}
  // rvaluevar
rvaluevar: {
    .label screen2 = $400
    .label screen = 2
    // [24] phi from rvaluevar to rvaluevar::@1 [phi:rvaluevar->rvaluevar::@1]
  __b1_from_rvaluevar:
    // [24] phi rvaluevar::b#2 = 0 [phi:rvaluevar->rvaluevar::@1#0] -- vbuyy=vbuc1 
    ldy #0
    // [24] phi rvaluevar::screen#2 = (char *) 1024 [phi:rvaluevar->rvaluevar::@1#1] -- pbuz1=pbuc1 
    lda #<$400
    sta.z screen
    lda #>$400
    sta.z screen+1
    // [24] phi rvaluevar::i#2 = 2 [phi:rvaluevar->rvaluevar::@1#2] -- vbuxx=vbuc1 
    ldx #2
    jmp __b1
    // rvaluevar::@1
  __b1:
    // [25] if(rvaluevar::i#2<$a) goto rvaluevar::@2 -- vbuxx_lt_vbuc1_then_la1 
    cpx #$a
    bcc __b2
    jmp __b3
    // rvaluevar::@3
  __b3:
    // [26] *rvaluevar::screen2 = rvaluevar::b#2 -- _deref_pbuc1=vbuyy 
    sty screen2
    jmp __breturn
    // rvaluevar::@return
  __breturn:
    // [27] return 
    rts
    // rvaluevar::@2
  __b2:
    // [28] rvaluevar::b#1 = *rvaluevar::screen#2 -- vbuyy=_deref_pbuz1 
    ldy #0
    lda (screen),y
    tay
    // [29] rvaluevar::screen#1 = ++ rvaluevar::screen#2 -- pbuz1=_inc_pbuz1 
    inc.z screen
    bne !+
    inc.z screen+1
  !:
    // [30] rvaluevar::i#1 = ++ rvaluevar::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [24] phi from rvaluevar::@2 to rvaluevar::@1 [phi:rvaluevar::@2->rvaluevar::@1]
  __b1_from___b2:
    // [24] phi rvaluevar::b#2 = rvaluevar::b#1 [phi:rvaluevar::@2->rvaluevar::@1#0] -- register_copy 
    // [24] phi rvaluevar::screen#2 = rvaluevar::screen#1 [phi:rvaluevar::@2->rvaluevar::@1#1] -- register_copy 
    // [24] phi rvaluevar::i#2 = rvaluevar::i#1 [phi:rvaluevar::@2->rvaluevar::@1#2] -- register_copy 
    jmp __b1
}
  // lvaluevar
lvaluevar: {
    // LValue Variable pointer dereference
    .const b = 4
    .label screen = 2
    // [32] phi from lvaluevar to lvaluevar::@1 [phi:lvaluevar->lvaluevar::@1]
  __b1_from_lvaluevar:
    // [32] phi lvaluevar::screen#2 = (char *) 1024 [phi:lvaluevar->lvaluevar::@1#0] -- pbuz1=pbuc1 
    lda #<$400
    sta.z screen
    lda #>$400
    sta.z screen+1
    // [32] phi lvaluevar::i#2 = 2 [phi:lvaluevar->lvaluevar::@1#1] -- vbuxx=vbuc1 
    ldx #2
    jmp __b1
    // lvaluevar::@1
  __b1:
    // [33] if(lvaluevar::i#2<$a) goto lvaluevar::@2 -- vbuxx_lt_vbuc1_then_la1 
    cpx #$a
    bcc __b2
    jmp __breturn
    // lvaluevar::@return
  __breturn:
    // [34] return 
    rts
    // lvaluevar::@2
  __b2:
    // [35] *lvaluevar::screen#2 = lvaluevar::b -- _deref_pbuz1=vbuc1 
    lda #b
    ldy #0
    sta (screen),y
    // [36] lvaluevar::screen#1 = ++ lvaluevar::screen#2 -- pbuz1=_inc_pbuz1 
    inc.z screen
    bne !+
    inc.z screen+1
  !:
    // [37] lvaluevar::i#1 = ++ lvaluevar::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [32] phi from lvaluevar::@2 to lvaluevar::@1 [phi:lvaluevar::@2->lvaluevar::@1]
  __b1_from___b2:
    // [32] phi lvaluevar::screen#2 = lvaluevar::screen#1 [phi:lvaluevar::@2->lvaluevar::@1#0] -- register_copy 
    // [32] phi lvaluevar::i#2 = lvaluevar::i#1 [phi:lvaluevar::@2->lvaluevar::@1#1] -- register_copy 
    jmp __b1
}
  // File Data

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp __b1
Removing instruction jmp __b2
Removing instruction jmp __b3
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b3
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __b3
Removing instruction jmp __breturn
Removing instruction jmp __b1
Removing instruction jmp __breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction __b1_from_main:
Removing instruction __b2_from___b1:
Removing instruction rvaluevar_from___b2:
Removing instruction __b3_from___b2:
Removing instruction lvaluevar_from___b3:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction __b1:
Removing instruction __b2:
Removing instruction __b3:
Removing instruction __breturn:
Removing instruction __b1_from_lvalue:
Removing instruction __breturn:
Removing instruction __b1_from___b2:
Removing instruction __b1_from_rvalue:
Removing instruction __b3:
Removing instruction __breturn:
Removing instruction __b1_from___b2:
Removing instruction __b1_from_rvaluevar:
Removing instruction __b3:
Removing instruction __breturn:
Removing instruction __b1_from___b2:
Removing instruction __b1_from_lvaluevar:
Removing instruction __breturn:
Removing instruction __b1_from___b2:
Succesful ASM optimization Pass5UnusedLabelElimination
Replacing instruction ldx #2 with TAX

FINAL SYMBOL TABLE
void lvalue()
__constant char lvalue::SCREEN[$400] = (char *) 1024
char lvalue::i
char lvalue::i#1 // reg byte x 202.0
char lvalue::i#2 // reg byte x 134.66666666666666
void lvaluevar()
__constant char lvaluevar::b = 4
char lvaluevar::i
char lvaluevar::i#1 // reg byte x 202.0
char lvaluevar::i#2 // reg byte x 75.75
char *lvaluevar::screen
char *lvaluevar::screen#1 // screen zp[2]:2 101.0
char *lvaluevar::screen#2 // screen zp[2]:2 101.0
void main()
void rvalue()
__constant char rvalue::SCREEN[$400] = (char *) 1024
char rvalue::b
char rvalue::b#1 // reg byte a 22.0
char rvalue::b#2 // reg byte a 101.0
char rvalue::b#3 // reg byte a 61.5
char rvalue::i
char rvalue::i#1 // reg byte x 202.0
char rvalue::i#2 // reg byte x 134.66666666666666
__constant char *rvalue::screen2 = (char *) 1024
void rvaluevar()
char rvaluevar::b
char rvaluevar::b#1 // reg byte y 67.33333333333333
char rvaluevar::b#2 // reg byte y 56.0
char rvaluevar::i
char rvaluevar::i#1 // reg byte x 202.0
char rvaluevar::i#2 // reg byte x 75.75
char *rvaluevar::screen
char *rvaluevar::screen#1 // screen zp[2]:2 101.0
char *rvaluevar::screen#2 // screen zp[2]:2 101.0
__constant char *rvaluevar::screen2 = (char *) 1024

reg byte x [ lvalue::i#2 lvalue::i#1 ]
reg byte x [ rvalue::i#2 rvalue::i#1 ]
reg byte a [ rvalue::b#3 rvalue::b#1 rvalue::b#2 ]
reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ]
reg byte y [ rvaluevar::b#2 rvaluevar::b#1 ]
reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ]
zp[2]:2 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ]


FINAL ASSEMBLER
Score: 1318

  // File Comments
// Test all types of pointers
  // Upstart
  // Commodore 64 PRG executable file
.file [name="ptrtest.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: {
    // lvalue()
    // [1] call lvalue
    jsr lvalue
    // [2] phi from main to main::@1 [phi:main->main::@1]
    // main::@1
    // rvalue()
    // [3] call rvalue
    jsr rvalue
    // [4] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
    // main::@2
    // rvaluevar()
    // [5] call rvaluevar
    // [23] phi from main::@2 to rvaluevar [phi:main::@2->rvaluevar]
    jsr rvaluevar
    // [6] phi from main::@2 to main::@3 [phi:main::@2->main::@3]
    // main::@3
    // lvaluevar()
    // [7] call lvaluevar
    // [31] phi from main::@3 to lvaluevar [phi:main::@3->lvaluevar]
    jsr lvaluevar
    // main::@return
    // }
    // [8] return 
    rts
}
  // lvalue
lvalue: {
    // A constant pointer
    .label SCREEN = $400
    // *SCREEN = 1
    // [9] *lvalue::SCREEN = 1 -- _deref_pbuc1=vbuc2 
    // LValue constant pointer dereference
    lda #1
    sta SCREEN
    // SCREEN[1] = 2
    // [10] *(lvalue::SCREEN+1) = 2 -- _deref_pbuc1=vbuc2 
    // LValue constant array constant indexing
    lda #2
    sta SCREEN+1
    // [11] phi from lvalue to lvalue::@1 [phi:lvalue->lvalue::@1]
    // [11] phi lvalue::i#2 = 2 [phi:lvalue->lvalue::@1#0] -- vbuxx=vbuc1 
    tax
    // lvalue::@1
  __b1:
    // while(i<10)
    // [12] if(lvalue::i#2<$a) goto lvalue::@2 -- vbuxx_lt_vbuc1_then_la1 
    cpx #$a
    bcc __b2
    // lvalue::@return
    // }
    // [13] return 
    rts
    // lvalue::@2
  __b2:
    // SCREEN[i++] = 3
    // [14] lvalue::SCREEN[lvalue::i#2] = 3 -- pbuc1_derefidx_vbuxx=vbuc2 
    lda #3
    sta SCREEN,x
    // SCREEN[i++] = 3;
    // [15] lvalue::i#1 = ++ lvalue::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [11] phi from lvalue::@2 to lvalue::@1 [phi:lvalue::@2->lvalue::@1]
    // [11] phi lvalue::i#2 = lvalue::i#1 [phi:lvalue::@2->lvalue::@1#0] -- register_copy 
    jmp __b1
}
  // rvalue
rvalue: {
    // A constant pointer
    .label SCREEN = $400
    .label screen2 = $400
    // b = SCREEN[1]
    // [16] rvalue::b#1 = *(rvalue::SCREEN+1) -- vbuaa=_deref_pbuc1 
    // RValue constant array pointer constant index
    lda SCREEN+1
    // [17] phi from rvalue to rvalue::@1 [phi:rvalue->rvalue::@1]
    // [17] phi rvalue::b#3 = rvalue::b#1 [phi:rvalue->rvalue::@1#0] -- register_copy 
    // [17] phi rvalue::i#2 = 2 [phi:rvalue->rvalue::@1#1] -- vbuxx=vbuc1 
    ldx #2
    // rvalue::@1
  __b1:
    // while(i<10)
    // [18] if(rvalue::i#2<$a) goto rvalue::@2 -- vbuxx_lt_vbuc1_then_la1 
    cpx #$a
    bcc __b2
    // rvalue::@3
    // *screen2 = b
    // [19] *rvalue::screen2 = rvalue::b#3 -- _deref_pbuc1=vbuaa 
    sta screen2
    // rvalue::@return
    // }
    // [20] return 
    rts
    // rvalue::@2
  __b2:
    // b = SCREEN[i++]
    // [21] rvalue::b#2 = rvalue::SCREEN[rvalue::i#2] -- vbuaa=pbuc1_derefidx_vbuxx 
    lda SCREEN,x
    // b = SCREEN[i++];
    // [22] rvalue::i#1 = ++ rvalue::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [17] phi from rvalue::@2 to rvalue::@1 [phi:rvalue::@2->rvalue::@1]
    // [17] phi rvalue::b#3 = rvalue::b#2 [phi:rvalue::@2->rvalue::@1#0] -- register_copy 
    // [17] phi rvalue::i#2 = rvalue::i#1 [phi:rvalue::@2->rvalue::@1#1] -- register_copy 
    jmp __b1
}
  // rvaluevar
rvaluevar: {
    .label screen2 = $400
    .label screen = 2
    // [24] phi from rvaluevar to rvaluevar::@1 [phi:rvaluevar->rvaluevar::@1]
    // [24] phi rvaluevar::b#2 = 0 [phi:rvaluevar->rvaluevar::@1#0] -- vbuyy=vbuc1 
    ldy #0
    // [24] phi rvaluevar::screen#2 = (char *) 1024 [phi:rvaluevar->rvaluevar::@1#1] -- pbuz1=pbuc1 
    lda #<$400
    sta.z screen
    lda #>$400
    sta.z screen+1
    // [24] phi rvaluevar::i#2 = 2 [phi:rvaluevar->rvaluevar::@1#2] -- vbuxx=vbuc1 
    ldx #2
    // rvaluevar::@1
  __b1:
    // while(i<10)
    // [25] if(rvaluevar::i#2<$a) goto rvaluevar::@2 -- vbuxx_lt_vbuc1_then_la1 
    cpx #$a
    bcc __b2
    // rvaluevar::@3
    // *screen2 = b
    // [26] *rvaluevar::screen2 = rvaluevar::b#2 -- _deref_pbuc1=vbuyy 
    sty screen2
    // rvaluevar::@return
    // }
    // [27] return 
    rts
    // rvaluevar::@2
  __b2:
    // b = *screen
    // [28] rvaluevar::b#1 = *rvaluevar::screen#2 -- vbuyy=_deref_pbuz1 
    ldy #0
    lda (screen),y
    tay
    // screen++;
    // [29] rvaluevar::screen#1 = ++ rvaluevar::screen#2 -- pbuz1=_inc_pbuz1 
    inc.z screen
    bne !+
    inc.z screen+1
  !:
    // i++;
    // [30] rvaluevar::i#1 = ++ rvaluevar::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [24] phi from rvaluevar::@2 to rvaluevar::@1 [phi:rvaluevar::@2->rvaluevar::@1]
    // [24] phi rvaluevar::b#2 = rvaluevar::b#1 [phi:rvaluevar::@2->rvaluevar::@1#0] -- register_copy 
    // [24] phi rvaluevar::screen#2 = rvaluevar::screen#1 [phi:rvaluevar::@2->rvaluevar::@1#1] -- register_copy 
    // [24] phi rvaluevar::i#2 = rvaluevar::i#1 [phi:rvaluevar::@2->rvaluevar::@1#2] -- register_copy 
    jmp __b1
}
  // lvaluevar
lvaluevar: {
    // LValue Variable pointer dereference
    .const b = 4
    .label screen = 2
    // [32] phi from lvaluevar to lvaluevar::@1 [phi:lvaluevar->lvaluevar::@1]
    // [32] phi lvaluevar::screen#2 = (char *) 1024 [phi:lvaluevar->lvaluevar::@1#0] -- pbuz1=pbuc1 
    lda #<$400
    sta.z screen
    lda #>$400
    sta.z screen+1
    // [32] phi lvaluevar::i#2 = 2 [phi:lvaluevar->lvaluevar::@1#1] -- vbuxx=vbuc1 
    ldx #2
    // lvaluevar::@1
  __b1:
    // while(i<10)
    // [33] if(lvaluevar::i#2<$a) goto lvaluevar::@2 -- vbuxx_lt_vbuc1_then_la1 
    cpx #$a
    bcc __b2
    // lvaluevar::@return
    // }
    // [34] return 
    rts
    // lvaluevar::@2
  __b2:
    // *screen = b
    // [35] *lvaluevar::screen#2 = lvaluevar::b -- _deref_pbuz1=vbuc1 
    lda #b
    ldy #0
    sta (screen),y
    // screen++;
    // [36] lvaluevar::screen#1 = ++ lvaluevar::screen#2 -- pbuz1=_inc_pbuz1 
    inc.z screen
    bne !+
    inc.z screen+1
  !:
    // i++;
    // [37] lvaluevar::i#1 = ++ lvaluevar::i#2 -- vbuxx=_inc_vbuxx 
    inx
    // [32] phi from lvaluevar::@2 to lvaluevar::@1 [phi:lvaluevar::@2->lvaluevar::@1]
    // [32] phi lvaluevar::screen#2 = lvaluevar::screen#1 [phi:lvaluevar::@2->lvaluevar::@1#0] -- register_copy 
    // [32] phi lvaluevar::i#2 = lvaluevar::i#1 [phi:lvaluevar::@2->lvaluevar::@1#1] -- register_copy 
    jmp __b1
}
  // File Data

