PARSING src/test/java/dk/camelot64/kickc/test/kc/voronoi.kc
// The screen
byte *SCREEN = $0400;
byte *COLORS = $D800;

byte FILL = 230;

// The total number of voronoi points
byte numpoints = 6;

// Points to create the Voronoi from
byte[] XPOS = {5, 15, 6, 34, 21 ,31};
byte[] YPOS = {5, 8, 14, 2, 17, 22};
byte[] COLS = {1, 2, 3, 4, 5, 7};

void main() {
  initscreen();
  do {
    render();
    animate();
  } while(true);
}

void animate() {
    XPOS[0] = XPOS[0]+1;
    if(XPOS[0]==40) {
      XPOS[0] = 0;
    }
    YPOS[0] = YPOS[0]+1;
    if(YPOS[0]==25) {
      YPOS[0] = 0;
    }
    XPOS[1] = XPOS[1]-1;
    if(XPOS[1]==255) {
      XPOS[1] = 40;
    }
    YPOS[2] = YPOS[2]+1;
    if(YPOS[2]==25) {
      YPOS[2] = 0;
    }
    YPOS[3] = YPOS[3]-1;
    if(YPOS[3]==255) {
      YPOS[3] = 25;
      XPOS[3] = XPOS[3]+7;
      if(XPOS[3]>=40) {
        XPOS[3] = XPOS[3]-40;
      }
    }
}

void initscreen() {
  for( byte* screen = SCREEN; screen<SCREEN+$03e8; ++screen) {
    *screen = FILL;
  }
}

void render() {
  byte* colline = COLORS;
  for( byte y : 0.. 24) {
    for( byte x : 0..39) {
      byte col = findcol(x, y);
      colline[x] = col;
    }
    colline = colline+40;
  }
}

byte findcol(byte x, byte y) {
  byte mindiff = 255;
  byte mincol = 0;
  for( byte i=0; i<numpoints; ++i) {
     byte xp = XPOS[i];
     byte yp = YPOS[i];
     if(x==xp) {
       if(y==yp) {
         return 0;
       }
     }
     byte diff;
     if(x<xp) {
       diff = xp-x;
     } else {
       diff = x-xp;
     }
     if(y<yp) {
       diff = diff + (yp-y);
     } else {
       diff = diff + (y-yp);
     }
     if(diff<mindiff) {
       mindiff=diff;
       mincol = COLS[i];
     }
  }
  return mincol;
}



Adding pre/post-modifier (byte*) initscreen::screen ← ++ (byte*) initscreen::screen
Adding pre/post-modifier (byte) findcol::i ← ++ (byte) findcol::i

STATEMENTS
  (byte*) SCREEN ← (word/signed word/dword/signed dword) 1024
  (byte*) COLORS ← (word/dword/signed dword) 55296
  (byte) FILL ← (byte/word/signed word/dword/signed dword) 230
  (byte) numpoints ← (byte/signed byte/word/signed word/dword/signed dword) 6
  (byte[]) XPOS ← { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 15, (byte/signed byte/word/signed word/dword/signed dword) 6, (byte/signed byte/word/signed word/dword/signed dword) 34, (byte/signed byte/word/signed word/dword/signed dword) 21, (byte/signed byte/word/signed word/dword/signed dword) 31 }
  (byte[]) YPOS ← { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 14, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 22 }
  (byte[]) COLS ← { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7 }
proc (void()) main()
  (void~) main::$0 ← call initscreen 
main::@1:
  (void~) main::$1 ← call render 
  (void~) main::$2 ← call animate 
  if(true) goto main::@1
main::@return:
  return 
endproc // main()
proc (void()) animate()
  (byte/word~) animate::$0 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$0
  (boolean~) animate::$1 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) == (byte/signed byte/word/signed word/dword/signed dword) 40
  (boolean~) animate::$2 ← ! (boolean~) animate::$1
  if((boolean~) animate::$2) goto animate::@1
  *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
animate::@1:
  (byte/word~) animate::$3 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$3
  (boolean~) animate::$4 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) == (byte/signed byte/word/signed word/dword/signed dword) 25
  (boolean~) animate::$5 ← ! (boolean~) animate::$4
  if((boolean~) animate::$5) goto animate::@2
  *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
animate::@2:
  (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$6
  (boolean~) animate::$7 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) == (byte/word/signed word/dword/signed dword) 255
  (boolean~) animate::$8 ← ! (boolean~) animate::$7
  if((boolean~) animate::$8) goto animate::@3
  *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 40
animate::@3:
  (byte/word~) animate::$9 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/word~) animate::$9
  (boolean~) animate::$10 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) == (byte/signed byte/word/signed word/dword/signed dword) 25
  (boolean~) animate::$11 ← ! (boolean~) animate::$10
  if((boolean~) animate::$11) goto animate::@4
  *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 0
animate::@4:
  (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$12
  (boolean~) animate::$13 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) == (byte/word/signed word/dword/signed dword) 255
  (boolean~) animate::$14 ← ! (boolean~) animate::$13
  if((boolean~) animate::$14) goto animate::@5
  *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25
  (byte/word~) animate::$15 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7
  *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/word~) animate::$15
  (boolean~) animate::$16 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) >= (byte/signed byte/word/signed word/dword/signed dword) 40
  (boolean~) animate::$17 ← ! (boolean~) animate::$16
  if((boolean~) animate::$17) goto animate::@6
  (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40
  *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$18
animate::@6:
animate::@5:
animate::@return:
  return 
endproc // animate()
proc (void()) initscreen()
  (byte*) initscreen::screen ← (byte*) SCREEN
initscreen::@1:
  *((byte*) initscreen::screen) ← (byte) FILL
  (byte*) initscreen::screen ← ++ (byte*) initscreen::screen
  (byte*~) initscreen::$0 ← (byte*) SCREEN + (word/signed word/dword/signed dword) 1000
  (boolean~) initscreen::$1 ← (byte*) initscreen::screen < (byte*~) initscreen::$0
  if((boolean~) initscreen::$1) goto initscreen::@1
initscreen::@return:
  return 
endproc // initscreen()
proc (void()) render()
  (byte*) render::colline ← (byte*) COLORS
  (byte) render::y ← (byte/signed byte/word/signed word/dword/signed dword) 0
render::@1:
  (byte) render::x ← (byte/signed byte/word/signed word/dword/signed dword) 0
render::@2:
  (byte~) render::$0 ← call findcol (byte) render::x (byte) render::y 
  (byte) render::col ← (byte~) render::$0
  *((byte*) render::colline + (byte) render::x) ← (byte) render::col
  (byte) render::x ← ++ (byte) render::x
  (boolean~) render::$1 ← (byte) render::x != (byte/signed byte/word/signed word/dword/signed dword) 40
  if((boolean~) render::$1) goto render::@2
  (byte*~) render::$2 ← (byte*) render::colline + (byte/signed byte/word/signed word/dword/signed dword) 40
  (byte*) render::colline ← (byte*~) render::$2
  (byte) render::y ← ++ (byte) render::y
  (boolean~) render::$3 ← (byte) render::y != (byte/signed byte/word/signed word/dword/signed dword) 25
  if((boolean~) render::$3) goto render::@1
render::@return:
  return 
endproc // render()
proc (byte()) findcol((byte) findcol::x , (byte) findcol::y)
  (byte) findcol::mindiff ← (byte/word/signed word/dword/signed dword) 255
  (byte) findcol::mincol ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) findcol::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
findcol::@1:
  (byte) findcol::xp ← *((byte[]) XPOS + (byte) findcol::i)
  (byte) findcol::yp ← *((byte[]) YPOS + (byte) findcol::i)
  (boolean~) findcol::$0 ← (byte) findcol::x == (byte) findcol::xp
  (boolean~) findcol::$1 ← ! (boolean~) findcol::$0
  if((boolean~) findcol::$1) goto findcol::@2
  (boolean~) findcol::$2 ← (byte) findcol::y == (byte) findcol::yp
  (boolean~) findcol::$3 ← ! (boolean~) findcol::$2
  if((boolean~) findcol::$3) goto findcol::@3
  (byte) findcol::return ← (byte/signed byte/word/signed word/dword/signed dword) 0
  goto findcol::@return
findcol::@3:
findcol::@2:
  (boolean~) findcol::$4 ← (byte) findcol::x < (byte) findcol::xp
  (boolean~) findcol::$5 ← ! (boolean~) findcol::$4
  if((boolean~) findcol::$5) goto findcol::@4
  (byte/signed byte/word/signed word/dword/signed dword~) findcol::$6 ← (byte) findcol::xp - (byte) findcol::x
  (byte) findcol::diff ← (byte/signed byte/word/signed word/dword/signed dword~) findcol::$6
  goto findcol::@5
findcol::@4:
  (byte/signed byte/word/signed word/dword/signed dword~) findcol::$7 ← (byte) findcol::x - (byte) findcol::xp
  (byte) findcol::diff ← (byte/signed byte/word/signed word/dword/signed dword~) findcol::$7
findcol::@5:
  (boolean~) findcol::$8 ← (byte) findcol::y < (byte) findcol::yp
  (boolean~) findcol::$9 ← ! (boolean~) findcol::$8
  if((boolean~) findcol::$9) goto findcol::@6
  (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp - (byte) findcol::y
  (byte/word~) findcol::$11 ← (byte) findcol::diff + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10
  (byte) findcol::diff ← (byte/word~) findcol::$11
  goto findcol::@7
findcol::@6:
  (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y - (byte) findcol::yp
  (byte/word~) findcol::$13 ← (byte) findcol::diff + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12
  (byte) findcol::diff ← (byte/word~) findcol::$13
findcol::@7:
  (boolean~) findcol::$14 ← (byte) findcol::diff < (byte) findcol::mindiff
  (boolean~) findcol::$15 ← ! (boolean~) findcol::$14
  if((boolean~) findcol::$15) goto findcol::@8
  (byte) findcol::mindiff ← (byte) findcol::diff
  (byte) findcol::mincol ← *((byte[]) COLS + (byte) findcol::i)
findcol::@8:
  (byte) findcol::i ← ++ (byte) findcol::i
  (boolean~) findcol::$16 ← (byte) findcol::i < (byte) numpoints
  if((boolean~) findcol::$16) goto findcol::@1
  (byte) findcol::return ← (byte) findcol::mincol
  goto findcol::@return
findcol::@return:
  (byte) findcol::return ← (byte) findcol::return
  return (byte) findcol::return
endproc // findcol()
  call main 

SYMBOLS
(byte*) COLORS
(byte[]) COLS
(byte) FILL
(byte*) SCREEN
(byte[]) XPOS
(byte[]) YPOS
(void()) animate()
(byte/word~) animate::$0
(boolean~) animate::$1
(boolean~) animate::$10
(boolean~) animate::$11
(byte/signed byte/word/signed word/dword/signed dword~) animate::$12
(boolean~) animate::$13
(boolean~) animate::$14
(byte/word~) animate::$15
(boolean~) animate::$16
(boolean~) animate::$17
(byte/signed byte/word/signed word/dword/signed dword~) animate::$18
(boolean~) animate::$2
(byte/word~) animate::$3
(boolean~) animate::$4
(boolean~) animate::$5
(byte/signed byte/word/signed word/dword/signed dword~) animate::$6
(boolean~) animate::$7
(boolean~) animate::$8
(byte/word~) animate::$9
(label) animate::@1
(label) animate::@2
(label) animate::@3
(label) animate::@4
(label) animate::@5
(label) animate::@6
(label) animate::@return
(byte()) findcol((byte) findcol::x , (byte) findcol::y)
(boolean~) findcol::$0
(boolean~) findcol::$1
(byte/signed byte/word/signed word/dword/signed dword~) findcol::$10
(byte/word~) findcol::$11
(byte/signed byte/word/signed word/dword/signed dword~) findcol::$12
(byte/word~) findcol::$13
(boolean~) findcol::$14
(boolean~) findcol::$15
(boolean~) findcol::$16
(boolean~) findcol::$2
(boolean~) findcol::$3
(boolean~) findcol::$4
(boolean~) findcol::$5
(byte/signed byte/word/signed word/dword/signed dword~) findcol::$6
(byte/signed byte/word/signed word/dword/signed dword~) findcol::$7
(boolean~) findcol::$8
(boolean~) findcol::$9
(label) findcol::@1
(label) findcol::@2
(label) findcol::@3
(label) findcol::@4
(label) findcol::@5
(label) findcol::@6
(label) findcol::@7
(label) findcol::@8
(label) findcol::@return
(byte) findcol::diff
(byte) findcol::i
(byte) findcol::mincol
(byte) findcol::mindiff
(byte) findcol::return
(byte) findcol::x
(byte) findcol::xp
(byte) findcol::y
(byte) findcol::yp
(void()) initscreen()
(byte*~) initscreen::$0
(boolean~) initscreen::$1
(label) initscreen::@1
(label) initscreen::@return
(byte*) initscreen::screen
(void()) main()
(void~) main::$0
(void~) main::$1
(void~) main::$2
(label) main::@1
(label) main::@return
(byte) numpoints
(void()) render()
(byte~) render::$0
(boolean~) render::$1
(byte*~) render::$2
(boolean~) render::$3
(label) render::@1
(label) render::@2
(label) render::@return
(byte) render::col
(byte*) render::colline
(byte) render::x
(byte) render::y

Promoting word/signed word/dword/signed dword to byte* in SCREEN ← ((byte*)) 1024
Promoting word/dword/signed dword to byte* in COLORS ← ((byte*)) 55296
INITIAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  (byte*) SCREEN ← ((byte*)) (word/signed word/dword/signed dword) 1024
  (byte*) COLORS ← ((byte*)) (word/dword/signed dword) 55296
  (byte) FILL ← (byte/word/signed word/dword/signed dword) 230
  (byte) numpoints ← (byte/signed byte/word/signed word/dword/signed dword) 6
  (byte[]) XPOS ← { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 15, (byte/signed byte/word/signed word/dword/signed dword) 6, (byte/signed byte/word/signed word/dword/signed dword) 34, (byte/signed byte/word/signed word/dword/signed dword) 21, (byte/signed byte/word/signed word/dword/signed dword) 31 }
  (byte[]) YPOS ← { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 14, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 22 }
  (byte[]) COLS ← { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7 }
  to:@1
main: scope:[main]  from
  (void~) main::$0 ← call initscreen 
  to:main::@1
main::@1: scope:[main]  from main main::@1
  (void~) main::$1 ← call render 
  (void~) main::$2 ← call animate 
  if(true) goto main::@1
  to:main::@2
main::@2: scope:[main]  from main::@1
  to:main::@return
main::@return: scope:[main]  from main::@2
  return 
  to:@return
@1: scope:[]  from @begin
  to:@2
animate: scope:[animate]  from
  (byte/word~) animate::$0 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$0
  (boolean~) animate::$1 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) == (byte/signed byte/word/signed word/dword/signed dword) 40
  (boolean~) animate::$2 ← ! (boolean~) animate::$1
  if((boolean~) animate::$2) goto animate::@1
  to:animate::@7
animate::@1: scope:[animate]  from animate animate::@7
  (byte/word~) animate::$3 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$3
  (boolean~) animate::$4 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) == (byte/signed byte/word/signed word/dword/signed dword) 25
  (boolean~) animate::$5 ← ! (boolean~) animate::$4
  if((boolean~) animate::$5) goto animate::@2
  to:animate::@8
animate::@7: scope:[animate]  from animate
  *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:animate::@1
animate::@2: scope:[animate]  from animate::@1 animate::@8
  (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$6
  (boolean~) animate::$7 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) == (byte/word/signed word/dword/signed dword) 255
  (boolean~) animate::$8 ← ! (boolean~) animate::$7
  if((boolean~) animate::$8) goto animate::@3
  to:animate::@9
animate::@8: scope:[animate]  from animate::@1
  *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:animate::@2
animate::@3: scope:[animate]  from animate::@2 animate::@9
  (byte/word~) animate::$9 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/word~) animate::$9
  (boolean~) animate::$10 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) == (byte/signed byte/word/signed word/dword/signed dword) 25
  (boolean~) animate::$11 ← ! (boolean~) animate::$10
  if((boolean~) animate::$11) goto animate::@4
  to:animate::@10
animate::@9: scope:[animate]  from animate::@2
  *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 40
  to:animate::@3
animate::@4: scope:[animate]  from animate::@10 animate::@3
  (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$12
  (boolean~) animate::$13 ← *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) == (byte/word/signed word/dword/signed dword) 255
  (boolean~) animate::$14 ← ! (boolean~) animate::$13
  if((boolean~) animate::$14) goto animate::@5
  to:animate::@11
animate::@10: scope:[animate]  from animate::@3
  *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:animate::@4
animate::@5: scope:[animate]  from animate::@4 animate::@6
  to:animate::@return
animate::@11: scope:[animate]  from animate::@4
  *((byte[]) YPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25
  (byte/word~) animate::$15 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7
  *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/word~) animate::$15
  (boolean~) animate::$16 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) >= (byte/signed byte/word/signed word/dword/signed dword) 40
  (boolean~) animate::$17 ← ! (boolean~) animate::$16
  if((boolean~) animate::$17) goto animate::@6
  to:animate::@12
animate::@6: scope:[animate]  from animate::@11 animate::@12
  to:animate::@5
