Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6
Fixing pointer addition (word*~) bsearch16u::$15 ← (word*) bsearch16u::pivot + (number) 1
Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - (number) 1
Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit)
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Identified constant variable (byte*) HEAP_TOP
Identified constant variable (byte) test_bytes::bb
Identified constant variable (signed byte) test_sbytes::bb
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) memset::@5
Culled Empty Block (label) memset::@3
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) @7
Culled Empty Block (label) @8
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Culled Empty Block (label) @13
Culled Empty Block (label) @14
Culled Empty Block (label) print_str::@4
Culled Empty Block (label) print_str::@3
Culled Empty Block (label) print_str::@5
Culled Empty Block (label) print_str::@6
Culled Empty Block (label) @15
Culled Empty Block (label) @16
Culled Empty Block (label) @17
Culled Empty Block (label) @18
Culled Empty Block (label) @19
Culled Empty Block (label) @20
Culled Empty Block (label) @21
Culled Empty Block (label) @22
Culled Empty Block (label) @23
Culled Empty Block (label) @24
Culled Empty Block (label) @25
Culled Empty Block (label) @26
Culled Empty Block (label) @27
Culled Empty Block (label) @28
Culled Empty Block (label) @29
Culled Empty Block (label) @30
Culled Empty Block (label) @31
Culled Empty Block (label) @32
Culled Empty Block (label) @33
Culled Empty Block (label) @34
Culled Empty Block (label) @36
Culled Empty Block (label) @37
Culled Empty Block (label) assert_byte::@4
Culled Empty Block (label) @38
Culled Empty Block (label) @39
Culled Empty Block (label) assert_sbyte::@4

CONTROL FLOW GRAPH SSA
@begin: scope:[]  from
  to:@12
