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

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

(void()) lvaluevar()
lvaluevar: scope:[lvaluevar]  from main::@3
  [13] phi()
  to:lvaluevar::@1
lvaluevar::@1: scope:[lvaluevar]  from lvaluevar lvaluevar::@2
  [14] (byte*) lvaluevar::screen#2 ← phi( lvaluevar/(byte*) 1024 lvaluevar::@2/(byte*) lvaluevar::screen#1 )
  [14] (byte) lvaluevar::i#2 ← phi( lvaluevar/(byte) 2 lvaluevar::@2/(byte) lvaluevar::i#1 )
  [15] if((byte) lvaluevar::i#2<(byte) $a) goto lvaluevar::@2
  to:lvaluevar::@return
lvaluevar::@return: scope:[lvaluevar]  from lvaluevar::@1
  [16] return 
  to:@return
lvaluevar::@2: scope:[lvaluevar]  from lvaluevar::@1
  [17] *((byte*) lvaluevar::screen#2) ← (const byte) lvaluevar::b
  [18] (byte*) lvaluevar::screen#1 ← ++ (byte*) lvaluevar::screen#2
  [19] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#2
  to:lvaluevar::@1

(void()) rvaluevar()
rvaluevar: scope:[rvaluevar]  from main::@2
  [20] phi()
  to:rvaluevar::@1
rvaluevar::@1: scope:[rvaluevar]  from rvaluevar rvaluevar::@2
  [21] (byte) rvaluevar::b#2 ← phi( rvaluevar/(byte) 0 rvaluevar::@2/(byte) rvaluevar::b#1 )
  [21] (byte*) rvaluevar::screen#2 ← phi( rvaluevar/(byte*) 1024 rvaluevar::@2/(byte*) rvaluevar::screen#1 )
  [21] (byte) rvaluevar::i#2 ← phi( rvaluevar/(byte) 2 rvaluevar::@2/(byte) rvaluevar::i#1 )
  [22] if((byte) rvaluevar::i#2<(byte) $a) goto rvaluevar::@2
  to:rvaluevar::@3
rvaluevar::@3: scope:[rvaluevar]  from rvaluevar::@1
  [23] *((const byte*) rvaluevar::screen2) ← (byte) rvaluevar::b#2
  to:rvaluevar::@return
rvaluevar::@return: scope:[rvaluevar]  from rvaluevar::@3
  [24] return 
  to:@return
rvaluevar::@2: scope:[rvaluevar]  from rvaluevar::@1
  [25] (byte) rvaluevar::b#1 ← *((byte*) rvaluevar::screen#2)
  [26] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2
  [27] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2
  to:rvaluevar::@1

(void()) rvalue()
rvalue: scope:[rvalue]  from main::@1
  [28] (byte) rvalue::b#1 ← *((const byte*) rvalue::SCREEN+(byte) 1)
  to:rvalue::@1
rvalue::@1: scope:[rvalue]  from rvalue rvalue::@2
  [29] (byte) rvalue::b#3 ← phi( rvalue/(byte) rvalue::b#1 rvalue::@2/(byte) rvalue::b#2 )
  [29] (byte) rvalue::i#2 ← phi( rvalue/(byte) 2 rvalue::@2/(byte) rvalue::i#1 )
  [30] if((byte) rvalue::i#2<(byte) $a) goto rvalue::@2
  to:rvalue::@3
rvalue::@3: scope:[rvalue]  from rvalue::@1
  [31] *((const byte*) rvalue::screen2) ← (byte) rvalue::b#3
  to:rvalue::@return
rvalue::@return: scope:[rvalue]  from rvalue::@3
  [32] return 
  to:@return
rvalue::@2: scope:[rvalue]  from rvalue::@1
  [33] (byte) rvalue::b#2 ← *((const byte*) rvalue::SCREEN + (byte) rvalue::i#2)
  [34] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2
  to:rvalue::@1

(void()) lvalue()
lvalue: scope:[lvalue]  from main
  [35] *((const byte*) lvalue::SCREEN) ← (byte) 1
  [36] *((const byte*) lvalue::SCREEN+(byte) 1) ← (byte) 2
  to:lvalue::@1
lvalue::@1: scope:[lvalue]  from lvalue lvalue::@2
  [37] (byte) lvalue::i#2 ← phi( lvalue/(byte) 2 lvalue::@2/(byte) lvalue::i#1 )
  [38] if((byte) lvalue::i#2<(byte) $a) goto lvalue::@2
  to:lvalue::@return
lvalue::@return: scope:[lvalue]  from lvalue::@1
  [39] return 
  to:@return
lvalue::@2: scope:[lvalue]  from lvalue::@1
  [40] *((const byte*) lvalue::SCREEN + (byte) lvalue::i#2) ← (byte) 3
  [41] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2
  to:lvalue::@1