animate::@12: scope:[animate]  from animate::@11
  (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40
  *((byte[]) XPOS + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$18
  to:animate::@6
animate::@return: scope:[animate]  from animate::@5
  return 
  to:@return
@2: scope:[]  from @1
  to:@3
initscreen: scope:[initscreen]  from
  (byte*) initscreen::screen ← (byte*) SCREEN
  to:initscreen::@1
initscreen::@1: scope:[initscreen]  from initscreen initscreen::@1
  *((byte*) initscreen::screen) ← (byte) FILL
  (byte*) initscreen::screen ← ++ (byte*) initscreen::screen
  (byte*~) initscreen::$0 ← (byte*) SCREEN + (word/signed word/dword/signed dword) 1000
  (boolean~) initscreen::$1 ← (byte*) initscreen::screen < (byte*~) initscreen::$0
  if((boolean~) initscreen::$1) goto initscreen::@1
  to:initscreen::@2
initscreen::@2: scope:[initscreen]  from initscreen::@1
  to:initscreen::@return
initscreen::@return: scope:[initscreen]  from initscreen::@2
  return 
  to:@return
@3: scope:[]  from @2
  to:@4
render: scope:[render]  from
  (byte*) render::colline ← (byte*) COLORS
  (byte) render::y ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render::@1
render::@1: scope:[render]  from render render::@3
  (byte) render::x ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render::@2
render::@2: scope:[render]  from render::@1 render::@2
  (byte~) render::$0 ← call findcol (byte) render::x (byte) render::y 
  (byte) render::col ← (byte~) render::$0
  *((byte*) render::colline + (byte) render::x) ← (byte) render::col
  (byte) render::x ← ++ (byte) render::x
  (boolean~) render::$1 ← (byte) render::x != (byte/signed byte/word/signed word/dword/signed dword) 40
  if((boolean~) render::$1) goto render::@2
  to:render::@3
render::@3: scope:[render]  from render::@2
  (byte*~) render::$2 ← (byte*) render::colline + (byte/signed byte/word/signed word/dword/signed dword) 40
  (byte*) render::colline ← (byte*~) render::$2
  (byte) render::y ← ++ (byte) render::y
  (boolean~) render::$3 ← (byte) render::y != (byte/signed byte/word/signed word/dword/signed dword) 25
  if((boolean~) render::$3) goto render::@1
  to:render::@4
render::@4: scope:[render]  from render::@3
  to:render::@return
render::@return: scope:[render]  from render::@4
  return 
  to:@return
@4: scope:[]  from @3
  to:@5
findcol: scope:[findcol]  from
  (byte) findcol::mindiff ← (byte/word/signed word/dword/signed dword) 255
  (byte) findcol::mincol ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) findcol::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:findcol::@1
findcol::@1: scope:[findcol]  from findcol findcol::@8
  (byte) findcol::xp ← *((byte[]) XPOS + (byte) findcol::i)
  (byte) findcol::yp ← *((byte[]) YPOS + (byte) findcol::i)
  (boolean~) findcol::$0 ← (byte) findcol::x == (byte) findcol::xp
  (boolean~) findcol::$1 ← ! (boolean~) findcol::$0
  if((boolean~) findcol::$1) goto findcol::@2
  to:findcol::@9
findcol::@2: scope:[findcol]  from findcol::@1 findcol::@3
  (boolean~) findcol::$4 ← (byte) findcol::x < (byte) findcol::xp
  (boolean~) findcol::$5 ← ! (boolean~) findcol::$4
  if((boolean~) findcol::$5) goto findcol::@4
  to:findcol::@12
findcol::@9: scope:[findcol]  from findcol::@1
  (boolean~) findcol::$2 ← (byte) findcol::y == (byte) findcol::yp
  (boolean~) findcol::$3 ← ! (boolean~) findcol::$2
  if((boolean~) findcol::$3) goto findcol::@3
  to:findcol::@10
findcol::@3: scope:[findcol]  from findcol::@11 findcol::@9
  to:findcol::@2
findcol::@10: scope:[findcol]  from findcol::@9
  (byte) findcol::return ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:findcol::@return
findcol::@return: scope:[findcol]  from findcol::@10 findcol::@17 findcol::@18
  (byte) findcol::return ← (byte) findcol::return
  return (byte) findcol::return
  to:@return
findcol::@11: scope:[findcol]  from
  to:findcol::@3
findcol::@4: scope:[findcol]  from findcol::@13 findcol::@2
  (byte/signed byte/word/signed word/dword/signed dword~) findcol::$7 ← (byte) findcol::x - (byte) findcol::xp
  (byte) findcol::diff ← (byte/signed byte/word/signed word/dword/signed dword~) findcol::$7
  to:findcol::@5
findcol::@12: scope:[findcol]  from findcol::@2
  (byte/signed byte/word/signed word/dword/signed dword~) findcol::$6 ← (byte) findcol::xp - (byte) findcol::x
  (byte) findcol::diff ← (byte/signed byte/word/signed word/dword/signed dword~) findcol::$6
  to:findcol::@5
findcol::@5: scope:[findcol]  from findcol::@12 findcol::@4
  (boolean~) findcol::$8 ← (byte) findcol::y < (byte) findcol::yp
  (boolean~) findcol::$9 ← ! (boolean~) findcol::$8
  if((boolean~) findcol::$9) goto findcol::@6
  to:findcol::@14
findcol::@13: scope:[findcol]  from
  to:findcol::@4
findcol::@6: scope:[findcol]  from findcol::@15 findcol::@5
  (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y - (byte) findcol::yp
  (byte/word~) findcol::$13 ← (byte) findcol::diff + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12
  (byte) findcol::diff ← (byte/word~) findcol::$13
  to:findcol::@7
findcol::@14: scope:[findcol]  from findcol::@5
  (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp - (byte) findcol::y
  (byte/word~) findcol::$11 ← (byte) findcol::diff + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10
  (byte) findcol::diff ← (byte/word~) findcol::$11
  to:findcol::@7
findcol::@7: scope:[findcol]  from findcol::@14 findcol::@6
  (boolean~) findcol::$14 ← (byte) findcol::diff < (byte) findcol::mindiff
  (boolean~) findcol::$15 ← ! (boolean~) findcol::$14
  if((boolean~) findcol::$15) goto findcol::@8
  to:findcol::@16
findcol::@15: scope:[findcol]  from
  to:findcol::@6
findcol::@8: scope:[findcol]  from findcol::@16 findcol::@7
  (byte) findcol::i ← ++ (byte) findcol::i
  (boolean~) findcol::$16 ← (byte) findcol::i < (byte) numpoints
  if((boolean~) findcol::$16) goto findcol::@1
  to:findcol::@17
findcol::@16: scope:[findcol]  from findcol::@7
  (byte) findcol::mindiff ← (byte) findcol::diff
  (byte) findcol::mincol ← *((byte[]) COLS + (byte) findcol::i)
  to:findcol::@8
findcol::@17: scope:[findcol]  from findcol::@8
  (byte) findcol::return ← (byte) findcol::mincol
  to:findcol::@return
findcol::@18: scope:[findcol]  from
  to:findcol::@return
@5: scope:[]  from @4
  call main 
  to:@end
@end: scope:[]  from @5

Eliminating unused variable - keeping the call (void~) main::$0
Eliminating unused variable - keeping the call (void~) main::$1
Eliminating unused variable - keeping the call (void~) main::$2
Removing empty block main::@2
Removing empty block @1
Removing empty block @2
Removing empty block initscreen::@2
Removing empty block @3
Removing empty block render::@4
Removing empty block @4
Removing empty block findcol::@11
Removing empty block findcol::@13
Removing empty block findcol::@15
Removing empty block findcol::@18
PROCEDURE MODIFY VARIABLE ANALYSIS

Completing Phi functions...
Completing Phi functions...
Completing Phi functions...
Completing Phi functions...
Completing Phi functions...
Completing Phi functions...
Completing Phi functions...
Completing Phi functions...
Completing Phi functions...
Completing Phi functions...
Completing Phi functions...
Completing Phi functions...
Completing Phi functions...
Completing Phi functions...
Completing Phi functions...

CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
@begin: scope:[]  from
  (byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
  (byte*) COLORS#0 ← ((byte*)) (word/dword/signed dword) 55296
  (byte) FILL#0 ← (byte/word/signed word/dword/signed dword) 230
  (byte) numpoints#0 ← (byte/signed byte/word/signed word/dword/signed dword) 6
  (byte[]) XPOS#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 15, (byte/signed byte/word/signed word/dword/signed dword) 6, (byte/signed byte/word/signed word/dword/signed dword) 34, (byte/signed byte/word/signed word/dword/signed dword) 21, (byte/signed byte/word/signed word/dword/signed dword) 31 }
  (byte[]) YPOS#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 14, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 22 }
  (byte[]) COLS#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7 }
  to:@5
main: scope:[main]  from @5
  (byte) numpoints#22 ← phi( @5/(byte) numpoints#24 )
  (byte*) COLORS#5 ← phi( @5/(byte*) COLORS#7 )
  (byte) FILL#3 ← phi( @5/(byte) FILL#4 )
  (byte*) SCREEN#3 ← phi( @5/(byte*) SCREEN#4 )
  call initscreen param-assignment
  to:main::@3
main::@3: scope:[main]  from main
  (byte) numpoints#20 ← phi( main/(byte) numpoints#22 )
  (byte*) COLORS#3 ← phi( main/(byte*) COLORS#5 )
  to:main::@1
main::@1: scope:[main]  from main::@3 main::@5
  (byte) numpoints#19 ← phi( main::@3/(byte) numpoints#20 main::@5/(byte) numpoints#21 )
  (byte*) COLORS#2 ← phi( main::@3/(byte*) COLORS#3 main::@5/(byte*) COLORS#4 )
  call render param-assignment
  to:main::@4
main::@4: scope:[main]  from main::@1
  (byte) numpoints#23 ← phi( main::@1/(byte) numpoints#19 )
  (byte*) COLORS#6 ← phi( main::@1/(byte*) COLORS#2 )
  call animate param-assignment
  to:main::@5
main::@5: scope:[main]  from main::@4
  (byte) numpoints#21 ← phi( main::@4/(byte) numpoints#23 )
  (byte*) COLORS#4 ← phi( main::@4/(byte*) COLORS#6 )
  if(true) goto main::@1
  to:main::@return
main::@return: scope:[main]  from main::@5
  return 
  to:@return
animate: scope:[animate]  from main::@4
  (byte/word~) animate::$0 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$0
  (boolean~) animate::$1 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) == (byte/signed byte/word/signed word/dword/signed dword) 40
  (boolean~) animate::$2 ← ! (boolean~) animate::$1
  if((boolean~) animate::$2) goto animate::@1
  to:animate::@7
animate::@1: scope:[animate]  from animate animate::@7
  (byte/word~) animate::$3 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$3
  (boolean~) animate::$4 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) == (byte/signed byte/word/signed word/dword/signed dword) 25
  (boolean~) animate::$5 ← ! (boolean~) animate::$4
  if((boolean~) animate::$5) goto animate::@2
  to:animate::@8
animate::@7: scope:[animate]  from animate
  *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:animate::@1
animate::@2: scope:[animate]  from animate::@1 animate::@8
  (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$6
  (boolean~) animate::$7 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) == (byte/word/signed word/dword/signed dword) 255
  (boolean~) animate::$8 ← ! (boolean~) animate::$7
  if((boolean~) animate::$8) goto animate::@3
  to:animate::@9
animate::@8: scope:[animate]  from animate::@1
  *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:animate::@2
animate::@3: scope:[animate]  from animate::@2 animate::@9
  (byte/word~) animate::$9 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/word~) animate::$9
  (boolean~) animate::$10 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) == (byte/signed byte/word/signed word/dword/signed dword) 25
  (boolean~) animate::$11 ← ! (boolean~) animate::$10
  if((boolean~) animate::$11) goto animate::@4
  to:animate::@10
animate::@9: scope:[animate]  from animate::@2
  *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 40
  to:animate::@3
animate::@4: scope:[animate]  from animate::@10 animate::@3
  (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1
  *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$12
  (boolean~) animate::$13 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) == (byte/word/signed word/dword/signed dword) 255
  (boolean~) animate::$14 ← ! (boolean~) animate::$13
  if((boolean~) animate::$14) goto animate::@5
  to:animate::@11
animate::@10: scope:[animate]  from animate::@3
  *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:animate::@4
animate::@5: scope:[animate]  from animate::@4
  to:animate::@return
animate::@11: scope:[animate]  from animate::@4
  *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25
  (byte/word~) animate::$15 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7
  *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/word~) animate::$15
  (boolean~) animate::$16 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) >= (byte/signed byte/word/signed word/dword/signed dword) 40
  (boolean~) animate::$17 ← ! (boolean~) animate::$16
  if((boolean~) animate::$17) goto animate::@6
  to:animate::@12
animate::@6: scope:[animate]  from animate::@11
  to:animate::@return
