@begin: scope:[]  from
  [0] phi()
  to:@1
@1: scope:[]  from @begin
  [1] (byte) idx ← (byte) 0
  to:@2
@2: scope:[]  from @1
  [2] phi()
  [3] call main 
  to:@end
@end: scope:[]  from @2
  [4] phi()

(void()) main()
main: scope:[main]  from @2
  [5] phi()
  [6] call do10 
  to:main::@1
main::@1: scope:[main]  from main
  [7] phi()
  [8] call do10 
  to:main::@return
main::@return: scope:[main]  from main::@1
  [9] return 
  to:@return

(void()) do10((void()*) do10::fn)
do10: scope:[do10]  from main main::@1
  [10] (void()*) do10::fn#3 ← phi( main/&(void()) hello() main::@1/&(void()) world() )
  to:do10::@1
do10::@1: scope:[do10]  from do10 do10::@1
  [11] (byte) do10::i#2 ← phi( do10/(byte) 0 do10::@1/(byte) do10::i#1 )
  [12] call *((void()*) do10::fn#3) 
  [13] (byte) do10::i#1 ← ++ (byte) do10::i#2
  [14] if((byte) do10::i#1!=(byte) $a) goto do10::@1
  to:do10::@return
do10::@return: scope:[do10]  from do10::@1
  [15] return 
  to:@return

(void()) world()
world: scope:[world]  from
  [16] phi()
  [17] call print 
  to:world::@return
world::@return: scope:[world]  from world
  [18] return 
  to:@return

(void()) print((byte*) print::msg)
print: scope:[print]  from hello world
  [19] (byte*) print::msg#3 ← phi( hello/(const byte*) hello::msg world/(const byte*) world::msg )
  to:print::@1
print::@1: scope:[print]  from print print::@1
  [20] (byte) print::i#2 ← phi( print/(byte) 0 print::@1/(byte) print::i#1 )
  [21] *((const byte*) SCREEN + (byte) idx) ← *((byte*) print::msg#3 + (byte) print::i#2)
  [22] (byte) idx ← ++ (byte) idx
  [23] (byte) print::i#1 ← ++ (byte) print::i#2
  [24] if((byte) 0!=*((byte*) print::msg#3 + (byte) print::i#1)) goto print::@1
  to:print::@return
print::@return: scope:[print]  from print::@1
  [25] return 
  to:@return

(void()) hello()
hello: scope:[hello]  from
  [26] phi()
  [27] call print 
  to:hello::@return
hello::@return: scope:[hello]  from hello
  [28] return 
  to:@return