memset: scope:[memset]  from print_cls
  (byte) memset::c#3 ← phi( print_cls/(byte) memset::c#0 )
  (void*) memset::str#3 ← phi( print_cls/(void*) memset::str#0 )
  (word) memset::num#1 ← phi( print_cls/(word) memset::num#0 )
  (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
  (bool~) memset::$1 ← ! (bool~) memset::$0
  if((bool~) memset::$1) goto memset::@1
  to:memset::@2
memset::@1: scope:[memset]  from memset memset::@4
  (void*) memset::str#1 ← phi( memset/(void*) memset::str#3 memset::@4/(void*) memset::str#4 )
  (void*) memset::return#0 ← (void*) memset::str#1
  to:memset::@return
memset::@2: scope:[memset]  from memset
  (byte) memset::c#2 ← phi( memset/(byte) memset::c#3 )
  (word) memset::num#2 ← phi( memset/(word) memset::num#1 )
  (void*) memset::str#2 ← phi( memset/(void*) memset::str#3 )
  (byte*~) memset::$2 ← ((byte*)) (void*) memset::str#2
  (byte*~) memset::$3 ← (byte*~) memset::$2 + (word) memset::num#2
  (byte*) memset::end#0 ← (byte*~) memset::$3
  (byte*) memset::dst#0 ← ((byte*)) (void*) memset::str#2
  to:memset::@4
memset::@4: scope:[memset]  from memset::@2 memset::@4
  (void*) memset::str#4 ← phi( memset::@2/(void*) memset::str#2 memset::@4/(void*) memset::str#4 )
  (byte*) memset::end#1 ← phi( memset::@2/(byte*) memset::end#0 memset::@4/(byte*) memset::end#1 )
  (byte*) memset::dst#2 ← phi( memset::@2/(byte*) memset::dst#0 memset::@4/(byte*) memset::dst#1 )
  (byte) memset::c#1 ← phi( memset::@2/(byte) memset::c#2 memset::@4/(byte) memset::c#1 )
  *((byte*) memset::dst#2) ← (byte) memset::c#1
  (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
  (bool~) memset::$4 ← (byte*) memset::dst#1 != (byte*) memset::end#1
  if((bool~) memset::$4) goto memset::@4
  to:memset::@1
memset::@return: scope:[memset]  from memset::@1
  (void*) memset::return#3 ← phi( memset::@1/(void*) memset::return#0 )
  (void*) memset::return#1 ← (void*) memset::return#3
  return 
  to:@return
@12: scope:[]  from @begin
  (byte*) print_screen#0 ← ((byte*)) (number) $400
  (byte*) print_line_cursor#0 ← (byte*) print_screen#0
  (byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0
  to:@35
print_str: scope:[print_str]  from assert_byte assert_byte::@1 assert_byte::@3 assert_byte::@5 assert_sbyte assert_sbyte::@1 assert_sbyte::@3 assert_sbyte::@5
  (byte*) print_char_cursor#80 ← phi( assert_byte/(byte*) print_char_cursor#70 assert_byte::@1/(byte*) print_char_cursor#71 assert_byte::@3/(byte*) print_char_cursor#72 assert_byte::@5/(byte*) print_char_cursor#15 assert_sbyte/(byte*) print_char_cursor#75 assert_sbyte::@1/(byte*) print_char_cursor#76 assert_sbyte::@3/(byte*) print_char_cursor#77 assert_sbyte::@5/(byte*) print_char_cursor#27 )
  (byte*) print_str::str#11 ← phi( assert_byte/(byte*) print_str::str#1 assert_byte::@1/(byte*) print_str::str#3 assert_byte::@3/(byte*) print_str::str#4 assert_byte::@5/(byte*) print_str::str#2 assert_sbyte/(byte*) print_str::str#5 assert_sbyte::@1/(byte*) print_str::str#7 assert_sbyte::@3/(byte*) print_str::str#8 assert_sbyte::@5/(byte*) print_str::str#6 )
  to:print_str::@1
print_str::@1: scope:[print_str]  from print_str print_str::@2
  (byte*) print_char_cursor#66 ← phi( print_str/(byte*) print_char_cursor#80 print_str::@2/(byte*) print_char_cursor#1 )
  (byte*) print_str::str#9 ← phi( print_str/(byte*) print_str::str#11 print_str::@2/(byte*) print_str::str#0 )
  (bool~) print_str::$0 ← *((byte*) print_str::str#9) != (byte) '@'
  if((bool~) print_str::$0) goto print_str::@2
  to:print_str::@return
print_str::@2: scope:[print_str]  from print_str::@1
  (byte*) print_char_cursor#34 ← phi( print_str::@1/(byte*) print_char_cursor#66 )
  (byte*) print_str::str#10 ← phi( print_str::@1/(byte*) print_str::str#9 )
  *((byte*) print_char_cursor#34) ← *((byte*) print_str::str#10)
  (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#34
  (byte*) print_str::str#0 ← ++ (byte*) print_str::str#10
  to:print_str::@1
print_str::@return: scope:[print_str]  from print_str::@1
  (byte*) print_char_cursor#35 ← phi( print_str::@1/(byte*) print_char_cursor#66 )
  (byte*) print_char_cursor#2 ← (byte*) print_char_cursor#35
  return 
  to:@return
print_ln: scope:[print_ln]  from assert_byte::@2 assert_sbyte::@2
  (byte*) print_char_cursor#67 ← phi( assert_byte::@2/(byte*) print_char_cursor#73 assert_sbyte::@2/(byte*) print_char_cursor#78 )
  (byte*) print_line_cursor#47 ← phi( assert_byte::@2/(byte*) print_line_cursor#50 assert_sbyte::@2/(byte*) print_line_cursor#52 )
  to:print_ln::@1
print_ln::@1: scope:[print_ln]  from print_ln print_ln::@1
  (byte*) print_char_cursor#36 ← phi( print_ln/(byte*) print_char_cursor#67 print_ln::@1/(byte*) print_char_cursor#36 )
  (byte*) print_line_cursor#24 ← phi( print_ln/(byte*) print_line_cursor#47 print_ln::@1/(byte*) print_line_cursor#1 )
  (byte*~) print_ln::$0 ← (byte*) print_line_cursor#24 + (number) $28
  (byte*) print_line_cursor#1 ← (byte*~) print_ln::$0
  (bool~) print_ln::$1 ← (byte*) print_line_cursor#1 < (byte*) print_char_cursor#36
  if((bool~) print_ln::$1) goto print_ln::@1
  to:print_ln::@2
print_ln::@2: scope:[print_ln]  from print_ln::@1
  (byte*) print_line_cursor#25 ← phi( print_ln::@1/(byte*) print_line_cursor#1 )
  (byte*) print_char_cursor#3 ← (byte*) print_line_cursor#25
  to:print_ln::@return
print_ln::@return: scope:[print_ln]  from print_ln::@2
  (byte*) print_char_cursor#37 ← phi( print_ln::@2/(byte*) print_char_cursor#3 )
  (byte*) print_line_cursor#26 ← phi( print_ln::@2/(byte*) print_line_cursor#25 )
  (byte*) print_line_cursor#2 ← (byte*) print_line_cursor#26
  (byte*) print_char_cursor#4 ← (byte*) print_char_cursor#37
  return 
  to:@return
print_cls: scope:[print_cls]  from main
  (byte*) print_screen#1 ← phi( main/(byte*) print_screen#3 )
  (void*) memset::str#0 ← (void*)(byte*) print_screen#1
  (byte) memset::c#0 ← (byte) ' '
  (word) memset::num#0 ← (number) $3e8
  call memset 
  (void*) memset::return#2 ← (void*) memset::return#1
  to:print_cls::@1
print_cls::@1: scope:[print_cls]  from print_cls
  (byte*) print_screen#2 ← phi( print_cls/(byte*) print_screen#1 )
  (byte*) print_line_cursor#3 ← (byte*) print_screen#2
  (byte*) print_char_cursor#5 ← (byte*) print_line_cursor#3
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls::@1
  (byte*) print_char_cursor#38 ← phi( print_cls::@1/(byte*) print_char_cursor#5 )
  (byte*) print_line_cursor#27 ← phi( print_cls::@1/(byte*) print_line_cursor#3 )
  (byte*) print_line_cursor#4 ← (byte*) print_line_cursor#27
  (byte*) print_char_cursor#6 ← (byte*) print_char_cursor#38
  return 
  to:@return
@35: scope:[]  from @12
  (byte*) print_screen#5 ← phi( @12/(byte*) print_screen#0 )
  (byte*) print_char_cursor#81 ← phi( @12/(byte*) print_char_cursor#0 )
  (byte*) print_line_cursor#58 ← phi( @12/(byte*) print_line_cursor#0 )
  (byte*) BGCOL#0 ← ((byte*)) (number) $d021
  (byte) GREEN#0 ← (number) 5
  (byte) RED#0 ← (number) 2
  to:@40
main: scope:[main]  from @40
  (byte*) print_char_cursor#68 ← phi( @40/(byte*) print_char_cursor#79 )
  (byte*) print_line_cursor#48 ← phi( @40/(byte*) print_line_cursor#53 )
  (byte*) print_screen#3 ← phi( @40/(byte*) print_screen#4 )
  call print_cls 
  to:main::@1
main::@1: scope:[main]  from main
  (byte*) print_char_cursor#39 ← phi( main/(byte*) print_char_cursor#6 )
  (byte*) print_line_cursor#28 ← phi( main/(byte*) print_line_cursor#4 )
  (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#28
  (byte*) print_char_cursor#7 ← (byte*) print_char_cursor#39
  *((byte*) BGCOL#0) ← (byte) GREEN#0
  call test_bytes 
  to:main::@2
main::@2: scope:[main]  from main::@1
  (byte*) print_line_cursor#29 ← phi( main::@1/(byte*) print_line_cursor#12 )
  (byte*) print_char_cursor#40 ← phi( main::@1/(byte*) print_char_cursor#14 )
  (byte*) print_char_cursor#8 ← (byte*) print_char_cursor#40
  (byte*) print_line_cursor#6 ← (byte*) print_line_cursor#29
  call test_sbytes 
  to:main::@3
main::@3: scope:[main]  from main::@2
  (byte*) print_line_cursor#30 ← phi( main::@2/(byte*) print_line_cursor#20 )
  (byte*) print_char_cursor#41 ← phi( main::@2/(byte*) print_char_cursor#26 )
  (byte*) print_char_cursor#9 ← (byte*) print_char_cursor#41
  (byte*) print_line_cursor#7 ← (byte*) print_line_cursor#30
  to:main::@return
main::@return: scope:[main]  from main::@3
  (byte*) print_char_cursor#42 ← phi( main::@3/(byte*) print_char_cursor#9 )
  (byte*) print_line_cursor#31 ← phi( main::@3/(byte*) print_line_cursor#7 )
  (byte*) print_line_cursor#8 ← (byte*) print_line_cursor#31
  (byte*) print_char_cursor#10 ← (byte*) print_char_cursor#42
  return 
  to:@return
test_bytes: scope:[test_bytes]  from main::@1
  (byte*) print_line_cursor#49 ← phi( main::@1/(byte*) print_line_cursor#5 )
  (byte*) print_char_cursor#69 ← phi( main::@1/(byte*) print_char_cursor#7 )
  (byte) test_bytes::bb#0 ← (number) 0
  (byte*) assert_byte::msg#0 ← (const string) test_bytes::msg
  (byte) assert_byte::b#0 ← (byte) test_bytes::bb#0
  (byte) assert_byte::c#0 ← (number) 0
  call assert_byte 
  to:test_bytes::@1
test_bytes::@1: scope:[test_bytes]  from test_bytes
  (byte*) print_line_cursor#32 ← phi( test_bytes/(byte*) print_line_cursor#14 )
  (byte*) print_char_cursor#43 ← phi( test_bytes/(byte*) print_char_cursor#20 )
  (byte*) print_char_cursor#11 ← (byte*) print_char_cursor#43
  (byte*) print_line_cursor#9 ← (byte*) print_line_cursor#32
  (number~) test_bytes::$1 ← (byte) test_bytes::bb#0 + (number) 2
  (byte) test_bytes::bc#0 ← (number~) test_bytes::$1
  (byte*) assert_byte::msg#1 ← (const string) test_bytes::msg1
  (byte) assert_byte::b#1 ← (byte) test_bytes::bc#0
  (byte) assert_byte::c#1 ← (number) 2
  call assert_byte 
  to:test_bytes::@2
test_bytes::@2: scope:[test_bytes]  from test_bytes::@1
  (byte) test_bytes::bc#1 ← phi( test_bytes::@1/(byte) test_bytes::bc#0 )
  (byte*) print_line_cursor#33 ← phi( test_bytes::@1/(byte*) print_line_cursor#14 )
  (byte*) print_char_cursor#44 ← phi( test_bytes::@1/(byte*) print_char_cursor#20 )
  (byte*) print_char_cursor#12 ← (byte*) print_char_cursor#44
  (byte*) print_line_cursor#10 ← (byte*) print_line_cursor#33
  (signed byte~) test_bytes::$3 ← ((signed byte)) (byte) test_bytes::bc#1
  (number~) test_bytes::$4 ← (signed byte~) test_bytes::$3 - (number) 4
  (byte~) test_bytes::$5 ← ((byte)) (number~) test_bytes::$4
  (byte) test_bytes::bd#0 ← (byte~) test_bytes::$5
  (byte*) assert_byte::msg#2 ← (const string) test_bytes::msg2
  (byte) assert_byte::b#2 ← (byte) test_bytes::bd#0
  (byte) assert_byte::c#2 ← (number) $fe
  call assert_byte 
  to:test_bytes::@3
test_bytes::@3: scope:[test_bytes]  from test_bytes::@2
  (byte*) print_line_cursor#34 ← phi( test_bytes::@2/(byte*) print_line_cursor#14 )
  (byte*) print_char_cursor#45 ← phi( test_bytes::@2/(byte*) print_char_cursor#20 )
  (byte*) print_char_cursor#13 ← (byte*) print_char_cursor#45
  (byte*) print_line_cursor#11 ← (byte*) print_line_cursor#34
  to:test_bytes::@return
test_bytes::@return: scope:[test_bytes]  from test_bytes::@3
  (byte*) print_line_cursor#35 ← phi( test_bytes::@3/(byte*) print_line_cursor#11 )
  (byte*) print_char_cursor#46 ← phi( test_bytes::@3/(byte*) print_char_cursor#13 )
  (byte*) print_char_cursor#14 ← (byte*) print_char_cursor#46
  (byte*) print_line_cursor#12 ← (byte*) print_line_cursor#35
  return 
  to:@return
assert_byte: scope:[assert_byte]  from test_bytes test_bytes::@1 test_bytes::@2
  (byte*) print_line_cursor#67 ← phi( test_bytes/(byte*) print_line_cursor#49 test_bytes::@1/(byte*) print_line_cursor#9 test_bytes::@2/(byte*) print_line_cursor#10 )
  (byte) assert_byte::c#5 ← phi( test_bytes/(byte) assert_byte::c#0 test_bytes::@1/(byte) assert_byte::c#1 test_bytes::@2/(byte) assert_byte::c#2 )
  (byte) assert_byte::b#5 ← phi( test_bytes/(byte) assert_byte::b#0 test_bytes::@1/(byte) assert_byte::b#1 test_bytes::@2/(byte) assert_byte::b#2 )
  (byte*) print_char_cursor#70 ← phi( test_bytes/(byte*) print_char_cursor#69 test_bytes::@1/(byte*) print_char_cursor#11 test_bytes::@2/(byte*) print_char_cursor#12 )
  (byte*) assert_byte::msg#3 ← phi( test_bytes/(byte*) assert_byte::msg#0 test_bytes::@1/(byte*) assert_byte::msg#1 test_bytes::@2/(byte*) assert_byte::msg#2 )
  (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3
  call print_str 
  to:assert_byte::@5
assert_byte::@5: scope:[assert_byte]  from assert_byte
  (byte*) print_line_cursor#65 ← phi( assert_byte/(byte*) print_line_cursor#67 )
  (byte) assert_byte::c#4 ← phi( assert_byte/(byte) assert_byte::c#5 )
  (byte) assert_byte::b#4 ← phi( assert_byte/(byte) assert_byte::b#5 )
  (byte*) print_char_cursor#47 ← phi( assert_byte/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#15 ← (byte*) print_char_cursor#47
  (byte*) print_str::str#2 ← (const string) assert_byte::str
  call print_str 
  to:assert_byte::@6
assert_byte::@6: scope:[assert_byte]  from assert_byte::@5
  (byte*) print_line_cursor#63 ← phi( assert_byte::@5/(byte*) print_line_cursor#65 )
  (byte) assert_byte::c#3 ← phi( assert_byte::@5/(byte) assert_byte::c#4 )
  (byte) assert_byte::b#3 ← phi( assert_byte::@5/(byte) assert_byte::b#4 )
  (byte*) print_char_cursor#48 ← phi( assert_byte::@5/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#16 ← (byte*) print_char_cursor#48
  (bool~) assert_byte::$2 ← (byte) assert_byte::b#3 != (byte) assert_byte::c#3
  if((bool~) assert_byte::$2) goto assert_byte::@1
  to:assert_byte::@3
assert_byte::@1: scope:[assert_byte]  from assert_byte::@6
  (byte*) print_line_cursor#59 ← phi( assert_byte::@6/(byte*) print_line_cursor#63 )
  (byte*) print_char_cursor#71 ← phi( assert_byte::@6/(byte*) print_char_cursor#16 )
  *((byte*) BGCOL#0) ← (byte) RED#0
  (byte*) print_str::str#3 ← (const string) assert_byte::str1
  call print_str 
  to:assert_byte::@7
assert_byte::@7: scope:[assert_byte]  from assert_byte::@1
  (byte*) print_line_cursor#54 ← phi( assert_byte::@1/(byte*) print_line_cursor#59 )
  (byte*) print_char_cursor#49 ← phi( assert_byte::@1/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#17 ← (byte*) print_char_cursor#49
  to:assert_byte::@2
assert_byte::@3: scope:[assert_byte]  from assert_byte::@6
  (byte*) print_line_cursor#60 ← phi( assert_byte::@6/(byte*) print_line_cursor#63 )
  (byte*) print_char_cursor#72 ← phi( assert_byte::@6/(byte*) print_char_cursor#16 )
  (byte*) print_str::str#4 ← (const string) assert_byte::str2
  call print_str 
  to:assert_byte::@8
assert_byte::@8: scope:[assert_byte]  from assert_byte::@3
  (byte*) print_line_cursor#55 ← phi( assert_byte::@3/(byte*) print_line_cursor#60 )
  (byte*) print_char_cursor#50 ← phi( assert_byte::@3/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#18 ← (byte*) print_char_cursor#50
  to:assert_byte::@2
assert_byte::@2: scope:[assert_byte]  from assert_byte::@7 assert_byte::@8
  (byte*) print_char_cursor#73 ← phi( assert_byte::@7/(byte*) print_char_cursor#17 assert_byte::@8/(byte*) print_char_cursor#18 )
  (byte*) print_line_cursor#50 ← phi( assert_byte::@7/(byte*) print_line_cursor#54 assert_byte::@8/(byte*) print_line_cursor#55 )
  call print_ln 
  to:assert_byte::@9
assert_byte::@9: scope:[assert_byte]  from assert_byte::@2
  (byte*) print_char_cursor#51 ← phi( assert_byte::@2/(byte*) print_char_cursor#4 )
  (byte*) print_line_cursor#36 ← phi( assert_byte::@2/(byte*) print_line_cursor#2 )
  (byte*) print_line_cursor#13 ← (byte*) print_line_cursor#36
  (byte*) print_char_cursor#19 ← (byte*) print_char_cursor#51
  to:assert_byte::@return
assert_byte::@return: scope:[assert_byte]  from assert_byte::@9
  (byte*) print_line_cursor#37 ← phi( assert_byte::@9/(byte*) print_line_cursor#13 )
  (byte*) print_char_cursor#52 ← phi( assert_byte::@9/(byte*) print_char_cursor#19 )
  (byte*) print_char_cursor#20 ← (byte*) print_char_cursor#52
  (byte*) print_line_cursor#14 ← (byte*) print_line_cursor#37
  return 
  to:@return
test_sbytes: scope:[test_sbytes]  from main::@2
  (byte*) print_line_cursor#51 ← phi( main::@2/(byte*) print_line_cursor#6 )
  (byte*) print_char_cursor#74 ← phi( main::@2/(byte*) print_char_cursor#8 )
  (signed byte) test_sbytes::bb#0 ← (number) 0
  (byte*) assert_sbyte::msg#0 ← (const string) test_sbytes::msg
  (signed byte) assert_sbyte::b#0 ← (signed byte) test_sbytes::bb#0
  (signed byte) assert_sbyte::c#0 ← (number) 0
  call assert_sbyte 
  to:test_sbytes::@1
test_sbytes::@1: scope:[test_sbytes]  from test_sbytes
  (byte*) print_line_cursor#38 ← phi( test_sbytes/(byte*) print_line_cursor#22 )
  (byte*) print_char_cursor#53 ← phi( test_sbytes/(byte*) print_char_cursor#32 )
  (byte*) print_char_cursor#21 ← (byte*) print_char_cursor#53
  (byte*) print_line_cursor#15 ← (byte*) print_line_cursor#38
  (number~) test_sbytes::$1 ← (signed byte) test_sbytes::bb#0 + (number) 2
  (signed byte) test_sbytes::bc#0 ← (number~) test_sbytes::$1
  (byte*) assert_sbyte::msg#1 ← (const string) test_sbytes::msg1
  (signed byte) assert_sbyte::b#1 ← (signed byte) test_sbytes::bc#0
  (signed byte) assert_sbyte::c#1 ← (number) 2
  call assert_sbyte 
  to:test_sbytes::@2
test_sbytes::@2: scope:[test_sbytes]  from test_sbytes::@1
  (signed byte) test_sbytes::bc#1 ← phi( test_sbytes::@1/(signed byte) test_sbytes::bc#0 )
  (byte*) print_line_cursor#39 ← phi( test_sbytes::@1/(byte*) print_line_cursor#22 )
  (byte*) print_char_cursor#54 ← phi( test_sbytes::@1/(byte*) print_char_cursor#32 )
  (byte*) print_char_cursor#22 ← (byte*) print_char_cursor#54
  (byte*) print_line_cursor#16 ← (byte*) print_line_cursor#39
  (number~) test_sbytes::$3 ← (signed byte) test_sbytes::bc#1 - (number) 4
  (signed byte) test_sbytes::bd#0 ← (number~) test_sbytes::$3
  (byte*) assert_sbyte::msg#2 ← (const string) test_sbytes::msg2
  (signed byte) assert_sbyte::b#2 ← (signed byte) test_sbytes::bd#0
  (signed byte) assert_sbyte::c#2 ← (number) -2
  call assert_sbyte 
  to:test_sbytes::@3
test_sbytes::@3: scope:[test_sbytes]  from test_sbytes::@2
  (signed byte) test_sbytes::bd#1 ← phi( test_sbytes::@2/(signed byte) test_sbytes::bd#0 )
  (byte*) print_line_cursor#40 ← phi( test_sbytes::@2/(byte*) print_line_cursor#22 )
  (byte*) print_char_cursor#55 ← phi( test_sbytes::@2/(byte*) print_char_cursor#32 )
  (byte*) print_char_cursor#23 ← (byte*) print_char_cursor#55
  (byte*) print_line_cursor#17 ← (byte*) print_line_cursor#40
  (signed byte~) test_sbytes::$5 ← - (signed byte) test_sbytes::bd#1
  (signed byte) test_sbytes::be#0 ← (signed byte~) test_sbytes::$5
  (byte*) assert_sbyte::msg#3 ← (const string) test_sbytes::msg3
  (signed byte) assert_sbyte::b#3 ← (signed byte) test_sbytes::be#0
  (signed byte) assert_sbyte::c#3 ← (number) 2
  call assert_sbyte 
  to:test_sbytes::@4
test_sbytes::@4: scope:[test_sbytes]  from test_sbytes::@3
  (byte*) print_line_cursor#41 ← phi( test_sbytes::@3/(byte*) print_line_cursor#22 )
  (byte*) print_char_cursor#56 ← phi( test_sbytes::@3/(byte*) print_char_cursor#32 )
  (byte*) print_char_cursor#24 ← (byte*) print_char_cursor#56
  (byte*) print_line_cursor#18 ← (byte*) print_line_cursor#41
  (signed byte~) test_sbytes::$7 ← ((signed byte)) (number) -$7f-(number) $7f
  (signed byte) test_sbytes::bf#0 ← (signed byte~) test_sbytes::$7
  (byte*) assert_sbyte::msg#4 ← (const string) test_sbytes::msg4
  (signed byte) assert_sbyte::b#4 ← (signed byte) test_sbytes::bf#0
  (signed byte) assert_sbyte::c#4 ← (number) 2
  call assert_sbyte 
  to:test_sbytes::@5
test_sbytes::@5: scope:[test_sbytes]  from test_sbytes::@4
  (byte*) print_line_cursor#42 ← phi( test_sbytes::@4/(byte*) print_line_cursor#22 )
  (byte*) print_char_cursor#57 ← phi( test_sbytes::@4/(byte*) print_char_cursor#32 )
  (byte*) print_char_cursor#25 ← (byte*) print_char_cursor#57
  (byte*) print_line_cursor#19 ← (byte*) print_line_cursor#42
  to:test_sbytes::@return
test_sbytes::@return: scope:[test_sbytes]  from test_sbytes::@5
  (byte*) print_line_cursor#43 ← phi( test_sbytes::@5/(byte*) print_line_cursor#19 )
  (byte*) print_char_cursor#58 ← phi( test_sbytes::@5/(byte*) print_char_cursor#25 )
  (byte*) print_char_cursor#26 ← (byte*) print_char_cursor#58
  (byte*) print_line_cursor#20 ← (byte*) print_line_cursor#43
  return 
  to:@return
assert_sbyte: scope:[assert_sbyte]  from test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4
  (byte*) print_line_cursor#68 ← phi( test_sbytes/(byte*) print_line_cursor#51 test_sbytes::@1/(byte*) print_line_cursor#15 test_sbytes::@2/(byte*) print_line_cursor#16 test_sbytes::@3/(byte*) print_line_cursor#17 test_sbytes::@4/(byte*) print_line_cursor#18 )
  (signed byte) assert_sbyte::c#7 ← phi( test_sbytes/(signed byte) assert_sbyte::c#0 test_sbytes::@1/(signed byte) assert_sbyte::c#1 test_sbytes::@2/(signed byte) assert_sbyte::c#2 test_sbytes::@3/(signed byte) assert_sbyte::c#3 test_sbytes::@4/(signed byte) assert_sbyte::c#4 )
  (signed byte) assert_sbyte::b#7 ← phi( test_sbytes/(signed byte) assert_sbyte::b#0 test_sbytes::@1/(signed byte) assert_sbyte::b#1 test_sbytes::@2/(signed byte) assert_sbyte::b#2 test_sbytes::@3/(signed byte) assert_sbyte::b#3 test_sbytes::@4/(signed byte) assert_sbyte::b#4 )
  (byte*) print_char_cursor#75 ← phi( test_sbytes/(byte*) print_char_cursor#74 test_sbytes::@1/(byte*) print_char_cursor#21 test_sbytes::@2/(byte*) print_char_cursor#22 test_sbytes::@3/(byte*) print_char_cursor#23 test_sbytes::@4/(byte*) print_char_cursor#24 )
  (byte*) assert_sbyte::msg#5 ← phi( test_sbytes/(byte*) assert_sbyte::msg#0 test_sbytes::@1/(byte*) assert_sbyte::msg#1 test_sbytes::@2/(byte*) assert_sbyte::msg#2 test_sbytes::@3/(byte*) assert_sbyte::msg#3 test_sbytes::@4/(byte*) assert_sbyte::msg#4 )
  (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5
  call print_str 
  to:assert_sbyte::@5
assert_sbyte::@5: scope:[assert_sbyte]  from assert_sbyte
  (byte*) print_line_cursor#66 ← phi( assert_sbyte/(byte*) print_line_cursor#68 )
  (signed byte) assert_sbyte::c#6 ← phi( assert_sbyte/(signed byte) assert_sbyte::c#7 )
  (signed byte) assert_sbyte::b#6 ← phi( assert_sbyte/(signed byte) assert_sbyte::b#7 )
  (byte*) print_char_cursor#59 ← phi( assert_sbyte/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#27 ← (byte*) print_char_cursor#59
  (byte*) print_str::str#6 ← (const string) assert_sbyte::str
  call print_str 
  to:assert_sbyte::@6
assert_sbyte::@6: scope:[assert_sbyte]  from assert_sbyte::@5
  (byte*) print_line_cursor#64 ← phi( assert_sbyte::@5/(byte*) print_line_cursor#66 )
  (signed byte) assert_sbyte::c#5 ← phi( assert_sbyte::@5/(signed byte) assert_sbyte::c#6 )
  (signed byte) assert_sbyte::b#5 ← phi( assert_sbyte::@5/(signed byte) assert_sbyte::b#6 )
  (byte*) print_char_cursor#60 ← phi( assert_sbyte::@5/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#28 ← (byte*) print_char_cursor#60
  (bool~) assert_sbyte::$2 ← (signed byte) assert_sbyte::b#5 != (signed byte) assert_sbyte::c#5
  if((bool~) assert_sbyte::$2) goto assert_sbyte::@1
  to:assert_sbyte::@3
assert_sbyte::@1: scope:[assert_sbyte]  from assert_sbyte::@6
  (byte*) print_line_cursor#61 ← phi( assert_sbyte::@6/(byte*) print_line_cursor#64 )
  (byte*) print_char_cursor#76 ← phi( assert_sbyte::@6/(byte*) print_char_cursor#28 )
  *((byte*) BGCOL#0) ← (byte) RED#0
  (byte*) print_str::str#7 ← (const string) assert_sbyte::str1
  call print_str 
  to:assert_sbyte::@7
assert_sbyte::@7: scope:[assert_sbyte]  from assert_sbyte::@1
  (byte*) print_line_cursor#56 ← phi( assert_sbyte::@1/(byte*) print_line_cursor#61 )
  (byte*) print_char_cursor#61 ← phi( assert_sbyte::@1/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#29 ← (byte*) print_char_cursor#61
  to:assert_sbyte::@2
assert_sbyte::@3: scope:[assert_sbyte]  from assert_sbyte::@6
  (byte*) print_line_cursor#62 ← phi( assert_sbyte::@6/(byte*) print_line_cursor#64 )
  (byte*) print_char_cursor#77 ← phi( assert_sbyte::@6/(byte*) print_char_cursor#28 )
  (byte*) print_str::str#8 ← (const string) assert_sbyte::str2
  call print_str 
  to:assert_sbyte::@8
assert_sbyte::@8: scope:[assert_sbyte]  from assert_sbyte::@3
  (byte*) print_line_cursor#57 ← phi( assert_sbyte::@3/(byte*) print_line_cursor#62 )
  (byte*) print_char_cursor#62 ← phi( assert_sbyte::@3/(byte*) print_char_cursor#2 )
  (byte*) print_char_cursor#30 ← (byte*) print_char_cursor#62
  to:assert_sbyte::@2
assert_sbyte::@2: scope:[assert_sbyte]  from assert_sbyte::@7 assert_sbyte::@8
  (byte*) print_char_cursor#78 ← phi( assert_sbyte::@7/(byte*) print_char_cursor#29 assert_sbyte::@8/(byte*) print_char_cursor#30 )
  (byte*) print_line_cursor#52 ← phi( assert_sbyte::@7/(byte*) print_line_cursor#56 assert_sbyte::@8/(byte*) print_line_cursor#57 )
  call print_ln 
  to:assert_sbyte::@9
assert_sbyte::@9: scope:[assert_sbyte]  from assert_sbyte::@2
  (byte*) print_char_cursor#63 ← phi( assert_sbyte::@2/(byte*) print_char_cursor#4 )
  (byte*) print_line_cursor#44 ← phi( assert_sbyte::@2/(byte*) print_line_cursor#2 )
  (byte*) print_line_cursor#21 ← (byte*) print_line_cursor#44
  (byte*) print_char_cursor#31 ← (byte*) print_char_cursor#63
  to:assert_sbyte::@return
assert_sbyte::@return: scope:[assert_sbyte]  from assert_sbyte::@9
  (byte*) print_line_cursor#45 ← phi( assert_sbyte::@9/(byte*) print_line_cursor#21 )
  (byte*) print_char_cursor#64 ← phi( assert_sbyte::@9/(byte*) print_char_cursor#31 )
  (byte*) print_char_cursor#32 ← (byte*) print_char_cursor#64
  (byte*) print_line_cursor#22 ← (byte*) print_line_cursor#45
  return 
  to:@return
@40: scope:[]  from @35
  (byte*) print_screen#4 ← phi( @35/(byte*) print_screen#5 )
  (byte*) print_char_cursor#79 ← phi( @35/(byte*) print_char_cursor#81 )
  (byte*) print_line_cursor#53 ← phi( @35/(byte*) print_line_cursor#58 )
  call main 
  to:@41
@41: scope:[]  from @40
  (byte*) print_char_cursor#65 ← phi( @40/(byte*) print_char_cursor#10 )
  (byte*) print_line_cursor#46 ← phi( @40/(byte*) print_line_cursor#8 )
  (byte*) print_line_cursor#23 ← (byte*) print_line_cursor#46
  (byte*) print_char_cursor#33 ← (byte*) print_char_cursor#65
  to:@end
@end: scope:[]  from @41

SYMBOL TABLE SSA
(label) @12
(label) @35
(label) @40
(label) @41
(label) @begin
(label) @end
(byte*) BGCOL
(byte*) BGCOL#0
(byte) GREEN
(byte) GREEN#0
(const byte) RADIX::BINARY = (number) 2
(const byte) RADIX::DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL = (number) 8
(byte) RED
(byte) RED#0
(void()) assert_byte((byte*) assert_byte::msg , (byte) assert_byte::b , (byte) assert_byte::c)
(bool~) assert_byte::$2
(label) assert_byte::@1
(label) assert_byte::@2
(label) assert_byte::@3
(label) assert_byte::@5
(label) assert_byte::@6
(label) assert_byte::@7
(label) assert_byte::@8
(label) assert_byte::@9
(label) assert_byte::@return
(byte) assert_byte::b
(byte) assert_byte::b#0
(byte) assert_byte::b#1
(byte) assert_byte::b#2
(byte) assert_byte::b#3
(byte) assert_byte::b#4
(byte) assert_byte::b#5
(byte) assert_byte::c
(byte) assert_byte::c#0
(byte) assert_byte::c#1
(byte) assert_byte::c#2
(byte) assert_byte::c#3
(byte) assert_byte::c#4
(byte) assert_byte::c#5
(byte*) assert_byte::msg
(byte*) assert_byte::msg#0
(byte*) assert_byte::msg#1
(byte*) assert_byte::msg#2
(byte*) assert_byte::msg#3
(const string) assert_byte::str = (string) " @"
(const string) assert_byte::str1 = (string) "fail!@"
(const string) assert_byte::str2 = (string) "ok@"
(void()) assert_sbyte((byte*) assert_sbyte::msg , (signed byte) assert_sbyte::b , (signed byte) assert_sbyte::c)
(bool~) assert_sbyte::$2
(label) assert_sbyte::@1
(label) assert_sbyte::@2
(label) assert_sbyte::@3
(label) assert_sbyte::@5
(label) assert_sbyte::@6
(label) assert_sbyte::@7
(label) assert_sbyte::@8
(label) assert_sbyte::@9
(label) assert_sbyte::@return
(signed byte) assert_sbyte::b
(signed byte) assert_sbyte::b#0
(signed byte) assert_sbyte::b#1
(signed byte) assert_sbyte::b#2
(signed byte) assert_sbyte::b#3
(signed byte) assert_sbyte::b#4
(signed byte) assert_sbyte::b#5
(signed byte) assert_sbyte::b#6
(signed byte) assert_sbyte::b#7
(signed byte) assert_sbyte::c
(signed byte) assert_sbyte::c#0
(signed byte) assert_sbyte::c#1
(signed byte) assert_sbyte::c#2
(signed byte) assert_sbyte::c#3
(signed byte) assert_sbyte::c#4
(signed byte) assert_sbyte::c#5
(signed byte) assert_sbyte::c#6
(signed byte) assert_sbyte::c#7
(byte*) assert_sbyte::msg
(byte*) assert_sbyte::msg#0
(byte*) assert_sbyte::msg#1
(byte*) assert_sbyte::msg#2
(byte*) assert_sbyte::msg#3
(byte*) assert_sbyte::msg#4
(byte*) assert_sbyte::msg#5
(const string) assert_sbyte::str = (string) " @"
(const string) assert_sbyte::str1 = (string) "fail!@"
(const string) assert_sbyte::str2 = (string) "ok@"
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@return
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(bool~) memset::$0
(bool~) memset::$1
(byte*~) memset::$2
(byte*~) memset::$3
(bool~) memset::$4
(label) memset::@1
(label) memset::@2
(label) memset::@4
(label) memset::@return
(byte) memset::c
(byte) memset::c#0
(byte) memset::c#1
(byte) memset::c#2
(byte) memset::c#3
(byte*) memset::dst
(byte*) memset::dst#0
(byte*) memset::dst#1
(byte*) memset::dst#2
(byte*) memset::end
(byte*) memset::end#0
(byte*) memset::end#1
(word) memset::num
(word) memset::num#0
(word) memset::num#1
(word) memset::num#2
(void*) memset::return
(void*) memset::return#0
(void*) memset::return#1
(void*) memset::return#2
(void*) memset::return#3
(void*) memset::str
(void*) memset::str#0
(void*) memset::str#1
(void*) memset::str#2
(void*) memset::str#3
(void*) memset::str#4
(byte*) print_char_cursor
(byte*) print_char_cursor#0
(byte*) print_char_cursor#1
(byte*) print_char_cursor#10
(byte*) print_char_cursor#11
(byte*) print_char_cursor#12
(byte*) print_char_cursor#13
(byte*) print_char_cursor#14
(byte*) print_char_cursor#15
(byte*) print_char_cursor#16
(byte*) print_char_cursor#17
(byte*) print_char_cursor#18
(byte*) print_char_cursor#19
(byte*) print_char_cursor#2
(byte*) print_char_cursor#20
(byte*) print_char_cursor#21
(byte*) print_char_cursor#22
(byte*) print_char_cursor#23
(byte*) print_char_cursor#24
(byte*) print_char_cursor#25
(byte*) print_char_cursor#26
(byte*) print_char_cursor#27
(byte*) print_char_cursor#28
(byte*) print_char_cursor#29
(byte*) print_char_cursor#3
(byte*) print_char_cursor#30
(byte*) print_char_cursor#31
(byte*) print_char_cursor#32
(byte*) print_char_cursor#33
(byte*) print_char_cursor#34
(byte*) print_char_cursor#35
(byte*) print_char_cursor#36
(byte*) print_char_cursor#37
(byte*) print_char_cursor#38
(byte*) print_char_cursor#39
(byte*) print_char_cursor#4
(byte*) print_char_cursor#40
(byte*) print_char_cursor#41
(byte*) print_char_cursor#42
(byte*) print_char_cursor#43
(byte*) print_char_cursor#44
(byte*) print_char_cursor#45
(byte*) print_char_cursor#46
(byte*) print_char_cursor#47
(byte*) print_char_cursor#48
(byte*) print_char_cursor#49
(byte*) print_char_cursor#5
(byte*) print_char_cursor#50
(byte*) print_char_cursor#51
(byte*) print_char_cursor#52
(byte*) print_char_cursor#53
(byte*) print_char_cursor#54
(byte*) print_char_cursor#55
(byte*) print_char_cursor#56
(byte*) print_char_cursor#57
(byte*) print_char_cursor#58
(byte*) print_char_cursor#59
(byte*) print_char_cursor#6
(byte*) print_char_cursor#60
(byte*) print_char_cursor#61
(byte*) print_char_cursor#62
(byte*) print_char_cursor#63
(byte*) print_char_cursor#64
(byte*) print_char_cursor#65
(byte*) print_char_cursor#66
(byte*) print_char_cursor#67
(byte*) print_char_cursor#68
(byte*) print_char_cursor#69
(byte*) print_char_cursor#7
(byte*) print_char_cursor#70
(byte*) print_char_cursor#71
(byte*) print_char_cursor#72
(byte*) print_char_cursor#73
(byte*) print_char_cursor#74
(byte*) print_char_cursor#75
(byte*) print_char_cursor#76
(byte*) print_char_cursor#77
(byte*) print_char_cursor#78
(byte*) print_char_cursor#79
(byte*) print_char_cursor#8
(byte*) print_char_cursor#80
(byte*) print_char_cursor#81
(byte*) print_char_cursor#9
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_line_cursor
(byte*) print_line_cursor#0
(byte*) print_line_cursor#1
(byte*) print_line_cursor#10
(byte*) print_line_cursor#11
(byte*) print_line_cursor#12
(byte*) print_line_cursor#13
(byte*) print_line_cursor#14
(byte*) print_line_cursor#15
(byte*) print_line_cursor#16
(byte*) print_line_cursor#17
(byte*) print_line_cursor#18
(byte*) print_line_cursor#19
(byte*) print_line_cursor#2
(byte*) print_line_cursor#20
(byte*) print_line_cursor#21
(byte*) print_line_cursor#22
(byte*) print_line_cursor#23
(byte*) print_line_cursor#24
(byte*) print_line_cursor#25
(byte*) print_line_cursor#26
(byte*) print_line_cursor#27
(byte*) print_line_cursor#28
(byte*) print_line_cursor#29
(byte*) print_line_cursor#3
(byte*) print_line_cursor#30
(byte*) print_line_cursor#31
(byte*) print_line_cursor#32
(byte*) print_line_cursor#33
(byte*) print_line_cursor#34
(byte*) print_line_cursor#35
(byte*) print_line_cursor#36
(byte*) print_line_cursor#37
(byte*) print_line_cursor#38
(byte*) print_line_cursor#39
(byte*) print_line_cursor#4
(byte*) print_line_cursor#40
(byte*) print_line_cursor#41
(byte*) print_line_cursor#42
(byte*) print_line_cursor#43
(byte*) print_line_cursor#44
(byte*) print_line_cursor#45
(byte*) print_line_cursor#46
(byte*) print_line_cursor#47
(byte*) print_line_cursor#48
(byte*) print_line_cursor#49
(byte*) print_line_cursor#5
(byte*) print_line_cursor#50
(byte*) print_line_cursor#51
(byte*) print_line_cursor#52
(byte*) print_line_cursor#53
(byte*) print_line_cursor#54
(byte*) print_line_cursor#55
(byte*) print_line_cursor#56
(byte*) print_line_cursor#57
(byte*) print_line_cursor#58
(byte*) print_line_cursor#59
(byte*) print_line_cursor#6
(byte*) print_line_cursor#60
(byte*) print_line_cursor#61
(byte*) print_line_cursor#62
(byte*) print_line_cursor#63
(byte*) print_line_cursor#64
(byte*) print_line_cursor#65
(byte*) print_line_cursor#66
(byte*) print_line_cursor#67
(byte*) print_line_cursor#68
(byte*) print_line_cursor#7
(byte*) print_line_cursor#8
(byte*) print_line_cursor#9
(void()) print_ln()
(byte*~) print_ln::$0
(bool~) print_ln::$1
(label) print_ln::@1
(label) print_ln::@2
(label) print_ln::@return
(byte*) print_screen
(byte*) print_screen#0
(byte*) print_screen#1
(byte*) print_screen#2
(byte*) print_screen#3
(byte*) print_screen#4
(byte*) print_screen#5
(void()) print_str((byte*) print_str::str)
(bool~) print_str::$0
(label) print_str::@1
(label) print_str::@2
(label) print_str::@return
(byte*) print_str::str
(byte*) print_str::str#0
(byte*) print_str::str#1
(byte*) print_str::str#10
(byte*) print_str::str#11
(byte*) print_str::str#2
(byte*) print_str::str#3
(byte*) print_str::str#4
(byte*) print_str::str#5
(byte*) print_str::str#6
(byte*) print_str::str#7
(byte*) print_str::str#8
(byte*) print_str::str#9
(void()) test_bytes()
(number~) test_bytes::$1
(signed byte~) test_bytes::$3
(number~) test_bytes::$4
(byte~) test_bytes::$5
(label) test_bytes::@1
(label) test_bytes::@2
(label) test_bytes::@3
(label) test_bytes::@return
(byte) test_bytes::bb
(byte) test_bytes::bb#0
(byte) test_bytes::bc
(byte) test_bytes::bc#0
(byte) test_bytes::bc#1
(byte) test_bytes::bd
(byte) test_bytes::bd#0
(const string) test_bytes::msg = (string) "0=0@"
(const string) test_bytes::msg1 = (string) "0+2=2@"
(const string) test_bytes::msg2 = (string) "0+2-4=254@"
(void()) test_sbytes()
(number~) test_sbytes::$1
(number~) test_sbytes::$3
(signed byte~) test_sbytes::$5
(signed byte~) test_sbytes::$7
(label) test_sbytes::@1
(label) test_sbytes::@2
(label) test_sbytes::@3
(label) test_sbytes::@4
(label) test_sbytes::@5
(label) test_sbytes::@return
(signed byte) test_sbytes::bb
(signed byte) test_sbytes::bb#0
(signed byte) test_sbytes::bc
(signed byte) test_sbytes::bc#0
(signed byte) test_sbytes::bc#1
(signed byte) test_sbytes::bd
(signed byte) test_sbytes::bd#0
(signed byte) test_sbytes::bd#1
(signed byte) test_sbytes::be
(signed byte) test_sbytes::be#0
(signed byte) test_sbytes::bf
(signed byte) test_sbytes::bf#0
(const string) test_sbytes::msg = (string) "0=0@"
(const string) test_sbytes::msg1 = (string) "0+2=2@"
(const string) test_sbytes::msg2 = (string) "0+2-4=-2@"
(const string) test_sbytes::msg3 = (string) "-(0+2-4)=2@"
(const string) test_sbytes::msg4 = (string) "-127-127=2@"

Adding number conversion cast (unumber) 0 in (bool~) memset::$0 ← (word) memset::num#1 > (number) 0
Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#24 + (number) $28
Adding number conversion cast (unumber) $3e8 in (word) memset::num#0 ← (number) $3e8
Adding number conversion cast (unumber) 5 in (byte) GREEN#0 ← (number) 5
Adding number conversion cast (unumber) 2 in (byte) RED#0 ← (number) 2
Adding number conversion cast (unumber) 0 in (byte) test_bytes::bb#0 ← (number) 0
Adding number conversion cast (unumber) 0 in (byte) assert_byte::c#0 ← (number) 0
Adding number conversion cast (unumber) 2 in (number~) test_bytes::$1 ← (byte) test_bytes::bb#0 + (number) 2
Adding number conversion cast (unumber) test_bytes::$1 in (number~) test_bytes::$1 ← (byte) test_bytes::bb#0 + (unumber)(number) 2
Adding number conversion cast (unumber) 2 in (byte) assert_byte::c#1 ← (number) 2
Adding number conversion cast (snumber) 4 in (number~) test_bytes::$4 ← (signed byte~) test_bytes::$3 - (number) 4
Adding number conversion cast (snumber) test_bytes::$4 in (number~) test_bytes::$4 ← (signed byte~) test_bytes::$3 - (snumber)(number) 4
Adding number conversion cast (unumber) $fe in (byte) assert_byte::c#2 ← (number) $fe
Adding number conversion cast (snumber) 0 in (signed byte) test_sbytes::bb#0 ← (number) 0
Adding number conversion cast (snumber) 0 in (signed byte) assert_sbyte::c#0 ← (number) 0
Adding number conversion cast (snumber) 2 in (number~) test_sbytes::$1 ← (signed byte) test_sbytes::bb#0 + (number) 2
Adding number conversion cast (snumber) test_sbytes::$1 in (number~) test_sbytes::$1 ← (signed byte) test_sbytes::bb#0 + (snumber)(number) 2
Adding number conversion cast (snumber) 2 in (signed byte) assert_sbyte::c#1 ← (number) 2
Adding number conversion cast (snumber) 4 in (number~) test_sbytes::$3 ← (signed byte) test_sbytes::bc#1 - (number) 4
Adding number conversion cast (snumber) test_sbytes::$3 in (number~) test_sbytes::$3 ← (signed byte) test_sbytes::bc#1 - (snumber)(number) 4
Adding number conversion cast (snumber) -2 in (signed byte) assert_sbyte::c#2 ← (number) -2
Adding number conversion cast (snumber) 2 in (signed byte) assert_sbyte::c#3 ← (number) 2
Adding number conversion cast (snumber) 2 in (signed byte) assert_sbyte::c#4 ← (number) 2
Successful SSA optimization PassNAddNumberTypeConversions
Inlining cast (byte*~) memset::$2 ← (byte*)(void*) memset::str#2
Inlining cast (byte*) memset::dst#0 ← (byte*)(void*) memset::str#2
Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400
Inlining cast (word) memset::num#0 ← (unumber)(number) $3e8
Inlining cast (byte*) BGCOL#0 ← (byte*)(number) $d021
Inlining cast (byte) GREEN#0 ← (unumber)(number) 5
Inlining cast (byte) RED#0 ← (unumber)(number) 2
Inlining cast (byte) test_bytes::bb#0 ← (unumber)(number) 0
Inlining cast (byte) assert_byte::c#0 ← (unumber)(number) 0
Inlining cast (byte) assert_byte::c#1 ← (unumber)(number) 2
Inlining cast (signed byte~) test_bytes::$3 ← (signed byte)(byte) test_bytes::bc#1
Inlining cast (byte~) test_bytes::$5 ← (byte)(snumber~) test_bytes::$4
Inlining cast (byte) assert_byte::c#2 ← (unumber)(number) $fe
Inlining cast (signed byte) test_sbytes::bb#0 ← (snumber)(number) 0
Inlining cast (signed byte) assert_sbyte::c#0 ← (snumber)(number) 0
Inlining cast (signed byte) assert_sbyte::c#1 ← (snumber)(number) 2
Inlining cast (signed byte) assert_sbyte::c#2 ← (snumber)(number) -2
Inlining cast (signed byte) assert_sbyte::c#3 ← (snumber)(number) 2
Inlining cast (signed byte~) test_sbytes::$7 ← (signed byte)(number) -$7f-(number) $7f
Inlining cast (signed byte) assert_sbyte::c#4 ← (snumber)(number) 2
Successful SSA optimization Pass2InlineCast
Simplifying constant integer cast 0
Simplifying constant pointer cast (byte*) 1024
Simplifying constant integer cast $28
Simplifying constant integer cast $3e8
Simplifying constant pointer cast (byte*) 53281
Simplifying constant integer cast 5
Simplifying constant integer cast 2
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 4
Simplifying constant integer cast $fe
Simplifying constant integer cast 0
Simplifying constant integer cast 0
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Simplifying constant integer cast 4
Simplifying constant integer cast -2
Simplifying constant integer cast 2
Simplifying constant integer cast 2
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) $28
Finalized unsigned number type (word) $3e8
Finalized unsigned number type (byte) 5
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 0
Finalized unsigned number type (byte) 2
Finalized unsigned number type (byte) 2
Finalized signed number type (signed byte) 4
Finalized unsigned number type (byte) $fe
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 0
Finalized signed number type (signed byte) 2
Finalized signed number type (signed byte) 2
Finalized signed number type (signed byte) 4
Finalized signed number type (signed byte) -2
Finalized signed number type (signed byte) 2
Finalized signed number type (signed byte) 2
Successful SSA optimization PassNFinalizeNumberTypeConversions
Inferred type updated to byte in (unumber~) test_bytes::$1 ← (byte) test_bytes::bb#0 + (byte) 2
Inferred type updated to signed byte in (snumber~) test_bytes::$4 ← (signed byte~) test_bytes::$3 - (signed byte) 4
Inferred type updated to signed byte in (snumber~) test_sbytes::$1 ← (signed byte) test_sbytes::bb#0 + (signed byte) 2
Inferred type updated to signed byte in (snumber~) test_sbytes::$3 ← (signed byte) test_sbytes::bc#1 - (signed byte) 4
Inversing boolean not [2] (bool~) memset::$1 ← (word) memset::num#1 <= (byte) 0 from [1] (bool~) memset::$0 ← (word) memset::num#1 > (byte) 0
Successful SSA optimization Pass2UnaryNotSimplification
Alias (void*) memset::return#0 = (void*) memset::str#1 (void*) memset::return#3 (void*) memset::return#1 
Alias (void*) memset::str#2 = (void*) memset::str#3 
Alias (word) memset::num#1 = (word) memset::num#2 
Alias (byte) memset::c#2 = (byte) memset::c#3 
Alias (byte*) memset::end#0 = (byte*~) memset::$3 
Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#58 (byte*) print_char_cursor#81 (byte*) print_screen#5 (byte*) print_line_cursor#53 (byte*) print_char_cursor#79 (byte*) print_screen#4 
Alias (byte*) print_str::str#10 = (byte*) print_str::str#9 
Alias (byte*) print_char_cursor#2 = (byte*) print_char_cursor#34 (byte*) print_char_cursor#66 (byte*) print_char_cursor#35 
Alias (byte*) print_line_cursor#1 = (byte*~) print_ln::$0 (byte*) print_line_cursor#25 (byte*) print_char_cursor#3 (byte*) print_line_cursor#26 (byte*) print_char_cursor#37 (byte*) print_line_cursor#2 (byte*) print_char_cursor#4 
Alias (byte*) print_line_cursor#27 = (byte*) print_screen#2 (byte*) print_screen#1 (byte*) print_line_cursor#3 (byte*) print_char_cursor#5 (byte*) print_char_cursor#38 (byte*) print_line_cursor#4 (byte*) print_char_cursor#6 
Alias (byte*) print_line_cursor#28 = (byte*) print_line_cursor#5 
Alias (byte*) print_char_cursor#39 = (byte*) print_char_cursor#7 
Alias (byte*) print_char_cursor#40 = (byte*) print_char_cursor#8 
Alias (byte*) print_line_cursor#29 = (byte*) print_line_cursor#6 
Alias (byte*) print_char_cursor#10 = (byte*) print_char_cursor#9 (byte*) print_char_cursor#41 (byte*) print_char_cursor#42 
Alias (byte*) print_line_cursor#30 = (byte*) print_line_cursor#7 (byte*) print_line_cursor#31 (byte*) print_line_cursor#8 
Alias (byte*) print_char_cursor#11 = (byte*) print_char_cursor#43 
Alias (byte*) print_line_cursor#32 = (byte*) print_line_cursor#9 
Alias (byte) test_bytes::bc#0 = (byte~) test_bytes::$1 (byte) test_bytes::bc#1 
Alias (byte*) print_char_cursor#12 = (byte*) print_char_cursor#44 
Alias (byte*) print_line_cursor#10 = (byte*) print_line_cursor#33 
Alias (byte) test_bytes::bd#0 = (byte~) test_bytes::$5 
Alias (byte*) print_char_cursor#13 = (byte*) print_char_cursor#45 (byte*) print_char_cursor#46 (byte*) print_char_cursor#14 
Alias (byte*) print_line_cursor#11 = (byte*) print_line_cursor#34 (byte*) print_line_cursor#35 (byte*) print_line_cursor#12 
Alias (byte) assert_byte::b#3 = (byte) assert_byte::b#4 (byte) assert_byte::b#5 
Alias (byte) assert_byte::c#3 = (byte) assert_byte::c#4 (byte) assert_byte::c#5 
Alias (byte*) print_line_cursor#54 = (byte*) print_line_cursor#65 (byte*) print_line_cursor#67 (byte*) print_line_cursor#63 (byte*) print_line_cursor#59 (byte*) print_line_cursor#60 (byte*) print_line_cursor#55 
Alias (byte*) print_char_cursor#15 = (byte*) print_char_cursor#47 
Alias (byte*) print_char_cursor#16 = (byte*) print_char_cursor#48 (byte*) print_char_cursor#71 (byte*) print_char_cursor#72 
Alias (byte*) print_char_cursor#17 = (byte*) print_char_cursor#49 
Alias (byte*) print_char_cursor#18 = (byte*) print_char_cursor#50 
Alias (byte*) print_line_cursor#13 = (byte*) print_line_cursor#36 (byte*) print_line_cursor#37 (byte*) print_line_cursor#14 
Alias (byte*) print_char_cursor#19 = (byte*) print_char_cursor#51 (byte*) print_char_cursor#52 (byte*) print_char_cursor#20 
Alias (byte*) print_char_cursor#21 = (byte*) print_char_cursor#53 
Alias (byte*) print_line_cursor#15 = (byte*) print_line_cursor#38 
Alias (signed byte) test_sbytes::bc#0 = (signed byte~) test_sbytes::$1 (signed byte) test_sbytes::bc#1 
Alias (byte*) print_char_cursor#22 = (byte*) print_char_cursor#54 
Alias (byte*) print_line_cursor#16 = (byte*) print_line_cursor#39 
Alias (signed byte) test_sbytes::bd#0 = (signed byte~) test_sbytes::$3 (signed byte) test_sbytes::bd#1 
Alias (byte*) print_char_cursor#23 = (byte*) print_char_cursor#55 
Alias (byte*) print_line_cursor#17 = (byte*) print_line_cursor#40 
Alias (signed byte) test_sbytes::be#0 = (signed byte~) test_sbytes::$5 
Alias (byte*) print_char_cursor#24 = (byte*) print_char_cursor#56 
Alias (byte*) print_line_cursor#18 = (byte*) print_line_cursor#41 
Alias (signed byte) test_sbytes::bf#0 = (signed byte~) test_sbytes::$7 
Alias (byte*) print_char_cursor#25 = (byte*) print_char_cursor#57 (byte*) print_char_cursor#58 (byte*) print_char_cursor#26 
Alias (byte*) print_line_cursor#19 = (byte*) print_line_cursor#42 (byte*) print_line_cursor#43 (byte*) print_line_cursor#20 
Alias (signed byte) assert_sbyte::b#5 = (signed byte) assert_sbyte::b#6 (signed byte) assert_sbyte::b#7 
Alias (signed byte) assert_sbyte::c#5 = (signed byte) assert_sbyte::c#6 (signed byte) assert_sbyte::c#7 
Alias (byte*) print_line_cursor#56 = (byte*) print_line_cursor#66 (byte*) print_line_cursor#68 (byte*) print_line_cursor#64 (byte*) print_line_cursor#61 (byte*) print_line_cursor#62 (byte*) print_line_cursor#57 
Alias (byte*) print_char_cursor#27 = (byte*) print_char_cursor#59 
Alias (byte*) print_char_cursor#28 = (byte*) print_char_cursor#60 (byte*) print_char_cursor#76 (byte*) print_char_cursor#77 
Alias (byte*) print_char_cursor#29 = (byte*) print_char_cursor#61 
Alias (byte*) print_char_cursor#30 = (byte*) print_char_cursor#62 
Alias (byte*) print_line_cursor#21 = (byte*) print_line_cursor#44 (byte*) print_line_cursor#45 (byte*) print_line_cursor#22 
Alias (byte*) print_char_cursor#31 = (byte*) print_char_cursor#63 (byte*) print_char_cursor#64 (byte*) print_char_cursor#32 
Alias (byte*) print_line_cursor#23 = (byte*) print_line_cursor#46 
Alias (byte*) print_char_cursor#33 = (byte*) print_char_cursor#65 
Successful SSA optimization Pass2AliasElimination
Alias (byte*) print_line_cursor#50 = (byte*) print_line_cursor#54 
Alias (byte*) print_line_cursor#52 = (byte*) print_line_cursor#56 
Successful SSA optimization Pass2AliasElimination
Self Phi Eliminated (byte) memset::c#1
Self Phi Eliminated (byte*) memset::end#1
Self Phi Eliminated (void*) memset::str#4
Self Phi Eliminated (byte*) print_char_cursor#36
Successful SSA optimization Pass2SelfPhiElimination
Identical Phi Values (word) memset::num#1 (word) memset::num#0
Identical Phi Values (void*) memset::str#2 (void*) memset::str#0
Identical Phi Values (byte) memset::c#2 (byte) memset::c#0
Identical Phi Values (byte) memset::c#1 (byte) memset::c#2
Identical Phi Values (byte*) memset::end#1 (byte*) memset::end#0
Identical Phi Values (void*) memset::str#4 (void*) memset::str#2
Identical Phi Values (byte*) print_char_cursor#36 (byte*) print_char_cursor#67
Identical Phi Values (byte*) print_line_cursor#27 (byte*) print_screen#3
Identical Phi Values (byte*) print_screen#3 (byte*) print_line_cursor#0
Identical Phi Values (byte*) print_line_cursor#48 (byte*) print_line_cursor#0
Identical Phi Values (byte*) print_char_cursor#68 (byte*) print_line_cursor#0
Identical Phi Values (byte*) print_line_cursor#28 (byte*) print_line_cursor#27
Identical Phi Values (byte*) print_char_cursor#39 (byte*) print_line_cursor#27
Identical Phi Values (byte*) print_char_cursor#40 (byte*) print_char_cursor#13
Identical Phi Values (byte*) print_line_cursor#29 (byte*) print_line_cursor#11
Identical Phi Values (byte*) print_char_cursor#10 (byte*) print_char_cursor#25
Identical Phi Values (byte*) print_line_cursor#30 (byte*) print_line_cursor#19
Identical Phi Values (byte*) print_char_cursor#69 (byte*) print_char_cursor#39
Identical Phi Values (byte*) print_line_cursor#49 (byte*) print_line_cursor#28
Identical Phi Values (byte*) print_char_cursor#11 (byte*) print_char_cursor#19
Identical Phi Values (byte*) print_line_cursor#32 (byte*) print_line_cursor#13
Identical Phi Values (byte*) print_char_cursor#12 (byte*) print_char_cursor#19
Identical Phi Values (byte*) print_line_cursor#10 (byte*) print_line_cursor#13
Identical Phi Values (byte*) print_char_cursor#13 (byte*) print_char_cursor#19
Identical Phi Values (byte*) print_line_cursor#11 (byte*) print_line_cursor#13
Identical Phi Values (byte*) print_char_cursor#15 (byte*) print_char_cursor#2
Identical Phi Values (byte*) print_char_cursor#16 (byte*) print_char_cursor#2
Identical Phi Values (byte*) print_char_cursor#17 (byte*) print_char_cursor#2
Identical Phi Values (byte*) print_char_cursor#18 (byte*) print_char_cursor#2
Identical Phi Values (byte*) print_line_cursor#13 (byte*) print_line_cursor#1
Identical Phi Values (byte*) print_char_cursor#19 (byte*) print_line_cursor#1
Identical Phi Values (byte*) print_char_cursor#74 (byte*) print_char_cursor#40
Identical Phi Values (byte*) print_line_cursor#51 (byte*) print_line_cursor#29
Identical Phi Values (byte*) print_char_cursor#21 (byte*) print_char_cursor#31
Identical Phi Values (byte*) print_line_cursor#15 (byte*) print_line_cursor#21
Identical Phi Values (byte*) print_char_cursor#22 (byte*) print_char_cursor#31
Identical Phi Values (byte*) print_line_cursor#16 (byte*) print_line_cursor#21
Identical Phi Values (byte*) print_char_cursor#23 (byte*) print_char_cursor#31
Identical Phi Values (byte*) print_line_cursor#17 (byte*) print_line_cursor#21
Identical Phi Values (byte*) print_char_cursor#24 (byte*) print_char_cursor#31
Identical Phi Values (byte*) print_line_cursor#18 (byte*) print_line_cursor#21
Identical Phi Values (byte*) print_char_cursor#25 (byte*) print_char_cursor#31
Identical Phi Values (byte*) print_line_cursor#19 (byte*) print_line_cursor#21
Identical Phi Values (byte*) print_char_cursor#27 (byte*) print_char_cursor#2
Identical Phi Values (byte*) print_char_cursor#28 (byte*) print_char_cursor#2
Identical Phi Values (byte*) print_char_cursor#29 (byte*) print_char_cursor#2
Identical Phi Values (byte*) print_char_cursor#30 (byte*) print_char_cursor#2
Identical Phi Values (byte*) print_line_cursor#21 (byte*) print_line_cursor#1
Identical Phi Values (byte*) print_char_cursor#31 (byte*) print_line_cursor#1
Identical Phi Values (byte*) print_line_cursor#23 (byte*) print_line_cursor#30
Identical Phi Values (byte*) print_char_cursor#33 (byte*) print_char_cursor#10
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (void*) memset::return#0 (void*) memset::str#0
Identical Phi Values (byte*) print_char_cursor#73 (byte*) print_char_cursor#2
Identical Phi Values (byte*) print_char_cursor#75 (byte*) print_line_cursor#1
Identical Phi Values (byte*) print_line_cursor#52 (byte*) print_line_cursor#1
Identical Phi Values (byte*) print_char_cursor#78 (byte*) print_char_cursor#2
Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (byte*) print_char_cursor#67 (byte*) print_char_cursor#2
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) memset::$1 [3] if((word) memset::num#0<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$4 [15] if((byte*) memset::dst#1!=(byte*) memset::end#0) goto memset::@4
Simple Condition (bool~) print_str::$0 [25] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2
Simple Condition (bool~) print_ln::$1 [38] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1
Simple Condition (bool~) assert_byte::$2 [123] if((byte) assert_byte::b#3!=(byte) assert_byte::c#3) goto assert_byte::@1
Simple Condition (bool~) assert_sbyte::$2 [203] if((signed byte) assert_sbyte::b#5!=(signed byte) assert_sbyte::c#5) goto assert_sbyte::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [180] (signed byte) test_sbytes::bf#0 ← (signed byte)(number) -$7f-(number) $7f
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) print_line_cursor#0 = (byte*) 1024
Constant (const byte) memset::c#0 = ' '
Constant (const word) memset::num#0 = $3e8
Constant (const byte*) BGCOL#0 = (byte*) 53281
Constant (const byte) GREEN#0 = 5
Constant (const byte) RED#0 = 2
Constant (const byte) test_bytes::bb#0 = 0
Constant (const byte*) assert_byte::msg#0 = test_bytes::msg
Constant (const byte) assert_byte::c#0 = 0
Constant (const byte*) assert_byte::msg#1 = test_bytes::msg1
Constant (const byte) assert_byte::c#1 = 2
Constant (const byte*) assert_byte::msg#2 = test_bytes::msg2
Constant (const byte) assert_byte::c#2 = $fe
Constant (const byte*) print_str::str#2 = assert_byte::str
Constant (const byte*) print_str::str#3 = assert_byte::str1
Constant (const byte*) print_str::str#4 = assert_byte::str2
Constant (const signed byte) test_sbytes::bb#0 = 0
Constant (const byte*) assert_sbyte::msg#0 = test_sbytes::msg
Constant (const signed byte) assert_sbyte::c#0 = 0
Constant (const byte*) assert_sbyte::msg#1 = test_sbytes::msg1
Constant (const signed byte) assert_sbyte::c#1 = 2
Constant (const byte*) assert_sbyte::msg#2 = test_sbytes::msg2
Constant (const signed byte) assert_sbyte::c#2 = -2
Constant (const byte*) assert_sbyte::msg#3 = test_sbytes::msg3
Constant (const signed byte) assert_sbyte::c#3 = 2
Constant (const signed byte) test_sbytes::bf#0 = (signed byte)-$7f-$7f
Constant (const byte*) assert_sbyte::msg#4 = test_sbytes::msg4
Constant (const signed byte) assert_sbyte::c#4 = 2
Constant (const byte*) print_str::str#6 = assert_sbyte::str
Constant (const byte*) print_str::str#7 = assert_sbyte::str1
Constant (const byte*) print_str::str#8 = assert_sbyte::str2
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) assert_byte::b#0 = test_bytes::bb#0
Constant (const signed byte) assert_sbyte::b#0 = test_sbytes::bb#0
Constant (const signed byte) assert_sbyte::b#4 = test_sbytes::bf#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (void*)print_line_cursor#0 in [46] (void*) memset::str#0 ← (void*)(const byte*) print_line_cursor#0
Successful SSA optimization Pass2ConstantValues
if() condition always false - eliminating [3] if((const word) memset::num#0<=(byte) 0) goto memset::@1
Successful SSA optimization Pass2ConstantIfs
Successful SSA optimization Pass2ConstantStringConsolidation
Simplifying expression containing zero 2 in [89] (byte) test_bytes::bc#0 ← (const byte) test_bytes::bb#0 + (byte) 2
Simplifying expression containing zero 2 in [153] (signed byte) test_sbytes::bc#0 ← (const signed byte) test_sbytes::bb#0 + (signed byte) 2
Successful SSA optimization PassNSimplifyExpressionWithZero
Eliminating unused variable (void*) memset::return#2 and assignment [22] (void*) memset::return#2 ← (void*) memset::str#0
Successful SSA optimization PassNEliminateUnusedVars
Constant (const void*) memset::str#0 = (void*)print_line_cursor#0
Constant (const byte) test_bytes::bc#0 = 2
Constant (const signed byte) test_sbytes::bc#0 = 2
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) assert_byte::b#1 = test_bytes::bc#0
Constant (const signed byte) assert_sbyte::b#1 = test_sbytes::bc#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (byte*)memset::str#0 in [0] (byte*~) memset::$2 ← (byte*)(const void*) memset::str#0
Constant value identified (byte*)memset::str#0 in [2] (byte*) memset::dst#0 ← (byte*)(const void*) memset::str#0
Constant value identified (signed byte)test_bytes::bc#0 in [32] (signed byte~) test_bytes::$3 ← (signed byte)(const byte) test_bytes::bc#0
Successful SSA optimization Pass2ConstantValues
Constant right-side identified [47] (signed byte) test_sbytes::bd#0 ← (const signed byte) test_sbytes::bc#0 - (signed byte) 4
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) memset::$2 = (byte*)memset::str#0
Constant (const byte*) memset::dst#0 = (byte*)memset::str#0
Constant (const signed byte) test_bytes::$3 = (signed byte)test_bytes::bc#0
Constant (const signed byte) test_sbytes::bd#0 = test_sbytes::bc#0-4
Successful SSA optimization Pass2ConstantIdentification
Constant (const signed byte) assert_sbyte::b#2 = test_sbytes::bd#0
Successful SSA optimization Pass2ConstantIdentification
Constant right-side identified [0] (byte*) memset::end#0 ← (const byte*) memset::$2 + (const word) memset::num#0
Constant right-side identified [27] (signed byte~) test_bytes::$4 ← (const signed byte) test_bytes::$3 - (signed byte) 4
Constant right-side identified [45] (signed byte) test_sbytes::be#0 ← - (const signed byte) test_sbytes::bd#0
Successful SSA optimization Pass2ConstantRValueConsolidation
Constant (const byte*) memset::end#0 = memset::$2+memset::num#0
Constant (const signed byte) test_bytes::$4 = test_bytes::$3-4
Constant (const signed byte) test_sbytes::be#0 = -test_sbytes::bd#0
Successful SSA optimization Pass2ConstantIdentification
Constant (const signed byte) assert_sbyte::b#3 = test_sbytes::be#0
Successful SSA optimization Pass2ConstantIdentification
Constant value identified (byte)test_bytes::$4 in [28] (byte) test_bytes::bd#0 ← (byte)(const signed byte) test_bytes::$4
Successful SSA optimization Pass2ConstantValues
Constant (const byte) test_bytes::bd#0 = (byte)test_bytes::$4
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) assert_byte::b#2 = test_bytes::bd#0
Successful SSA optimization Pass2ConstantIdentification
Inlining constant with var siblings (const byte*) memset::dst#0
Inlining constant with var siblings (const byte*) print_str::str#2
Inlining constant with var siblings (const byte*) print_str::str#3
Inlining constant with var siblings (const byte*) print_str::str#4
Inlining constant with var siblings (const byte*) print_str::str#6
Inlining constant with var siblings (const byte*) print_str::str#7
Inlining constant with var siblings (const byte*) print_str::str#8
Inlining constant with var siblings (const byte*) assert_byte::msg#0
Inlining constant with var siblings (const byte) assert_byte::c#0
Inlining constant with var siblings (const byte*) assert_byte::msg#1
Inlining constant with var siblings (const byte) assert_byte::c#1
Inlining constant with var siblings (const byte*) assert_byte::msg#2
Inlining constant with var siblings (const byte) assert_byte::c#2
Inlining constant with var siblings (const byte) assert_byte::b#0
Inlining constant with var siblings (const byte) assert_byte::b#1
Inlining constant with var siblings (const byte) assert_byte::b#2
Inlining constant with var siblings (const byte*) assert_sbyte::msg#0
Inlining constant with var siblings (const signed byte) assert_sbyte::c#0
Inlining constant with var siblings (const byte*) assert_sbyte::msg#1
Inlining constant with var siblings (const signed byte) assert_sbyte::c#1
Inlining constant with var siblings (const byte*) assert_sbyte::msg#2
Inlining constant with var siblings (const signed byte) assert_sbyte::c#2
Inlining constant with var siblings (const byte*) assert_sbyte::msg#3
Inlining constant with var siblings (const signed byte) assert_sbyte::c#3
Inlining constant with var siblings (const byte*) assert_sbyte::msg#4
Inlining constant with var siblings (const signed byte) assert_sbyte::c#4
Inlining constant with var siblings (const signed byte) assert_sbyte::b#0
Inlining constant with var siblings (const signed byte) assert_sbyte::b#4
Inlining constant with var siblings (const signed byte) assert_sbyte::b#1
Inlining constant with var siblings (const signed byte) assert_sbyte::b#2
Inlining constant with var siblings (const signed byte) assert_sbyte::b#3
Inlining constant with var siblings (const byte*) print_line_cursor#0
Constant inlined test_bytes::msg = (const string) msg
Constant inlined test_sbytes::msg = (const string) msg
Constant inlined assert_sbyte::b#2 = (const signed byte) test_sbytes::bd#0
Constant inlined assert_sbyte::c#1 = (signed byte) 2
Constant inlined assert_sbyte::b#1 = (const signed byte) test_sbytes::bc#0
Constant inlined assert_sbyte::c#0 = (signed byte) 0
Constant inlined assert_byte::b#0 = (const byte) test_bytes::bb#0
Constant inlined assert_sbyte::str1 = (const string) str1
Constant inlined assert_sbyte::b#0 = (const signed byte) test_sbytes::bb#0
Constant inlined assert_byte::b#1 = (const byte) test_bytes::bc#0
Constant inlined assert_sbyte::str2 = (const string) str2
Constant inlined assert_byte::c#0 = (byte) 0
Constant inlined assert_byte::b#2 = (const byte) test_bytes::bd#0
Constant inlined assert_byte::c#1 = (byte) 2
Constant inlined test_bytes::$3 = (signed byte)(const byte) test_bytes::bc#0
Constant inlined assert_byte::c#2 = (byte) $fe
Constant inlined assert_sbyte::c#4 = (signed byte) 2
Constant inlined assert_sbyte::b#4 = (const signed byte) test_sbytes::bf#0
Constant inlined memset::$2 = (byte*)(const void*) memset::str#0
Constant inlined test_bytes::$4 = (signed byte)(const byte) test_bytes::bc#0-(signed byte) 4
Constant inlined assert_sbyte::c#3 = (signed byte) 2
Constant inlined assert_sbyte::b#3 = (const signed byte) test_sbytes::be#0
Constant inlined assert_sbyte::c#2 = (signed byte) -2
Constant inlined assert_byte::str2 = (const string) str2
Constant inlined assert_byte::msg#0 = (const string) msg
Constant inlined test_sbytes::msg1 = (const string) msg1
Constant inlined assert_byte::str1 = (const string) str1
Constant inlined assert_byte::msg#1 = (const string) msg1
Constant inlined assert_byte::msg#2 = (const string) test_bytes::msg2
Constant inlined assert_sbyte::msg#0 = (const string) msg
Constant inlined assert_sbyte::msg#1 = (const string) msg1
Constant inlined assert_sbyte::msg#2 = (const string) test_sbytes::msg2
Constant inlined print_line_cursor#0 = (byte*) 1024
Constant inlined assert_sbyte::msg#3 = (const string) test_sbytes::msg3
Constant inlined assert_sbyte::str = (const string) str
Constant inlined assert_byte::str = (const string) str
Constant inlined test_bytes::msg1 = (const string) msg1
Constant inlined print_str::str#4 = (const string) str2
Constant inlined assert_sbyte::msg#4 = (const string) test_sbytes::msg4
Constant inlined print_str::str#3 = (const string) str1
Constant inlined print_str::str#2 = (const string) str
Constant inlined memset::dst#0 = (byte*)(const void*) memset::str#0
Constant inlined print_str::str#8 = (const string) str2
Constant inlined print_str::str#7 = (const string) str1
Constant inlined print_str::str#6 = (const string) str
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting memset::@6(between memset::@4 and memset::@4)
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @12
Adding NOP phi() at start of @35
Adding NOP phi() at start of @40
Adding NOP phi() at start of @41
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of test_sbytes
Adding NOP phi() at start of test_sbytes::@1
Adding NOP phi() at start of test_sbytes::@2
Adding NOP phi() at start of test_sbytes::@3
Adding NOP phi() at start of test_sbytes::@4
Adding NOP phi() at start of test_sbytes::@5
Adding NOP phi() at start of assert_sbyte::@8
Adding NOP phi() at start of assert_sbyte::@9
Adding NOP phi() at start of assert_sbyte::@7
Adding NOP phi() at start of print_ln::@2
Adding NOP phi() at start of test_bytes
Adding NOP phi() at start of test_bytes::@3
Adding NOP phi() at start of assert_byte::@8
Adding NOP phi() at start of assert_byte::@9
Adding NOP phi() at start of assert_byte::@7
Adding NOP phi() at start of print_cls
Adding NOP phi() at start of print_cls::@1
Adding NOP phi() at start of memset
Adding NOP phi() at start of memset::@2
Adding NOP phi() at start of memset::@1
CALL GRAPH
Calls in [] to main:4 
Calls in [main] to print_cls:8 test_bytes:10 test_sbytes:12 
Calls in [test_sbytes] to assert_sbyte:16 assert_sbyte:18 assert_sbyte:20 assert_sbyte:22 assert_sbyte:24 
Calls in [assert_sbyte] to print_str:31 print_str:33 print_str:36 print_ln:39 print_str:44 
Calls in [test_bytes] to assert_byte:66 assert_byte:69 assert_byte:72 
Calls in [assert_byte] to print_str:79 print_str:81 print_str:84 print_ln:87 print_str:92 
Calls in [print_cls] to memset:95 

Created 15 initial phi equivalence classes
Coalesced [29] print_str::str#13 ← print_str::str#5
Not coalescing [30] print_char_cursor#86 ← print_line_cursor#1
Coalesced [32] print_char_cursor#89 ← print_char_cursor#2
Coalesced (already) [35] print_char_cursor#88 ← print_char_cursor#2
Coalesced [38] print_line_cursor#70 ← print_line_cursor#1
Coalesced (already) [43] print_char_cursor#87 ← print_char_cursor#2
Coalesced [47] print_str::str#14 ← print_str::str#11
Coalesced (already) [48] print_char_cursor#90 ← print_char_cursor#80
Coalesced [55] print_str::str#15 ← print_str::str#0
Coalesced [56] print_char_cursor#91 ← print_char_cursor#1
Coalesced [58] print_line_cursor#71 ← print_line_cursor#47
Coalesced (already) [64] print_line_cursor#72 ← print_line_cursor#1
Not coalescing [67] print_char_cursor#92 ← print_line_cursor#1
Coalesced [68] print_line_cursor#73 ← print_line_cursor#1
Not coalescing [70] print_char_cursor#93 ← print_line_cursor#1
Coalesced (already) [71] print_line_cursor#74 ← print_line_cursor#1
Coalesced [77] print_str::str#12 ← print_str::str#1
Coalesced [78] print_char_cursor#82 ← print_char_cursor#70
Coalesced (already) [80] print_char_cursor#85 ← print_char_cursor#2
Coalesced (already) [83] print_char_cursor#84 ← print_char_cursor#2
Coalesced (already) [86] print_line_cursor#69 ← print_line_cursor#50
Coalesced (already) [91] print_char_cursor#83 ← print_char_cursor#2
Coalesced [106] memset::dst#3 ← memset::dst#1
Coalesced down to 10 phi equivalence classes
Culled Empty Block (label) @12
Culled Empty Block (label) @35
Culled Empty Block (label) @41
Culled Empty Block (label) main::@3
Culled Empty Block (label) test_sbytes::@5
Culled Empty Block (label) assert_sbyte::@8
Culled Empty Block (label) assert_sbyte::@9
Culled Empty Block (label) assert_sbyte::@7
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) print_ln::@3
Culled Empty Block (label) test_bytes::@3
Culled Empty Block (label) assert_byte::@8
Culled Empty Block (label) assert_byte::@9
Culled Empty Block (label) assert_byte::@7
Culled Empty Block (label) print_cls::@1
Culled Empty Block (label) memset::@2
Culled Empty Block (label) memset::@1
Culled Empty Block (label) memset::@6
Renumbering block @40 to @1
Renumbering block memset::@4 to memset::@1
Renumbering block assert_byte::@5 to assert_byte::@4
Renumbering block assert_byte::@6 to assert_byte::@5
Renumbering block assert_sbyte::@5 to assert_sbyte::@4
Renumbering block assert_sbyte::@6 to assert_sbyte::@5
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of test_sbytes
Adding NOP phi() at start of test_sbytes::@1
Adding NOP phi() at start of test_sbytes::@2
Adding NOP phi() at start of test_sbytes::@3
Adding NOP phi() at start of test_sbytes::@4
Adding NOP phi() at start of assert_sbyte::@4
Adding NOP phi() at start of assert_sbyte::@3
Adding NOP phi() at start of assert_sbyte::@2
Adding NOP phi() at start of test_bytes
Adding NOP phi() at start of assert_byte::@4
Adding NOP phi() at start of assert_byte::@3
Adding NOP phi() at start of assert_byte::@2
Adding NOP phi() at start of print_cls
Adding NOP phi() at start of memset

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi()
  to:@1
@1: scope:[]  from @begin
  [1] phi()
  [2] call main 
  to:@end
@end: scope:[]  from @1
  [3] phi()
main: scope:[main]  from @1
  [4] phi()
  [5] call print_cls 
  to:main::@1
main::@1: scope:[main]  from main
  [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0
  [7] call test_bytes 
  to:main::@2
main::@2: scope:[main]  from main::@1
  [8] phi()
  [9] call test_sbytes 
  to:main::@return
main::@return: scope:[main]  from main::@2
  [10] return 
  to:@return
test_sbytes: scope:[test_sbytes]  from main::@2
  [11] phi()
  [12] call assert_sbyte 
  to:test_sbytes::@1
test_sbytes::@1: scope:[test_sbytes]  from test_sbytes
  [13] phi()
  [14] call assert_sbyte 
  to:test_sbytes::@2
test_sbytes::@2: scope:[test_sbytes]  from test_sbytes::@1
  [15] phi()
  [16] call assert_sbyte 
  to:test_sbytes::@3
test_sbytes::@3: scope:[test_sbytes]  from test_sbytes::@2
  [17] phi()
  [18] call assert_sbyte 
  to:test_sbytes::@4
test_sbytes::@4: scope:[test_sbytes]  from test_sbytes::@3
  [19] phi()
  [20] call assert_sbyte 
  to:test_sbytes::@return
test_sbytes::@return: scope:[test_sbytes]  from test_sbytes::@4
  [21] return 
  to:@return
assert_sbyte: scope:[assert_sbyte]  from test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4
  [22] (signed byte) assert_sbyte::c#5 ← phi( test_sbytes/(signed byte) 0 test_sbytes::@1/(signed byte) 2 test_sbytes::@2/(signed byte) -2 test_sbytes::@3/(signed byte) 2 test_sbytes::@4/(signed byte) 2 )
  [22] (signed byte) assert_sbyte::b#5 ← phi( test_sbytes/(const signed byte) test_sbytes::bb#0 test_sbytes::@1/(const signed byte) test_sbytes::bc#0 test_sbytes::@2/(const signed byte) test_sbytes::bd#0 test_sbytes::@3/(const signed byte) test_sbytes::be#0 test_sbytes::@4/(const signed byte) test_sbytes::bf#0 )
  [22] (byte*) assert_sbyte::msg#5 ← phi( test_sbytes/(const string) msg test_sbytes::@1/(const string) msg1 test_sbytes::@2/(const string) test_sbytes::msg2 test_sbytes::@3/(const string) test_sbytes::msg3 test_sbytes::@4/(const string) test_sbytes::msg4 )
  [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5
  [24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1
  [25] call print_str 
  to:assert_sbyte::@4
assert_sbyte::@4: scope:[assert_sbyte]  from assert_sbyte
  [26] phi()
  [27] call print_str 
  to:assert_sbyte::@5
assert_sbyte::@5: scope:[assert_sbyte]  from assert_sbyte::@4
  [28] if((signed byte) assert_sbyte::b#5!=(signed byte) assert_sbyte::c#5) goto assert_sbyte::@1
  to:assert_sbyte::@3
assert_sbyte::@3: scope:[assert_sbyte]  from assert_sbyte::@5
  [29] phi()
  [30] call print_str 
  to:assert_sbyte::@2
assert_sbyte::@2: scope:[assert_sbyte]  from assert_sbyte::@1 assert_sbyte::@3
  [31] phi()
  [32] call print_ln 
  to:assert_sbyte::@return
assert_sbyte::@return: scope:[assert_sbyte]  from assert_sbyte::@2
  [33] return 
  to:@return
assert_sbyte::@1: scope:[assert_sbyte]  from assert_sbyte::@5
  [34] *((const byte*) BGCOL#0) ← (const byte) RED#0
  [35] call print_str 
  to:assert_sbyte::@2
print_str: scope:[print_str]  from assert_byte assert_byte::@1 assert_byte::@3 assert_byte::@4 assert_sbyte assert_sbyte::@1 assert_sbyte::@3 assert_sbyte::@4
  [36] (byte*) print_char_cursor#80 ← phi( assert_byte/(byte*) print_char_cursor#70 assert_byte::@1/(byte*) print_char_cursor#2 assert_byte::@3/(byte*) print_char_cursor#2 assert_byte::@4/(byte*) print_char_cursor#2 assert_sbyte/(byte*~) print_char_cursor#86 assert_sbyte::@1/(byte*) print_char_cursor#2 assert_sbyte::@3/(byte*) print_char_cursor#2 assert_sbyte::@4/(byte*) print_char_cursor#2 )
  [36] (byte*) print_str::str#11 ← phi( assert_byte/(byte*) print_str::str#1 assert_byte::@1/(const string) str1 assert_byte::@3/(const string) str2 assert_byte::@4/(const string) str assert_sbyte/(byte*) print_str::str#5 assert_sbyte::@1/(const string) str1 assert_sbyte::@3/(const string) str2 assert_sbyte::@4/(const string) str )
  to:print_str::@1
print_str::@1: scope:[print_str]  from print_str print_str::@2
  [37] (byte*) print_char_cursor#2 ← phi( print_str/(byte*) print_char_cursor#80 print_str::@2/(byte*) print_char_cursor#1 )
  [37] (byte*) print_str::str#10 ← phi( print_str/(byte*) print_str::str#11 print_str::@2/(byte*) print_str::str#0 )
  [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2
  to:print_str::@return
print_str::@return: scope:[print_str]  from print_str::@1
  [39] return 
  to:@return
print_str::@2: scope:[print_str]  from print_str::@1
  [40] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10)
  [41] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2
  [42] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#10
  to:print_str::@1
print_ln: scope:[print_ln]  from assert_byte::@2 assert_sbyte::@2
  [43] (byte*) print_line_cursor#47 ← phi( assert_byte::@2/(byte*) print_line_cursor#50 assert_sbyte::@2/(byte*) print_line_cursor#1 )
  to:print_ln::@1
print_ln::@1: scope:[print_ln]  from print_ln print_ln::@1
  [44] (byte*) print_line_cursor#24 ← phi( print_ln/(byte*) print_line_cursor#47 print_ln::@1/(byte*) print_line_cursor#1 )
  [45] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#24 + (byte) $28
  [46] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1
  to:print_ln::@return
print_ln::@return: scope:[print_ln]  from print_ln::@1
  [47] return 
  to:@return
test_bytes: scope:[test_bytes]  from main::@1
  [48] phi()
  [49] call assert_byte 
  to:test_bytes::@1
test_bytes::@1: scope:[test_bytes]  from test_bytes
  [50] (byte*~) print_char_cursor#92 ← (byte*) print_line_cursor#1
  [51] call assert_byte 
  to:test_bytes::@2
test_bytes::@2: scope:[test_bytes]  from test_bytes::@1
  [52] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1
  [53] call assert_byte 
  to:test_bytes::@return
test_bytes::@return: scope:[test_bytes]  from test_bytes::@2
  [54] return 
  to:@return
assert_byte: scope:[assert_byte]  from test_bytes test_bytes::@1 test_bytes::@2
  [55] (byte*) print_line_cursor#50 ← phi( test_bytes/(byte*) 1024 test_bytes::@1/(byte*) print_line_cursor#1 test_bytes::@2/(byte*) print_line_cursor#1 )
  [55] (byte) assert_byte::c#3 ← phi( test_bytes/(byte) 0 test_bytes::@1/(byte) 2 test_bytes::@2/(byte) $fe )
  [55] (byte) assert_byte::b#3 ← phi( test_bytes/(const byte) test_bytes::bb#0 test_bytes::@1/(const byte) test_bytes::bc#0 test_bytes::@2/(const byte) test_bytes::bd#0 )
  [55] (byte*) print_char_cursor#70 ← phi( test_bytes/(byte*) 1024 test_bytes::@1/(byte*~) print_char_cursor#92 test_bytes::@2/(byte*~) print_char_cursor#93 )
  [55] (byte*) assert_byte::msg#3 ← phi( test_bytes/(const string) msg test_bytes::@1/(const string) msg1 test_bytes::@2/(const string) test_bytes::msg2 )
  [56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3
  [57] call print_str 
  to:assert_byte::@4
assert_byte::@4: scope:[assert_byte]  from assert_byte
  [58] phi()
  [59] call print_str 
  to:assert_byte::@5
assert_byte::@5: scope:[assert_byte]  from assert_byte::@4
  [60] if((byte) assert_byte::b#3!=(byte) assert_byte::c#3) goto assert_byte::@1
  to:assert_byte::@3
assert_byte::@3: scope:[assert_byte]  from assert_byte::@5
  [61] phi()
  [62] call print_str 
  to:assert_byte::@2
assert_byte::@2: scope:[assert_byte]  from assert_byte::@1 assert_byte::@3
  [63] phi()
  [64] call print_ln 
  to:assert_byte::@return
assert_byte::@return: scope:[assert_byte]  from assert_byte::@2
  [65] return 
  to:@return
assert_byte::@1: scope:[assert_byte]  from assert_byte::@5
  [66] *((const byte*) BGCOL#0) ← (const byte) RED#0
  [67] call print_str 
  to:assert_byte::@2
print_cls: scope:[print_cls]  from main
  [68] phi()
  [69] call memset 
  to:print_cls::@return
print_cls::@return: scope:[print_cls]  from print_cls
  [70] return 
  to:@return
memset: scope:[memset]  from print_cls
  [71] phi()
  to:memset::@1
memset::@1: scope:[memset]  from memset memset::@1
  [72] (byte*) memset::dst#2 ← phi( memset/(byte*)(const void*) memset::str#0 memset::@1/(byte*) memset::dst#1 )
  [73] *((byte*) memset::dst#2) ← (const byte) memset::c#0
  [74] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2
  [75] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1
  to:memset::@return
memset::@return: scope:[memset]  from memset::@1
  [76] return 
  to:@return


VARIABLE REGISTER WEIGHTS
(byte*) BGCOL
(byte) GREEN
(byte) RED
(void()) assert_byte((byte*) assert_byte::msg , (byte) assert_byte::b , (byte) assert_byte::c)
(byte) assert_byte::b
(byte) assert_byte::b#3 0.4
(byte) assert_byte::c
(byte) assert_byte::c#3 0.4
(byte*) assert_byte::msg
(byte*) assert_byte::msg#3 2.0
(void()) assert_sbyte((byte*) assert_sbyte::msg , (signed byte) assert_sbyte::b , (signed byte) assert_sbyte::c)
(signed byte) assert_sbyte::b
(signed byte) assert_sbyte::b#5 0.3333333333333333
(signed byte) assert_sbyte::c
(signed byte) assert_sbyte::c#5 0.3333333333333333
(byte*) assert_sbyte::msg
(byte*) assert_sbyte::msg#5 2.0
(void()) main()
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(byte) memset::c
(byte*) memset::dst
(byte*) memset::dst#1 16.5
(byte*) memset::dst#2 16.5
(byte*) memset::end
(word) memset::num
(void*) memset::return
(void*) memset::str
(byte*) print_char_cursor
(byte*) print_char_cursor#1 11.0
(byte*) print_char_cursor#2 2.230769230769231
(byte*) print_char_cursor#70 3.0
(byte*) print_char_cursor#80 18.0
(byte*~) print_char_cursor#86 4.0
(byte*~) print_char_cursor#92 4.0
(byte*~) print_char_cursor#93 4.0
(void()) print_cls()
(byte*) print_line_cursor
(byte*) print_line_cursor#1 1.2500000000000002
(byte*) print_line_cursor#24 24.0
(byte*) print_line_cursor#47 6.0
(byte*) print_line_cursor#50 0.5454545454545454
(void()) print_ln()
(byte*) print_screen
(void()) print_str((byte*) print_str::str)
(byte*) print_str::str
(byte*) print_str::str#0 22.0
(byte*) print_str::str#1 4.0
(byte*) print_str::str#10 11.5
(byte*) print_str::str#11 6.0
(byte*) print_str::str#5 2.0
(void()) test_bytes()
(byte) test_bytes::bb
(byte) test_bytes::bc
(byte) test_bytes::bd
(void()) test_sbytes()
(signed byte) test_sbytes::bb
(signed byte) test_sbytes::bc
(signed byte) test_sbytes::bd
(signed byte) test_sbytes::be
(signed byte) test_sbytes::bf

Initial phi equivalence classes
[ assert_sbyte::msg#5 ]
[ assert_sbyte::b#5 ]
[ assert_sbyte::c#5 ]
[ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ]
[ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ]
[ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
[ assert_byte::msg#3 ]
[ assert_byte::b#3 ]
[ assert_byte::c#3 ]
[ memset::dst#2 memset::dst#1 ]
Complete equivalence classes
[ assert_sbyte::msg#5 ]
[ assert_sbyte::b#5 ]
[ assert_sbyte::c#5 ]
[ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ]
[ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ]
[ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
[ assert_byte::msg#3 ]
[ assert_byte::b#3 ]
[ assert_byte::c#3 ]
[ memset::dst#2 memset::dst#1 ]
Allocated zp ZP_WORD:2 [ assert_sbyte::msg#5 ]
Allocated zp ZP_BYTE:4 [ assert_sbyte::b#5 ]
Allocated zp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Allocated zp ZP_WORD:6 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ]
Allocated zp ZP_WORD:8 [ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ]
Allocated zp ZP_WORD:10 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
Allocated zp ZP_WORD:12 [ assert_byte::msg#3 ]
Allocated zp ZP_BYTE:14 [ assert_byte::b#3 ]
Allocated zp ZP_BYTE:15 [ assert_byte::c#3 ]
Allocated zp ZP_WORD:16 [ memset::dst#2 memset::dst#1 ]

INITIAL ASM
  // File Comments
  // Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .label BGCOL = $d021
  .const GREEN = 5
  .const RED = 2
  .label print_char_cursor = 6
  .label print_line_cursor = $a
  // @begin
bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
  jmp b1
  // @1
b1:
  // [2] call main 
  // [4] phi from @1 to main [phi:@1->main]
main_from_b1:
  jsr main
  // [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
  jmp bend
  // @end
bend:
  // main
main: {
    // [5] call print_cls 
    // [68] phi from main to print_cls [phi:main->print_cls]
  print_cls_from_main:
    jsr print_cls
    jmp b1
    // main::@1
  b1:
    // [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0 -- _deref_pbuc1=vbuc2 
    lda #GREEN
    sta BGCOL
    // [7] call test_bytes 
    // [48] phi from main::@1 to test_bytes [phi:main::@1->test_bytes]
  test_bytes_from_b1:
    jsr test_bytes
    // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  b2_from_b1:
    jmp b2
    // main::@2
  b2:
    // [9] call test_sbytes 
    // [11] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes]
  test_sbytes_from_b2:
    jsr test_sbytes
    jmp breturn
    // main::@return
  breturn:
    // [10] return 
    rts
}
  // test_sbytes
// Test different signed byte constants
test_sbytes: {
    .const bb = 0
    .const bf = $ff&-$7f-$7f
    .const bc = 2
    .const bd = bc-4
    .const be = -bd
    // [12] call assert_sbyte 
    // [22] phi from test_sbytes to assert_sbyte [phi:test_sbytes->assert_sbyte]
  assert_sbyte_from_test_sbytes:
    // [22] phi (signed byte) assert_sbyte::c#5 = (signed byte) 0 [phi:test_sbytes->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #0
    sta assert_sbyte.c
    // [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bb#0 [phi:test_sbytes->assert_sbyte#1] -- vbsz1=vbsc1 
    lda #bb
    sta assert_sbyte.b
    // [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg
    sta assert_sbyte.msg
    lda #>msg
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    // [13] phi from test_sbytes to test_sbytes::@1 [phi:test_sbytes->test_sbytes::@1]
  b1_from_test_sbytes:
    jmp b1
    // test_sbytes::@1
  b1:
    // [14] call assert_sbyte 
    // [22] phi from test_sbytes::@1 to assert_sbyte [phi:test_sbytes::@1->assert_sbyte]
  assert_sbyte_from_b1:
    // [22] phi (signed byte) assert_sbyte::c#5 = (signed byte) 2 [phi:test_sbytes::@1->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #2
    sta assert_sbyte.c
    // [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsz1=vbsc1 
    lda #bc
    sta assert_sbyte.b
    // [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg1
    sta assert_sbyte.msg
    lda #>msg1
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    // [15] phi from test_sbytes::@1 to test_sbytes::@2 [phi:test_sbytes::@1->test_sbytes::@2]
  b2_from_b1:
    jmp b2
    // test_sbytes::@2
  b2:
    // [16] call assert_sbyte 
    // [22] phi from test_sbytes::@2 to assert_sbyte [phi:test_sbytes::@2->assert_sbyte]
  assert_sbyte_from_b2:
    // [22] phi (signed byte) assert_sbyte::c#5 = (signed byte) -2 [phi:test_sbytes::@2->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #-2
    sta assert_sbyte.c
    // [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bd#0 [phi:test_sbytes::@2->assert_sbyte#1] -- vbsz1=vbsc1 
    lda #bd
    sta assert_sbyte.b
    // [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg2
    sta assert_sbyte.msg
    lda #>msg2
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    // [17] phi from test_sbytes::@2 to test_sbytes::@3 [phi:test_sbytes::@2->test_sbytes::@3]
  b3_from_b2:
    jmp b3
    // test_sbytes::@3
  b3:
    // [18] call assert_sbyte 
    // [22] phi from test_sbytes::@3 to assert_sbyte [phi:test_sbytes::@3->assert_sbyte]
  assert_sbyte_from_b3:
    // [22] phi (signed byte) assert_sbyte::c#5 = (signed byte) 2 [phi:test_sbytes::@3->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #2
    sta assert_sbyte.c
    // [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::be#0 [phi:test_sbytes::@3->assert_sbyte#1] -- vbsz1=vbsc1 
    lda #be
    sta assert_sbyte.b
    // [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg3
    sta assert_sbyte.msg
    lda #>msg3
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    // [19] phi from test_sbytes::@3 to test_sbytes::@4 [phi:test_sbytes::@3->test_sbytes::@4]
  b4_from_b3:
    jmp b4
    // test_sbytes::@4
  b4:
    // [20] call assert_sbyte 
    // [22] phi from test_sbytes::@4 to assert_sbyte [phi:test_sbytes::@4->assert_sbyte]
  assert_sbyte_from_b4:
    // [22] phi (signed byte) assert_sbyte::c#5 = (signed byte) 2 [phi:test_sbytes::@4->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #2
    sta assert_sbyte.c
    // [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bf#0 [phi:test_sbytes::@4->assert_sbyte#1] -- vbsz1=vbsc1 
    lda #bf
    sta assert_sbyte.b
    // [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg4
    sta assert_sbyte.msg
    lda #>msg4
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    jmp breturn
    // test_sbytes::@return
  breturn:
    // [21] return 
    rts
    msg2: .text "0+2-4=-2@"
    msg3: .text "-(0+2-4)=2@"
    msg4: .text "-127-127=2@"
}
  // assert_sbyte
// assert_sbyte(byte* zeropage(2) msg, signed byte zeropage(4) b, signed byte zeropage(5) c)
assert_sbyte: {
    .label msg = 2
    .label b = 4
    .label c = 5
    // [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5 -- pbuz1=pbuz2 
    lda msg
    sta print_str.str
    lda msg+1
    sta print_str.str+1
    // [24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
    // [25] call print_str 
    // [36] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str]
  print_str_from_assert_sbyte:
    // [36] phi (byte*) print_char_cursor#80 = (byte*~) print_char_cursor#86 [phi:assert_sbyte->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (byte*) print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy 
    jsr print_str
    // [26] phi from assert_sbyte to assert_sbyte::@4 [phi:assert_sbyte->assert_sbyte::@4]
  b4_from_assert_sbyte:
    jmp b4
    // assert_sbyte::@4
  b4:
    // [27] call print_str 
    // [36] phi from assert_sbyte::@4 to print_str [phi:assert_sbyte::@4->print_str]
  print_str_from_b4:
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@4->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_sbyte::@4->print_str#1] -- pbuz1=pbuc1 
    lda #<str
    sta print_str.str
    lda #>str
    sta print_str.str+1
    jsr print_str
    jmp b5
    // assert_sbyte::@5
  b5:
    // [28] if((signed byte) assert_sbyte::b#5!=(signed byte) assert_sbyte::c#5) goto assert_sbyte::@1 -- vbsz1_neq_vbsz2_then_la1 
    lda b
    cmp c
    bne b1
    // [29] phi from assert_sbyte::@5 to assert_sbyte::@3 [phi:assert_sbyte::@5->assert_sbyte::@3]
  b3_from_b5:
    jmp b3
    // assert_sbyte::@3
  b3:
    // [30] call print_str 
    // [36] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str]
  print_str_from_b3:
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@3->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1 
    lda #<str2
    sta print_str.str
    lda #>str2
    sta print_str.str+1
    jsr print_str
    // [31] phi from assert_sbyte::@1 assert_sbyte::@3 to assert_sbyte::@2 [phi:assert_sbyte::@1/assert_sbyte::@3->assert_sbyte::@2]
  b2_from_b1:
  b2_from_b3:
    jmp b2
    // assert_sbyte::@2
  b2:
    // [32] call print_ln 
    // [43] phi from assert_sbyte::@2 to print_ln [phi:assert_sbyte::@2->print_ln]
  print_ln_from_b2:
    // [43] phi (byte*) print_line_cursor#47 = (byte*) print_line_cursor#1 [phi:assert_sbyte::@2->print_ln#0] -- register_copy 
    jsr print_ln
    jmp breturn
    // assert_sbyte::@return
  breturn:
    // [33] return 
    rts
    // assert_sbyte::@1
  b1:
    // [34] *((const byte*) BGCOL#0) ← (const byte) RED#0 -- _deref_pbuc1=vbuc2 
    lda #RED
    sta BGCOL
    // [35] call print_str 
    // [36] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str]
  print_str_from_b1:
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@1->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1 
    lda #<str1
    sta print_str.str
    lda #>str1
    sta print_str.str+1
    jsr print_str
    jmp b2_from_b1
}
  // print_str
// Print a zero-terminated string
// print_str(byte* zeropage(8) str)
print_str: {
    .label str = 8
    // [37] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1]
  b1_from_print_str:
  b1_from_b2:
    // [37] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#80 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy 
    // [37] phi (byte*) print_str::str#10 = (byte*) print_str::str#11 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy 
    jmp b1
    // print_str::@1
  b1:
    // [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 
    ldy #0
    lda (str),y
    cmp #'@'
    bne b2
    jmp breturn
    // print_str::@return
  breturn:
    // [39] return 
    rts
    // print_str::@2
  b2:
    // [40] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (str),y
    ldy #0
    sta (print_char_cursor),y
    // [41] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 
    inc print_char_cursor
    bne !+
    inc print_char_cursor+1
  !:
    // [42] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#10 -- pbuz1=_inc_pbuz1 
    inc str
    bne !+
    inc str+1
  !:
    jmp b1_from_b2
}
  // print_ln
// Print a newline
print_ln: {
    // [44] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1]
  b1_from_print_ln:
  b1_from_b1:
    // [44] phi (byte*) print_line_cursor#24 = (byte*) print_line_cursor#47 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy 
    jmp b1
    // print_ln::@1
  b1:
    // [45] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#24 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc print_line_cursor
    sta print_line_cursor
    bcc !+
    inc print_line_cursor+1
  !:
    // [46] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 
    lda print_line_cursor+1
    cmp print_char_cursor+1
    bcc b1_from_b1
    bne !+
    lda print_line_cursor
    cmp print_char_cursor
    bcc b1_from_b1
  !:
    jmp breturn
    // print_ln::@return
  breturn:
    // [47] return 
    rts
}
  // test_bytes
// Test different byte constants
test_bytes: {
    .const bb = 0
    .const bc = 2
    .const bd = bc-4
    // [49] call assert_byte 
    // [55] phi from test_bytes to assert_byte [phi:test_bytes->assert_byte]
  assert_byte_from_test_bytes:
    // [55] phi (byte*) print_line_cursor#50 = (byte*) 1024 [phi:test_bytes->assert_byte#0] -- pbuz1=pbuc1 
    lda #<$400
    sta print_line_cursor
    lda #>$400
    sta print_line_cursor+1
    // [55] phi (byte) assert_byte::c#3 = (byte) 0 [phi:test_bytes->assert_byte#1] -- vbuz1=vbuc1 
    lda #0
    sta assert_byte.c
    // [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bb#0 [phi:test_bytes->assert_byte#2] -- vbuz1=vbuc1 
    lda #bb
    sta assert_byte.b
    // [55] phi (byte*) print_char_cursor#70 = (byte*) 1024 [phi:test_bytes->assert_byte#3] -- pbuz1=pbuc1 
    lda #<$400
    sta print_char_cursor
    lda #>$400
    sta print_char_cursor+1
    // [55] phi (byte*) assert_byte::msg#3 = (const string) msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg
    sta assert_byte.msg
    lda #>msg
    sta assert_byte.msg+1
    jsr assert_byte
    jmp b1
    // test_bytes::@1
  b1:
    // [50] (byte*~) print_char_cursor#92 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
    // [51] call assert_byte 
    // [55] phi from test_bytes::@1 to assert_byte [phi:test_bytes::@1->assert_byte]
  assert_byte_from_b1:
    // [55] phi (byte*) print_line_cursor#50 = (byte*) print_line_cursor#1 [phi:test_bytes::@1->assert_byte#0] -- register_copy 
    // [55] phi (byte) assert_byte::c#3 = (byte) 2 [phi:test_bytes::@1->assert_byte#1] -- vbuz1=vbuc1 
    lda #2
    sta assert_byte.c
    // [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuz1=vbuc1 
    lda #bc
    sta assert_byte.b
    // [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#92 [phi:test_bytes::@1->assert_byte#3] -- register_copy 
    // [55] phi (byte*) assert_byte::msg#3 = (const string) msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg1
    sta assert_byte.msg
    lda #>msg1
    sta assert_byte.msg+1
    jsr assert_byte
    jmp b2
    // test_bytes::@2
  b2:
    // [52] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
    // [53] call assert_byte 
    // [55] phi from test_bytes::@2 to assert_byte [phi:test_bytes::@2->assert_byte]
  assert_byte_from_b2:
    // [55] phi (byte*) print_line_cursor#50 = (byte*) print_line_cursor#1 [phi:test_bytes::@2->assert_byte#0] -- register_copy 
    // [55] phi (byte) assert_byte::c#3 = (byte) $fe [phi:test_bytes::@2->assert_byte#1] -- vbuz1=vbuc1 
    lda #$fe
    sta assert_byte.c
    // [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuz1=vbuc1 
    lda #bd
    sta assert_byte.b
    // [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#93 [phi:test_bytes::@2->assert_byte#3] -- register_copy 
    // [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg2
    sta assert_byte.msg
    lda #>msg2
    sta assert_byte.msg+1
    jsr assert_byte
    jmp breturn
    // test_bytes::@return
  breturn:
    // [54] return 
    rts
    msg2: .text "0+2-4=254@"
}
  // assert_byte
// assert_byte(byte* zeropage($c) msg, byte zeropage($e) b, byte zeropage($f) c)
assert_byte: {
    .label msg = $c
    .label b = $e
    .label c = $f
    // [56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3 -- pbuz1=pbuz2 
    lda msg
    sta print_str.str
    lda msg+1
    sta print_str.str+1
    // [57] call print_str 
    // [36] phi from assert_byte to print_str [phi:assert_byte->print_str]
  print_str_from_assert_byte:
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#70 [phi:assert_byte->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (byte*) print_str::str#1 [phi:assert_byte->print_str#1] -- register_copy 
    jsr print_str
    // [58] phi from assert_byte to assert_byte::@4 [phi:assert_byte->assert_byte::@4]
  b4_from_assert_byte:
    jmp b4
    // assert_byte::@4
  b4:
    // [59] call print_str 
    // [36] phi from assert_byte::@4 to print_str [phi:assert_byte::@4->print_str]
  print_str_from_b4:
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@4->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_byte::@4->print_str#1] -- pbuz1=pbuc1 
    lda #<str
    sta print_str.str
    lda #>str
    sta print_str.str+1
    jsr print_str
    jmp b5
    // assert_byte::@5
  b5:
    // [60] if((byte) assert_byte::b#3!=(byte) assert_byte::c#3) goto assert_byte::@1 -- vbuz1_neq_vbuz2_then_la1 
    lda b
    cmp c
    bne b1
    // [61] phi from assert_byte::@5 to assert_byte::@3 [phi:assert_byte::@5->assert_byte::@3]
  b3_from_b5:
    jmp b3
    // assert_byte::@3
  b3:
    // [62] call print_str 
    // [36] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str]
  print_str_from_b3:
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@3->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1 
    lda #<str2
    sta print_str.str
    lda #>str2
    sta print_str.str+1
    jsr print_str
    // [63] phi from assert_byte::@1 assert_byte::@3 to assert_byte::@2 [phi:assert_byte::@1/assert_byte::@3->assert_byte::@2]
  b2_from_b1:
  b2_from_b3:
    jmp b2
    // assert_byte::@2
  b2:
    // [64] call print_ln 
    // [43] phi from assert_byte::@2 to print_ln [phi:assert_byte::@2->print_ln]
  print_ln_from_b2:
    // [43] phi (byte*) print_line_cursor#47 = (byte*) print_line_cursor#50 [phi:assert_byte::@2->print_ln#0] -- register_copy 
    jsr print_ln
    jmp breturn
    // assert_byte::@return
  breturn:
    // [65] return 
    rts
    // assert_byte::@1
  b1:
    // [66] *((const byte*) BGCOL#0) ← (const byte) RED#0 -- _deref_pbuc1=vbuc2 
    lda #RED
    sta BGCOL
    // [67] call print_str 
    // [36] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str]
  print_str_from_b1:
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@1->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1 
    lda #<str1
    sta print_str.str
    lda #>str1
    sta print_str.str+1
    jsr print_str
    jmp b2_from_b1
}
  // print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    // [69] call memset 
    // [71] phi from print_cls to memset [phi:print_cls->memset]
  memset_from_print_cls:
    jsr memset
    jmp breturn
    // print_cls::@return
  breturn:
    // [70] return 
    rts
}
  // memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
memset: {
    .const c = ' '
    .const num = $3e8
    .label str = $400
    .label end = str+num
    .label dst = $10
    // [72] phi from memset to memset::@1 [phi:memset->memset::@1]
  b1_from_memset:
    // [72] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 
    lda #<str
    sta dst
    lda #>str
    sta dst+1
    jmp b1
    // [72] phi from memset::@1 to memset::@1 [phi:memset::@1->memset::@1]
  b1_from_b1:
    // [72] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@1->memset::@1#0] -- register_copy 
    jmp b1
    // memset::@1
  b1:
    // [73] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 
    lda #c
    ldy #0
    sta (dst),y
    // [74] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
    inc dst
    bne !+
    inc dst+1
  !:
    // [75] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda dst+1
    cmp #>end
    bne b1_from_b1
    lda dst
    cmp #<end
    bne b1_from_b1
    jmp breturn
    // memset::@return
  breturn:
    // [76] return 
    rts
}
  // File Data
  msg: .text "0=0@"
  msg1: .text "0+2=2@"
  str: .text " @"
  str1: .text "fail!@"
  str2: .text "ok@"

REGISTER UPLIFT POTENTIAL REGISTERS
Statement [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:4 [ assert_sbyte::b#5 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Statement [24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] ) always clobbers reg byte a 
Statement [34] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a 
Statement [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y 
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:4 [ assert_sbyte::b#5 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:14 [ assert_byte::b#3 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:14 [ assert_byte::b#3 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:15 [ assert_byte::c#3 ]
Removing always clobbered register reg byte y as potential for zp ZP_BYTE:15 [ assert_byte::c#3 ]
Statement [40] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y 
Statement [45] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#24 + (byte) $28 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a 
Statement [46] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a 
Statement [50] (byte*~) print_char_cursor#92 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#92 ] ( main:2::test_bytes:7 [ print_line_cursor#1 print_char_cursor#92 ] ) always clobbers reg byte a 
Statement [52] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#93 ] ( main:2::test_bytes:7 [ print_line_cursor#1 print_char_cursor#93 ] ) always clobbers reg byte a 
Statement [56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] ( main:2::test_bytes:7::assert_byte:49 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:51 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:53 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] ) always clobbers reg byte a 
Statement [66] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ print_char_cursor#2 print_line_cursor#50 ] ( main:2::test_bytes:7::assert_byte:49 [ print_char_cursor#2 print_line_cursor#50 ] main:2::test_bytes:7::assert_byte:51 [ print_char_cursor#2 print_line_cursor#50 ] main:2::test_bytes:7::assert_byte:53 [ print_char_cursor#2 print_line_cursor#50 ] ) always clobbers reg byte a 
Statement [73] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:69 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y 
Statement [75] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 [ memset::dst#1 ] ( main:2::print_cls:5::memset:69 [ memset::dst#1 ] ) always clobbers reg byte a 
Statement [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0 [ ] ( main:2 [ ] ) always clobbers reg byte a 
Statement [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_line_cursor#1 ] ) always clobbers reg byte a 
Statement [24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:14 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:16 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:18 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] main:2::test_sbytes:9::assert_sbyte:20 [ assert_sbyte::b#5 assert_sbyte::c#5 print_str::str#5 print_char_cursor#86 print_line_cursor#1 ] ) always clobbers reg byte a 
Statement [34] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a 
Statement [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y 
Statement [40] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) [ print_char_cursor#2 print_str::str#10 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:25 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:27 [ assert_sbyte::b#5 assert_sbyte::c#5 print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:30 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:12::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:14::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:16::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:18::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_sbytes:9::assert_sbyte:20::print_str:35 [ print_line_cursor#1 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:57 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:59 [ print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:62 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:49::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:51::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] main:2::test_bytes:7::assert_byte:53::print_str:67 [ print_line_cursor#50 print_char_cursor#2 print_str::str#10 ] ) always clobbers reg byte a reg byte y 
Statement [45] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#24 + (byte) $28 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a 
Statement [46] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 [ print_line_cursor#1 print_char_cursor#2 ] ( main:2::test_sbytes:9::assert_sbyte:12::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:14::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:16::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:18::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_sbytes:9::assert_sbyte:20::print_ln:32 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:49::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:51::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] main:2::test_bytes:7::assert_byte:53::print_ln:64 [ print_line_cursor#1 print_char_cursor#2 ] ) always clobbers reg byte a 
Statement [50] (byte*~) print_char_cursor#92 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#92 ] ( main:2::test_bytes:7 [ print_line_cursor#1 print_char_cursor#92 ] ) always clobbers reg byte a 
Statement [52] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 [ print_line_cursor#1 print_char_cursor#93 ] ( main:2::test_bytes:7 [ print_line_cursor#1 print_char_cursor#93 ] ) always clobbers reg byte a 
Statement [56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] ( main:2::test_bytes:7::assert_byte:49 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:51 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] main:2::test_bytes:7::assert_byte:53 [ print_str::str#1 print_char_cursor#70 print_line_cursor#50 assert_byte::b#3 assert_byte::c#3 ] ) always clobbers reg byte a 
Statement [66] *((const byte*) BGCOL#0) ← (const byte) RED#0 [ print_char_cursor#2 print_line_cursor#50 ] ( main:2::test_bytes:7::assert_byte:49 [ print_char_cursor#2 print_line_cursor#50 ] main:2::test_bytes:7::assert_byte:51 [ print_char_cursor#2 print_line_cursor#50 ] main:2::test_bytes:7::assert_byte:53 [ print_char_cursor#2 print_line_cursor#50 ] ) always clobbers reg byte a 
Statement [73] *((byte*) memset::dst#2) ← (const byte) memset::c#0 [ memset::dst#2 ] ( main:2::print_cls:5::memset:69 [ memset::dst#2 ] ) always clobbers reg byte a reg byte y 
Statement [75] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 [ memset::dst#1 ] ( main:2::print_cls:5::memset:69 [ memset::dst#1 ] ) always clobbers reg byte a 
Potential registers zp ZP_WORD:2 [ assert_sbyte::msg#5 ] : zp ZP_WORD:2 , 
Potential registers zp ZP_BYTE:4 [ assert_sbyte::b#5 ] : zp ZP_BYTE:4 , reg byte x , 
Potential registers zp ZP_BYTE:5 [ assert_sbyte::c#5 ] : zp ZP_BYTE:5 , reg byte x , 
Potential registers zp ZP_WORD:6 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ] : zp ZP_WORD:6 , 
Potential registers zp ZP_WORD:8 [ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ] : zp ZP_WORD:8 , 
Potential registers zp ZP_WORD:10 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ] : zp ZP_WORD:10 , 
Potential registers zp ZP_WORD:12 [ assert_byte::msg#3 ] : zp ZP_WORD:12 , 
Potential registers zp ZP_BYTE:14 [ assert_byte::b#3 ] : zp ZP_BYTE:14 , reg byte x , 
Potential registers zp ZP_BYTE:15 [ assert_byte::c#3 ] : zp ZP_BYTE:15 , reg byte x , 
Potential registers zp ZP_WORD:16 [ memset::dst#2 memset::dst#1 ] : zp ZP_WORD:16 , 

REGISTER UPLIFT SCOPES
Uplift Scope [] 46.23: zp ZP_WORD:6 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ] 31.8: zp ZP_WORD:10 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ] 
Uplift Scope [print_str] 45.5: zp ZP_WORD:8 [ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ] 
Uplift Scope [memset] 33: zp ZP_WORD:16 [ memset::dst#2 memset::dst#1 ] 
Uplift Scope [assert_byte] 2: zp ZP_WORD:12 [ assert_byte::msg#3 ] 0.4: zp ZP_BYTE:14 [ assert_byte::b#3 ] 0.4: zp ZP_BYTE:15 [ assert_byte::c#3 ] 
Uplift Scope [assert_sbyte] 2: zp ZP_WORD:2 [ assert_sbyte::msg#5 ] 0.33: zp ZP_BYTE:4 [ assert_sbyte::b#5 ] 0.33: zp ZP_BYTE:5 [ assert_sbyte::c#5 ] 
Uplift Scope [RADIX] 
Uplift Scope [print_ln] 
Uplift Scope [print_cls] 
Uplift Scope [main] 
Uplift Scope [test_bytes] 
Uplift Scope [test_sbytes] 

Uplifting [] best 2214 combination zp ZP_WORD:6 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ] zp ZP_WORD:10 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ] 
Uplifting [print_str] best 2214 combination zp ZP_WORD:8 [ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ] 
Uplifting [memset] best 2214 combination zp ZP_WORD:16 [ memset::dst#2 memset::dst#1 ] 
Uplifting [assert_byte] best 2202 combination zp ZP_WORD:12 [ assert_byte::msg#3 ] reg byte x [ assert_byte::b#3 ] zp ZP_BYTE:15 [ assert_byte::c#3 ] 
Uplifting [assert_sbyte] best 2184 combination zp ZP_WORD:2 [ assert_sbyte::msg#5 ] reg byte x [ assert_sbyte::b#5 ] zp ZP_BYTE:5 [ assert_sbyte::c#5 ] 
Uplifting [RADIX] best 2184 combination 
Uplifting [print_ln] best 2184 combination 
Uplifting [print_cls] best 2184 combination 
Uplifting [main] best 2184 combination 
Uplifting [test_bytes] best 2184 combination 
Uplifting [test_sbytes] best 2184 combination 
Attempting to uplift remaining variables inzp ZP_BYTE:15 [ assert_byte::c#3 ]
Uplifting [assert_byte] best 2184 combination zp ZP_BYTE:15 [ assert_byte::c#3 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ assert_sbyte::c#5 ]
Uplifting [assert_sbyte] best 2184 combination zp ZP_BYTE:5 [ assert_sbyte::c#5 ] 
Coalescing zero page register with common assignment [ zp ZP_WORD:2 [ assert_sbyte::msg#5 ] ] with [ zp ZP_WORD:8 [ print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ] ] - score: 1
Coalescing zero page register with common assignment [ zp ZP_WORD:2 [ assert_sbyte::msg#5 print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 ] ] with [ zp ZP_WORD:12 [ assert_byte::msg#3 ] ] - score: 1
Allocated (was zp ZP_BYTE:5) zp ZP_BYTE:4 [ assert_sbyte::c#5 ]
Allocated (was zp ZP_WORD:6) zp ZP_WORD:5 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ]
Allocated (was zp ZP_WORD:10) zp ZP_WORD:7 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
Allocated (was zp ZP_BYTE:15) zp ZP_BYTE:9 [ assert_byte::c#3 ]
Allocated (was zp ZP_WORD:16) zp ZP_WORD:10 [ memset::dst#2 memset::dst#1 ]

ASSEMBLER BEFORE OPTIMIZATION
  // File Comments
  // Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(bbegin)
.pc = $80d "Program"
  // Global Constants & labels
  .label BGCOL = $d021
  .const GREEN = 5
  .const RED = 2
  .label print_char_cursor = 5
  .label print_line_cursor = 7
  // @begin
bbegin:
  // [1] phi from @begin to @1 [phi:@begin->@1]
b1_from_bbegin:
  jmp b1
  // @1
b1:
  // [2] call main 
  // [4] phi from @1 to main [phi:@1->main]
main_from_b1:
  jsr main
  // [3] phi from @1 to @end [phi:@1->@end]
bend_from_b1:
  jmp bend
  // @end
bend:
  // main
main: {
    // [5] call print_cls 
    // [68] phi from main to print_cls [phi:main->print_cls]
  print_cls_from_main:
    jsr print_cls
    jmp b1
    // main::@1
  b1:
    // [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0 -- _deref_pbuc1=vbuc2 
    lda #GREEN
    sta BGCOL
    // [7] call test_bytes 
    // [48] phi from main::@1 to test_bytes [phi:main::@1->test_bytes]
  test_bytes_from_b1:
    jsr test_bytes
    // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
  b2_from_b1:
    jmp b2
    // main::@2
  b2:
    // [9] call test_sbytes 
    // [11] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes]
  test_sbytes_from_b2:
    jsr test_sbytes
    jmp breturn
    // main::@return
  breturn:
    // [10] return 
    rts
}
  // test_sbytes
// Test different signed byte constants
test_sbytes: {
    .const bb = 0
    .const bf = $ff&-$7f-$7f
    .const bc = 2
    .const bd = bc-4
    .const be = -bd
    // [12] call assert_sbyte 
    // [22] phi from test_sbytes to assert_sbyte [phi:test_sbytes->assert_sbyte]
  assert_sbyte_from_test_sbytes:
    // [22] phi (signed byte) assert_sbyte::c#5 = (signed byte) 0 [phi:test_sbytes->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #0
    sta assert_sbyte.c
    // [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bb#0 [phi:test_sbytes->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #bb
    // [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg
    sta assert_sbyte.msg
    lda #>msg
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    // [13] phi from test_sbytes to test_sbytes::@1 [phi:test_sbytes->test_sbytes::@1]
  b1_from_test_sbytes:
    jmp b1
    // test_sbytes::@1
  b1:
    // [14] call assert_sbyte 
    // [22] phi from test_sbytes::@1 to assert_sbyte [phi:test_sbytes::@1->assert_sbyte]
  assert_sbyte_from_b1:
    // [22] phi (signed byte) assert_sbyte::c#5 = (signed byte) 2 [phi:test_sbytes::@1->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #2
    sta assert_sbyte.c
    // [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #bc
    // [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg1
    sta assert_sbyte.msg
    lda #>msg1
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    // [15] phi from test_sbytes::@1 to test_sbytes::@2 [phi:test_sbytes::@1->test_sbytes::@2]
  b2_from_b1:
    jmp b2
    // test_sbytes::@2
  b2:
    // [16] call assert_sbyte 
    // [22] phi from test_sbytes::@2 to assert_sbyte [phi:test_sbytes::@2->assert_sbyte]
  assert_sbyte_from_b2:
    // [22] phi (signed byte) assert_sbyte::c#5 = (signed byte) -2 [phi:test_sbytes::@2->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #-2
    sta assert_sbyte.c
    // [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bd#0 [phi:test_sbytes::@2->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #bd
    // [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg2
    sta assert_sbyte.msg
    lda #>msg2
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    // [17] phi from test_sbytes::@2 to test_sbytes::@3 [phi:test_sbytes::@2->test_sbytes::@3]
  b3_from_b2:
    jmp b3
    // test_sbytes::@3
  b3:
    // [18] call assert_sbyte 
    // [22] phi from test_sbytes::@3 to assert_sbyte [phi:test_sbytes::@3->assert_sbyte]
  assert_sbyte_from_b3:
    // [22] phi (signed byte) assert_sbyte::c#5 = (signed byte) 2 [phi:test_sbytes::@3->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #2
    sta assert_sbyte.c
    // [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::be#0 [phi:test_sbytes::@3->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #be
    // [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg3
    sta assert_sbyte.msg
    lda #>msg3
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    // [19] phi from test_sbytes::@3 to test_sbytes::@4 [phi:test_sbytes::@3->test_sbytes::@4]
  b4_from_b3:
    jmp b4
    // test_sbytes::@4
  b4:
    // [20] call assert_sbyte 
    // [22] phi from test_sbytes::@4 to assert_sbyte [phi:test_sbytes::@4->assert_sbyte]
  assert_sbyte_from_b4:
    // [22] phi (signed byte) assert_sbyte::c#5 = (signed byte) 2 [phi:test_sbytes::@4->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #2
    sta assert_sbyte.c
    // [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bf#0 [phi:test_sbytes::@4->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #bf
    // [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg4
    sta assert_sbyte.msg
    lda #>msg4
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    jmp breturn
    // test_sbytes::@return
  breturn:
    // [21] return 
    rts
    msg2: .text "0+2-4=-2@"
    msg3: .text "-(0+2-4)=2@"
    msg4: .text "-127-127=2@"
}
  // assert_sbyte
// assert_sbyte(byte* zeropage(2) msg, signed byte register(X) b, signed byte zeropage(4) c)
assert_sbyte: {
    .label msg = 2
    .label c = 4
    // [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5
    // [24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
    // [25] call print_str 
    // [36] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str]
  print_str_from_assert_sbyte:
    // [36] phi (byte*) print_char_cursor#80 = (byte*~) print_char_cursor#86 [phi:assert_sbyte->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (byte*) print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy 
    jsr print_str
    // [26] phi from assert_sbyte to assert_sbyte::@4 [phi:assert_sbyte->assert_sbyte::@4]
  b4_from_assert_sbyte:
    jmp b4
    // assert_sbyte::@4
  b4:
    // [27] call print_str 
    // [36] phi from assert_sbyte::@4 to print_str [phi:assert_sbyte::@4->print_str]
  print_str_from_b4:
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@4->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_sbyte::@4->print_str#1] -- pbuz1=pbuc1 
    lda #<str
    sta print_str.str
    lda #>str
    sta print_str.str+1
    jsr print_str
    jmp b5
    // assert_sbyte::@5
  b5:
    // [28] if((signed byte) assert_sbyte::b#5!=(signed byte) assert_sbyte::c#5) goto assert_sbyte::@1 -- vbsxx_neq_vbsz1_then_la1 
    cpx c
    bne b1
    // [29] phi from assert_sbyte::@5 to assert_sbyte::@3 [phi:assert_sbyte::@5->assert_sbyte::@3]
  b3_from_b5:
    jmp b3
    // assert_sbyte::@3
  b3:
    // [30] call print_str 
    // [36] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str]
  print_str_from_b3:
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@3->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1 
    lda #<str2
    sta print_str.str
    lda #>str2
    sta print_str.str+1
    jsr print_str
    // [31] phi from assert_sbyte::@1 assert_sbyte::@3 to assert_sbyte::@2 [phi:assert_sbyte::@1/assert_sbyte::@3->assert_sbyte::@2]
  b2_from_b1:
  b2_from_b3:
    jmp b2
    // assert_sbyte::@2
  b2:
    // [32] call print_ln 
    // [43] phi from assert_sbyte::@2 to print_ln [phi:assert_sbyte::@2->print_ln]
  print_ln_from_b2:
    // [43] phi (byte*) print_line_cursor#47 = (byte*) print_line_cursor#1 [phi:assert_sbyte::@2->print_ln#0] -- register_copy 
    jsr print_ln
    jmp breturn
    // assert_sbyte::@return
  breturn:
    // [33] return 
    rts
    // assert_sbyte::@1
  b1:
    // [34] *((const byte*) BGCOL#0) ← (const byte) RED#0 -- _deref_pbuc1=vbuc2 
    lda #RED
    sta BGCOL
    // [35] call print_str 
    // [36] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str]
  print_str_from_b1:
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@1->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1 
    lda #<str1
    sta print_str.str
    lda #>str1
    sta print_str.str+1
    jsr print_str
    jmp b2_from_b1
}
  // print_str
// Print a zero-terminated string
// print_str(byte* zeropage(2) str)
print_str: {
    .label str = 2
    // [37] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1]
  b1_from_print_str:
  b1_from_b2:
    // [37] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#80 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy 
    // [37] phi (byte*) print_str::str#10 = (byte*) print_str::str#11 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy 
    jmp b1
    // print_str::@1
  b1:
    // [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 
    ldy #0
    lda (str),y
    cmp #'@'
    bne b2
    jmp breturn
    // print_str::@return
  breturn:
    // [39] return 
    rts
    // print_str::@2
  b2:
    // [40] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (str),y
    ldy #0
    sta (print_char_cursor),y
    // [41] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 
    inc print_char_cursor
    bne !+
    inc print_char_cursor+1
  !:
    // [42] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#10 -- pbuz1=_inc_pbuz1 
    inc str
    bne !+
    inc str+1
  !:
    jmp b1_from_b2
}
  // print_ln
// Print a newline
print_ln: {
    // [44] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1]
  b1_from_print_ln:
  b1_from_b1:
    // [44] phi (byte*) print_line_cursor#24 = (byte*) print_line_cursor#47 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy 
    jmp b1
    // print_ln::@1
  b1:
    // [45] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#24 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc print_line_cursor
    sta print_line_cursor
    bcc !+
    inc print_line_cursor+1
  !:
    // [46] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 
    lda print_line_cursor+1
    cmp print_char_cursor+1
    bcc b1_from_b1
    bne !+
    lda print_line_cursor
    cmp print_char_cursor
    bcc b1_from_b1
  !:
    jmp breturn
    // print_ln::@return
  breturn:
    // [47] return 
    rts
}
  // test_bytes
// Test different byte constants
test_bytes: {
    .const bb = 0
    .const bc = 2
    .const bd = bc-4
    // [49] call assert_byte 
    // [55] phi from test_bytes to assert_byte [phi:test_bytes->assert_byte]
  assert_byte_from_test_bytes:
    // [55] phi (byte*) print_line_cursor#50 = (byte*) 1024 [phi:test_bytes->assert_byte#0] -- pbuz1=pbuc1 
    lda #<$400
    sta print_line_cursor
    lda #>$400
    sta print_line_cursor+1
    // [55] phi (byte) assert_byte::c#3 = (byte) 0 [phi:test_bytes->assert_byte#1] -- vbuz1=vbuc1 
    lda #0
    sta assert_byte.c
    // [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bb#0 [phi:test_bytes->assert_byte#2] -- vbuxx=vbuc1 
    ldx #bb
    // [55] phi (byte*) print_char_cursor#70 = (byte*) 1024 [phi:test_bytes->assert_byte#3] -- pbuz1=pbuc1 
    lda #<$400
    sta print_char_cursor
    lda #>$400
    sta print_char_cursor+1
    // [55] phi (byte*) assert_byte::msg#3 = (const string) msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg
    sta assert_byte.msg
    lda #>msg
    sta assert_byte.msg+1
    jsr assert_byte
    jmp b1
    // test_bytes::@1
  b1:
    // [50] (byte*~) print_char_cursor#92 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
    // [51] call assert_byte 
    // [55] phi from test_bytes::@1 to assert_byte [phi:test_bytes::@1->assert_byte]
  assert_byte_from_b1:
    // [55] phi (byte*) print_line_cursor#50 = (byte*) print_line_cursor#1 [phi:test_bytes::@1->assert_byte#0] -- register_copy 
    // [55] phi (byte) assert_byte::c#3 = (byte) 2 [phi:test_bytes::@1->assert_byte#1] -- vbuz1=vbuc1 
    lda #2
    sta assert_byte.c
    // [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuxx=vbuc1 
    ldx #bc
    // [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#92 [phi:test_bytes::@1->assert_byte#3] -- register_copy 
    // [55] phi (byte*) assert_byte::msg#3 = (const string) msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg1
    sta assert_byte.msg
    lda #>msg1
    sta assert_byte.msg+1
    jsr assert_byte
    jmp b2
    // test_bytes::@2
  b2:
    // [52] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
    // [53] call assert_byte 
    // [55] phi from test_bytes::@2 to assert_byte [phi:test_bytes::@2->assert_byte]
  assert_byte_from_b2:
    // [55] phi (byte*) print_line_cursor#50 = (byte*) print_line_cursor#1 [phi:test_bytes::@2->assert_byte#0] -- register_copy 
    // [55] phi (byte) assert_byte::c#3 = (byte) $fe [phi:test_bytes::@2->assert_byte#1] -- vbuz1=vbuc1 
    lda #$fe
    sta assert_byte.c
    // [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuxx=vbuc1 
    ldx #bd
    // [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#93 [phi:test_bytes::@2->assert_byte#3] -- register_copy 
    // [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg2
    sta assert_byte.msg
    lda #>msg2
    sta assert_byte.msg+1
    jsr assert_byte
    jmp breturn
    // test_bytes::@return
  breturn:
    // [54] return 
    rts
    msg2: .text "0+2-4=254@"
}
  // assert_byte
// assert_byte(byte* zeropage(2) msg, byte register(X) b, byte zeropage(9) c)
assert_byte: {
    .label msg = 2
    .label c = 9
    // [56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3
    // [57] call print_str 
    // [36] phi from assert_byte to print_str [phi:assert_byte->print_str]
  print_str_from_assert_byte:
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#70 [phi:assert_byte->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (byte*) print_str::str#1 [phi:assert_byte->print_str#1] -- register_copy 
    jsr print_str
    // [58] phi from assert_byte to assert_byte::@4 [phi:assert_byte->assert_byte::@4]
  b4_from_assert_byte:
    jmp b4
    // assert_byte::@4
  b4:
    // [59] call print_str 
    // [36] phi from assert_byte::@4 to print_str [phi:assert_byte::@4->print_str]
  print_str_from_b4:
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@4->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_byte::@4->print_str#1] -- pbuz1=pbuc1 
    lda #<str
    sta print_str.str
    lda #>str
    sta print_str.str+1
    jsr print_str
    jmp b5
    // assert_byte::@5
  b5:
    // [60] if((byte) assert_byte::b#3!=(byte) assert_byte::c#3) goto assert_byte::@1 -- vbuxx_neq_vbuz1_then_la1 
    cpx c
    bne b1
    // [61] phi from assert_byte::@5 to assert_byte::@3 [phi:assert_byte::@5->assert_byte::@3]
  b3_from_b5:
    jmp b3
    // assert_byte::@3
  b3:
    // [62] call print_str 
    // [36] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str]
  print_str_from_b3:
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@3->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1 
    lda #<str2
    sta print_str.str
    lda #>str2
    sta print_str.str+1
    jsr print_str
    // [63] phi from assert_byte::@1 assert_byte::@3 to assert_byte::@2 [phi:assert_byte::@1/assert_byte::@3->assert_byte::@2]
  b2_from_b1:
  b2_from_b3:
    jmp b2
    // assert_byte::@2
  b2:
    // [64] call print_ln 
    // [43] phi from assert_byte::@2 to print_ln [phi:assert_byte::@2->print_ln]
  print_ln_from_b2:
    // [43] phi (byte*) print_line_cursor#47 = (byte*) print_line_cursor#50 [phi:assert_byte::@2->print_ln#0] -- register_copy 
    jsr print_ln
    jmp breturn
    // assert_byte::@return
  breturn:
    // [65] return 
    rts
    // assert_byte::@1
  b1:
    // [66] *((const byte*) BGCOL#0) ← (const byte) RED#0 -- _deref_pbuc1=vbuc2 
    lda #RED
    sta BGCOL
    // [67] call print_str 
    // [36] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str]
  print_str_from_b1:
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@1->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1 
    lda #<str1
    sta print_str.str
    lda #>str1
    sta print_str.str+1
    jsr print_str
    jmp b2_from_b1
}
  // print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    // [69] call memset 
    // [71] phi from print_cls to memset [phi:print_cls->memset]
  memset_from_print_cls:
    jsr memset
    jmp breturn
    // print_cls::@return
  breturn:
    // [70] return 
    rts
}
  // memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
memset: {
    .const c = ' '
    .const num = $3e8
    .label str = $400
    .label end = str+num
    .label dst = $a
    // [72] phi from memset to memset::@1 [phi:memset->memset::@1]
  b1_from_memset:
    // [72] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 
    lda #<str
    sta dst
    lda #>str
    sta dst+1
    jmp b1
    // [72] phi from memset::@1 to memset::@1 [phi:memset::@1->memset::@1]
  b1_from_b1:
    // [72] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@1->memset::@1#0] -- register_copy 
    jmp b1
    // memset::@1
  b1:
    // [73] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 
    lda #c
    ldy #0
    sta (dst),y
    // [74] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
    inc dst
    bne !+
    inc dst+1
  !:
    // [75] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda dst+1
    cmp #>end
    bne b1_from_b1
    lda dst
    cmp #<end
    bne b1_from_b1
    jmp breturn
    // memset::@return
  breturn:
    // [76] return 
    rts
}
  // File Data
  msg: .text "0=0@"
  msg1: .text "0+2=2@"
  str: .text " @"
  str1: .text "fail!@"
  str2: .text "ok@"

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b1
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b3
Removing instruction jmp b4
Removing instruction jmp breturn
Removing instruction jmp b4
Removing instruction jmp b5
Removing instruction jmp b3
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp b4
Removing instruction jmp b5
Removing instruction jmp b3
Removing instruction jmp b2
Removing instruction jmp breturn
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction ldy #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b2_from_b1 with b2
Replacing label b1_from_b2 with b1
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Replacing label b2_from_b1 with b2
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction b1_from_bbegin:
Removing instruction b1:
Removing instruction main_from_b1:
Removing instruction bend_from_b1:
Removing instruction b2_from_b1:
Removing instruction test_sbytes_from_b2:
Removing instruction b1_from_test_sbytes:
Removing instruction assert_sbyte_from_b1:
Removing instruction b2_from_b1:
Removing instruction assert_sbyte_from_b2:
Removing instruction b3_from_b2:
Removing instruction assert_sbyte_from_b3:
Removing instruction b4_from_b3:
Removing instruction assert_sbyte_from_b4:
Removing instruction b4_from_assert_sbyte:
Removing instruction print_str_from_b4:
Removing instruction b3_from_b5:
Removing instruction print_str_from_b3:
Removing instruction b2_from_b1:
Removing instruction b2_from_b3:
Removing instruction print_ln_from_b2:
Removing instruction b1_from_print_str:
Removing instruction b1_from_b2:
Removing instruction b1_from_print_ln:
Removing instruction b1_from_b1:
Removing instruction b4_from_assert_byte:
Removing instruction print_str_from_b4:
Removing instruction b3_from_b5:
Removing instruction print_str_from_b3:
Removing instruction b2_from_b1:
Removing instruction b2_from_b3:
Removing instruction print_ln_from_b2:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction bend:
Removing instruction print_cls_from_main:
Removing instruction b1:
Removing instruction test_bytes_from_b1:
Removing instruction b2:
Removing instruction breturn:
Removing instruction assert_sbyte_from_test_sbytes:
Removing instruction b1:
Removing instruction b2:
Removing instruction b3:
Removing instruction b4:
Removing instruction breturn:
Removing instruction print_str_from_assert_sbyte:
Removing instruction b4:
Removing instruction b5:
Removing instruction b3:
Removing instruction breturn:
Removing instruction print_str_from_b1:
Removing instruction breturn:
Removing instruction breturn:
Removing instruction assert_byte_from_test_bytes:
Removing instruction b1:
Removing instruction assert_byte_from_b1:
Removing instruction b2:
Removing instruction assert_byte_from_b2:
Removing instruction breturn:
Removing instruction print_str_from_assert_byte:
Removing instruction b4:
Removing instruction b5:
Removing instruction b3:
Removing instruction breturn:
Removing instruction print_str_from_b1:
Removing instruction memset_from_print_cls:
Removing instruction breturn:
Removing instruction b1_from_memset:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Updating BasicUpstart to call main directly
Removing instruction jsr main
Succesful ASM optimization Pass5SkipBegin
Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction bbegin:
Succesful ASM optimization Pass5UnusedLabelElimination

FINAL SYMBOL TABLE
(label) @1
(label) @begin
(label) @end
(byte*) BGCOL
(const byte*) BGCOL#0 BGCOL = (byte*) 53281
(byte) GREEN
(const byte) GREEN#0 GREEN = (byte) 5
(const byte) RADIX::BINARY BINARY = (number) 2
(const byte) RADIX::DECIMAL DECIMAL = (number) $a
(const byte) RADIX::HEXADECIMAL HEXADECIMAL = (number) $10
(const byte) RADIX::OCTAL OCTAL = (number) 8
(byte) RED
(const byte) RED#0 RED = (byte) 2
(void()) assert_byte((byte*) assert_byte::msg , (byte) assert_byte::b , (byte) assert_byte::c)
(label) assert_byte::@1
(label) assert_byte::@2
(label) assert_byte::@3
(label) assert_byte::@4
(label) assert_byte::@5
(label) assert_byte::@return
(byte) assert_byte::b
(byte) assert_byte::b#3 reg byte x 0.4
(byte) assert_byte::c
(byte) assert_byte::c#3 c zp ZP_BYTE:9 0.4
(byte*) assert_byte::msg
(byte*) assert_byte::msg#3 msg zp ZP_WORD:2 2.0
(void()) assert_sbyte((byte*) assert_sbyte::msg , (signed byte) assert_sbyte::b , (signed byte) assert_sbyte::c)
(label) assert_sbyte::@1
(label) assert_sbyte::@2
(label) assert_sbyte::@3
(label) assert_sbyte::@4
(label) assert_sbyte::@5
(label) assert_sbyte::@return
(signed byte) assert_sbyte::b
(signed byte) assert_sbyte::b#5 reg byte x 0.3333333333333333
(signed byte) assert_sbyte::c
(signed byte) assert_sbyte::c#5 c zp ZP_BYTE:4 0.3333333333333333
(byte*) assert_sbyte::msg
(byte*) assert_sbyte::msg#5 msg zp ZP_WORD:2 2.0
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@return
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
(label) memset::@1
(label) memset::@return
(byte) memset::c
(const byte) memset::c#0 c = (byte) ' '
(byte*) memset::dst
(byte*) memset::dst#1 dst zp ZP_WORD:10 16.5
(byte*) memset::dst#2 dst zp ZP_WORD:10 16.5
(byte*) memset::end
(const byte*) memset::end#0 end = (byte*)(const void*) memset::str#0+(const word) memset::num#0
(word) memset::num
(const word) memset::num#0 num = (word) $3e8
(void*) memset::return
(void*) memset::str
(const void*) memset::str#0 str = (void*)(byte*) 1024
(const string) msg msg = (string) "0=0@"
(const string) msg1 msg1 = (string) "0+2=2@"
(byte*) print_char_cursor
(byte*) print_char_cursor#1 print_char_cursor zp ZP_WORD:5 11.0
(byte*) print_char_cursor#2 print_char_cursor zp ZP_WORD:5 2.230769230769231
(byte*) print_char_cursor#70 print_char_cursor zp ZP_WORD:5 3.0
(byte*) print_char_cursor#80 print_char_cursor zp ZP_WORD:5 18.0
(byte*~) print_char_cursor#86 print_char_cursor zp ZP_WORD:5 4.0
(byte*~) print_char_cursor#92 print_char_cursor zp ZP_WORD:5 4.0
(byte*~) print_char_cursor#93 print_char_cursor zp ZP_WORD:5 4.0
(void()) print_cls()
(label) print_cls::@return
(byte*) print_line_cursor
(byte*) print_line_cursor#1 print_line_cursor zp ZP_WORD:7 1.2500000000000002
(byte*) print_line_cursor#24 print_line_cursor zp ZP_WORD:7 24.0
(byte*) print_line_cursor#47 print_line_cursor zp ZP_WORD:7 6.0
(byte*) print_line_cursor#50 print_line_cursor zp ZP_WORD:7 0.5454545454545454
(void()) print_ln()
(label) print_ln::@1
(label) print_ln::@return
(byte*) print_screen
(void()) print_str((byte*) print_str::str)
(label) print_str::@1
(label) print_str::@2
(label) print_str::@return
(byte*) print_str::str
(byte*) print_str::str#0 str zp ZP_WORD:2 22.0
(byte*) print_str::str#1 str zp ZP_WORD:2 4.0
(byte*) print_str::str#10 str zp ZP_WORD:2 11.5
(byte*) print_str::str#11 str zp ZP_WORD:2 6.0
(byte*) print_str::str#5 str zp ZP_WORD:2 2.0
(const string) str str = (string) " @"
(const string) str1 str1 = (string) "fail!@"
(const string) str2 str2 = (string) "ok@"
(void()) test_bytes()
(label) test_bytes::@1
(label) test_bytes::@2
(label) test_bytes::@return
(byte) test_bytes::bb
(const byte) test_bytes::bb#0 bb = (byte) 0
(byte) test_bytes::bc
(const byte) test_bytes::bc#0 bc = (byte) 2
(byte) test_bytes::bd
(const byte) test_bytes::bd#0 bd = (byte)(signed byte)(const byte) test_bytes::bc#0-(signed byte) 4
(const string) test_bytes::msg2 msg2 = (string) "0+2-4=254@"
(void()) test_sbytes()
(label) test_sbytes::@1
(label) test_sbytes::@2
(label) test_sbytes::@3
(label) test_sbytes::@4
(label) test_sbytes::@return
(signed byte) test_sbytes::bb
(const signed byte) test_sbytes::bb#0 bb = (signed byte) 0
(signed byte) test_sbytes::bc
(const signed byte) test_sbytes::bc#0 bc = (signed byte) 2
(signed byte) test_sbytes::bd
(const signed byte) test_sbytes::bd#0 bd = (const signed byte) test_sbytes::bc#0-(signed byte) 4
(signed byte) test_sbytes::be
(const signed byte) test_sbytes::be#0 be = -(const signed byte) test_sbytes::bd#0
(signed byte) test_sbytes::bf
(const signed byte) test_sbytes::bf#0 bf = (signed byte)(number) -$7f-(number) $7f
(const string) test_sbytes::msg2 msg2 = (string) "0+2-4=-2@"
(const string) test_sbytes::msg3 msg3 = (string) "-(0+2-4)=2@"
(const string) test_sbytes::msg4 msg4 = (string) "-127-127=2@"

zp ZP_WORD:2 [ assert_sbyte::msg#5 print_str::str#10 print_str::str#11 print_str::str#1 print_str::str#5 print_str::str#0 assert_byte::msg#3 ]
reg byte x [ assert_sbyte::b#5 ]
zp ZP_BYTE:4 [ assert_sbyte::c#5 ]
zp ZP_WORD:5 [ print_char_cursor#80 print_char_cursor#70 print_char_cursor#2 print_char_cursor#86 print_char_cursor#1 print_char_cursor#92 print_char_cursor#93 ]
zp ZP_WORD:7 [ print_line_cursor#24 print_line_cursor#47 print_line_cursor#50 print_line_cursor#1 ]
reg byte x [ assert_byte::b#3 ]
zp ZP_BYTE:9 [ assert_byte::c#3 ]
zp ZP_WORD:10 [ memset::dst#2 memset::dst#1 ]


FINAL ASSEMBLER
Score: 1852

  // File Comments
  // Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
  // Global Constants & labels
  .label BGCOL = $d021
  .const GREEN = 5
  .const RED = 2
  .label print_char_cursor = 5
  .label print_line_cursor = 7
  // @begin
  // [1] phi from @begin to @1 [phi:@begin->@1]
  // @1
  // [2] call main 
  // [4] phi from @1 to main [phi:@1->main]
  // [3] phi from @1 to @end [phi:@1->@end]
  // @end
  // main
main: {
    // print_cls()
    // [5] call print_cls 
    // [68] phi from main to print_cls [phi:main->print_cls]
    jsr print_cls
    // main::@1
    // *BGCOL = GREEN
    // [6] *((const byte*) BGCOL#0) ← (const byte) GREEN#0 -- _deref_pbuc1=vbuc2 
    lda #GREEN
    sta BGCOL
    // test_bytes()
    // [7] call test_bytes 
    // [48] phi from main::@1 to test_bytes [phi:main::@1->test_bytes]
    jsr test_bytes
    // [8] phi from main::@1 to main::@2 [phi:main::@1->main::@2]
    // main::@2
    // test_sbytes()
    // [9] call test_sbytes 
    // [11] phi from main::@2 to test_sbytes [phi:main::@2->test_sbytes]
    jsr test_sbytes
    // main::@return
    // }
    // [10] return 
    rts
}
  // test_sbytes
// Test different signed byte constants
test_sbytes: {
    .const bb = 0
    .const bf = $ff&-$7f-$7f
    .const bc = 2
    .const bd = bc-4
    .const be = -bd
    // assert_sbyte("0=0", bb, 0)
    // [12] call assert_sbyte 
    // [22] phi from test_sbytes to assert_sbyte [phi:test_sbytes->assert_sbyte]
    // [22] phi (signed byte) assert_sbyte::c#5 = (signed byte) 0 [phi:test_sbytes->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #0
    sta assert_sbyte.c
    // [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bb#0 [phi:test_sbytes->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #bb
    // [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg [phi:test_sbytes->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg
    sta assert_sbyte.msg
    lda #>msg
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    // [13] phi from test_sbytes to test_sbytes::@1 [phi:test_sbytes->test_sbytes::@1]
    // test_sbytes::@1
    // assert_sbyte("0+2=2", bc, 2)
    // [14] call assert_sbyte 
    // [22] phi from test_sbytes::@1 to assert_sbyte [phi:test_sbytes::@1->assert_sbyte]
    // [22] phi (signed byte) assert_sbyte::c#5 = (signed byte) 2 [phi:test_sbytes::@1->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #2
    sta assert_sbyte.c
    // [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bc#0 [phi:test_sbytes::@1->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #bc
    // [22] phi (byte*) assert_sbyte::msg#5 = (const string) msg1 [phi:test_sbytes::@1->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg1
    sta assert_sbyte.msg
    lda #>msg1
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    // [15] phi from test_sbytes::@1 to test_sbytes::@2 [phi:test_sbytes::@1->test_sbytes::@2]
    // test_sbytes::@2
    // assert_sbyte("0+2-4=-2", bd, -2)
    // [16] call assert_sbyte 
    // [22] phi from test_sbytes::@2 to assert_sbyte [phi:test_sbytes::@2->assert_sbyte]
    // [22] phi (signed byte) assert_sbyte::c#5 = (signed byte) -2 [phi:test_sbytes::@2->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #-2
    sta assert_sbyte.c
    // [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bd#0 [phi:test_sbytes::@2->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #bd
    // [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg2 [phi:test_sbytes::@2->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg2
    sta assert_sbyte.msg
    lda #>msg2
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    // [17] phi from test_sbytes::@2 to test_sbytes::@3 [phi:test_sbytes::@2->test_sbytes::@3]
    // test_sbytes::@3
    // assert_sbyte("-(0+2-4)=2", be, 2)
    // [18] call assert_sbyte 
    // [22] phi from test_sbytes::@3 to assert_sbyte [phi:test_sbytes::@3->assert_sbyte]
    // [22] phi (signed byte) assert_sbyte::c#5 = (signed byte) 2 [phi:test_sbytes::@3->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #2
    sta assert_sbyte.c
    // [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::be#0 [phi:test_sbytes::@3->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #be
    // [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg3 [phi:test_sbytes::@3->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg3
    sta assert_sbyte.msg
    lda #>msg3
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    // [19] phi from test_sbytes::@3 to test_sbytes::@4 [phi:test_sbytes::@3->test_sbytes::@4]
    // test_sbytes::@4
    // assert_sbyte("-127-127=2", bf, 2)
    // [20] call assert_sbyte 
    // [22] phi from test_sbytes::@4 to assert_sbyte [phi:test_sbytes::@4->assert_sbyte]
    // [22] phi (signed byte) assert_sbyte::c#5 = (signed byte) 2 [phi:test_sbytes::@4->assert_sbyte#0] -- vbsz1=vbsc1 
    lda #2
    sta assert_sbyte.c
    // [22] phi (signed byte) assert_sbyte::b#5 = (const signed byte) test_sbytes::bf#0 [phi:test_sbytes::@4->assert_sbyte#1] -- vbsxx=vbsc1 
    ldx #bf
    // [22] phi (byte*) assert_sbyte::msg#5 = (const string) test_sbytes::msg4 [phi:test_sbytes::@4->assert_sbyte#2] -- pbuz1=pbuc1 
    lda #<msg4
    sta assert_sbyte.msg
    lda #>msg4
    sta assert_sbyte.msg+1
    jsr assert_sbyte
    // test_sbytes::@return
    // }
    // [21] return 
    rts
    msg2: .text "0+2-4=-2@"
    msg3: .text "-(0+2-4)=2@"
    msg4: .text "-127-127=2@"
}
  // assert_sbyte
// assert_sbyte(byte* zeropage(2) msg, signed byte register(X) b, signed byte zeropage(4) c)
assert_sbyte: {
    .label msg = 2
    .label c = 4
    // print_str(msg)
    // [23] (byte*) print_str::str#5 ← (byte*) assert_sbyte::msg#5
    // [24] (byte*~) print_char_cursor#86 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
    // print_str(msg)
    // [25] call print_str 
    // [36] phi from assert_sbyte to print_str [phi:assert_sbyte->print_str]
    // [36] phi (byte*) print_char_cursor#80 = (byte*~) print_char_cursor#86 [phi:assert_sbyte->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (byte*) print_str::str#5 [phi:assert_sbyte->print_str#1] -- register_copy 
    jsr print_str
    // [26] phi from assert_sbyte to assert_sbyte::@4 [phi:assert_sbyte->assert_sbyte::@4]
    // assert_sbyte::@4
    // print_str(" ")
    // [27] call print_str 
    // [36] phi from assert_sbyte::@4 to print_str [phi:assert_sbyte::@4->print_str]
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@4->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_sbyte::@4->print_str#1] -- pbuz1=pbuc1 
    lda #<str
    sta print_str.str
    lda #>str
    sta print_str.str+1
    jsr print_str
    // assert_sbyte::@5
    // if(b!=c)
    // [28] if((signed byte) assert_sbyte::b#5!=(signed byte) assert_sbyte::c#5) goto assert_sbyte::@1 -- vbsxx_neq_vbsz1_then_la1 
    cpx c
    bne b1
    // [29] phi from assert_sbyte::@5 to assert_sbyte::@3 [phi:assert_sbyte::@5->assert_sbyte::@3]
    // assert_sbyte::@3
    // print_str("ok")
    // [30] call print_str 
    // [36] phi from assert_sbyte::@3 to print_str [phi:assert_sbyte::@3->print_str]
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@3->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_sbyte::@3->print_str#1] -- pbuz1=pbuc1 
    lda #<str2
    sta print_str.str
    lda #>str2
    sta print_str.str+1
    jsr print_str
    // [31] phi from assert_sbyte::@1 assert_sbyte::@3 to assert_sbyte::@2 [phi:assert_sbyte::@1/assert_sbyte::@3->assert_sbyte::@2]
    // assert_sbyte::@2
  b2:
    // print_ln()
    // [32] call print_ln 
    // [43] phi from assert_sbyte::@2 to print_ln [phi:assert_sbyte::@2->print_ln]
    // [43] phi (byte*) print_line_cursor#47 = (byte*) print_line_cursor#1 [phi:assert_sbyte::@2->print_ln#0] -- register_copy 
    jsr print_ln
    // assert_sbyte::@return
    // }
    // [33] return 
    rts
    // assert_sbyte::@1
  b1:
    // *BGCOL = RED
    // [34] *((const byte*) BGCOL#0) ← (const byte) RED#0 -- _deref_pbuc1=vbuc2 
    lda #RED
    sta BGCOL
    // print_str("fail!")
    // [35] call print_str 
    // [36] phi from assert_sbyte::@1 to print_str [phi:assert_sbyte::@1->print_str]
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_sbyte::@1->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_sbyte::@1->print_str#1] -- pbuz1=pbuc1 
    lda #<str1
    sta print_str.str
    lda #>str1
    sta print_str.str+1
    jsr print_str
    jmp b2
}
  // print_str
// Print a zero-terminated string
// print_str(byte* zeropage(2) str)
print_str: {
    .label str = 2
    // [37] phi from print_str print_str::@2 to print_str::@1 [phi:print_str/print_str::@2->print_str::@1]
    // [37] phi (byte*) print_char_cursor#2 = (byte*) print_char_cursor#80 [phi:print_str/print_str::@2->print_str::@1#0] -- register_copy 
    // [37] phi (byte*) print_str::str#10 = (byte*) print_str::str#11 [phi:print_str/print_str::@2->print_str::@1#1] -- register_copy 
    // print_str::@1
  b1:
    // while(*str!='@')
    // [38] if(*((byte*) print_str::str#10)!=(byte) '@') goto print_str::@2 -- _deref_pbuz1_neq_vbuc1_then_la1 
    ldy #0
    lda (str),y
    cmp #'@'
    bne b2
    // print_str::@return
    // }
    // [39] return 
    rts
    // print_str::@2
  b2:
    // *(print_char_cursor++) = *(str++)
    // [40] *((byte*) print_char_cursor#2) ← *((byte*) print_str::str#10) -- _deref_pbuz1=_deref_pbuz2 
    ldy #0
    lda (str),y
    sta (print_char_cursor),y
    // *(print_char_cursor++) = *(str++);
    // [41] (byte*) print_char_cursor#1 ← ++ (byte*) print_char_cursor#2 -- pbuz1=_inc_pbuz1 
    inc print_char_cursor
    bne !+
    inc print_char_cursor+1
  !:
    // [42] (byte*) print_str::str#0 ← ++ (byte*) print_str::str#10 -- pbuz1=_inc_pbuz1 
    inc str
    bne !+
    inc str+1
  !:
    jmp b1
}
  // print_ln
// Print a newline
print_ln: {
    // [44] phi from print_ln print_ln::@1 to print_ln::@1 [phi:print_ln/print_ln::@1->print_ln::@1]
    // [44] phi (byte*) print_line_cursor#24 = (byte*) print_line_cursor#47 [phi:print_ln/print_ln::@1->print_ln::@1#0] -- register_copy 
    // print_ln::@1
  b1:
    // print_line_cursor + $28
    // [45] (byte*) print_line_cursor#1 ← (byte*) print_line_cursor#24 + (byte) $28 -- pbuz1=pbuz1_plus_vbuc1 
    lda #$28
    clc
    adc print_line_cursor
    sta print_line_cursor
    bcc !+
    inc print_line_cursor+1
  !:
    // while (print_line_cursor<print_char_cursor)
    // [46] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#2) goto print_ln::@1 -- pbuz1_lt_pbuz2_then_la1 
    lda print_line_cursor+1
    cmp print_char_cursor+1
    bcc b1
    bne !+
    lda print_line_cursor
    cmp print_char_cursor
    bcc b1
  !:
    // print_ln::@return
    // }
    // [47] return 
    rts
}
  // test_bytes
// Test different byte constants
test_bytes: {
    .const bb = 0
    .const bc = 2
    .const bd = bc-4
    // assert_byte("0=0", bb, 0)
    // [49] call assert_byte 
    // [55] phi from test_bytes to assert_byte [phi:test_bytes->assert_byte]
    // [55] phi (byte*) print_line_cursor#50 = (byte*) 1024 [phi:test_bytes->assert_byte#0] -- pbuz1=pbuc1 
    lda #<$400
    sta print_line_cursor
    lda #>$400
    sta print_line_cursor+1
    // [55] phi (byte) assert_byte::c#3 = (byte) 0 [phi:test_bytes->assert_byte#1] -- vbuz1=vbuc1 
    lda #0
    sta assert_byte.c
    // [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bb#0 [phi:test_bytes->assert_byte#2] -- vbuxx=vbuc1 
    ldx #bb
    // [55] phi (byte*) print_char_cursor#70 = (byte*) 1024 [phi:test_bytes->assert_byte#3] -- pbuz1=pbuc1 
    lda #<$400
    sta print_char_cursor
    lda #>$400
    sta print_char_cursor+1
    // [55] phi (byte*) assert_byte::msg#3 = (const string) msg [phi:test_bytes->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg
    sta assert_byte.msg
    lda #>msg
    sta assert_byte.msg+1
    jsr assert_byte
    // test_bytes::@1
    // [50] (byte*~) print_char_cursor#92 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
    // assert_byte("0+2=2", bc, 2)
    // [51] call assert_byte 
    // [55] phi from test_bytes::@1 to assert_byte [phi:test_bytes::@1->assert_byte]
    // [55] phi (byte*) print_line_cursor#50 = (byte*) print_line_cursor#1 [phi:test_bytes::@1->assert_byte#0] -- register_copy 
    // [55] phi (byte) assert_byte::c#3 = (byte) 2 [phi:test_bytes::@1->assert_byte#1] -- vbuz1=vbuc1 
    lda #2
    sta assert_byte.c
    // [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bc#0 [phi:test_bytes::@1->assert_byte#2] -- vbuxx=vbuc1 
    ldx #bc
    // [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#92 [phi:test_bytes::@1->assert_byte#3] -- register_copy 
    // [55] phi (byte*) assert_byte::msg#3 = (const string) msg1 [phi:test_bytes::@1->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg1
    sta assert_byte.msg
    lda #>msg1
    sta assert_byte.msg+1
    jsr assert_byte
    // test_bytes::@2
    // [52] (byte*~) print_char_cursor#93 ← (byte*) print_line_cursor#1 -- pbuz1=pbuz2 
    lda print_line_cursor
    sta print_char_cursor
    lda print_line_cursor+1
    sta print_char_cursor+1
    // assert_byte("0+2-4=254", bd, 254)
    // [53] call assert_byte 
    // [55] phi from test_bytes::@2 to assert_byte [phi:test_bytes::@2->assert_byte]
    // [55] phi (byte*) print_line_cursor#50 = (byte*) print_line_cursor#1 [phi:test_bytes::@2->assert_byte#0] -- register_copy 
    // [55] phi (byte) assert_byte::c#3 = (byte) $fe [phi:test_bytes::@2->assert_byte#1] -- vbuz1=vbuc1 
    lda #$fe
    sta assert_byte.c
    // [55] phi (byte) assert_byte::b#3 = (const byte) test_bytes::bd#0 [phi:test_bytes::@2->assert_byte#2] -- vbuxx=vbuc1 
    ldx #bd
    // [55] phi (byte*) print_char_cursor#70 = (byte*~) print_char_cursor#93 [phi:test_bytes::@2->assert_byte#3] -- register_copy 
    // [55] phi (byte*) assert_byte::msg#3 = (const string) test_bytes::msg2 [phi:test_bytes::@2->assert_byte#4] -- pbuz1=pbuc1 
    lda #<msg2
    sta assert_byte.msg
    lda #>msg2
    sta assert_byte.msg+1
    jsr assert_byte
    // test_bytes::@return
    // }
    // [54] return 
    rts
    msg2: .text "0+2-4=254@"
}
  // assert_byte
// assert_byte(byte* zeropage(2) msg, byte register(X) b, byte zeropage(9) c)
assert_byte: {
    .label msg = 2
    .label c = 9
    // print_str(msg)
    // [56] (byte*) print_str::str#1 ← (byte*) assert_byte::msg#3
    // [57] call print_str 
    // [36] phi from assert_byte to print_str [phi:assert_byte->print_str]
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#70 [phi:assert_byte->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (byte*) print_str::str#1 [phi:assert_byte->print_str#1] -- register_copy 
    jsr print_str
    // [58] phi from assert_byte to assert_byte::@4 [phi:assert_byte->assert_byte::@4]
    // assert_byte::@4
    // print_str(" ")
    // [59] call print_str 
    // [36] phi from assert_byte::@4 to print_str [phi:assert_byte::@4->print_str]
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@4->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str [phi:assert_byte::@4->print_str#1] -- pbuz1=pbuc1 
    lda #<str
    sta print_str.str
    lda #>str
    sta print_str.str+1
    jsr print_str
    // assert_byte::@5
    // if(b!=c)
    // [60] if((byte) assert_byte::b#3!=(byte) assert_byte::c#3) goto assert_byte::@1 -- vbuxx_neq_vbuz1_then_la1 
    cpx c
    bne b1
    // [61] phi from assert_byte::@5 to assert_byte::@3 [phi:assert_byte::@5->assert_byte::@3]
    // assert_byte::@3
    // print_str("ok")
    // [62] call print_str 
    // [36] phi from assert_byte::@3 to print_str [phi:assert_byte::@3->print_str]
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@3->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str2 [phi:assert_byte::@3->print_str#1] -- pbuz1=pbuc1 
    lda #<str2
    sta print_str.str
    lda #>str2
    sta print_str.str+1
    jsr print_str
    // [63] phi from assert_byte::@1 assert_byte::@3 to assert_byte::@2 [phi:assert_byte::@1/assert_byte::@3->assert_byte::@2]
    // assert_byte::@2
  b2:
    // print_ln()
    // [64] call print_ln 
    // [43] phi from assert_byte::@2 to print_ln [phi:assert_byte::@2->print_ln]
    // [43] phi (byte*) print_line_cursor#47 = (byte*) print_line_cursor#50 [phi:assert_byte::@2->print_ln#0] -- register_copy 
    jsr print_ln
    // assert_byte::@return
    // }
    // [65] return 
    rts
    // assert_byte::@1
  b1:
    // *BGCOL = RED
    // [66] *((const byte*) BGCOL#0) ← (const byte) RED#0 -- _deref_pbuc1=vbuc2 
    lda #RED
    sta BGCOL
    // print_str("fail!")
    // [67] call print_str 
    // [36] phi from assert_byte::@1 to print_str [phi:assert_byte::@1->print_str]
    // [36] phi (byte*) print_char_cursor#80 = (byte*) print_char_cursor#2 [phi:assert_byte::@1->print_str#0] -- register_copy 
    // [36] phi (byte*) print_str::str#11 = (const string) str1 [phi:assert_byte::@1->print_str#1] -- pbuz1=pbuc1 
    lda #<str1
    sta print_str.str
    lda #>str1
    sta print_str.str+1
    jsr print_str
    jmp b2
}
  // print_cls
// Clear the screen. Also resets current line/char cursor.
print_cls: {
    // memset(print_screen, ' ', 1000)
    // [69] call memset 
    // [71] phi from print_cls to memset [phi:print_cls->memset]
    jsr memset
    // print_cls::@return
    // }
    // [70] return 
    rts
}
  // memset
// Copies the character c (an unsigned char) to the first num characters of the object pointed to by the argument str.
memset: {
    .const c = ' '
    .const num = $3e8
    .label str = $400
    .label end = str+num
    .label dst = $a
    // [72] phi from memset to memset::@1 [phi:memset->memset::@1]
    // [72] phi (byte*) memset::dst#2 = (byte*)(const void*) memset::str#0 [phi:memset->memset::@1#0] -- pbuz1=pbuc1 
    lda #<str
    sta dst
    lda #>str
    sta dst+1
    // [72] phi from memset::@1 to memset::@1 [phi:memset::@1->memset::@1]
    // [72] phi (byte*) memset::dst#2 = (byte*) memset::dst#1 [phi:memset::@1->memset::@1#0] -- register_copy 
    // memset::@1
  b1:
    // *dst = c
    // [73] *((byte*) memset::dst#2) ← (const byte) memset::c#0 -- _deref_pbuz1=vbuc1 
    lda #c
    ldy #0
    sta (dst),y
    // for(char* dst = str; dst!=end; dst++)
    // [74] (byte*) memset::dst#1 ← ++ (byte*) memset::dst#2 -- pbuz1=_inc_pbuz1 
    inc dst
    bne !+
    inc dst+1
  !:
    // [75] if((byte*) memset::dst#1!=(const byte*) memset::end#0) goto memset::@1 -- pbuz1_neq_pbuc1_then_la1 
    lda dst+1
    cmp #>end
    bne b1
    lda dst
    cmp #<end
    bne b1
    // memset::@return
    // }
    // [76] return 
    rts
}
  // File Data
  msg: .text "0=0@"
  msg1: .text "0+2=2@"
  str: .text " @"
  str1: .text "fail!@"
  str2: .text "ok@"