animate::@12: scope:[animate]  from animate::@11
  (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40
  *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$18
  to:animate::@return
animate::@return: scope:[animate]  from animate::@12 animate::@5 animate::@6
  return 
  to:@return
initscreen: scope:[initscreen]  from main
  (byte) FILL#2 ← phi( main/(byte) FILL#3 )
  (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#3 )
  (byte*) initscreen::screen#0 ← (byte*) SCREEN#1
  to:initscreen::@1
initscreen::@1: scope:[initscreen]  from initscreen initscreen::@1
  (byte*) SCREEN#2 ← phi( initscreen/(byte*) SCREEN#1 initscreen::@1/(byte*) SCREEN#2 )
  (byte*) initscreen::screen#2 ← phi( initscreen/(byte*) initscreen::screen#0 initscreen::@1/(byte*) initscreen::screen#1 )
  (byte) FILL#1 ← phi( initscreen/(byte) FILL#2 initscreen::@1/(byte) FILL#1 )
  *((byte*) initscreen::screen#2) ← (byte) FILL#1
  (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2
  (byte*~) initscreen::$0 ← (byte*) SCREEN#2 + (word/signed word/dword/signed dword) 1000
  (boolean~) initscreen::$1 ← (byte*) initscreen::screen#1 < (byte*~) initscreen::$0
  if((boolean~) initscreen::$1) goto initscreen::@1
  to:initscreen::@return
initscreen::@return: scope:[initscreen]  from initscreen::@1
  return 
  to:@return
render: scope:[render]  from main::@1
  (byte) numpoints#17 ← phi( main::@1/(byte) numpoints#19 )
  (byte*) COLORS#1 ← phi( main::@1/(byte*) COLORS#2 )
  (byte*) render::colline#0 ← (byte*) COLORS#1
  (byte) render::y#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render::@1
render::@1: scope:[render]  from render render::@3
  (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#18 )
  (byte*) render::colline#5 ← phi( render/(byte*) render::colline#0 render::@3/(byte*) render::colline#1 )
  (byte) render::y#4 ← phi( render/(byte) render::y#0 render::@3/(byte) render::y#1 )
  (byte) render::x#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:render::@2
render::@2: scope:[render]  from render::@1 render::@5
  (byte) numpoints#14 ← phi( render::@1/(byte) numpoints#15 render::@5/(byte) numpoints#16 )
  (byte*) render::colline#4 ← phi( render::@1/(byte*) render::colline#5 render::@5/(byte*) render::colline#2 )
  (byte) render::y#2 ← phi( render::@1/(byte) render::y#4 render::@5/(byte) render::y#5 )
  (byte) render::x#2 ← phi( render::@1/(byte) render::x#0 render::@5/(byte) render::x#1 )
  (byte) findcol::x#0 ← (byte) render::x#2
  (byte) findcol::y#0 ← (byte) render::y#2
  call findcol param-assignment
  (byte) findcol::return#0 ← (byte) findcol::return#2
  to:render::@5
render::@5: scope:[render]  from render::@2
  (byte) numpoints#16 ← phi( render::@2/(byte) numpoints#14 )
  (byte) render::y#5 ← phi( render::@2/(byte) render::y#2 )
  (byte) render::x#3 ← phi( render::@2/(byte) render::x#2 )
  (byte*) render::colline#2 ← phi( render::@2/(byte*) render::colline#4 )
  (byte) findcol::return#4 ← phi( render::@2/(byte) findcol::return#0 )
  (byte~) render::$0 ← (byte) findcol::return#4
  (byte) render::col#0 ← (byte~) render::$0
  *((byte*) render::colline#2 + (byte) render::x#3) ← (byte) render::col#0
  (byte) render::x#1 ← ++ (byte) render::x#3
  (boolean~) render::$1 ← (byte) render::x#1 != (byte/signed byte/word/signed word/dword/signed dword) 40
  if((boolean~) render::$1) goto render::@2
  to:render::@3
render::@3: scope:[render]  from render::@5
  (byte) numpoints#18 ← phi( render::@5/(byte) numpoints#16 )
  (byte) render::y#3 ← phi( render::@5/(byte) render::y#5 )
  (byte*) render::colline#3 ← phi( render::@5/(byte*) render::colline#2 )
  (byte*~) render::$2 ← (byte*) render::colline#3 + (byte/signed byte/word/signed word/dword/signed dword) 40
  (byte*) render::colline#1 ← (byte*~) render::$2
  (byte) render::y#1 ← ++ (byte) render::y#3
  (boolean~) render::$3 ← (byte) render::y#1 != (byte/signed byte/word/signed word/dword/signed dword) 25
  if((boolean~) render::$3) goto render::@1
  to:render::@return
render::@return: scope:[render]  from render::@3
  return 
  to:@return
findcol: scope:[findcol]  from render::@2
  (byte) numpoints#12 ← phi( render::@2/(byte) numpoints#14 )
  (byte) findcol::y#8 ← phi( render::@2/(byte) findcol::y#0 )
  (byte) findcol::x#5 ← phi( render::@2/(byte) findcol::x#0 )
  (byte) findcol::mindiff#0 ← (byte/word/signed word/dword/signed dword) 255
  (byte) findcol::mincol#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  (byte) findcol::i#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:findcol::@1
findcol::@1: scope:[findcol]  from findcol findcol::@8
  (byte) findcol::mincol#11 ← phi( findcol/(byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#3 )
  (byte) numpoints#10 ← phi( findcol/(byte) numpoints#12 findcol::@8/(byte) numpoints#1 )
  (byte) findcol::mindiff#9 ← phi( findcol/(byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 )
  (byte) findcol::y#5 ← phi( findcol/(byte) findcol::y#8 findcol::@8/(byte) findcol::y#9 )
  (byte) findcol::x#1 ← phi( findcol/(byte) findcol::x#5 findcol::@8/(byte) findcol::x#6 )
  (byte) findcol::i#2 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 )
  (byte) findcol::xp#0 ← *((byte[]) XPOS#0 + (byte) findcol::i#2)
  (byte) findcol::yp#0 ← *((byte[]) YPOS#0 + (byte) findcol::i#2)
  (boolean~) findcol::$0 ← (byte) findcol::x#1 == (byte) findcol::xp#0
  (boolean~) findcol::$1 ← ! (boolean~) findcol::$0
  if((boolean~) findcol::$1) goto findcol::@2
  to:findcol::@9
findcol::@2: scope:[findcol]  from findcol::@1 findcol::@3
  (byte) findcol::mincol#10 ← phi( findcol::@1/(byte) findcol::mincol#11 findcol::@3/(byte) findcol::mincol#12 )
  (byte) numpoints#9 ← phi( findcol::@1/(byte) numpoints#10 findcol::@3/(byte) numpoints#11 )
  (byte) findcol::i#11 ← phi( findcol::@1/(byte) findcol::i#2 findcol::@3/(byte) findcol::i#12 )
  (byte) findcol::mindiff#8 ← phi( findcol::@1/(byte) findcol::mindiff#9 findcol::@3/(byte) findcol::mindiff#10 )
  (byte) findcol::yp#7 ← phi( findcol::@1/(byte) findcol::yp#0 findcol::@3/(byte) findcol::yp#8 )
  (byte) findcol::y#10 ← phi( findcol::@1/(byte) findcol::y#5 findcol::@3/(byte) findcol::y#11 )
  (byte) findcol::xp#1 ← phi( findcol::@1/(byte) findcol::xp#0 findcol::@3/(byte) findcol::xp#4 )
  (byte) findcol::x#2 ← phi( findcol::@1/(byte) findcol::x#1 findcol::@3/(byte) findcol::x#7 )
  (boolean~) findcol::$4 ← (byte) findcol::x#2 < (byte) findcol::xp#1
  (boolean~) findcol::$5 ← ! (boolean~) findcol::$4
  if((boolean~) findcol::$5) goto findcol::@4
  to:findcol::@12
findcol::@9: scope:[findcol]  from findcol::@1
  (byte) findcol::mincol#13 ← phi( findcol::@1/(byte) findcol::mincol#11 )
  (byte) numpoints#13 ← phi( findcol::@1/(byte) numpoints#10 )
  (byte) findcol::i#13 ← phi( findcol::@1/(byte) findcol::i#2 )
  (byte) findcol::mindiff#12 ← phi( findcol::@1/(byte) findcol::mindiff#9 )
  (byte) findcol::xp#5 ← phi( findcol::@1/(byte) findcol::xp#0 )
  (byte) findcol::x#8 ← phi( findcol::@1/(byte) findcol::x#1 )
  (byte) findcol::yp#1 ← phi( findcol::@1/(byte) findcol::yp#0 )
  (byte) findcol::y#1 ← phi( findcol::@1/(byte) findcol::y#5 )
  (boolean~) findcol::$2 ← (byte) findcol::y#1 == (byte) findcol::yp#1
  (boolean~) findcol::$3 ← ! (boolean~) findcol::$2
  if((boolean~) findcol::$3) goto findcol::@3
  to:findcol::@10
findcol::@3: scope:[findcol]  from findcol::@9
  (byte) findcol::mincol#12 ← phi( findcol::@9/(byte) findcol::mincol#13 )
  (byte) numpoints#11 ← phi( findcol::@9/(byte) numpoints#13 )
  (byte) findcol::i#12 ← phi( findcol::@9/(byte) findcol::i#13 )
  (byte) findcol::mindiff#10 ← phi( findcol::@9/(byte) findcol::mindiff#12 )
  (byte) findcol::yp#8 ← phi( findcol::@9/(byte) findcol::yp#1 )
  (byte) findcol::y#11 ← phi( findcol::@9/(byte) findcol::y#1 )
  (byte) findcol::xp#4 ← phi( findcol::@9/(byte) findcol::xp#5 )
  (byte) findcol::x#7 ← phi( findcol::@9/(byte) findcol::x#8 )
  to:findcol::@2
findcol::@10: scope:[findcol]  from findcol::@9
  (byte) findcol::return#1 ← (byte/signed byte/word/signed word/dword/signed dword) 0
  to:findcol::@return
findcol::@return: scope:[findcol]  from findcol::@10 findcol::@17
  (byte) findcol::return#5 ← phi( findcol::@10/(byte) findcol::return#1 findcol::@17/(byte) findcol::return#3 )
  (byte) findcol::return#2 ← (byte) findcol::return#5
  return 
  to:@return
findcol::@4: scope:[findcol]  from findcol::@2
  (byte) findcol::mincol#9 ← phi( findcol::@2/(byte) findcol::mincol#10 )
  (byte) numpoints#8 ← phi( findcol::@2/(byte) numpoints#9 )
  (byte) findcol::i#10 ← phi( findcol::@2/(byte) findcol::i#11 )
  (byte) findcol::mindiff#7 ← phi( findcol::@2/(byte) findcol::mindiff#8 )
  (byte) findcol::yp#6 ← phi( findcol::@2/(byte) findcol::yp#7 )
  (byte) findcol::y#7 ← phi( findcol::@2/(byte) findcol::y#10 )
  (byte) findcol::xp#2 ← phi( findcol::@2/(byte) findcol::xp#1 )
  (byte) findcol::x#3 ← phi( findcol::@2/(byte) findcol::x#2 )
  (byte/signed byte/word/signed word/dword/signed dword~) findcol::$7 ← (byte) findcol::x#3 - (byte) findcol::xp#2
  (byte) findcol::diff#0 ← (byte/signed byte/word/signed word/dword/signed dword~) findcol::$7
  to:findcol::@5
findcol::@12: scope:[findcol]  from findcol::@2
  (byte) findcol::mincol#8 ← phi( findcol::@2/(byte) findcol::mincol#10 )
  (byte) numpoints#7 ← phi( findcol::@2/(byte) numpoints#9 )
  (byte) findcol::i#9 ← phi( findcol::@2/(byte) findcol::i#11 )
  (byte) findcol::mindiff#6 ← phi( findcol::@2/(byte) findcol::mindiff#8 )
  (byte) findcol::yp#5 ← phi( findcol::@2/(byte) findcol::yp#7 )
  (byte) findcol::y#6 ← phi( findcol::@2/(byte) findcol::y#10 )
  (byte) findcol::x#4 ← phi( findcol::@2/(byte) findcol::x#2 )
  (byte) findcol::xp#3 ← phi( findcol::@2/(byte) findcol::xp#1 )
  (byte/signed byte/word/signed word/dword/signed dword~) findcol::$6 ← (byte) findcol::xp#3 - (byte) findcol::x#4
  (byte) findcol::diff#1 ← (byte/signed byte/word/signed word/dword/signed dword~) findcol::$6
  to:findcol::@5
findcol::@5: scope:[findcol]  from findcol::@12 findcol::@4
  (byte) findcol::mincol#7 ← phi( findcol::@12/(byte) findcol::mincol#8 findcol::@4/(byte) findcol::mincol#9 )
  (byte) findcol::x#13 ← phi( findcol::@12/(byte) findcol::x#4 findcol::@4/(byte) findcol::x#3 )
  (byte) numpoints#6 ← phi( findcol::@12/(byte) numpoints#7 findcol::@4/(byte) numpoints#8 )
  (byte) findcol::i#8 ← phi( findcol::@12/(byte) findcol::i#9 findcol::@4/(byte) findcol::i#10 )
  (byte) findcol::mindiff#5 ← phi( findcol::@12/(byte) findcol::mindiff#6 findcol::@4/(byte) findcol::mindiff#7 )
  (byte) findcol::diff#8 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 )
  (byte) findcol::yp#2 ← phi( findcol::@12/(byte) findcol::yp#5 findcol::@4/(byte) findcol::yp#6 )
  (byte) findcol::y#2 ← phi( findcol::@12/(byte) findcol::y#6 findcol::@4/(byte) findcol::y#7 )
  (boolean~) findcol::$8 ← (byte) findcol::y#2 < (byte) findcol::yp#2
  (boolean~) findcol::$9 ← ! (boolean~) findcol::$8
  if((boolean~) findcol::$9) goto findcol::@6
  to:findcol::@14
findcol::@6: scope:[findcol]  from findcol::@5
  (byte) findcol::mincol#6 ← phi( findcol::@5/(byte) findcol::mincol#7 )
  (byte) findcol::x#12 ← phi( findcol::@5/(byte) findcol::x#13 )
  (byte) numpoints#5 ← phi( findcol::@5/(byte) numpoints#6 )
  (byte) findcol::i#7 ← phi( findcol::@5/(byte) findcol::i#8 )
  (byte) findcol::mindiff#4 ← phi( findcol::@5/(byte) findcol::mindiff#5 )
  (byte) findcol::diff#4 ← phi( findcol::@5/(byte) findcol::diff#8 )
  (byte) findcol::yp#3 ← phi( findcol::@5/(byte) findcol::yp#2 )
  (byte) findcol::y#3 ← phi( findcol::@5/(byte) findcol::y#2 )
  (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y#3 - (byte) findcol::yp#3
  (byte/word~) findcol::$13 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12
  (byte) findcol::diff#2 ← (byte/word~) findcol::$13
  to:findcol::@7
findcol::@14: scope:[findcol]  from findcol::@5
  (byte) findcol::mincol#5 ← phi( findcol::@5/(byte) findcol::mincol#7 )
  (byte) findcol::x#11 ← phi( findcol::@5/(byte) findcol::x#13 )
  (byte) numpoints#4 ← phi( findcol::@5/(byte) numpoints#6 )
  (byte) findcol::i#6 ← phi( findcol::@5/(byte) findcol::i#8 )
  (byte) findcol::mindiff#3 ← phi( findcol::@5/(byte) findcol::mindiff#5 )
  (byte) findcol::diff#5 ← phi( findcol::@5/(byte) findcol::diff#8 )
  (byte) findcol::y#4 ← phi( findcol::@5/(byte) findcol::y#2 )
  (byte) findcol::yp#4 ← phi( findcol::@5/(byte) findcol::yp#2 )
  (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp#4 - (byte) findcol::y#4
  (byte/word~) findcol::$11 ← (byte) findcol::diff#5 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10
  (byte) findcol::diff#3 ← (byte/word~) findcol::$11
  to:findcol::@7
findcol::@7: scope:[findcol]  from findcol::@14 findcol::@6
  (byte) findcol::y#13 ← phi( findcol::@14/(byte) findcol::y#4 findcol::@6/(byte) findcol::y#3 )
  (byte) findcol::mincol#4 ← phi( findcol::@14/(byte) findcol::mincol#5 findcol::@6/(byte) findcol::mincol#6 )
  (byte) findcol::x#10 ← phi( findcol::@14/(byte) findcol::x#11 findcol::@6/(byte) findcol::x#12 )
  (byte) numpoints#3 ← phi( findcol::@14/(byte) numpoints#4 findcol::@6/(byte) numpoints#5 )
  (byte) findcol::i#5 ← phi( findcol::@14/(byte) findcol::i#6 findcol::@6/(byte) findcol::i#7 )
  (byte) findcol::mindiff#2 ← phi( findcol::@14/(byte) findcol::mindiff#3 findcol::@6/(byte) findcol::mindiff#4 )
  (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 )
  (boolean~) findcol::$14 ← (byte) findcol::diff#6 < (byte) findcol::mindiff#2
  (boolean~) findcol::$15 ← ! (boolean~) findcol::$14
  if((boolean~) findcol::$15) goto findcol::@8
  to:findcol::@16
findcol::@8: scope:[findcol]  from findcol::@16 findcol::@7
  (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::mindiff#1 findcol::@7/(byte) findcol::mindiff#2 )
  (byte) findcol::y#9 ← phi( findcol::@16/(byte) findcol::y#12 findcol::@7/(byte) findcol::y#13 )
  (byte) findcol::mincol#3 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#4 )
  (byte) findcol::x#6 ← phi( findcol::@16/(byte) findcol::x#9 findcol::@7/(byte) findcol::x#10 )
  (byte) numpoints#1 ← phi( findcol::@16/(byte) numpoints#2 findcol::@7/(byte) numpoints#3 )
  (byte) findcol::i#3 ← phi( findcol::@16/(byte) findcol::i#4 findcol::@7/(byte) findcol::i#5 )
  (byte) findcol::i#1 ← ++ (byte) findcol::i#3
  (boolean~) findcol::$16 ← (byte) findcol::i#1 < (byte) numpoints#1
  if((boolean~) findcol::$16) goto findcol::@1
  to:findcol::@17
findcol::@16: scope:[findcol]  from findcol::@7
  (byte) findcol::y#12 ← phi( findcol::@7/(byte) findcol::y#13 )
  (byte) findcol::x#9 ← phi( findcol::@7/(byte) findcol::x#10 )
  (byte) numpoints#2 ← phi( findcol::@7/(byte) numpoints#3 )
  (byte) findcol::i#4 ← phi( findcol::@7/(byte) findcol::i#5 )
  (byte) findcol::diff#7 ← phi( findcol::@7/(byte) findcol::diff#6 )
  (byte) findcol::mindiff#1 ← (byte) findcol::diff#7
  (byte) findcol::mincol#1 ← *((byte[]) COLS#0 + (byte) findcol::i#4)
  to:findcol::@8
findcol::@17: scope:[findcol]  from findcol::@8
  (byte) findcol::mincol#2 ← phi( findcol::@8/(byte) findcol::mincol#3 )
  (byte) findcol::return#3 ← (byte) findcol::mincol#2
  to:findcol::@return
@5: scope:[]  from @begin
  (byte) numpoints#24 ← phi( @begin/(byte) numpoints#0 )
  (byte*) COLORS#7 ← phi( @begin/(byte*) COLORS#0 )
  (byte) FILL#4 ← phi( @begin/(byte) FILL#0 )
  (byte*) SCREEN#4 ← phi( @begin/(byte*) SCREEN#0 )
  call main param-assignment
  to:@6
@6: scope:[]  from @5
  to:@end
@end: scope:[]  from @6

SYMBOL TABLE SSA
(label) @5
(label) @6
(label) @begin
(label) @end
(byte*) COLORS
(byte*) COLORS#0
(byte*) COLORS#1
(byte*) COLORS#2
(byte*) COLORS#3
(byte*) COLORS#4
(byte*) COLORS#5
(byte*) COLORS#6
(byte*) COLORS#7
(byte[]) COLS
(byte[]) COLS#0
(byte) FILL
(byte) FILL#0
(byte) FILL#1
(byte) FILL#2
(byte) FILL#3
(byte) FILL#4
(byte*) SCREEN
(byte*) SCREEN#0
(byte*) SCREEN#1
(byte*) SCREEN#2
(byte*) SCREEN#3
(byte*) SCREEN#4
(byte[]) XPOS
(byte[]) XPOS#0
(byte[]) YPOS
(byte[]) YPOS#0
(void()) animate()
(byte/word~) animate::$0
(boolean~) animate::$1
(boolean~) animate::$10
(boolean~) animate::$11
(byte/signed byte/word/signed word/dword/signed dword~) animate::$12
(boolean~) animate::$13
(boolean~) animate::$14
(byte/word~) animate::$15
(boolean~) animate::$16
(boolean~) animate::$17
(byte/signed byte/word/signed word/dword/signed dword~) animate::$18
(boolean~) animate::$2
(byte/word~) animate::$3
(boolean~) animate::$4
(boolean~) animate::$5
(byte/signed byte/word/signed word/dword/signed dword~) animate::$6
(boolean~) animate::$7
(boolean~) animate::$8
(byte/word~) animate::$9
(label) animate::@1
(label) animate::@10
(label) animate::@11
(label) animate::@12
(label) animate::@2
(label) animate::@3
(label) animate::@4
(label) animate::@5
(label) animate::@6
(label) animate::@7
(label) animate::@8
(label) animate::@9
(label) animate::@return
(byte()) findcol((byte) findcol::x , (byte) findcol::y)
(boolean~) findcol::$0
(boolean~) findcol::$1
(byte/signed byte/word/signed word/dword/signed dword~) findcol::$10
(byte/word~) findcol::$11
(byte/signed byte/word/signed word/dword/signed dword~) findcol::$12
(byte/word~) findcol::$13
(boolean~) findcol::$14
(boolean~) findcol::$15
(boolean~) findcol::$16
(boolean~) findcol::$2
(boolean~) findcol::$3
(boolean~) findcol::$4
(boolean~) findcol::$5
(byte/signed byte/word/signed word/dword/signed dword~) findcol::$6
(byte/signed byte/word/signed word/dword/signed dword~) findcol::$7
(boolean~) findcol::$8
(boolean~) findcol::$9
(label) findcol::@1
(label) findcol::@10
(label) findcol::@12
(label) findcol::@14
(label) findcol::@16
(label) findcol::@17
(label) findcol::@2
(label) findcol::@3
(label) findcol::@4
(label) findcol::@5
(label) findcol::@6
(label) findcol::@7
(label) findcol::@8
(label) findcol::@9
(label) findcol::@return
(byte) findcol::diff
(byte) findcol::diff#0
(byte) findcol::diff#1
(byte) findcol::diff#2
(byte) findcol::diff#3
(byte) findcol::diff#4
(byte) findcol::diff#5
(byte) findcol::diff#6
(byte) findcol::diff#7
(byte) findcol::diff#8
(byte) findcol::i
(byte) findcol::i#0
(byte) findcol::i#1
(byte) findcol::i#10
(byte) findcol::i#11
(byte) findcol::i#12
(byte) findcol::i#13
(byte) findcol::i#2
(byte) findcol::i#3
(byte) findcol::i#4
(byte) findcol::i#5
(byte) findcol::i#6
(byte) findcol::i#7
(byte) findcol::i#8
(byte) findcol::i#9
(byte) findcol::mincol
(byte) findcol::mincol#0
(byte) findcol::mincol#1
(byte) findcol::mincol#10
(byte) findcol::mincol#11
(byte) findcol::mincol#12
(byte) findcol::mincol#13
(byte) findcol::mincol#2
(byte) findcol::mincol#3
(byte) findcol::mincol#4
(byte) findcol::mincol#5
(byte) findcol::mincol#6
(byte) findcol::mincol#7
(byte) findcol::mincol#8
(byte) findcol::mincol#9
(byte) findcol::mindiff
(byte) findcol::mindiff#0
(byte) findcol::mindiff#1
(byte) findcol::mindiff#10
(byte) findcol::mindiff#11
(byte) findcol::mindiff#12
(byte) findcol::mindiff#2
(byte) findcol::mindiff#3
(byte) findcol::mindiff#4
(byte) findcol::mindiff#5
(byte) findcol::mindiff#6
(byte) findcol::mindiff#7
(byte) findcol::mindiff#8
(byte) findcol::mindiff#9
(byte) findcol::return
(byte) findcol::return#0
(byte) findcol::return#1
(byte) findcol::return#2
(byte) findcol::return#3
(byte) findcol::return#4
(byte) findcol::return#5
(byte) findcol::x
(byte) findcol::x#0
(byte) findcol::x#1
(byte) findcol::x#10
(byte) findcol::x#11
(byte) findcol::x#12
(byte) findcol::x#13
(byte) findcol::x#2
(byte) findcol::x#3
(byte) findcol::x#4
(byte) findcol::x#5
(byte) findcol::x#6
(byte) findcol::x#7
(byte) findcol::x#8
(byte) findcol::x#9
(byte) findcol::xp
(byte) findcol::xp#0
(byte) findcol::xp#1
(byte) findcol::xp#2
(byte) findcol::xp#3
(byte) findcol::xp#4
(byte) findcol::xp#5
(byte) findcol::y
(byte) findcol::y#0
(byte) findcol::y#1
(byte) findcol::y#10
(byte) findcol::y#11
(byte) findcol::y#12
(byte) findcol::y#13
(byte) findcol::y#2
(byte) findcol::y#3
(byte) findcol::y#4
(byte) findcol::y#5
(byte) findcol::y#6
(byte) findcol::y#7
(byte) findcol::y#8
(byte) findcol::y#9
(byte) findcol::yp
(byte) findcol::yp#0
(byte) findcol::yp#1
(byte) findcol::yp#2
(byte) findcol::yp#3
(byte) findcol::yp#4
(byte) findcol::yp#5
(byte) findcol::yp#6
(byte) findcol::yp#7
(byte) findcol::yp#8
(void()) initscreen()
(byte*~) initscreen::$0
(boolean~) initscreen::$1
(label) initscreen::@1
(label) initscreen::@return
(byte*) initscreen::screen
(byte*) initscreen::screen#0
(byte*) initscreen::screen#1
(byte*) initscreen::screen#2
(void()) main()
(label) main::@1
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@return
(byte) numpoints
(byte) numpoints#0
(byte) numpoints#1
(byte) numpoints#10
(byte) numpoints#11
(byte) numpoints#12
(byte) numpoints#13
(byte) numpoints#14
(byte) numpoints#15
(byte) numpoints#16
(byte) numpoints#17
(byte) numpoints#18
(byte) numpoints#19
(byte) numpoints#2
(byte) numpoints#20
(byte) numpoints#21
(byte) numpoints#22
(byte) numpoints#23
(byte) numpoints#24
(byte) numpoints#3
(byte) numpoints#4
(byte) numpoints#5
(byte) numpoints#6
(byte) numpoints#7
(byte) numpoints#8
(byte) numpoints#9
(void()) render()
(byte~) render::$0
(boolean~) render::$1
(byte*~) render::$2
(boolean~) render::$3
(label) render::@1
(label) render::@2
(label) render::@3
(label) render::@5
(label) render::@return
(byte) render::col
(byte) render::col#0
(byte*) render::colline
(byte*) render::colline#0
(byte*) render::colline#1
(byte*) render::colline#2
(byte*) render::colline#3
(byte*) render::colline#4
(byte*) render::colline#5
(byte) render::x
(byte) render::x#0
(byte) render::x#1
(byte) render::x#2
(byte) render::x#3
(byte) render::y
(byte) render::y#0
(byte) render::y#1
(byte) render::y#2
(byte) render::y#3
(byte) render::y#4
(byte) render::y#5

OPTIMIZING CONTROL FLOW GRAPH
Culled Empty Block (label) animate::@5
Culled Empty Block (label) animate::@6
Culled Empty Block (label) @6
Succesful SSA optimization Pass2CullEmptyBlocks
Inversing boolean not (boolean~) animate::$2 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) != (byte/signed byte/word/signed word/dword/signed dword) 40 from (boolean~) animate::$1 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) == (byte/signed byte/word/signed word/dword/signed dword) 40
Inversing boolean not (boolean~) animate::$5 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) != (byte/signed byte/word/signed word/dword/signed dword) 25 from (boolean~) animate::$4 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0) == (byte/signed byte/word/signed word/dword/signed dword) 25
Inversing boolean not (boolean~) animate::$8 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) != (byte/word/signed word/dword/signed dword) 255 from (boolean~) animate::$7 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 1) == (byte/word/signed word/dword/signed dword) 255
Inversing boolean not (boolean~) animate::$11 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) != (byte/signed byte/word/signed word/dword/signed dword) 25 from (boolean~) animate::$10 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 2) == (byte/signed byte/word/signed word/dword/signed dword) 25
Inversing boolean not (boolean~) animate::$14 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) != (byte/word/signed word/dword/signed dword) 255 from (boolean~) animate::$13 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) == (byte/word/signed word/dword/signed dword) 255
Inversing boolean not (boolean~) animate::$17 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) < (byte/signed byte/word/signed word/dword/signed dword) 40 from (boolean~) animate::$16 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3) >= (byte/signed byte/word/signed word/dword/signed dword) 40
Inversing boolean not (boolean~) findcol::$1 ← (byte) findcol::x#1 != (byte) findcol::xp#0 from (boolean~) findcol::$0 ← (byte) findcol::x#1 == (byte) findcol::xp#0
Inversing boolean not (boolean~) findcol::$5 ← (byte) findcol::x#2 >= (byte) findcol::xp#1 from (boolean~) findcol::$4 ← (byte) findcol::x#2 < (byte) findcol::xp#1
Inversing boolean not (boolean~) findcol::$3 ← (byte) findcol::y#1 != (byte) findcol::yp#1 from (boolean~) findcol::$2 ← (byte) findcol::y#1 == (byte) findcol::yp#1
Inversing boolean not (boolean~) findcol::$9 ← (byte) findcol::y#2 >= (byte) findcol::yp#2 from (boolean~) findcol::$8 ← (byte) findcol::y#2 < (byte) findcol::yp#2
Inversing boolean not (boolean~) findcol::$15 ← (byte) findcol::diff#6 >= (byte) findcol::mindiff#2 from (boolean~) findcol::$14 ← (byte) findcol::diff#6 < (byte) findcol::mindiff#2
Succesful SSA optimization Pass2UnaryNotSimplification
Not aliassing across scopes: SCREEN#3 SCREEN#4
Not aliassing across scopes: FILL#3 FILL#4
Not aliassing across scopes: COLORS#5 COLORS#7
Not aliassing across scopes: numpoints#22 numpoints#24
Not aliassing across scopes: SCREEN#1 SCREEN#3
Not aliassing across scopes: FILL#2 FILL#3
Not aliassing across scopes: initscreen::screen#0 SCREEN#1
Not aliassing across scopes: COLORS#1 COLORS#2
Not aliassing across scopes: numpoints#17 numpoints#19
Not aliassing across scopes: render::colline#0 COLORS#1
Not aliassing across scopes: findcol::x#0 render::x#2
Not aliassing across scopes: findcol::y#0 render::y#2
Not aliassing across scopes: findcol::return#0 findcol::return#2
Not aliassing across scopes: render::$0 findcol::return#4
Not aliassing across scopes: findcol::x#5 findcol::x#0
Not aliassing across scopes: findcol::y#8 findcol::y#0
Not aliassing across scopes: numpoints#12 numpoints#14
Alias (byte*) COLORS#3 = (byte*) COLORS#5 
Alias (byte) numpoints#20 = (byte) numpoints#22 
Alias (byte*) COLORS#2 = (byte*) COLORS#6 (byte*) COLORS#4 
Alias (byte) numpoints#19 = (byte) numpoints#23 (byte) numpoints#21 
Alias (byte) findcol::return#0 = (byte) findcol::return#4 
Alias (byte*) render::colline#2 = (byte*) render::colline#4 (byte*) render::colline#3 
Alias (byte) render::x#2 = (byte) render::x#3 
Alias (byte) render::y#2 = (byte) render::y#5 (byte) render::y#3 
Alias (byte) numpoints#14 = (byte) numpoints#16 (byte) numpoints#18 
Alias (byte) render::col#0 = (byte~) render::$0 
Alias (byte*) render::colline#1 = (byte*~) render::$2 
Alias (byte) findcol::y#1 = (byte) findcol::y#5 (byte) findcol::y#11 
Alias (byte) findcol::yp#0 = (byte) findcol::yp#1 (byte) findcol::yp#8 
Alias (byte) findcol::x#1 = (byte) findcol::x#8 (byte) findcol::x#7 
Alias (byte) findcol::xp#0 = (byte) findcol::xp#5 (byte) findcol::xp#4 
Alias (byte) findcol::mindiff#10 = (byte) findcol::mindiff#12 (byte) findcol::mindiff#9 
Alias (byte) findcol::i#12 = (byte) findcol::i#13 (byte) findcol::i#2 
Alias (byte) numpoints#10 = (byte) numpoints#13 (byte) numpoints#11 
Alias (byte) findcol::mincol#11 = (byte) findcol::mincol#13 (byte) findcol::mincol#12 
Alias (byte) findcol::return#2 = (byte) findcol::return#5 
Alias (byte) findcol::x#2 = (byte) findcol::x#3 (byte) findcol::x#4 
Alias (byte) findcol::xp#1 = (byte) findcol::xp#2 (byte) findcol::xp#3 
Alias (byte) findcol::y#10 = (byte) findcol::y#7 (byte) findcol::y#6 
Alias (byte) findcol::yp#5 = (byte) findcol::yp#6 (byte) findcol::yp#7 
Alias (byte) findcol::mindiff#6 = (byte) findcol::mindiff#7 (byte) findcol::mindiff#8 
Alias (byte) findcol::i#10 = (byte) findcol::i#11 (byte) findcol::i#9 
Alias (byte) numpoints#7 = (byte) numpoints#8 (byte) numpoints#9 
Alias (byte) findcol::mincol#10 = (byte) findcol::mincol#9 (byte) findcol::mincol#8 
Alias (byte) findcol::diff#0 = (byte/signed byte/word/signed word/dword/signed dword~) findcol::$7 
Alias (byte) findcol::diff#1 = (byte/signed byte/word/signed word/dword/signed dword~) findcol::$6 
Alias (byte) findcol::y#2 = (byte) findcol::y#3 (byte) findcol::y#4 
Alias (byte) findcol::yp#2 = (byte) findcol::yp#3 (byte) findcol::yp#4 
Alias (byte) findcol::diff#4 = (byte) findcol::diff#8 (byte) findcol::diff#5 
Alias (byte) findcol::mindiff#3 = (byte) findcol::mindiff#4 (byte) findcol::mindiff#5 
Alias (byte) findcol::i#6 = (byte) findcol::i#7 (byte) findcol::i#8 
Alias (byte) numpoints#4 = (byte) numpoints#5 (byte) numpoints#6 
Alias (byte) findcol::x#11 = (byte) findcol::x#12 (byte) findcol::x#13 
Alias (byte) findcol::mincol#5 = (byte) findcol::mincol#6 (byte) findcol::mincol#7 
Alias (byte) findcol::diff#2 = (byte/word~) findcol::$13 
Alias (byte) findcol::diff#3 = (byte/word~) findcol::$11 
Alias (byte) findcol::diff#6 = (byte) findcol::diff#7 (byte) findcol::mindiff#1 
Alias (byte) findcol::i#4 = (byte) findcol::i#5 
Alias (byte) numpoints#2 = (byte) numpoints#3 
Alias (byte) findcol::x#10 = (byte) findcol::x#9 
Alias (byte) findcol::y#12 = (byte) findcol::y#13 
Alias (byte) findcol::mincol#2 = (byte) findcol::mincol#3 (byte) findcol::return#3 
Alias (byte*) SCREEN#0 = (byte*) SCREEN#4 
Alias (byte) FILL#0 = (byte) FILL#4 
Alias (byte*) COLORS#0 = (byte*) COLORS#7 
Alias (byte) numpoints#0 = (byte) numpoints#24 
Succesful SSA optimization Pass2AliasElimination
Not aliassing across scopes: SCREEN#3 SCREEN#0
Not aliassing across scopes: FILL#3 FILL#0
Not aliassing across scopes: COLORS#3 COLORS#0
Not aliassing across scopes: numpoints#20 numpoints#0
Not aliassing across scopes: SCREEN#1 SCREEN#3
Not aliassing across scopes: FILL#2 FILL#3
Not aliassing across scopes: initscreen::screen#0 SCREEN#1
Not aliassing across scopes: COLORS#1 COLORS#2
Not aliassing across scopes: numpoints#17 numpoints#19
Not aliassing across scopes: render::colline#0 COLORS#1
Not aliassing across scopes: findcol::x#0 render::x#2
Not aliassing across scopes: findcol::y#0 render::y#2
Not aliassing across scopes: findcol::return#0 findcol::return#2
Not aliassing across scopes: render::col#0 findcol::return#0
Not aliassing across scopes: findcol::x#5 findcol::x#0
Not aliassing across scopes: findcol::y#8 findcol::y#0
Not aliassing across scopes: numpoints#12 numpoints#14
Alias (byte) findcol::x#1 = (byte) findcol::x#2 (byte) findcol::x#11 (byte) findcol::x#10 (byte) findcol::x#6 
Alias (byte) findcol::xp#0 = (byte) findcol::xp#1 
Alias (byte) findcol::y#1 = (byte) findcol::y#10 (byte) findcol::y#2 (byte) findcol::y#12 (byte) findcol::y#9 
Alias (byte) findcol::yp#0 = (byte) findcol::yp#5 (byte) findcol::yp#2 
Alias (byte) findcol::mindiff#10 = (byte) findcol::mindiff#6 (byte) findcol::mindiff#3 (byte) findcol::mindiff#2 
Alias (byte) findcol::i#10 = (byte) findcol::i#12 (byte) findcol::i#6 (byte) findcol::i#4 (byte) findcol::i#3 
Alias (byte) numpoints#1 = (byte) numpoints#7 (byte) numpoints#10 (byte) numpoints#4 (byte) numpoints#2 
Alias (byte) findcol::mincol#10 = (byte) findcol::mincol#11 (byte) findcol::mincol#5 (byte) findcol::mincol#4 
Succesful SSA optimization Pass2AliasElimination
Not aliassing across scopes: SCREEN#3 SCREEN#0
Not aliassing across scopes: FILL#3 FILL#0
Not aliassing across scopes: COLORS#3 COLORS#0
Not aliassing across scopes: numpoints#20 numpoints#0
Not aliassing across scopes: SCREEN#1 SCREEN#3
Not aliassing across scopes: FILL#2 FILL#3
Not aliassing across scopes: initscreen::screen#0 SCREEN#1
Not aliassing across scopes: COLORS#1 COLORS#2
Not aliassing across scopes: numpoints#17 numpoints#19
Not aliassing across scopes: render::colline#0 COLORS#1
Not aliassing across scopes: findcol::x#0 render::x#2
Not aliassing across scopes: findcol::y#0 render::y#2
Not aliassing across scopes: findcol::return#0 findcol::return#2
Not aliassing across scopes: render::col#0 findcol::return#0
Not aliassing across scopes: findcol::x#5 findcol::x#0
Not aliassing across scopes: findcol::y#8 findcol::y#0
Not aliassing across scopes: numpoints#12 numpoints#14
Self Phi Eliminated (byte*) COLORS#2
Self Phi Eliminated (byte) numpoints#19
Self Phi Eliminated (byte) FILL#1
Self Phi Eliminated (byte*) SCREEN#2
Self Phi Eliminated (byte) render::y#2
Self Phi Eliminated (byte*) render::colline#2
Self Phi Eliminated (byte) numpoints#14
Self Phi Eliminated (byte) findcol::x#1
Self Phi Eliminated (byte) findcol::y#1
Self Phi Eliminated (byte) numpoints#1
Succesful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte*) SCREEN#3 (byte*) SCREEN#0
Redundant Phi (byte) FILL#3 (byte) FILL#0
Redundant Phi (byte*) COLORS#3 (byte*) COLORS#0
Redundant Phi (byte) numpoints#20 (byte) numpoints#0
Redundant Phi (byte*) COLORS#2 (byte*) COLORS#3
Redundant Phi (byte) numpoints#19 (byte) numpoints#20
Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#3
Redundant Phi (byte) FILL#2 (byte) FILL#3
Redundant Phi (byte) FILL#1 (byte) FILL#2
Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#1
Redundant Phi (byte*) COLORS#1 (byte*) COLORS#2
Redundant Phi (byte) numpoints#17 (byte) numpoints#19
Redundant Phi (byte) render::y#2 (byte) render::y#4
Redundant Phi (byte*) render::colline#2 (byte*) render::colline#5
Redundant Phi (byte) numpoints#14 (byte) numpoints#15
Redundant Phi (byte) findcol::x#5 (byte) findcol::x#0
Redundant Phi (byte) findcol::y#8 (byte) findcol::y#0
Redundant Phi (byte) numpoints#12 (byte) numpoints#14
Redundant Phi (byte) findcol::x#1 (byte) findcol::x#5
Redundant Phi (byte) findcol::y#1 (byte) findcol::y#8
Redundant Phi (byte) numpoints#1 (byte) numpoints#12
Succesful SSA optimization Pass2RedundantPhiElimination
Simple Condition (boolean~) animate::$2 if(*((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@1
Simple Condition (boolean~) animate::$5 if(*((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@2
Simple Condition (boolean~) animate::$8 if(*((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 1)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@3
Simple Condition (boolean~) animate::$11 if(*((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 2)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@4
Simple Condition (boolean~) animate::$14 if(*((byte[]) YPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@return
Simple Condition (boolean~) animate::$17 if(*((byte[]) XPOS#0 + (byte/signed byte/word/signed word/dword/signed dword) 3)<(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@return
Simple Condition (boolean~) initscreen::$1 if((byte*) initscreen::screen#1<(byte*~) initscreen::$0) goto initscreen::@1
Simple Condition (boolean~) render::$1 if((byte) render::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render::@2
Simple Condition (boolean~) render::$3 if((byte) render::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto render::@1
Simple Condition (boolean~) findcol::$1 if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2
Simple Condition (boolean~) findcol::$5 if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4
Simple Condition (boolean~) findcol::$3 if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@3
Simple Condition (boolean~) findcol::$9 if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6
Simple Condition (boolean~) findcol::$15 if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@8
Simple Condition (boolean~) findcol::$16 if((byte) findcol::i#1<(byte) numpoints#15) goto findcol::@1
Succesful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) SCREEN#0 = ((byte*))1024
Constant (const byte*) COLORS#0 = ((byte*))55296
Constant (const byte) FILL#0 = 230
Constant (const byte) numpoints#0 = 6
Constant (const byte[]) XPOS#0 = { 5, 15, 6, 34, 21, 31 }
Constant (const byte[]) YPOS#0 = { 5, 8, 14, 2, 17, 22 }
Constant (const byte[]) COLS#0 = { 1, 2, 3, 4, 5, 7 }
Constant (const byte) render::y#0 = 0
Constant (const byte) render::x#0 = 0
Constant (const byte) findcol::mindiff#0 = 255
Constant (const byte) findcol::mincol#0 = 0
Constant (const byte) findcol::i#0 = 0
Constant (const byte) findcol::return#1 = 0
Succesful SSA optimization Pass2ConstantIdentification
Constant (const byte*) initscreen::screen#0 = SCREEN#0
Constant (const byte*) initscreen::$0 = SCREEN#0+1000
Constant (const byte*) render::colline#0 = COLORS#0
Succesful SSA optimization Pass2ConstantIdentification
Consolidated array index constant in *(XPOS#0+0)
Consolidated array index constant in *(XPOS#0+0)
Consolidated array index constant in *(XPOS#0+0)
Consolidated array index constant in *(YPOS#0+0)
Consolidated array index constant in *(YPOS#0+0)
Consolidated array index constant in *(YPOS#0+0)
Consolidated array index constant in *(XPOS#0+0)
Consolidated array index constant in *(XPOS#0+1)
Consolidated array index constant in *(XPOS#0+1)
Consolidated array index constant in *(XPOS#0+1)
Consolidated array index constant in *(YPOS#0+0)
Consolidated array index constant in *(YPOS#0+2)
Consolidated array index constant in *(YPOS#0+2)
Consolidated array index constant in *(YPOS#0+2)
Consolidated array index constant in *(XPOS#0+1)
Consolidated array index constant in *(YPOS#0+3)
Consolidated array index constant in *(YPOS#0+3)
Consolidated array index constant in *(YPOS#0+3)
Consolidated array index constant in *(YPOS#0+2)
Consolidated array index constant in *(YPOS#0+3)
Consolidated array index constant in *(XPOS#0+3)
Consolidated array index constant in *(XPOS#0+3)
Consolidated array index constant in *(XPOS#0+3)
Consolidated array index constant in *(XPOS#0+3)
Consolidated array index constant in *(XPOS#0+3)
Succesful SSA optimization Pass2ConstantAdditionElimination
Culled Empty Block (label) main::@3
Culled Empty Block (label) findcol::@3
Culled Empty Block (label) findcol::@10
Culled Empty Block (label) findcol::@17
Succesful SSA optimization Pass2CullEmptyBlocks
Not aliassing across scopes: findcol::x#0 render::x#2
Not aliassing across scopes: findcol::y#0 render::y#4
Not aliassing across scopes: findcol::return#0 findcol::return#2
Not aliassing across scopes: render::col#0 findcol::return#0
Self Phi Eliminated (byte) numpoints#15
Succesful SSA optimization Pass2SelfPhiElimination
Redundant Phi (byte) numpoints#15 (const byte) numpoints#0
Succesful SSA optimization Pass2RedundantPhiElimination
Not aliassing across scopes: findcol::x#0 render::x#2
Not aliassing across scopes: findcol::y#0 render::y#4
Not aliassing across scopes: findcol::return#0 findcol::return#2
Not aliassing across scopes: render::col#0 findcol::return#0
OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const byte*) initscreen::screen#0
Inlining constant with var siblings (const byte*) initscreen::screen#0
Inlining constant with var siblings (const byte) render::y#0
Inlining constant with var siblings (const byte) render::y#0
Inlining constant with var siblings (const byte) render::x#0
Inlining constant with var siblings (const byte) render::x#0
Inlining constant with var siblings (const byte*) render::colline#0
Inlining constant with var siblings (const byte*) render::colline#0
Inlining constant with var siblings (const byte) findcol::mindiff#0
Inlining constant with var siblings (const byte) findcol::mindiff#0
Inlining constant with var siblings (const byte) findcol::mincol#0
Inlining constant with var siblings (const byte) findcol::mincol#0
Inlining constant with var siblings (const byte) findcol::mincol#0
Inlining constant with var siblings (const byte) findcol::i#0
Inlining constant with var siblings (const byte) findcol::i#0
Inlining constant with var siblings (const byte) findcol::return#1
Inlining constant with var siblings (const byte) findcol::return#1
Constant inlined findcol::i#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render::colline#0 = (const byte*) COLORS#0
Constant inlined render::x#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined initscreen::screen#0 = (const byte*) SCREEN#0
Constant inlined findcol::return#1 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined render::y#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined findcol::mincol#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined findcol::mindiff#0 = (byte/word/signed word/dword/signed dword) 255
Constant inlined initscreen::$0 = (const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @5 @end main main::@1 main::@4 main::@5 main::@return animate animate::@7 animate::@1 animate::@8 animate::@2 animate::@9 animate::@3 animate::@10 animate::@4 animate::@11 animate::@12 animate::@return render render::@1 render::@2 render::@5 render::@3 render::@return findcol findcol::@1 findcol::@9 findcol::@return findcol::@2 findcol::@12 findcol::@5 findcol::@14 findcol::@7 findcol::@16 findcol::@8 findcol::@6 findcol::@4 initscreen initscreen::@1 initscreen::@return 
Added new block during phi lifting render::@6(between render::@3 and render::@1)
Added new block during phi lifting render::@7(between render::@5 and render::@2)
Added new block during phi lifting findcol::@19(between findcol::@8 and findcol::@1)
Added new block during phi lifting findcol::@20(between findcol::@8 and findcol::@return)
Added new block during phi lifting findcol::@21(between findcol::@7 and findcol::@8)
Added new block during phi lifting initscreen::@3(between initscreen::@1 and initscreen::@1)
Block Sequence Planned @begin @5 @end main main::@1 main::@4 main::@5 main::@return animate animate::@7 animate::@1 animate::@8 animate::@2 animate::@9 animate::@3 animate::@10 animate::@4 animate::@11 animate::@12 animate::@return render render::@1 render::@2 render::@5 render::@3 render::@return render::@6 render::@7 findcol findcol::@1 findcol::@9 findcol::@return findcol::@2 findcol::@12 findcol::@5 findcol::@14 findcol::@7 findcol::@16 findcol::@8 findcol::@20 findcol::@19 findcol::@21 findcol::@6 findcol::@4 initscreen initscreen::@1 initscreen::@return initscreen::@3 
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @5
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of render
Adding NOP phi() at start of findcol
Adding NOP phi() at start of initscreen
CALL GRAPH
Calls in [] to main:2 
Calls in [main] to initscreen:5 render:7 animate:9 
Calls in [render] to findcol:43 

Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Created 12 initial phi equivalence classes
Coalesced [53] render::y#6 ← render::y#1
Coalesced [54] render::colline#6 ← render::colline#1
Coalesced [55] render::x#4 ← render::x#1
Coalesced [66] findcol::diff#9 ← findcol::diff#1
Coalesced [71] findcol::diff#11 ← findcol::diff#3
Coalesced [75] findcol::mincol#15 ← findcol::mincol#1
Coalesced [76] findcol::mindiff#14 ← findcol::diff#6
Coalesced [80] findcol::return#6 ← findcol::mincol#2
Coalesced [81] findcol::i#14 ← findcol::i#1
Not coalescing [82] findcol::mindiff#13 ← findcol::mindiff#11
Coalesced [83] findcol::mincol#14 ← findcol::mincol#2
Coalesced (already) [84] findcol::mincol#16 ← findcol::mincol#10
Not coalescing [85] findcol::mindiff#15 ← findcol::mindiff#10
Coalesced [88] findcol::diff#12 ← findcol::diff#2
Coalesced [90] findcol::diff#10 ← findcol::diff#0
Coalesced [97] initscreen::screen#3 ← initscreen::screen#1
Coalesced down to 9 phi equivalence classes
Culled Empty Block (label) render::@6
Culled Empty Block (label) render::@7
Culled Empty Block (label) findcol::@20
Culled Empty Block (label) initscreen::@3
Block Sequence Planned @begin @5 @end main main::@1 main::@4 main::@5 main::@return animate animate::@7 animate::@1 animate::@8 animate::@2 animate::@9 animate::@3 animate::@10 animate::@4 animate::@11 animate::@12 animate::@return render render::@1 render::@2 render::@5 render::@3 render::@return findcol findcol::@1 findcol::@9 findcol::@return findcol::@2 findcol::@12 findcol::@5 findcol::@14 findcol::@7 findcol::@16 findcol::@8 findcol::@19 findcol::@21 findcol::@6 findcol::@4 initscreen initscreen::@1 initscreen::@return 
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @5
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of render
Adding NOP phi() at start of findcol
Adding NOP phi() at start of initscreen
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...
Propagating live ranges...

FINAL CONTROL FLOW GRAPH
@begin: scope:[]  from
  [0] phi() [ ] ( )
  to:@5
@5: scope:[]  from @begin
  [1] phi() [ ] ( )
  [2] call main param-assignment [ ] ( )
  to:@end
@end: scope:[]  from @5
  [3] phi() [ ] ( )
main: scope:[main]  from @5
  [4] phi() [ ] ( main:2 [ ] )
  [5] call initscreen param-assignment [ ] ( main:2 [ ] )
  to:main::@1
main::@1: scope:[main]  from main main::@5
  [6] phi() [ ] ( main:2 [ ] )
  [7] call render param-assignment [ ] ( main:2 [ ] )
  to:main::@4
main::@4: scope:[main]  from main::@1
  [8] phi() [ ] ( main:2 [ ] )
  [9] call animate param-assignment [ ] ( main:2 [ ] )
  to:main::@5
main::@5: scope:[main]  from main::@4
  [10] if(true) goto main::@1 [ ] ( main:2 [ ] )
  to:main::@return
main::@return: scope:[main]  from main::@5
  [11] return  [ ] ( main:2 [ ] )
  to:@return
animate: scope:[animate]  from main::@4
  [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] )
  [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$0 [ ] ( main:2::animate:9 [ ] )
  [14] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@1 [ ] ( main:2::animate:9 [ ] )
  to:animate::@7
animate::@7: scope:[animate]  from animate
  [15] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] )
  to:animate::@1
animate::@1: scope:[animate]  from animate animate::@7
  [16] (byte/word~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] )
  [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$3 [ ] ( main:2::animate:9 [ ] )
  [18] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@2 [ ] ( main:2::animate:9 [ ] )
  to:animate::@8
animate::@8: scope:[animate]  from animate::@1
  [19] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] )
  to:animate::@2
animate::@2: scope:[animate]  from animate::@1 animate::@8
  [20] (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] )
  [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 [ ] ( main:2::animate:9 [ ] )
  [22] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@3 [ ] ( main:2::animate:9 [ ] )
  to:animate::@9
animate::@9: scope:[animate]  from animate::@2
  [23] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 40 [ ] ( main:2::animate:9 [ ] )
  to:animate::@3
animate::@3: scope:[animate]  from animate::@2 animate::@9
  [24] (byte/word~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] )
  [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/word~) animate::$9 [ ] ( main:2::animate:9 [ ] )
  [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@4 [ ] ( main:2::animate:9 [ ] )
  to:animate::@10
animate::@10: scope:[animate]  from animate::@3
  [27] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] )
  to:animate::@4
animate::@4: scope:[animate]  from animate::@10 animate::@3
  [28] (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] )
  [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 [ ] ( main:2::animate:9 [ ] )
  [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] )
  to:animate::@11
animate::@11: scope:[animate]  from animate::@4
  [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25 [ ] ( main:2::animate:9 [ ] )
  [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] )
  [33] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/word~) animate::$15 [ ] ( main:2::animate:9 [ ] )
  [34] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)<(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@return [ ] ( main:2::animate:9 [ ] )
  to:animate::@12
animate::@12: scope:[animate]  from animate::@11
  [35] (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] )
  [36] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 [ ] ( main:2::animate:9 [ ] )
  to:animate::@return
animate::@return: scope:[animate]  from animate::@11 animate::@12 animate::@4
  [37] return  [ ] ( main:2::animate:9 [ ] )
  to:@return
render: scope:[render]  from main::@1
  [38] phi() [ ] ( main:2::render:7 [ ] )
  to:render::@1
render::@1: scope:[render]  from render render::@3
  [39] (byte*) render::colline#5 ← phi( render/(const byte*) COLORS#0 render::@3/(byte*) render::colline#1 ) [ render::y#4 render::colline#5 ] ( main:2::render:7 [ render::y#4 render::colline#5 ] )
  [39] (byte) render::y#4 ← phi( render/(byte/signed byte/word/signed word/dword/signed dword) 0 render::@3/(byte) render::y#1 ) [ render::y#4 render::colline#5 ] ( main:2::render:7 [ render::y#4 render::colline#5 ] )
  to:render::@2
render::@2: scope:[render]  from render::@1 render::@5
  [40] (byte) render::x#2 ← phi( render::@1/(byte/signed byte/word/signed word/dword/signed dword) 0 render::@5/(byte) render::x#1 ) [ render::y#4 render::colline#5 render::x#2 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 ] )
  [41] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 ] )
  [42] (byte) findcol::y#0 ← (byte) render::y#4 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 ] )
  [43] call findcol param-assignment [ render::y#4 render::colline#5 render::x#2 findcol::return#2 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 findcol::return#2 ] )
  [44] (byte) findcol::return#0 ← (byte) findcol::return#2 [ render::y#4 render::colline#5 render::x#2 findcol::return#0 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 findcol::return#0 ] )
  to:render::@5
render::@5: scope:[render]  from render::@2
  [45] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#4 render::colline#5 render::x#2 render::col#0 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 render::col#0 ] )
  [46] *((byte*) render::colline#5 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#4 render::colline#5 render::x#2 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 ] )
  [47] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#4 render::colline#5 render::x#1 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#1 ] )
  [48] if((byte) render::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render::@2 [ render::y#4 render::colline#5 render::x#1 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#1 ] )
  to:render::@3
render::@3: scope:[render]  from render::@5
  [49] (byte*) render::colline#1 ← (byte*) render::colline#5 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ render::y#4 render::colline#1 ] ( main:2::render:7 [ render::y#4 render::colline#1 ] )
  [50] (byte) render::y#1 ← ++ (byte) render::y#4 [ render::y#1 render::colline#1 ] ( main:2::render:7 [ render::y#1 render::colline#1 ] )
  [51] if((byte) render::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto render::@1 [ render::y#1 render::colline#1 ] ( main:2::render:7 [ render::y#1 render::colline#1 ] )
  to:render::@return
render::@return: scope:[render]  from render::@3
  [52] return  [ ] ( main:2::render:7 [ ] )
  to:@return
findcol: scope:[findcol]  from render::@2
  [53] phi() [ findcol::x#0 findcol::y#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 ] )
  to:findcol::@1
findcol::@1: scope:[findcol]  from findcol findcol::@19
  [54] (byte) findcol::mincol#10 ← phi( findcol/(byte/signed byte/word/signed word/dword/signed dword) 0 findcol::@19/(byte) findcol::mincol#2 ) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 ] )
  [54] (byte) findcol::mindiff#10 ← phi( findcol/(byte/word/signed word/dword/signed dword) 255 findcol::@19/(byte~) findcol::mindiff#13 ) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 ] )
  [54] (byte) findcol::i#10 ← phi( findcol/(byte/signed byte/word/signed word/dword/signed dword) 0 findcol::@19/(byte) findcol::i#1 ) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 ] )
  [55] (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#10) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 ] )
  [56] (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#10) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] )
  [57] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] )
  to:findcol::@9
findcol::@9: scope:[findcol]  from findcol::@1
  [58] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] )
  to:findcol::@return
findcol::@return: scope:[findcol]  from findcol::@8 findcol::@9
  [59] (byte) findcol::return#2 ← phi( findcol::@9/(byte/signed byte/word/signed word/dword/signed dword) 0 findcol::@8/(byte) findcol::mincol#2 ) [ findcol::return#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::return#2 ] )
  [60] return  [ findcol::return#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::return#2 ] )
  to:@return
findcol::@2: scope:[findcol]  from findcol::@1 findcol::@9
  [61] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] )
  to:findcol::@12
findcol::@12: scope:[findcol]  from findcol::@2
  [62] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] )
  to:findcol::@5
findcol::@5: scope:[findcol]  from findcol::@12 findcol::@4
  [63] (byte) findcol::diff#4 ← phi( findcol::@12/(byte) findcol::diff#1 findcol::@4/(byte) findcol::diff#0 ) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#4 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#4 ] )
  [64] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#4 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#4 ] )
  to:findcol::@14
findcol::@14: scope:[findcol]  from findcol::@5
  [65] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] )
  [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] )
  to:findcol::@7
findcol::@7: scope:[findcol]  from findcol::@14 findcol::@6
  [67] (byte) findcol::diff#6 ← phi( findcol::@14/(byte) findcol::diff#3 findcol::@6/(byte) findcol::diff#2 ) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#6 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#6 ] )
  [68] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#6 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#6 ] )
  to:findcol::@16
findcol::@16: scope:[findcol]  from findcol::@7
  [69] (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#10) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::diff#6 findcol::mincol#1 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::diff#6 findcol::mincol#1 ] )
  to:findcol::@8
findcol::@8: scope:[findcol]  from findcol::@16 findcol::@21
  [70] (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@21/(byte~) findcol::mindiff#15 ) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mincol#2 findcol::mindiff#11 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mincol#2 findcol::mindiff#11 ] )
  [70] (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@21/(byte) findcol::mincol#10 ) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mincol#2 findcol::mindiff#11 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mincol#2 findcol::mindiff#11 ] )
  [71] (byte) findcol::i#1 ← ++ (byte) findcol::i#10 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] )
  [72] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] )
  to:findcol::@return
findcol::@19: scope:[findcol]  from findcol::@8
  [73] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ] )
  to:findcol::@1
findcol::@21: scope:[findcol]  from findcol::@7
  [74] (byte~) findcol::mindiff#15 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mincol#10 findcol::mindiff#15 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mincol#10 findcol::mindiff#15 ] )
  to:findcol::@8
findcol::@6: scope:[findcol]  from findcol::@5
  [75] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] )
  [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] )
  to:findcol::@7
findcol::@4: scope:[findcol]  from findcol::@2
  [77] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] )
  to:findcol::@5
initscreen: scope:[initscreen]  from main
  [78] phi() [ ] ( main:2::initscreen:5 [ ] )
  to:initscreen::@1
initscreen::@1: scope:[initscreen]  from initscreen initscreen::@1
  [79] (byte*) initscreen::screen#2 ← phi( initscreen/(const byte*) SCREEN#0 initscreen::@1/(byte*) initscreen::screen#1 ) [ initscreen::screen#2 ] ( main:2::initscreen:5 [ initscreen::screen#2 ] )
  [80] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] ( main:2::initscreen:5 [ initscreen::screen#2 ] )
  [81] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] ( main:2::initscreen:5 [ initscreen::screen#1 ] )
  [82] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto initscreen::@1 [ initscreen::screen#1 ] ( main:2::initscreen:5 [ initscreen::screen#1 ] )
  to:initscreen::@return
initscreen::@return: scope:[initscreen]  from initscreen::@1
  [83] return  [ ] ( main:2::initscreen:5 [ ] )
  to:@return

DOMINATORS
@begin dominated by  @begin 
@5 dominated by  @begin @5 
@end dominated by  @end @begin @5 
main dominated by  main @begin @5 
main::@1 dominated by  main main::@1 @begin @5 
main::@4 dominated by  main main::@1 main::@4 @begin @5 
main::@5 dominated by  main main::@1 main::@5 main::@4 @begin @5 
main::@return dominated by  main::@return main main::@1 main::@5 main::@4 @begin @5 
animate dominated by  main animate main::@1 main::@4 @begin @5 
animate::@7 dominated by  main animate main::@1 animate::@7 main::@4 @begin @5 
animate::@1 dominated by  main animate animate::@1 main::@1 main::@4 @begin @5 
animate::@8 dominated by  main animate animate::@1 main::@1 animate::@8 main::@4 @begin @5 
animate::@2 dominated by  main animate animate::@2 animate::@1 main::@1 main::@4 @begin @5 
animate::@9 dominated by  main animate animate::@2 animate::@1 main::@1 animate::@9 main::@4 @begin @5 
animate::@3 dominated by  main animate animate::@2 animate::@1 animate::@3 main::@1 main::@4 @begin @5 
animate::@10 dominated by  main animate animate::@2 animate::@1 animate::@3 main::@1 main::@4 @begin @5 animate::@10 
animate::@4 dominated by  main animate animate::@2 animate::@1 animate::@4 animate::@3 main::@1 main::@4 @begin @5 
animate::@11 dominated by  main animate animate::@2 animate::@1 animate::@4 animate::@3 main::@1 main::@4 @begin @5 animate::@11 
animate::@12 dominated by  animate::@12 main animate animate::@2 animate::@1 animate::@4 animate::@3 main::@1 main::@4 @begin @5 animate::@11 
animate::@return dominated by  main animate animate::@2 animate::@1 animate::@4 animate::@3 main::@1 main::@4 @begin @5 animate::@return 
render dominated by  main main::@1 render @begin @5 
render::@1 dominated by  main main::@1 render::@1 render @begin @5 
render::@2 dominated by  main render::@2 main::@1 render::@1 render @begin @5 
render::@5 dominated by  main render::@5 render::@2 main::@1 render::@1 render @begin @5 
render::@3 dominated by  main render::@5 render::@3 render::@2 main::@1 render::@1 render @begin @5 
render::@return dominated by  main render::@5 render::@3 render::@2 main::@1 render::@1 render render::@return @begin @5 
findcol dominated by  findcol main render::@2 main::@1 render::@1 render @begin @5 
findcol::@1 dominated by  findcol findcol::@1 main render::@2 main::@1 render::@1 render @begin @5 
findcol::@9 dominated by  findcol findcol::@1 main render::@2 main::@1 render::@1 render @begin @5 findcol::@9 
findcol::@return dominated by  findcol findcol::@1 main render::@2 main::@1 render::@1 render @begin @5 findcol::@return 
findcol::@2 dominated by  findcol findcol::@2 findcol::@1 main render::@2 main::@1 render::@1 render @begin @5 
findcol::@12 dominated by  findcol findcol::@2 findcol::@1 findcol::@12 main render::@2 main::@1 render::@1 render @begin @5 
findcol::@5 dominated by  findcol findcol::@2 findcol::@1 findcol::@5 main render::@2 main::@1 render::@1 render @begin @5 
findcol::@14 dominated by  findcol findcol::@2 findcol::@1 findcol::@14 findcol::@5 main render::@2 main::@1 render::@1 render @begin @5 
findcol::@7 dominated by  findcol findcol::@2 findcol::@1 findcol::@7 findcol::@5 main render::@2 main::@1 render::@1 render @begin @5 
findcol::@16 dominated by  findcol::@16 findcol findcol::@2 findcol::@1 findcol::@7 findcol::@5 main render::@2 main::@1 render::@1 render @begin @5 
findcol::@8 dominated by  findcol findcol::@2 findcol::@1 findcol::@8 findcol::@7 findcol::@5 main render::@2 main::@1 render::@1 render @begin @5 
findcol::@19 dominated by  findcol findcol::@2 findcol::@1 findcol::@8 findcol::@7 findcol::@5 main render::@2 main::@1 render::@1 render @begin @5 findcol::@19 
findcol::@21 dominated by  findcol findcol::@2 findcol::@1 findcol::@7 findcol::@5 main render::@2 main::@1 render::@1 render @begin findcol::@21 @5 
findcol::@6 dominated by  findcol findcol::@2 findcol::@1 findcol::@6 findcol::@5 main render::@2 main::@1 render::@1 render @begin @5 
findcol::@4 dominated by  findcol::@4 findcol findcol::@2 findcol::@1 main render::@2 main::@1 render::@1 render @begin @5 
initscreen dominated by  main @begin initscreen @5 
initscreen::@1 dominated by  main @begin initscreen @5 initscreen::@1 
initscreen::@return dominated by  main @begin initscreen initscreen::@return @5 initscreen::@1 

NATURAL LOOPS
Found back edge: Loop head: main::@1 tails: main::@5 blocks: null
Found back edge: Loop head: render::@2 tails: render::@5 blocks: null
Found back edge: Loop head: render::@1 tails: render::@3 blocks: null
Found back edge: Loop head: findcol::@1 tails: findcol::@19 blocks: null
Found back edge: Loop head: initscreen::@1 tails: initscreen::@1 blocks: null
Populated: Loop head: main::@1 tails: main::@5 blocks: main::@5 main::@4 main::@1 
Populated: Loop head: render::@2 tails: render::@5 blocks: render::@5 render::@2 
Populated: Loop head: render::@1 tails: render::@3 blocks: render::@3 render::@5 render::@2 render::@1 
Populated: Loop head: findcol::@1 tails: findcol::@19 blocks: findcol::@19 findcol::@8 findcol::@16 findcol::@21 findcol::@7 findcol::@14 findcol::@6 findcol::@5 findcol::@12 findcol::@4 findcol::@2 findcol::@1 findcol::@9 
Populated: Loop head: initscreen::@1 tails: initscreen::@1 blocks: initscreen::@1 
Loop head: main::@1 tails: main::@5 blocks: main::@5 main::@4 main::@1 
Loop head: render::@2 tails: render::@5 blocks: render::@5 render::@2 
Loop head: render::@1 tails: render::@3 blocks: render::@3 render::@5 render::@2 render::@1 
Loop head: findcol::@1 tails: findcol::@19 blocks: findcol::@19 findcol::@8 findcol::@16 findcol::@21 findcol::@7 findcol::@14 findcol::@6 findcol::@5 findcol::@12 findcol::@4 findcol::@2 findcol::@1 findcol::@9 
Loop head: initscreen::@1 tails: initscreen::@1 blocks: initscreen::@1 

NATURAL LOOPS WITH DEPTH
Found 0 loops in scope []
Found 1 loops in scope [main]
  Loop head: main::@1 tails: main::@5 blocks: main::@5 main::@4 main::@1 
Found 1 loops in scope [initscreen]
  Loop head: initscreen::@1 tails: initscreen::@1 blocks: initscreen::@1 
Found 2 loops in scope [render]
  Loop head: render::@2 tails: render::@5 blocks: render::@5 render::@2 
  Loop head: render::@1 tails: render::@3 blocks: render::@3 render::@5 render::@2 render::@1 
Found 0 loops in scope [animate]
Found 1 loops in scope [findcol]
  Loop head: findcol::@1 tails: findcol::@19 blocks: findcol::@19 findcol::@8 findcol::@16 findcol::@21 findcol::@7 findcol::@14 findcol::@6 findcol::@5 findcol::@12 findcol::@4 findcol::@2 findcol::@1 findcol::@9 
Loop head: main::@1 tails: main::@5 blocks: main::@5 main::@4 main::@1  depth: 1
Loop head: render::@2 tails: render::@5 blocks: render::@5 render::@2  depth: 3
Loop head: render::@1 tails: render::@3 blocks: render::@3 render::@5 render::@2 render::@1  depth: 2
Loop head: findcol::@1 tails: findcol::@19 blocks: findcol::@19 findcol::@8 findcol::@16 findcol::@21 findcol::@7 findcol::@14 findcol::@6 findcol::@5 findcol::@12 findcol::@4 findcol::@2 findcol::@1 findcol::@9  depth: 4
Loop head: initscreen::@1 tails: initscreen::@1 blocks: initscreen::@1  depth: 1


VARIABLE REGISTER WEIGHTS
(byte*) COLORS
(byte[]) COLS
(byte) FILL
(byte*) SCREEN
(byte[]) XPOS
(byte[]) YPOS
(void()) animate()
(byte/word~) animate::$0 4.0
(byte/signed byte/word/signed word/dword/signed dword~) animate::$12 4.0
(byte/word~) animate::$15 4.0
(byte/signed byte/word/signed word/dword/signed dword~) animate::$18 4.0
(byte/word~) animate::$3 4.0
(byte/signed byte/word/signed word/dword/signed dword~) animate::$6 4.0
(byte/word~) animate::$9 4.0
(byte()) findcol((byte) findcol::x , (byte) findcol::y)
(byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 20002.0
(byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 20002.0
(byte) findcol::diff
(byte) findcol::diff#0 20002.0
(byte) findcol::diff#1 20002.0
(byte) findcol::diff#2 20002.0
(byte) findcol::diff#3 20002.0
(byte) findcol::diff#4 10001.0
(byte) findcol::diff#6 13334.666666666666
(byte) findcol::i
(byte) findcol::i#1 10001.0
(byte) findcol::i#10 2631.842105263158
(byte) findcol::mincol
(byte) findcol::mincol#1 20002.0
(byte) findcol::mincol#10 1176.5882352941176
(byte) findcol::mincol#2 10001.0
(byte) findcol::mindiff
(byte) findcol::mindiff#10 1875.1875
(byte) findcol::mindiff#11 10001.0
(byte~) findcol::mindiff#13 20002.0
(byte~) findcol::mindiff#15 20002.0
(byte) findcol::return
(byte) findcol::return#0 2002.0
(byte) findcol::return#2 3667.333333333333
(byte) findcol::x
(byte) findcol::x#0 1640.2
(byte) findcol::xp
(byte) findcol::xp#0 10001.0
(byte) findcol::y
(byte) findcol::y#0 1708.5416666666665
(byte) findcol::yp
(byte) findcol::yp#0 6250.625
(void()) initscreen()
(byte*) initscreen::screen
(byte*) initscreen::screen#1 16.5
(byte*) initscreen::screen#2 16.5
(void()) main()
(byte) numpoints
(void()) render()
(byte) render::col
(byte) render::col#0 2002.0
(byte*) render::colline
(byte*) render::colline#1 67.33333333333333
(byte*) render::colline#5 120.29999999999998
(byte) render::x
(byte) render::x#1 1501.5
(byte) render::x#2 572.0
(byte) render::y
(byte) render::y#1 151.5
(byte) render::y#4 109.36363636363637

Initial phi equivalence classes
[ render::y#4 render::y#1 ]
[ render::colline#5 render::colline#1 ]
[ render::x#2 render::x#1 ]
[ findcol::i#10 findcol::i#1 ]
[ findcol::mindiff#10 findcol::mindiff#13 ]
[ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ]
[ findcol::diff#4 findcol::diff#1 findcol::diff#0 ]
[ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ]
[ initscreen::screen#2 initscreen::screen#1 ]
Added variable animate::$0 to zero page equivalence class [ animate::$0 ]
Added variable animate::$3 to zero page equivalence class [ animate::$3 ]
Added variable animate::$6 to zero page equivalence class [ animate::$6 ]
Added variable animate::$9 to zero page equivalence class [ animate::$9 ]
Added variable animate::$12 to zero page equivalence class [ animate::$12 ]
Added variable animate::$15 to zero page equivalence class [ animate::$15 ]
Added variable animate::$18 to zero page equivalence class [ animate::$18 ]
Added variable findcol::x#0 to zero page equivalence class [ findcol::x#0 ]
Added variable findcol::y#0 to zero page equivalence class [ findcol::y#0 ]
Added variable findcol::return#0 to zero page equivalence class [ findcol::return#0 ]
Added variable render::col#0 to zero page equivalence class [ render::col#0 ]
Added variable findcol::xp#0 to zero page equivalence class [ findcol::xp#0 ]
Added variable findcol::yp#0 to zero page equivalence class [ findcol::yp#0 ]
Added variable findcol::$10 to zero page equivalence class [ findcol::$10 ]
Added variable findcol::$12 to zero page equivalence class [ findcol::$12 ]
Complete equivalence classes
[ render::y#4 render::y#1 ]
[ render::colline#5 render::colline#1 ]
[ render::x#2 render::x#1 ]
[ findcol::i#10 findcol::i#1 ]
[ findcol::mindiff#10 findcol::mindiff#13 ]
[ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ]
[ findcol::diff#4 findcol::diff#1 findcol::diff#0 ]
[ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ]
[ initscreen::screen#2 initscreen::screen#1 ]
[ animate::$0 ]
[ animate::$3 ]
[ animate::$6 ]
[ animate::$9 ]
[ animate::$12 ]
[ animate::$15 ]
[ animate::$18 ]
[ findcol::x#0 ]
[ findcol::y#0 ]
[ findcol::return#0 ]
[ render::col#0 ]
[ findcol::xp#0 ]
[ findcol::yp#0 ]
[ findcol::$10 ]
[ findcol::$12 ]
Allocated zp ZP_BYTE:2 [ render::y#4 render::y#1 ]
Allocated zp ZP_WORD:3 [ render::colline#5 render::colline#1 ]
Allocated zp ZP_BYTE:5 [ render::x#2 render::x#1 ]
Allocated zp ZP_BYTE:6 [ findcol::i#10 findcol::i#1 ]
Allocated zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ]
Allocated zp ZP_BYTE:8 [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ]
Allocated zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ]
Allocated zp ZP_BYTE:10 [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ]
Allocated zp ZP_WORD:11 [ initscreen::screen#2 initscreen::screen#1 ]
Allocated zp ZP_BYTE:13 [ animate::$0 ]
Allocated zp ZP_BYTE:14 [ animate::$3 ]
Allocated zp ZP_BYTE:15 [ animate::$6 ]
Allocated zp ZP_BYTE:16 [ animate::$9 ]
Allocated zp ZP_BYTE:17 [ animate::$12 ]
Allocated zp ZP_BYTE:18 [ animate::$15 ]
Allocated zp ZP_BYTE:19 [ animate::$18 ]
Allocated zp ZP_BYTE:20 [ findcol::x#0 ]
Allocated zp ZP_BYTE:21 [ findcol::y#0 ]
Allocated zp ZP_BYTE:22 [ findcol::return#0 ]
Allocated zp ZP_BYTE:23 [ render::col#0 ]
Allocated zp ZP_BYTE:24 [ findcol::xp#0 ]
Allocated zp ZP_BYTE:25 [ findcol::yp#0 ]
Allocated zp ZP_BYTE:26 [ findcol::$10 ]
Allocated zp ZP_BYTE:27 [ findcol::$12 ]

INITIAL ASM
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
  .label SCREEN = $400
  .label COLORS = $d800
  .const FILL = $e6
  .const numpoints = 6
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
b5_from_bbegin:
  jmp b5
//SEG4 @5
b5:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @5 to main [phi:@5->main]
main_from_b5:
  jsr main
//SEG7 [3] phi from @5 to @end [phi:@5->@end]
bend_from_b5:
  jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
  //SEG10 [5] call initscreen param-assignment [ ] ( main:2 [ ] )
  //SEG11 [78] phi from main to initscreen [phi:main->initscreen]
  initscreen_from_main:
    jsr initscreen
  //SEG12 [6] phi from main main::@5 to main::@1 [phi:main/main::@5->main::@1]
  b1_from_main:
  b1_from_b5:
    jmp b1
  //SEG13 main::@1
  b1:
  //SEG14 [7] call render param-assignment [ ] ( main:2 [ ] )
  //SEG15 [38] phi from main::@1 to render [phi:main::@1->render]
  render_from_b1:
    jsr render
  //SEG16 [8] phi from main::@1 to main::@4 [phi:main::@1->main::@4]
  b4_from_b1:
    jmp b4
  //SEG17 main::@4
  b4:
  //SEG18 [9] call animate param-assignment [ ] ( main:2 [ ] )
    jsr animate
    jmp b5
  //SEG19 main::@5
  b5:
  //SEG20 [10] if(true) goto main::@1 [ ] ( main:2 [ ] ) -- true_then_la1 
    jmp b1_from_b5
    jmp breturn
  //SEG21 main::@return
  breturn:
  //SEG22 [11] return  [ ] ( main:2 [ ] )
    rts
}
//SEG23 animate
animate: {
    .label _0 = $d
    .label _3 = $e
    .label _6 = $f
    .label _9 = $10
    .label _12 = $11
    .label _15 = $12
    .label _18 = $13
  //SEG24 [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) -- vbuz1=_deref_pbuc1_plus_1 
    ldy XPOS+0
    iny
    sty _0
  //SEG25 [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 
    lda _0
    sta XPOS+0
  //SEG26 [14] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@1 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda XPOS+0
    cmp #$28
    bne b1
    jmp b7
  //SEG27 animate::@7
  b7:
  //SEG28 [15] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #0
    sta XPOS+0
    jmp b1
  //SEG29 animate::@1
  b1:
  //SEG30 [16] (byte/word~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) -- vbuz1=_deref_pbuc1_plus_1 
    ldy YPOS+0
    iny
    sty _3
  //SEG31 [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 
    lda _3
    sta YPOS+0
  //SEG32 [18] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@2 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda YPOS+0
    cmp #$19
    bne b2
    jmp b8
  //SEG33 animate::@8
  b8:
  //SEG34 [19] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #0
    sta YPOS+0
    jmp b2
  //SEG35 animate::@2
  b2:
  //SEG36 [20] (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) -- vbuz1=_deref_pbuc1_minus_1 
    ldx XPOS+1
    dex
    stx _6
  //SEG37 [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 
    lda _6
    sta XPOS+1
  //SEG38 [22] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda XPOS+1
    cmp #$ff
    bne b3
    jmp b9
  //SEG39 animate::@9
  b9:
  //SEG40 [23] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 40 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #$28
    sta XPOS+1
    jmp b3
  //SEG41 animate::@3
  b3:
  //SEG42 [24] (byte/word~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) -- vbuz1=_deref_pbuc1_plus_1 
    ldy YPOS+2
    iny
    sty _9
  //SEG43 [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/word~) animate::$9 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 
    lda _9
    sta YPOS+2
  //SEG44 [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@4 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda YPOS+2
    cmp #$19
    bne b4
    jmp b10
  //SEG45 animate::@10
  b10:
  //SEG46 [27] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #0
    sta YPOS+2
    jmp b4
  //SEG47 animate::@4
  b4:
  //SEG48 [28] (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) -- vbuz1=_deref_pbuc1_minus_1 
    ldx YPOS+3
    dex
    stx _12
  //SEG49 [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 
    lda _12
    sta YPOS+3
  //SEG50 [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda YPOS+3
    cmp #$ff
    bne breturn
    jmp b11
  //SEG51 animate::@11
  b11:
  //SEG52 [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #$19
    sta YPOS+3
  //SEG53 [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) -- vbuz1=_deref_pbuc1_plus_vbuc2 
    lda XPOS+3
    clc
    adc #7
    sta _15
  //SEG54 [33] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/word~) animate::$15 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 
    lda _15
    sta XPOS+3
  //SEG55 [34] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)<(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@return [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_lt_vbuc2_then_la1 
    lda XPOS+3
    cmp #$28
    bcc breturn
    jmp b12
  //SEG56 animate::@12
  b12:
  //SEG57 [35] (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) -- vbuz1=_deref_pbuc1_minus_vbuc2 
    lda XPOS+3
    sec
    sbc #$28
    sta _18
  //SEG58 [36] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuz1 
    lda _18
    sta XPOS+3
    jmp breturn
  //SEG59 animate::@return
  breturn:
  //SEG60 [37] return  [ ] ( main:2::animate:9 [ ] )
    rts
}
//SEG61 render
render: {
    .label col = $17
    .label x = 5
    .label colline = 3
    .label y = 2
  //SEG62 [39] phi from render to render::@1 [phi:render->render::@1]
  b1_from_render:
  //SEG63 [39] phi (byte*) render::colline#5 = (const byte*) COLORS#0 [phi:render->render::@1#0] -- pbuz1=pbuc1 
    lda #<COLORS
    sta colline
    lda #>COLORS
    sta colline+1
  //SEG64 [39] phi (byte) render::y#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render->render::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta y
    jmp b1
  //SEG65 [39] phi from render::@3 to render::@1 [phi:render::@3->render::@1]
  b1_from_b3:
  //SEG66 [39] phi (byte*) render::colline#5 = (byte*) render::colline#1 [phi:render::@3->render::@1#0] -- register_copy 
  //SEG67 [39] phi (byte) render::y#4 = (byte) render::y#1 [phi:render::@3->render::@1#1] -- register_copy 
    jmp b1
  //SEG68 render::@1
  b1:
  //SEG69 [40] phi from render::@1 to render::@2 [phi:render::@1->render::@2]
  b2_from_b1:
  //SEG70 [40] phi (byte) render::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render::@1->render::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta x
    jmp b2
  //SEG71 [40] phi from render::@5 to render::@2 [phi:render::@5->render::@2]
  b2_from_b5:
  //SEG72 [40] phi (byte) render::x#2 = (byte) render::x#1 [phi:render::@5->render::@2#0] -- register_copy 
    jmp b2
  //SEG73 render::@2
  b2:
  //SEG74 [41] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 ] ) -- vbuz1=vbuz2 
    lda x
    sta findcol.x
  //SEG75 [42] (byte) findcol::y#0 ← (byte) render::y#4 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 ] ) -- vbuz1=vbuz2 
    lda y
    sta findcol.y
  //SEG76 [43] call findcol param-assignment [ render::y#4 render::colline#5 render::x#2 findcol::return#2 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 findcol::return#2 ] )
  //SEG77 [53] phi from render::@2 to findcol [phi:render::@2->findcol]
  findcol_from_b2:
    jsr findcol
  //SEG78 [44] (byte) findcol::return#0 ← (byte) findcol::return#2 [ render::y#4 render::colline#5 render::x#2 findcol::return#0 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 findcol::return#0 ] ) -- vbuz1=vbuz2 
    lda findcol.return_2
    sta findcol.return
    jmp b5
  //SEG79 render::@5
  b5:
  //SEG80 [45] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#4 render::colline#5 render::x#2 render::col#0 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 render::col#0 ] ) -- vbuz1=vbuz2 
    lda findcol.return
    sta col
  //SEG81 [46] *((byte*) render::colline#5 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#4 render::colline#5 render::x#2 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 ] ) -- pbuz1_derefidx_vbuz2=vbuz3 
    lda col
    ldy x
    sta (colline),y
  //SEG82 [47] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#4 render::colline#5 render::x#1 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#1 ] ) -- vbuz1=_inc_vbuz1 
    inc x
  //SEG83 [48] if((byte) render::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render::@2 [ render::y#4 render::colline#5 render::x#1 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#1 ] ) -- vbuz1_neq_vbuc1_then_la1 
    lda x
    cmp #$28
    bne b2_from_b5
    jmp b3
  //SEG84 render::@3
  b3:
  //SEG85 [49] (byte*) render::colline#1 ← (byte*) render::colline#5 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ render::y#4 render::colline#1 ] ( main:2::render:7 [ render::y#4 render::colline#1 ] ) -- pbuz1=pbuz1_plus_vbuc1 
    lda colline
    clc
    adc #$28
    sta colline
    bcc !+
    inc colline+1
  !:
  //SEG86 [50] (byte) render::y#1 ← ++ (byte) render::y#4 [ render::y#1 render::colline#1 ] ( main:2::render:7 [ render::y#1 render::colline#1 ] ) -- vbuz1=_inc_vbuz1 
    inc y
  //SEG87 [51] if((byte) render::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto render::@1 [ render::y#1 render::colline#1 ] ( main:2::render:7 [ render::y#1 render::colline#1 ] ) -- vbuz1_neq_vbuc1_then_la1 
    lda y
    cmp #$19
    bne b1_from_b3
    jmp breturn
  //SEG88 render::@return
  breturn:
  //SEG89 [52] return  [ ] ( main:2::render:7 [ ] )
    rts
}
//SEG90 findcol
findcol: {
    .label _10 = $1a
    .label _12 = $1b
    .label x = $14
    .label y = $15
    .label return = $16
    .label xp = $18
    .label yp = $19
    .label return_2 = 8
    .label diff = 9
    .label diff_2 = $a
    .label diff_3 = $a
    .label i = 6
    .label mincol = 8
    .label diff_6 = $a
    .label mindiff = 7
    .label mindiff_11 = $a
    .label mindiff_15 = $a
  //SEG91 [54] phi from findcol to findcol::@1 [phi:findcol->findcol::@1]
  b1_from_findcol:
  //SEG92 [54] phi (byte) findcol::mincol#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:findcol->findcol::@1#0] -- vbuz1=vbuc1 
    lda #0
    sta mincol
  //SEG93 [54] phi (byte) findcol::mindiff#10 = (byte/word/signed word/dword/signed dword) 255 [phi:findcol->findcol::@1#1] -- vbuz1=vbuc1 
    lda #$ff
    sta mindiff
  //SEG94 [54] phi (byte) findcol::i#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:findcol->findcol::@1#2] -- vbuz1=vbuc1 
    lda #0
    sta i
    jmp b1
  //SEG95 findcol::@1
  b1:
  //SEG96 [55] (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#10) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 
    ldy i
    lda XPOS,y
    sta xp
  //SEG97 [56] (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#10) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 
    ldy i
    lda YPOS,y
    sta yp
  //SEG98 [57] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ) -- vbuz1_neq_vbuz2_then_la1 
    lda x
    cmp xp
    bne b2
    jmp b9
  //SEG99 findcol::@9
  b9:
  //SEG100 [58] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ) -- vbuz1_neq_vbuz2_then_la1 
    lda y
    cmp yp
    bne b2
  //SEG101 [59] phi from findcol::@9 to findcol::@return [phi:findcol::@9->findcol::@return]
  breturn_from_b9:
  //SEG102 [59] phi (byte) findcol::return#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:findcol::@9->findcol::@return#0] -- vbuz1=vbuc1 
    lda #0
    sta return_2
    jmp breturn
  //SEG103 findcol::@return
  breturn:
  //SEG104 [60] return  [ findcol::return#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::return#2 ] )
    rts
  //SEG105 findcol::@2
  b2:
  //SEG106 [61] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ) -- vbuz1_ge_vbuz2_then_la1 
    lda x
    cmp xp
    bcs b4
    jmp b12
  //SEG107 findcol::@12
  b12:
  //SEG108 [62] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ) -- vbuz1=vbuz2_minus_vbuz3 
    lda xp
    sec
    sbc x
    sta diff
  //SEG109 [63] phi from findcol::@12 findcol::@4 to findcol::@5 [phi:findcol::@12/findcol::@4->findcol::@5]
  b5_from_b12:
  b5_from_b4:
  //SEG110 [63] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 [phi:findcol::@12/findcol::@4->findcol::@5#0] -- register_copy 
    jmp b5
  //SEG111 findcol::@5
  b5:
  //SEG112 [64] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#4 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#4 ] ) -- vbuz1_ge_vbuz2_then_la1 
    lda y
    cmp yp
    bcs b6
    jmp b14
  //SEG113 findcol::@14
  b14:
  //SEG114 [65] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) -- vbuz1=vbuz2_minus_vbuz3 
    lda yp
    sec
    sbc y
    sta _10
  //SEG115 [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) -- vbuz1=vbuz2_plus_vbuz3 
    lda diff
    clc
    adc _10
    sta diff_3
  //SEG116 [67] phi from findcol::@14 findcol::@6 to findcol::@7 [phi:findcol::@14/findcol::@6->findcol::@7]
  b7_from_b14:
  b7_from_b6:
  //SEG117 [67] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 [phi:findcol::@14/findcol::@6->findcol::@7#0] -- register_copy 
    jmp b7
  //SEG118 findcol::@7
  b7:
  //SEG119 [68] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#6 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#6 ] ) -- vbuz1_ge_vbuz2_then_la1 
    lda diff_6
    cmp mindiff
    bcs b21
    jmp b16
  //SEG120 findcol::@16
  b16:
  //SEG121 [69] (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#10) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::diff#6 findcol::mincol#1 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::diff#6 findcol::mincol#1 ] ) -- vbuz1=pbuc1_derefidx_vbuz2 
    ldy i
    lda COLS,y
    sta mincol
  //SEG122 [70] phi from findcol::@16 findcol::@21 to findcol::@8 [phi:findcol::@16/findcol::@21->findcol::@8]
  b8_from_b16:
  b8_from_b21:
  //SEG123 [70] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 [phi:findcol::@16/findcol::@21->findcol::@8#0] -- register_copy 
  //SEG124 [70] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 [phi:findcol::@16/findcol::@21->findcol::@8#1] -- register_copy 
    jmp b8
  //SEG125 findcol::@8
  b8:
  //SEG126 [71] (byte) findcol::i#1 ← ++ (byte) findcol::i#10 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] ) -- vbuz1=_inc_vbuz1 
    inc i
  //SEG127 [72] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] ) -- vbuz1_lt_vbuc1_then_la1 
    lda i
    cmp #numpoints
    bcc b19
  //SEG128 [59] phi from findcol::@8 to findcol::@return [phi:findcol::@8->findcol::@return]
  breturn_from_b8:
  //SEG129 [59] phi (byte) findcol::return#2 = (byte) findcol::mincol#2 [phi:findcol::@8->findcol::@return#0] -- register_copy 
    jmp breturn
  //SEG130 findcol::@19
  b19:
  //SEG131 [73] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ] ) -- vbuz1=vbuz2 
    lda mindiff_11
    sta mindiff
  //SEG132 [54] phi from findcol::@19 to findcol::@1 [phi:findcol::@19->findcol::@1]
  b1_from_b19:
  //SEG133 [54] phi (byte) findcol::mincol#10 = (byte) findcol::mincol#2 [phi:findcol::@19->findcol::@1#0] -- register_copy 
  //SEG134 [54] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 [phi:findcol::@19->findcol::@1#1] -- register_copy 
  //SEG135 [54] phi (byte) findcol::i#10 = (byte) findcol::i#1 [phi:findcol::@19->findcol::@1#2] -- register_copy 
    jmp b1
  //SEG136 findcol::@21
  b21:
  //SEG137 [74] (byte~) findcol::mindiff#15 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mincol#10 findcol::mindiff#15 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mincol#10 findcol::mindiff#15 ] ) -- vbuz1=vbuz2 
    lda mindiff
    sta mindiff_15
    jmp b8_from_b21
  //SEG138 findcol::@6
  b6:
  //SEG139 [75] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) -- vbuz1=vbuz2_minus_vbuz3 
    lda y
    sec
    sbc yp
    sta _12
  //SEG140 [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) -- vbuz1=vbuz2_plus_vbuz3 
    lda diff
    clc
    adc _12
    sta diff_2
    jmp b7_from_b6
  //SEG141 findcol::@4
  b4:
  //SEG142 [77] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ) -- vbuz1=vbuz2_minus_vbuz3 
    lda x
    sec
    sbc xp
    sta diff
    jmp b5_from_b4
}
//SEG143 initscreen
initscreen: {
    .label screen = $b
  //SEG144 [79] phi from initscreen to initscreen::@1 [phi:initscreen->initscreen::@1]
  b1_from_initscreen:
  //SEG145 [79] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 [phi:initscreen->initscreen::@1#0] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta screen
    lda #>SCREEN
    sta screen+1
    jmp b1
  //SEG146 [79] phi from initscreen::@1 to initscreen::@1 [phi:initscreen::@1->initscreen::@1]
  b1_from_b1:
  //SEG147 [79] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 [phi:initscreen::@1->initscreen::@1#0] -- register_copy 
    jmp b1
  //SEG148 initscreen::@1
  b1:
  //SEG149 [80] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] ( main:2::initscreen:5 [ initscreen::screen#2 ] ) -- _deref_pbuz1=vbuc1 
    lda #FILL
    ldy #0
    sta (screen),y
  //SEG150 [81] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] ( main:2::initscreen:5 [ initscreen::screen#1 ] ) -- pbuz1=_inc_pbuz1 
    inc screen
    bne !+
    inc screen+1
  !:
  //SEG151 [82] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto initscreen::@1 [ initscreen::screen#1 ] ( main:2::initscreen:5 [ initscreen::screen#1 ] ) -- pbuz1_lt_pbuc1_then_la1 
    lda screen+1
    cmp #>SCREEN+$3e8
    bcc b1_from_b1
    bne !+
    lda screen
    cmp #<SCREEN+$3e8
    bcc b1_from_b1
  !:
    jmp breturn
  //SEG152 initscreen::@return
  breturn:
  //SEG153 [83] return  [ ] ( main:2::initscreen:5 [ ] )
    rts
}
  XPOS: .byte 5, $f, 6, $22, $15, $1f
  YPOS: .byte 5, 8, $e, 2, $11, $16
  COLS: .byte 1, 2, 3, 4, 5, 7

REGISTER UPLIFT POTENTIAL REGISTERS
Statement [14] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@1 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [15] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [18] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@2 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [19] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [22] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@3 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [23] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 40 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@4 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [27] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) always clobbers reg byte a 
Statement [34] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)<(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@return [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [35] (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) always clobbers reg byte a 
Statement [49] (byte*) render::colline#1 ← (byte*) render::colline#5 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ render::y#4 render::colline#1 ] ( main:2::render:7 [ render::y#4 render::colline#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ render::y#4 render::y#1 ]
Statement [62] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ render::x#2 render::x#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:20 [ findcol::x#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:21 [ findcol::y#0 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ findcol::i#10 findcol::i#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ]
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:25 [ findcol::yp#0 ]
Statement [65] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) always clobbers reg byte a 
Removing always clobbered register reg byte a as potential for zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ]
Statement [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) always clobbers reg byte a 
Statement [75] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) always clobbers reg byte a 
Statement [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) always clobbers reg byte a 
Statement [77] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ) always clobbers reg byte a 
Statement [80] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] ( main:2::initscreen:5 [ initscreen::screen#2 ] ) always clobbers reg byte a reg byte y 
Statement [82] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto initscreen::@1 [ initscreen::screen#1 ] ( main:2::initscreen:5 [ initscreen::screen#1 ] ) always clobbers reg byte a 
Statement [14] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@1 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [15] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [18] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@2 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [19] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [22] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@3 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [23] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 40 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@4 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [27] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25 [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) always clobbers reg byte a 
Statement [34] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)<(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@return [ ] ( main:2::animate:9 [ ] ) always clobbers reg byte a 
Statement [35] (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) always clobbers reg byte a 
Statement [49] (byte*) render::colline#1 ← (byte*) render::colline#5 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ render::y#4 render::colline#1 ] ( main:2::render:7 [ render::y#4 render::colline#1 ] ) always clobbers reg byte a 
Statement [62] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ) always clobbers reg byte a 
Statement [65] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) always clobbers reg byte a 
Statement [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) always clobbers reg byte a 
Statement [75] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) always clobbers reg byte a 
Statement [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) always clobbers reg byte a 
Statement [77] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ) always clobbers reg byte a 
Statement [80] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] ( main:2::initscreen:5 [ initscreen::screen#2 ] ) always clobbers reg byte a reg byte y 
Statement [82] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto initscreen::@1 [ initscreen::screen#1 ] ( main:2::initscreen:5 [ initscreen::screen#1 ] ) always clobbers reg byte a 
Potential registers zp ZP_BYTE:2 [ render::y#4 render::y#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:3 [ render::colline#5 render::colline#1 ] : zp ZP_WORD:3 , 
Potential registers zp ZP_BYTE:5 [ render::x#2 render::x#1 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:6 [ findcol::i#10 findcol::i#1 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] : zp ZP_BYTE:7 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:8 [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] : zp ZP_BYTE:9 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:10 [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ] : zp ZP_BYTE:10 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_WORD:11 [ initscreen::screen#2 initscreen::screen#1 ] : zp ZP_WORD:11 , 
Potential registers zp ZP_BYTE:13 [ animate::$0 ] : zp ZP_BYTE:13 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:14 [ animate::$3 ] : zp ZP_BYTE:14 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:15 [ animate::$6 ] : zp ZP_BYTE:15 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:16 [ animate::$9 ] : zp ZP_BYTE:16 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:17 [ animate::$12 ] : zp ZP_BYTE:17 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:18 [ animate::$15 ] : zp ZP_BYTE:18 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:19 [ animate::$18 ] : zp ZP_BYTE:19 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:20 [ findcol::x#0 ] : zp ZP_BYTE:20 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:21 [ findcol::y#0 ] : zp ZP_BYTE:21 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:22 [ findcol::return#0 ] : zp ZP_BYTE:22 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:23 [ render::col#0 ] : zp ZP_BYTE:23 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:24 [ findcol::xp#0 ] : zp ZP_BYTE:24 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:25 [ findcol::yp#0 ] : zp ZP_BYTE:25 , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:26 [ findcol::$10 ] : zp ZP_BYTE:26 , reg byte a , reg byte x , reg byte y , 
Potential registers zp ZP_BYTE:27 [ findcol::$12 ] : zp ZP_BYTE:27 , reg byte a , reg byte x , reg byte y , 

REGISTER UPLIFT SCOPES
Uplift Scope [findcol] 83,341.67: zp ZP_BYTE:10 [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ] 50,005: zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] 34,846.92: zp ZP_BYTE:8 [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ] 21,877.19: zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] 20,002: zp ZP_BYTE:26 [ findcol::$10 ] 20,002: zp ZP_BYTE:27 [ findcol::$12 ] 12,632.84: zp ZP_BYTE:6 [ findcol::i#10 findcol::i#1 ] 10,001: zp ZP_BYTE:24 [ findcol::xp#0 ] 6,250.62: zp ZP_BYTE:25 [ findcol::yp#0 ] 2,002: zp ZP_BYTE:22 [ findcol::return#0 ] 1,708.54: zp ZP_BYTE:21 [ findcol::y#0 ] 1,640.2: zp ZP_BYTE:20 [ findcol::x#0 ] 
Uplift Scope [render] 2,073.5: zp ZP_BYTE:5 [ render::x#2 render::x#1 ] 2,002: zp ZP_BYTE:23 [ render::col#0 ] 260.86: zp ZP_BYTE:2 [ render::y#4 render::y#1 ] 187.63: zp ZP_WORD:3 [ render::colline#5 render::colline#1 ] 
Uplift Scope [initscreen] 33: zp ZP_WORD:11 [ initscreen::screen#2 initscreen::screen#1 ] 
Uplift Scope [animate] 4: zp ZP_BYTE:13 [ animate::$0 ] 4: zp ZP_BYTE:14 [ animate::$3 ] 4: zp ZP_BYTE:15 [ animate::$6 ] 4: zp ZP_BYTE:16 [ animate::$9 ] 4: zp ZP_BYTE:17 [ animate::$12 ] 4: zp ZP_BYTE:18 [ animate::$15 ] 4: zp ZP_BYTE:19 [ animate::$18 ] 
Uplift Scope [main] 
Uplift Scope [] 

Uplift attempts [findcol] 10000/2239488 (limiting to 10000)
Uplifting [findcol] best 1713995 combination reg byte a [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ] zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] reg byte y [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ] zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] reg byte a [ findcol::$10 ] reg byte a [ findcol::$12 ] reg byte x [ findcol::i#10 findcol::i#1 ] zp ZP_BYTE:24 [ findcol::xp#0 ] zp ZP_BYTE:25 [ findcol::yp#0 ] zp ZP_BYTE:22 [ findcol::return#0 ] zp ZP_BYTE:21 [ findcol::y#0 ] zp ZP_BYTE:20 [ findcol::x#0 ] 
Limited combination testing to 10000 combinations of 2239488 possible.
Uplifting [render] best 1707995 combination zp ZP_BYTE:5 [ render::x#2 render::x#1 ] reg byte a [ render::col#0 ] zp ZP_BYTE:2 [ render::y#4 render::y#1 ] zp ZP_WORD:3 [ render::colline#5 render::colline#1 ] 
Uplifting [initscreen] best 1707995 combination zp ZP_WORD:11 [ initscreen::screen#2 initscreen::screen#1 ] 
Uplift attempts [animate] 10000/16384 (limiting to 10000)
Uplifting [animate] best 1707953 combination reg byte x [ animate::$0 ] reg byte x [ animate::$3 ] reg byte x [ animate::$6 ] reg byte x [ animate::$9 ] reg byte x [ animate::$12 ] reg byte a [ animate::$15 ] reg byte a [ animate::$18 ] 
Limited combination testing to 10000 combinations of 16384 possible.
Uplifting [main] best 1707953 combination 
Uplifting [] best 1707953 combination 
Attempting to uplift remaining variables inzp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ]
Uplifting [findcol] best 1707953 combination zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ]
Uplifting [findcol] best 1707953 combination zp ZP_BYTE:7 [ findcol::mindiff#10 findcol::mindiff#13 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:24 [ findcol::xp#0 ]
Uplifting [findcol] best 1707953 combination zp ZP_BYTE:24 [ findcol::xp#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:25 [ findcol::yp#0 ]
Uplifting [findcol] best 1707953 combination zp ZP_BYTE:25 [ findcol::yp#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:5 [ render::x#2 render::x#1 ]
Uplifting [render] best 1707953 combination zp ZP_BYTE:5 [ render::x#2 render::x#1 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:22 [ findcol::return#0 ]
Uplifting [findcol] best 1703953 combination reg byte a [ findcol::return#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:21 [ findcol::y#0 ]
Uplifting [findcol] best 1703953 combination zp ZP_BYTE:21 [ findcol::y#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:20 [ findcol::x#0 ]
Uplifting [findcol] best 1703953 combination zp ZP_BYTE:20 [ findcol::x#0 ] 
Attempting to uplift remaining variables inzp ZP_BYTE:2 [ render::y#4 render::y#1 ]
Uplifting [render] best 1703953 combination zp ZP_BYTE:2 [ render::y#4 render::y#1 ] 
Coalescing zero page register [ zp ZP_BYTE:9 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 ] ] with [ zp ZP_BYTE:24 [ findcol::xp#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:2 [ render::y#4 render::y#1 ] ] with [ zp ZP_BYTE:21 [ findcol::y#0 ] ]
Coalescing zero page register [ zp ZP_BYTE:5 [ render::x#2 render::x#1 ] ] with [ zp ZP_BYTE:20 [ findcol::x#0 ] ]
Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:6 [ findcol::mindiff#10 findcol::mindiff#13 ]
Allocated (was zp ZP_BYTE:9) zp ZP_BYTE:7 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 findcol::xp#0 ]
Allocated (was zp ZP_WORD:11) zp ZP_WORD:8 [ initscreen::screen#2 initscreen::screen#1 ]
Allocated (was zp ZP_BYTE:25) zp ZP_BYTE:10 [ findcol::yp#0 ]

ASSEMBLER BEFORE OPTIMIZATION
//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
  .label SCREEN = $400
  .label COLORS = $d800
  .const FILL = $e6
  .const numpoints = 6
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
b5_from_bbegin:
  jmp b5
//SEG4 @5
b5:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @5 to main [phi:@5->main]
main_from_b5:
  jsr main
//SEG7 [3] phi from @5 to @end [phi:@5->@end]
bend_from_b5:
  jmp bend
//SEG8 @end
bend:
//SEG9 main
main: {
  //SEG10 [5] call initscreen param-assignment [ ] ( main:2 [ ] )
  //SEG11 [78] phi from main to initscreen [phi:main->initscreen]
  initscreen_from_main:
    jsr initscreen
  //SEG12 [6] phi from main main::@5 to main::@1 [phi:main/main::@5->main::@1]
  b1_from_main:
  b1_from_b5:
    jmp b1
  //SEG13 main::@1
  b1:
  //SEG14 [7] call render param-assignment [ ] ( main:2 [ ] )
  //SEG15 [38] phi from main::@1 to render [phi:main::@1->render]
  render_from_b1:
    jsr render
  //SEG16 [8] phi from main::@1 to main::@4 [phi:main::@1->main::@4]
  b4_from_b1:
    jmp b4
  //SEG17 main::@4
  b4:
  //SEG18 [9] call animate param-assignment [ ] ( main:2 [ ] )
    jsr animate
    jmp b5
  //SEG19 main::@5
  b5:
  //SEG20 [10] if(true) goto main::@1 [ ] ( main:2 [ ] ) -- true_then_la1 
    jmp b1_from_b5
    jmp breturn
  //SEG21 main::@return
  breturn:
  //SEG22 [11] return  [ ] ( main:2 [ ] )
    rts
}
//SEG23 animate
animate: {
  //SEG24 [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) -- vbuxx=_deref_pbuc1_plus_1 
    ldx XPOS+0
    inx
  //SEG25 [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx 
    stx XPOS+0
  //SEG26 [14] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@1 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda XPOS+0
    cmp #$28
    bne b1
    jmp b7
  //SEG27 animate::@7
  b7:
  //SEG28 [15] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #0
    sta XPOS+0
    jmp b1
  //SEG29 animate::@1
  b1:
  //SEG30 [16] (byte/word~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) -- vbuxx=_deref_pbuc1_plus_1 
    ldx YPOS+0
    inx
  //SEG31 [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx 
    stx YPOS+0
  //SEG32 [18] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@2 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda YPOS+0
    cmp #$19
    bne b2
    jmp b8
  //SEG33 animate::@8
  b8:
  //SEG34 [19] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #0
    sta YPOS+0
    jmp b2
  //SEG35 animate::@2
  b2:
  //SEG36 [20] (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) -- vbuxx=_deref_pbuc1_minus_1 
    ldx XPOS+1
    dex
  //SEG37 [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx 
    stx XPOS+1
  //SEG38 [22] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda XPOS+1
    cmp #$ff
    bne b3
    jmp b9
  //SEG39 animate::@9
  b9:
  //SEG40 [23] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 40 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #$28
    sta XPOS+1
    jmp b3
  //SEG41 animate::@3
  b3:
  //SEG42 [24] (byte/word~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) -- vbuxx=_deref_pbuc1_plus_1 
    ldx YPOS+2
    inx
  //SEG43 [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/word~) animate::$9 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx 
    stx YPOS+2
  //SEG44 [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@4 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda YPOS+2
    cmp #$19
    bne b4
    jmp b10
  //SEG45 animate::@10
  b10:
  //SEG46 [27] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #0
    sta YPOS+2
    jmp b4
  //SEG47 animate::@4
  b4:
  //SEG48 [28] (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) -- vbuxx=_deref_pbuc1_minus_1 
    ldx YPOS+3
    dex
  //SEG49 [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx 
    stx YPOS+3
  //SEG50 [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 
    lda YPOS+3
    cmp #$ff
    bne breturn
    jmp b11
  //SEG51 animate::@11
  b11:
  //SEG52 [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #$19
    sta YPOS+3
  //SEG53 [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) -- vbuaa=_deref_pbuc1_plus_vbuc2 
    lda XPOS+3
    clc
    adc #7
  //SEG54 [33] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/word~) animate::$15 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa 
    sta XPOS+3
  //SEG55 [34] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)<(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@return [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_lt_vbuc2_then_la1 
    lda XPOS+3
    cmp #$28
    bcc breturn
    jmp b12
  //SEG56 animate::@12
  b12:
  //SEG57 [35] (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) -- vbuaa=_deref_pbuc1_minus_vbuc2 
    lda XPOS+3
    sec
    sbc #$28
  //SEG58 [36] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa 
    sta XPOS+3
    jmp breturn
  //SEG59 animate::@return
  breturn:
  //SEG60 [37] return  [ ] ( main:2::animate:9 [ ] )
    rts
}
//SEG61 render
render: {
    .label x = 5
    .label colline = 3
    .label y = 2
  //SEG62 [39] phi from render to render::@1 [phi:render->render::@1]
  b1_from_render:
  //SEG63 [39] phi (byte*) render::colline#5 = (const byte*) COLORS#0 [phi:render->render::@1#0] -- pbuz1=pbuc1 
    lda #<COLORS
    sta colline
    lda #>COLORS
    sta colline+1
  //SEG64 [39] phi (byte) render::y#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render->render::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta y
    jmp b1
  //SEG65 [39] phi from render::@3 to render::@1 [phi:render::@3->render::@1]
  b1_from_b3:
  //SEG66 [39] phi (byte*) render::colline#5 = (byte*) render::colline#1 [phi:render::@3->render::@1#0] -- register_copy 
  //SEG67 [39] phi (byte) render::y#4 = (byte) render::y#1 [phi:render::@3->render::@1#1] -- register_copy 
    jmp b1
  //SEG68 render::@1
  b1:
  //SEG69 [40] phi from render::@1 to render::@2 [phi:render::@1->render::@2]
  b2_from_b1:
  //SEG70 [40] phi (byte) render::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render::@1->render::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta x
    jmp b2
  //SEG71 [40] phi from render::@5 to render::@2 [phi:render::@5->render::@2]
  b2_from_b5:
  //SEG72 [40] phi (byte) render::x#2 = (byte) render::x#1 [phi:render::@5->render::@2#0] -- register_copy 
    jmp b2
  //SEG73 render::@2
  b2:
  //SEG74 [41] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 ] )
    // (byte) findcol::x#0 = (byte) render::x#2  // register copy zp ZP_BYTE:5
  //SEG75 [42] (byte) findcol::y#0 ← (byte) render::y#4 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 ] )
    // (byte) findcol::y#0 = (byte) render::y#4  // register copy zp ZP_BYTE:2
  //SEG76 [43] call findcol param-assignment [ render::y#4 render::colline#5 render::x#2 findcol::return#2 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 findcol::return#2 ] )
  //SEG77 [53] phi from render::@2 to findcol [phi:render::@2->findcol]
  findcol_from_b2:
    jsr findcol
  //SEG78 [44] (byte) findcol::return#0 ← (byte) findcol::return#2 [ render::y#4 render::colline#5 render::x#2 findcol::return#0 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 findcol::return#0 ] ) -- vbuaa=vbuyy 
    tya
    jmp b5
  //SEG79 render::@5
  b5:
  //SEG80 [45] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#4 render::colline#5 render::x#2 render::col#0 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 render::col#0 ] )
    // (byte) render::col#0 = (byte) findcol::return#0  // register copy reg byte a
  //SEG81 [46] *((byte*) render::colline#5 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#4 render::colline#5 render::x#2 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 ] ) -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy x
    sta (colline),y
  //SEG82 [47] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#4 render::colline#5 render::x#1 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#1 ] ) -- vbuz1=_inc_vbuz1 
    inc x
  //SEG83 [48] if((byte) render::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render::@2 [ render::y#4 render::colline#5 render::x#1 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#1 ] ) -- vbuz1_neq_vbuc1_then_la1 
    lda x
    cmp #$28
    bne b2_from_b5
    jmp b3
  //SEG84 render::@3
  b3:
  //SEG85 [49] (byte*) render::colline#1 ← (byte*) render::colline#5 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ render::y#4 render::colline#1 ] ( main:2::render:7 [ render::y#4 render::colline#1 ] ) -- pbuz1=pbuz1_plus_vbuc1 
    lda colline
    clc
    adc #$28
    sta colline
    bcc !+
    inc colline+1
  !:
  //SEG86 [50] (byte) render::y#1 ← ++ (byte) render::y#4 [ render::y#1 render::colline#1 ] ( main:2::render:7 [ render::y#1 render::colline#1 ] ) -- vbuz1=_inc_vbuz1 
    inc y
  //SEG87 [51] if((byte) render::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto render::@1 [ render::y#1 render::colline#1 ] ( main:2::render:7 [ render::y#1 render::colline#1 ] ) -- vbuz1_neq_vbuc1_then_la1 
    lda y
    cmp #$19
    bne b1_from_b3
    jmp breturn
  //SEG88 render::@return
  breturn:
  //SEG89 [52] return  [ ] ( main:2::render:7 [ ] )
    rts
}
//SEG90 findcol
findcol: {
    .label x = 5
    .label y = 2
    .label xp = 7
    .label yp = $a
    .label diff = 7
    .label mindiff = 6
  //SEG91 [54] phi from findcol to findcol::@1 [phi:findcol->findcol::@1]
  b1_from_findcol:
  //SEG92 [54] phi (byte) findcol::mincol#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:findcol->findcol::@1#0] -- vbuyy=vbuc1 
    ldy #0
  //SEG93 [54] phi (byte) findcol::mindiff#10 = (byte/word/signed word/dword/signed dword) 255 [phi:findcol->findcol::@1#1] -- vbuz1=vbuc1 
    lda #$ff
    sta mindiff
  //SEG94 [54] phi (byte) findcol::i#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:findcol->findcol::@1#2] -- vbuxx=vbuc1 
    ldx #0
    jmp b1
  //SEG95 findcol::@1
  b1:
  //SEG96 [55] (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#10) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 ] ) -- vbuz1=pbuc1_derefidx_vbuxx 
    lda XPOS,x
    sta xp
  //SEG97 [56] (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#10) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ) -- vbuz1=pbuc1_derefidx_vbuxx 
    lda YPOS,x
    sta yp
  //SEG98 [57] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ) -- vbuz1_neq_vbuz2_then_la1 
    lda x
    cmp xp
    bne b2
    jmp b9
  //SEG99 findcol::@9
  b9:
  //SEG100 [58] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ) -- vbuz1_neq_vbuz2_then_la1 
    lda y
    cmp yp
    bne b2
  //SEG101 [59] phi from findcol::@9 to findcol::@return [phi:findcol::@9->findcol::@return]
  breturn_from_b9:
  //SEG102 [59] phi (byte) findcol::return#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:findcol::@9->findcol::@return#0] -- vbuyy=vbuc1 
    ldy #0
    jmp breturn
  //SEG103 findcol::@return
  breturn:
  //SEG104 [60] return  [ findcol::return#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::return#2 ] )
    rts
  //SEG105 findcol::@2
  b2:
  //SEG106 [61] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ) -- vbuz1_ge_vbuz2_then_la1 
    lda x
    cmp xp
    bcs b4
    jmp b12
  //SEG107 findcol::@12
  b12:
  //SEG108 [62] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ) -- vbuz1=vbuz1_minus_vbuz2 
    lda diff
    sec
    sbc x
    sta diff
  //SEG109 [63] phi from findcol::@12 findcol::@4 to findcol::@5 [phi:findcol::@12/findcol::@4->findcol::@5]
  b5_from_b12:
  b5_from_b4:
  //SEG110 [63] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 [phi:findcol::@12/findcol::@4->findcol::@5#0] -- register_copy 
    jmp b5
  //SEG111 findcol::@5
  b5:
  //SEG112 [64] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#4 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#4 ] ) -- vbuz1_ge_vbuz2_then_la1 
    lda y
    cmp yp
    bcs b6
    jmp b14
  //SEG113 findcol::@14
  b14:
  //SEG114 [65] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) -- vbuaa=vbuz1_minus_vbuz2 
    lda yp
    sec
    sbc y
  //SEG115 [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) -- vbuaa=vbuz1_plus_vbuaa 
    clc
    adc diff
  //SEG116 [67] phi from findcol::@14 findcol::@6 to findcol::@7 [phi:findcol::@14/findcol::@6->findcol::@7]
  b7_from_b14:
  b7_from_b6:
  //SEG117 [67] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 [phi:findcol::@14/findcol::@6->findcol::@7#0] -- register_copy 
    jmp b7
  //SEG118 findcol::@7
  b7:
  //SEG119 [68] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#6 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#6 ] ) -- vbuaa_ge_vbuz1_then_la1 
    cmp mindiff
    bcs b21
    jmp b16
  //SEG120 findcol::@16
  b16:
  //SEG121 [69] (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#10) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::diff#6 findcol::mincol#1 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::diff#6 findcol::mincol#1 ] ) -- vbuyy=pbuc1_derefidx_vbuxx 
    ldy COLS,x
  //SEG122 [70] phi from findcol::@16 findcol::@21 to findcol::@8 [phi:findcol::@16/findcol::@21->findcol::@8]
  b8_from_b16:
  b8_from_b21:
  //SEG123 [70] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 [phi:findcol::@16/findcol::@21->findcol::@8#0] -- register_copy 
  //SEG124 [70] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 [phi:findcol::@16/findcol::@21->findcol::@8#1] -- register_copy 
    jmp b8
  //SEG125 findcol::@8
  b8:
  //SEG126 [71] (byte) findcol::i#1 ← ++ (byte) findcol::i#10 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] ) -- vbuxx=_inc_vbuxx 
    inx
  //SEG127 [72] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] ) -- vbuxx_lt_vbuc1_then_la1 
    cpx #numpoints
    bcc b19
  //SEG128 [59] phi from findcol::@8 to findcol::@return [phi:findcol::@8->findcol::@return]
  breturn_from_b8:
  //SEG129 [59] phi (byte) findcol::return#2 = (byte) findcol::mincol#2 [phi:findcol::@8->findcol::@return#0] -- register_copy 
    jmp breturn
  //SEG130 findcol::@19
  b19:
  //SEG131 [73] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ] ) -- vbuz1=vbuaa 
    sta mindiff
  //SEG132 [54] phi from findcol::@19 to findcol::@1 [phi:findcol::@19->findcol::@1]
  b1_from_b19:
  //SEG133 [54] phi (byte) findcol::mincol#10 = (byte) findcol::mincol#2 [phi:findcol::@19->findcol::@1#0] -- register_copy 
  //SEG134 [54] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 [phi:findcol::@19->findcol::@1#1] -- register_copy 
  //SEG135 [54] phi (byte) findcol::i#10 = (byte) findcol::i#1 [phi:findcol::@19->findcol::@1#2] -- register_copy 
    jmp b1
  //SEG136 findcol::@21
  b21:
  //SEG137 [74] (byte~) findcol::mindiff#15 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mincol#10 findcol::mindiff#15 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mincol#10 findcol::mindiff#15 ] ) -- vbuaa=vbuz1 
    lda mindiff
    jmp b8_from_b21
  //SEG138 findcol::@6
  b6:
  //SEG139 [75] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) -- vbuaa=vbuz1_minus_vbuz2 
    lda y
    sec
    sbc yp
  //SEG140 [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) -- vbuaa=vbuz1_plus_vbuaa 
    clc
    adc diff
    jmp b7_from_b6
  //SEG141 findcol::@4
  b4:
  //SEG142 [77] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ) -- vbuz1=vbuz2_minus_vbuz1 
    lda x
    sec
    sbc diff
    sta diff
    jmp b5_from_b4
}
//SEG143 initscreen
initscreen: {
    .label screen = 8
  //SEG144 [79] phi from initscreen to initscreen::@1 [phi:initscreen->initscreen::@1]
  b1_from_initscreen:
  //SEG145 [79] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 [phi:initscreen->initscreen::@1#0] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta screen
    lda #>SCREEN
    sta screen+1
    jmp b1
  //SEG146 [79] phi from initscreen::@1 to initscreen::@1 [phi:initscreen::@1->initscreen::@1]
  b1_from_b1:
  //SEG147 [79] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 [phi:initscreen::@1->initscreen::@1#0] -- register_copy 
    jmp b1
  //SEG148 initscreen::@1
  b1:
  //SEG149 [80] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] ( main:2::initscreen:5 [ initscreen::screen#2 ] ) -- _deref_pbuz1=vbuc1 
    lda #FILL
    ldy #0
    sta (screen),y
  //SEG150 [81] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] ( main:2::initscreen:5 [ initscreen::screen#1 ] ) -- pbuz1=_inc_pbuz1 
    inc screen
    bne !+
    inc screen+1
  !:
  //SEG151 [82] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto initscreen::@1 [ initscreen::screen#1 ] ( main:2::initscreen:5 [ initscreen::screen#1 ] ) -- pbuz1_lt_pbuc1_then_la1 
    lda screen+1
    cmp #>SCREEN+$3e8
    bcc b1_from_b1
    bne !+
    lda screen
    cmp #<SCREEN+$3e8
    bcc b1_from_b1
  !:
    jmp breturn
  //SEG152 initscreen::@return
  breturn:
  //SEG153 [83] return  [ ] ( main:2::initscreen:5 [ ] )
    rts
}
  XPOS: .byte 5, $f, 6, $22, $15, $1f
  YPOS: .byte 5, 8, $e, 2, $11, $16
  COLS: .byte 1, 2, 3, 4, 5, 7

ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b5
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b4
Removing instruction jmp b5
Removing instruction jmp breturn
Removing instruction jmp b7
Removing instruction jmp b1
Removing instruction jmp b8
Removing instruction jmp b2
Removing instruction jmp b9
Removing instruction jmp b3
Removing instruction jmp b10
Removing instruction jmp b4
Removing instruction jmp b11
Removing instruction jmp b12
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b5
Removing instruction jmp b3
Removing instruction jmp breturn
Removing instruction jmp b1
Removing instruction jmp b9
Removing instruction jmp breturn
Removing instruction jmp b12
Removing instruction jmp b5
Removing instruction jmp b14
Removing instruction jmp b7
Removing instruction jmp b16
Removing instruction jmp b8
Removing instruction jmp b1
Removing instruction jmp breturn
Succesful ASM optimization Pass5NextJumpElimination
Replacing instruction lda XPOS+0 with TXA
Replacing instruction lda YPOS+0 with TXA
Replacing instruction lda XPOS+1 with TXA
Replacing instruction lda YPOS+2 with TXA
Replacing instruction lda YPOS+3 with TXA
Removing instruction lda XPOS+3
Succesful ASM optimization Pass5UnnecesaryLoadElimination
Replacing label b1_from_b5 with b1
Replacing label b2_from_b5 with b2
Replacing label b1_from_b3 with b1
Replacing label b8_from_b21 with b8
Replacing label b7_from_b6 with b7
Replacing label b5_from_b4 with b5
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b5_from_bbegin:
Removing instruction main_from_b5:
Removing instruction bend_from_b5:
Removing instruction b1_from_main:
Removing instruction b1_from_b5:
Removing instruction render_from_b1:
Removing instruction b4_from_b1:
Removing instruction b1_from_b3:
Removing instruction b2_from_b1:
Removing instruction b2_from_b5:
Removing instruction b5_from_b12:
Removing instruction b5_from_b4:
Removing instruction b7_from_b14:
Removing instruction b7_from_b6:
Removing instruction b8_from_b16:
Removing instruction b8_from_b21:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b5:
Removing instruction bend:
Removing instruction initscreen_from_main:
Removing instruction b4:
Removing instruction b5:
Removing instruction breturn:
Removing instruction b7:
Removing instruction b8:
Removing instruction b9:
Removing instruction b10:
Removing instruction b11:
Removing instruction b12:
Removing instruction b1_from_render:
Removing instruction findcol_from_b2:
Removing instruction b5:
Removing instruction b3:
Removing instruction breturn:
Removing instruction b1_from_findcol:
Removing instruction b9:
Removing instruction breturn_from_b9:
Removing instruction b12:
Removing instruction b14:
Removing instruction b16:
Removing instruction breturn_from_b8:
Removing instruction b1_from_b19:
Removing instruction b1_from_initscreen:
Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
Removing unreachable instruction rts
Succesful ASM optimization Pass5UnreachableCodeElimination
Removing instruction jmp b1
Removing instruction jmp b2
Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
Removing instruction lda XPOS+3
Succesful ASM optimization Pass5UnnecesaryLoadElimination

FINAL SYMBOL TABLE
(label) @5
(label) @begin
(label) @end
(byte*) COLORS
(const byte*) COLORS#0 COLORS = ((byte*))(word/dword/signed dword) 55296
(byte[]) COLS
(const byte[]) COLS#0 COLS = { (byte/signed byte/word/signed word/dword/signed dword) 1, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 3, (byte/signed byte/word/signed word/dword/signed dword) 4, (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7 }
(byte) FILL
(const byte) FILL#0 FILL = (byte/word/signed word/dword/signed dword) 230
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte[]) XPOS
(const byte[]) XPOS#0 XPOS = { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 15, (byte/signed byte/word/signed word/dword/signed dword) 6, (byte/signed byte/word/signed word/dword/signed dword) 34, (byte/signed byte/word/signed word/dword/signed dword) 21, (byte/signed byte/word/signed word/dword/signed dword) 31 }
(byte[]) YPOS
(const byte[]) YPOS#0 YPOS = { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 8, (byte/signed byte/word/signed word/dword/signed dword) 14, (byte/signed byte/word/signed word/dword/signed dword) 2, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 22 }
(void()) animate()
(byte/word~) animate::$0 reg byte x 4.0
(byte/signed byte/word/signed word/dword/signed dword~) animate::$12 reg byte x 4.0
(byte/word~) animate::$15 reg byte a 4.0
(byte/signed byte/word/signed word/dword/signed dword~) animate::$18 reg byte a 4.0
(byte/word~) animate::$3 reg byte x 4.0
(byte/signed byte/word/signed word/dword/signed dword~) animate::$6 reg byte x 4.0
(byte/word~) animate::$9 reg byte x 4.0
(label) animate::@1
(label) animate::@10
(label) animate::@11
(label) animate::@12
(label) animate::@2
(label) animate::@3
(label) animate::@4
(label) animate::@7
(label) animate::@8
(label) animate::@9
(label) animate::@return
(byte()) findcol((byte) findcol::x , (byte) findcol::y)
(byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 reg byte a 20002.0
(byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 reg byte a 20002.0
(label) findcol::@1
(label) findcol::@12
(label) findcol::@14
(label) findcol::@16
(label) findcol::@19
(label) findcol::@2
(label) findcol::@21
(label) findcol::@4
(label) findcol::@5
(label) findcol::@6
(label) findcol::@7
(label) findcol::@8
(label) findcol::@9
(label) findcol::@return
(byte) findcol::diff
(byte) findcol::diff#0 diff zp ZP_BYTE:7 20002.0
(byte) findcol::diff#1 diff zp ZP_BYTE:7 20002.0
(byte) findcol::diff#2 reg byte a 20002.0
(byte) findcol::diff#3 reg byte a 20002.0
(byte) findcol::diff#4 diff zp ZP_BYTE:7 10001.0
(byte) findcol::diff#6 reg byte a 13334.666666666666
(byte) findcol::i
(byte) findcol::i#1 reg byte x 10001.0
(byte) findcol::i#10 reg byte x 2631.842105263158
(byte) findcol::mincol
(byte) findcol::mincol#1 reg byte y 20002.0
(byte) findcol::mincol#10 reg byte y 1176.5882352941176
(byte) findcol::mincol#2 reg byte y 10001.0
(byte) findcol::mindiff
(byte) findcol::mindiff#10 mindiff zp ZP_BYTE:6 1875.1875
(byte) findcol::mindiff#11 reg byte a 10001.0
(byte~) findcol::mindiff#13 mindiff zp ZP_BYTE:6 20002.0
(byte~) findcol::mindiff#15 reg byte a 20002.0
(byte) findcol::return
(byte) findcol::return#0 reg byte a 2002.0
(byte) findcol::return#2 reg byte y 3667.333333333333
(byte) findcol::x
(byte) findcol::x#0 x zp ZP_BYTE:5 1640.2
(byte) findcol::xp
(byte) findcol::xp#0 xp zp ZP_BYTE:7 10001.0
(byte) findcol::y
(byte) findcol::y#0 y zp ZP_BYTE:2 1708.5416666666665
(byte) findcol::yp
(byte) findcol::yp#0 yp zp ZP_BYTE:10 6250.625
(void()) initscreen()
(label) initscreen::@1
(label) initscreen::@return
(byte*) initscreen::screen
(byte*) initscreen::screen#1 screen zp ZP_WORD:8 16.5
(byte*) initscreen::screen#2 screen zp ZP_WORD:8 16.5
(void()) main()
(label) main::@1
(label) main::@4
(label) main::@5
(label) main::@return
(byte) numpoints
(const byte) numpoints#0 numpoints = (byte/signed byte/word/signed word/dword/signed dword) 6
(void()) render()
(label) render::@1
(label) render::@2
(label) render::@3
(label) render::@5
(label) render::@return
(byte) render::col
(byte) render::col#0 reg byte a 2002.0
(byte*) render::colline
(byte*) render::colline#1 colline zp ZP_WORD:3 67.33333333333333
(byte*) render::colline#5 colline zp ZP_WORD:3 120.29999999999998
(byte) render::x
(byte) render::x#1 x zp ZP_BYTE:5 1501.5
(byte) render::x#2 x zp ZP_BYTE:5 572.0
(byte) render::y
(byte) render::y#1 y zp ZP_BYTE:2 151.5
(byte) render::y#4 y zp ZP_BYTE:2 109.36363636363637

zp ZP_BYTE:2 [ render::y#4 render::y#1 findcol::y#0 ]
zp ZP_WORD:3 [ render::colline#5 render::colline#1 ]
zp ZP_BYTE:5 [ render::x#2 render::x#1 findcol::x#0 ]
reg byte x [ findcol::i#10 findcol::i#1 ]
zp ZP_BYTE:6 [ findcol::mindiff#10 findcol::mindiff#13 ]
reg byte y [ findcol::return#2 findcol::mincol#10 findcol::mincol#2 findcol::mincol#1 ]
zp ZP_BYTE:7 [ findcol::diff#4 findcol::diff#1 findcol::diff#0 findcol::xp#0 ]
reg byte a [ findcol::mindiff#11 findcol::diff#6 findcol::diff#3 findcol::diff#2 findcol::mindiff#15 ]
zp ZP_WORD:8 [ initscreen::screen#2 initscreen::screen#1 ]
reg byte x [ animate::$0 ]
reg byte x [ animate::$3 ]
reg byte x [ animate::$6 ]
reg byte x [ animate::$9 ]
reg byte x [ animate::$12 ]
reg byte a [ animate::$15 ]
reg byte a [ animate::$18 ]
reg byte a [ findcol::return#0 ]
reg byte a [ render::col#0 ]
zp ZP_BYTE:10 [ findcol::yp#0 ]
reg byte a [ findcol::$10 ]
reg byte a [ findcol::$12 ]


FINAL ASSEMBLER
Score: 1438777

//SEG0 Basic Upstart
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
//SEG1 Global Constants & labels
  .label SCREEN = $400
  .label COLORS = $d800
  .const FILL = $e6
  .const numpoints = 6
//SEG2 @begin
//SEG3 [1] phi from @begin to @5 [phi:@begin->@5]
//SEG4 @5
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @5 to main [phi:@5->main]
  jsr main
//SEG7 [3] phi from @5 to @end [phi:@5->@end]
//SEG8 @end
//SEG9 main
main: {
  //SEG10 [5] call initscreen param-assignment [ ] ( main:2 [ ] )
  //SEG11 [78] phi from main to initscreen [phi:main->initscreen]
    jsr initscreen
  //SEG12 [6] phi from main main::@5 to main::@1 [phi:main/main::@5->main::@1]
  //SEG13 main::@1
  b1:
  //SEG14 [7] call render param-assignment [ ] ( main:2 [ ] )
  //SEG15 [38] phi from main::@1 to render [phi:main::@1->render]
    jsr render
  //SEG16 [8] phi from main::@1 to main::@4 [phi:main::@1->main::@4]
  //SEG17 main::@4
  //SEG18 [9] call animate param-assignment [ ] ( main:2 [ ] )
    jsr animate
  //SEG19 main::@5
  //SEG20 [10] if(true) goto main::@1 [ ] ( main:2 [ ] ) -- true_then_la1 
    jmp b1
  //SEG21 main::@return
  //SEG22 [11] return  [ ] ( main:2 [ ] )
}
//SEG23 animate
animate: {
  //SEG24 [12] (byte/word~) animate::$0 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$0 ] ( main:2::animate:9 [ animate::$0 ] ) -- vbuxx=_deref_pbuc1_plus_1 
    ldx XPOS+0
    inx
  //SEG25 [13] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx 
    stx XPOS+0
  //SEG26 [14] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@1 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 
    txa
    cmp #$28
    bne b1
  //SEG27 animate::@7
  //SEG28 [15] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #0
    sta XPOS+0
  //SEG29 animate::@1
  b1:
  //SEG30 [16] (byte/word~) animate::$3 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$3 ] ( main:2::animate:9 [ animate::$3 ] ) -- vbuxx=_deref_pbuc1_plus_1 
    ldx YPOS+0
    inx
  //SEG31 [17] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/word~) animate::$3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx 
    stx YPOS+0
  //SEG32 [18] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@2 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 
    txa
    cmp #$19
    bne b2
  //SEG33 animate::@8
  //SEG34 [19] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 0) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #0
    sta YPOS+0
  //SEG35 animate::@2
  b2:
  //SEG36 [20] (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$6 ] ( main:2::animate:9 [ animate::$6 ] ) -- vbuxx=_deref_pbuc1_minus_1 
    ldx XPOS+1
    dex
  //SEG37 [21] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$6 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx 
    stx XPOS+1
  //SEG38 [22] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@3 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 
    txa
    cmp #$ff
    bne b3
  //SEG39 animate::@9
  //SEG40 [23] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 1) ← (byte/signed byte/word/signed word/dword/signed dword) 40 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #$28
    sta XPOS+1
  //SEG41 animate::@3
  b3:
  //SEG42 [24] (byte/word~) animate::$9 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) + (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$9 ] ( main:2::animate:9 [ animate::$9 ] ) -- vbuxx=_deref_pbuc1_plus_1 
    ldx YPOS+2
    inx
  //SEG43 [25] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/word~) animate::$9 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx 
    stx YPOS+2
  //SEG44 [26] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2)!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto animate::@4 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 
    txa
    cmp #$19
    bne b4
  //SEG45 animate::@10
  //SEG46 [27] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 2) ← (byte/signed byte/word/signed word/dword/signed dword) 0 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #0
    sta YPOS+2
  //SEG47 animate::@4
  b4:
  //SEG48 [28] (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 ← *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 1 [ animate::$12 ] ( main:2::animate:9 [ animate::$12 ] ) -- vbuxx=_deref_pbuc1_minus_1 
    ldx YPOS+3
    dex
  //SEG49 [29] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$12 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuxx 
    stx YPOS+3
  //SEG50 [30] if(*((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)!=(byte/word/signed word/dword/signed dword) 255) goto animate::@return [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_neq_vbuc2_then_la1 
    txa
    cmp #$ff
    bne breturn
  //SEG51 animate::@11
  //SEG52 [31] *((const byte[]) YPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword) 25 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuc2 
    lda #$19
    sta YPOS+3
  //SEG53 [32] (byte/word~) animate::$15 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) + (byte/signed byte/word/signed word/dword/signed dword) 7 [ animate::$15 ] ( main:2::animate:9 [ animate::$15 ] ) -- vbuaa=_deref_pbuc1_plus_vbuc2 
    lda XPOS+3
    clc
    adc #7
  //SEG54 [33] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/word~) animate::$15 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa 
    sta XPOS+3
  //SEG55 [34] if(*((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3)<(byte/signed byte/word/signed word/dword/signed dword) 40) goto animate::@return [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1_lt_vbuc2_then_la1 
    cmp #$28
    bcc breturn
  //SEG56 animate::@12
  //SEG57 [35] (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 ← *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) - (byte/signed byte/word/signed word/dword/signed dword) 40 [ animate::$18 ] ( main:2::animate:9 [ animate::$18 ] ) -- vbuaa=_deref_pbuc1_minus_vbuc2 
    sec
    sbc #$28
  //SEG58 [36] *((const byte[]) XPOS#0+(byte/signed byte/word/signed word/dword/signed dword) 3) ← (byte/signed byte/word/signed word/dword/signed dword~) animate::$18 [ ] ( main:2::animate:9 [ ] ) -- _deref_pbuc1=vbuaa 
    sta XPOS+3
  //SEG59 animate::@return
  breturn:
  //SEG60 [37] return  [ ] ( main:2::animate:9 [ ] )
    rts
}
//SEG61 render
render: {
    .label x = 5
    .label colline = 3
    .label y = 2
  //SEG62 [39] phi from render to render::@1 [phi:render->render::@1]
  //SEG63 [39] phi (byte*) render::colline#5 = (const byte*) COLORS#0 [phi:render->render::@1#0] -- pbuz1=pbuc1 
    lda #<COLORS
    sta colline
    lda #>COLORS
    sta colline+1
  //SEG64 [39] phi (byte) render::y#4 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render->render::@1#1] -- vbuz1=vbuc1 
    lda #0
    sta y
  //SEG65 [39] phi from render::@3 to render::@1 [phi:render::@3->render::@1]
  //SEG66 [39] phi (byte*) render::colline#5 = (byte*) render::colline#1 [phi:render::@3->render::@1#0] -- register_copy 
  //SEG67 [39] phi (byte) render::y#4 = (byte) render::y#1 [phi:render::@3->render::@1#1] -- register_copy 
  //SEG68 render::@1
  b1:
  //SEG69 [40] phi from render::@1 to render::@2 [phi:render::@1->render::@2]
  //SEG70 [40] phi (byte) render::x#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:render::@1->render::@2#0] -- vbuz1=vbuc1 
    lda #0
    sta x
  //SEG71 [40] phi from render::@5 to render::@2 [phi:render::@5->render::@2]
  //SEG72 [40] phi (byte) render::x#2 = (byte) render::x#1 [phi:render::@5->render::@2#0] -- register_copy 
  //SEG73 render::@2
  b2:
  //SEG74 [41] (byte) findcol::x#0 ← (byte) render::x#2 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 ] )
    // (byte) findcol::x#0 = (byte) render::x#2  // register copy zp ZP_BYTE:5
  //SEG75 [42] (byte) findcol::y#0 ← (byte) render::y#4 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 ] )
    // (byte) findcol::y#0 = (byte) render::y#4  // register copy zp ZP_BYTE:2
  //SEG76 [43] call findcol param-assignment [ render::y#4 render::colline#5 render::x#2 findcol::return#2 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 findcol::return#2 ] )
  //SEG77 [53] phi from render::@2 to findcol [phi:render::@2->findcol]
    jsr findcol
  //SEG78 [44] (byte) findcol::return#0 ← (byte) findcol::return#2 [ render::y#4 render::colline#5 render::x#2 findcol::return#0 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 findcol::return#0 ] ) -- vbuaa=vbuyy 
    tya
  //SEG79 render::@5
  //SEG80 [45] (byte) render::col#0 ← (byte) findcol::return#0 [ render::y#4 render::colline#5 render::x#2 render::col#0 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 render::col#0 ] )
    // (byte) render::col#0 = (byte) findcol::return#0  // register copy reg byte a
  //SEG81 [46] *((byte*) render::colline#5 + (byte) render::x#2) ← (byte) render::col#0 [ render::y#4 render::colline#5 render::x#2 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#2 ] ) -- pbuz1_derefidx_vbuz2=vbuaa 
    ldy x
    sta (colline),y
  //SEG82 [47] (byte) render::x#1 ← ++ (byte) render::x#2 [ render::y#4 render::colline#5 render::x#1 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#1 ] ) -- vbuz1=_inc_vbuz1 
    inc x
  //SEG83 [48] if((byte) render::x#1!=(byte/signed byte/word/signed word/dword/signed dword) 40) goto render::@2 [ render::y#4 render::colline#5 render::x#1 ] ( main:2::render:7 [ render::y#4 render::colline#5 render::x#1 ] ) -- vbuz1_neq_vbuc1_then_la1 
    lda x
    cmp #$28
    bne b2
  //SEG84 render::@3
  //SEG85 [49] (byte*) render::colline#1 ← (byte*) render::colline#5 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ render::y#4 render::colline#1 ] ( main:2::render:7 [ render::y#4 render::colline#1 ] ) -- pbuz1=pbuz1_plus_vbuc1 
    lda colline
    clc
    adc #$28
    sta colline
    bcc !+
    inc colline+1
  !:
  //SEG86 [50] (byte) render::y#1 ← ++ (byte) render::y#4 [ render::y#1 render::colline#1 ] ( main:2::render:7 [ render::y#1 render::colline#1 ] ) -- vbuz1=_inc_vbuz1 
    inc y
  //SEG87 [51] if((byte) render::y#1!=(byte/signed byte/word/signed word/dword/signed dword) 25) goto render::@1 [ render::y#1 render::colline#1 ] ( main:2::render:7 [ render::y#1 render::colline#1 ] ) -- vbuz1_neq_vbuc1_then_la1 
    lda y
    cmp #$19
    bne b1
  //SEG88 render::@return
  //SEG89 [52] return  [ ] ( main:2::render:7 [ ] )
    rts
}
//SEG90 findcol
findcol: {
    .label x = 5
    .label y = 2
    .label xp = 7
    .label yp = $a
    .label diff = 7
    .label mindiff = 6
  //SEG91 [54] phi from findcol to findcol::@1 [phi:findcol->findcol::@1]
  //SEG92 [54] phi (byte) findcol::mincol#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:findcol->findcol::@1#0] -- vbuyy=vbuc1 
    ldy #0
  //SEG93 [54] phi (byte) findcol::mindiff#10 = (byte/word/signed word/dword/signed dword) 255 [phi:findcol->findcol::@1#1] -- vbuz1=vbuc1 
    lda #$ff
    sta mindiff
  //SEG94 [54] phi (byte) findcol::i#10 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:findcol->findcol::@1#2] -- vbuxx=vbuc1 
    ldx #0
  //SEG95 findcol::@1
  b1:
  //SEG96 [55] (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#10) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 ] ) -- vbuz1=pbuc1_derefidx_vbuxx 
    lda XPOS,x
    sta xp
  //SEG97 [56] (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#10) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ) -- vbuz1=pbuc1_derefidx_vbuxx 
    lda YPOS,x
    sta yp
  //SEG98 [57] if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ) -- vbuz1_neq_vbuz2_then_la1 
    lda x
    cmp xp
    bne b2
  //SEG99 findcol::@9
  //SEG100 [58] if((byte) findcol::y#0!=(byte) findcol::yp#0) goto findcol::@2 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ) -- vbuz1_neq_vbuz2_then_la1 
    lda y
    cmp yp
    bne b2
  //SEG101 [59] phi from findcol::@9 to findcol::@return [phi:findcol::@9->findcol::@return]
  //SEG102 [59] phi (byte) findcol::return#2 = (byte/signed byte/word/signed word/dword/signed dword) 0 [phi:findcol::@9->findcol::@return#0] -- vbuyy=vbuc1 
    ldy #0
  //SEG103 findcol::@return
  breturn:
  //SEG104 [60] return  [ findcol::return#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::return#2 ] )
    rts
  //SEG105 findcol::@2
  b2:
  //SEG106 [61] if((byte) findcol::x#0>=(byte) findcol::xp#0) goto findcol::@4 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::xp#0 findcol::yp#0 ] ) -- vbuz1_ge_vbuz2_then_la1 
    lda x
    cmp xp
    bcs b4
  //SEG107 findcol::@12
  //SEG108 [62] (byte) findcol::diff#1 ← (byte) findcol::xp#0 - (byte) findcol::x#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#1 ] ) -- vbuz1=vbuz1_minus_vbuz2 
    lda diff
    sec
    sbc x
    sta diff
  //SEG109 [63] phi from findcol::@12 findcol::@4 to findcol::@5 [phi:findcol::@12/findcol::@4->findcol::@5]
  //SEG110 [63] phi (byte) findcol::diff#4 = (byte) findcol::diff#1 [phi:findcol::@12/findcol::@4->findcol::@5#0] -- register_copy 
  //SEG111 findcol::@5
  b5:
  //SEG112 [64] if((byte) findcol::y#0>=(byte) findcol::yp#0) goto findcol::@6 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#4 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#4 ] ) -- vbuz1_ge_vbuz2_then_la1 
    lda y
    cmp yp
    bcs b6
  //SEG113 findcol::@14
  //SEG114 [65] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 ← (byte) findcol::yp#0 - (byte) findcol::y#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$10 ] ) -- vbuaa=vbuz1_minus_vbuz2 
    lda yp
    sec
    sbc y
  //SEG115 [66] (byte) findcol::diff#3 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#3 ] ) -- vbuaa=vbuz1_plus_vbuaa 
    clc
    adc diff
  //SEG116 [67] phi from findcol::@14 findcol::@6 to findcol::@7 [phi:findcol::@14/findcol::@6->findcol::@7]
  //SEG117 [67] phi (byte) findcol::diff#6 = (byte) findcol::diff#3 [phi:findcol::@14/findcol::@6->findcol::@7#0] -- register_copy 
  //SEG118 findcol::@7
  b7:
  //SEG119 [68] if((byte) findcol::diff#6>=(byte) findcol::mindiff#10) goto findcol::@21 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#6 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#6 ] ) -- vbuaa_ge_vbuz1_then_la1 
    cmp mindiff
    bcs b21
  //SEG120 findcol::@16
  //SEG121 [69] (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#10) [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::diff#6 findcol::mincol#1 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::diff#6 findcol::mincol#1 ] ) -- vbuyy=pbuc1_derefidx_vbuxx 
    ldy COLS,x
  //SEG122 [70] phi from findcol::@16 findcol::@21 to findcol::@8 [phi:findcol::@16/findcol::@21->findcol::@8]
  //SEG123 [70] phi (byte) findcol::mindiff#11 = (byte) findcol::diff#6 [phi:findcol::@16/findcol::@21->findcol::@8#0] -- register_copy 
  //SEG124 [70] phi (byte) findcol::mincol#2 = (byte) findcol::mincol#1 [phi:findcol::@16/findcol::@21->findcol::@8#1] -- register_copy 
  //SEG125 findcol::@8
  b8:
  //SEG126 [71] (byte) findcol::i#1 ← ++ (byte) findcol::i#10 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] ) -- vbuxx=_inc_vbuxx 
    inx
  //SEG127 [72] if((byte) findcol::i#1<(const byte) numpoints#0) goto findcol::@19 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#1 findcol::mincol#2 findcol::mindiff#11 ] ) -- vbuxx_lt_vbuc1_then_la1 
    cpx #numpoints
    bcc b19
  //SEG128 [59] phi from findcol::@8 to findcol::@return [phi:findcol::@8->findcol::@return]
  //SEG129 [59] phi (byte) findcol::return#2 = (byte) findcol::mincol#2 [phi:findcol::@8->findcol::@return#0] -- register_copy 
    jmp breturn
  //SEG130 findcol::@19
  b19:
  //SEG131 [73] (byte~) findcol::mindiff#13 ← (byte) findcol::mindiff#11 [ findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#1 findcol::mindiff#13 findcol::mincol#2 ] ) -- vbuz1=vbuaa 
    sta mindiff
  //SEG132 [54] phi from findcol::@19 to findcol::@1 [phi:findcol::@19->findcol::@1]
  //SEG133 [54] phi (byte) findcol::mincol#10 = (byte) findcol::mincol#2 [phi:findcol::@19->findcol::@1#0] -- register_copy 
  //SEG134 [54] phi (byte) findcol::mindiff#10 = (byte~) findcol::mindiff#13 [phi:findcol::@19->findcol::@1#1] -- register_copy 
  //SEG135 [54] phi (byte) findcol::i#10 = (byte) findcol::i#1 [phi:findcol::@19->findcol::@1#2] -- register_copy 
    jmp b1
  //SEG136 findcol::@21
  b21:
  //SEG137 [74] (byte~) findcol::mindiff#15 ← (byte) findcol::mindiff#10 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mincol#10 findcol::mindiff#15 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mincol#10 findcol::mindiff#15 ] ) -- vbuaa=vbuz1 
    lda mindiff
    jmp b8
  //SEG138 findcol::@6
  b6:
  //SEG139 [75] (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 ← (byte) findcol::y#0 - (byte) findcol::yp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#4 findcol::$12 ] ) -- vbuaa=vbuz1_minus_vbuz2 
    lda y
    sec
    sbc yp
  //SEG140 [76] (byte) findcol::diff#2 ← (byte) findcol::diff#4 + (byte/signed byte/word/signed word/dword/signed dword~) findcol::$12 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::diff#2 ] ) -- vbuaa=vbuz1_plus_vbuaa 
    clc
    adc diff
    jmp b7
  //SEG141 findcol::@4
  b4:
  //SEG142 [77] (byte) findcol::diff#0 ← (byte) findcol::x#0 - (byte) findcol::xp#0 [ findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ( main:2::render:7::findcol:43 [ render::y#4 render::colline#5 render::x#2 findcol::x#0 findcol::y#0 findcol::i#10 findcol::mindiff#10 findcol::mincol#10 findcol::yp#0 findcol::diff#0 ] ) -- vbuz1=vbuz2_minus_vbuz1 
    lda x
    sec
    sbc diff
    sta diff
    jmp b5
}
//SEG143 initscreen
initscreen: {
    .label screen = 8
  //SEG144 [79] phi from initscreen to initscreen::@1 [phi:initscreen->initscreen::@1]
  //SEG145 [79] phi (byte*) initscreen::screen#2 = (const byte*) SCREEN#0 [phi:initscreen->initscreen::@1#0] -- pbuz1=pbuc1 
    lda #<SCREEN
    sta screen
    lda #>SCREEN
    sta screen+1
  //SEG146 [79] phi from initscreen::@1 to initscreen::@1 [phi:initscreen::@1->initscreen::@1]
  //SEG147 [79] phi (byte*) initscreen::screen#2 = (byte*) initscreen::screen#1 [phi:initscreen::@1->initscreen::@1#0] -- register_copy 
  //SEG148 initscreen::@1
  b1:
  //SEG149 [80] *((byte*) initscreen::screen#2) ← (const byte) FILL#0 [ initscreen::screen#2 ] ( main:2::initscreen:5 [ initscreen::screen#2 ] ) -- _deref_pbuz1=vbuc1 
    lda #FILL
    ldy #0
    sta (screen),y
  //SEG150 [81] (byte*) initscreen::screen#1 ← ++ (byte*) initscreen::screen#2 [ initscreen::screen#1 ] ( main:2::initscreen:5 [ initscreen::screen#1 ] ) -- pbuz1=_inc_pbuz1 
    inc screen
    bne !+
    inc screen+1
  !:
  //SEG151 [82] if((byte*) initscreen::screen#1<(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto initscreen::@1 [ initscreen::screen#1 ] ( main:2::initscreen:5 [ initscreen::screen#1 ] ) -- pbuz1_lt_pbuc1_then_la1 
    lda screen+1
    cmp #>SCREEN+$3e8
    bcc b1
    bne !+
    lda screen
    cmp #<SCREEN+$3e8
    bcc b1
  !:
  //SEG152 initscreen::@return
  //SEG153 [83] return  [ ] ( main:2::initscreen:5 [ ] )
    rts
}
  XPOS: .byte 5, $f, 6, $22, $15, $1f
  YPOS: .byte 5, 8, $e, 2, $11, $16
  COLS: .byte 1, 2, 3, 4, 5, 7

