diff --git a/src/main/java/dk/camelot64/kickc/model/SymbolTypeInference.java b/src/main/java/dk/camelot64/kickc/model/SymbolTypeInference.java index 680a55443..702fb560a 100644 --- a/src/main/java/dk/camelot64/kickc/model/SymbolTypeInference.java +++ b/src/main/java/dk/camelot64/kickc/model/SymbolTypeInference.java @@ -425,6 +425,12 @@ public class SymbolTypeInference { symbol.setTypeInferred(type); } } + // If the type is an array or a string the symbol is constant + if(symbol.getType() instanceof SymbolTypeArray) { + symbol.setDeclaredConstant(true); + } else if(SymbolType.STRING.equals(symbol.getType())) { + symbol.setDeclaredConstant(true); + } } } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2ConstantInlining.java b/src/main/java/dk/camelot64/kickc/passes/Pass2ConstantInlining.java index 9e2488fed..a03e2f78c 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass2ConstantInlining.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass2ConstantInlining.java @@ -38,7 +38,6 @@ public class Pass2ConstantInlining extends Pass2SsaOptimization { // Replace all usages of the constants in constant definitions inside the symbol table replaceInSymbolTable(inline); - for (ConstantRef constantRef : inline.keySet()) { getLog().append("Constant inlined " + constantRef.toString()+" = "+inline.get(constantRef).toString(getProgram())); } @@ -90,7 +89,7 @@ public class Pass2ConstantInlining extends Pass2SsaOptimization { Collection allConstants = getProgram().getScope().getAllConstants(true); for (ConstantVar constant : allConstants) { if(constant.getRef().isIntermediate()) { - if(!(constant.getValue() instanceof ConstantString) && !(constant.getValue() instanceof ConstantArray)) { + if(!(constant.getType().equals(SymbolType.STRING)) && !(constant.getValue() instanceof ConstantArray)) { unnamed.put(constant.getRef(), constant.getValue()); } } diff --git a/src/main/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log b/src/main/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log index 194a721ae..e008d5067 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/bitmap-bresenham.log @@ -1956,8 +1956,6 @@ CONTROL FLOW GRAPH SSA to:@10 main: scope:[main] from @10 (byte) lines_cnt#8 ← phi( @10/(byte) lines_cnt#9 ) - (byte[]) lines_y#8 ← phi( @10/(byte[]) lines_y#9 ) - (byte[]) lines_x#8 ← phi( @10/(byte[]) lines_x#9 ) (byte*) D018#1 ← phi( @10/(byte*) D018#2 ) (byte*) SCREEN#1 ← phi( @10/(byte*) SCREEN#4 ) (byte*) D011#1 ← phi( @10/(byte*) D011#2 ) @@ -1983,25 +1981,17 @@ main: scope:[main] from @10 to:main::@3 main::@3: scope:[main] from main (byte) lines_cnt#7 ← phi( main/(byte) lines_cnt#8 ) - (byte[]) lines_y#7 ← phi( main/(byte[]) lines_y#8 ) - (byte[]) lines_x#7 ← phi( main/(byte[]) lines_x#8 ) call init_plot_tables param-assignment to:main::@4 main::@4: scope:[main] from main::@3 (byte) lines_cnt#5 ← phi( main::@3/(byte) lines_cnt#7 ) - (byte[]) lines_y#5 ← phi( main::@3/(byte[]) lines_y#7 ) - (byte[]) lines_x#5 ← phi( main::@3/(byte[]) lines_x#7 ) to:main::@1 main::@1: scope:[main] from main::@4 main::@5 (byte) lines_cnt#4 ← phi( main::@4/(byte) lines_cnt#5 main::@5/(byte) lines_cnt#6 ) - (byte[]) lines_y#4 ← phi( main::@4/(byte[]) lines_y#5 main::@5/(byte[]) lines_y#6 ) - (byte[]) lines_x#4 ← phi( main::@4/(byte[]) lines_x#5 main::@5/(byte[]) lines_x#6 ) call lines param-assignment to:main::@5 main::@5: scope:[main] from main::@1 (byte) lines_cnt#6 ← phi( main::@1/(byte) lines_cnt#4 ) - (byte[]) lines_y#6 ← phi( main::@1/(byte[]) lines_y#4 ) - (byte[]) lines_x#6 ← phi( main::@1/(byte[]) lines_x#4 ) if(true) goto main::@1 to:main::@return main::@return: scope:[main] from main::@5 @@ -2009,26 +1999,20 @@ main::@return: scope:[main] from main::@5 to:@return lines: scope:[lines] from main::@1 (byte) lines_cnt#3 ← phi( main::@1/(byte) lines_cnt#4 ) - (byte[]) lines_y#2 ← phi( main::@1/(byte[]) lines_y#4 ) - (byte[]) lines_x#2 ← phi( main::@1/(byte[]) lines_x#4 ) (byte) lines::l#0 ← (byte/signed byte/word/signed word) 0 to:lines::@1 lines::@1: scope:[lines] from lines lines::@3 (byte) lines_cnt#2 ← phi( lines/(byte) lines_cnt#3 lines::@3/(byte) lines_cnt#1 ) - (byte[]) lines_y#1 ← phi( lines/(byte[]) lines_y#2 lines::@3/(byte[]) lines_y#3 ) - (byte[]) lines_x#1 ← phi( lines/(byte[]) lines_x#2 lines::@3/(byte[]) lines_x#3 ) (byte) lines::l#2 ← phi( lines/(byte) lines::l#0 lines::@3/(byte) lines::l#1 ) (byte/word~) lines::$0 ← (byte) lines::l#2 + (byte/signed byte/word/signed word) 1 (byte/word~) lines::$1 ← (byte) lines::l#2 + (byte/signed byte/word/signed word) 1 - (byte) line::x0#0 ← *((byte[]) lines_x#1 + (byte) lines::l#2) - (byte) line::x1#0 ← *((byte[]) lines_x#1 + (byte/word~) lines::$0) - (byte) line::y0#0 ← *((byte[]) lines_y#1 + (byte) lines::l#2) - (byte) line::y1#0 ← *((byte[]) lines_y#1 + (byte/word~) lines::$1) + (byte) line::x0#0 ← *((byte[]) lines_x#0 + (byte) lines::l#2) + (byte) line::x1#0 ← *((byte[]) lines_x#0 + (byte/word~) lines::$0) + (byte) line::y0#0 ← *((byte[]) lines_y#0 + (byte) lines::l#2) + (byte) line::y1#0 ← *((byte[]) lines_y#0 + (byte/word~) lines::$1) call line param-assignment to:lines::@3 lines::@3: scope:[lines] from lines::@1 - (byte[]) lines_y#3 ← phi( lines::@1/(byte[]) lines_y#1 ) - (byte[]) lines_x#3 ← phi( lines::@1/(byte[]) lines_x#1 ) (byte) lines_cnt#1 ← phi( lines::@1/(byte) lines_cnt#2 ) (byte) lines::l#3 ← phi( lines::@1/(byte) lines::l#2 ) (byte) lines::l#1 ← ++ (byte) lines::l#3 @@ -2592,8 +2576,6 @@ init_screen::@return: scope:[init_screen] from init_screen::@2 to:@return @10: scope:[] from @begin (byte) lines_cnt#9 ← phi( @begin/(byte) lines_cnt#0 ) - (byte[]) lines_y#9 ← phi( @begin/(byte[]) lines_y#0 ) - (byte[]) lines_x#9 ← phi( @begin/(byte[]) lines_x#0 ) (byte*) D018#2 ← phi( @begin/(byte*) D018#0 ) (byte*) SCREEN#4 ← phi( @begin/(byte*) SCREEN#0 ) (byte*) D011#2 ← phi( @begin/(byte*) D011#0 ) @@ -2630,8 +2612,6 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN to:@10 main: scope:[main] from @10 (byte) lines_cnt#8 ← phi( @10/(byte) lines_cnt#9 ) - (byte[]) lines_y#8 ← phi( @10/(byte[]) lines_y#9 ) - (byte[]) lines_x#8 ← phi( @10/(byte[]) lines_x#9 ) (byte*) D018#1 ← phi( @10/(byte*) D018#2 ) (byte*) SCREEN#1 ← phi( @10/(byte*) SCREEN#4 ) (byte*) D011#1 ← phi( @10/(byte*) D011#2 ) @@ -2657,25 +2637,17 @@ main: scope:[main] from @10 to:main::@3 main::@3: scope:[main] from main (byte) lines_cnt#7 ← phi( main/(byte) lines_cnt#8 ) - (byte[]) lines_y#7 ← phi( main/(byte[]) lines_y#8 ) - (byte[]) lines_x#7 ← phi( main/(byte[]) lines_x#8 ) call init_plot_tables param-assignment to:main::@4 main::@4: scope:[main] from main::@3 (byte) lines_cnt#5 ← phi( main::@3/(byte) lines_cnt#7 ) - (byte[]) lines_y#5 ← phi( main::@3/(byte[]) lines_y#7 ) - (byte[]) lines_x#5 ← phi( main::@3/(byte[]) lines_x#7 ) to:main::@1 main::@1: scope:[main] from main::@4 main::@5 (byte) lines_cnt#4 ← phi( main::@4/(byte) lines_cnt#5 main::@5/(byte) lines_cnt#6 ) - (byte[]) lines_y#4 ← phi( main::@4/(byte[]) lines_y#5 main::@5/(byte[]) lines_y#6 ) - (byte[]) lines_x#4 ← phi( main::@4/(byte[]) lines_x#5 main::@5/(byte[]) lines_x#6 ) call lines param-assignment to:main::@5 main::@5: scope:[main] from main::@1 (byte) lines_cnt#6 ← phi( main::@1/(byte) lines_cnt#4 ) - (byte[]) lines_y#6 ← phi( main::@1/(byte[]) lines_y#4 ) - (byte[]) lines_x#6 ← phi( main::@1/(byte[]) lines_x#4 ) if(true) goto main::@1 to:main::@return main::@return: scope:[main] from main::@5 @@ -2683,26 +2655,20 @@ main::@return: scope:[main] from main::@5 to:@return lines: scope:[lines] from main::@1 (byte) lines_cnt#3 ← phi( main::@1/(byte) lines_cnt#4 ) - (byte[]) lines_y#2 ← phi( main::@1/(byte[]) lines_y#4 ) - (byte[]) lines_x#2 ← phi( main::@1/(byte[]) lines_x#4 ) (byte) lines::l#0 ← (byte/signed byte/word/signed word) 0 to:lines::@1 lines::@1: scope:[lines] from lines lines::@3 (byte) lines_cnt#2 ← phi( lines/(byte) lines_cnt#3 lines::@3/(byte) lines_cnt#1 ) - (byte[]) lines_y#1 ← phi( lines/(byte[]) lines_y#2 lines::@3/(byte[]) lines_y#3 ) - (byte[]) lines_x#1 ← phi( lines/(byte[]) lines_x#2 lines::@3/(byte[]) lines_x#3 ) (byte) lines::l#2 ← phi( lines/(byte) lines::l#0 lines::@3/(byte) lines::l#1 ) (byte/word~) lines::$0 ← (byte) lines::l#2 + (byte/signed byte/word/signed word) 1 (byte/word~) lines::$1 ← (byte) lines::l#2 + (byte/signed byte/word/signed word) 1 - (byte) line::x0#0 ← *((byte[]) lines_x#1 + (byte) lines::l#2) - (byte) line::x1#0 ← *((byte[]) lines_x#1 + (byte/word~) lines::$0) - (byte) line::y0#0 ← *((byte[]) lines_y#1 + (byte) lines::l#2) - (byte) line::y1#0 ← *((byte[]) lines_y#1 + (byte/word~) lines::$1) + (byte) line::x0#0 ← *((byte[]) lines_x#0 + (byte) lines::l#2) + (byte) line::x1#0 ← *((byte[]) lines_x#0 + (byte/word~) lines::$0) + (byte) line::y0#0 ← *((byte[]) lines_y#0 + (byte) lines::l#2) + (byte) line::y1#0 ← *((byte[]) lines_y#0 + (byte/word~) lines::$1) call line param-assignment to:lines::@3 lines::@3: scope:[lines] from lines::@1 - (byte[]) lines_y#3 ← phi( lines::@1/(byte[]) lines_y#1 ) - (byte[]) lines_x#3 ← phi( lines::@1/(byte[]) lines_x#1 ) (byte) lines_cnt#1 ← phi( lines::@1/(byte) lines_cnt#2 ) (byte) lines::l#3 ← phi( lines::@1/(byte) lines::l#2 ) (byte) lines::l#1 ← ++ (byte) lines::l#3 @@ -3266,8 +3232,6 @@ init_screen::@return: scope:[init_screen] from init_screen::@2 to:@return @10: scope:[] from @begin (byte) lines_cnt#9 ← phi( @begin/(byte) lines_cnt#0 ) - (byte[]) lines_y#9 ← phi( @begin/(byte[]) lines_y#0 ) - (byte[]) lines_x#9 ← phi( @begin/(byte[]) lines_x#0 ) (byte*) D018#2 ← phi( @begin/(byte*) D018#0 ) (byte*) SCREEN#4 ← phi( @begin/(byte*) SCREEN#0 ) (byte*) D011#2 ← phi( @begin/(byte*) D011#0 ) @@ -3808,26 +3772,8 @@ INITIAL SSA SYMBOL TABLE (byte) lines_cnt#9 (byte[]) lines_x (byte[]) lines_x#0 -(byte[]) lines_x#1 -(byte[]) lines_x#2 -(byte[]) lines_x#3 -(byte[]) lines_x#4 -(byte[]) lines_x#5 -(byte[]) lines_x#6 -(byte[]) lines_x#7 -(byte[]) lines_x#8 -(byte[]) lines_x#9 (byte[]) lines_y (byte[]) lines_y#0 -(byte[]) lines_y#1 -(byte[]) lines_y#2 -(byte[]) lines_y#3 -(byte[]) lines_y#4 -(byte[]) lines_y#5 -(byte[]) lines_y#6 -(byte[]) lines_y#7 -(byte[]) lines_y#8 -(byte[]) lines_y#9 (void()) main() (byte~) main::$0 (byte~) main::$1 @@ -3908,8 +3854,6 @@ CONTROL FLOW GRAPH to:@10 main: scope:[main] from @10 (byte) lines_cnt#8 ← phi( @10/(byte) lines_cnt#9 ) - (byte[]) lines_y#8 ← phi( @10/(byte[]) lines_y#9 ) - (byte[]) lines_x#8 ← phi( @10/(byte[]) lines_x#9 ) (byte*) D018#1 ← phi( @10/(byte*) D018#2 ) (byte*) SCREEN#1 ← phi( @10/(byte*) SCREEN#4 ) (byte*) D011#1 ← phi( @10/(byte*) D011#2 ) @@ -3935,25 +3879,17 @@ main: scope:[main] from @10 to:main::@3 main::@3: scope:[main] from main (byte) lines_cnt#7 ← phi( main/(byte) lines_cnt#8 ) - (byte[]) lines_y#7 ← phi( main/(byte[]) lines_y#8 ) - (byte[]) lines_x#7 ← phi( main/(byte[]) lines_x#8 ) call init_plot_tables param-assignment to:main::@4 main::@4: scope:[main] from main::@3 (byte) lines_cnt#5 ← phi( main::@3/(byte) lines_cnt#7 ) - (byte[]) lines_y#5 ← phi( main::@3/(byte[]) lines_y#7 ) - (byte[]) lines_x#5 ← phi( main::@3/(byte[]) lines_x#7 ) to:main::@1 main::@1: scope:[main] from main::@4 main::@5 (byte) lines_cnt#4 ← phi( main::@4/(byte) lines_cnt#5 main::@5/(byte) lines_cnt#6 ) - (byte[]) lines_y#4 ← phi( main::@4/(byte[]) lines_y#5 main::@5/(byte[]) lines_y#6 ) - (byte[]) lines_x#4 ← phi( main::@4/(byte[]) lines_x#5 main::@5/(byte[]) lines_x#6 ) call lines param-assignment to:main::@5 main::@5: scope:[main] from main::@1 (byte) lines_cnt#6 ← phi( main::@1/(byte) lines_cnt#4 ) - (byte[]) lines_y#6 ← phi( main::@1/(byte[]) lines_y#4 ) - (byte[]) lines_x#6 ← phi( main::@1/(byte[]) lines_x#4 ) if(true) goto main::@1 to:main::@return main::@return: scope:[main] from main::@5 @@ -3961,26 +3897,20 @@ main::@return: scope:[main] from main::@5 to:@return lines: scope:[lines] from main::@1 (byte) lines_cnt#3 ← phi( main::@1/(byte) lines_cnt#4 ) - (byte[]) lines_y#2 ← phi( main::@1/(byte[]) lines_y#4 ) - (byte[]) lines_x#2 ← phi( main::@1/(byte[]) lines_x#4 ) (byte) lines::l#0 ← (byte/signed byte/word/signed word) 0 to:lines::@1 lines::@1: scope:[lines] from lines lines::@3 (byte) lines_cnt#2 ← phi( lines/(byte) lines_cnt#3 lines::@3/(byte) lines_cnt#1 ) - (byte[]) lines_y#1 ← phi( lines/(byte[]) lines_y#2 lines::@3/(byte[]) lines_y#3 ) - (byte[]) lines_x#1 ← phi( lines/(byte[]) lines_x#2 lines::@3/(byte[]) lines_x#3 ) (byte) lines::l#2 ← phi( lines/(byte) lines::l#0 lines::@3/(byte) lines::l#1 ) (byte/word~) lines::$0 ← (byte) lines::l#2 + (byte/signed byte/word/signed word) 1 (byte/word~) lines::$1 ← (byte) lines::l#2 + (byte/signed byte/word/signed word) 1 - (byte) line::x0#0 ← *((byte[]) lines_x#1 + (byte) lines::l#2) - (byte) line::x1#0 ← *((byte[]) lines_x#1 + (byte/word~) lines::$0) - (byte) line::y0#0 ← *((byte[]) lines_y#1 + (byte) lines::l#2) - (byte) line::y1#0 ← *((byte[]) lines_y#1 + (byte/word~) lines::$1) + (byte) line::x0#0 ← *((byte[]) lines_x#0 + (byte) lines::l#2) + (byte) line::x1#0 ← *((byte[]) lines_x#0 + (byte/word~) lines::$0) + (byte) line::y0#0 ← *((byte[]) lines_y#0 + (byte) lines::l#2) + (byte) line::y1#0 ← *((byte[]) lines_y#0 + (byte/word~) lines::$1) call line param-assignment to:lines::@3 lines::@3: scope:[lines] from lines::@1 - (byte[]) lines_y#3 ← phi( lines::@1/(byte[]) lines_y#1 ) - (byte[]) lines_x#3 ← phi( lines::@1/(byte[]) lines_x#1 ) (byte) lines_cnt#1 ← phi( lines::@1/(byte) lines_cnt#2 ) (byte) lines::l#3 ← phi( lines::@1/(byte) lines::l#2 ) (byte) lines::l#1 ← ++ (byte) lines::l#3 @@ -4528,8 +4458,6 @@ init_screen::@return: scope:[init_screen] from init_screen::@2 to:@return @10: scope:[] from @begin (byte) lines_cnt#9 ← phi( @begin/(byte) lines_cnt#0 ) - (byte[]) lines_y#9 ← phi( @begin/(byte[]) lines_y#0 ) - (byte[]) lines_x#9 ← phi( @begin/(byte[]) lines_x#0 ) (byte*) D018#2 ← phi( @begin/(byte*) D018#0 ) (byte*) SCREEN#4 ← phi( @begin/(byte*) SCREEN#0 ) (byte*) D011#2 ← phi( @begin/(byte*) D011#0 ) @@ -4578,8 +4506,6 @@ CONTROL FLOW GRAPH to:@10 main: scope:[main] from @10 (byte) lines_cnt#8 ← phi( @10/(byte) lines_cnt#9 ) - (byte[]) lines_y#8 ← phi( @10/(byte[]) lines_y#9 ) - (byte[]) lines_x#8 ← phi( @10/(byte[]) lines_x#9 ) (byte*) D018#1 ← phi( @10/(byte*) D018#2 ) (byte*) SCREEN#1 ← phi( @10/(byte*) SCREEN#4 ) (byte*) D011#1 ← phi( @10/(byte*) D011#2 ) @@ -4605,25 +4531,17 @@ main: scope:[main] from @10 to:main::@3 main::@3: scope:[main] from main (byte) lines_cnt#7 ← phi( main/(byte) lines_cnt#8 ) - (byte[]) lines_y#7 ← phi( main/(byte[]) lines_y#8 ) - (byte[]) lines_x#7 ← phi( main/(byte[]) lines_x#8 ) call init_plot_tables param-assignment to:main::@4 main::@4: scope:[main] from main::@3 (byte) lines_cnt#5 ← phi( main::@3/(byte) lines_cnt#7 ) - (byte[]) lines_y#5 ← phi( main::@3/(byte[]) lines_y#7 ) - (byte[]) lines_x#5 ← phi( main::@3/(byte[]) lines_x#7 ) to:main::@1 main::@1: scope:[main] from main::@4 main::@5 (byte) lines_cnt#4 ← phi( main::@4/(byte) lines_cnt#5 main::@5/(byte) lines_cnt#6 ) - (byte[]) lines_y#4 ← phi( main::@4/(byte[]) lines_y#5 main::@5/(byte[]) lines_y#6 ) - (byte[]) lines_x#4 ← phi( main::@4/(byte[]) lines_x#5 main::@5/(byte[]) lines_x#6 ) call lines param-assignment to:main::@5 main::@5: scope:[main] from main::@1 (byte) lines_cnt#6 ← phi( main::@1/(byte) lines_cnt#4 ) - (byte[]) lines_y#6 ← phi( main::@1/(byte[]) lines_y#4 ) - (byte[]) lines_x#6 ← phi( main::@1/(byte[]) lines_x#4 ) if(true) goto main::@1 to:main::@return main::@return: scope:[main] from main::@5 @@ -4631,26 +4549,20 @@ main::@return: scope:[main] from main::@5 to:@return lines: scope:[lines] from main::@1 (byte) lines_cnt#3 ← phi( main::@1/(byte) lines_cnt#4 ) - (byte[]) lines_y#2 ← phi( main::@1/(byte[]) lines_y#4 ) - (byte[]) lines_x#2 ← phi( main::@1/(byte[]) lines_x#4 ) (byte) lines::l#0 ← (byte/signed byte/word/signed word) 0 to:lines::@1 lines::@1: scope:[lines] from lines lines::@3 (byte) lines_cnt#2 ← phi( lines/(byte) lines_cnt#3 lines::@3/(byte) lines_cnt#1 ) - (byte[]) lines_y#1 ← phi( lines/(byte[]) lines_y#2 lines::@3/(byte[]) lines_y#3 ) - (byte[]) lines_x#1 ← phi( lines/(byte[]) lines_x#2 lines::@3/(byte[]) lines_x#3 ) (byte) lines::l#2 ← phi( lines/(byte) lines::l#0 lines::@3/(byte) lines::l#1 ) (byte/word~) lines::$0 ← (byte) lines::l#2 + (byte/signed byte/word/signed word) 1 (byte/word~) lines::$1 ← (byte) lines::l#2 + (byte/signed byte/word/signed word) 1 - (byte) line::x0#0 ← *((byte[]) lines_x#1 + (byte) lines::l#2) - (byte) line::x1#0 ← *((byte[]) lines_x#1 + (byte/word~) lines::$0) - (byte) line::y0#0 ← *((byte[]) lines_y#1 + (byte) lines::l#2) - (byte) line::y1#0 ← *((byte[]) lines_y#1 + (byte/word~) lines::$1) + (byte) line::x0#0 ← *((byte[]) lines_x#0 + (byte) lines::l#2) + (byte) line::x1#0 ← *((byte[]) lines_x#0 + (byte/word~) lines::$0) + (byte) line::y0#0 ← *((byte[]) lines_y#0 + (byte) lines::l#2) + (byte) line::y1#0 ← *((byte[]) lines_y#0 + (byte/word~) lines::$1) call line param-assignment to:lines::@3 lines::@3: scope:[lines] from lines::@1 - (byte[]) lines_y#3 ← phi( lines::@1/(byte[]) lines_y#1 ) - (byte[]) lines_x#3 ← phi( lines::@1/(byte[]) lines_x#1 ) (byte) lines_cnt#1 ← phi( lines::@1/(byte) lines_cnt#2 ) (byte) lines::l#3 ← phi( lines::@1/(byte) lines::l#2 ) (byte) lines::l#1 ← ++ (byte) lines::l#3 @@ -5185,8 +5097,6 @@ init_screen::@return: scope:[init_screen] from init_screen::@2 to:@return @10: scope:[] from @begin (byte) lines_cnt#9 ← phi( @begin/(byte) lines_cnt#0 ) - (byte[]) lines_y#9 ← phi( @begin/(byte[]) lines_y#0 ) - (byte[]) lines_x#9 ← phi( @begin/(byte[]) lines_x#0 ) (byte*) D018#2 ← phi( @begin/(byte*) D018#0 ) (byte*) SCREEN#4 ← phi( @begin/(byte*) SCREEN#0 ) (byte*) D011#2 ← phi( @begin/(byte*) D011#0 ) @@ -5207,11 +5117,7 @@ Not aliassing across scopes: RSEL#1 RSEL#2 Not aliassing across scopes: D011#1 D011#2 Not aliassing across scopes: SCREEN#1 SCREEN#4 Not aliassing across scopes: D018#1 D018#2 -Not aliassing across scopes: lines_x#8 lines_x#9 -Not aliassing across scopes: lines_y#8 lines_y#9 Not aliassing across scopes: lines_cnt#8 lines_cnt#9 -Not aliassing across scopes: lines_x#2 lines_x#4 -Not aliassing across scopes: lines_y#2 lines_y#4 Not aliassing across scopes: lines_cnt#3 lines_cnt#4 Not aliassing across scopes: line::x0#1 line::x0#0 Not aliassing across scopes: line::x1#1 line::x1#0 @@ -5291,16 +5197,10 @@ Not aliassing across scopes: SCREEN#6 SCREEN#1 Not aliassing across scopes: init_screen::b#0 BITMAP#0 Not aliassing across scopes: init_screen::c#0 SCREEN#2 Not aliassing identity: SCREEN#3 SCREEN#3 -Alias (byte[]) lines_x#5 = (byte[]) lines_x#7 (byte[]) lines_x#8 -Alias (byte[]) lines_y#5 = (byte[]) lines_y#7 (byte[]) lines_y#8 Alias (byte) lines_cnt#5 = (byte) lines_cnt#7 (byte) lines_cnt#8 -Alias (byte[]) lines_x#4 = (byte[]) lines_x#6 -Alias (byte[]) lines_y#4 = (byte[]) lines_y#6 Alias (byte) lines_cnt#4 = (byte) lines_cnt#6 Alias (byte) lines::l#2 = (byte) lines::l#3 Alias (byte) lines_cnt#1 = (byte) lines_cnt#2 -Alias (byte[]) lines_x#1 = (byte[]) lines_x#3 -Alias (byte[]) lines_y#1 = (byte[]) lines_y#3 Alias (byte) line::x0#1 = (byte) line::x0#2 (byte) line::x0#3 (byte) line::x0#11 (byte) line::x0#10 (byte) line::x0#4 (byte) line::x0#5 (byte) line::x0#6 (byte) line::x0#13 (byte) line::x0#12 (byte) line::x0#7 (byte) line::x0#8 (byte) line::x0#9 Alias (byte) line::x1#1 = (byte) line::x1#2 (byte) line::x1#3 (byte) line::x1#11 (byte) line::x1#10 (byte) line::x1#4 (byte) line::x1#5 (byte) line::x1#6 (byte) line::x1#13 (byte) line::x1#12 (byte) line::x1#7 (byte) line::x1#8 (byte) line::x1#9 Alias (byte) line::y0#1 = (byte) line::y0#13 (byte) line::y0#2 (byte) line::y0#3 (byte) line::y0#4 (byte) line::y0#5 (byte) line::y0#6 (byte) line::y0#7 (byte) line::y0#8 (byte) line::y0#9 (byte) line::y0#10 (byte) line::y0#11 (byte) line::y0#12 @@ -5369,8 +5269,6 @@ Alias (byte) RSEL#0 = (byte) RSEL#2 Alias (byte*) D011#0 = (byte*) D011#2 Alias (byte*) SCREEN#0 = (byte*) SCREEN#4 Alias (byte*) D018#0 = (byte*) D018#2 -Alias (byte[]) lines_x#0 = (byte[]) lines_x#9 -Alias (byte[]) lines_y#0 = (byte[]) lines_y#9 Alias (byte) lines_cnt#0 = (byte) lines_cnt#9 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH @@ -5395,8 +5293,6 @@ CONTROL FLOW GRAPH to:@10 main: scope:[main] from @10 (byte) lines_cnt#5 ← phi( @10/(byte) lines_cnt#0 ) - (byte[]) lines_y#5 ← phi( @10/(byte[]) lines_y#0 ) - (byte[]) lines_x#5 ← phi( @10/(byte[]) lines_x#0 ) (byte*) D018#1 ← phi( @10/(byte*) D018#0 ) (byte*) SCREEN#1 ← phi( @10/(byte*) SCREEN#0 ) (byte*) D011#1 ← phi( @10/(byte*) D011#0 ) @@ -5427,8 +5323,6 @@ main::@4: scope:[main] from main::@3 to:main::@1 main::@1: scope:[main] from main::@4 main::@5 (byte) lines_cnt#4 ← phi( main::@4/(byte) lines_cnt#5 main::@5/(byte) lines_cnt#4 ) - (byte[]) lines_y#4 ← phi( main::@4/(byte[]) lines_y#5 main::@5/(byte[]) lines_y#4 ) - (byte[]) lines_x#4 ← phi( main::@4/(byte[]) lines_x#5 main::@5/(byte[]) lines_x#4 ) call lines param-assignment to:main::@5 main::@5: scope:[main] from main::@1 @@ -5439,21 +5333,17 @@ main::@return: scope:[main] from main::@5 to:@return lines: scope:[lines] from main::@1 (byte) lines_cnt#3 ← phi( main::@1/(byte) lines_cnt#4 ) - (byte[]) lines_y#2 ← phi( main::@1/(byte[]) lines_y#4 ) - (byte[]) lines_x#2 ← phi( main::@1/(byte[]) lines_x#4 ) (byte) lines::l#0 ← (byte/signed byte/word/signed word) 0 to:lines::@1 lines::@1: scope:[lines] from lines lines::@3 (byte) lines_cnt#1 ← phi( lines/(byte) lines_cnt#3 lines::@3/(byte) lines_cnt#1 ) - (byte[]) lines_y#1 ← phi( lines/(byte[]) lines_y#2 lines::@3/(byte[]) lines_y#1 ) - (byte[]) lines_x#1 ← phi( lines/(byte[]) lines_x#2 lines::@3/(byte[]) lines_x#1 ) (byte) lines::l#2 ← phi( lines/(byte) lines::l#0 lines::@3/(byte) lines::l#1 ) (byte/word~) lines::$0 ← (byte) lines::l#2 + (byte/signed byte/word/signed word) 1 (byte/word~) lines::$1 ← (byte) lines::l#2 + (byte/signed byte/word/signed word) 1 - (byte) line::x0#0 ← *((byte[]) lines_x#1 + (byte) lines::l#2) - (byte) line::x1#0 ← *((byte[]) lines_x#1 + (byte/word~) lines::$0) - (byte) line::y0#0 ← *((byte[]) lines_y#1 + (byte) lines::l#2) - (byte) line::y1#0 ← *((byte[]) lines_y#1 + (byte/word~) lines::$1) + (byte) line::x0#0 ← *((byte[]) lines_x#0 + (byte) lines::l#2) + (byte) line::x1#0 ← *((byte[]) lines_x#0 + (byte/word~) lines::$0) + (byte) line::y0#0 ← *((byte[]) lines_y#0 + (byte) lines::l#2) + (byte) line::y1#0 ← *((byte[]) lines_y#0 + (byte/word~) lines::$1) call line param-assignment to:lines::@3 lines::@3: scope:[lines] from lines::@1 @@ -5852,11 +5742,7 @@ Not aliassing across scopes: RSEL#1 RSEL#0 Not aliassing across scopes: D011#1 D011#0 Not aliassing across scopes: SCREEN#1 SCREEN#0 Not aliassing across scopes: D018#1 D018#0 -Not aliassing across scopes: lines_x#5 lines_x#0 -Not aliassing across scopes: lines_y#5 lines_y#0 Not aliassing across scopes: lines_cnt#5 lines_cnt#0 -Not aliassing across scopes: lines_x#2 lines_x#4 -Not aliassing across scopes: lines_y#2 lines_y#4 Not aliassing across scopes: lines_cnt#3 lines_cnt#4 Not aliassing across scopes: line::x0#1 line::x0#0 Not aliassing across scopes: line::x1#1 line::x1#0 @@ -5977,8 +5863,6 @@ CONTROL FLOW GRAPH to:@10 main: scope:[main] from @10 (byte) lines_cnt#5 ← phi( @10/(byte) lines_cnt#0 ) - (byte[]) lines_y#5 ← phi( @10/(byte[]) lines_y#0 ) - (byte[]) lines_x#5 ← phi( @10/(byte[]) lines_x#0 ) (byte*) D018#1 ← phi( @10/(byte*) D018#0 ) (byte*) SCREEN#1 ← phi( @10/(byte*) SCREEN#0 ) (byte*) D011#1 ← phi( @10/(byte*) D011#0 ) @@ -6009,8 +5893,6 @@ main::@4: scope:[main] from main::@3 to:main::@1 main::@1: scope:[main] from main::@4 main::@5 (byte) lines_cnt#4 ← phi( main::@4/(byte) lines_cnt#5 main::@5/(byte) lines_cnt#4 ) - (byte[]) lines_y#4 ← phi( main::@4/(byte[]) lines_y#5 main::@5/(byte[]) lines_y#4 ) - (byte[]) lines_x#4 ← phi( main::@4/(byte[]) lines_x#5 main::@5/(byte[]) lines_x#4 ) call lines param-assignment to:main::@5 main::@5: scope:[main] from main::@1 @@ -6021,21 +5903,17 @@ main::@return: scope:[main] from main::@5 to:@return lines: scope:[lines] from main::@1 (byte) lines_cnt#3 ← phi( main::@1/(byte) lines_cnt#4 ) - (byte[]) lines_y#2 ← phi( main::@1/(byte[]) lines_y#4 ) - (byte[]) lines_x#2 ← phi( main::@1/(byte[]) lines_x#4 ) (byte) lines::l#0 ← (byte/signed byte/word/signed word) 0 to:lines::@1 lines::@1: scope:[lines] from lines lines::@3 (byte) lines_cnt#1 ← phi( lines/(byte) lines_cnt#3 lines::@3/(byte) lines_cnt#1 ) - (byte[]) lines_y#1 ← phi( lines/(byte[]) lines_y#2 lines::@3/(byte[]) lines_y#1 ) - (byte[]) lines_x#1 ← phi( lines/(byte[]) lines_x#2 lines::@3/(byte[]) lines_x#1 ) (byte) lines::l#2 ← phi( lines/(byte) lines::l#0 lines::@3/(byte) lines::l#1 ) (byte/word~) lines::$0 ← (byte) lines::l#2 + (byte/signed byte/word/signed word) 1 (byte/word~) lines::$1 ← (byte) lines::l#2 + (byte/signed byte/word/signed word) 1 - (byte) line::x0#0 ← *((byte[]) lines_x#1 + (byte) lines::l#2) - (byte) line::x1#0 ← *((byte[]) lines_x#1 + (byte/word~) lines::$0) - (byte) line::y0#0 ← *((byte[]) lines_y#1 + (byte) lines::l#2) - (byte) line::y1#0 ← *((byte[]) lines_y#1 + (byte/word~) lines::$1) + (byte) line::x0#0 ← *((byte[]) lines_x#0 + (byte) lines::l#2) + (byte) line::x1#0 ← *((byte[]) lines_x#0 + (byte/word~) lines::$0) + (byte) line::y0#0 ← *((byte[]) lines_y#0 + (byte) lines::l#2) + (byte) line::y1#0 ← *((byte[]) lines_y#0 + (byte/word~) lines::$1) call line param-assignment to:lines::@3 lines::@3: scope:[lines] from lines::@1 @@ -6416,11 +6294,7 @@ Not aliassing across scopes: RSEL#1 RSEL#0 Not aliassing across scopes: D011#1 D011#0 Not aliassing across scopes: SCREEN#1 SCREEN#0 Not aliassing across scopes: D018#1 D018#0 -Not aliassing across scopes: lines_x#5 lines_x#0 -Not aliassing across scopes: lines_y#5 lines_y#0 Not aliassing across scopes: lines_cnt#5 lines_cnt#0 -Not aliassing across scopes: lines_x#2 lines_x#4 -Not aliassing across scopes: lines_y#2 lines_y#4 Not aliassing across scopes: lines_cnt#3 lines_cnt#4 Not aliassing across scopes: line::x0#1 line::x0#0 Not aliassing across scopes: line::x1#1 line::x1#0 @@ -6500,11 +6374,7 @@ Not aliassing across scopes: SCREEN#6 SCREEN#1 Not aliassing across scopes: init_screen::b#0 BITMAP#0 Not aliassing across scopes: init_screen::c#0 SCREEN#2 Not aliassing identity: SCREEN#3 SCREEN#3 -Self Phi Eliminated (byte[]) lines_x#4 -Self Phi Eliminated (byte[]) lines_y#4 Self Phi Eliminated (byte) lines_cnt#4 -Self Phi Eliminated (byte[]) lines_x#1 -Self Phi Eliminated (byte[]) lines_y#1 Self Phi Eliminated (byte) lines_cnt#1 Self Phi Eliminated (byte) line_xdyi::yd#3 Self Phi Eliminated (byte) line_xdyi::xd#2 @@ -6543,8 +6413,6 @@ CONTROL FLOW GRAPH to:@10 main: scope:[main] from @10 (byte) lines_cnt#5 ← phi( @10/(byte) lines_cnt#0 ) - (byte[]) lines_y#5 ← phi( @10/(byte[]) lines_y#0 ) - (byte[]) lines_x#5 ← phi( @10/(byte[]) lines_x#0 ) (byte*) D018#1 ← phi( @10/(byte*) D018#0 ) (byte*) SCREEN#1 ← phi( @10/(byte*) SCREEN#0 ) (byte*) D011#1 ← phi( @10/(byte*) D011#0 ) @@ -6575,8 +6443,6 @@ main::@4: scope:[main] from main::@3 to:main::@1 main::@1: scope:[main] from main::@4 main::@5 (byte) lines_cnt#4 ← phi( main::@4/(byte) lines_cnt#5 ) - (byte[]) lines_y#4 ← phi( main::@4/(byte[]) lines_y#5 ) - (byte[]) lines_x#4 ← phi( main::@4/(byte[]) lines_x#5 ) call lines param-assignment to:main::@5 main::@5: scope:[main] from main::@1 @@ -6587,21 +6453,17 @@ main::@return: scope:[main] from main::@5 to:@return lines: scope:[lines] from main::@1 (byte) lines_cnt#3 ← phi( main::@1/(byte) lines_cnt#4 ) - (byte[]) lines_y#2 ← phi( main::@1/(byte[]) lines_y#4 ) - (byte[]) lines_x#2 ← phi( main::@1/(byte[]) lines_x#4 ) (byte) lines::l#0 ← (byte/signed byte/word/signed word) 0 to:lines::@1 lines::@1: scope:[lines] from lines lines::@3 (byte) lines_cnt#1 ← phi( lines/(byte) lines_cnt#3 ) - (byte[]) lines_y#1 ← phi( lines/(byte[]) lines_y#2 ) - (byte[]) lines_x#1 ← phi( lines/(byte[]) lines_x#2 ) (byte) lines::l#2 ← phi( lines/(byte) lines::l#0 lines::@3/(byte) lines::l#1 ) (byte/word~) lines::$0 ← (byte) lines::l#2 + (byte/signed byte/word/signed word) 1 (byte/word~) lines::$1 ← (byte) lines::l#2 + (byte/signed byte/word/signed word) 1 - (byte) line::x0#0 ← *((byte[]) lines_x#1 + (byte) lines::l#2) - (byte) line::x1#0 ← *((byte[]) lines_x#1 + (byte/word~) lines::$0) - (byte) line::y0#0 ← *((byte[]) lines_y#1 + (byte) lines::l#2) - (byte) line::y1#0 ← *((byte[]) lines_y#1 + (byte/word~) lines::$1) + (byte) line::x0#0 ← *((byte[]) lines_x#0 + (byte) lines::l#2) + (byte) line::x1#0 ← *((byte[]) lines_x#0 + (byte/word~) lines::$0) + (byte) line::y0#0 ← *((byte[]) lines_y#0 + (byte) lines::l#2) + (byte) line::y1#0 ← *((byte[]) lines_y#0 + (byte/word~) lines::$1) call line param-assignment to:lines::@3 lines::@3: scope:[lines] from lines::@1 @@ -6982,17 +6844,9 @@ Redundant Phi (byte) RSEL#1 (byte) RSEL#0 Redundant Phi (byte*) D011#1 (byte*) D011#0 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 Redundant Phi (byte*) D018#1 (byte*) D018#0 -Redundant Phi (byte[]) lines_x#5 (byte[]) lines_x#0 -Redundant Phi (byte[]) lines_y#5 (byte[]) lines_y#0 Redundant Phi (byte) lines_cnt#5 (byte) lines_cnt#0 -Redundant Phi (byte[]) lines_x#4 (byte[]) lines_x#5 -Redundant Phi (byte[]) lines_y#4 (byte[]) lines_y#5 Redundant Phi (byte) lines_cnt#4 (byte) lines_cnt#5 -Redundant Phi (byte[]) lines_x#2 (byte[]) lines_x#4 -Redundant Phi (byte[]) lines_y#2 (byte[]) lines_y#4 Redundant Phi (byte) lines_cnt#3 (byte) lines_cnt#4 -Redundant Phi (byte[]) lines_x#1 (byte[]) lines_x#2 -Redundant Phi (byte[]) lines_y#1 (byte[]) lines_y#2 Redundant Phi (byte) lines_cnt#1 (byte) lines_cnt#3 Redundant Phi (byte) line::x0#1 (byte) line::x0#0 Redundant Phi (byte) line::x1#1 (byte) line::x1#0 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log b/src/main/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log index 14af57e21..302ec54d0 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/bitmap-plotter.log @@ -943,8 +943,6 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @5 (byte) plots_cnt#10 ← phi( @5/(byte) plots_cnt#11 ) - (byte[]) plots_y#10 ← phi( @5/(byte[]) plots_y#11 ) - (byte[]) plots_x#10 ← phi( @5/(byte[]) plots_x#11 ) (byte*) RASTER#6 ← phi( @5/(byte*) RASTER#8 ) (byte*) D018#1 ← phi( @5/(byte*) D018#2 ) (byte*) SCREEN#1 ← phi( @5/(byte*) SCREEN#4 ) @@ -971,30 +969,22 @@ main: scope:[main] from @5 to:main::@5 main::@5: scope:[main] from main (byte) plots_cnt#8 ← phi( main/(byte) plots_cnt#10 ) - (byte[]) plots_y#8 ← phi( main/(byte[]) plots_y#10 ) - (byte[]) plots_x#8 ← phi( main/(byte[]) plots_x#10 ) (byte*) BGCOL#9 ← phi( main/(byte*) BGCOL#1 ) (byte*) RASTER#4 ← phi( main/(byte*) RASTER#6 ) call init_plot_tables param-assignment to:main::@6 main::@6: scope:[main] from main::@5 (byte) plots_cnt#7 ← phi( main::@5/(byte) plots_cnt#8 ) - (byte[]) plots_y#7 ← phi( main::@5/(byte[]) plots_y#8 ) - (byte[]) plots_x#7 ← phi( main::@5/(byte[]) plots_x#8 ) (byte*) BGCOL#7 ← phi( main::@5/(byte*) BGCOL#9 ) (byte*) RASTER#3 ← phi( main::@5/(byte*) RASTER#4 ) to:main::@2 main::@1: scope:[main] from main::@7 (byte) plots_cnt#6 ← phi( main::@7/(byte) plots_cnt#9 ) - (byte[]) plots_y#6 ← phi( main::@7/(byte[]) plots_y#9 ) - (byte[]) plots_x#6 ← phi( main::@7/(byte[]) plots_x#9 ) (byte*) BGCOL#6 ← phi( main::@7/(byte*) BGCOL#3 ) (byte*) RASTER#2 ← phi( main::@7/(byte*) RASTER#5 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 main::@6 (byte) plots_cnt#5 ← phi( main::@1/(byte) plots_cnt#6 main::@2/(byte) plots_cnt#5 main::@6/(byte) plots_cnt#7 ) - (byte[]) plots_y#5 ← phi( main::@1/(byte[]) plots_y#6 main::@2/(byte[]) plots_y#5 main::@6/(byte[]) plots_y#7 ) - (byte[]) plots_x#5 ← phi( main::@1/(byte[]) plots_x#6 main::@2/(byte[]) plots_x#5 main::@6/(byte[]) plots_x#7 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#6 main::@2/(byte*) BGCOL#5 main::@6/(byte*) BGCOL#7 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#2 main::@2/(byte*) RASTER#1 main::@6/(byte*) RASTER#3 ) (boolean~) main::$11 ← *((byte*) RASTER#1) != (byte/word/signed word) 255 @@ -1003,16 +993,12 @@ main::@2: scope:[main] from main::@1 main::@2 main::@6 main::@3: scope:[main] from main::@2 (byte) plots_cnt#4 ← phi( main::@2/(byte) plots_cnt#5 ) (byte*) RASTER#7 ← phi( main::@2/(byte*) RASTER#1 ) - (byte[]) plots_y#4 ← phi( main::@2/(byte[]) plots_y#5 ) - (byte[]) plots_x#4 ← phi( main::@2/(byte[]) plots_x#5 ) (byte*) BGCOL#2 ← phi( main::@2/(byte*) BGCOL#5 ) *((byte*) BGCOL#2) ← ++ *((byte*) BGCOL#2) call plots param-assignment to:main::@7 main::@7: scope:[main] from main::@3 (byte) plots_cnt#9 ← phi( main::@3/(byte) plots_cnt#4 ) - (byte[]) plots_y#9 ← phi( main::@3/(byte[]) plots_y#4 ) - (byte[]) plots_x#9 ← phi( main::@3/(byte[]) plots_x#4 ) (byte*) RASTER#5 ← phi( main::@3/(byte*) RASTER#7 ) (byte*) BGCOL#3 ← phi( main::@3/(byte*) BGCOL#2 ) *((byte*) BGCOL#3) ← -- *((byte*) BGCOL#3) @@ -1037,22 +1023,16 @@ main::@return: scope:[main] from main::@7 to:@2 plots: scope:[plots] from main::@3 (byte) plots_cnt#3 ← phi( main::@3/(byte) plots_cnt#4 ) - (byte[]) plots_y#2 ← phi( main::@3/(byte[]) plots_y#4 ) - (byte[]) plots_x#2 ← phi( main::@3/(byte[]) plots_x#4 ) (byte) plots::i#0 ← (byte/signed byte/word/signed word) 0 to:plots::@1 plots::@1: scope:[plots] from plots plots::@3 (byte) plots_cnt#2 ← phi( plots/(byte) plots_cnt#3 plots::@3/(byte) plots_cnt#1 ) - (byte[]) plots_y#1 ← phi( plots/(byte[]) plots_y#2 plots::@3/(byte[]) plots_y#3 ) (byte) plots::i#2 ← phi( plots/(byte) plots::i#0 plots::@3/(byte) plots::i#1 ) - (byte[]) plots_x#1 ← phi( plots/(byte[]) plots_x#2 plots::@3/(byte[]) plots_x#3 ) - (byte) plot::x#0 ← *((byte[]) plots_x#1 + (byte) plots::i#2) - (byte) plot::y#0 ← *((byte[]) plots_y#1 + (byte) plots::i#2) + (byte) plot::x#0 ← *((byte[]) plots_x#0 + (byte) plots::i#2) + (byte) plot::y#0 ← *((byte[]) plots_y#0 + (byte) plots::i#2) call plot param-assignment to:plots::@3 plots::@3: scope:[plots] from plots::@1 - (byte[]) plots_y#3 ← phi( plots::@1/(byte[]) plots_y#1 ) - (byte[]) plots_x#3 ← phi( plots::@1/(byte[]) plots_x#1 ) (byte) plots_cnt#1 ← phi( plots::@1/(byte) plots_cnt#2 ) (byte) plots::i#3 ← phi( plots::@1/(byte) plots::i#2 ) (byte) plots::i#1 ← ++ (byte) plots::i#3 @@ -1064,8 +1044,6 @@ plots::@return: scope:[plots] from plots::@3 to:@return @2: scope:[] from @1 (byte) plots_cnt#12 ← phi( @1/(byte) plots_cnt#0 ) - (byte[]) plots_y#12 ← phi( @1/(byte[]) plots_y#0 ) - (byte[]) plots_x#12 ← phi( @1/(byte[]) plots_x#0 ) (byte*) RASTER#9 ← phi( @1/(byte*) RASTER#10 ) (byte*) D018#3 ← phi( @1/(byte*) D018#4 ) (byte*) SCREEN#7 ← phi( @1/(byte*) SCREEN#8 ) @@ -1197,8 +1175,6 @@ init_screen::@return: scope:[init_screen] from init_screen::@2 to:@return @5: scope:[] from @2 (byte) plots_cnt#11 ← phi( @2/(byte) plots_cnt#12 ) - (byte[]) plots_y#11 ← phi( @2/(byte[]) plots_y#12 ) - (byte[]) plots_x#11 ← phi( @2/(byte[]) plots_x#12 ) (byte*) RASTER#8 ← phi( @2/(byte*) RASTER#9 ) (byte*) D018#2 ← phi( @2/(byte*) D018#3 ) (byte*) SCREEN#4 ← phi( @2/(byte*) SCREEN#7 ) @@ -1229,8 +1205,6 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN to:@1 main: scope:[main] from @5 (byte) plots_cnt#10 ← phi( @5/(byte) plots_cnt#11 ) - (byte[]) plots_y#10 ← phi( @5/(byte[]) plots_y#11 ) - (byte[]) plots_x#10 ← phi( @5/(byte[]) plots_x#11 ) (byte*) RASTER#6 ← phi( @5/(byte*) RASTER#8 ) (byte*) D018#1 ← phi( @5/(byte*) D018#2 ) (byte*) SCREEN#1 ← phi( @5/(byte*) SCREEN#4 ) @@ -1257,30 +1231,22 @@ main: scope:[main] from @5 to:main::@5 main::@5: scope:[main] from main (byte) plots_cnt#8 ← phi( main/(byte) plots_cnt#10 ) - (byte[]) plots_y#8 ← phi( main/(byte[]) plots_y#10 ) - (byte[]) plots_x#8 ← phi( main/(byte[]) plots_x#10 ) (byte*) BGCOL#9 ← phi( main/(byte*) BGCOL#1 ) (byte*) RASTER#4 ← phi( main/(byte*) RASTER#6 ) call init_plot_tables param-assignment to:main::@6 main::@6: scope:[main] from main::@5 (byte) plots_cnt#7 ← phi( main::@5/(byte) plots_cnt#8 ) - (byte[]) plots_y#7 ← phi( main::@5/(byte[]) plots_y#8 ) - (byte[]) plots_x#7 ← phi( main::@5/(byte[]) plots_x#8 ) (byte*) BGCOL#7 ← phi( main::@5/(byte*) BGCOL#9 ) (byte*) RASTER#3 ← phi( main::@5/(byte*) RASTER#4 ) to:main::@2 main::@1: scope:[main] from main::@7 (byte) plots_cnt#6 ← phi( main::@7/(byte) plots_cnt#9 ) - (byte[]) plots_y#6 ← phi( main::@7/(byte[]) plots_y#9 ) - (byte[]) plots_x#6 ← phi( main::@7/(byte[]) plots_x#9 ) (byte*) BGCOL#6 ← phi( main::@7/(byte*) BGCOL#3 ) (byte*) RASTER#2 ← phi( main::@7/(byte*) RASTER#5 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 main::@6 (byte) plots_cnt#5 ← phi( main::@1/(byte) plots_cnt#6 main::@2/(byte) plots_cnt#5 main::@6/(byte) plots_cnt#7 ) - (byte[]) plots_y#5 ← phi( main::@1/(byte[]) plots_y#6 main::@2/(byte[]) plots_y#5 main::@6/(byte[]) plots_y#7 ) - (byte[]) plots_x#5 ← phi( main::@1/(byte[]) plots_x#6 main::@2/(byte[]) plots_x#5 main::@6/(byte[]) plots_x#7 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#6 main::@2/(byte*) BGCOL#5 main::@6/(byte*) BGCOL#7 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#2 main::@2/(byte*) RASTER#1 main::@6/(byte*) RASTER#3 ) (boolean~) main::$11 ← *((byte*) RASTER#1) != (byte/word/signed word) 255 @@ -1289,16 +1255,12 @@ main::@2: scope:[main] from main::@1 main::@2 main::@6 main::@3: scope:[main] from main::@2 (byte) plots_cnt#4 ← phi( main::@2/(byte) plots_cnt#5 ) (byte*) RASTER#7 ← phi( main::@2/(byte*) RASTER#1 ) - (byte[]) plots_y#4 ← phi( main::@2/(byte[]) plots_y#5 ) - (byte[]) plots_x#4 ← phi( main::@2/(byte[]) plots_x#5 ) (byte*) BGCOL#2 ← phi( main::@2/(byte*) BGCOL#5 ) *((byte*) BGCOL#2) ← ++ *((byte*) BGCOL#2) call plots param-assignment to:main::@7 main::@7: scope:[main] from main::@3 (byte) plots_cnt#9 ← phi( main::@3/(byte) plots_cnt#4 ) - (byte[]) plots_y#9 ← phi( main::@3/(byte[]) plots_y#4 ) - (byte[]) plots_x#9 ← phi( main::@3/(byte[]) plots_x#4 ) (byte*) RASTER#5 ← phi( main::@3/(byte*) RASTER#7 ) (byte*) BGCOL#3 ← phi( main::@3/(byte*) BGCOL#2 ) *((byte*) BGCOL#3) ← -- *((byte*) BGCOL#3) @@ -1323,22 +1285,16 @@ main::@return: scope:[main] from main::@7 to:@2 plots: scope:[plots] from main::@3 (byte) plots_cnt#3 ← phi( main::@3/(byte) plots_cnt#4 ) - (byte[]) plots_y#2 ← phi( main::@3/(byte[]) plots_y#4 ) - (byte[]) plots_x#2 ← phi( main::@3/(byte[]) plots_x#4 ) (byte) plots::i#0 ← (byte/signed byte/word/signed word) 0 to:plots::@1 plots::@1: scope:[plots] from plots plots::@3 (byte) plots_cnt#2 ← phi( plots/(byte) plots_cnt#3 plots::@3/(byte) plots_cnt#1 ) - (byte[]) plots_y#1 ← phi( plots/(byte[]) plots_y#2 plots::@3/(byte[]) plots_y#3 ) (byte) plots::i#2 ← phi( plots/(byte) plots::i#0 plots::@3/(byte) plots::i#1 ) - (byte[]) plots_x#1 ← phi( plots/(byte[]) plots_x#2 plots::@3/(byte[]) plots_x#3 ) - (byte) plot::x#0 ← *((byte[]) plots_x#1 + (byte) plots::i#2) - (byte) plot::y#0 ← *((byte[]) plots_y#1 + (byte) plots::i#2) + (byte) plot::x#0 ← *((byte[]) plots_x#0 + (byte) plots::i#2) + (byte) plot::y#0 ← *((byte[]) plots_y#0 + (byte) plots::i#2) call plot param-assignment to:plots::@3 plots::@3: scope:[plots] from plots::@1 - (byte[]) plots_y#3 ← phi( plots::@1/(byte[]) plots_y#1 ) - (byte[]) plots_x#3 ← phi( plots::@1/(byte[]) plots_x#1 ) (byte) plots_cnt#1 ← phi( plots::@1/(byte) plots_cnt#2 ) (byte) plots::i#3 ← phi( plots::@1/(byte) plots::i#2 ) (byte) plots::i#1 ← ++ (byte) plots::i#3 @@ -1350,8 +1306,6 @@ plots::@return: scope:[plots] from plots::@3 to:@return @2: scope:[] from @1 (byte) plots_cnt#12 ← phi( @1/(byte) plots_cnt#0 ) - (byte[]) plots_y#12 ← phi( @1/(byte[]) plots_y#0 ) - (byte[]) plots_x#12 ← phi( @1/(byte[]) plots_x#0 ) (byte*) RASTER#9 ← phi( @1/(byte*) RASTER#10 ) (byte*) D018#3 ← phi( @1/(byte*) D018#4 ) (byte*) SCREEN#7 ← phi( @1/(byte*) SCREEN#8 ) @@ -1483,8 +1437,6 @@ init_screen::@return: scope:[init_screen] from init_screen::@2 to:@return @5: scope:[] from @2 (byte) plots_cnt#11 ← phi( @2/(byte) plots_cnt#12 ) - (byte[]) plots_y#11 ← phi( @2/(byte[]) plots_y#12 ) - (byte[]) plots_x#11 ← phi( @2/(byte[]) plots_x#12 ) (byte*) RASTER#8 ← phi( @2/(byte*) RASTER#9 ) (byte*) D018#2 ← phi( @2/(byte*) D018#3 ) (byte*) SCREEN#4 ← phi( @2/(byte*) SCREEN#7 ) @@ -1723,32 +1675,8 @@ INITIAL SSA SYMBOL TABLE (byte) plots_cnt#9 (byte[]) plots_x (byte[]) plots_x#0 -(byte[]) plots_x#1 -(byte[]) plots_x#10 -(byte[]) plots_x#11 -(byte[]) plots_x#12 -(byte[]) plots_x#2 -(byte[]) plots_x#3 -(byte[]) plots_x#4 -(byte[]) plots_x#5 -(byte[]) plots_x#6 -(byte[]) plots_x#7 -(byte[]) plots_x#8 -(byte[]) plots_x#9 (byte[]) plots_y (byte[]) plots_y#0 -(byte[]) plots_y#1 -(byte[]) plots_y#10 -(byte[]) plots_y#11 -(byte[]) plots_y#12 -(byte[]) plots_y#2 -(byte[]) plots_y#3 -(byte[]) plots_y#4 -(byte[]) plots_y#5 -(byte[]) plots_y#6 -(byte[]) plots_y#7 -(byte[]) plots_y#8 -(byte[]) plots_y#9 Culled Empty Block (label) @6 Succesful SSA optimization Pass2CullEmptyBlocks @@ -1767,8 +1695,6 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @5 (byte) plots_cnt#10 ← phi( @5/(byte) plots_cnt#11 ) - (byte[]) plots_y#10 ← phi( @5/(byte[]) plots_y#11 ) - (byte[]) plots_x#10 ← phi( @5/(byte[]) plots_x#11 ) (byte*) RASTER#6 ← phi( @5/(byte*) RASTER#8 ) (byte*) D018#1 ← phi( @5/(byte*) D018#2 ) (byte*) SCREEN#1 ← phi( @5/(byte*) SCREEN#4 ) @@ -1795,30 +1721,22 @@ main: scope:[main] from @5 to:main::@5 main::@5: scope:[main] from main (byte) plots_cnt#8 ← phi( main/(byte) plots_cnt#10 ) - (byte[]) plots_y#8 ← phi( main/(byte[]) plots_y#10 ) - (byte[]) plots_x#8 ← phi( main/(byte[]) plots_x#10 ) (byte*) BGCOL#9 ← phi( main/(byte*) BGCOL#1 ) (byte*) RASTER#4 ← phi( main/(byte*) RASTER#6 ) call init_plot_tables param-assignment to:main::@6 main::@6: scope:[main] from main::@5 (byte) plots_cnt#7 ← phi( main::@5/(byte) plots_cnt#8 ) - (byte[]) plots_y#7 ← phi( main::@5/(byte[]) plots_y#8 ) - (byte[]) plots_x#7 ← phi( main::@5/(byte[]) plots_x#8 ) (byte*) BGCOL#7 ← phi( main::@5/(byte*) BGCOL#9 ) (byte*) RASTER#3 ← phi( main::@5/(byte*) RASTER#4 ) to:main::@2 main::@1: scope:[main] from main::@7 (byte) plots_cnt#6 ← phi( main::@7/(byte) plots_cnt#9 ) - (byte[]) plots_y#6 ← phi( main::@7/(byte[]) plots_y#9 ) - (byte[]) plots_x#6 ← phi( main::@7/(byte[]) plots_x#9 ) (byte*) BGCOL#6 ← phi( main::@7/(byte*) BGCOL#3 ) (byte*) RASTER#2 ← phi( main::@7/(byte*) RASTER#5 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 main::@6 (byte) plots_cnt#5 ← phi( main::@1/(byte) plots_cnt#6 main::@2/(byte) plots_cnt#5 main::@6/(byte) plots_cnt#7 ) - (byte[]) plots_y#5 ← phi( main::@1/(byte[]) plots_y#6 main::@2/(byte[]) plots_y#5 main::@6/(byte[]) plots_y#7 ) - (byte[]) plots_x#5 ← phi( main::@1/(byte[]) plots_x#6 main::@2/(byte[]) plots_x#5 main::@6/(byte[]) plots_x#7 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#6 main::@2/(byte*) BGCOL#5 main::@6/(byte*) BGCOL#7 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#2 main::@2/(byte*) RASTER#1 main::@6/(byte*) RASTER#3 ) (boolean~) main::$11 ← *((byte*) RASTER#1) != (byte/word/signed word) 255 @@ -1827,16 +1745,12 @@ main::@2: scope:[main] from main::@1 main::@2 main::@6 main::@3: scope:[main] from main::@2 (byte) plots_cnt#4 ← phi( main::@2/(byte) plots_cnt#5 ) (byte*) RASTER#7 ← phi( main::@2/(byte*) RASTER#1 ) - (byte[]) plots_y#4 ← phi( main::@2/(byte[]) plots_y#5 ) - (byte[]) plots_x#4 ← phi( main::@2/(byte[]) plots_x#5 ) (byte*) BGCOL#2 ← phi( main::@2/(byte*) BGCOL#5 ) *((byte*) BGCOL#2) ← ++ *((byte*) BGCOL#2) call plots param-assignment to:main::@7 main::@7: scope:[main] from main::@3 (byte) plots_cnt#9 ← phi( main::@3/(byte) plots_cnt#4 ) - (byte[]) plots_y#9 ← phi( main::@3/(byte[]) plots_y#4 ) - (byte[]) plots_x#9 ← phi( main::@3/(byte[]) plots_x#4 ) (byte*) RASTER#5 ← phi( main::@3/(byte*) RASTER#7 ) (byte*) BGCOL#3 ← phi( main::@3/(byte*) BGCOL#2 ) *((byte*) BGCOL#3) ← -- *((byte*) BGCOL#3) @@ -1861,22 +1775,16 @@ main::@return: scope:[main] from main::@7 to:@2 plots: scope:[plots] from main::@3 (byte) plots_cnt#3 ← phi( main::@3/(byte) plots_cnt#4 ) - (byte[]) plots_y#2 ← phi( main::@3/(byte[]) plots_y#4 ) - (byte[]) plots_x#2 ← phi( main::@3/(byte[]) plots_x#4 ) (byte) plots::i#0 ← (byte/signed byte/word/signed word) 0 to:plots::@1 plots::@1: scope:[plots] from plots plots::@3 (byte) plots_cnt#2 ← phi( plots/(byte) plots_cnt#3 plots::@3/(byte) plots_cnt#1 ) - (byte[]) plots_y#1 ← phi( plots/(byte[]) plots_y#2 plots::@3/(byte[]) plots_y#3 ) (byte) plots::i#2 ← phi( plots/(byte) plots::i#0 plots::@3/(byte) plots::i#1 ) - (byte[]) plots_x#1 ← phi( plots/(byte[]) plots_x#2 plots::@3/(byte[]) plots_x#3 ) - (byte) plot::x#0 ← *((byte[]) plots_x#1 + (byte) plots::i#2) - (byte) plot::y#0 ← *((byte[]) plots_y#1 + (byte) plots::i#2) + (byte) plot::x#0 ← *((byte[]) plots_x#0 + (byte) plots::i#2) + (byte) plot::y#0 ← *((byte[]) plots_y#0 + (byte) plots::i#2) call plot param-assignment to:plots::@3 plots::@3: scope:[plots] from plots::@1 - (byte[]) plots_y#3 ← phi( plots::@1/(byte[]) plots_y#1 ) - (byte[]) plots_x#3 ← phi( plots::@1/(byte[]) plots_x#1 ) (byte) plots_cnt#1 ← phi( plots::@1/(byte) plots_cnt#2 ) (byte) plots::i#3 ← phi( plots::@1/(byte) plots::i#2 ) (byte) plots::i#1 ← ++ (byte) plots::i#3 @@ -1888,8 +1796,6 @@ plots::@return: scope:[plots] from plots::@3 to:@return @2: scope:[] from @1 (byte) plots_cnt#12 ← phi( @1/(byte) plots_cnt#0 ) - (byte[]) plots_y#12 ← phi( @1/(byte[]) plots_y#0 ) - (byte[]) plots_x#12 ← phi( @1/(byte[]) plots_x#0 ) (byte*) RASTER#9 ← phi( @1/(byte*) RASTER#10 ) (byte*) D018#3 ← phi( @1/(byte*) D018#4 ) (byte*) SCREEN#7 ← phi( @1/(byte*) SCREEN#8 ) @@ -2021,8 +1927,6 @@ init_screen::@return: scope:[init_screen] from init_screen::@2 to:@return @5: scope:[] from @2 (byte) plots_cnt#11 ← phi( @2/(byte) plots_cnt#12 ) - (byte[]) plots_y#11 ← phi( @2/(byte[]) plots_y#12 ) - (byte[]) plots_x#11 ← phi( @2/(byte[]) plots_x#12 ) (byte*) RASTER#8 ← phi( @2/(byte*) RASTER#9 ) (byte*) D018#2 ← phi( @2/(byte*) D018#3 ) (byte*) SCREEN#4 ← phi( @2/(byte*) SCREEN#7 ) @@ -2054,8 +1958,6 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @5 (byte) plots_cnt#10 ← phi( @5/(byte) plots_cnt#11 ) - (byte[]) plots_y#10 ← phi( @5/(byte[]) plots_y#11 ) - (byte[]) plots_x#10 ← phi( @5/(byte[]) plots_x#11 ) (byte*) RASTER#6 ← phi( @5/(byte*) RASTER#8 ) (byte*) D018#1 ← phi( @5/(byte*) D018#2 ) (byte*) SCREEN#1 ← phi( @5/(byte*) SCREEN#4 ) @@ -2082,30 +1984,22 @@ main: scope:[main] from @5 to:main::@5 main::@5: scope:[main] from main (byte) plots_cnt#8 ← phi( main/(byte) plots_cnt#10 ) - (byte[]) plots_y#8 ← phi( main/(byte[]) plots_y#10 ) - (byte[]) plots_x#8 ← phi( main/(byte[]) plots_x#10 ) (byte*) BGCOL#9 ← phi( main/(byte*) BGCOL#1 ) (byte*) RASTER#4 ← phi( main/(byte*) RASTER#6 ) call init_plot_tables param-assignment to:main::@6 main::@6: scope:[main] from main::@5 (byte) plots_cnt#7 ← phi( main::@5/(byte) plots_cnt#8 ) - (byte[]) plots_y#7 ← phi( main::@5/(byte[]) plots_y#8 ) - (byte[]) plots_x#7 ← phi( main::@5/(byte[]) plots_x#8 ) (byte*) BGCOL#7 ← phi( main::@5/(byte*) BGCOL#9 ) (byte*) RASTER#3 ← phi( main::@5/(byte*) RASTER#4 ) to:main::@2 main::@1: scope:[main] from main::@7 (byte) plots_cnt#6 ← phi( main::@7/(byte) plots_cnt#9 ) - (byte[]) plots_y#6 ← phi( main::@7/(byte[]) plots_y#9 ) - (byte[]) plots_x#6 ← phi( main::@7/(byte[]) plots_x#9 ) (byte*) BGCOL#6 ← phi( main::@7/(byte*) BGCOL#3 ) (byte*) RASTER#2 ← phi( main::@7/(byte*) RASTER#5 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 main::@6 (byte) plots_cnt#5 ← phi( main::@1/(byte) plots_cnt#6 main::@2/(byte) plots_cnt#5 main::@6/(byte) plots_cnt#7 ) - (byte[]) plots_y#5 ← phi( main::@1/(byte[]) plots_y#6 main::@2/(byte[]) plots_y#5 main::@6/(byte[]) plots_y#7 ) - (byte[]) plots_x#5 ← phi( main::@1/(byte[]) plots_x#6 main::@2/(byte[]) plots_x#5 main::@6/(byte[]) plots_x#7 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#6 main::@2/(byte*) BGCOL#5 main::@6/(byte*) BGCOL#7 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#2 main::@2/(byte*) RASTER#1 main::@6/(byte*) RASTER#3 ) (boolean~) main::$11 ← *((byte*) RASTER#1) != (byte/word/signed word) 255 @@ -2114,16 +2008,12 @@ main::@2: scope:[main] from main::@1 main::@2 main::@6 main::@3: scope:[main] from main::@2 (byte) plots_cnt#4 ← phi( main::@2/(byte) plots_cnt#5 ) (byte*) RASTER#7 ← phi( main::@2/(byte*) RASTER#1 ) - (byte[]) plots_y#4 ← phi( main::@2/(byte[]) plots_y#5 ) - (byte[]) plots_x#4 ← phi( main::@2/(byte[]) plots_x#5 ) (byte*) BGCOL#2 ← phi( main::@2/(byte*) BGCOL#5 ) *((byte*) BGCOL#2) ← ++ *((byte*) BGCOL#2) call plots param-assignment to:main::@7 main::@7: scope:[main] from main::@3 (byte) plots_cnt#9 ← phi( main::@3/(byte) plots_cnt#4 ) - (byte[]) plots_y#9 ← phi( main::@3/(byte[]) plots_y#4 ) - (byte[]) plots_x#9 ← phi( main::@3/(byte[]) plots_x#4 ) (byte*) RASTER#5 ← phi( main::@3/(byte*) RASTER#7 ) (byte*) BGCOL#3 ← phi( main::@3/(byte*) BGCOL#2 ) *((byte*) BGCOL#3) ← -- *((byte*) BGCOL#3) @@ -2148,22 +2038,16 @@ main::@return: scope:[main] from main::@7 to:@2 plots: scope:[plots] from main::@3 (byte) plots_cnt#3 ← phi( main::@3/(byte) plots_cnt#4 ) - (byte[]) plots_y#2 ← phi( main::@3/(byte[]) plots_y#4 ) - (byte[]) plots_x#2 ← phi( main::@3/(byte[]) plots_x#4 ) (byte) plots::i#0 ← (byte/signed byte/word/signed word) 0 to:plots::@1 plots::@1: scope:[plots] from plots plots::@3 (byte) plots_cnt#2 ← phi( plots/(byte) plots_cnt#3 plots::@3/(byte) plots_cnt#1 ) - (byte[]) plots_y#1 ← phi( plots/(byte[]) plots_y#2 plots::@3/(byte[]) plots_y#3 ) (byte) plots::i#2 ← phi( plots/(byte) plots::i#0 plots::@3/(byte) plots::i#1 ) - (byte[]) plots_x#1 ← phi( plots/(byte[]) plots_x#2 plots::@3/(byte[]) plots_x#3 ) - (byte) plot::x#0 ← *((byte[]) plots_x#1 + (byte) plots::i#2) - (byte) plot::y#0 ← *((byte[]) plots_y#1 + (byte) plots::i#2) + (byte) plot::x#0 ← *((byte[]) plots_x#0 + (byte) plots::i#2) + (byte) plot::y#0 ← *((byte[]) plots_y#0 + (byte) plots::i#2) call plot param-assignment to:plots::@3 plots::@3: scope:[plots] from plots::@1 - (byte[]) plots_y#3 ← phi( plots::@1/(byte[]) plots_y#1 ) - (byte[]) plots_x#3 ← phi( plots::@1/(byte[]) plots_x#1 ) (byte) plots_cnt#1 ← phi( plots::@1/(byte) plots_cnt#2 ) (byte) plots::i#3 ← phi( plots::@1/(byte) plots::i#2 ) (byte) plots::i#1 ← ++ (byte) plots::i#3 @@ -2175,8 +2059,6 @@ plots::@return: scope:[plots] from plots::@3 to:@return @2: scope:[] from @1 (byte) plots_cnt#12 ← phi( @1/(byte) plots_cnt#0 ) - (byte[]) plots_y#12 ← phi( @1/(byte[]) plots_y#0 ) - (byte[]) plots_x#12 ← phi( @1/(byte[]) plots_x#0 ) (byte*) RASTER#9 ← phi( @1/(byte*) RASTER#10 ) (byte*) D018#3 ← phi( @1/(byte*) D018#4 ) (byte*) SCREEN#7 ← phi( @1/(byte*) SCREEN#8 ) @@ -2306,8 +2188,6 @@ init_screen::@return: scope:[init_screen] from init_screen::@2 to:@return @5: scope:[] from @2 (byte) plots_cnt#11 ← phi( @2/(byte) plots_cnt#12 ) - (byte[]) plots_y#11 ← phi( @2/(byte[]) plots_y#12 ) - (byte[]) plots_x#11 ← phi( @2/(byte[]) plots_x#12 ) (byte*) RASTER#8 ← phi( @2/(byte*) RASTER#9 ) (byte*) D018#2 ← phi( @2/(byte*) D018#3 ) (byte*) SCREEN#4 ← phi( @2/(byte*) SCREEN#7 ) @@ -2330,11 +2210,7 @@ Not aliassing across scopes: D011#1 D011#2 Not aliassing across scopes: SCREEN#1 SCREEN#4 Not aliassing across scopes: D018#1 D018#2 Not aliassing across scopes: RASTER#6 RASTER#8 -Not aliassing across scopes: plots_x#10 plots_x#11 -Not aliassing across scopes: plots_y#10 plots_y#11 Not aliassing across scopes: plots_cnt#10 plots_cnt#11 -Not aliassing across scopes: plots_x#2 plots_x#4 -Not aliassing across scopes: plots_y#2 plots_y#4 Not aliassing across scopes: plots_cnt#3 plots_cnt#4 Not aliassing across scopes: plot::x#1 plot::x#0 Not aliassing across scopes: plot::y#1 plot::y#0 @@ -2344,13 +2220,9 @@ Not aliassing across scopes: init_screen::c#0 SCREEN#2 Not aliassing identity: SCREEN#3 SCREEN#3 Alias (byte*) RASTER#3 = (byte*) RASTER#4 (byte*) RASTER#6 Alias (byte*) BGCOL#1 = (byte*) BGCOL#9 (byte*) BGCOL#7 -Alias (byte[]) plots_x#10 = (byte[]) plots_x#8 (byte[]) plots_x#7 -Alias (byte[]) plots_y#10 = (byte[]) plots_y#8 (byte[]) plots_y#7 Alias (byte) plots_cnt#10 = (byte) plots_cnt#8 (byte) plots_cnt#7 Alias (byte*) RASTER#1 = (byte*) RASTER#2 (byte*) RASTER#5 (byte*) RASTER#7 Alias (byte*) BGCOL#2 = (byte*) BGCOL#6 (byte*) BGCOL#3 (byte*) BGCOL#5 -Alias (byte[]) plots_x#4 = (byte[]) plots_x#6 (byte[]) plots_x#9 (byte[]) plots_x#5 -Alias (byte[]) plots_y#4 = (byte[]) plots_y#6 (byte[]) plots_y#9 (byte[]) plots_y#5 Alias (byte) plots_cnt#4 = (byte) plots_cnt#6 (byte) plots_cnt#9 (byte) plots_cnt#5 Alias (byte*) BGCOL#0 = (byte*) BGCOL#10 (byte*) BGCOL#8 (byte*) BGCOL#4 Alias (byte*) FGCOL#0 = (byte*) FGCOL#4 (byte*) FGCOL#3 (byte*) FGCOL#2 @@ -2363,10 +2235,6 @@ Alias (byte*) D018#0 = (byte*) D018#4 (byte*) D018#3 (byte*) D018#2 Alias (byte*) RASTER#0 = (byte*) RASTER#10 (byte*) RASTER#9 (byte*) RASTER#8 Alias (byte) plots::i#2 = (byte) plots::i#3 Alias (byte) plots_cnt#1 = (byte) plots_cnt#2 -Alias (byte[]) plots_x#1 = (byte[]) plots_x#3 -Alias (byte[]) plots_y#1 = (byte[]) plots_y#3 -Alias (byte[]) plots_x#0 = (byte[]) plots_x#12 (byte[]) plots_x#11 -Alias (byte[]) plots_y#0 = (byte[]) plots_y#12 (byte[]) plots_y#11 Alias (byte) plots_cnt#0 = (byte) plots_cnt#12 (byte) plots_cnt#11 Alias (byte*) plot::plotter#0 = (byte*~) plot::$4 Alias (byte) init_plot_tables::bits#1 = (byte~) init_plot_tables::$2 @@ -2391,8 +2259,6 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @5 (byte) plots_cnt#10 ← phi( @5/(byte) plots_cnt#0 ) - (byte[]) plots_y#10 ← phi( @5/(byte[]) plots_y#0 ) - (byte[]) plots_x#10 ← phi( @5/(byte[]) plots_x#0 ) (byte*) RASTER#3 ← phi( @5/(byte*) RASTER#0 ) (byte*) D018#1 ← phi( @5/(byte*) D018#0 ) (byte*) SCREEN#1 ← phi( @5/(byte*) SCREEN#0 ) @@ -2426,8 +2292,6 @@ main::@1: scope:[main] from main::@7 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 main::@6 (byte) plots_cnt#4 ← phi( main::@1/(byte) plots_cnt#4 main::@2/(byte) plots_cnt#4 main::@6/(byte) plots_cnt#10 ) - (byte[]) plots_y#4 ← phi( main::@1/(byte[]) plots_y#4 main::@2/(byte[]) plots_y#4 main::@6/(byte[]) plots_y#10 ) - (byte[]) plots_x#4 ← phi( main::@1/(byte[]) plots_x#4 main::@2/(byte[]) plots_x#4 main::@6/(byte[]) plots_x#10 ) (byte*) BGCOL#2 ← phi( main::@1/(byte*) BGCOL#2 main::@2/(byte*) BGCOL#2 main::@6/(byte*) BGCOL#1 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#1 main::@2/(byte*) RASTER#1 main::@6/(byte*) RASTER#3 ) (boolean~) main::$11 ← *((byte*) RASTER#1) != (byte/word/signed word) 255 @@ -2451,17 +2315,13 @@ main::@return: scope:[main] from main::@7 to:@2 plots: scope:[plots] from main::@3 (byte) plots_cnt#3 ← phi( main::@3/(byte) plots_cnt#4 ) - (byte[]) plots_y#2 ← phi( main::@3/(byte[]) plots_y#4 ) - (byte[]) plots_x#2 ← phi( main::@3/(byte[]) plots_x#4 ) (byte) plots::i#0 ← (byte/signed byte/word/signed word) 0 to:plots::@1 plots::@1: scope:[plots] from plots plots::@3 (byte) plots_cnt#1 ← phi( plots/(byte) plots_cnt#3 plots::@3/(byte) plots_cnt#1 ) - (byte[]) plots_y#1 ← phi( plots/(byte[]) plots_y#2 plots::@3/(byte[]) plots_y#1 ) (byte) plots::i#2 ← phi( plots/(byte) plots::i#0 plots::@3/(byte) plots::i#1 ) - (byte[]) plots_x#1 ← phi( plots/(byte[]) plots_x#2 plots::@3/(byte[]) plots_x#1 ) - (byte) plot::x#0 ← *((byte[]) plots_x#1 + (byte) plots::i#2) - (byte) plot::y#0 ← *((byte[]) plots_y#1 + (byte) plots::i#2) + (byte) plot::x#0 ← *((byte[]) plots_x#0 + (byte) plots::i#2) + (byte) plot::y#0 ← *((byte[]) plots_y#0 + (byte) plots::i#2) call plot param-assignment to:plots::@3 plots::@3: scope:[plots] from plots::@1 @@ -2598,16 +2458,10 @@ Not aliassing across scopes: D011#1 D011#0 Not aliassing across scopes: SCREEN#1 SCREEN#0 Not aliassing across scopes: D018#1 D018#0 Not aliassing across scopes: RASTER#3 RASTER#0 -Not aliassing across scopes: plots_x#10 plots_x#0 -Not aliassing across scopes: plots_y#10 plots_y#0 Not aliassing across scopes: plots_cnt#10 plots_cnt#0 Not aliassing identity: RASTER#1 RASTER#1 Not aliassing identity: BGCOL#2 BGCOL#2 -Not aliassing identity: plots_x#4 plots_x#4 -Not aliassing identity: plots_y#4 plots_y#4 Not aliassing identity: plots_cnt#4 plots_cnt#4 -Not aliassing across scopes: plots_x#2 plots_x#4 -Not aliassing across scopes: plots_y#2 plots_y#4 Not aliassing across scopes: plots_cnt#3 plots_cnt#4 Not aliassing across scopes: plot::x#1 plot::x#0 Not aliassing across scopes: plot::y#1 plot::y#0 @@ -2633,8 +2487,6 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @5 (byte) plots_cnt#10 ← phi( @5/(byte) plots_cnt#0 ) - (byte[]) plots_y#10 ← phi( @5/(byte[]) plots_y#0 ) - (byte[]) plots_x#10 ← phi( @5/(byte[]) plots_x#0 ) (byte*) RASTER#3 ← phi( @5/(byte*) RASTER#0 ) (byte*) D018#1 ← phi( @5/(byte*) D018#0 ) (byte*) SCREEN#1 ← phi( @5/(byte*) SCREEN#0 ) @@ -2668,8 +2520,6 @@ main::@1: scope:[main] from main::@7 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 main::@6 (byte) plots_cnt#4 ← phi( main::@1/(byte) plots_cnt#4 main::@2/(byte) plots_cnt#4 main::@6/(byte) plots_cnt#10 ) - (byte[]) plots_y#4 ← phi( main::@1/(byte[]) plots_y#4 main::@2/(byte[]) plots_y#4 main::@6/(byte[]) plots_y#10 ) - (byte[]) plots_x#4 ← phi( main::@1/(byte[]) plots_x#4 main::@2/(byte[]) plots_x#4 main::@6/(byte[]) plots_x#10 ) (byte*) BGCOL#2 ← phi( main::@1/(byte*) BGCOL#2 main::@2/(byte*) BGCOL#2 main::@6/(byte*) BGCOL#1 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#1 main::@2/(byte*) RASTER#1 main::@6/(byte*) RASTER#3 ) (boolean~) main::$11 ← *((byte*) RASTER#1) != (byte/word/signed word) 255 @@ -2693,17 +2543,13 @@ main::@return: scope:[main] from main::@7 to:@2 plots: scope:[plots] from main::@3 (byte) plots_cnt#3 ← phi( main::@3/(byte) plots_cnt#4 ) - (byte[]) plots_y#2 ← phi( main::@3/(byte[]) plots_y#4 ) - (byte[]) plots_x#2 ← phi( main::@3/(byte[]) plots_x#4 ) (byte) plots::i#0 ← (byte/signed byte/word/signed word) 0 to:plots::@1 plots::@1: scope:[plots] from plots plots::@3 (byte) plots_cnt#1 ← phi( plots/(byte) plots_cnt#3 plots::@3/(byte) plots_cnt#1 ) - (byte[]) plots_y#1 ← phi( plots/(byte[]) plots_y#2 plots::@3/(byte[]) plots_y#1 ) (byte) plots::i#2 ← phi( plots/(byte) plots::i#0 plots::@3/(byte) plots::i#1 ) - (byte[]) plots_x#1 ← phi( plots/(byte[]) plots_x#2 plots::@3/(byte[]) plots_x#1 ) - (byte) plot::x#0 ← *((byte[]) plots_x#1 + (byte) plots::i#2) - (byte) plot::y#0 ← *((byte[]) plots_y#1 + (byte) plots::i#2) + (byte) plot::x#0 ← *((byte[]) plots_x#0 + (byte) plots::i#2) + (byte) plot::y#0 ← *((byte[]) plots_y#0 + (byte) plots::i#2) call plot param-assignment to:plots::@3 plots::@3: scope:[plots] from plots::@1 @@ -2838,16 +2684,10 @@ Not aliassing across scopes: D011#1 D011#0 Not aliassing across scopes: SCREEN#1 SCREEN#0 Not aliassing across scopes: D018#1 D018#0 Not aliassing across scopes: RASTER#3 RASTER#0 -Not aliassing across scopes: plots_x#10 plots_x#0 -Not aliassing across scopes: plots_y#10 plots_y#0 Not aliassing across scopes: plots_cnt#10 plots_cnt#0 Not aliassing identity: RASTER#1 RASTER#1 Not aliassing identity: BGCOL#2 BGCOL#2 -Not aliassing identity: plots_x#4 plots_x#4 -Not aliassing identity: plots_y#4 plots_y#4 Not aliassing identity: plots_cnt#4 plots_cnt#4 -Not aliassing across scopes: plots_x#2 plots_x#4 -Not aliassing across scopes: plots_y#2 plots_y#4 Not aliassing across scopes: plots_cnt#3 plots_cnt#4 Not aliassing across scopes: plot::x#1 plot::x#0 Not aliassing across scopes: plot::y#1 plot::y#0 @@ -2859,14 +2699,8 @@ Self Phi Eliminated (byte*) RASTER#1 Self Phi Eliminated (byte*) RASTER#1 Self Phi Eliminated (byte*) BGCOL#2 Self Phi Eliminated (byte*) BGCOL#2 -Self Phi Eliminated (byte[]) plots_x#4 -Self Phi Eliminated (byte[]) plots_x#4 -Self Phi Eliminated (byte[]) plots_y#4 -Self Phi Eliminated (byte[]) plots_y#4 Self Phi Eliminated (byte) plots_cnt#4 Self Phi Eliminated (byte) plots_cnt#4 -Self Phi Eliminated (byte[]) plots_x#1 -Self Phi Eliminated (byte[]) plots_y#1 Self Phi Eliminated (byte) plots_cnt#1 Self Phi Eliminated (byte*) SCREEN#2 Self Phi Eliminated (byte*) SCREEN#3 @@ -2886,8 +2720,6 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @5 (byte) plots_cnt#10 ← phi( @5/(byte) plots_cnt#0 ) - (byte[]) plots_y#10 ← phi( @5/(byte[]) plots_y#0 ) - (byte[]) plots_x#10 ← phi( @5/(byte[]) plots_x#0 ) (byte*) RASTER#3 ← phi( @5/(byte*) RASTER#0 ) (byte*) D018#1 ← phi( @5/(byte*) D018#0 ) (byte*) SCREEN#1 ← phi( @5/(byte*) SCREEN#0 ) @@ -2921,8 +2753,6 @@ main::@1: scope:[main] from main::@7 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 main::@6 (byte) plots_cnt#4 ← phi( main::@6/(byte) plots_cnt#10 ) - (byte[]) plots_y#4 ← phi( main::@6/(byte[]) plots_y#10 ) - (byte[]) plots_x#4 ← phi( main::@6/(byte[]) plots_x#10 ) (byte*) BGCOL#2 ← phi( main::@6/(byte*) BGCOL#1 ) (byte*) RASTER#1 ← phi( main::@6/(byte*) RASTER#3 ) (boolean~) main::$11 ← *((byte*) RASTER#1) != (byte/word/signed word) 255 @@ -2946,17 +2776,13 @@ main::@return: scope:[main] from main::@7 to:@2 plots: scope:[plots] from main::@3 (byte) plots_cnt#3 ← phi( main::@3/(byte) plots_cnt#4 ) - (byte[]) plots_y#2 ← phi( main::@3/(byte[]) plots_y#4 ) - (byte[]) plots_x#2 ← phi( main::@3/(byte[]) plots_x#4 ) (byte) plots::i#0 ← (byte/signed byte/word/signed word) 0 to:plots::@1 plots::@1: scope:[plots] from plots plots::@3 (byte) plots_cnt#1 ← phi( plots/(byte) plots_cnt#3 ) - (byte[]) plots_y#1 ← phi( plots/(byte[]) plots_y#2 ) (byte) plots::i#2 ← phi( plots/(byte) plots::i#0 plots::@3/(byte) plots::i#1 ) - (byte[]) plots_x#1 ← phi( plots/(byte[]) plots_x#2 ) - (byte) plot::x#0 ← *((byte[]) plots_x#1 + (byte) plots::i#2) - (byte) plot::y#0 ← *((byte[]) plots_y#1 + (byte) plots::i#2) + (byte) plot::x#0 ← *((byte[]) plots_x#0 + (byte) plots::i#2) + (byte) plot::y#0 ← *((byte[]) plots_y#0 + (byte) plots::i#2) call plot param-assignment to:plots::@3 plots::@3: scope:[plots] from plots::@1 @@ -3091,19 +2917,11 @@ Redundant Phi (byte*) D011#1 (byte*) D011#0 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 Redundant Phi (byte*) D018#1 (byte*) D018#0 Redundant Phi (byte*) RASTER#3 (byte*) RASTER#0 -Redundant Phi (byte[]) plots_x#10 (byte[]) plots_x#0 -Redundant Phi (byte[]) plots_y#10 (byte[]) plots_y#0 Redundant Phi (byte) plots_cnt#10 (byte) plots_cnt#0 Redundant Phi (byte*) RASTER#1 (byte*) RASTER#3 Redundant Phi (byte*) BGCOL#2 (byte*) BGCOL#1 -Redundant Phi (byte[]) plots_x#4 (byte[]) plots_x#10 -Redundant Phi (byte[]) plots_y#4 (byte[]) plots_y#10 Redundant Phi (byte) plots_cnt#4 (byte) plots_cnt#10 -Redundant Phi (byte[]) plots_x#2 (byte[]) plots_x#4 -Redundant Phi (byte[]) plots_y#2 (byte[]) plots_y#4 Redundant Phi (byte) plots_cnt#3 (byte) plots_cnt#4 -Redundant Phi (byte[]) plots_x#1 (byte[]) plots_x#2 -Redundant Phi (byte[]) plots_y#1 (byte[]) plots_y#2 Redundant Phi (byte) plots_cnt#1 (byte) plots_cnt#3 Redundant Phi (byte) plot::x#1 (byte) plot::x#0 Redundant Phi (byte) plot::y#1 (byte) plot::y#0 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/bresenham.log b/src/main/java/dk/camelot64/kickc/test/ref/bresenham.log index a109ebecc..f352f1776 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/bresenham.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/bresenham.log @@ -290,7 +290,6 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte) STAR#2 ← phi( @1/(byte) STAR#4 ) - (byte[1000]) SCREEN#1 ← phi( @1/(byte[1000]) SCREEN#2 ) (byte) main::x0#0 ← (byte/signed byte/word/signed word) 4 (byte) main::y0#0 ← (byte/signed byte/word/signed word) 4 (byte) main::x1#0 ← (byte/signed byte/word/signed word) 39 @@ -304,7 +303,7 @@ main: scope:[main] from @1 (byte~) main::$2 ← (byte) main::yd#0 / (byte/signed byte/word/signed word) 2 (byte) main::e#0 ← (byte~) main::$2 (byte~) main::$3 ← (byte) main::y#0 * (byte/signed byte/word/signed word) 40 - (byte*~) main::$4 ← (byte[1000]) SCREEN#1 + (byte~) main::$3 + (byte*~) main::$4 ← (byte[1000]) SCREEN#0 + (byte~) main::$3 (byte*~) main::$5 ← (byte*~) main::$4 + (byte) main::x#0 (byte*) main::cursor#0 ← (byte*~) main::$5 to:main::@1 @@ -362,7 +361,6 @@ main::@return: scope:[main] from main::@2 to:@return @1: scope:[] from @begin (byte) STAR#4 ← phi( @begin/(byte) STAR#0 ) - (byte[1000]) SCREEN#2 ← phi( @begin/(byte[1000]) SCREEN#0 ) call main param-assignment to:@2 @2: scope:[] from @1 @@ -376,7 +374,6 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN to:@1 main: scope:[main] from @1 (byte) STAR#2 ← phi( @1/(byte) STAR#4 ) - (byte[1000]) SCREEN#1 ← phi( @1/(byte[1000]) SCREEN#2 ) (byte) main::x0#0 ← (byte/signed byte/word/signed word) 4 (byte) main::y0#0 ← (byte/signed byte/word/signed word) 4 (byte) main::x1#0 ← (byte/signed byte/word/signed word) 39 @@ -390,7 +387,7 @@ main: scope:[main] from @1 (byte~) main::$2 ← (byte) main::yd#0 / (byte/signed byte/word/signed word) 2 (byte) main::e#0 ← (byte~) main::$2 (byte~) main::$3 ← (byte) main::y#0 * (byte/signed byte/word/signed word) 40 - (byte*~) main::$4 ← (byte[1000]) SCREEN#1 + (byte~) main::$3 + (byte*~) main::$4 ← (byte[1000]) SCREEN#0 + (byte~) main::$3 (byte*~) main::$5 ← (byte*~) main::$4 + (byte) main::x#0 (byte*) main::cursor#0 ← (byte*~) main::$5 to:main::@1 @@ -448,7 +445,6 @@ main::@return: scope:[main] from main::@2 to:@return @1: scope:[] from @begin (byte) STAR#4 ← phi( @begin/(byte) STAR#0 ) - (byte[1000]) SCREEN#2 ← phi( @begin/(byte[1000]) SCREEN#0 ) call main param-assignment to:@2 @2: scope:[] from @1 @@ -462,8 +458,6 @@ INITIAL SSA SYMBOL TABLE (label) @end (byte[1000]) SCREEN (byte[1000]) SCREEN#0 -(byte[1000]) SCREEN#1 -(byte[1000]) SCREEN#2 (byte) STAR (byte) STAR#0 (byte) STAR#1 @@ -549,7 +543,6 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @1 (byte) STAR#2 ← phi( @1/(byte) STAR#4 ) - (byte[1000]) SCREEN#1 ← phi( @1/(byte[1000]) SCREEN#2 ) (byte) main::x0#0 ← (byte/signed byte/word/signed word) 4 (byte) main::y0#0 ← (byte/signed byte/word/signed word) 4 (byte) main::x1#0 ← (byte/signed byte/word/signed word) 39 @@ -563,7 +556,7 @@ main: scope:[main] from @1 (byte~) main::$2 ← (byte) main::yd#0 / (byte/signed byte/word/signed word) 2 (byte) main::e#0 ← (byte~) main::$2 (byte~) main::$3 ← (byte) main::y#0 * (byte/signed byte/word/signed word) 40 - (byte*~) main::$4 ← (byte[1000]) SCREEN#1 + (byte~) main::$3 + (byte*~) main::$4 ← (byte[1000]) SCREEN#0 + (byte~) main::$3 (byte*~) main::$5 ← (byte*~) main::$4 + (byte) main::x#0 (byte*) main::cursor#0 ← (byte*~) main::$5 to:main::@1 @@ -621,7 +614,6 @@ main::@return: scope:[main] from main::@2 to:@return @1: scope:[] from @begin (byte) STAR#4 ← phi( @begin/(byte) STAR#0 ) - (byte[1000]) SCREEN#2 ← phi( @begin/(byte[1000]) SCREEN#0 ) call main param-assignment to:@end @end: scope:[] from @1 @@ -635,7 +627,6 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @1 (byte) STAR#2 ← phi( @1/(byte) STAR#4 ) - (byte[1000]) SCREEN#1 ← phi( @1/(byte[1000]) SCREEN#2 ) (byte) main::x0#0 ← (byte/signed byte/word/signed word) 4 (byte) main::y0#0 ← (byte/signed byte/word/signed word) 4 (byte) main::x1#0 ← (byte/signed byte/word/signed word) 39 @@ -649,7 +640,7 @@ main: scope:[main] from @1 (byte~) main::$2 ← (byte) main::yd#0 / (byte/signed byte/word/signed word) 2 (byte) main::e#0 ← (byte~) main::$2 (byte~) main::$3 ← (byte) main::y#0 * (byte/signed byte/word/signed word) 40 - (byte*~) main::$4 ← (byte[1000]) SCREEN#1 + (byte~) main::$3 + (byte*~) main::$4 ← (byte[1000]) SCREEN#0 + (byte~) main::$3 (byte*~) main::$5 ← (byte*~) main::$4 + (byte) main::x#0 (byte*) main::cursor#0 ← (byte*~) main::$5 to:main::@1 @@ -706,12 +697,10 @@ main::@return: scope:[main] from main::@2 to:@return @1: scope:[] from @begin (byte) STAR#4 ← phi( @begin/(byte) STAR#0 ) - (byte[1000]) SCREEN#2 ← phi( @begin/(byte[1000]) SCREEN#0 ) call main param-assignment to:@end @end: scope:[] from @1 -Not aliassing across scopes: SCREEN#1 SCREEN#2 Not aliassing across scopes: STAR#2 STAR#4 Alias (byte) main::xd#0 = (byte/signed byte/word/signed word~) main::$0 Alias (byte) main::yd#0 = (byte/signed byte/word/signed word~) main::$1 @@ -730,7 +719,6 @@ Alias (byte) main::yd#1 = (byte) main::yd#3 Alias (byte) main::y#1 = (byte/word~) main::$11 Alias (byte*) main::cursor#2 = (byte*~) main::$12 Alias (byte) main::e#2 = (byte/signed byte/word/signed word~) main::$13 -Alias (byte[1000]) SCREEN#0 = (byte[1000]) SCREEN#2 Alias (byte) STAR#0 = (byte) STAR#4 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH @@ -740,7 +728,6 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @1 (byte) STAR#2 ← phi( @1/(byte) STAR#0 ) - (byte[1000]) SCREEN#1 ← phi( @1/(byte[1000]) SCREEN#0 ) (byte) main::x#0 ← (byte/signed byte/word/signed word) 4 (byte) main::y#0 ← (byte/signed byte/word/signed word) 4 (byte) main::x1#0 ← (byte/signed byte/word/signed word) 39 @@ -749,7 +736,7 @@ main: scope:[main] from @1 (byte) main::yd#0 ← (byte) main::y1#0 - (byte) main::y#0 (byte) main::e#0 ← (byte) main::yd#0 / (byte/signed byte/word/signed word) 2 (byte~) main::$3 ← (byte) main::y#0 * (byte/signed byte/word/signed word) 40 - (byte*~) main::$4 ← (byte[1000]) SCREEN#1 + (byte~) main::$3 + (byte*~) main::$4 ← (byte[1000]) SCREEN#0 + (byte~) main::$3 (byte*) main::cursor#0 ← (byte*~) main::$4 + (byte) main::x#0 to:main::@1 main::@1: scope:[main] from main main::@2 @@ -794,7 +781,6 @@ main::@return: scope:[main] from main::@2 to:@end @end: scope:[] from @1 -Not aliassing across scopes: SCREEN#1 SCREEN#0 Not aliassing across scopes: STAR#2 STAR#0 Alias (byte) main::x1#1 = (byte) main::x1#2 Alias (byte) main::x#1 = (byte) main::x#3 @@ -809,7 +795,6 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @1 (byte) STAR#2 ← phi( @1/(byte) STAR#0 ) - (byte[1000]) SCREEN#1 ← phi( @1/(byte[1000]) SCREEN#0 ) (byte) main::x#0 ← (byte/signed byte/word/signed word) 4 (byte) main::y#0 ← (byte/signed byte/word/signed word) 4 (byte) main::x1#0 ← (byte/signed byte/word/signed word) 39 @@ -818,7 +803,7 @@ main: scope:[main] from @1 (byte) main::yd#0 ← (byte) main::y1#0 - (byte) main::y#0 (byte) main::e#0 ← (byte) main::yd#0 / (byte/signed byte/word/signed word) 2 (byte~) main::$3 ← (byte) main::y#0 * (byte/signed byte/word/signed word) 40 - (byte*~) main::$4 ← (byte[1000]) SCREEN#1 + (byte~) main::$3 + (byte*~) main::$4 ← (byte[1000]) SCREEN#0 + (byte~) main::$3 (byte*) main::cursor#0 ← (byte*~) main::$4 + (byte) main::x#0 to:main::@1 main::@1: scope:[main] from main main::@2 @@ -858,7 +843,6 @@ main::@return: scope:[main] from main::@2 to:@end @end: scope:[] from @1 -Not aliassing across scopes: SCREEN#1 SCREEN#0 Not aliassing across scopes: STAR#2 STAR#0 Self Phi Eliminated (byte) STAR#1 Self Phi Eliminated (byte) main::yd#1 @@ -872,7 +856,6 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @1 (byte) STAR#2 ← phi( @1/(byte) STAR#0 ) - (byte[1000]) SCREEN#1 ← phi( @1/(byte[1000]) SCREEN#0 ) (byte) main::x#0 ← (byte/signed byte/word/signed word) 4 (byte) main::y#0 ← (byte/signed byte/word/signed word) 4 (byte) main::x1#0 ← (byte/signed byte/word/signed word) 39 @@ -881,7 +864,7 @@ main: scope:[main] from @1 (byte) main::yd#0 ← (byte) main::y1#0 - (byte) main::y#0 (byte) main::e#0 ← (byte) main::yd#0 / (byte/signed byte/word/signed word) 2 (byte~) main::$3 ← (byte) main::y#0 * (byte/signed byte/word/signed word) 40 - (byte*~) main::$4 ← (byte[1000]) SCREEN#1 + (byte~) main::$3 + (byte*~) main::$4 ← (byte[1000]) SCREEN#0 + (byte~) main::$3 (byte*) main::cursor#0 ← (byte*~) main::$4 + (byte) main::x#0 to:main::@1 main::@1: scope:[main] from main main::@2 @@ -921,7 +904,6 @@ main::@return: scope:[main] from main::@2 to:@end @end: scope:[] from @1 -Redundant Phi (byte[1000]) SCREEN#1 (byte[1000]) SCREEN#0 Redundant Phi (byte) STAR#2 (byte) STAR#0 Redundant Phi (byte) STAR#1 (byte) STAR#2 Redundant Phi (byte) main::yd#1 (byte) main::yd#0 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/bresenhamarr.log b/src/main/java/dk/camelot64/kickc/test/ref/bresenhamarr.log index e3b246fd3..e2742f9c5 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/bresenhamarr.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/bresenhamarr.log @@ -308,9 +308,8 @@ main::@1: scope:[main] from main main::@2 (byte) main::e#3 ← phi( main/(byte) main::e#0 main::@2/(byte) main::e#5 ) (byte) main::x#2 ← phi( main/(byte) main::x#0 main::@2/(byte) main::x#3 ) (word) main::idx#3 ← phi( main/(word) main::idx#0 main::@2/(word) main::idx#5 ) - (byte[1000]) main::screen#1 ← phi( main/(byte[1000]) main::screen#0 main::@2/(byte[1000]) main::screen#2 ) (byte) main::STAR#1 ← phi( main/(byte) main::STAR#0 main::@2/(byte) main::STAR#2 ) - *((byte[1000]) main::screen#1 + (word) main::idx#3) ← (byte) main::STAR#1 + *((byte[1000]) main::screen#0 + (word) main::idx#3) ← (byte) main::STAR#1 (byte/word~) main::$5 ← (byte) main::x#2 + (byte/signed byte/word/signed word) 1 (byte) main::x#1 ← (byte/word~) main::$5 (word~) main::$6 ← (word) main::idx#3 + (byte/signed byte/word/signed word) 1 @@ -327,7 +326,6 @@ main::@2: scope:[main] from main::@1 main::@3 (byte) main::yd#2 ← phi( main::@1/(byte) main::yd#1 main::@3/(byte) main::yd#3 ) (byte) main::e#5 ← phi( main::@1/(byte) main::e#1 main::@3/(byte) main::e#2 ) (word) main::idx#5 ← phi( main::@1/(word) main::idx#1 main::@3/(word) main::idx#2 ) - (byte[1000]) main::screen#2 ← phi( main::@1/(byte[1000]) main::screen#1 main::@3/(byte[1000]) main::screen#3 ) (byte) main::STAR#2 ← phi( main::@1/(byte) main::STAR#1 main::@3/(byte) main::STAR#3 ) (byte) main::x#3 ← phi( main::@1/(byte) main::x#1 main::@3/(byte) main::x#4 ) (byte) main::x1#1 ← phi( main::@1/(byte) main::x1#2 main::@3/(byte) main::x1#3 ) @@ -337,7 +335,6 @@ main::@2: scope:[main] from main::@1 main::@3 to:main::@return main::@3: scope:[main] from main::@1 (byte) main::yd#3 ← phi( main::@1/(byte) main::yd#1 ) - (byte[1000]) main::screen#3 ← phi( main::@1/(byte[1000]) main::screen#1 ) (byte) main::STAR#3 ← phi( main::@1/(byte) main::STAR#1 ) (byte) main::x#4 ← phi( main::@1/(byte) main::x#1 ) (byte) main::x1#3 ← phi( main::@1/(byte) main::x1#2 ) @@ -392,9 +389,8 @@ main::@1: scope:[main] from main main::@2 (byte) main::e#3 ← phi( main/(byte) main::e#0 main::@2/(byte) main::e#5 ) (byte) main::x#2 ← phi( main/(byte) main::x#0 main::@2/(byte) main::x#3 ) (word) main::idx#3 ← phi( main/(word) main::idx#0 main::@2/(word) main::idx#5 ) - (byte[1000]) main::screen#1 ← phi( main/(byte[1000]) main::screen#0 main::@2/(byte[1000]) main::screen#2 ) (byte) main::STAR#1 ← phi( main/(byte) main::STAR#0 main::@2/(byte) main::STAR#2 ) - *((byte[1000]) main::screen#1 + (word) main::idx#3) ← (byte) main::STAR#1 + *((byte[1000]) main::screen#0 + (word) main::idx#3) ← (byte) main::STAR#1 (byte/word~) main::$5 ← (byte) main::x#2 + (byte/signed byte/word/signed word) 1 (byte) main::x#1 ← (byte/word~) main::$5 (word~) main::$6 ← (word) main::idx#3 + (byte/signed byte/word/signed word) 1 @@ -411,7 +407,6 @@ main::@2: scope:[main] from main::@1 main::@3 (byte) main::yd#2 ← phi( main::@1/(byte) main::yd#1 main::@3/(byte) main::yd#3 ) (byte) main::e#5 ← phi( main::@1/(byte) main::e#1 main::@3/(byte) main::e#2 ) (word) main::idx#5 ← phi( main::@1/(word) main::idx#1 main::@3/(word) main::idx#2 ) - (byte[1000]) main::screen#2 ← phi( main::@1/(byte[1000]) main::screen#1 main::@3/(byte[1000]) main::screen#3 ) (byte) main::STAR#2 ← phi( main::@1/(byte) main::STAR#1 main::@3/(byte) main::STAR#3 ) (byte) main::x#3 ← phi( main::@1/(byte) main::x#1 main::@3/(byte) main::x#4 ) (byte) main::x1#1 ← phi( main::@1/(byte) main::x1#2 main::@3/(byte) main::x1#3 ) @@ -421,7 +416,6 @@ main::@2: scope:[main] from main::@1 main::@3 to:main::@return main::@3: scope:[main] from main::@1 (byte) main::yd#3 ← phi( main::@1/(byte) main::yd#1 ) - (byte[1000]) main::screen#3 ← phi( main::@1/(byte[1000]) main::screen#1 ) (byte) main::STAR#3 ← phi( main::@1/(byte) main::STAR#1 ) (byte) main::x#4 ← phi( main::@1/(byte) main::x#1 ) (byte) main::x1#3 ← phi( main::@1/(byte) main::x1#2 ) @@ -492,9 +486,6 @@ INITIAL SSA SYMBOL TABLE (word) main::idx#5 (byte[1000]) main::screen (byte[1000]) main::screen#0 -(byte[1000]) main::screen#1 -(byte[1000]) main::screen#2 -(byte[1000]) main::screen#3 (byte) main::x (byte) main::x#0 (byte) main::x#1 @@ -561,9 +552,8 @@ main::@1: scope:[main] from main main::@2 (byte) main::e#3 ← phi( main/(byte) main::e#0 main::@2/(byte) main::e#5 ) (byte) main::x#2 ← phi( main/(byte) main::x#0 main::@2/(byte) main::x#3 ) (word) main::idx#3 ← phi( main/(word) main::idx#0 main::@2/(word) main::idx#5 ) - (byte[1000]) main::screen#1 ← phi( main/(byte[1000]) main::screen#0 main::@2/(byte[1000]) main::screen#2 ) (byte) main::STAR#1 ← phi( main/(byte) main::STAR#0 main::@2/(byte) main::STAR#2 ) - *((byte[1000]) main::screen#1 + (word) main::idx#3) ← (byte) main::STAR#1 + *((byte[1000]) main::screen#0 + (word) main::idx#3) ← (byte) main::STAR#1 (byte/word~) main::$5 ← (byte) main::x#2 + (byte/signed byte/word/signed word) 1 (byte) main::x#1 ← (byte/word~) main::$5 (word~) main::$6 ← (word) main::idx#3 + (byte/signed byte/word/signed word) 1 @@ -580,7 +570,6 @@ main::@2: scope:[main] from main::@1 main::@3 (byte) main::yd#2 ← phi( main::@1/(byte) main::yd#1 main::@3/(byte) main::yd#3 ) (byte) main::e#5 ← phi( main::@1/(byte) main::e#1 main::@3/(byte) main::e#2 ) (word) main::idx#5 ← phi( main::@1/(word) main::idx#1 main::@3/(word) main::idx#2 ) - (byte[1000]) main::screen#2 ← phi( main::@1/(byte[1000]) main::screen#1 main::@3/(byte[1000]) main::screen#3 ) (byte) main::STAR#2 ← phi( main::@1/(byte) main::STAR#1 main::@3/(byte) main::STAR#3 ) (byte) main::x#3 ← phi( main::@1/(byte) main::x#1 main::@3/(byte) main::x#4 ) (byte) main::x1#1 ← phi( main::@1/(byte) main::x1#2 main::@3/(byte) main::x1#3 ) @@ -590,7 +579,6 @@ main::@2: scope:[main] from main::@1 main::@3 to:main::@return main::@3: scope:[main] from main::@1 (byte) main::yd#3 ← phi( main::@1/(byte) main::yd#1 ) - (byte[1000]) main::screen#3 ← phi( main::@1/(byte[1000]) main::screen#1 ) (byte) main::STAR#3 ← phi( main::@1/(byte) main::STAR#1 ) (byte) main::x#4 ← phi( main::@1/(byte) main::x#1 ) (byte) main::x1#3 ← phi( main::@1/(byte) main::x1#2 ) @@ -645,9 +633,8 @@ main::@1: scope:[main] from main main::@2 (byte) main::e#3 ← phi( main/(byte) main::e#0 main::@2/(byte) main::e#5 ) (byte) main::x#2 ← phi( main/(byte) main::x#0 main::@2/(byte) main::x#3 ) (word) main::idx#3 ← phi( main/(word) main::idx#0 main::@2/(word) main::idx#5 ) - (byte[1000]) main::screen#1 ← phi( main/(byte[1000]) main::screen#0 main::@2/(byte[1000]) main::screen#2 ) (byte) main::STAR#1 ← phi( main/(byte) main::STAR#0 main::@2/(byte) main::STAR#2 ) - *((byte[1000]) main::screen#1 + (word) main::idx#3) ← (byte) main::STAR#1 + *((byte[1000]) main::screen#0 + (word) main::idx#3) ← (byte) main::STAR#1 (byte/word~) main::$5 ← (byte) main::x#2 + (byte/signed byte/word/signed word) 1 (byte) main::x#1 ← (byte/word~) main::$5 (word~) main::$6 ← (word) main::idx#3 + (byte/signed byte/word/signed word) 1 @@ -663,7 +650,6 @@ main::@2: scope:[main] from main::@1 main::@3 (byte) main::yd#2 ← phi( main::@1/(byte) main::yd#1 main::@3/(byte) main::yd#3 ) (byte) main::e#5 ← phi( main::@1/(byte) main::e#1 main::@3/(byte) main::e#2 ) (word) main::idx#5 ← phi( main::@1/(word) main::idx#1 main::@3/(word) main::idx#2 ) - (byte[1000]) main::screen#2 ← phi( main::@1/(byte[1000]) main::screen#1 main::@3/(byte[1000]) main::screen#3 ) (byte) main::STAR#2 ← phi( main::@1/(byte) main::STAR#1 main::@3/(byte) main::STAR#3 ) (byte) main::x#3 ← phi( main::@1/(byte) main::x#1 main::@3/(byte) main::x#4 ) (byte) main::x1#1 ← phi( main::@1/(byte) main::x1#2 main::@3/(byte) main::x1#3 ) @@ -673,7 +659,6 @@ main::@2: scope:[main] from main::@1 main::@3 to:main::@return main::@3: scope:[main] from main::@1 (byte) main::yd#3 ← phi( main::@1/(byte) main::yd#1 ) - (byte[1000]) main::screen#3 ← phi( main::@1/(byte[1000]) main::screen#1 ) (byte) main::STAR#3 ← phi( main::@1/(byte) main::STAR#1 ) (byte) main::x#4 ← phi( main::@1/(byte) main::x#1 ) (byte) main::x1#3 ← phi( main::@1/(byte) main::x1#2 ) @@ -709,7 +694,6 @@ Alias (byte) main::y#2 = (byte) main::y#3 Alias (byte) main::xd#1 = (byte) main::xd#2 Alias (byte) main::x1#2 = (byte) main::x1#3 Alias (byte) main::STAR#1 = (byte) main::STAR#3 -Alias (byte[1000]) main::screen#1 = (byte[1000]) main::screen#3 Alias (byte) main::yd#1 = (byte) main::yd#3 Alias (byte) main::y#1 = (byte/word~) main::$10 Alias (word) main::idx#2 = (word~) main::$11 @@ -739,9 +723,8 @@ main::@1: scope:[main] from main main::@2 (byte) main::e#3 ← phi( main/(byte) main::e#0 main::@2/(byte) main::e#5 ) (byte) main::x#2 ← phi( main/(byte) main::x#0 main::@2/(byte) main::x#3 ) (word) main::idx#3 ← phi( main/(word) main::idx#0 main::@2/(word) main::idx#5 ) - (byte[1000]) main::screen#1 ← phi( main/(byte[1000]) main::screen#0 main::@2/(byte[1000]) main::screen#2 ) (byte) main::STAR#1 ← phi( main/(byte) main::STAR#0 main::@2/(byte) main::STAR#2 ) - *((byte[1000]) main::screen#1 + (word) main::idx#3) ← (byte) main::STAR#1 + *((byte[1000]) main::screen#0 + (word) main::idx#3) ← (byte) main::STAR#1 (byte) main::x#1 ← (byte) main::x#2 + (byte/signed byte/word/signed word) 1 (word) main::idx#1 ← (word) main::idx#3 + (byte/signed byte/word/signed word) 1 (byte) main::e#1 ← (byte) main::e#3 + (byte) main::yd#1 @@ -754,7 +737,6 @@ main::@2: scope:[main] from main::@1 main::@3 (byte) main::yd#2 ← phi( main::@1/(byte) main::yd#1 main::@3/(byte) main::yd#1 ) (byte) main::e#5 ← phi( main::@1/(byte) main::e#1 main::@3/(byte) main::e#2 ) (word) main::idx#5 ← phi( main::@1/(word) main::idx#1 main::@3/(word) main::idx#2 ) - (byte[1000]) main::screen#2 ← phi( main::@1/(byte[1000]) main::screen#1 main::@3/(byte[1000]) main::screen#1 ) (byte) main::STAR#2 ← phi( main::@1/(byte) main::STAR#1 main::@3/(byte) main::STAR#1 ) (byte) main::x#3 ← phi( main::@1/(byte) main::x#1 main::@3/(byte) main::x#1 ) (byte) main::x1#1 ← phi( main::@1/(byte) main::x1#2 main::@3/(byte) main::x1#2 ) @@ -778,7 +760,6 @@ main::@return: scope:[main] from main::@2 Alias (byte) main::x1#1 = (byte) main::x1#2 Alias (byte) main::x#1 = (byte) main::x#3 Alias (byte) main::STAR#1 = (byte) main::STAR#2 -Alias (byte[1000]) main::screen#1 = (byte[1000]) main::screen#2 Alias (byte) main::yd#1 = (byte) main::yd#2 Alias (byte) main::xd#1 = (byte) main::xd#3 Succesful SSA optimization Pass2AliasElimination @@ -806,9 +787,8 @@ main::@1: scope:[main] from main main::@2 (byte) main::e#3 ← phi( main/(byte) main::e#0 main::@2/(byte) main::e#5 ) (byte) main::x#2 ← phi( main/(byte) main::x#0 main::@2/(byte) main::x#1 ) (word) main::idx#3 ← phi( main/(word) main::idx#0 main::@2/(word) main::idx#5 ) - (byte[1000]) main::screen#1 ← phi( main/(byte[1000]) main::screen#0 main::@2/(byte[1000]) main::screen#1 ) (byte) main::STAR#1 ← phi( main/(byte) main::STAR#0 main::@2/(byte) main::STAR#1 ) - *((byte[1000]) main::screen#1 + (word) main::idx#3) ← (byte) main::STAR#1 + *((byte[1000]) main::screen#0 + (word) main::idx#3) ← (byte) main::STAR#1 (byte) main::x#1 ← (byte) main::x#2 + (byte/signed byte/word/signed word) 1 (word) main::idx#1 ← (word) main::idx#3 + (byte/signed byte/word/signed word) 1 (byte) main::e#1 ← (byte) main::e#3 + (byte) main::yd#1 @@ -837,7 +817,6 @@ main::@return: scope:[main] from main::@2 @end: scope:[] from @1 Self Phi Eliminated (byte) main::STAR#1 -Self Phi Eliminated (byte[1000]) main::screen#1 Self Phi Eliminated (byte) main::yd#1 Self Phi Eliminated (byte) main::xd#1 Self Phi Eliminated (byte) main::x1#1 @@ -866,9 +845,8 @@ main::@1: scope:[main] from main main::@2 (byte) main::e#3 ← phi( main/(byte) main::e#0 main::@2/(byte) main::e#5 ) (byte) main::x#2 ← phi( main/(byte) main::x#0 main::@2/(byte) main::x#1 ) (word) main::idx#3 ← phi( main/(word) main::idx#0 main::@2/(word) main::idx#5 ) - (byte[1000]) main::screen#1 ← phi( main/(byte[1000]) main::screen#0 ) (byte) main::STAR#1 ← phi( main/(byte) main::STAR#0 ) - *((byte[1000]) main::screen#1 + (word) main::idx#3) ← (byte) main::STAR#1 + *((byte[1000]) main::screen#0 + (word) main::idx#3) ← (byte) main::STAR#1 (byte) main::x#1 ← (byte) main::x#2 + (byte/signed byte/word/signed word) 1 (word) main::idx#1 ← (word) main::idx#3 + (byte/signed byte/word/signed word) 1 (byte) main::e#1 ← (byte) main::e#3 + (byte) main::yd#1 @@ -897,7 +875,6 @@ main::@return: scope:[main] from main::@2 @end: scope:[] from @1 Redundant Phi (byte) main::STAR#1 (byte) main::STAR#0 -Redundant Phi (byte[1000]) main::screen#1 (byte[1000]) main::screen#0 Redundant Phi (byte) main::yd#1 (byte) main::yd#0 Redundant Phi (byte) main::xd#1 (byte) main::xd#0 Redundant Phi (byte) main::x1#1 (byte) main::x1#0 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/constant-string-concat.log b/src/main/java/dk/camelot64/kickc/test/ref/constant-string-concat.log index 1cbbd63e4..612727066 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/constant-string-concat.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/constant-string-concat.log @@ -191,8 +191,7 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@1 (byte*) main::SCREEN#1 ← phi( main/(byte*) main::SCREEN#0 main::@1/(byte*) main::SCREEN#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) - (byte[]) main::s5#1 ← phi( main/(byte[]) main::s5#0 main::@1/(byte[]) main::s5#1 ) - *((byte*) main::SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::s5#1 + (byte) main::i#2) + *((byte*) main::SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::s5#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$6 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8 if((boolean~) main::$6) goto main::@1 @@ -229,8 +228,7 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@1 (byte*) main::SCREEN#1 ← phi( main/(byte*) main::SCREEN#0 main::@1/(byte*) main::SCREEN#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) - (byte[]) main::s5#1 ← phi( main/(byte[]) main::s5#0 main::@1/(byte[]) main::s5#1 ) - *((byte*) main::SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::s5#1 + (byte) main::i#2) + *((byte*) main::SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::s5#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$6 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8 if((boolean~) main::$6) goto main::@1 @@ -283,7 +281,6 @@ INITIAL SSA SYMBOL TABLE (byte[]) main::s4#0 (byte[]) main::s5 (byte[]) main::s5#0 -(byte[]) main::s5#1 Culled Empty Block (label) @2 Succesful SSA optimization Pass2CullEmptyBlocks @@ -309,8 +306,7 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@1 (byte*) main::SCREEN#1 ← phi( main/(byte*) main::SCREEN#0 main::@1/(byte*) main::SCREEN#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) - (byte[]) main::s5#1 ← phi( main/(byte[]) main::s5#0 main::@1/(byte[]) main::s5#1 ) - *((byte*) main::SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::s5#1 + (byte) main::i#2) + *((byte*) main::SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::s5#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$6 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8 if((boolean~) main::$6) goto main::@1 @@ -346,8 +342,7 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@1 (byte*) main::SCREEN#1 ← phi( main/(byte*) main::SCREEN#0 main::@1/(byte*) main::SCREEN#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) - (byte[]) main::s5#1 ← phi( main/(byte[]) main::s5#0 main::@1/(byte[]) main::s5#1 ) - *((byte*) main::SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::s5#1 + (byte) main::i#2) + *((byte*) main::SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::s5#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$6 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8 if((boolean~) main::$6) goto main::@1 @@ -360,7 +355,6 @@ main::@return: scope:[main] from main::@1 to:@end @end: scope:[] from @1 -Self Phi Eliminated (byte[]) main::s5#1 Self Phi Eliminated (byte*) main::SCREEN#1 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @@ -380,8 +374,7 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@1 (byte*) main::SCREEN#1 ← phi( main/(byte*) main::SCREEN#0 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) - (byte[]) main::s5#1 ← phi( main/(byte[]) main::s5#0 ) - *((byte*) main::SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::s5#1 + (byte) main::i#2) + *((byte*) main::SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::s5#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$6 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8 if((boolean~) main::$6) goto main::@1 @@ -394,7 +387,6 @@ main::@return: scope:[main] from main::@1 to:@end @end: scope:[] from @1 -Redundant Phi (byte[]) main::s5#1 (byte[]) main::s5#0 Redundant Phi (byte*) main::SCREEN#1 (byte*) main::SCREEN#0 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH diff --git a/src/main/java/dk/camelot64/kickc/test/ref/fibmem.log b/src/main/java/dk/camelot64/kickc/test/ref/fibmem.log index 66b162b35..bb0bc7f22 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/fibmem.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/fibmem.log @@ -125,25 +125,22 @@ main::@return: scope:[main] from main::@1 to:@end @end: scope:[] from @2 -Completing Phi functions... Completing Phi functions... CONTROL FLOW GRAPH SSA @begin: scope:[] from (byte[15]) fibs#0 ← ((byte*)) (word/signed word) 4352 to:@1 main: scope:[main] from @1 - (byte[15]) fibs#1 ← phi( @1/(byte[15]) fibs#3 ) - *((byte[15]) fibs#1 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 - *((byte[15]) fibs#1 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 1 + *((byte[15]) fibs#0 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 + *((byte[15]) fibs#0 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@1 - (byte[15]) fibs#2 ← phi( main/(byte[15]) fibs#1 main::@1/(byte[15]) fibs#2 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) (byte/word~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2 (byte/word~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - (byte/word~) main::$2 ← *((byte[15]) fibs#2 + (byte) main::i#2) + *((byte[15]) fibs#2 + (byte/word~) main::$1) - *((byte[15]) fibs#2 + (byte/word~) main::$0) ← (byte/word~) main::$2 + (byte/word~) main::$2 ← *((byte[15]) fibs#0 + (byte) main::i#2) + *((byte[15]) fibs#0 + (byte/word~) main::$1) + *((byte[15]) fibs#0 + (byte/word~) main::$0) ← (byte/word~) main::$2 (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15 if((boolean~) main::$3) goto main::@1 @@ -152,7 +149,6 @@ main::@return: scope:[main] from main::@1 return to:@return @1: scope:[] from @begin - (byte[15]) fibs#3 ← phi( @begin/(byte[15]) fibs#0 ) call main param-assignment to:@2 @2: scope:[] from @1 @@ -164,18 +160,16 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN (byte[15]) fibs#0 ← ((byte*)) (word/signed word) 4352 to:@1 main: scope:[main] from @1 - (byte[15]) fibs#1 ← phi( @1/(byte[15]) fibs#3 ) - *((byte[15]) fibs#1 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 - *((byte[15]) fibs#1 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 1 + *((byte[15]) fibs#0 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 + *((byte[15]) fibs#0 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@1 - (byte[15]) fibs#2 ← phi( main/(byte[15]) fibs#1 main::@1/(byte[15]) fibs#2 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) (byte/word~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2 (byte/word~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - (byte/word~) main::$2 ← *((byte[15]) fibs#2 + (byte) main::i#2) + *((byte[15]) fibs#2 + (byte/word~) main::$1) - *((byte[15]) fibs#2 + (byte/word~) main::$0) ← (byte/word~) main::$2 + (byte/word~) main::$2 ← *((byte[15]) fibs#0 + (byte) main::i#2) + *((byte[15]) fibs#0 + (byte/word~) main::$1) + *((byte[15]) fibs#0 + (byte/word~) main::$0) ← (byte/word~) main::$2 (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15 if((boolean~) main::$3) goto main::@1 @@ -184,7 +178,6 @@ main::@return: scope:[main] from main::@1 return to:@return @1: scope:[] from @begin - (byte[15]) fibs#3 ← phi( @begin/(byte[15]) fibs#0 ) call main param-assignment to:@2 @2: scope:[] from @1 @@ -198,9 +191,6 @@ INITIAL SSA SYMBOL TABLE (label) @end (byte[15]) fibs (byte[15]) fibs#0 -(byte[15]) fibs#1 -(byte[15]) fibs#2 -(byte[15]) fibs#3 (void()) main() (byte/word~) main::$0 (byte/word~) main::$1 @@ -216,103 +206,6 @@ INITIAL SSA SYMBOL TABLE Culled Empty Block (label) @2 Succesful SSA optimization Pass2CullEmptyBlocks CONTROL FLOW GRAPH -@begin: scope:[] from - (byte[15]) fibs#0 ← ((byte*)) (word/signed word) 4352 - to:@1 -main: scope:[main] from @1 - (byte[15]) fibs#1 ← phi( @1/(byte[15]) fibs#3 ) - *((byte[15]) fibs#1 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 - *((byte[15]) fibs#1 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 1 - (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 - to:main::@1 -main::@1: scope:[main] from main main::@1 - (byte[15]) fibs#2 ← phi( main/(byte[15]) fibs#1 main::@1/(byte[15]) fibs#2 ) - (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) - (byte/word~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2 - (byte/word~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - (byte/word~) main::$2 ← *((byte[15]) fibs#2 + (byte) main::i#2) + *((byte[15]) fibs#2 + (byte/word~) main::$1) - *((byte[15]) fibs#2 + (byte/word~) main::$0) ← (byte/word~) main::$2 - (byte) main::i#1 ← ++ (byte) main::i#2 - (boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15 - if((boolean~) main::$3) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return -@1: scope:[] from @begin - (byte[15]) fibs#3 ← phi( @begin/(byte[15]) fibs#0 ) - call main param-assignment - to:@end -@end: scope:[] from @1 - -Not aliassing across scopes: fibs#1 fibs#3 -Alias (byte[15]) fibs#0 = (byte[15]) fibs#3 -Succesful SSA optimization Pass2AliasElimination -CONTROL FLOW GRAPH -@begin: scope:[] from - (byte[15]) fibs#0 ← ((byte*)) (word/signed word) 4352 - to:@1 -main: scope:[main] from @1 - (byte[15]) fibs#1 ← phi( @1/(byte[15]) fibs#0 ) - *((byte[15]) fibs#1 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 - *((byte[15]) fibs#1 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 1 - (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 - to:main::@1 -main::@1: scope:[main] from main main::@1 - (byte[15]) fibs#2 ← phi( main/(byte[15]) fibs#1 main::@1/(byte[15]) fibs#2 ) - (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) - (byte/word~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2 - (byte/word~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - (byte/word~) main::$2 ← *((byte[15]) fibs#2 + (byte) main::i#2) + *((byte[15]) fibs#2 + (byte/word~) main::$1) - *((byte[15]) fibs#2 + (byte/word~) main::$0) ← (byte/word~) main::$2 - (byte) main::i#1 ← ++ (byte) main::i#2 - (boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15 - if((boolean~) main::$3) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return -@1: scope:[] from @begin - call main param-assignment - to:@end -@end: scope:[] from @1 - -Not aliassing across scopes: fibs#1 fibs#0 -Self Phi Eliminated (byte[15]) fibs#2 -Succesful SSA optimization Pass2SelfPhiElimination -CONTROL FLOW GRAPH -@begin: scope:[] from - (byte[15]) fibs#0 ← ((byte*)) (word/signed word) 4352 - to:@1 -main: scope:[main] from @1 - (byte[15]) fibs#1 ← phi( @1/(byte[15]) fibs#0 ) - *((byte[15]) fibs#1 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 - *((byte[15]) fibs#1 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 1 - (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 - to:main::@1 -main::@1: scope:[main] from main main::@1 - (byte[15]) fibs#2 ← phi( main/(byte[15]) fibs#1 ) - (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) - (byte/word~) main::$0 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 2 - (byte/word~) main::$1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - (byte/word~) main::$2 ← *((byte[15]) fibs#2 + (byte) main::i#2) + *((byte[15]) fibs#2 + (byte/word~) main::$1) - *((byte[15]) fibs#2 + (byte/word~) main::$0) ← (byte/word~) main::$2 - (byte) main::i#1 ← ++ (byte) main::i#2 - (boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 15 - if((boolean~) main::$3) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return -@1: scope:[] from @begin - call main param-assignment - to:@end -@end: scope:[] from @1 - -Redundant Phi (byte[15]) fibs#1 (byte[15]) fibs#0 -Redundant Phi (byte[15]) fibs#2 (byte[15]) fibs#1 -Succesful SSA optimization Pass2RedundantPhiElimination -CONTROL FLOW GRAPH @begin: scope:[] from (byte[15]) fibs#0 ← ((byte*)) (word/signed word) 4352 to:@1 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.log b/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.log index 61db40853..ad04c621d 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/flipper-rex2.log @@ -581,12 +581,6 @@ plot::@return: scope:[plot] from plot::@3 to:@end @end: scope:[] from @5 -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... @@ -600,54 +594,33 @@ CONTROL FLOW GRAPH SSA (byte*) RASTER#0 ← ((byte*)) (word) 53266 to:@4 main: scope:[main] from @4 - (byte[256]) buffer2#15 ← phi( @4/(byte[256]) buffer2#17 ) - (byte[1000]) SCREEN#11 ← phi( @4/(byte[1000]) SCREEN#12 ) (byte*) RASTER#8 ← phi( @4/(byte*) RASTER#10 ) - (byte[256]) buffer1#9 ← phi( @4/(byte[256]) buffer1#14 ) call prepare param-assignment to:main::@9 main::@9: scope:[main] from main - (byte[256]) buffer2#14 ← phi( main/(byte[256]) buffer2#15 ) - (byte[256]) buffer1#23 ← phi( main/(byte[256]) buffer1#9 ) - (byte[1000]) SCREEN#10 ← phi( main/(byte[1000]) SCREEN#11 ) (byte*) RASTER#6 ← phi( main/(byte*) RASTER#8 ) to:main::@1 main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) buffer2#11 ← phi( main::@11/(byte[256]) buffer2#13 main::@9/(byte[256]) buffer2#14 ) - (byte[256]) buffer1#20 ← phi( main::@11/(byte[256]) buffer1#22 main::@9/(byte[256]) buffer1#23 ) - (byte[1000]) SCREEN#7 ← phi( main::@11/(byte[1000]) SCREEN#9 main::@9/(byte[1000]) SCREEN#10 ) (byte*) RASTER#3 ← phi( main::@11/(byte*) RASTER#5 main::@9/(byte*) RASTER#6 ) (byte) main::c#0 ← (byte/signed byte/word/signed word) 25 to:main::@3 main::@2: scope:[main] from main::@6 - (byte[256]) buffer2#12 ← phi( main::@6/(byte[256]) buffer2#8 ) - (byte[256]) buffer1#21 ← phi( main::@6/(byte[256]) buffer1#17 ) - (byte[1000]) SCREEN#8 ← phi( main::@6/(byte[1000]) SCREEN#4 ) (byte) main::c#5 ← phi( main::@6/(byte) main::c#1 ) (byte*) RASTER#4 ← phi( main::@6/(byte*) RASTER#7 ) to:main::@3 main::@3: scope:[main] from main::@1 main::@2 main::@3 - (byte[256]) buffer2#10 ← phi( main::@1/(byte[256]) buffer2#11 main::@2/(byte[256]) buffer2#12 main::@3/(byte[256]) buffer2#10 ) - (byte[256]) buffer1#19 ← phi( main::@1/(byte[256]) buffer1#20 main::@2/(byte[256]) buffer1#21 main::@3/(byte[256]) buffer1#19 ) - (byte[1000]) SCREEN#6 ← phi( main::@1/(byte[1000]) SCREEN#7 main::@2/(byte[1000]) SCREEN#8 main::@3/(byte[1000]) SCREEN#6 ) (byte) main::c#4 ← phi( main::@1/(byte) main::c#0 main::@2/(byte) main::c#5 main::@3/(byte) main::c#4 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#3 main::@2/(byte*) RASTER#4 main::@3/(byte*) RASTER#1 ) (boolean~) main::$1 ← *((byte*) RASTER#1) != (byte/word/signed word) 254 if((boolean~) main::$1) goto main::@3 to:main::@4 main::@4: scope:[main] from main::@3 main::@4 - (byte[256]) buffer2#9 ← phi( main::@3/(byte[256]) buffer2#10 main::@4/(byte[256]) buffer2#9 ) - (byte[256]) buffer1#18 ← phi( main::@3/(byte[256]) buffer1#19 main::@4/(byte[256]) buffer1#18 ) - (byte[1000]) SCREEN#5 ← phi( main::@3/(byte[1000]) SCREEN#6 main::@4/(byte[1000]) SCREEN#5 ) (byte) main::c#3 ← phi( main::@3/(byte) main::c#4 main::@4/(byte) main::c#3 ) (byte*) RASTER#2 ← phi( main::@3/(byte*) RASTER#1 main::@4/(byte*) RASTER#2 ) (boolean~) main::$2 ← *((byte*) RASTER#2) != (byte/word/signed word) 255 if((boolean~) main::$2) goto main::@4 to:main::@6 main::@6: scope:[main] from main::@4 - (byte[256]) buffer2#8 ← phi( main::@4/(byte[256]) buffer2#9 ) - (byte[256]) buffer1#17 ← phi( main::@4/(byte[256]) buffer1#18 ) - (byte[1000]) SCREEN#4 ← phi( main::@4/(byte[1000]) SCREEN#5 ) (byte*) RASTER#7 ← phi( main::@4/(byte*) RASTER#2 ) (byte) main::c#2 ← phi( main::@4/(byte) main::c#3 ) (byte) main::c#1 ← -- (byte) main::c#2 @@ -656,22 +629,13 @@ main::@6: scope:[main] from main::@4 to:main::@7 main::@7: scope:[main] from main::@6 (byte*) RASTER#11 ← phi( main::@6/(byte*) RASTER#7 ) - (byte[256]) buffer2#7 ← phi( main::@6/(byte[256]) buffer2#8 ) - (byte[256]) buffer1#15 ← phi( main::@6/(byte[256]) buffer1#17 ) - (byte[1000]) SCREEN#3 ← phi( main::@6/(byte[1000]) SCREEN#4 ) call flip param-assignment to:main::@10 main::@10: scope:[main] from main::@7 - (byte[256]) buffer2#16 ← phi( main::@7/(byte[256]) buffer2#7 ) - (byte[256]) buffer1#16 ← phi( main::@7/(byte[256]) buffer1#15 ) (byte*) RASTER#9 ← phi( main::@7/(byte*) RASTER#11 ) - (byte[1000]) SCREEN#2 ← phi( main::@7/(byte[1000]) SCREEN#3 ) call plot param-assignment to:main::@11 main::@11: scope:[main] from main::@10 - (byte[256]) buffer2#13 ← phi( main::@10/(byte[256]) buffer2#16 ) - (byte[256]) buffer1#22 ← phi( main::@10/(byte[256]) buffer1#16 ) - (byte[1000]) SCREEN#9 ← phi( main::@10/(byte[1000]) SCREEN#2 ) (byte*) RASTER#5 ← phi( main::@10/(byte*) RASTER#9 ) if(true) goto main::@1 to:main::@return @@ -679,13 +643,11 @@ main::@return: scope:[main] from main::@11 return to:@return prepare: scope:[prepare] from main - (byte[256]) buffer1#5 ← phi( main/(byte[256]) buffer1#9 ) (byte) prepare::i#0 ← (byte/signed byte/word/signed word) 0 to:prepare::@1 prepare::@1: scope:[prepare] from prepare prepare::@1 - (byte[256]) buffer1#1 ← phi( prepare/(byte[256]) buffer1#5 prepare::@1/(byte[256]) buffer1#1 ) (byte) prepare::i#2 ← phi( prepare/(byte) prepare::i#0 prepare::@1/(byte) prepare::i#1 ) - *((byte[256]) buffer1#1 + (byte) prepare::i#2) ← (byte) prepare::i#2 + *((byte[256]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 (byte) prepare::i#1 ← ++ (byte) prepare::i#2 (boolean~) prepare::$0 ← (byte) prepare::i#1 != (byte/signed byte/word/signed word) 0 if((boolean~) prepare::$0) goto prepare::@1 @@ -694,8 +656,6 @@ prepare::@return: scope:[prepare] from prepare::@1 return to:@return flip: scope:[flip] from main::@7 - (byte[256]) buffer2#5 ← phi( main::@7/(byte[256]) buffer2#7 ) - (byte[256]) buffer1#10 ← phi( main::@7/(byte[256]) buffer1#15 ) (byte) flip::srcIdx#0 ← (byte/signed byte/word/signed word) 0 (byte) flip::dstIdx#0 ← (byte/signed byte/word/signed word) 15 (byte) flip::r#0 ← (byte/signed byte/word/signed word) 16 @@ -703,19 +663,15 @@ flip: scope:[flip] from main::@7 flip::@1: scope:[flip] from flip flip::@4 (byte) flip::r#4 ← phi( flip/(byte) flip::r#0 flip::@4/(byte) flip::r#1 ) (byte) flip::dstIdx#5 ← phi( flip/(byte) flip::dstIdx#0 flip::@4/(byte) flip::dstIdx#2 ) - (byte[256]) buffer2#3 ← phi( flip/(byte[256]) buffer2#5 flip::@4/(byte[256]) buffer2#6 ) (byte) flip::srcIdx#3 ← phi( flip/(byte) flip::srcIdx#0 flip::@4/(byte) flip::srcIdx#4 ) - (byte[256]) buffer1#6 ← phi( flip/(byte[256]) buffer1#10 flip::@4/(byte[256]) buffer1#11 ) (byte) flip::c#0 ← (byte/signed byte/word/signed word) 16 to:flip::@2 flip::@2: scope:[flip] from flip::@1 flip::@2 (byte) flip::r#3 ← phi( flip::@1/(byte) flip::r#4 flip::@2/(byte) flip::r#3 ) (byte) flip::c#2 ← phi( flip::@1/(byte) flip::c#0 flip::@2/(byte) flip::c#1 ) (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) - (byte[256]) buffer2#1 ← phi( flip::@1/(byte[256]) buffer2#3 flip::@2/(byte[256]) buffer2#1 ) (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) - (byte[256]) buffer1#2 ← phi( flip::@1/(byte[256]) buffer1#6 flip::@2/(byte[256]) buffer1#2 ) - *((byte[256]) buffer2#1 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#2 + (byte) flip::srcIdx#2) + *((byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#0 + (byte) flip::srcIdx#2) (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 (byte/word~) flip::$0 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 (byte) flip::dstIdx#1 ← (byte/word~) flip::$0 @@ -724,9 +680,7 @@ flip::@2: scope:[flip] from flip::@1 flip::@2 if((boolean~) flip::$1) goto flip::@2 to:flip::@4 flip::@4: scope:[flip] from flip::@2 - (byte[256]) buffer2#6 ← phi( flip::@2/(byte[256]) buffer2#1 ) (byte) flip::srcIdx#4 ← phi( flip::@2/(byte) flip::srcIdx#1 ) - (byte[256]) buffer1#11 ← phi( flip::@2/(byte[256]) buffer1#2 ) (byte) flip::r#2 ← phi( flip::@2/(byte) flip::r#3 ) (byte) flip::dstIdx#4 ← phi( flip::@2/(byte) flip::dstIdx#1 ) (byte) flip::dstIdx#2 ← -- (byte) flip::dstIdx#4 @@ -735,15 +689,11 @@ flip::@4: scope:[flip] from flip::@2 if((boolean~) flip::$2) goto flip::@1 to:flip::@5 flip::@5: scope:[flip] from flip::@4 - (byte[256]) buffer1#7 ← phi( flip::@4/(byte[256]) buffer1#11 ) - (byte[256]) buffer2#4 ← phi( flip::@4/(byte[256]) buffer2#6 ) (byte) flip::i#0 ← (byte/signed byte/word/signed word) 0 to:flip::@3 flip::@3: scope:[flip] from flip::@3 flip::@5 - (byte[256]) buffer1#3 ← phi( flip::@3/(byte[256]) buffer1#3 flip::@5/(byte[256]) buffer1#7 ) (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@5/(byte) flip::i#0 ) - (byte[256]) buffer2#2 ← phi( flip::@3/(byte[256]) buffer2#2 flip::@5/(byte[256]) buffer2#4 ) - *((byte[256]) buffer1#3 + (byte) flip::i#2) ← *((byte[256]) buffer2#2 + (byte) flip::i#2) + *((byte[256]) buffer1#0 + (byte) flip::i#2) ← *((byte[256]) buffer2#0 + (byte) flip::i#2) (byte) flip::i#1 ← ++ (byte) flip::i#2 (boolean~) flip::$3 ← (byte) flip::i#1 != (byte/signed byte/word/signed word) 0 if((boolean~) flip::$3) goto flip::@3 @@ -752,10 +702,8 @@ flip::@return: scope:[flip] from flip::@3 return to:@return plot: scope:[plot] from main::@10 - (byte[256]) buffer1#12 ← phi( main::@10/(byte[256]) buffer1#16 ) - (byte[1000]) SCREEN#1 ← phi( main::@10/(byte[1000]) SCREEN#2 ) (byte/word/signed word~) plot::$0 ← (byte/signed byte/word/signed word) 5 * (byte/signed byte/word/signed word) 40 - (byte*~) plot::$1 ← (byte[1000]) SCREEN#1 + (byte/word/signed word~) plot::$0 + (byte*~) plot::$1 ← (byte[1000]) SCREEN#0 + (byte/word/signed word~) plot::$0 (byte*~) plot::$2 ← (byte*~) plot::$1 + (byte/signed byte/word/signed word) 12 (byte*) plot::line#0 ← (byte*~) plot::$2 (byte) plot::i#0 ← (byte/signed byte/word/signed word) 0 @@ -765,7 +713,6 @@ plot::@1: scope:[plot] from plot plot::@3 (byte) plot::y#4 ← phi( plot/(byte) plot::y#0 plot::@3/(byte) plot::y#1 ) (byte*) plot::line#4 ← phi( plot/(byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) (byte) plot::i#3 ← phi( plot/(byte) plot::i#0 plot::@3/(byte) plot::i#4 ) - (byte[256]) buffer1#8 ← phi( plot/(byte[256]) buffer1#12 plot::@3/(byte[256]) buffer1#13 ) (byte) plot::x#0 ← (byte/signed byte/word/signed word) 0 to:plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@2 @@ -773,8 +720,7 @@ plot::@2: scope:[plot] from plot::@1 plot::@2 (byte) plot::x#2 ← phi( plot::@1/(byte) plot::x#0 plot::@2/(byte) plot::x#1 ) (byte*) plot::line#2 ← phi( plot::@1/(byte*) plot::line#4 plot::@2/(byte*) plot::line#2 ) (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) - (byte[256]) buffer1#4 ← phi( plot::@1/(byte[256]) buffer1#8 plot::@2/(byte[256]) buffer1#4 ) - *((byte*) plot::line#2 + (byte) plot::x#2) ← *((byte[256]) buffer1#4 + (byte) plot::i#2) + *((byte*) plot::line#2 + (byte) plot::x#2) ← *((byte[256]) buffer1#0 + (byte) plot::i#2) (byte) plot::i#1 ← ++ (byte) plot::i#2 (byte) plot::x#1 ← ++ (byte) plot::x#2 (boolean~) plot::$3 ← (byte) plot::x#1 < (byte/signed byte/word/signed word) 16 @@ -782,7 +728,6 @@ plot::@2: scope:[plot] from plot::@1 plot::@2 to:plot::@3 plot::@3: scope:[plot] from plot::@2 (byte) plot::i#4 ← phi( plot::@2/(byte) plot::i#1 ) - (byte[256]) buffer1#13 ← phi( plot::@2/(byte[256]) buffer1#4 ) (byte) plot::y#2 ← phi( plot::@2/(byte) plot::y#3 ) (byte*) plot::line#3 ← phi( plot::@2/(byte*) plot::line#2 ) (byte*~) plot::$4 ← (byte*) plot::line#3 + (byte/signed byte/word/signed word) 40 @@ -795,10 +740,7 @@ plot::@return: scope:[plot] from plot::@3 return to:@return @4: scope:[] from @begin - (byte[256]) buffer2#17 ← phi( @begin/(byte[256]) buffer2#0 ) - (byte[1000]) SCREEN#12 ← phi( @begin/(byte[1000]) SCREEN#0 ) (byte*) RASTER#10 ← phi( @begin/(byte*) RASTER#0 ) - (byte[256]) buffer1#14 ← phi( @begin/(byte[256]) buffer1#0 ) call main param-assignment to:@5 @5: scope:[] from @4 @@ -813,54 +755,33 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN (byte*) RASTER#0 ← ((byte*)) (word) 53266 to:@4 main: scope:[main] from @4 - (byte[256]) buffer2#15 ← phi( @4/(byte[256]) buffer2#17 ) - (byte[1000]) SCREEN#11 ← phi( @4/(byte[1000]) SCREEN#12 ) (byte*) RASTER#8 ← phi( @4/(byte*) RASTER#10 ) - (byte[256]) buffer1#9 ← phi( @4/(byte[256]) buffer1#14 ) call prepare param-assignment to:main::@9 main::@9: scope:[main] from main - (byte[256]) buffer2#14 ← phi( main/(byte[256]) buffer2#15 ) - (byte[256]) buffer1#23 ← phi( main/(byte[256]) buffer1#9 ) - (byte[1000]) SCREEN#10 ← phi( main/(byte[1000]) SCREEN#11 ) (byte*) RASTER#6 ← phi( main/(byte*) RASTER#8 ) to:main::@1 main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) buffer2#11 ← phi( main::@11/(byte[256]) buffer2#13 main::@9/(byte[256]) buffer2#14 ) - (byte[256]) buffer1#20 ← phi( main::@11/(byte[256]) buffer1#22 main::@9/(byte[256]) buffer1#23 ) - (byte[1000]) SCREEN#7 ← phi( main::@11/(byte[1000]) SCREEN#9 main::@9/(byte[1000]) SCREEN#10 ) (byte*) RASTER#3 ← phi( main::@11/(byte*) RASTER#5 main::@9/(byte*) RASTER#6 ) (byte) main::c#0 ← (byte/signed byte/word/signed word) 25 to:main::@3 main::@2: scope:[main] from main::@6 - (byte[256]) buffer2#12 ← phi( main::@6/(byte[256]) buffer2#8 ) - (byte[256]) buffer1#21 ← phi( main::@6/(byte[256]) buffer1#17 ) - (byte[1000]) SCREEN#8 ← phi( main::@6/(byte[1000]) SCREEN#4 ) (byte) main::c#5 ← phi( main::@6/(byte) main::c#1 ) (byte*) RASTER#4 ← phi( main::@6/(byte*) RASTER#7 ) to:main::@3 main::@3: scope:[main] from main::@1 main::@2 main::@3 - (byte[256]) buffer2#10 ← phi( main::@1/(byte[256]) buffer2#11 main::@2/(byte[256]) buffer2#12 main::@3/(byte[256]) buffer2#10 ) - (byte[256]) buffer1#19 ← phi( main::@1/(byte[256]) buffer1#20 main::@2/(byte[256]) buffer1#21 main::@3/(byte[256]) buffer1#19 ) - (byte[1000]) SCREEN#6 ← phi( main::@1/(byte[1000]) SCREEN#7 main::@2/(byte[1000]) SCREEN#8 main::@3/(byte[1000]) SCREEN#6 ) (byte) main::c#4 ← phi( main::@1/(byte) main::c#0 main::@2/(byte) main::c#5 main::@3/(byte) main::c#4 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#3 main::@2/(byte*) RASTER#4 main::@3/(byte*) RASTER#1 ) (boolean~) main::$1 ← *((byte*) RASTER#1) != (byte/word/signed word) 254 if((boolean~) main::$1) goto main::@3 to:main::@4 main::@4: scope:[main] from main::@3 main::@4 - (byte[256]) buffer2#9 ← phi( main::@3/(byte[256]) buffer2#10 main::@4/(byte[256]) buffer2#9 ) - (byte[256]) buffer1#18 ← phi( main::@3/(byte[256]) buffer1#19 main::@4/(byte[256]) buffer1#18 ) - (byte[1000]) SCREEN#5 ← phi( main::@3/(byte[1000]) SCREEN#6 main::@4/(byte[1000]) SCREEN#5 ) (byte) main::c#3 ← phi( main::@3/(byte) main::c#4 main::@4/(byte) main::c#3 ) (byte*) RASTER#2 ← phi( main::@3/(byte*) RASTER#1 main::@4/(byte*) RASTER#2 ) (boolean~) main::$2 ← *((byte*) RASTER#2) != (byte/word/signed word) 255 if((boolean~) main::$2) goto main::@4 to:main::@6 main::@6: scope:[main] from main::@4 - (byte[256]) buffer2#8 ← phi( main::@4/(byte[256]) buffer2#9 ) - (byte[256]) buffer1#17 ← phi( main::@4/(byte[256]) buffer1#18 ) - (byte[1000]) SCREEN#4 ← phi( main::@4/(byte[1000]) SCREEN#5 ) (byte*) RASTER#7 ← phi( main::@4/(byte*) RASTER#2 ) (byte) main::c#2 ← phi( main::@4/(byte) main::c#3 ) (byte) main::c#1 ← -- (byte) main::c#2 @@ -869,22 +790,13 @@ main::@6: scope:[main] from main::@4 to:main::@7 main::@7: scope:[main] from main::@6 (byte*) RASTER#11 ← phi( main::@6/(byte*) RASTER#7 ) - (byte[256]) buffer2#7 ← phi( main::@6/(byte[256]) buffer2#8 ) - (byte[256]) buffer1#15 ← phi( main::@6/(byte[256]) buffer1#17 ) - (byte[1000]) SCREEN#3 ← phi( main::@6/(byte[1000]) SCREEN#4 ) call flip param-assignment to:main::@10 main::@10: scope:[main] from main::@7 - (byte[256]) buffer2#16 ← phi( main::@7/(byte[256]) buffer2#7 ) - (byte[256]) buffer1#16 ← phi( main::@7/(byte[256]) buffer1#15 ) (byte*) RASTER#9 ← phi( main::@7/(byte*) RASTER#11 ) - (byte[1000]) SCREEN#2 ← phi( main::@7/(byte[1000]) SCREEN#3 ) call plot param-assignment to:main::@11 main::@11: scope:[main] from main::@10 - (byte[256]) buffer2#13 ← phi( main::@10/(byte[256]) buffer2#16 ) - (byte[256]) buffer1#22 ← phi( main::@10/(byte[256]) buffer1#16 ) - (byte[1000]) SCREEN#9 ← phi( main::@10/(byte[1000]) SCREEN#2 ) (byte*) RASTER#5 ← phi( main::@10/(byte*) RASTER#9 ) if(true) goto main::@1 to:main::@return @@ -892,13 +804,11 @@ main::@return: scope:[main] from main::@11 return to:@return prepare: scope:[prepare] from main - (byte[256]) buffer1#5 ← phi( main/(byte[256]) buffer1#9 ) (byte) prepare::i#0 ← (byte/signed byte/word/signed word) 0 to:prepare::@1 prepare::@1: scope:[prepare] from prepare prepare::@1 - (byte[256]) buffer1#1 ← phi( prepare/(byte[256]) buffer1#5 prepare::@1/(byte[256]) buffer1#1 ) (byte) prepare::i#2 ← phi( prepare/(byte) prepare::i#0 prepare::@1/(byte) prepare::i#1 ) - *((byte[256]) buffer1#1 + (byte) prepare::i#2) ← (byte) prepare::i#2 + *((byte[256]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 (byte) prepare::i#1 ← ++ (byte) prepare::i#2 (boolean~) prepare::$0 ← (byte) prepare::i#1 != (byte/signed byte/word/signed word) 0 if((boolean~) prepare::$0) goto prepare::@1 @@ -907,8 +817,6 @@ prepare::@return: scope:[prepare] from prepare::@1 return to:@return flip: scope:[flip] from main::@7 - (byte[256]) buffer2#5 ← phi( main::@7/(byte[256]) buffer2#7 ) - (byte[256]) buffer1#10 ← phi( main::@7/(byte[256]) buffer1#15 ) (byte) flip::srcIdx#0 ← (byte/signed byte/word/signed word) 0 (byte) flip::dstIdx#0 ← (byte/signed byte/word/signed word) 15 (byte) flip::r#0 ← (byte/signed byte/word/signed word) 16 @@ -916,19 +824,15 @@ flip: scope:[flip] from main::@7 flip::@1: scope:[flip] from flip flip::@4 (byte) flip::r#4 ← phi( flip/(byte) flip::r#0 flip::@4/(byte) flip::r#1 ) (byte) flip::dstIdx#5 ← phi( flip/(byte) flip::dstIdx#0 flip::@4/(byte) flip::dstIdx#2 ) - (byte[256]) buffer2#3 ← phi( flip/(byte[256]) buffer2#5 flip::@4/(byte[256]) buffer2#6 ) (byte) flip::srcIdx#3 ← phi( flip/(byte) flip::srcIdx#0 flip::@4/(byte) flip::srcIdx#4 ) - (byte[256]) buffer1#6 ← phi( flip/(byte[256]) buffer1#10 flip::@4/(byte[256]) buffer1#11 ) (byte) flip::c#0 ← (byte/signed byte/word/signed word) 16 to:flip::@2 flip::@2: scope:[flip] from flip::@1 flip::@2 (byte) flip::r#3 ← phi( flip::@1/(byte) flip::r#4 flip::@2/(byte) flip::r#3 ) (byte) flip::c#2 ← phi( flip::@1/(byte) flip::c#0 flip::@2/(byte) flip::c#1 ) (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) - (byte[256]) buffer2#1 ← phi( flip::@1/(byte[256]) buffer2#3 flip::@2/(byte[256]) buffer2#1 ) (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) - (byte[256]) buffer1#2 ← phi( flip::@1/(byte[256]) buffer1#6 flip::@2/(byte[256]) buffer1#2 ) - *((byte[256]) buffer2#1 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#2 + (byte) flip::srcIdx#2) + *((byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#0 + (byte) flip::srcIdx#2) (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 (byte/word~) flip::$0 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 (byte) flip::dstIdx#1 ← (byte/word~) flip::$0 @@ -937,9 +841,7 @@ flip::@2: scope:[flip] from flip::@1 flip::@2 if((boolean~) flip::$1) goto flip::@2 to:flip::@4 flip::@4: scope:[flip] from flip::@2 - (byte[256]) buffer2#6 ← phi( flip::@2/(byte[256]) buffer2#1 ) (byte) flip::srcIdx#4 ← phi( flip::@2/(byte) flip::srcIdx#1 ) - (byte[256]) buffer1#11 ← phi( flip::@2/(byte[256]) buffer1#2 ) (byte) flip::r#2 ← phi( flip::@2/(byte) flip::r#3 ) (byte) flip::dstIdx#4 ← phi( flip::@2/(byte) flip::dstIdx#1 ) (byte) flip::dstIdx#2 ← -- (byte) flip::dstIdx#4 @@ -948,15 +850,11 @@ flip::@4: scope:[flip] from flip::@2 if((boolean~) flip::$2) goto flip::@1 to:flip::@5 flip::@5: scope:[flip] from flip::@4 - (byte[256]) buffer1#7 ← phi( flip::@4/(byte[256]) buffer1#11 ) - (byte[256]) buffer2#4 ← phi( flip::@4/(byte[256]) buffer2#6 ) (byte) flip::i#0 ← (byte/signed byte/word/signed word) 0 to:flip::@3 flip::@3: scope:[flip] from flip::@3 flip::@5 - (byte[256]) buffer1#3 ← phi( flip::@3/(byte[256]) buffer1#3 flip::@5/(byte[256]) buffer1#7 ) (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@5/(byte) flip::i#0 ) - (byte[256]) buffer2#2 ← phi( flip::@3/(byte[256]) buffer2#2 flip::@5/(byte[256]) buffer2#4 ) - *((byte[256]) buffer1#3 + (byte) flip::i#2) ← *((byte[256]) buffer2#2 + (byte) flip::i#2) + *((byte[256]) buffer1#0 + (byte) flip::i#2) ← *((byte[256]) buffer2#0 + (byte) flip::i#2) (byte) flip::i#1 ← ++ (byte) flip::i#2 (boolean~) flip::$3 ← (byte) flip::i#1 != (byte/signed byte/word/signed word) 0 if((boolean~) flip::$3) goto flip::@3 @@ -965,10 +863,8 @@ flip::@return: scope:[flip] from flip::@3 return to:@return plot: scope:[plot] from main::@10 - (byte[256]) buffer1#12 ← phi( main::@10/(byte[256]) buffer1#16 ) - (byte[1000]) SCREEN#1 ← phi( main::@10/(byte[1000]) SCREEN#2 ) (byte/word/signed word~) plot::$0 ← (byte/signed byte/word/signed word) 5 * (byte/signed byte/word/signed word) 40 - (byte*~) plot::$1 ← (byte[1000]) SCREEN#1 + (byte/word/signed word~) plot::$0 + (byte*~) plot::$1 ← (byte[1000]) SCREEN#0 + (byte/word/signed word~) plot::$0 (byte*~) plot::$2 ← (byte*~) plot::$1 + (byte/signed byte/word/signed word) 12 (byte*) plot::line#0 ← (byte*~) plot::$2 (byte) plot::i#0 ← (byte/signed byte/word/signed word) 0 @@ -978,7 +874,6 @@ plot::@1: scope:[plot] from plot plot::@3 (byte) plot::y#4 ← phi( plot/(byte) plot::y#0 plot::@3/(byte) plot::y#1 ) (byte*) plot::line#4 ← phi( plot/(byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) (byte) plot::i#3 ← phi( plot/(byte) plot::i#0 plot::@3/(byte) plot::i#4 ) - (byte[256]) buffer1#8 ← phi( plot/(byte[256]) buffer1#12 plot::@3/(byte[256]) buffer1#13 ) (byte) plot::x#0 ← (byte/signed byte/word/signed word) 0 to:plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@2 @@ -986,8 +881,7 @@ plot::@2: scope:[plot] from plot::@1 plot::@2 (byte) plot::x#2 ← phi( plot::@1/(byte) plot::x#0 plot::@2/(byte) plot::x#1 ) (byte*) plot::line#2 ← phi( plot::@1/(byte*) plot::line#4 plot::@2/(byte*) plot::line#2 ) (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) - (byte[256]) buffer1#4 ← phi( plot::@1/(byte[256]) buffer1#8 plot::@2/(byte[256]) buffer1#4 ) - *((byte*) plot::line#2 + (byte) plot::x#2) ← *((byte[256]) buffer1#4 + (byte) plot::i#2) + *((byte*) plot::line#2 + (byte) plot::x#2) ← *((byte[256]) buffer1#0 + (byte) plot::i#2) (byte) plot::i#1 ← ++ (byte) plot::i#2 (byte) plot::x#1 ← ++ (byte) plot::x#2 (boolean~) plot::$3 ← (byte) plot::x#1 < (byte/signed byte/word/signed word) 16 @@ -995,7 +889,6 @@ plot::@2: scope:[plot] from plot::@1 plot::@2 to:plot::@3 plot::@3: scope:[plot] from plot::@2 (byte) plot::i#4 ← phi( plot::@2/(byte) plot::i#1 ) - (byte[256]) buffer1#13 ← phi( plot::@2/(byte[256]) buffer1#4 ) (byte) plot::y#2 ← phi( plot::@2/(byte) plot::y#3 ) (byte*) plot::line#3 ← phi( plot::@2/(byte*) plot::line#2 ) (byte*~) plot::$4 ← (byte*) plot::line#3 + (byte/signed byte/word/signed word) 40 @@ -1008,10 +901,7 @@ plot::@return: scope:[plot] from plot::@3 return to:@return @4: scope:[] from @begin - (byte[256]) buffer2#17 ← phi( @begin/(byte[256]) buffer2#0 ) - (byte[1000]) SCREEN#12 ← phi( @begin/(byte[1000]) SCREEN#0 ) (byte*) RASTER#10 ← phi( @begin/(byte*) RASTER#0 ) - (byte[256]) buffer1#14 ← phi( @begin/(byte[256]) buffer1#0 ) call main param-assignment to:@5 @5: scope:[] from @4 @@ -1038,62 +928,10 @@ INITIAL SSA SYMBOL TABLE (byte*) RASTER#9 (byte[1000]) SCREEN (byte[1000]) SCREEN#0 -(byte[1000]) SCREEN#1 -(byte[1000]) SCREEN#10 -(byte[1000]) SCREEN#11 -(byte[1000]) SCREEN#12 -(byte[1000]) SCREEN#2 -(byte[1000]) SCREEN#3 -(byte[1000]) SCREEN#4 -(byte[1000]) SCREEN#5 -(byte[1000]) SCREEN#6 -(byte[1000]) SCREEN#7 -(byte[1000]) SCREEN#8 -(byte[1000]) SCREEN#9 (byte[256]) buffer1 (byte[256]) buffer1#0 -(byte[256]) buffer1#1 -(byte[256]) buffer1#10 -(byte[256]) buffer1#11 -(byte[256]) buffer1#12 -(byte[256]) buffer1#13 -(byte[256]) buffer1#14 -(byte[256]) buffer1#15 -(byte[256]) buffer1#16 -(byte[256]) buffer1#17 -(byte[256]) buffer1#18 -(byte[256]) buffer1#19 -(byte[256]) buffer1#2 -(byte[256]) buffer1#20 -(byte[256]) buffer1#21 -(byte[256]) buffer1#22 -(byte[256]) buffer1#23 -(byte[256]) buffer1#3 -(byte[256]) buffer1#4 -(byte[256]) buffer1#5 -(byte[256]) buffer1#6 -(byte[256]) buffer1#7 -(byte[256]) buffer1#8 -(byte[256]) buffer1#9 (byte[256]) buffer2 (byte[256]) buffer2#0 -(byte[256]) buffer2#1 -(byte[256]) buffer2#10 -(byte[256]) buffer2#11 -(byte[256]) buffer2#12 -(byte[256]) buffer2#13 -(byte[256]) buffer2#14 -(byte[256]) buffer2#15 -(byte[256]) buffer2#16 -(byte[256]) buffer2#17 -(byte[256]) buffer2#2 -(byte[256]) buffer2#3 -(byte[256]) buffer2#4 -(byte[256]) buffer2#5 -(byte[256]) buffer2#6 -(byte[256]) buffer2#7 -(byte[256]) buffer2#8 -(byte[256]) buffer2#9 (void()) flip() (byte/word~) flip::$0 (boolean~) flip::$1 @@ -1205,54 +1043,33 @@ CONTROL FLOW GRAPH (byte*) RASTER#0 ← ((byte*)) (word) 53266 to:@4 main: scope:[main] from @4 - (byte[256]) buffer2#15 ← phi( @4/(byte[256]) buffer2#17 ) - (byte[1000]) SCREEN#11 ← phi( @4/(byte[1000]) SCREEN#12 ) (byte*) RASTER#8 ← phi( @4/(byte*) RASTER#10 ) - (byte[256]) buffer1#9 ← phi( @4/(byte[256]) buffer1#14 ) call prepare param-assignment to:main::@9 main::@9: scope:[main] from main - (byte[256]) buffer2#14 ← phi( main/(byte[256]) buffer2#15 ) - (byte[256]) buffer1#23 ← phi( main/(byte[256]) buffer1#9 ) - (byte[1000]) SCREEN#10 ← phi( main/(byte[1000]) SCREEN#11 ) (byte*) RASTER#6 ← phi( main/(byte*) RASTER#8 ) to:main::@1 main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) buffer2#11 ← phi( main::@11/(byte[256]) buffer2#13 main::@9/(byte[256]) buffer2#14 ) - (byte[256]) buffer1#20 ← phi( main::@11/(byte[256]) buffer1#22 main::@9/(byte[256]) buffer1#23 ) - (byte[1000]) SCREEN#7 ← phi( main::@11/(byte[1000]) SCREEN#9 main::@9/(byte[1000]) SCREEN#10 ) (byte*) RASTER#3 ← phi( main::@11/(byte*) RASTER#5 main::@9/(byte*) RASTER#6 ) (byte) main::c#0 ← (byte/signed byte/word/signed word) 25 to:main::@3 main::@2: scope:[main] from main::@6 - (byte[256]) buffer2#12 ← phi( main::@6/(byte[256]) buffer2#8 ) - (byte[256]) buffer1#21 ← phi( main::@6/(byte[256]) buffer1#17 ) - (byte[1000]) SCREEN#8 ← phi( main::@6/(byte[1000]) SCREEN#4 ) (byte) main::c#5 ← phi( main::@6/(byte) main::c#1 ) (byte*) RASTER#4 ← phi( main::@6/(byte*) RASTER#7 ) to:main::@3 main::@3: scope:[main] from main::@1 main::@2 main::@3 - (byte[256]) buffer2#10 ← phi( main::@1/(byte[256]) buffer2#11 main::@2/(byte[256]) buffer2#12 main::@3/(byte[256]) buffer2#10 ) - (byte[256]) buffer1#19 ← phi( main::@1/(byte[256]) buffer1#20 main::@2/(byte[256]) buffer1#21 main::@3/(byte[256]) buffer1#19 ) - (byte[1000]) SCREEN#6 ← phi( main::@1/(byte[1000]) SCREEN#7 main::@2/(byte[1000]) SCREEN#8 main::@3/(byte[1000]) SCREEN#6 ) (byte) main::c#4 ← phi( main::@1/(byte) main::c#0 main::@2/(byte) main::c#5 main::@3/(byte) main::c#4 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#3 main::@2/(byte*) RASTER#4 main::@3/(byte*) RASTER#1 ) (boolean~) main::$1 ← *((byte*) RASTER#1) != (byte/word/signed word) 254 if((boolean~) main::$1) goto main::@3 to:main::@4 main::@4: scope:[main] from main::@3 main::@4 - (byte[256]) buffer2#9 ← phi( main::@3/(byte[256]) buffer2#10 main::@4/(byte[256]) buffer2#9 ) - (byte[256]) buffer1#18 ← phi( main::@3/(byte[256]) buffer1#19 main::@4/(byte[256]) buffer1#18 ) - (byte[1000]) SCREEN#5 ← phi( main::@3/(byte[1000]) SCREEN#6 main::@4/(byte[1000]) SCREEN#5 ) (byte) main::c#3 ← phi( main::@3/(byte) main::c#4 main::@4/(byte) main::c#3 ) (byte*) RASTER#2 ← phi( main::@3/(byte*) RASTER#1 main::@4/(byte*) RASTER#2 ) (boolean~) main::$2 ← *((byte*) RASTER#2) != (byte/word/signed word) 255 if((boolean~) main::$2) goto main::@4 to:main::@6 main::@6: scope:[main] from main::@4 - (byte[256]) buffer2#8 ← phi( main::@4/(byte[256]) buffer2#9 ) - (byte[256]) buffer1#17 ← phi( main::@4/(byte[256]) buffer1#18 ) - (byte[1000]) SCREEN#4 ← phi( main::@4/(byte[1000]) SCREEN#5 ) (byte*) RASTER#7 ← phi( main::@4/(byte*) RASTER#2 ) (byte) main::c#2 ← phi( main::@4/(byte) main::c#3 ) (byte) main::c#1 ← -- (byte) main::c#2 @@ -1261,22 +1078,13 @@ main::@6: scope:[main] from main::@4 to:main::@7 main::@7: scope:[main] from main::@6 (byte*) RASTER#11 ← phi( main::@6/(byte*) RASTER#7 ) - (byte[256]) buffer2#7 ← phi( main::@6/(byte[256]) buffer2#8 ) - (byte[256]) buffer1#15 ← phi( main::@6/(byte[256]) buffer1#17 ) - (byte[1000]) SCREEN#3 ← phi( main::@6/(byte[1000]) SCREEN#4 ) call flip param-assignment to:main::@10 main::@10: scope:[main] from main::@7 - (byte[256]) buffer2#16 ← phi( main::@7/(byte[256]) buffer2#7 ) - (byte[256]) buffer1#16 ← phi( main::@7/(byte[256]) buffer1#15 ) (byte*) RASTER#9 ← phi( main::@7/(byte*) RASTER#11 ) - (byte[1000]) SCREEN#2 ← phi( main::@7/(byte[1000]) SCREEN#3 ) call plot param-assignment to:main::@11 main::@11: scope:[main] from main::@10 - (byte[256]) buffer2#13 ← phi( main::@10/(byte[256]) buffer2#16 ) - (byte[256]) buffer1#22 ← phi( main::@10/(byte[256]) buffer1#16 ) - (byte[1000]) SCREEN#9 ← phi( main::@10/(byte[1000]) SCREEN#2 ) (byte*) RASTER#5 ← phi( main::@10/(byte*) RASTER#9 ) if(true) goto main::@1 to:main::@return @@ -1284,13 +1092,11 @@ main::@return: scope:[main] from main::@11 return to:@return prepare: scope:[prepare] from main - (byte[256]) buffer1#5 ← phi( main/(byte[256]) buffer1#9 ) (byte) prepare::i#0 ← (byte/signed byte/word/signed word) 0 to:prepare::@1 prepare::@1: scope:[prepare] from prepare prepare::@1 - (byte[256]) buffer1#1 ← phi( prepare/(byte[256]) buffer1#5 prepare::@1/(byte[256]) buffer1#1 ) (byte) prepare::i#2 ← phi( prepare/(byte) prepare::i#0 prepare::@1/(byte) prepare::i#1 ) - *((byte[256]) buffer1#1 + (byte) prepare::i#2) ← (byte) prepare::i#2 + *((byte[256]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 (byte) prepare::i#1 ← ++ (byte) prepare::i#2 (boolean~) prepare::$0 ← (byte) prepare::i#1 != (byte/signed byte/word/signed word) 0 if((boolean~) prepare::$0) goto prepare::@1 @@ -1299,8 +1105,6 @@ prepare::@return: scope:[prepare] from prepare::@1 return to:@return flip: scope:[flip] from main::@7 - (byte[256]) buffer2#5 ← phi( main::@7/(byte[256]) buffer2#7 ) - (byte[256]) buffer1#10 ← phi( main::@7/(byte[256]) buffer1#15 ) (byte) flip::srcIdx#0 ← (byte/signed byte/word/signed word) 0 (byte) flip::dstIdx#0 ← (byte/signed byte/word/signed word) 15 (byte) flip::r#0 ← (byte/signed byte/word/signed word) 16 @@ -1308,19 +1112,15 @@ flip: scope:[flip] from main::@7 flip::@1: scope:[flip] from flip flip::@4 (byte) flip::r#4 ← phi( flip/(byte) flip::r#0 flip::@4/(byte) flip::r#1 ) (byte) flip::dstIdx#5 ← phi( flip/(byte) flip::dstIdx#0 flip::@4/(byte) flip::dstIdx#2 ) - (byte[256]) buffer2#3 ← phi( flip/(byte[256]) buffer2#5 flip::@4/(byte[256]) buffer2#6 ) (byte) flip::srcIdx#3 ← phi( flip/(byte) flip::srcIdx#0 flip::@4/(byte) flip::srcIdx#4 ) - (byte[256]) buffer1#6 ← phi( flip/(byte[256]) buffer1#10 flip::@4/(byte[256]) buffer1#11 ) (byte) flip::c#0 ← (byte/signed byte/word/signed word) 16 to:flip::@2 flip::@2: scope:[flip] from flip::@1 flip::@2 (byte) flip::r#3 ← phi( flip::@1/(byte) flip::r#4 flip::@2/(byte) flip::r#3 ) (byte) flip::c#2 ← phi( flip::@1/(byte) flip::c#0 flip::@2/(byte) flip::c#1 ) (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) - (byte[256]) buffer2#1 ← phi( flip::@1/(byte[256]) buffer2#3 flip::@2/(byte[256]) buffer2#1 ) (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) - (byte[256]) buffer1#2 ← phi( flip::@1/(byte[256]) buffer1#6 flip::@2/(byte[256]) buffer1#2 ) - *((byte[256]) buffer2#1 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#2 + (byte) flip::srcIdx#2) + *((byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#0 + (byte) flip::srcIdx#2) (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 (byte/word~) flip::$0 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 (byte) flip::dstIdx#1 ← (byte/word~) flip::$0 @@ -1329,9 +1129,7 @@ flip::@2: scope:[flip] from flip::@1 flip::@2 if((boolean~) flip::$1) goto flip::@2 to:flip::@4 flip::@4: scope:[flip] from flip::@2 - (byte[256]) buffer2#6 ← phi( flip::@2/(byte[256]) buffer2#1 ) (byte) flip::srcIdx#4 ← phi( flip::@2/(byte) flip::srcIdx#1 ) - (byte[256]) buffer1#11 ← phi( flip::@2/(byte[256]) buffer1#2 ) (byte) flip::r#2 ← phi( flip::@2/(byte) flip::r#3 ) (byte) flip::dstIdx#4 ← phi( flip::@2/(byte) flip::dstIdx#1 ) (byte) flip::dstIdx#2 ← -- (byte) flip::dstIdx#4 @@ -1340,15 +1138,11 @@ flip::@4: scope:[flip] from flip::@2 if((boolean~) flip::$2) goto flip::@1 to:flip::@5 flip::@5: scope:[flip] from flip::@4 - (byte[256]) buffer1#7 ← phi( flip::@4/(byte[256]) buffer1#11 ) - (byte[256]) buffer2#4 ← phi( flip::@4/(byte[256]) buffer2#6 ) (byte) flip::i#0 ← (byte/signed byte/word/signed word) 0 to:flip::@3 flip::@3: scope:[flip] from flip::@3 flip::@5 - (byte[256]) buffer1#3 ← phi( flip::@3/(byte[256]) buffer1#3 flip::@5/(byte[256]) buffer1#7 ) (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@5/(byte) flip::i#0 ) - (byte[256]) buffer2#2 ← phi( flip::@3/(byte[256]) buffer2#2 flip::@5/(byte[256]) buffer2#4 ) - *((byte[256]) buffer1#3 + (byte) flip::i#2) ← *((byte[256]) buffer2#2 + (byte) flip::i#2) + *((byte[256]) buffer1#0 + (byte) flip::i#2) ← *((byte[256]) buffer2#0 + (byte) flip::i#2) (byte) flip::i#1 ← ++ (byte) flip::i#2 (boolean~) flip::$3 ← (byte) flip::i#1 != (byte/signed byte/word/signed word) 0 if((boolean~) flip::$3) goto flip::@3 @@ -1357,10 +1151,8 @@ flip::@return: scope:[flip] from flip::@3 return to:@return plot: scope:[plot] from main::@10 - (byte[256]) buffer1#12 ← phi( main::@10/(byte[256]) buffer1#16 ) - (byte[1000]) SCREEN#1 ← phi( main::@10/(byte[1000]) SCREEN#2 ) (byte/word/signed word~) plot::$0 ← (byte/signed byte/word/signed word) 5 * (byte/signed byte/word/signed word) 40 - (byte*~) plot::$1 ← (byte[1000]) SCREEN#1 + (byte/word/signed word~) plot::$0 + (byte*~) plot::$1 ← (byte[1000]) SCREEN#0 + (byte/word/signed word~) plot::$0 (byte*~) plot::$2 ← (byte*~) plot::$1 + (byte/signed byte/word/signed word) 12 (byte*) plot::line#0 ← (byte*~) plot::$2 (byte) plot::i#0 ← (byte/signed byte/word/signed word) 0 @@ -1370,7 +1162,6 @@ plot::@1: scope:[plot] from plot plot::@3 (byte) plot::y#4 ← phi( plot/(byte) plot::y#0 plot::@3/(byte) plot::y#1 ) (byte*) plot::line#4 ← phi( plot/(byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) (byte) plot::i#3 ← phi( plot/(byte) plot::i#0 plot::@3/(byte) plot::i#4 ) - (byte[256]) buffer1#8 ← phi( plot/(byte[256]) buffer1#12 plot::@3/(byte[256]) buffer1#13 ) (byte) plot::x#0 ← (byte/signed byte/word/signed word) 0 to:plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@2 @@ -1378,8 +1169,7 @@ plot::@2: scope:[plot] from plot::@1 plot::@2 (byte) plot::x#2 ← phi( plot::@1/(byte) plot::x#0 plot::@2/(byte) plot::x#1 ) (byte*) plot::line#2 ← phi( plot::@1/(byte*) plot::line#4 plot::@2/(byte*) plot::line#2 ) (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) - (byte[256]) buffer1#4 ← phi( plot::@1/(byte[256]) buffer1#8 plot::@2/(byte[256]) buffer1#4 ) - *((byte*) plot::line#2 + (byte) plot::x#2) ← *((byte[256]) buffer1#4 + (byte) plot::i#2) + *((byte*) plot::line#2 + (byte) plot::x#2) ← *((byte[256]) buffer1#0 + (byte) plot::i#2) (byte) plot::i#1 ← ++ (byte) plot::i#2 (byte) plot::x#1 ← ++ (byte) plot::x#2 (boolean~) plot::$3 ← (byte) plot::x#1 < (byte/signed byte/word/signed word) 16 @@ -1387,7 +1177,6 @@ plot::@2: scope:[plot] from plot::@1 plot::@2 to:plot::@3 plot::@3: scope:[plot] from plot::@2 (byte) plot::i#4 ← phi( plot::@2/(byte) plot::i#1 ) - (byte[256]) buffer1#13 ← phi( plot::@2/(byte[256]) buffer1#4 ) (byte) plot::y#2 ← phi( plot::@2/(byte) plot::y#3 ) (byte*) plot::line#3 ← phi( plot::@2/(byte*) plot::line#2 ) (byte*~) plot::$4 ← (byte*) plot::line#3 + (byte/signed byte/word/signed word) 40 @@ -1400,50 +1189,25 @@ plot::@return: scope:[plot] from plot::@3 return to:@return @4: scope:[] from @begin - (byte[256]) buffer2#17 ← phi( @begin/(byte[256]) buffer2#0 ) - (byte[1000]) SCREEN#12 ← phi( @begin/(byte[1000]) SCREEN#0 ) (byte*) RASTER#10 ← phi( @begin/(byte*) RASTER#0 ) - (byte[256]) buffer1#14 ← phi( @begin/(byte[256]) buffer1#0 ) call main param-assignment to:@end @end: scope:[] from @4 -Not aliassing across scopes: buffer1#9 buffer1#14 Not aliassing across scopes: RASTER#8 RASTER#10 -Not aliassing across scopes: SCREEN#11 SCREEN#12 -Not aliassing across scopes: buffer2#15 buffer2#17 -Not aliassing across scopes: buffer1#5 buffer1#9 -Not aliassing across scopes: buffer1#10 buffer1#15 -Not aliassing across scopes: buffer2#5 buffer2#7 -Not aliassing identity: buffer2#2 buffer2#2 -Not aliassing identity: buffer1#3 buffer1#3 -Not aliassing across scopes: SCREEN#1 SCREEN#2 -Not aliassing across scopes: buffer1#12 buffer1#16 Alias (byte*) RASTER#6 = (byte*) RASTER#8 -Alias (byte[1000]) SCREEN#10 = (byte[1000]) SCREEN#11 -Alias (byte[256]) buffer1#23 = (byte[256]) buffer1#9 -Alias (byte[256]) buffer2#14 = (byte[256]) buffer2#15 Alias (byte*) RASTER#11 = (byte*) RASTER#4 (byte*) RASTER#7 (byte*) RASTER#2 (byte*) RASTER#9 (byte*) RASTER#5 Alias (byte) main::c#1 = (byte) main::c#5 -Alias (byte[1000]) SCREEN#2 = (byte[1000]) SCREEN#8 (byte[1000]) SCREEN#4 (byte[1000]) SCREEN#5 (byte[1000]) SCREEN#3 (byte[1000]) SCREEN#9 -Alias (byte[256]) buffer1#15 = (byte[256]) buffer1#21 (byte[256]) buffer1#17 (byte[256]) buffer1#18 (byte[256]) buffer1#16 (byte[256]) buffer1#22 -Alias (byte[256]) buffer2#12 = (byte[256]) buffer2#8 (byte[256]) buffer2#9 (byte[256]) buffer2#7 (byte[256]) buffer2#16 (byte[256]) buffer2#13 Alias (byte) main::c#2 = (byte) main::c#3 Alias (byte) flip::dstIdx#1 = (byte/word~) flip::$0 (byte) flip::dstIdx#4 Alias (byte) flip::r#2 = (byte) flip::r#3 -Alias (byte[256]) buffer1#11 = (byte[256]) buffer1#2 (byte[256]) buffer1#7 Alias (byte) flip::srcIdx#1 = (byte) flip::srcIdx#4 -Alias (byte[256]) buffer2#1 = (byte[256]) buffer2#6 (byte[256]) buffer2#4 Alias (byte*) plot::line#0 = (byte*~) plot::$2 Alias (byte*) plot::line#2 = (byte*) plot::line#3 Alias (byte) plot::y#2 = (byte) plot::y#3 -Alias (byte[256]) buffer1#13 = (byte[256]) buffer1#4 Alias (byte) plot::i#1 = (byte) plot::i#4 Alias (byte*) plot::line#1 = (byte*~) plot::$4 -Alias (byte[256]) buffer1#0 = (byte[256]) buffer1#14 Alias (byte*) RASTER#0 = (byte*) RASTER#10 -Alias (byte[1000]) SCREEN#0 = (byte[1000]) SCREEN#12 -Alias (byte[256]) buffer2#0 = (byte[256]) buffer2#17 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -1453,36 +1217,24 @@ CONTROL FLOW GRAPH (byte*) RASTER#0 ← ((byte*)) (word) 53266 to:@4 main: scope:[main] from @4 - (byte[256]) buffer2#14 ← phi( @4/(byte[256]) buffer2#0 ) - (byte[1000]) SCREEN#10 ← phi( @4/(byte[1000]) SCREEN#0 ) (byte*) RASTER#6 ← phi( @4/(byte*) RASTER#0 ) - (byte[256]) buffer1#23 ← phi( @4/(byte[256]) buffer1#0 ) call prepare param-assignment to:main::@9 main::@9: scope:[main] from main to:main::@1 main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) buffer2#11 ← phi( main::@11/(byte[256]) buffer2#12 main::@9/(byte[256]) buffer2#14 ) - (byte[256]) buffer1#20 ← phi( main::@11/(byte[256]) buffer1#15 main::@9/(byte[256]) buffer1#23 ) - (byte[1000]) SCREEN#7 ← phi( main::@11/(byte[1000]) SCREEN#2 main::@9/(byte[1000]) SCREEN#10 ) (byte*) RASTER#3 ← phi( main::@11/(byte*) RASTER#11 main::@9/(byte*) RASTER#6 ) (byte) main::c#0 ← (byte/signed byte/word/signed word) 25 to:main::@3 main::@2: scope:[main] from main::@6 to:main::@3 main::@3: scope:[main] from main::@1 main::@2 main::@3 - (byte[256]) buffer2#10 ← phi( main::@1/(byte[256]) buffer2#11 main::@2/(byte[256]) buffer2#12 main::@3/(byte[256]) buffer2#10 ) - (byte[256]) buffer1#19 ← phi( main::@1/(byte[256]) buffer1#20 main::@2/(byte[256]) buffer1#15 main::@3/(byte[256]) buffer1#19 ) - (byte[1000]) SCREEN#6 ← phi( main::@1/(byte[1000]) SCREEN#7 main::@2/(byte[1000]) SCREEN#2 main::@3/(byte[1000]) SCREEN#6 ) (byte) main::c#4 ← phi( main::@1/(byte) main::c#0 main::@2/(byte) main::c#1 main::@3/(byte) main::c#4 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#3 main::@2/(byte*) RASTER#11 main::@3/(byte*) RASTER#1 ) (boolean~) main::$1 ← *((byte*) RASTER#1) != (byte/word/signed word) 254 if((boolean~) main::$1) goto main::@3 to:main::@4 main::@4: scope:[main] from main::@3 main::@4 - (byte[256]) buffer2#12 ← phi( main::@3/(byte[256]) buffer2#10 main::@4/(byte[256]) buffer2#12 ) - (byte[256]) buffer1#15 ← phi( main::@3/(byte[256]) buffer1#19 main::@4/(byte[256]) buffer1#15 ) - (byte[1000]) SCREEN#2 ← phi( main::@3/(byte[1000]) SCREEN#6 main::@4/(byte[1000]) SCREEN#2 ) (byte) main::c#2 ← phi( main::@3/(byte) main::c#4 main::@4/(byte) main::c#2 ) (byte*) RASTER#11 ← phi( main::@3/(byte*) RASTER#1 main::@4/(byte*) RASTER#11 ) (boolean~) main::$2 ← *((byte*) RASTER#11) != (byte/word/signed word) 255 @@ -1506,13 +1258,11 @@ main::@return: scope:[main] from main::@11 return to:@return prepare: scope:[prepare] from main - (byte[256]) buffer1#5 ← phi( main/(byte[256]) buffer1#23 ) (byte) prepare::i#0 ← (byte/signed byte/word/signed word) 0 to:prepare::@1 prepare::@1: scope:[prepare] from prepare prepare::@1 - (byte[256]) buffer1#1 ← phi( prepare/(byte[256]) buffer1#5 prepare::@1/(byte[256]) buffer1#1 ) (byte) prepare::i#2 ← phi( prepare/(byte) prepare::i#0 prepare::@1/(byte) prepare::i#1 ) - *((byte[256]) buffer1#1 + (byte) prepare::i#2) ← (byte) prepare::i#2 + *((byte[256]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 (byte) prepare::i#1 ← ++ (byte) prepare::i#2 (boolean~) prepare::$0 ← (byte) prepare::i#1 != (byte/signed byte/word/signed word) 0 if((boolean~) prepare::$0) goto prepare::@1 @@ -1521,8 +1271,6 @@ prepare::@return: scope:[prepare] from prepare::@1 return to:@return flip: scope:[flip] from main::@7 - (byte[256]) buffer2#5 ← phi( main::@7/(byte[256]) buffer2#12 ) - (byte[256]) buffer1#10 ← phi( main::@7/(byte[256]) buffer1#15 ) (byte) flip::srcIdx#0 ← (byte/signed byte/word/signed word) 0 (byte) flip::dstIdx#0 ← (byte/signed byte/word/signed word) 15 (byte) flip::r#0 ← (byte/signed byte/word/signed word) 16 @@ -1530,19 +1278,15 @@ flip: scope:[flip] from main::@7 flip::@1: scope:[flip] from flip flip::@4 (byte) flip::r#4 ← phi( flip/(byte) flip::r#0 flip::@4/(byte) flip::r#1 ) (byte) flip::dstIdx#5 ← phi( flip/(byte) flip::dstIdx#0 flip::@4/(byte) flip::dstIdx#2 ) - (byte[256]) buffer2#3 ← phi( flip/(byte[256]) buffer2#5 flip::@4/(byte[256]) buffer2#1 ) (byte) flip::srcIdx#3 ← phi( flip/(byte) flip::srcIdx#0 flip::@4/(byte) flip::srcIdx#1 ) - (byte[256]) buffer1#6 ← phi( flip/(byte[256]) buffer1#10 flip::@4/(byte[256]) buffer1#11 ) (byte) flip::c#0 ← (byte/signed byte/word/signed word) 16 to:flip::@2 flip::@2: scope:[flip] from flip::@1 flip::@2 (byte) flip::r#2 ← phi( flip::@1/(byte) flip::r#4 flip::@2/(byte) flip::r#2 ) (byte) flip::c#2 ← phi( flip::@1/(byte) flip::c#0 flip::@2/(byte) flip::c#1 ) (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) - (byte[256]) buffer2#1 ← phi( flip::@1/(byte[256]) buffer2#3 flip::@2/(byte[256]) buffer2#1 ) (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) - (byte[256]) buffer1#11 ← phi( flip::@1/(byte[256]) buffer1#6 flip::@2/(byte[256]) buffer1#11 ) - *((byte[256]) buffer2#1 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#11 + (byte) flip::srcIdx#2) + *((byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#0 + (byte) flip::srcIdx#2) (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 (byte) flip::c#1 ← -- (byte) flip::c#2 @@ -1559,10 +1303,8 @@ flip::@5: scope:[flip] from flip::@4 (byte) flip::i#0 ← (byte/signed byte/word/signed word) 0 to:flip::@3 flip::@3: scope:[flip] from flip::@3 flip::@5 - (byte[256]) buffer1#3 ← phi( flip::@3/(byte[256]) buffer1#3 flip::@5/(byte[256]) buffer1#11 ) (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@5/(byte) flip::i#0 ) - (byte[256]) buffer2#2 ← phi( flip::@3/(byte[256]) buffer2#2 flip::@5/(byte[256]) buffer2#1 ) - *((byte[256]) buffer1#3 + (byte) flip::i#2) ← *((byte[256]) buffer2#2 + (byte) flip::i#2) + *((byte[256]) buffer1#0 + (byte) flip::i#2) ← *((byte[256]) buffer2#0 + (byte) flip::i#2) (byte) flip::i#1 ← ++ (byte) flip::i#2 (boolean~) flip::$3 ← (byte) flip::i#1 != (byte/signed byte/word/signed word) 0 if((boolean~) flip::$3) goto flip::@3 @@ -1571,10 +1313,8 @@ flip::@return: scope:[flip] from flip::@3 return to:@return plot: scope:[plot] from main::@10 - (byte[256]) buffer1#12 ← phi( main::@10/(byte[256]) buffer1#15 ) - (byte[1000]) SCREEN#1 ← phi( main::@10/(byte[1000]) SCREEN#2 ) (byte/word/signed word~) plot::$0 ← (byte/signed byte/word/signed word) 5 * (byte/signed byte/word/signed word) 40 - (byte*~) plot::$1 ← (byte[1000]) SCREEN#1 + (byte/word/signed word~) plot::$0 + (byte*~) plot::$1 ← (byte[1000]) SCREEN#0 + (byte/word/signed word~) plot::$0 (byte*) plot::line#0 ← (byte*~) plot::$1 + (byte/signed byte/word/signed word) 12 (byte) plot::i#0 ← (byte/signed byte/word/signed word) 0 (byte) plot::y#0 ← (byte/signed byte/word/signed word) 16 @@ -1583,7 +1323,6 @@ plot::@1: scope:[plot] from plot plot::@3 (byte) plot::y#4 ← phi( plot/(byte) plot::y#0 plot::@3/(byte) plot::y#1 ) (byte*) plot::line#4 ← phi( plot/(byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) (byte) plot::i#3 ← phi( plot/(byte) plot::i#0 plot::@3/(byte) plot::i#1 ) - (byte[256]) buffer1#8 ← phi( plot/(byte[256]) buffer1#12 plot::@3/(byte[256]) buffer1#13 ) (byte) plot::x#0 ← (byte/signed byte/word/signed word) 0 to:plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@2 @@ -1591,8 +1330,7 @@ plot::@2: scope:[plot] from plot::@1 plot::@2 (byte) plot::x#2 ← phi( plot::@1/(byte) plot::x#0 plot::@2/(byte) plot::x#1 ) (byte*) plot::line#2 ← phi( plot::@1/(byte*) plot::line#4 plot::@2/(byte*) plot::line#2 ) (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) - (byte[256]) buffer1#13 ← phi( plot::@1/(byte[256]) buffer1#8 plot::@2/(byte[256]) buffer1#13 ) - *((byte*) plot::line#2 + (byte) plot::x#2) ← *((byte[256]) buffer1#13 + (byte) plot::i#2) + *((byte*) plot::line#2 + (byte) plot::x#2) ← *((byte[256]) buffer1#0 + (byte) plot::i#2) (byte) plot::i#1 ← ++ (byte) plot::i#2 (byte) plot::x#1 ← ++ (byte) plot::x#2 (boolean~) plot::$3 ← (byte) plot::x#1 < (byte/signed byte/word/signed word) 16 @@ -1612,34 +1350,12 @@ plot::@return: scope:[plot] from plot::@3 to:@end @end: scope:[] from @4 -Not aliassing across scopes: buffer1#23 buffer1#0 Not aliassing across scopes: RASTER#6 RASTER#0 -Not aliassing across scopes: SCREEN#10 SCREEN#0 -Not aliassing across scopes: buffer2#14 buffer2#0 -Not aliassing across scopes: buffer1#5 buffer1#23 -Not aliassing across scopes: buffer1#10 buffer1#15 -Not aliassing across scopes: buffer2#5 buffer2#12 -Not aliassing identity: buffer2#2 buffer2#2 -Not aliassing identity: buffer1#3 buffer1#3 -Not aliassing across scopes: SCREEN#1 SCREEN#2 -Not aliassing across scopes: buffer1#12 buffer1#15 Self Phi Eliminated (byte*) RASTER#1 Self Phi Eliminated (byte) main::c#4 -Self Phi Eliminated (byte[1000]) SCREEN#6 -Self Phi Eliminated (byte[256]) buffer1#19 -Self Phi Eliminated (byte[256]) buffer2#10 Self Phi Eliminated (byte*) RASTER#11 Self Phi Eliminated (byte) main::c#2 -Self Phi Eliminated (byte[1000]) SCREEN#2 -Self Phi Eliminated (byte[256]) buffer1#15 -Self Phi Eliminated (byte[256]) buffer2#12 -Self Phi Eliminated (byte[256]) buffer1#1 -Self Phi Eliminated (byte[256]) buffer1#11 -Self Phi Eliminated (byte[256]) buffer2#1 Self Phi Eliminated (byte) flip::r#2 -Self Phi Eliminated (byte[256]) buffer2#2 -Self Phi Eliminated (byte[256]) buffer1#3 -Self Phi Eliminated (byte[256]) buffer1#13 Self Phi Eliminated (byte*) plot::line#2 Self Phi Eliminated (byte) plot::y#2 Succesful SSA optimization Pass2SelfPhiElimination @@ -1651,36 +1367,24 @@ CONTROL FLOW GRAPH (byte*) RASTER#0 ← ((byte*)) (word) 53266 to:@4 main: scope:[main] from @4 - (byte[256]) buffer2#14 ← phi( @4/(byte[256]) buffer2#0 ) - (byte[1000]) SCREEN#10 ← phi( @4/(byte[1000]) SCREEN#0 ) (byte*) RASTER#6 ← phi( @4/(byte*) RASTER#0 ) - (byte[256]) buffer1#23 ← phi( @4/(byte[256]) buffer1#0 ) call prepare param-assignment to:main::@9 main::@9: scope:[main] from main to:main::@1 main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) buffer2#11 ← phi( main::@11/(byte[256]) buffer2#12 main::@9/(byte[256]) buffer2#14 ) - (byte[256]) buffer1#20 ← phi( main::@11/(byte[256]) buffer1#15 main::@9/(byte[256]) buffer1#23 ) - (byte[1000]) SCREEN#7 ← phi( main::@11/(byte[1000]) SCREEN#2 main::@9/(byte[1000]) SCREEN#10 ) (byte*) RASTER#3 ← phi( main::@11/(byte*) RASTER#11 main::@9/(byte*) RASTER#6 ) (byte) main::c#0 ← (byte/signed byte/word/signed word) 25 to:main::@3 main::@2: scope:[main] from main::@6 to:main::@3 main::@3: scope:[main] from main::@1 main::@2 main::@3 - (byte[256]) buffer2#10 ← phi( main::@1/(byte[256]) buffer2#11 main::@2/(byte[256]) buffer2#12 ) - (byte[256]) buffer1#19 ← phi( main::@1/(byte[256]) buffer1#20 main::@2/(byte[256]) buffer1#15 ) - (byte[1000]) SCREEN#6 ← phi( main::@1/(byte[1000]) SCREEN#7 main::@2/(byte[1000]) SCREEN#2 ) (byte) main::c#4 ← phi( main::@1/(byte) main::c#0 main::@2/(byte) main::c#1 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#3 main::@2/(byte*) RASTER#11 ) (boolean~) main::$1 ← *((byte*) RASTER#1) != (byte/word/signed word) 254 if((boolean~) main::$1) goto main::@3 to:main::@4 main::@4: scope:[main] from main::@3 main::@4 - (byte[256]) buffer2#12 ← phi( main::@3/(byte[256]) buffer2#10 ) - (byte[256]) buffer1#15 ← phi( main::@3/(byte[256]) buffer1#19 ) - (byte[1000]) SCREEN#2 ← phi( main::@3/(byte[1000]) SCREEN#6 ) (byte) main::c#2 ← phi( main::@3/(byte) main::c#4 ) (byte*) RASTER#11 ← phi( main::@3/(byte*) RASTER#1 ) (boolean~) main::$2 ← *((byte*) RASTER#11) != (byte/word/signed word) 255 @@ -1704,13 +1408,11 @@ main::@return: scope:[main] from main::@11 return to:@return prepare: scope:[prepare] from main - (byte[256]) buffer1#5 ← phi( main/(byte[256]) buffer1#23 ) (byte) prepare::i#0 ← (byte/signed byte/word/signed word) 0 to:prepare::@1 prepare::@1: scope:[prepare] from prepare prepare::@1 - (byte[256]) buffer1#1 ← phi( prepare/(byte[256]) buffer1#5 ) (byte) prepare::i#2 ← phi( prepare/(byte) prepare::i#0 prepare::@1/(byte) prepare::i#1 ) - *((byte[256]) buffer1#1 + (byte) prepare::i#2) ← (byte) prepare::i#2 + *((byte[256]) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 (byte) prepare::i#1 ← ++ (byte) prepare::i#2 (boolean~) prepare::$0 ← (byte) prepare::i#1 != (byte/signed byte/word/signed word) 0 if((boolean~) prepare::$0) goto prepare::@1 @@ -1719,8 +1421,6 @@ prepare::@return: scope:[prepare] from prepare::@1 return to:@return flip: scope:[flip] from main::@7 - (byte[256]) buffer2#5 ← phi( main::@7/(byte[256]) buffer2#12 ) - (byte[256]) buffer1#10 ← phi( main::@7/(byte[256]) buffer1#15 ) (byte) flip::srcIdx#0 ← (byte/signed byte/word/signed word) 0 (byte) flip::dstIdx#0 ← (byte/signed byte/word/signed word) 15 (byte) flip::r#0 ← (byte/signed byte/word/signed word) 16 @@ -1728,19 +1428,15 @@ flip: scope:[flip] from main::@7 flip::@1: scope:[flip] from flip flip::@4 (byte) flip::r#4 ← phi( flip/(byte) flip::r#0 flip::@4/(byte) flip::r#1 ) (byte) flip::dstIdx#5 ← phi( flip/(byte) flip::dstIdx#0 flip::@4/(byte) flip::dstIdx#2 ) - (byte[256]) buffer2#3 ← phi( flip/(byte[256]) buffer2#5 flip::@4/(byte[256]) buffer2#1 ) (byte) flip::srcIdx#3 ← phi( flip/(byte) flip::srcIdx#0 flip::@4/(byte) flip::srcIdx#1 ) - (byte[256]) buffer1#6 ← phi( flip/(byte[256]) buffer1#10 flip::@4/(byte[256]) buffer1#11 ) (byte) flip::c#0 ← (byte/signed byte/word/signed word) 16 to:flip::@2 flip::@2: scope:[flip] from flip::@1 flip::@2 (byte) flip::r#2 ← phi( flip::@1/(byte) flip::r#4 ) (byte) flip::c#2 ← phi( flip::@1/(byte) flip::c#0 flip::@2/(byte) flip::c#1 ) (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) - (byte[256]) buffer2#1 ← phi( flip::@1/(byte[256]) buffer2#3 ) (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) - (byte[256]) buffer1#11 ← phi( flip::@1/(byte[256]) buffer1#6 ) - *((byte[256]) buffer2#1 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#11 + (byte) flip::srcIdx#2) + *((byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#0 + (byte) flip::srcIdx#2) (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 (byte) flip::c#1 ← -- (byte) flip::c#2 @@ -1757,10 +1453,8 @@ flip::@5: scope:[flip] from flip::@4 (byte) flip::i#0 ← (byte/signed byte/word/signed word) 0 to:flip::@3 flip::@3: scope:[flip] from flip::@3 flip::@5 - (byte[256]) buffer1#3 ← phi( flip::@5/(byte[256]) buffer1#11 ) (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@5/(byte) flip::i#0 ) - (byte[256]) buffer2#2 ← phi( flip::@5/(byte[256]) buffer2#1 ) - *((byte[256]) buffer1#3 + (byte) flip::i#2) ← *((byte[256]) buffer2#2 + (byte) flip::i#2) + *((byte[256]) buffer1#0 + (byte) flip::i#2) ← *((byte[256]) buffer2#0 + (byte) flip::i#2) (byte) flip::i#1 ← ++ (byte) flip::i#2 (boolean~) flip::$3 ← (byte) flip::i#1 != (byte/signed byte/word/signed word) 0 if((boolean~) flip::$3) goto flip::@3 @@ -1769,10 +1463,8 @@ flip::@return: scope:[flip] from flip::@3 return to:@return plot: scope:[plot] from main::@10 - (byte[256]) buffer1#12 ← phi( main::@10/(byte[256]) buffer1#15 ) - (byte[1000]) SCREEN#1 ← phi( main::@10/(byte[1000]) SCREEN#2 ) (byte/word/signed word~) plot::$0 ← (byte/signed byte/word/signed word) 5 * (byte/signed byte/word/signed word) 40 - (byte*~) plot::$1 ← (byte[1000]) SCREEN#1 + (byte/word/signed word~) plot::$0 + (byte*~) plot::$1 ← (byte[1000]) SCREEN#0 + (byte/word/signed word~) plot::$0 (byte*) plot::line#0 ← (byte*~) plot::$1 + (byte/signed byte/word/signed word) 12 (byte) plot::i#0 ← (byte/signed byte/word/signed word) 0 (byte) plot::y#0 ← (byte/signed byte/word/signed word) 16 @@ -1781,7 +1473,6 @@ plot::@1: scope:[plot] from plot plot::@3 (byte) plot::y#4 ← phi( plot/(byte) plot::y#0 plot::@3/(byte) plot::y#1 ) (byte*) plot::line#4 ← phi( plot/(byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) (byte) plot::i#3 ← phi( plot/(byte) plot::i#0 plot::@3/(byte) plot::i#1 ) - (byte[256]) buffer1#8 ← phi( plot/(byte[256]) buffer1#12 plot::@3/(byte[256]) buffer1#13 ) (byte) plot::x#0 ← (byte/signed byte/word/signed word) 0 to:plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@2 @@ -1789,8 +1480,7 @@ plot::@2: scope:[plot] from plot::@1 plot::@2 (byte) plot::x#2 ← phi( plot::@1/(byte) plot::x#0 plot::@2/(byte) plot::x#1 ) (byte*) plot::line#2 ← phi( plot::@1/(byte*) plot::line#4 ) (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) - (byte[256]) buffer1#13 ← phi( plot::@1/(byte[256]) buffer1#8 ) - *((byte*) plot::line#2 + (byte) plot::x#2) ← *((byte[256]) buffer1#13 + (byte) plot::i#2) + *((byte*) plot::line#2 + (byte) plot::x#2) ← *((byte[256]) buffer1#0 + (byte) plot::i#2) (byte) plot::i#1 ← ++ (byte) plot::i#2 (byte) plot::x#1 ← ++ (byte) plot::x#2 (boolean~) plot::$3 ← (byte) plot::x#1 < (byte/signed byte/word/signed word) 16 @@ -1810,27 +1500,10 @@ plot::@return: scope:[plot] from plot::@3 to:@end @end: scope:[] from @4 -Redundant Phi (byte[256]) buffer1#23 (byte[256]) buffer1#0 Redundant Phi (byte*) RASTER#6 (byte*) RASTER#0 -Redundant Phi (byte[1000]) SCREEN#10 (byte[1000]) SCREEN#0 -Redundant Phi (byte[256]) buffer2#14 (byte[256]) buffer2#0 Redundant Phi (byte*) RASTER#11 (byte*) RASTER#1 Redundant Phi (byte) main::c#2 (byte) main::c#4 -Redundant Phi (byte[1000]) SCREEN#2 (byte[1000]) SCREEN#6 -Redundant Phi (byte[256]) buffer1#15 (byte[256]) buffer1#19 -Redundant Phi (byte[256]) buffer2#12 (byte[256]) buffer2#10 -Redundant Phi (byte[256]) buffer1#5 (byte[256]) buffer1#23 -Redundant Phi (byte[256]) buffer1#1 (byte[256]) buffer1#5 -Redundant Phi (byte[256]) buffer1#10 (byte[256]) buffer1#15 -Redundant Phi (byte[256]) buffer2#5 (byte[256]) buffer2#12 -Redundant Phi (byte[256]) buffer1#11 (byte[256]) buffer1#6 -Redundant Phi (byte[256]) buffer2#1 (byte[256]) buffer2#3 Redundant Phi (byte) flip::r#2 (byte) flip::r#4 -Redundant Phi (byte[256]) buffer2#2 (byte[256]) buffer2#1 -Redundant Phi (byte[256]) buffer1#3 (byte[256]) buffer1#11 -Redundant Phi (byte[1000]) SCREEN#1 (byte[1000]) SCREEN#2 -Redundant Phi (byte[256]) buffer1#12 (byte[256]) buffer1#15 -Redundant Phi (byte[256]) buffer1#13 (byte[256]) buffer1#8 Redundant Phi (byte*) plot::line#2 (byte*) plot::line#4 Redundant Phi (byte) plot::y#2 (byte) plot::y#4 Succesful SSA optimization Pass2RedundantPhiElimination @@ -1847,18 +1520,12 @@ main: scope:[main] from @4 main::@9: scope:[main] from main to:main::@1 main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) buffer2#11 ← phi( main::@11/(byte[256]) buffer2#10 main::@9/(byte[256]) buffer2#0 ) - (byte[256]) buffer1#20 ← phi( main::@11/(byte[256]) buffer1#19 main::@9/(byte[256]) buffer1#0 ) - (byte[1000]) SCREEN#7 ← phi( main::@11/(byte[1000]) SCREEN#6 main::@9/(byte[1000]) SCREEN#0 ) (byte*) RASTER#3 ← phi( main::@11/(byte*) RASTER#1 main::@9/(byte*) RASTER#0 ) (byte) main::c#0 ← (byte/signed byte/word/signed word) 25 to:main::@3 main::@2: scope:[main] from main::@6 to:main::@3 main::@3: scope:[main] from main::@1 main::@2 main::@3 - (byte[256]) buffer2#10 ← phi( main::@1/(byte[256]) buffer2#11 main::@2/(byte[256]) buffer2#10 ) - (byte[256]) buffer1#19 ← phi( main::@1/(byte[256]) buffer1#20 main::@2/(byte[256]) buffer1#19 ) - (byte[1000]) SCREEN#6 ← phi( main::@1/(byte[1000]) SCREEN#7 main::@2/(byte[1000]) SCREEN#6 ) (byte) main::c#4 ← phi( main::@1/(byte) main::c#0 main::@2/(byte) main::c#1 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#3 main::@2/(byte*) RASTER#1 ) (boolean~) main::$1 ← *((byte*) RASTER#1) != (byte/word/signed word) 254 @@ -1906,16 +1573,14 @@ flip: scope:[flip] from main::@7 flip::@1: scope:[flip] from flip flip::@4 (byte) flip::r#4 ← phi( flip/(byte) flip::r#0 flip::@4/(byte) flip::r#1 ) (byte) flip::dstIdx#5 ← phi( flip/(byte) flip::dstIdx#0 flip::@4/(byte) flip::dstIdx#2 ) - (byte[256]) buffer2#3 ← phi( flip/(byte[256]) buffer2#10 flip::@4/(byte[256]) buffer2#3 ) (byte) flip::srcIdx#3 ← phi( flip/(byte) flip::srcIdx#0 flip::@4/(byte) flip::srcIdx#1 ) - (byte[256]) buffer1#6 ← phi( flip/(byte[256]) buffer1#19 flip::@4/(byte[256]) buffer1#6 ) (byte) flip::c#0 ← (byte/signed byte/word/signed word) 16 to:flip::@2 flip::@2: scope:[flip] from flip::@1 flip::@2 (byte) flip::c#2 ← phi( flip::@1/(byte) flip::c#0 flip::@2/(byte) flip::c#1 ) (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) - *((byte[256]) buffer2#3 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#6 + (byte) flip::srcIdx#2) + *((byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#0 + (byte) flip::srcIdx#2) (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 (byte) flip::c#1 ← -- (byte) flip::c#2 @@ -1933,7 +1598,7 @@ flip::@5: scope:[flip] from flip::@4 to:flip::@3 flip::@3: scope:[flip] from flip::@3 flip::@5 (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@5/(byte) flip::i#0 ) - *((byte[256]) buffer1#6 + (byte) flip::i#2) ← *((byte[256]) buffer2#3 + (byte) flip::i#2) + *((byte[256]) buffer1#0 + (byte) flip::i#2) ← *((byte[256]) buffer2#0 + (byte) flip::i#2) (byte) flip::i#1 ← ++ (byte) flip::i#2 (boolean~) flip::$3 ← (byte) flip::i#1 != (byte/signed byte/word/signed word) 0 if((boolean~) flip::$3) goto flip::@3 @@ -1943,7 +1608,7 @@ flip::@return: scope:[flip] from flip::@3 to:@return plot: scope:[plot] from main::@10 (byte/word/signed word~) plot::$0 ← (byte/signed byte/word/signed word) 5 * (byte/signed byte/word/signed word) 40 - (byte*~) plot::$1 ← (byte[1000]) SCREEN#6 + (byte/word/signed word~) plot::$0 + (byte*~) plot::$1 ← (byte[1000]) SCREEN#0 + (byte/word/signed word~) plot::$0 (byte*) plot::line#0 ← (byte*~) plot::$1 + (byte/signed byte/word/signed word) 12 (byte) plot::i#0 ← (byte/signed byte/word/signed word) 0 (byte) plot::y#0 ← (byte/signed byte/word/signed word) 16 @@ -1952,13 +1617,12 @@ plot::@1: scope:[plot] from plot plot::@3 (byte) plot::y#4 ← phi( plot/(byte) plot::y#0 plot::@3/(byte) plot::y#1 ) (byte*) plot::line#4 ← phi( plot/(byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) (byte) plot::i#3 ← phi( plot/(byte) plot::i#0 plot::@3/(byte) plot::i#1 ) - (byte[256]) buffer1#8 ← phi( plot/(byte[256]) buffer1#19 plot::@3/(byte[256]) buffer1#8 ) (byte) plot::x#0 ← (byte/signed byte/word/signed word) 0 to:plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@2 (byte) plot::x#2 ← phi( plot::@1/(byte) plot::x#0 plot::@2/(byte) plot::x#1 ) (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) - *((byte*) plot::line#4 + (byte) plot::x#2) ← *((byte[256]) buffer1#8 + (byte) plot::i#2) + *((byte*) plot::line#4 + (byte) plot::x#2) ← *((byte[256]) buffer1#0 + (byte) plot::i#2) (byte) plot::i#1 ← ++ (byte) plot::i#2 (byte) plot::x#1 ← ++ (byte) plot::x#2 (boolean~) plot::$3 ← (byte) plot::x#1 < (byte/signed byte/word/signed word) 16 @@ -2001,18 +1665,12 @@ main: scope:[main] from @4 main::@9: scope:[main] from main to:main::@1 main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) buffer2#11 ← phi( main::@11/(byte[256]) buffer2#10 main::@9/(byte[256]) buffer2#0 ) - (byte[256]) buffer1#20 ← phi( main::@11/(byte[256]) buffer1#19 main::@9/(byte[256]) buffer1#0 ) - (byte[1000]) SCREEN#7 ← phi( main::@11/(byte[1000]) SCREEN#6 main::@9/(byte[1000]) SCREEN#0 ) (byte*) RASTER#3 ← phi( main::@11/(byte*) RASTER#1 main::@9/(byte*) RASTER#0 ) (byte) main::c#0 ← (byte/signed byte/word/signed word) 25 to:main::@3 main::@2: scope:[main] from main::@6 to:main::@3 main::@3: scope:[main] from main::@1 main::@2 main::@3 - (byte[256]) buffer2#10 ← phi( main::@1/(byte[256]) buffer2#11 main::@2/(byte[256]) buffer2#10 ) - (byte[256]) buffer1#19 ← phi( main::@1/(byte[256]) buffer1#20 main::@2/(byte[256]) buffer1#19 ) - (byte[1000]) SCREEN#6 ← phi( main::@1/(byte[1000]) SCREEN#7 main::@2/(byte[1000]) SCREEN#6 ) (byte) main::c#4 ← phi( main::@1/(byte) main::c#0 main::@2/(byte) main::c#1 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#3 main::@2/(byte*) RASTER#1 ) if(*((byte*) RASTER#1)!=(byte/word/signed word) 254) goto main::@3 @@ -2056,16 +1714,14 @@ flip: scope:[flip] from main::@7 flip::@1: scope:[flip] from flip flip::@4 (byte) flip::r#4 ← phi( flip/(byte) flip::r#0 flip::@4/(byte) flip::r#1 ) (byte) flip::dstIdx#5 ← phi( flip/(byte) flip::dstIdx#0 flip::@4/(byte) flip::dstIdx#2 ) - (byte[256]) buffer2#3 ← phi( flip/(byte[256]) buffer2#10 flip::@4/(byte[256]) buffer2#3 ) (byte) flip::srcIdx#3 ← phi( flip/(byte) flip::srcIdx#0 flip::@4/(byte) flip::srcIdx#1 ) - (byte[256]) buffer1#6 ← phi( flip/(byte[256]) buffer1#19 flip::@4/(byte[256]) buffer1#6 ) (byte) flip::c#0 ← (byte/signed byte/word/signed word) 16 to:flip::@2 flip::@2: scope:[flip] from flip::@1 flip::@2 (byte) flip::c#2 ← phi( flip::@1/(byte) flip::c#0 flip::@2/(byte) flip::c#1 ) (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) - *((byte[256]) buffer2#3 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#6 + (byte) flip::srcIdx#2) + *((byte[256]) buffer2#0 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#0 + (byte) flip::srcIdx#2) (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 (byte) flip::c#1 ← -- (byte) flip::c#2 @@ -2081,7 +1737,7 @@ flip::@5: scope:[flip] from flip::@4 to:flip::@3 flip::@3: scope:[flip] from flip::@3 flip::@5 (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@5/(byte) flip::i#0 ) - *((byte[256]) buffer1#6 + (byte) flip::i#2) ← *((byte[256]) buffer2#3 + (byte) flip::i#2) + *((byte[256]) buffer1#0 + (byte) flip::i#2) ← *((byte[256]) buffer2#0 + (byte) flip::i#2) (byte) flip::i#1 ← ++ (byte) flip::i#2 if((byte) flip::i#1!=(byte/signed byte/word/signed word) 0) goto flip::@3 to:flip::@return @@ -2090,7 +1746,7 @@ flip::@return: scope:[flip] from flip::@3 to:@return plot: scope:[plot] from main::@10 (byte/word/signed word~) plot::$0 ← (byte/signed byte/word/signed word) 5 * (byte/signed byte/word/signed word) 40 - (byte*~) plot::$1 ← (byte[1000]) SCREEN#6 + (byte/word/signed word~) plot::$0 + (byte*~) plot::$1 ← (byte[1000]) SCREEN#0 + (byte/word/signed word~) plot::$0 (byte*) plot::line#0 ← (byte*~) plot::$1 + (byte/signed byte/word/signed word) 12 (byte) plot::i#0 ← (byte/signed byte/word/signed word) 0 (byte) plot::y#0 ← (byte/signed byte/word/signed word) 16 @@ -2099,13 +1755,12 @@ plot::@1: scope:[plot] from plot plot::@3 (byte) plot::y#4 ← phi( plot/(byte) plot::y#0 plot::@3/(byte) plot::y#1 ) (byte*) plot::line#4 ← phi( plot/(byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) (byte) plot::i#3 ← phi( plot/(byte) plot::i#0 plot::@3/(byte) plot::i#1 ) - (byte[256]) buffer1#8 ← phi( plot/(byte[256]) buffer1#19 plot::@3/(byte[256]) buffer1#8 ) (byte) plot::x#0 ← (byte/signed byte/word/signed word) 0 to:plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@2 (byte) plot::x#2 ← phi( plot::@1/(byte) plot::x#0 plot::@2/(byte) plot::x#1 ) (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) - *((byte*) plot::line#4 + (byte) plot::x#2) ← *((byte[256]) buffer1#8 + (byte) plot::i#2) + *((byte*) plot::line#4 + (byte) plot::x#2) ← *((byte[256]) buffer1#0 + (byte) plot::i#2) (byte) plot::i#1 ← ++ (byte) plot::i#2 (byte) plot::x#1 ← ++ (byte) plot::x#2 if((byte) plot::x#1<(byte/signed byte/word/signed word) 16) goto plot::@2 @@ -2148,17 +1803,11 @@ main: scope:[main] from @4 main::@9: scope:[main] from main to:main::@1 main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) buffer2#11 ← phi( main::@11/(byte[256]) buffer2#10 main::@9/(const byte*) buffer2#0 ) - (byte[256]) buffer1#20 ← phi( main::@11/(byte[256]) buffer1#19 main::@9/(const byte*) buffer1#0 ) - (byte[1000]) SCREEN#7 ← phi( main::@11/(byte[1000]) SCREEN#6 main::@9/(const byte*) SCREEN#0 ) (byte*) RASTER#3 ← phi( main::@11/(byte*) RASTER#1 main::@9/(const byte*) RASTER#0 ) to:main::@3 main::@2: scope:[main] from main::@6 to:main::@3 main::@3: scope:[main] from main::@1 main::@2 main::@3 - (byte[256]) buffer2#10 ← phi( main::@1/(byte[256]) buffer2#11 main::@2/(byte[256]) buffer2#10 ) - (byte[256]) buffer1#19 ← phi( main::@1/(byte[256]) buffer1#20 main::@2/(byte[256]) buffer1#19 ) - (byte[1000]) SCREEN#6 ← phi( main::@1/(byte[1000]) SCREEN#7 main::@2/(byte[1000]) SCREEN#6 ) (byte) main::c#4 ← phi( main::@1/(const byte) main::c#0 main::@2/(byte) main::c#1 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#3 main::@2/(byte*) RASTER#1 ) if(*((byte*) RASTER#1)!=(byte/word/signed word) 254) goto main::@3 @@ -2198,15 +1847,13 @@ flip: scope:[flip] from main::@7 flip::@1: scope:[flip] from flip flip::@4 (byte) flip::r#4 ← phi( flip/(const byte) flip::r#0 flip::@4/(byte) flip::r#1 ) (byte) flip::dstIdx#5 ← phi( flip/(const byte) flip::dstIdx#0 flip::@4/(byte) flip::dstIdx#2 ) - (byte[256]) buffer2#3 ← phi( flip/(byte[256]) buffer2#10 flip::@4/(byte[256]) buffer2#3 ) (byte) flip::srcIdx#3 ← phi( flip/(const byte) flip::srcIdx#0 flip::@4/(byte) flip::srcIdx#1 ) - (byte[256]) buffer1#6 ← phi( flip/(byte[256]) buffer1#19 flip::@4/(byte[256]) buffer1#6 ) to:flip::@2 flip::@2: scope:[flip] from flip::@1 flip::@2 (byte) flip::c#2 ← phi( flip::@1/(const byte) flip::c#0 flip::@2/(byte) flip::c#1 ) (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) - *((byte[256]) buffer2#3 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#6 + (byte) flip::srcIdx#2) + *((const byte*) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte*) buffer1#0 + (byte) flip::srcIdx#2) (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 (byte) flip::c#1 ← -- (byte) flip::c#2 @@ -2221,7 +1868,7 @@ flip::@5: scope:[flip] from flip::@4 to:flip::@3 flip::@3: scope:[flip] from flip::@3 flip::@5 (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@5/(const byte) flip::i#0 ) - *((byte[256]) buffer1#6 + (byte) flip::i#2) ← *((byte[256]) buffer2#3 + (byte) flip::i#2) + *((const byte*) buffer1#0 + (byte) flip::i#2) ← *((const byte*) buffer2#0 + (byte) flip::i#2) (byte) flip::i#1 ← ++ (byte) flip::i#2 if((byte) flip::i#1!=(byte/signed byte/word/signed word) 0) goto flip::@3 to:flip::@return @@ -2229,19 +1876,18 @@ flip::@return: scope:[flip] from flip::@3 return to:@return plot: scope:[plot] from main::@10 - (byte*~) plot::$1 ← (byte[1000]) SCREEN#6 + (const byte/word/signed word) plot::$0 + (byte*~) plot::$1 ← (const byte*) SCREEN#0 + (const byte/word/signed word) plot::$0 (byte*) plot::line#0 ← (byte*~) plot::$1 + (byte/signed byte/word/signed word) 12 to:plot::@1 plot::@1: scope:[plot] from plot plot::@3 (byte) plot::y#4 ← phi( plot/(const byte) plot::y#0 plot::@3/(byte) plot::y#1 ) (byte*) plot::line#4 ← phi( plot/(byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) (byte) plot::i#3 ← phi( plot/(const byte) plot::i#0 plot::@3/(byte) plot::i#1 ) - (byte[256]) buffer1#8 ← phi( plot/(byte[256]) buffer1#19 plot::@3/(byte[256]) buffer1#8 ) to:plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@2 (byte) plot::x#2 ← phi( plot::@1/(const byte) plot::x#0 plot::@2/(byte) plot::x#1 ) (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) - *((byte*) plot::line#4 + (byte) plot::x#2) ← *((byte[256]) buffer1#8 + (byte) plot::i#2) + *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte*) buffer1#0 + (byte) plot::i#2) (byte) plot::i#1 ← ++ (byte) plot::i#2 (byte) plot::x#1 ← ++ (byte) plot::x#2 if((byte) plot::x#1<(byte/signed byte/word/signed word) 16) goto plot::@2 @@ -2259,10 +1905,8 @@ plot::@return: scope:[plot] from plot::@3 to:@end @end: scope:[] from @4 -Multiple usages for variable. Not optimizing sub-constant (byte) prepare::i#2 -Multiple usages for variable. Not optimizing sub-constant (byte[1000]) SCREEN#6 -Consolidated constant in assignment plot::line#0 -Succesful SSA optimization Pass2ConstantAdditionElimination +Constant (const byte*) plot::$1 = SCREEN#0+plot::$0 +Succesful SSA optimization Pass2ConstantIdentification CONTROL FLOW GRAPH @begin: scope:[] from to:@4 @@ -2272,17 +1916,11 @@ main: scope:[main] from @4 main::@9: scope:[main] from main to:main::@1 main::@1: scope:[main] from main::@11 main::@9 - (byte[256]) buffer2#11 ← phi( main::@11/(byte[256]) buffer2#10 main::@9/(const byte*) buffer2#0 ) - (byte[256]) buffer1#20 ← phi( main::@11/(byte[256]) buffer1#19 main::@9/(const byte*) buffer1#0 ) - (byte[1000]) SCREEN#7 ← phi( main::@11/(byte[1000]) SCREEN#6 main::@9/(const byte*) SCREEN#0 ) (byte*) RASTER#3 ← phi( main::@11/(byte*) RASTER#1 main::@9/(const byte*) RASTER#0 ) to:main::@3 main::@2: scope:[main] from main::@6 to:main::@3 main::@3: scope:[main] from main::@1 main::@2 main::@3 - (byte[256]) buffer2#10 ← phi( main::@1/(byte[256]) buffer2#11 main::@2/(byte[256]) buffer2#10 ) - (byte[256]) buffer1#19 ← phi( main::@1/(byte[256]) buffer1#20 main::@2/(byte[256]) buffer1#19 ) - (byte[1000]) SCREEN#6 ← phi( main::@1/(byte[1000]) SCREEN#7 main::@2/(byte[1000]) SCREEN#6 ) (byte) main::c#4 ← phi( main::@1/(const byte) main::c#0 main::@2/(byte) main::c#1 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#3 main::@2/(byte*) RASTER#1 ) if(*((byte*) RASTER#1)!=(byte/word/signed word) 254) goto main::@3 @@ -2322,15 +1960,13 @@ flip: scope:[flip] from main::@7 flip::@1: scope:[flip] from flip flip::@4 (byte) flip::r#4 ← phi( flip/(const byte) flip::r#0 flip::@4/(byte) flip::r#1 ) (byte) flip::dstIdx#5 ← phi( flip/(const byte) flip::dstIdx#0 flip::@4/(byte) flip::dstIdx#2 ) - (byte[256]) buffer2#3 ← phi( flip/(byte[256]) buffer2#10 flip::@4/(byte[256]) buffer2#3 ) (byte) flip::srcIdx#3 ← phi( flip/(const byte) flip::srcIdx#0 flip::@4/(byte) flip::srcIdx#1 ) - (byte[256]) buffer1#6 ← phi( flip/(byte[256]) buffer1#19 flip::@4/(byte[256]) buffer1#6 ) to:flip::@2 flip::@2: scope:[flip] from flip::@1 flip::@2 (byte) flip::c#2 ← phi( flip::@1/(const byte) flip::c#0 flip::@2/(byte) flip::c#1 ) (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) - *((byte[256]) buffer2#3 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#6 + (byte) flip::srcIdx#2) + *((const byte*) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte*) buffer1#0 + (byte) flip::srcIdx#2) (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 (byte) flip::c#1 ← -- (byte) flip::c#2 @@ -2345,7 +1981,7 @@ flip::@5: scope:[flip] from flip::@4 to:flip::@3 flip::@3: scope:[flip] from flip::@3 flip::@5 (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@5/(const byte) flip::i#0 ) - *((byte[256]) buffer1#6 + (byte) flip::i#2) ← *((byte[256]) buffer2#3 + (byte) flip::i#2) + *((const byte*) buffer1#0 + (byte) flip::i#2) ← *((const byte*) buffer2#0 + (byte) flip::i#2) (byte) flip::i#1 ← ++ (byte) flip::i#2 if((byte) flip::i#1!=(byte/signed byte/word/signed word) 0) goto flip::@3 to:flip::@return @@ -2353,19 +1989,128 @@ flip::@return: scope:[flip] from flip::@3 return to:@return plot: scope:[plot] from main::@10 - (byte*~) plot::$1 ← (byte[1000]) SCREEN#6 - (byte*) plot::line#0 ← (byte*~) plot::$1 + (const byte/word/signed word) plot::$0+(byte/signed byte/word/signed word) 12 + (byte*) plot::line#0 ← (const byte*) plot::$1 + (byte/signed byte/word/signed word) 12 to:plot::@1 plot::@1: scope:[plot] from plot plot::@3 (byte) plot::y#4 ← phi( plot/(const byte) plot::y#0 plot::@3/(byte) plot::y#1 ) (byte*) plot::line#4 ← phi( plot/(byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) (byte) plot::i#3 ← phi( plot/(const byte) plot::i#0 plot::@3/(byte) plot::i#1 ) - (byte[256]) buffer1#8 ← phi( plot/(byte[256]) buffer1#19 plot::@3/(byte[256]) buffer1#8 ) to:plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@2 (byte) plot::x#2 ← phi( plot::@1/(const byte) plot::x#0 plot::@2/(byte) plot::x#1 ) (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) - *((byte*) plot::line#4 + (byte) plot::x#2) ← *((byte[256]) buffer1#8 + (byte) plot::i#2) + *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte*) buffer1#0 + (byte) plot::i#2) + (byte) plot::i#1 ← ++ (byte) plot::i#2 + (byte) plot::x#1 ← ++ (byte) plot::x#2 + if((byte) plot::x#1<(byte/signed byte/word/signed word) 16) goto plot::@2 + to:plot::@3 +plot::@3: scope:[plot] from plot::@2 + (byte*) plot::line#1 ← (byte*) plot::line#4 + (byte/signed byte/word/signed word) 40 + (byte) plot::y#1 ← -- (byte) plot::y#4 + if((byte) plot::y#1!=(byte/signed byte/word/signed word) 0) goto plot::@1 + to:plot::@return +plot::@return: scope:[plot] from plot::@3 + return + to:@return +@4: scope:[] from @begin + call main param-assignment + to:@end +@end: scope:[] from @4 + +Constant (const byte*) plot::line#0 = plot::$1+12 +Succesful SSA optimization Pass2ConstantIdentification +CONTROL FLOW GRAPH +@begin: scope:[] from + to:@4 +main: scope:[main] from @4 + call prepare param-assignment + to:main::@9 +main::@9: scope:[main] from main + to:main::@1 +main::@1: scope:[main] from main::@11 main::@9 + (byte*) RASTER#3 ← phi( main::@11/(byte*) RASTER#1 main::@9/(const byte*) RASTER#0 ) + to:main::@3 +main::@2: scope:[main] from main::@6 + to:main::@3 +main::@3: scope:[main] from main::@1 main::@2 main::@3 + (byte) main::c#4 ← phi( main::@1/(const byte) main::c#0 main::@2/(byte) main::c#1 ) + (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#3 main::@2/(byte*) RASTER#1 ) + if(*((byte*) RASTER#1)!=(byte/word/signed word) 254) goto main::@3 + to:main::@4 +main::@4: scope:[main] from main::@3 main::@4 + if(*((byte*) RASTER#1)!=(byte/word/signed word) 255) goto main::@4 + to:main::@6 +main::@6: scope:[main] from main::@4 + (byte) main::c#1 ← -- (byte) main::c#4 + if((byte) main::c#1!=(byte/signed byte/word/signed word) 0) goto main::@2 + to:main::@7 +main::@7: scope:[main] from main::@6 + call flip param-assignment + to:main::@10 +main::@10: scope:[main] from main::@7 + call plot param-assignment + to:main::@11 +main::@11: scope:[main] from main::@10 + if(true) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@11 + return + to:@return +prepare: scope:[prepare] from main + to:prepare::@1 +prepare::@1: scope:[prepare] from prepare prepare::@1 + (byte) prepare::i#2 ← phi( prepare/(const byte) prepare::i#0 prepare::@1/(byte) prepare::i#1 ) + *((const byte*) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 + (byte) prepare::i#1 ← ++ (byte) prepare::i#2 + if((byte) prepare::i#1!=(byte/signed byte/word/signed word) 0) goto prepare::@1 + to:prepare::@return +prepare::@return: scope:[prepare] from prepare::@1 + return + to:@return +flip: scope:[flip] from main::@7 + to:flip::@1 +flip::@1: scope:[flip] from flip flip::@4 + (byte) flip::r#4 ← phi( flip/(const byte) flip::r#0 flip::@4/(byte) flip::r#1 ) + (byte) flip::dstIdx#5 ← phi( flip/(const byte) flip::dstIdx#0 flip::@4/(byte) flip::dstIdx#2 ) + (byte) flip::srcIdx#3 ← phi( flip/(const byte) flip::srcIdx#0 flip::@4/(byte) flip::srcIdx#1 ) + to:flip::@2 +flip::@2: scope:[flip] from flip::@1 flip::@2 + (byte) flip::c#2 ← phi( flip::@1/(const byte) flip::c#0 flip::@2/(byte) flip::c#1 ) + (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) + (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) + *((const byte*) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte*) buffer1#0 + (byte) flip::srcIdx#2) + (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 + (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 + (byte) flip::c#1 ← -- (byte) flip::c#2 + if((byte) flip::c#1!=(byte/signed byte/word/signed word) 0) goto flip::@2 + to:flip::@4 +flip::@4: scope:[flip] from flip::@2 + (byte) flip::dstIdx#2 ← -- (byte) flip::dstIdx#1 + (byte) flip::r#1 ← -- (byte) flip::r#4 + if((byte) flip::r#1!=(byte/signed byte/word/signed word) 0) goto flip::@1 + to:flip::@5 +flip::@5: scope:[flip] from flip::@4 + to:flip::@3 +flip::@3: scope:[flip] from flip::@3 flip::@5 + (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@5/(const byte) flip::i#0 ) + *((const byte*) buffer1#0 + (byte) flip::i#2) ← *((const byte*) buffer2#0 + (byte) flip::i#2) + (byte) flip::i#1 ← ++ (byte) flip::i#2 + if((byte) flip::i#1!=(byte/signed byte/word/signed word) 0) goto flip::@3 + to:flip::@return +flip::@return: scope:[flip] from flip::@3 + return + to:@return +plot: scope:[plot] from main::@10 + to:plot::@1 +plot::@1: scope:[plot] from plot plot::@3 + (byte) plot::y#4 ← phi( plot/(const byte) plot::y#0 plot::@3/(byte) plot::y#1 ) + (byte*) plot::line#4 ← phi( plot/(const byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) + (byte) plot::i#3 ← phi( plot/(const byte) plot::i#0 plot::@3/(byte) plot::i#1 ) + to:plot::@2 +plot::@2: scope:[plot] from plot::@1 plot::@2 + (byte) plot::x#2 ← phi( plot::@1/(const byte) plot::x#0 plot::@2/(byte) plot::x#1 ) + (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) + *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte*) buffer1#0 + (byte) plot::i#2) (byte) plot::i#1 ← ++ (byte) plot::i#2 (byte) plot::x#1 ← ++ (byte) plot::x#2 if((byte) plot::x#1<(byte/signed byte/word/signed word) 16) goto plot::@2 @@ -2395,15 +2140,9 @@ main: scope:[main] from @4 call prepare param-assignment to:main::@1 main::@1: scope:[main] from main main::@11 - (byte[256]) buffer2#11 ← phi( main::@11/(byte[256]) buffer2#10 main/(const byte*) buffer2#0 ) - (byte[256]) buffer1#20 ← phi( main::@11/(byte[256]) buffer1#19 main/(const byte*) buffer1#0 ) - (byte[1000]) SCREEN#7 ← phi( main::@11/(byte[1000]) SCREEN#6 main/(const byte*) SCREEN#0 ) (byte*) RASTER#3 ← phi( main::@11/(byte*) RASTER#1 main/(const byte*) RASTER#0 ) to:main::@3 main::@3: scope:[main] from main::@1 main::@3 main::@6 - (byte[256]) buffer2#10 ← phi( main::@1/(byte[256]) buffer2#11 main::@6/(byte[256]) buffer2#10 ) - (byte[256]) buffer1#19 ← phi( main::@1/(byte[256]) buffer1#20 main::@6/(byte[256]) buffer1#19 ) - (byte[1000]) SCREEN#6 ← phi( main::@1/(byte[1000]) SCREEN#7 main::@6/(byte[1000]) SCREEN#6 ) (byte) main::c#4 ← phi( main::@1/(const byte) main::c#0 main::@6/(byte) main::c#1 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#3 main::@6/(byte*) RASTER#1 ) if(*((byte*) RASTER#1)!=(byte/word/signed word) 254) goto main::@3 @@ -2443,15 +2182,13 @@ flip: scope:[flip] from main::@7 flip::@1: scope:[flip] from flip flip::@4 (byte) flip::r#4 ← phi( flip/(const byte) flip::r#0 flip::@4/(byte) flip::r#1 ) (byte) flip::dstIdx#5 ← phi( flip/(const byte) flip::dstIdx#0 flip::@4/(byte) flip::dstIdx#2 ) - (byte[256]) buffer2#3 ← phi( flip/(byte[256]) buffer2#10 flip::@4/(byte[256]) buffer2#3 ) (byte) flip::srcIdx#3 ← phi( flip/(const byte) flip::srcIdx#0 flip::@4/(byte) flip::srcIdx#1 ) - (byte[256]) buffer1#6 ← phi( flip/(byte[256]) buffer1#19 flip::@4/(byte[256]) buffer1#6 ) to:flip::@2 flip::@2: scope:[flip] from flip::@1 flip::@2 (byte) flip::c#2 ← phi( flip::@1/(const byte) flip::c#0 flip::@2/(byte) flip::c#1 ) (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) - *((byte[256]) buffer2#3 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#6 + (byte) flip::srcIdx#2) + *((const byte*) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte*) buffer1#0 + (byte) flip::srcIdx#2) (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 (byte) flip::c#1 ← -- (byte) flip::c#2 @@ -2464,7 +2201,7 @@ flip::@4: scope:[flip] from flip::@2 to:flip::@3 flip::@3: scope:[flip] from flip::@3 flip::@4 (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@4/(const byte) flip::i#0 ) - *((byte[256]) buffer1#6 + (byte) flip::i#2) ← *((byte[256]) buffer2#3 + (byte) flip::i#2) + *((const byte*) buffer1#0 + (byte) flip::i#2) ← *((const byte*) buffer2#0 + (byte) flip::i#2) (byte) flip::i#1 ← ++ (byte) flip::i#2 if((byte) flip::i#1!=(byte/signed byte/word/signed word) 0) goto flip::@3 to:flip::@return @@ -2472,19 +2209,16 @@ flip::@return: scope:[flip] from flip::@3 return to:@return plot: scope:[plot] from main::@10 - (byte*~) plot::$1 ← (byte[1000]) SCREEN#6 - (byte*) plot::line#0 ← (byte*~) plot::$1 + (const byte/word/signed word) plot::$0+(byte/signed byte/word/signed word) 12 to:plot::@1 plot::@1: scope:[plot] from plot plot::@3 (byte) plot::y#4 ← phi( plot/(const byte) plot::y#0 plot::@3/(byte) plot::y#1 ) - (byte*) plot::line#4 ← phi( plot/(byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) + (byte*) plot::line#4 ← phi( plot/(const byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) (byte) plot::i#3 ← phi( plot/(const byte) plot::i#0 plot::@3/(byte) plot::i#1 ) - (byte[256]) buffer1#8 ← phi( plot/(byte[256]) buffer1#19 plot::@3/(byte[256]) buffer1#8 ) to:plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@2 (byte) plot::x#2 ← phi( plot::@1/(const byte) plot::x#0 plot::@2/(byte) plot::x#1 ) (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) - *((byte*) plot::line#4 + (byte) plot::x#2) ← *((byte[256]) buffer1#8 + (byte) plot::i#2) + *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte*) buffer1#0 + (byte) plot::i#2) (byte) plot::i#1 ← ++ (byte) plot::i#2 (byte) plot::x#1 ← ++ (byte) plot::x#2 if((byte) plot::x#1<(byte/signed byte/word/signed word) 16) goto plot::@2 @@ -2502,17 +2236,7 @@ plot::@return: scope:[plot] from plot::@3 to:@end @end: scope:[] from @4 -Not aliassing across scopes: buffer1#6 buffer1#19 -Not aliassing across scopes: buffer2#3 buffer2#10 -Not aliassing across scopes: plot::$1 SCREEN#6 -Not aliassing across scopes: buffer1#8 buffer1#19 Self Phi Eliminated (byte*) RASTER#1 -Self Phi Eliminated (byte[1000]) SCREEN#6 -Self Phi Eliminated (byte[256]) buffer1#19 -Self Phi Eliminated (byte[256]) buffer2#10 -Self Phi Eliminated (byte[256]) buffer1#6 -Self Phi Eliminated (byte[256]) buffer2#3 -Self Phi Eliminated (byte[256]) buffer1#8 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -2521,15 +2245,9 @@ main: scope:[main] from @4 call prepare param-assignment to:main::@1 main::@1: scope:[main] from main main::@11 - (byte[256]) buffer2#11 ← phi( main::@11/(byte[256]) buffer2#10 main/(const byte*) buffer2#0 ) - (byte[256]) buffer1#20 ← phi( main::@11/(byte[256]) buffer1#19 main/(const byte*) buffer1#0 ) - (byte[1000]) SCREEN#7 ← phi( main::@11/(byte[1000]) SCREEN#6 main/(const byte*) SCREEN#0 ) (byte*) RASTER#3 ← phi( main::@11/(byte*) RASTER#1 main/(const byte*) RASTER#0 ) to:main::@3 main::@3: scope:[main] from main::@1 main::@3 main::@6 - (byte[256]) buffer2#10 ← phi( main::@1/(byte[256]) buffer2#11 ) - (byte[256]) buffer1#19 ← phi( main::@1/(byte[256]) buffer1#20 ) - (byte[1000]) SCREEN#6 ← phi( main::@1/(byte[1000]) SCREEN#7 ) (byte) main::c#4 ← phi( main::@1/(const byte) main::c#0 main::@6/(byte) main::c#1 ) (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#3 ) if(*((byte*) RASTER#1)!=(byte/word/signed word) 254) goto main::@3 @@ -2569,15 +2287,13 @@ flip: scope:[flip] from main::@7 flip::@1: scope:[flip] from flip flip::@4 (byte) flip::r#4 ← phi( flip/(const byte) flip::r#0 flip::@4/(byte) flip::r#1 ) (byte) flip::dstIdx#5 ← phi( flip/(const byte) flip::dstIdx#0 flip::@4/(byte) flip::dstIdx#2 ) - (byte[256]) buffer2#3 ← phi( flip/(byte[256]) buffer2#10 ) (byte) flip::srcIdx#3 ← phi( flip/(const byte) flip::srcIdx#0 flip::@4/(byte) flip::srcIdx#1 ) - (byte[256]) buffer1#6 ← phi( flip/(byte[256]) buffer1#19 ) to:flip::@2 flip::@2: scope:[flip] from flip::@1 flip::@2 (byte) flip::c#2 ← phi( flip::@1/(const byte) flip::c#0 flip::@2/(byte) flip::c#1 ) (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) - *((byte[256]) buffer2#3 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#6 + (byte) flip::srcIdx#2) + *((const byte*) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte*) buffer1#0 + (byte) flip::srcIdx#2) (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 (byte) flip::c#1 ← -- (byte) flip::c#2 @@ -2590,7 +2306,7 @@ flip::@4: scope:[flip] from flip::@2 to:flip::@3 flip::@3: scope:[flip] from flip::@3 flip::@4 (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@4/(const byte) flip::i#0 ) - *((byte[256]) buffer1#6 + (byte) flip::i#2) ← *((byte[256]) buffer2#3 + (byte) flip::i#2) + *((const byte*) buffer1#0 + (byte) flip::i#2) ← *((const byte*) buffer2#0 + (byte) flip::i#2) (byte) flip::i#1 ← ++ (byte) flip::i#2 if((byte) flip::i#1!=(byte/signed byte/word/signed word) 0) goto flip::@3 to:flip::@return @@ -2598,19 +2314,16 @@ flip::@return: scope:[flip] from flip::@3 return to:@return plot: scope:[plot] from main::@10 - (byte*~) plot::$1 ← (byte[1000]) SCREEN#6 - (byte*) plot::line#0 ← (byte*~) plot::$1 + (const byte/word/signed word) plot::$0+(byte/signed byte/word/signed word) 12 to:plot::@1 plot::@1: scope:[plot] from plot plot::@3 (byte) plot::y#4 ← phi( plot/(const byte) plot::y#0 plot::@3/(byte) plot::y#1 ) - (byte*) plot::line#4 ← phi( plot/(byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) + (byte*) plot::line#4 ← phi( plot/(const byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) (byte) plot::i#3 ← phi( plot/(const byte) plot::i#0 plot::@3/(byte) plot::i#1 ) - (byte[256]) buffer1#8 ← phi( plot/(byte[256]) buffer1#19 ) to:plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@2 (byte) plot::x#2 ← phi( plot::@1/(const byte) plot::x#0 plot::@2/(byte) plot::x#1 ) (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) - *((byte*) plot::line#4 + (byte) plot::x#2) ← *((byte[256]) buffer1#8 + (byte) plot::i#2) + *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte*) buffer1#0 + (byte) plot::i#2) (byte) plot::i#1 ← ++ (byte) plot::i#2 (byte) plot::x#1 ← ++ (byte) plot::x#2 if((byte) plot::x#1<(byte/signed byte/word/signed word) 16) goto plot::@2 @@ -2629,12 +2342,6 @@ plot::@return: scope:[plot] from plot::@3 @end: scope:[] from @4 Redundant Phi (byte*) RASTER#1 (byte*) RASTER#3 -Redundant Phi (byte[1000]) SCREEN#6 (byte[1000]) SCREEN#7 -Redundant Phi (byte[256]) buffer1#19 (byte[256]) buffer1#20 -Redundant Phi (byte[256]) buffer2#10 (byte[256]) buffer2#11 -Redundant Phi (byte[256]) buffer1#6 (byte[256]) buffer1#19 -Redundant Phi (byte[256]) buffer2#3 (byte[256]) buffer2#10 -Redundant Phi (byte[256]) buffer1#8 (byte[256]) buffer1#19 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -2643,9 +2350,6 @@ main: scope:[main] from @4 call prepare param-assignment to:main::@1 main::@1: scope:[main] from main main::@11 - (byte[256]) buffer2#11 ← phi( main::@11/(byte[256]) buffer2#11 main/(const byte*) buffer2#0 ) - (byte[256]) buffer1#20 ← phi( main::@11/(byte[256]) buffer1#20 main/(const byte*) buffer1#0 ) - (byte[1000]) SCREEN#7 ← phi( main::@11/(byte[1000]) SCREEN#7 main/(const byte*) SCREEN#0 ) (byte*) RASTER#3 ← phi( main::@11/(byte*) RASTER#3 main/(const byte*) RASTER#0 ) to:main::@3 main::@3: scope:[main] from main::@1 main::@3 main::@6 @@ -2693,7 +2397,7 @@ flip::@2: scope:[flip] from flip::@1 flip::@2 (byte) flip::c#2 ← phi( flip::@1/(const byte) flip::c#0 flip::@2/(byte) flip::c#1 ) (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) - *((byte[256]) buffer2#11 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#20 + (byte) flip::srcIdx#2) + *((const byte*) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte*) buffer1#0 + (byte) flip::srcIdx#2) (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 (byte) flip::c#1 ← -- (byte) flip::c#2 @@ -2706,7 +2410,7 @@ flip::@4: scope:[flip] from flip::@2 to:flip::@3 flip::@3: scope:[flip] from flip::@3 flip::@4 (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@4/(const byte) flip::i#0 ) - *((byte[256]) buffer1#20 + (byte) flip::i#2) ← *((byte[256]) buffer2#11 + (byte) flip::i#2) + *((const byte*) buffer1#0 + (byte) flip::i#2) ← *((const byte*) buffer2#0 + (byte) flip::i#2) (byte) flip::i#1 ← ++ (byte) flip::i#2 if((byte) flip::i#1!=(byte/signed byte/word/signed word) 0) goto flip::@3 to:flip::@return @@ -2714,18 +2418,16 @@ flip::@return: scope:[flip] from flip::@3 return to:@return plot: scope:[plot] from main::@10 - (byte*~) plot::$1 ← (byte[1000]) SCREEN#7 - (byte*) plot::line#0 ← (byte*~) plot::$1 + (const byte/word/signed word) plot::$0+(byte/signed byte/word/signed word) 12 to:plot::@1 plot::@1: scope:[plot] from plot plot::@3 (byte) plot::y#4 ← phi( plot/(const byte) plot::y#0 plot::@3/(byte) plot::y#1 ) - (byte*) plot::line#4 ← phi( plot/(byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) + (byte*) plot::line#4 ← phi( plot/(const byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) (byte) plot::i#3 ← phi( plot/(const byte) plot::i#0 plot::@3/(byte) plot::i#1 ) to:plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@2 (byte) plot::x#2 ← phi( plot::@1/(const byte) plot::x#0 plot::@2/(byte) plot::x#1 ) (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) - *((byte*) plot::line#4 + (byte) plot::x#2) ← *((byte[256]) buffer1#20 + (byte) plot::i#2) + *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte*) buffer1#0 + (byte) plot::i#2) (byte) plot::i#1 ← ++ (byte) plot::i#2 (byte) plot::x#1 ← ++ (byte) plot::x#2 if((byte) plot::x#1<(byte/signed byte/word/signed word) 16) goto plot::@2 @@ -2745,14 +2447,7 @@ plot::@return: scope:[plot] from plot::@3 Multiple usages for variable. Not optimizing sub-constant (byte) prepare::i#2 Not aliassing identity: RASTER#3 RASTER#3 -Not aliassing identity: SCREEN#7 SCREEN#7 -Not aliassing identity: buffer1#20 buffer1#20 -Not aliassing identity: buffer2#11 buffer2#11 -Not aliassing across scopes: plot::$1 SCREEN#7 Self Phi Eliminated (byte*) RASTER#3 -Self Phi Eliminated (byte[1000]) SCREEN#7 -Self Phi Eliminated (byte[256]) buffer1#20 -Self Phi Eliminated (byte[256]) buffer2#11 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -2761,9 +2456,6 @@ main: scope:[main] from @4 call prepare param-assignment to:main::@1 main::@1: scope:[main] from main main::@11 - (byte[256]) buffer2#11 ← phi( main/(const byte*) buffer2#0 ) - (byte[256]) buffer1#20 ← phi( main/(const byte*) buffer1#0 ) - (byte[1000]) SCREEN#7 ← phi( main/(const byte*) SCREEN#0 ) (byte*) RASTER#3 ← phi( main/(const byte*) RASTER#0 ) to:main::@3 main::@3: scope:[main] from main::@1 main::@3 main::@6 @@ -2811,7 +2503,7 @@ flip::@2: scope:[flip] from flip::@1 flip::@2 (byte) flip::c#2 ← phi( flip::@1/(const byte) flip::c#0 flip::@2/(byte) flip::c#1 ) (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) - *((byte[256]) buffer2#11 + (byte) flip::dstIdx#3) ← *((byte[256]) buffer1#20 + (byte) flip::srcIdx#2) + *((const byte*) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte*) buffer1#0 + (byte) flip::srcIdx#2) (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 (byte) flip::c#1 ← -- (byte) flip::c#2 @@ -2824,7 +2516,7 @@ flip::@4: scope:[flip] from flip::@2 to:flip::@3 flip::@3: scope:[flip] from flip::@3 flip::@4 (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@4/(const byte) flip::i#0 ) - *((byte[256]) buffer1#20 + (byte) flip::i#2) ← *((byte[256]) buffer2#11 + (byte) flip::i#2) + *((const byte*) buffer1#0 + (byte) flip::i#2) ← *((const byte*) buffer2#0 + (byte) flip::i#2) (byte) flip::i#1 ← ++ (byte) flip::i#2 if((byte) flip::i#1!=(byte/signed byte/word/signed word) 0) goto flip::@3 to:flip::@return @@ -2832,18 +2524,16 @@ flip::@return: scope:[flip] from flip::@3 return to:@return plot: scope:[plot] from main::@10 - (byte*~) plot::$1 ← (byte[1000]) SCREEN#7 - (byte*) plot::line#0 ← (byte*~) plot::$1 + (const byte/word/signed word) plot::$0+(byte/signed byte/word/signed word) 12 to:plot::@1 plot::@1: scope:[plot] from plot plot::@3 (byte) plot::y#4 ← phi( plot/(const byte) plot::y#0 plot::@3/(byte) plot::y#1 ) - (byte*) plot::line#4 ← phi( plot/(byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) + (byte*) plot::line#4 ← phi( plot/(const byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) (byte) plot::i#3 ← phi( plot/(const byte) plot::i#0 plot::@3/(byte) plot::i#1 ) to:plot::@2 plot::@2: scope:[plot] from plot::@1 plot::@2 (byte) plot::x#2 ← phi( plot::@1/(const byte) plot::x#0 plot::@2/(byte) plot::x#1 ) (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) - *((byte*) plot::line#4 + (byte) plot::x#2) ← *((byte[256]) buffer1#20 + (byte) plot::i#2) + *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte*) buffer1#0 + (byte) plot::i#2) (byte) plot::i#1 ← ++ (byte) plot::i#2 (byte) plot::x#1 ← ++ (byte) plot::x#2 if((byte) plot::x#1<(byte/signed byte/word/signed word) 16) goto plot::@2 @@ -2862,220 +2552,8 @@ plot::@return: scope:[plot] from plot::@3 @end: scope:[] from @4 Redundant Phi (byte*) RASTER#3 (const byte*) RASTER#0 -Redundant Phi (byte[1000]) SCREEN#7 (const byte*) SCREEN#0 -Redundant Phi (byte[256]) buffer1#20 (const byte*) buffer1#0 -Redundant Phi (byte[256]) buffer2#11 (const byte*) buffer2#0 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH -@begin: scope:[] from - to:@4 -main: scope:[main] from @4 - call prepare param-assignment - to:main::@1 -main::@1: scope:[main] from main main::@11 - to:main::@3 -main::@3: scope:[main] from main::@1 main::@3 main::@6 - (byte) main::c#4 ← phi( main::@1/(const byte) main::c#0 main::@6/(byte) main::c#1 ) - if(*((const byte*) RASTER#0)!=(byte/word/signed word) 254) goto main::@3 - to:main::@4 -main::@4: scope:[main] from main::@3 main::@4 - if(*((const byte*) RASTER#0)!=(byte/word/signed word) 255) goto main::@4 - to:main::@6 -main::@6: scope:[main] from main::@4 - (byte) main::c#1 ← -- (byte) main::c#4 - if((byte) main::c#1!=(byte/signed byte/word/signed word) 0) goto main::@3 - to:main::@7 -main::@7: scope:[main] from main::@6 - call flip param-assignment - to:main::@10 -main::@10: scope:[main] from main::@7 - call plot param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 - if(true) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@11 - return - to:@return -prepare: scope:[prepare] from main - to:prepare::@1 -prepare::@1: scope:[prepare] from prepare prepare::@1 - (byte) prepare::i#2 ← phi( prepare/(const byte) prepare::i#0 prepare::@1/(byte) prepare::i#1 ) - *((const byte*) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 - (byte) prepare::i#1 ← ++ (byte) prepare::i#2 - if((byte) prepare::i#1!=(byte/signed byte/word/signed word) 0) goto prepare::@1 - to:prepare::@return -prepare::@return: scope:[prepare] from prepare::@1 - return - to:@return -flip: scope:[flip] from main::@7 - to:flip::@1 -flip::@1: scope:[flip] from flip flip::@4 - (byte) flip::r#4 ← phi( flip/(const byte) flip::r#0 flip::@4/(byte) flip::r#1 ) - (byte) flip::dstIdx#5 ← phi( flip/(const byte) flip::dstIdx#0 flip::@4/(byte) flip::dstIdx#2 ) - (byte) flip::srcIdx#3 ← phi( flip/(const byte) flip::srcIdx#0 flip::@4/(byte) flip::srcIdx#1 ) - to:flip::@2 -flip::@2: scope:[flip] from flip::@1 flip::@2 - (byte) flip::c#2 ← phi( flip::@1/(const byte) flip::c#0 flip::@2/(byte) flip::c#1 ) - (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) - (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) - *((const byte*) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte*) buffer1#0 + (byte) flip::srcIdx#2) - (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 - (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 - (byte) flip::c#1 ← -- (byte) flip::c#2 - if((byte) flip::c#1!=(byte/signed byte/word/signed word) 0) goto flip::@2 - to:flip::@4 -flip::@4: scope:[flip] from flip::@2 - (byte) flip::dstIdx#2 ← -- (byte) flip::dstIdx#1 - (byte) flip::r#1 ← -- (byte) flip::r#4 - if((byte) flip::r#1!=(byte/signed byte/word/signed word) 0) goto flip::@1 - to:flip::@3 -flip::@3: scope:[flip] from flip::@3 flip::@4 - (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@4/(const byte) flip::i#0 ) - *((const byte*) buffer1#0 + (byte) flip::i#2) ← *((const byte*) buffer2#0 + (byte) flip::i#2) - (byte) flip::i#1 ← ++ (byte) flip::i#2 - if((byte) flip::i#1!=(byte/signed byte/word/signed word) 0) goto flip::@3 - to:flip::@return -flip::@return: scope:[flip] from flip::@3 - return - to:@return -plot: scope:[plot] from main::@10 - (byte*~) plot::$1 ← (const byte*) SCREEN#0 - (byte*) plot::line#0 ← (byte*~) plot::$1 + (const byte/word/signed word) plot::$0+(byte/signed byte/word/signed word) 12 - to:plot::@1 -plot::@1: scope:[plot] from plot plot::@3 - (byte) plot::y#4 ← phi( plot/(const byte) plot::y#0 plot::@3/(byte) plot::y#1 ) - (byte*) plot::line#4 ← phi( plot/(byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) - (byte) plot::i#3 ← phi( plot/(const byte) plot::i#0 plot::@3/(byte) plot::i#1 ) - to:plot::@2 -plot::@2: scope:[plot] from plot::@1 plot::@2 - (byte) plot::x#2 ← phi( plot::@1/(const byte) plot::x#0 plot::@2/(byte) plot::x#1 ) - (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) - *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte*) buffer1#0 + (byte) plot::i#2) - (byte) plot::i#1 ← ++ (byte) plot::i#2 - (byte) plot::x#1 ← ++ (byte) plot::x#2 - if((byte) plot::x#1<(byte/signed byte/word/signed word) 16) goto plot::@2 - to:plot::@3 -plot::@3: scope:[plot] from plot::@2 - (byte*) plot::line#1 ← (byte*) plot::line#4 + (byte/signed byte/word/signed word) 40 - (byte) plot::y#1 ← -- (byte) plot::y#4 - if((byte) plot::y#1!=(byte/signed byte/word/signed word) 0) goto plot::@1 - to:plot::@return -plot::@return: scope:[plot] from plot::@3 - return - to:@return -@4: scope:[] from @begin - call main param-assignment - to:@end -@end: scope:[] from @4 - -Constant (const byte*) plot::$1 = SCREEN#0 -Succesful SSA optimization Pass2ConstantIdentification -CONTROL FLOW GRAPH -@begin: scope:[] from - to:@4 -main: scope:[main] from @4 - call prepare param-assignment - to:main::@1 -main::@1: scope:[main] from main main::@11 - to:main::@3 -main::@3: scope:[main] from main::@1 main::@3 main::@6 - (byte) main::c#4 ← phi( main::@1/(const byte) main::c#0 main::@6/(byte) main::c#1 ) - if(*((const byte*) RASTER#0)!=(byte/word/signed word) 254) goto main::@3 - to:main::@4 -main::@4: scope:[main] from main::@3 main::@4 - if(*((const byte*) RASTER#0)!=(byte/word/signed word) 255) goto main::@4 - to:main::@6 -main::@6: scope:[main] from main::@4 - (byte) main::c#1 ← -- (byte) main::c#4 - if((byte) main::c#1!=(byte/signed byte/word/signed word) 0) goto main::@3 - to:main::@7 -main::@7: scope:[main] from main::@6 - call flip param-assignment - to:main::@10 -main::@10: scope:[main] from main::@7 - call plot param-assignment - to:main::@11 -main::@11: scope:[main] from main::@10 - if(true) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@11 - return - to:@return -prepare: scope:[prepare] from main - to:prepare::@1 -prepare::@1: scope:[prepare] from prepare prepare::@1 - (byte) prepare::i#2 ← phi( prepare/(const byte) prepare::i#0 prepare::@1/(byte) prepare::i#1 ) - *((const byte*) buffer1#0 + (byte) prepare::i#2) ← (byte) prepare::i#2 - (byte) prepare::i#1 ← ++ (byte) prepare::i#2 - if((byte) prepare::i#1!=(byte/signed byte/word/signed word) 0) goto prepare::@1 - to:prepare::@return -prepare::@return: scope:[prepare] from prepare::@1 - return - to:@return -flip: scope:[flip] from main::@7 - to:flip::@1 -flip::@1: scope:[flip] from flip flip::@4 - (byte) flip::r#4 ← phi( flip/(const byte) flip::r#0 flip::@4/(byte) flip::r#1 ) - (byte) flip::dstIdx#5 ← phi( flip/(const byte) flip::dstIdx#0 flip::@4/(byte) flip::dstIdx#2 ) - (byte) flip::srcIdx#3 ← phi( flip/(const byte) flip::srcIdx#0 flip::@4/(byte) flip::srcIdx#1 ) - to:flip::@2 -flip::@2: scope:[flip] from flip::@1 flip::@2 - (byte) flip::c#2 ← phi( flip::@1/(const byte) flip::c#0 flip::@2/(byte) flip::c#1 ) - (byte) flip::dstIdx#3 ← phi( flip::@1/(byte) flip::dstIdx#5 flip::@2/(byte) flip::dstIdx#1 ) - (byte) flip::srcIdx#2 ← phi( flip::@1/(byte) flip::srcIdx#3 flip::@2/(byte) flip::srcIdx#1 ) - *((const byte*) buffer2#0 + (byte) flip::dstIdx#3) ← *((const byte*) buffer1#0 + (byte) flip::srcIdx#2) - (byte) flip::srcIdx#1 ← ++ (byte) flip::srcIdx#2 - (byte) flip::dstIdx#1 ← (byte) flip::dstIdx#3 + (byte/signed byte/word/signed word) 16 - (byte) flip::c#1 ← -- (byte) flip::c#2 - if((byte) flip::c#1!=(byte/signed byte/word/signed word) 0) goto flip::@2 - to:flip::@4 -flip::@4: scope:[flip] from flip::@2 - (byte) flip::dstIdx#2 ← -- (byte) flip::dstIdx#1 - (byte) flip::r#1 ← -- (byte) flip::r#4 - if((byte) flip::r#1!=(byte/signed byte/word/signed word) 0) goto flip::@1 - to:flip::@3 -flip::@3: scope:[flip] from flip::@3 flip::@4 - (byte) flip::i#2 ← phi( flip::@3/(byte) flip::i#1 flip::@4/(const byte) flip::i#0 ) - *((const byte*) buffer1#0 + (byte) flip::i#2) ← *((const byte*) buffer2#0 + (byte) flip::i#2) - (byte) flip::i#1 ← ++ (byte) flip::i#2 - if((byte) flip::i#1!=(byte/signed byte/word/signed word) 0) goto flip::@3 - to:flip::@return -flip::@return: scope:[flip] from flip::@3 - return - to:@return -plot: scope:[plot] from main::@10 - (byte*) plot::line#0 ← (const byte*) plot::$1 + (const byte/word/signed word) plot::$0+(byte/signed byte/word/signed word) 12 - to:plot::@1 -plot::@1: scope:[plot] from plot plot::@3 - (byte) plot::y#4 ← phi( plot/(const byte) plot::y#0 plot::@3/(byte) plot::y#1 ) - (byte*) plot::line#4 ← phi( plot/(byte*) plot::line#0 plot::@3/(byte*) plot::line#1 ) - (byte) plot::i#3 ← phi( plot/(const byte) plot::i#0 plot::@3/(byte) plot::i#1 ) - to:plot::@2 -plot::@2: scope:[plot] from plot::@1 plot::@2 - (byte) plot::x#2 ← phi( plot::@1/(const byte) plot::x#0 plot::@2/(byte) plot::x#1 ) - (byte) plot::i#2 ← phi( plot::@1/(byte) plot::i#3 plot::@2/(byte) plot::i#1 ) - *((byte*) plot::line#4 + (byte) plot::x#2) ← *((const byte*) buffer1#0 + (byte) plot::i#2) - (byte) plot::i#1 ← ++ (byte) plot::i#2 - (byte) plot::x#1 ← ++ (byte) plot::x#2 - if((byte) plot::x#1<(byte/signed byte/word/signed word) 16) goto plot::@2 - to:plot::@3 -plot::@3: scope:[plot] from plot::@2 - (byte*) plot::line#1 ← (byte*) plot::line#4 + (byte/signed byte/word/signed word) 40 - (byte) plot::y#1 ← -- (byte) plot::y#4 - if((byte) plot::y#1!=(byte/signed byte/word/signed word) 0) goto plot::@1 - to:plot::@return -plot::@return: scope:[plot] from plot::@3 - return - to:@return -@4: scope:[] from @begin - call main param-assignment - to:@end -@end: scope:[] from @4 - -Constant (const byte*) plot::line#0 = plot::$1+plot::$0+12 -Succesful SSA optimization Pass2ConstantIdentification -CONTROL FLOW GRAPH @begin: scope:[] from to:@4 main: scope:[main] from @4 @@ -3308,7 +2786,7 @@ Inlining constant with var siblings (const byte*) plot::line#0 Inlining constant with var siblings (const byte*) plot::line#0 Constant inlined plot::line#0 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word) 5*(byte/signed byte/word/signed word) 40+(byte/signed byte/word/signed word) 12 Constant inlined plot::$0 = (byte/signed byte/word/signed word) 5*(byte/signed byte/word/signed word) 40 -Constant inlined plot::$1 = (const byte*) SCREEN#0 +Constant inlined plot::$1 = (const byte*) SCREEN#0+(byte/signed byte/word/signed word) 5*(byte/signed byte/word/signed word) 40 Constant inlined plot::x#0 = (byte/signed byte/word/signed word) 0 Constant inlined plot::y#0 = (byte/signed byte/word/signed word) 16 Constant inlined flip::dstIdx#0 = (byte/signed byte/word/signed word) 15 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/halfscii.log b/src/main/java/dk/camelot64/kickc/test/ref/halfscii.log index 4ca7235b9..bebaee83b 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/halfscii.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/halfscii.log @@ -585,7 +585,6 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @1 (byte*) D018#13 ← phi( @1/(byte*) D018#14 ) (byte*) SCREEN#12 ← phi( @1/(byte*) SCREEN#13 ) - (byte[]) bits_count#5 ← phi( @1/(byte[]) bits_count#10 ) (byte*) CHARSET4#1 ← phi( @1/(byte*) CHARSET4#2 ) (byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#3 ) (byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#3 ) @@ -600,7 +599,6 @@ main::@1: scope:[main] from main main::@5 (byte*) PROCPORT#11 ← phi( main/(byte*) PROCPORT#1 main::@5/(byte*) PROCPORT#4 ) (byte*) CHARGEN#10 ← phi( main/(byte*) CHARGEN#1 main::@5/(byte*) CHARGEN#2 ) (byte*) main::charset4#9 ← phi( main/(byte*) main::charset4#0 main::@5/(byte*) main::charset4#1 ) - (byte[]) bits_count#1 ← phi( main/(byte[]) bits_count#5 main::@5/(byte[]) bits_count#6 ) (byte*) main::chargen#2 ← phi( main/(byte*) main::chargen#0 main::@5/(byte*) main::chargen#1 ) (byte) main::bits_gen#0 ← (byte/signed byte/word/signed word) 0 (byte*~) main::$0 ← (byte*) main::chargen#2 + (byte/signed byte/word/signed word) 1 @@ -611,7 +609,7 @@ main::@1: scope:[main] from main main::@5 (byte~) main::$4 ← (byte~) main::$1 | (byte~) main::$3 (byte~) main::$5 ← (byte~) main::$4 >> (byte/signed byte/word/signed word) 1 (byte~) main::$6 ← (byte~) main::$5 >> (byte/signed byte/word/signed word) 2 - (byte) main::bits#0 ← *((byte[]) bits_count#1 + (byte~) main::$6) + (byte) main::bits#0 ← *((byte[]) bits_count#0 + (byte~) main::$6) (boolean~) main::$7 ← (byte) main::bits#0 >= (byte/signed byte/word/signed word) 2 (boolean~) main::$8 ← ! (boolean~) main::$7 if((boolean~) main::$8) goto main::@2 @@ -622,7 +620,6 @@ main::@2: scope:[main] from main::@1 main::@7 (byte*) PROCPORT#9 ← phi( main::@1/(byte*) PROCPORT#11 main::@7/(byte*) PROCPORT#12 ) (byte*) CHARGEN#8 ← phi( main::@1/(byte*) CHARGEN#10 main::@7/(byte*) CHARGEN#11 ) (byte*) main::charset4#7 ← phi( main::@1/(byte*) main::charset4#9 main::@7/(byte*) main::charset4#10 ) - (byte[]) bits_count#2 ← phi( main::@1/(byte[]) bits_count#1 main::@7/(byte[]) bits_count#7 ) (byte*) main::chargen1#1 ← phi( main::@1/(byte*) main::chargen1#0 main::@7/(byte*) main::chargen1#4 ) (byte*) main::chargen#3 ← phi( main::@1/(byte*) main::chargen#2 main::@7/(byte*) main::chargen#7 ) (byte) main::bits_gen#9 ← phi( main::@1/(byte) main::bits_gen#0 main::@7/(byte) main::bits_gen#2 ) @@ -633,7 +630,7 @@ main::@2: scope:[main] from main::@1 main::@7 (byte~) main::$13 ← (byte~) main::$12 >> (byte/signed byte/word/signed word) 2 (byte~) main::$14 ← (byte~) main::$11 | (byte~) main::$13 (byte~) main::$15 ← (byte~) main::$14 >> (byte/signed byte/word/signed word) 1 - (byte) main::bits#1 ← *((byte[]) bits_count#2 + (byte~) main::$15) + (byte) main::bits#1 ← *((byte[]) bits_count#0 + (byte~) main::$15) (boolean~) main::$16 ← (byte) main::bits#1 >= (byte/signed byte/word/signed word) 2 (boolean~) main::$17 ← ! (boolean~) main::$16 if((boolean~) main::$17) goto main::@3 @@ -644,7 +641,6 @@ main::@7: scope:[main] from main::@1 (byte*) PROCPORT#12 ← phi( main::@1/(byte*) PROCPORT#11 ) (byte*) CHARGEN#11 ← phi( main::@1/(byte*) CHARGEN#10 ) (byte*) main::charset4#10 ← phi( main::@1/(byte*) main::charset4#9 ) - (byte[]) bits_count#7 ← phi( main::@1/(byte[]) bits_count#1 ) (byte*) main::chargen1#4 ← phi( main::@1/(byte*) main::chargen1#0 ) (byte*) main::chargen#7 ← phi( main::@1/(byte*) main::chargen#2 ) (byte) main::bits_gen#10 ← phi( main::@1/(byte) main::bits_gen#0 ) @@ -657,7 +653,6 @@ main::@3: scope:[main] from main::@2 main::@8 (byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#9 main::@8/(byte*) PROCPORT#10 ) (byte*) CHARGEN#6 ← phi( main::@2/(byte*) CHARGEN#8 main::@8/(byte*) CHARGEN#9 ) (byte*) main::charset4#5 ← phi( main::@2/(byte*) main::charset4#7 main::@8/(byte*) main::charset4#8 ) - (byte[]) bits_count#3 ← phi( main::@2/(byte[]) bits_count#2 main::@8/(byte[]) bits_count#8 ) (byte*) main::chargen1#2 ← phi( main::@2/(byte*) main::chargen1#1 main::@8/(byte*) main::chargen1#5 ) (byte*) main::chargen#4 ← phi( main::@2/(byte*) main::chargen#3 main::@8/(byte*) main::chargen#8 ) (byte) main::bits_gen#11 ← phi( main::@2/(byte) main::bits_gen#1 main::@8/(byte) main::bits_gen#4 ) @@ -668,7 +663,7 @@ main::@3: scope:[main] from main::@2 main::@8 (byte~) main::$22 ← *((byte*) main::chargen1#2) & (byte/signed byte/word/signed word) 6 (byte~) main::$23 ← (byte~) main::$22 >> (byte/signed byte/word/signed word) 1 (byte~) main::$24 ← (byte~) main::$21 | (byte~) main::$23 - (byte) main::bits#2 ← *((byte[]) bits_count#3 + (byte~) main::$24) + (byte) main::bits#2 ← *((byte[]) bits_count#0 + (byte~) main::$24) (boolean~) main::$25 ← (byte) main::bits#2 >= (byte/signed byte/word/signed word) 2 (boolean~) main::$26 ← ! (boolean~) main::$25 if((boolean~) main::$26) goto main::@4 @@ -679,7 +674,6 @@ main::@8: scope:[main] from main::@2 (byte*) PROCPORT#10 ← phi( main::@2/(byte*) PROCPORT#9 ) (byte*) CHARGEN#9 ← phi( main::@2/(byte*) CHARGEN#8 ) (byte*) main::charset4#8 ← phi( main::@2/(byte*) main::charset4#7 ) - (byte[]) bits_count#8 ← phi( main::@2/(byte[]) bits_count#2 ) (byte*) main::chargen1#5 ← phi( main::@2/(byte*) main::chargen1#1 ) (byte*) main::chargen#8 ← phi( main::@2/(byte*) main::chargen#3 ) (byte) main::bits_gen#12 ← phi( main::@2/(byte) main::bits_gen#1 ) @@ -692,7 +686,6 @@ main::@4: scope:[main] from main::@3 main::@9 (byte*) PROCPORT#6 ← phi( main::@3/(byte*) PROCPORT#7 main::@9/(byte*) PROCPORT#8 ) (byte*) CHARGEN#5 ← phi( main::@3/(byte*) CHARGEN#6 main::@9/(byte*) CHARGEN#7 ) (byte*) main::charset4#4 ← phi( main::@3/(byte*) main::charset4#5 main::@9/(byte*) main::charset4#6 ) - (byte[]) bits_count#4 ← phi( main::@3/(byte[]) bits_count#3 main::@9/(byte[]) bits_count#9 ) (byte*) main::chargen1#3 ← phi( main::@3/(byte*) main::chargen1#2 main::@9/(byte*) main::chargen1#6 ) (byte*) main::chargen#5 ← phi( main::@3/(byte*) main::chargen#4 main::@9/(byte*) main::chargen#9 ) (byte) main::bits_gen#13 ← phi( main::@3/(byte) main::bits_gen#3 main::@9/(byte) main::bits_gen#6 ) @@ -702,7 +695,7 @@ main::@4: scope:[main] from main::@3 main::@9 (byte~) main::$30 ← (byte~) main::$29 << (byte/signed byte/word/signed word) 2 (byte~) main::$31 ← *((byte*) main::chargen1#3) & (byte/signed byte/word/signed word) 1 (byte~) main::$32 ← (byte~) main::$30 | (byte~) main::$31 - (byte) main::bits#3 ← *((byte[]) bits_count#4 + (byte~) main::$32) + (byte) main::bits#3 ← *((byte[]) bits_count#0 + (byte~) main::$32) (boolean~) main::$33 ← (byte) main::bits#3 >= (byte/signed byte/word/signed word) 2 (boolean~) main::$34 ← ! (boolean~) main::$33 if((boolean~) main::$34) goto main::@5 @@ -713,7 +706,6 @@ main::@9: scope:[main] from main::@3 (byte*) PROCPORT#8 ← phi( main::@3/(byte*) PROCPORT#7 ) (byte*) CHARGEN#7 ← phi( main::@3/(byte*) CHARGEN#6 ) (byte*) main::charset4#6 ← phi( main::@3/(byte*) main::charset4#5 ) - (byte[]) bits_count#9 ← phi( main::@3/(byte[]) bits_count#3 ) (byte*) main::chargen1#6 ← phi( main::@3/(byte*) main::chargen1#2 ) (byte*) main::chargen#9 ← phi( main::@3/(byte*) main::chargen#4 ) (byte) main::bits_gen#14 ← phi( main::@3/(byte) main::bits_gen#3 ) @@ -724,7 +716,6 @@ main::@5: scope:[main] from main::@10 main::@4 (byte*) D018#4 ← phi( main::@10/(byte*) D018#5 main::@4/(byte*) D018#6 ) (byte*) SCREEN#3 ← phi( main::@10/(byte*) SCREEN#4 main::@4/(byte*) SCREEN#5 ) (byte*) PROCPORT#4 ← phi( main::@10/(byte*) PROCPORT#5 main::@4/(byte*) PROCPORT#6 ) - (byte[]) bits_count#6 ← phi( main::@10/(byte[]) bits_count#11 main::@4/(byte[]) bits_count#4 ) (byte*) CHARGEN#2 ← phi( main::@10/(byte*) CHARGEN#4 main::@4/(byte*) CHARGEN#5 ) (byte*) main::chargen#6 ← phi( main::@10/(byte*) main::chargen#10 main::@4/(byte*) main::chargen#5 ) (byte*) main::charset4#2 ← phi( main::@10/(byte*) main::charset4#3 main::@4/(byte*) main::charset4#4 ) @@ -743,7 +734,6 @@ main::@10: scope:[main] from main::@4 (byte*) D018#5 ← phi( main::@4/(byte*) D018#6 ) (byte*) SCREEN#4 ← phi( main::@4/(byte*) SCREEN#5 ) (byte*) PROCPORT#5 ← phi( main::@4/(byte*) PROCPORT#6 ) - (byte[]) bits_count#11 ← phi( main::@4/(byte[]) bits_count#4 ) (byte*) CHARGEN#4 ← phi( main::@4/(byte*) CHARGEN#5 ) (byte*) main::chargen#10 ← phi( main::@4/(byte*) main::chargen#5 ) (byte*) main::charset4#3 ← phi( main::@4/(byte*) main::charset4#4 ) @@ -778,7 +768,6 @@ main::@return: scope:[main] from main::@12 @1: scope:[] from @begin (byte*) D018#14 ← phi( @begin/(byte*) D018#0 ) (byte*) SCREEN#13 ← phi( @begin/(byte*) SCREEN#0 ) - (byte[]) bits_count#10 ← phi( @begin/(byte[]) bits_count#0 ) (byte*) CHARSET4#2 ← phi( @begin/(byte*) CHARSET4#0 ) (byte*) CHARGEN#3 ← phi( @begin/(byte*) CHARGEN#0 ) (byte*) PROCPORT#3 ← phi( @begin/(byte*) PROCPORT#0 ) @@ -800,7 +789,6 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN main: scope:[main] from @1 (byte*) D018#13 ← phi( @1/(byte*) D018#14 ) (byte*) SCREEN#12 ← phi( @1/(byte*) SCREEN#13 ) - (byte[]) bits_count#5 ← phi( @1/(byte[]) bits_count#10 ) (byte*) CHARSET4#1 ← phi( @1/(byte*) CHARSET4#2 ) (byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#3 ) (byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#3 ) @@ -815,7 +803,6 @@ main::@1: scope:[main] from main main::@5 (byte*) PROCPORT#11 ← phi( main/(byte*) PROCPORT#1 main::@5/(byte*) PROCPORT#4 ) (byte*) CHARGEN#10 ← phi( main/(byte*) CHARGEN#1 main::@5/(byte*) CHARGEN#2 ) (byte*) main::charset4#9 ← phi( main/(byte*) main::charset4#0 main::@5/(byte*) main::charset4#1 ) - (byte[]) bits_count#1 ← phi( main/(byte[]) bits_count#5 main::@5/(byte[]) bits_count#6 ) (byte*) main::chargen#2 ← phi( main/(byte*) main::chargen#0 main::@5/(byte*) main::chargen#1 ) (byte) main::bits_gen#0 ← (byte/signed byte/word/signed word) 0 (byte*~) main::$0 ← (byte*) main::chargen#2 + (byte/signed byte/word/signed word) 1 @@ -826,7 +813,7 @@ main::@1: scope:[main] from main main::@5 (byte~) main::$4 ← (byte~) main::$1 | (byte~) main::$3 (byte~) main::$5 ← (byte~) main::$4 >> (byte/signed byte/word/signed word) 1 (byte~) main::$6 ← (byte~) main::$5 >> (byte/signed byte/word/signed word) 2 - (byte) main::bits#0 ← *((byte[]) bits_count#1 + (byte~) main::$6) + (byte) main::bits#0 ← *((byte[]) bits_count#0 + (byte~) main::$6) (boolean~) main::$7 ← (byte) main::bits#0 >= (byte/signed byte/word/signed word) 2 (boolean~) main::$8 ← ! (boolean~) main::$7 if((boolean~) main::$8) goto main::@2 @@ -837,7 +824,6 @@ main::@2: scope:[main] from main::@1 main::@7 (byte*) PROCPORT#9 ← phi( main::@1/(byte*) PROCPORT#11 main::@7/(byte*) PROCPORT#12 ) (byte*) CHARGEN#8 ← phi( main::@1/(byte*) CHARGEN#10 main::@7/(byte*) CHARGEN#11 ) (byte*) main::charset4#7 ← phi( main::@1/(byte*) main::charset4#9 main::@7/(byte*) main::charset4#10 ) - (byte[]) bits_count#2 ← phi( main::@1/(byte[]) bits_count#1 main::@7/(byte[]) bits_count#7 ) (byte*) main::chargen1#1 ← phi( main::@1/(byte*) main::chargen1#0 main::@7/(byte*) main::chargen1#4 ) (byte*) main::chargen#3 ← phi( main::@1/(byte*) main::chargen#2 main::@7/(byte*) main::chargen#7 ) (byte) main::bits_gen#9 ← phi( main::@1/(byte) main::bits_gen#0 main::@7/(byte) main::bits_gen#2 ) @@ -848,7 +834,7 @@ main::@2: scope:[main] from main::@1 main::@7 (byte~) main::$13 ← (byte~) main::$12 >> (byte/signed byte/word/signed word) 2 (byte~) main::$14 ← (byte~) main::$11 | (byte~) main::$13 (byte~) main::$15 ← (byte~) main::$14 >> (byte/signed byte/word/signed word) 1 - (byte) main::bits#1 ← *((byte[]) bits_count#2 + (byte~) main::$15) + (byte) main::bits#1 ← *((byte[]) bits_count#0 + (byte~) main::$15) (boolean~) main::$16 ← (byte) main::bits#1 >= (byte/signed byte/word/signed word) 2 (boolean~) main::$17 ← ! (boolean~) main::$16 if((boolean~) main::$17) goto main::@3 @@ -859,7 +845,6 @@ main::@7: scope:[main] from main::@1 (byte*) PROCPORT#12 ← phi( main::@1/(byte*) PROCPORT#11 ) (byte*) CHARGEN#11 ← phi( main::@1/(byte*) CHARGEN#10 ) (byte*) main::charset4#10 ← phi( main::@1/(byte*) main::charset4#9 ) - (byte[]) bits_count#7 ← phi( main::@1/(byte[]) bits_count#1 ) (byte*) main::chargen1#4 ← phi( main::@1/(byte*) main::chargen1#0 ) (byte*) main::chargen#7 ← phi( main::@1/(byte*) main::chargen#2 ) (byte) main::bits_gen#10 ← phi( main::@1/(byte) main::bits_gen#0 ) @@ -872,7 +857,6 @@ main::@3: scope:[main] from main::@2 main::@8 (byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#9 main::@8/(byte*) PROCPORT#10 ) (byte*) CHARGEN#6 ← phi( main::@2/(byte*) CHARGEN#8 main::@8/(byte*) CHARGEN#9 ) (byte*) main::charset4#5 ← phi( main::@2/(byte*) main::charset4#7 main::@8/(byte*) main::charset4#8 ) - (byte[]) bits_count#3 ← phi( main::@2/(byte[]) bits_count#2 main::@8/(byte[]) bits_count#8 ) (byte*) main::chargen1#2 ← phi( main::@2/(byte*) main::chargen1#1 main::@8/(byte*) main::chargen1#5 ) (byte*) main::chargen#4 ← phi( main::@2/(byte*) main::chargen#3 main::@8/(byte*) main::chargen#8 ) (byte) main::bits_gen#11 ← phi( main::@2/(byte) main::bits_gen#1 main::@8/(byte) main::bits_gen#4 ) @@ -883,7 +867,7 @@ main::@3: scope:[main] from main::@2 main::@8 (byte~) main::$22 ← *((byte*) main::chargen1#2) & (byte/signed byte/word/signed word) 6 (byte~) main::$23 ← (byte~) main::$22 >> (byte/signed byte/word/signed word) 1 (byte~) main::$24 ← (byte~) main::$21 | (byte~) main::$23 - (byte) main::bits#2 ← *((byte[]) bits_count#3 + (byte~) main::$24) + (byte) main::bits#2 ← *((byte[]) bits_count#0 + (byte~) main::$24) (boolean~) main::$25 ← (byte) main::bits#2 >= (byte/signed byte/word/signed word) 2 (boolean~) main::$26 ← ! (boolean~) main::$25 if((boolean~) main::$26) goto main::@4 @@ -894,7 +878,6 @@ main::@8: scope:[main] from main::@2 (byte*) PROCPORT#10 ← phi( main::@2/(byte*) PROCPORT#9 ) (byte*) CHARGEN#9 ← phi( main::@2/(byte*) CHARGEN#8 ) (byte*) main::charset4#8 ← phi( main::@2/(byte*) main::charset4#7 ) - (byte[]) bits_count#8 ← phi( main::@2/(byte[]) bits_count#2 ) (byte*) main::chargen1#5 ← phi( main::@2/(byte*) main::chargen1#1 ) (byte*) main::chargen#8 ← phi( main::@2/(byte*) main::chargen#3 ) (byte) main::bits_gen#12 ← phi( main::@2/(byte) main::bits_gen#1 ) @@ -907,7 +890,6 @@ main::@4: scope:[main] from main::@3 main::@9 (byte*) PROCPORT#6 ← phi( main::@3/(byte*) PROCPORT#7 main::@9/(byte*) PROCPORT#8 ) (byte*) CHARGEN#5 ← phi( main::@3/(byte*) CHARGEN#6 main::@9/(byte*) CHARGEN#7 ) (byte*) main::charset4#4 ← phi( main::@3/(byte*) main::charset4#5 main::@9/(byte*) main::charset4#6 ) - (byte[]) bits_count#4 ← phi( main::@3/(byte[]) bits_count#3 main::@9/(byte[]) bits_count#9 ) (byte*) main::chargen1#3 ← phi( main::@3/(byte*) main::chargen1#2 main::@9/(byte*) main::chargen1#6 ) (byte*) main::chargen#5 ← phi( main::@3/(byte*) main::chargen#4 main::@9/(byte*) main::chargen#9 ) (byte) main::bits_gen#13 ← phi( main::@3/(byte) main::bits_gen#3 main::@9/(byte) main::bits_gen#6 ) @@ -917,7 +899,7 @@ main::@4: scope:[main] from main::@3 main::@9 (byte~) main::$30 ← (byte~) main::$29 << (byte/signed byte/word/signed word) 2 (byte~) main::$31 ← *((byte*) main::chargen1#3) & (byte/signed byte/word/signed word) 1 (byte~) main::$32 ← (byte~) main::$30 | (byte~) main::$31 - (byte) main::bits#3 ← *((byte[]) bits_count#4 + (byte~) main::$32) + (byte) main::bits#3 ← *((byte[]) bits_count#0 + (byte~) main::$32) (boolean~) main::$33 ← (byte) main::bits#3 >= (byte/signed byte/word/signed word) 2 (boolean~) main::$34 ← ! (boolean~) main::$33 if((boolean~) main::$34) goto main::@5 @@ -928,7 +910,6 @@ main::@9: scope:[main] from main::@3 (byte*) PROCPORT#8 ← phi( main::@3/(byte*) PROCPORT#7 ) (byte*) CHARGEN#7 ← phi( main::@3/(byte*) CHARGEN#6 ) (byte*) main::charset4#6 ← phi( main::@3/(byte*) main::charset4#5 ) - (byte[]) bits_count#9 ← phi( main::@3/(byte[]) bits_count#3 ) (byte*) main::chargen1#6 ← phi( main::@3/(byte*) main::chargen1#2 ) (byte*) main::chargen#9 ← phi( main::@3/(byte*) main::chargen#4 ) (byte) main::bits_gen#14 ← phi( main::@3/(byte) main::bits_gen#3 ) @@ -939,7 +920,6 @@ main::@5: scope:[main] from main::@10 main::@4 (byte*) D018#4 ← phi( main::@10/(byte*) D018#5 main::@4/(byte*) D018#6 ) (byte*) SCREEN#3 ← phi( main::@10/(byte*) SCREEN#4 main::@4/(byte*) SCREEN#5 ) (byte*) PROCPORT#4 ← phi( main::@10/(byte*) PROCPORT#5 main::@4/(byte*) PROCPORT#6 ) - (byte[]) bits_count#6 ← phi( main::@10/(byte[]) bits_count#11 main::@4/(byte[]) bits_count#4 ) (byte*) CHARGEN#2 ← phi( main::@10/(byte*) CHARGEN#4 main::@4/(byte*) CHARGEN#5 ) (byte*) main::chargen#6 ← phi( main::@10/(byte*) main::chargen#10 main::@4/(byte*) main::chargen#5 ) (byte*) main::charset4#2 ← phi( main::@10/(byte*) main::charset4#3 main::@4/(byte*) main::charset4#4 ) @@ -958,7 +938,6 @@ main::@10: scope:[main] from main::@4 (byte*) D018#5 ← phi( main::@4/(byte*) D018#6 ) (byte*) SCREEN#4 ← phi( main::@4/(byte*) SCREEN#5 ) (byte*) PROCPORT#5 ← phi( main::@4/(byte*) PROCPORT#6 ) - (byte[]) bits_count#11 ← phi( main::@4/(byte[]) bits_count#4 ) (byte*) CHARGEN#4 ← phi( main::@4/(byte*) CHARGEN#5 ) (byte*) main::chargen#10 ← phi( main::@4/(byte*) main::chargen#5 ) (byte*) main::charset4#3 ← phi( main::@4/(byte*) main::charset4#4 ) @@ -993,7 +972,6 @@ main::@return: scope:[main] from main::@12 @1: scope:[] from @begin (byte*) D018#14 ← phi( @begin/(byte*) D018#0 ) (byte*) SCREEN#13 ← phi( @begin/(byte*) SCREEN#0 ) - (byte[]) bits_count#10 ← phi( @begin/(byte[]) bits_count#0 ) (byte*) CHARSET4#2 ← phi( @begin/(byte*) CHARSET4#0 ) (byte*) CHARGEN#3 ← phi( @begin/(byte*) CHARGEN#0 ) (byte*) PROCPORT#3 ← phi( @begin/(byte*) PROCPORT#0 ) @@ -1072,17 +1050,6 @@ INITIAL SSA SYMBOL TABLE (byte*) SCREEN#9 (byte[]) bits_count (byte[]) bits_count#0 -(byte[]) bits_count#1 -(byte[]) bits_count#10 -(byte[]) bits_count#11 -(byte[]) bits_count#2 -(byte[]) bits_count#3 -(byte[]) bits_count#4 -(byte[]) bits_count#5 -(byte[]) bits_count#6 -(byte[]) bits_count#7 -(byte[]) bits_count#8 -(byte[]) bits_count#9 (void()) main() (byte*~) main::$0 (byte~) main::$1 @@ -1212,7 +1179,6 @@ CONTROL FLOW GRAPH main: scope:[main] from @1 (byte*) D018#13 ← phi( @1/(byte*) D018#14 ) (byte*) SCREEN#12 ← phi( @1/(byte*) SCREEN#13 ) - (byte[]) bits_count#5 ← phi( @1/(byte[]) bits_count#10 ) (byte*) CHARSET4#1 ← phi( @1/(byte*) CHARSET4#2 ) (byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#3 ) (byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#3 ) @@ -1227,7 +1193,6 @@ main::@1: scope:[main] from main main::@5 (byte*) PROCPORT#11 ← phi( main/(byte*) PROCPORT#1 main::@5/(byte*) PROCPORT#4 ) (byte*) CHARGEN#10 ← phi( main/(byte*) CHARGEN#1 main::@5/(byte*) CHARGEN#2 ) (byte*) main::charset4#9 ← phi( main/(byte*) main::charset4#0 main::@5/(byte*) main::charset4#1 ) - (byte[]) bits_count#1 ← phi( main/(byte[]) bits_count#5 main::@5/(byte[]) bits_count#6 ) (byte*) main::chargen#2 ← phi( main/(byte*) main::chargen#0 main::@5/(byte*) main::chargen#1 ) (byte) main::bits_gen#0 ← (byte/signed byte/word/signed word) 0 (byte*~) main::$0 ← (byte*) main::chargen#2 + (byte/signed byte/word/signed word) 1 @@ -1238,7 +1203,7 @@ main::@1: scope:[main] from main main::@5 (byte~) main::$4 ← (byte~) main::$1 | (byte~) main::$3 (byte~) main::$5 ← (byte~) main::$4 >> (byte/signed byte/word/signed word) 1 (byte~) main::$6 ← (byte~) main::$5 >> (byte/signed byte/word/signed word) 2 - (byte) main::bits#0 ← *((byte[]) bits_count#1 + (byte~) main::$6) + (byte) main::bits#0 ← *((byte[]) bits_count#0 + (byte~) main::$6) (boolean~) main::$7 ← (byte) main::bits#0 >= (byte/signed byte/word/signed word) 2 (boolean~) main::$8 ← ! (boolean~) main::$7 if((boolean~) main::$8) goto main::@2 @@ -1249,7 +1214,6 @@ main::@2: scope:[main] from main::@1 main::@7 (byte*) PROCPORT#9 ← phi( main::@1/(byte*) PROCPORT#11 main::@7/(byte*) PROCPORT#12 ) (byte*) CHARGEN#8 ← phi( main::@1/(byte*) CHARGEN#10 main::@7/(byte*) CHARGEN#11 ) (byte*) main::charset4#7 ← phi( main::@1/(byte*) main::charset4#9 main::@7/(byte*) main::charset4#10 ) - (byte[]) bits_count#2 ← phi( main::@1/(byte[]) bits_count#1 main::@7/(byte[]) bits_count#7 ) (byte*) main::chargen1#1 ← phi( main::@1/(byte*) main::chargen1#0 main::@7/(byte*) main::chargen1#4 ) (byte*) main::chargen#3 ← phi( main::@1/(byte*) main::chargen#2 main::@7/(byte*) main::chargen#7 ) (byte) main::bits_gen#9 ← phi( main::@1/(byte) main::bits_gen#0 main::@7/(byte) main::bits_gen#2 ) @@ -1260,7 +1224,7 @@ main::@2: scope:[main] from main::@1 main::@7 (byte~) main::$13 ← (byte~) main::$12 >> (byte/signed byte/word/signed word) 2 (byte~) main::$14 ← (byte~) main::$11 | (byte~) main::$13 (byte~) main::$15 ← (byte~) main::$14 >> (byte/signed byte/word/signed word) 1 - (byte) main::bits#1 ← *((byte[]) bits_count#2 + (byte~) main::$15) + (byte) main::bits#1 ← *((byte[]) bits_count#0 + (byte~) main::$15) (boolean~) main::$16 ← (byte) main::bits#1 >= (byte/signed byte/word/signed word) 2 (boolean~) main::$17 ← ! (boolean~) main::$16 if((boolean~) main::$17) goto main::@3 @@ -1271,7 +1235,6 @@ main::@7: scope:[main] from main::@1 (byte*) PROCPORT#12 ← phi( main::@1/(byte*) PROCPORT#11 ) (byte*) CHARGEN#11 ← phi( main::@1/(byte*) CHARGEN#10 ) (byte*) main::charset4#10 ← phi( main::@1/(byte*) main::charset4#9 ) - (byte[]) bits_count#7 ← phi( main::@1/(byte[]) bits_count#1 ) (byte*) main::chargen1#4 ← phi( main::@1/(byte*) main::chargen1#0 ) (byte*) main::chargen#7 ← phi( main::@1/(byte*) main::chargen#2 ) (byte) main::bits_gen#10 ← phi( main::@1/(byte) main::bits_gen#0 ) @@ -1284,7 +1247,6 @@ main::@3: scope:[main] from main::@2 main::@8 (byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#9 main::@8/(byte*) PROCPORT#10 ) (byte*) CHARGEN#6 ← phi( main::@2/(byte*) CHARGEN#8 main::@8/(byte*) CHARGEN#9 ) (byte*) main::charset4#5 ← phi( main::@2/(byte*) main::charset4#7 main::@8/(byte*) main::charset4#8 ) - (byte[]) bits_count#3 ← phi( main::@2/(byte[]) bits_count#2 main::@8/(byte[]) bits_count#8 ) (byte*) main::chargen1#2 ← phi( main::@2/(byte*) main::chargen1#1 main::@8/(byte*) main::chargen1#5 ) (byte*) main::chargen#4 ← phi( main::@2/(byte*) main::chargen#3 main::@8/(byte*) main::chargen#8 ) (byte) main::bits_gen#11 ← phi( main::@2/(byte) main::bits_gen#1 main::@8/(byte) main::bits_gen#4 ) @@ -1295,7 +1257,7 @@ main::@3: scope:[main] from main::@2 main::@8 (byte~) main::$22 ← *((byte*) main::chargen1#2) & (byte/signed byte/word/signed word) 6 (byte~) main::$23 ← (byte~) main::$22 >> (byte/signed byte/word/signed word) 1 (byte~) main::$24 ← (byte~) main::$21 | (byte~) main::$23 - (byte) main::bits#2 ← *((byte[]) bits_count#3 + (byte~) main::$24) + (byte) main::bits#2 ← *((byte[]) bits_count#0 + (byte~) main::$24) (boolean~) main::$25 ← (byte) main::bits#2 >= (byte/signed byte/word/signed word) 2 (boolean~) main::$26 ← ! (boolean~) main::$25 if((boolean~) main::$26) goto main::@4 @@ -1306,7 +1268,6 @@ main::@8: scope:[main] from main::@2 (byte*) PROCPORT#10 ← phi( main::@2/(byte*) PROCPORT#9 ) (byte*) CHARGEN#9 ← phi( main::@2/(byte*) CHARGEN#8 ) (byte*) main::charset4#8 ← phi( main::@2/(byte*) main::charset4#7 ) - (byte[]) bits_count#8 ← phi( main::@2/(byte[]) bits_count#2 ) (byte*) main::chargen1#5 ← phi( main::@2/(byte*) main::chargen1#1 ) (byte*) main::chargen#8 ← phi( main::@2/(byte*) main::chargen#3 ) (byte) main::bits_gen#12 ← phi( main::@2/(byte) main::bits_gen#1 ) @@ -1319,7 +1280,6 @@ main::@4: scope:[main] from main::@3 main::@9 (byte*) PROCPORT#6 ← phi( main::@3/(byte*) PROCPORT#7 main::@9/(byte*) PROCPORT#8 ) (byte*) CHARGEN#5 ← phi( main::@3/(byte*) CHARGEN#6 main::@9/(byte*) CHARGEN#7 ) (byte*) main::charset4#4 ← phi( main::@3/(byte*) main::charset4#5 main::@9/(byte*) main::charset4#6 ) - (byte[]) bits_count#4 ← phi( main::@3/(byte[]) bits_count#3 main::@9/(byte[]) bits_count#9 ) (byte*) main::chargen1#3 ← phi( main::@3/(byte*) main::chargen1#2 main::@9/(byte*) main::chargen1#6 ) (byte*) main::chargen#5 ← phi( main::@3/(byte*) main::chargen#4 main::@9/(byte*) main::chargen#9 ) (byte) main::bits_gen#13 ← phi( main::@3/(byte) main::bits_gen#3 main::@9/(byte) main::bits_gen#6 ) @@ -1329,7 +1289,7 @@ main::@4: scope:[main] from main::@3 main::@9 (byte~) main::$30 ← (byte~) main::$29 << (byte/signed byte/word/signed word) 2 (byte~) main::$31 ← *((byte*) main::chargen1#3) & (byte/signed byte/word/signed word) 1 (byte~) main::$32 ← (byte~) main::$30 | (byte~) main::$31 - (byte) main::bits#3 ← *((byte[]) bits_count#4 + (byte~) main::$32) + (byte) main::bits#3 ← *((byte[]) bits_count#0 + (byte~) main::$32) (boolean~) main::$33 ← (byte) main::bits#3 >= (byte/signed byte/word/signed word) 2 (boolean~) main::$34 ← ! (boolean~) main::$33 if((boolean~) main::$34) goto main::@5 @@ -1340,7 +1300,6 @@ main::@9: scope:[main] from main::@3 (byte*) PROCPORT#8 ← phi( main::@3/(byte*) PROCPORT#7 ) (byte*) CHARGEN#7 ← phi( main::@3/(byte*) CHARGEN#6 ) (byte*) main::charset4#6 ← phi( main::@3/(byte*) main::charset4#5 ) - (byte[]) bits_count#9 ← phi( main::@3/(byte[]) bits_count#3 ) (byte*) main::chargen1#6 ← phi( main::@3/(byte*) main::chargen1#2 ) (byte*) main::chargen#9 ← phi( main::@3/(byte*) main::chargen#4 ) (byte) main::bits_gen#14 ← phi( main::@3/(byte) main::bits_gen#3 ) @@ -1351,7 +1310,6 @@ main::@5: scope:[main] from main::@10 main::@4 (byte*) D018#4 ← phi( main::@10/(byte*) D018#5 main::@4/(byte*) D018#6 ) (byte*) SCREEN#3 ← phi( main::@10/(byte*) SCREEN#4 main::@4/(byte*) SCREEN#5 ) (byte*) PROCPORT#4 ← phi( main::@10/(byte*) PROCPORT#5 main::@4/(byte*) PROCPORT#6 ) - (byte[]) bits_count#6 ← phi( main::@10/(byte[]) bits_count#11 main::@4/(byte[]) bits_count#4 ) (byte*) CHARGEN#2 ← phi( main::@10/(byte*) CHARGEN#4 main::@4/(byte*) CHARGEN#5 ) (byte*) main::chargen#6 ← phi( main::@10/(byte*) main::chargen#10 main::@4/(byte*) main::chargen#5 ) (byte*) main::charset4#2 ← phi( main::@10/(byte*) main::charset4#3 main::@4/(byte*) main::charset4#4 ) @@ -1370,7 +1328,6 @@ main::@10: scope:[main] from main::@4 (byte*) D018#5 ← phi( main::@4/(byte*) D018#6 ) (byte*) SCREEN#4 ← phi( main::@4/(byte*) SCREEN#5 ) (byte*) PROCPORT#5 ← phi( main::@4/(byte*) PROCPORT#6 ) - (byte[]) bits_count#11 ← phi( main::@4/(byte[]) bits_count#4 ) (byte*) CHARGEN#4 ← phi( main::@4/(byte*) CHARGEN#5 ) (byte*) main::chargen#10 ← phi( main::@4/(byte*) main::chargen#5 ) (byte*) main::charset4#3 ← phi( main::@4/(byte*) main::charset4#4 ) @@ -1405,7 +1362,6 @@ main::@return: scope:[main] from main::@12 @1: scope:[] from @begin (byte*) D018#14 ← phi( @begin/(byte*) D018#0 ) (byte*) SCREEN#13 ← phi( @begin/(byte*) SCREEN#0 ) - (byte[]) bits_count#10 ← phi( @begin/(byte[]) bits_count#0 ) (byte*) CHARSET4#2 ← phi( @begin/(byte*) CHARSET4#0 ) (byte*) CHARGEN#3 ← phi( @begin/(byte*) CHARGEN#0 ) (byte*) PROCPORT#3 ← phi( @begin/(byte*) PROCPORT#0 ) @@ -1430,7 +1386,6 @@ CONTROL FLOW GRAPH main: scope:[main] from @1 (byte*) D018#13 ← phi( @1/(byte*) D018#14 ) (byte*) SCREEN#12 ← phi( @1/(byte*) SCREEN#13 ) - (byte[]) bits_count#5 ← phi( @1/(byte[]) bits_count#10 ) (byte*) CHARSET4#1 ← phi( @1/(byte*) CHARSET4#2 ) (byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#3 ) (byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#3 ) @@ -1445,7 +1400,6 @@ main::@1: scope:[main] from main main::@5 (byte*) PROCPORT#11 ← phi( main/(byte*) PROCPORT#1 main::@5/(byte*) PROCPORT#4 ) (byte*) CHARGEN#10 ← phi( main/(byte*) CHARGEN#1 main::@5/(byte*) CHARGEN#2 ) (byte*) main::charset4#9 ← phi( main/(byte*) main::charset4#0 main::@5/(byte*) main::charset4#1 ) - (byte[]) bits_count#1 ← phi( main/(byte[]) bits_count#5 main::@5/(byte[]) bits_count#6 ) (byte*) main::chargen#2 ← phi( main/(byte*) main::chargen#0 main::@5/(byte*) main::chargen#1 ) (byte) main::bits_gen#0 ← (byte/signed byte/word/signed word) 0 (byte*~) main::$0 ← (byte*) main::chargen#2 + (byte/signed byte/word/signed word) 1 @@ -1456,7 +1410,7 @@ main::@1: scope:[main] from main main::@5 (byte~) main::$4 ← (byte~) main::$1 | (byte~) main::$3 (byte~) main::$5 ← (byte~) main::$4 >> (byte/signed byte/word/signed word) 1 (byte~) main::$6 ← (byte~) main::$5 >> (byte/signed byte/word/signed word) 2 - (byte) main::bits#0 ← *((byte[]) bits_count#1 + (byte~) main::$6) + (byte) main::bits#0 ← *((byte[]) bits_count#0 + (byte~) main::$6) (boolean~) main::$8 ← (byte) main::bits#0 < (byte/signed byte/word/signed word) 2 if((boolean~) main::$8) goto main::@2 to:main::@7 @@ -1466,7 +1420,6 @@ main::@2: scope:[main] from main::@1 main::@7 (byte*) PROCPORT#9 ← phi( main::@1/(byte*) PROCPORT#11 main::@7/(byte*) PROCPORT#12 ) (byte*) CHARGEN#8 ← phi( main::@1/(byte*) CHARGEN#10 main::@7/(byte*) CHARGEN#11 ) (byte*) main::charset4#7 ← phi( main::@1/(byte*) main::charset4#9 main::@7/(byte*) main::charset4#10 ) - (byte[]) bits_count#2 ← phi( main::@1/(byte[]) bits_count#1 main::@7/(byte[]) bits_count#7 ) (byte*) main::chargen1#1 ← phi( main::@1/(byte*) main::chargen1#0 main::@7/(byte*) main::chargen1#4 ) (byte*) main::chargen#3 ← phi( main::@1/(byte*) main::chargen#2 main::@7/(byte*) main::chargen#7 ) (byte) main::bits_gen#9 ← phi( main::@1/(byte) main::bits_gen#0 main::@7/(byte) main::bits_gen#2 ) @@ -1477,7 +1430,7 @@ main::@2: scope:[main] from main::@1 main::@7 (byte~) main::$13 ← (byte~) main::$12 >> (byte/signed byte/word/signed word) 2 (byte~) main::$14 ← (byte~) main::$11 | (byte~) main::$13 (byte~) main::$15 ← (byte~) main::$14 >> (byte/signed byte/word/signed word) 1 - (byte) main::bits#1 ← *((byte[]) bits_count#2 + (byte~) main::$15) + (byte) main::bits#1 ← *((byte[]) bits_count#0 + (byte~) main::$15) (boolean~) main::$17 ← (byte) main::bits#1 < (byte/signed byte/word/signed word) 2 if((boolean~) main::$17) goto main::@3 to:main::@8 @@ -1487,7 +1440,6 @@ main::@7: scope:[main] from main::@1 (byte*) PROCPORT#12 ← phi( main::@1/(byte*) PROCPORT#11 ) (byte*) CHARGEN#11 ← phi( main::@1/(byte*) CHARGEN#10 ) (byte*) main::charset4#10 ← phi( main::@1/(byte*) main::charset4#9 ) - (byte[]) bits_count#7 ← phi( main::@1/(byte[]) bits_count#1 ) (byte*) main::chargen1#4 ← phi( main::@1/(byte*) main::chargen1#0 ) (byte*) main::chargen#7 ← phi( main::@1/(byte*) main::chargen#2 ) (byte) main::bits_gen#10 ← phi( main::@1/(byte) main::bits_gen#0 ) @@ -1500,7 +1452,6 @@ main::@3: scope:[main] from main::@2 main::@8 (byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#9 main::@8/(byte*) PROCPORT#10 ) (byte*) CHARGEN#6 ← phi( main::@2/(byte*) CHARGEN#8 main::@8/(byte*) CHARGEN#9 ) (byte*) main::charset4#5 ← phi( main::@2/(byte*) main::charset4#7 main::@8/(byte*) main::charset4#8 ) - (byte[]) bits_count#3 ← phi( main::@2/(byte[]) bits_count#2 main::@8/(byte[]) bits_count#8 ) (byte*) main::chargen1#2 ← phi( main::@2/(byte*) main::chargen1#1 main::@8/(byte*) main::chargen1#5 ) (byte*) main::chargen#4 ← phi( main::@2/(byte*) main::chargen#3 main::@8/(byte*) main::chargen#8 ) (byte) main::bits_gen#11 ← phi( main::@2/(byte) main::bits_gen#1 main::@8/(byte) main::bits_gen#4 ) @@ -1511,7 +1462,7 @@ main::@3: scope:[main] from main::@2 main::@8 (byte~) main::$22 ← *((byte*) main::chargen1#2) & (byte/signed byte/word/signed word) 6 (byte~) main::$23 ← (byte~) main::$22 >> (byte/signed byte/word/signed word) 1 (byte~) main::$24 ← (byte~) main::$21 | (byte~) main::$23 - (byte) main::bits#2 ← *((byte[]) bits_count#3 + (byte~) main::$24) + (byte) main::bits#2 ← *((byte[]) bits_count#0 + (byte~) main::$24) (boolean~) main::$26 ← (byte) main::bits#2 < (byte/signed byte/word/signed word) 2 if((boolean~) main::$26) goto main::@4 to:main::@9 @@ -1521,7 +1472,6 @@ main::@8: scope:[main] from main::@2 (byte*) PROCPORT#10 ← phi( main::@2/(byte*) PROCPORT#9 ) (byte*) CHARGEN#9 ← phi( main::@2/(byte*) CHARGEN#8 ) (byte*) main::charset4#8 ← phi( main::@2/(byte*) main::charset4#7 ) - (byte[]) bits_count#8 ← phi( main::@2/(byte[]) bits_count#2 ) (byte*) main::chargen1#5 ← phi( main::@2/(byte*) main::chargen1#1 ) (byte*) main::chargen#8 ← phi( main::@2/(byte*) main::chargen#3 ) (byte) main::bits_gen#12 ← phi( main::@2/(byte) main::bits_gen#1 ) @@ -1534,7 +1484,6 @@ main::@4: scope:[main] from main::@3 main::@9 (byte*) PROCPORT#6 ← phi( main::@3/(byte*) PROCPORT#7 main::@9/(byte*) PROCPORT#8 ) (byte*) CHARGEN#5 ← phi( main::@3/(byte*) CHARGEN#6 main::@9/(byte*) CHARGEN#7 ) (byte*) main::charset4#4 ← phi( main::@3/(byte*) main::charset4#5 main::@9/(byte*) main::charset4#6 ) - (byte[]) bits_count#4 ← phi( main::@3/(byte[]) bits_count#3 main::@9/(byte[]) bits_count#9 ) (byte*) main::chargen1#3 ← phi( main::@3/(byte*) main::chargen1#2 main::@9/(byte*) main::chargen1#6 ) (byte*) main::chargen#5 ← phi( main::@3/(byte*) main::chargen#4 main::@9/(byte*) main::chargen#9 ) (byte) main::bits_gen#13 ← phi( main::@3/(byte) main::bits_gen#3 main::@9/(byte) main::bits_gen#6 ) @@ -1544,7 +1493,7 @@ main::@4: scope:[main] from main::@3 main::@9 (byte~) main::$30 ← (byte~) main::$29 << (byte/signed byte/word/signed word) 2 (byte~) main::$31 ← *((byte*) main::chargen1#3) & (byte/signed byte/word/signed word) 1 (byte~) main::$32 ← (byte~) main::$30 | (byte~) main::$31 - (byte) main::bits#3 ← *((byte[]) bits_count#4 + (byte~) main::$32) + (byte) main::bits#3 ← *((byte[]) bits_count#0 + (byte~) main::$32) (boolean~) main::$34 ← (byte) main::bits#3 < (byte/signed byte/word/signed word) 2 if((boolean~) main::$34) goto main::@5 to:main::@10 @@ -1554,7 +1503,6 @@ main::@9: scope:[main] from main::@3 (byte*) PROCPORT#8 ← phi( main::@3/(byte*) PROCPORT#7 ) (byte*) CHARGEN#7 ← phi( main::@3/(byte*) CHARGEN#6 ) (byte*) main::charset4#6 ← phi( main::@3/(byte*) main::charset4#5 ) - (byte[]) bits_count#9 ← phi( main::@3/(byte[]) bits_count#3 ) (byte*) main::chargen1#6 ← phi( main::@3/(byte*) main::chargen1#2 ) (byte*) main::chargen#9 ← phi( main::@3/(byte*) main::chargen#4 ) (byte) main::bits_gen#14 ← phi( main::@3/(byte) main::bits_gen#3 ) @@ -1565,7 +1513,6 @@ main::@5: scope:[main] from main::@10 main::@4 (byte*) D018#4 ← phi( main::@10/(byte*) D018#5 main::@4/(byte*) D018#6 ) (byte*) SCREEN#3 ← phi( main::@10/(byte*) SCREEN#4 main::@4/(byte*) SCREEN#5 ) (byte*) PROCPORT#4 ← phi( main::@10/(byte*) PROCPORT#5 main::@4/(byte*) PROCPORT#6 ) - (byte[]) bits_count#6 ← phi( main::@10/(byte[]) bits_count#11 main::@4/(byte[]) bits_count#4 ) (byte*) CHARGEN#2 ← phi( main::@10/(byte*) CHARGEN#4 main::@4/(byte*) CHARGEN#5 ) (byte*) main::chargen#6 ← phi( main::@10/(byte*) main::chargen#10 main::@4/(byte*) main::chargen#5 ) (byte*) main::charset4#2 ← phi( main::@10/(byte*) main::charset4#3 main::@4/(byte*) main::charset4#4 ) @@ -1584,7 +1531,6 @@ main::@10: scope:[main] from main::@4 (byte*) D018#5 ← phi( main::@4/(byte*) D018#6 ) (byte*) SCREEN#4 ← phi( main::@4/(byte*) SCREEN#5 ) (byte*) PROCPORT#5 ← phi( main::@4/(byte*) PROCPORT#6 ) - (byte[]) bits_count#11 ← phi( main::@4/(byte[]) bits_count#4 ) (byte*) CHARGEN#4 ← phi( main::@4/(byte*) CHARGEN#5 ) (byte*) main::chargen#10 ← phi( main::@4/(byte*) main::chargen#5 ) (byte*) main::charset4#3 ← phi( main::@4/(byte*) main::charset4#4 ) @@ -1619,7 +1565,6 @@ main::@return: scope:[main] from main::@12 @1: scope:[] from @begin (byte*) D018#14 ← phi( @begin/(byte*) D018#0 ) (byte*) SCREEN#13 ← phi( @begin/(byte*) SCREEN#0 ) - (byte[]) bits_count#10 ← phi( @begin/(byte[]) bits_count#0 ) (byte*) CHARSET4#2 ← phi( @begin/(byte*) CHARSET4#0 ) (byte*) CHARGEN#3 ← phi( @begin/(byte*) CHARGEN#0 ) (byte*) PROCPORT#3 ← phi( @begin/(byte*) PROCPORT#0 ) @@ -1630,7 +1575,6 @@ main::@return: scope:[main] from main::@12 Not aliassing across scopes: PROCPORT#1 PROCPORT#3 Not aliassing across scopes: CHARGEN#1 CHARGEN#3 Not aliassing across scopes: CHARSET4#1 CHARSET4#2 -Not aliassing across scopes: bits_count#5 bits_count#10 Not aliassing across scopes: SCREEN#12 SCREEN#13 Not aliassing across scopes: D018#13 D018#14 Not aliassing across scopes: main::chargen#0 CHARGEN#1 @@ -1639,7 +1583,6 @@ Alias (byte*) main::chargen1#0 = (byte*~) main::$0 (byte*) main::chargen1#4 Alias (byte) main::bits_gen#1 = (byte~) main::$10 (byte) main::bits_gen#12 Alias (byte) main::bits_gen#0 = (byte) main::bits_gen#10 Alias (byte*) main::chargen#2 = (byte*) main::chargen#7 -Alias (byte[]) bits_count#1 = (byte[]) bits_count#7 Alias (byte*) main::charset4#10 = (byte*) main::charset4#9 Alias (byte*) CHARGEN#10 = (byte*) CHARGEN#11 Alias (byte*) PROCPORT#11 = (byte*) PROCPORT#12 @@ -1649,7 +1592,6 @@ Alias (byte) main::bits_gen#2 = (byte/word~) main::$9 Alias (byte) main::bits_gen#14 = (byte) main::bits_gen#3 (byte~) main::$19 Alias (byte*) main::chargen#3 = (byte*) main::chargen#8 Alias (byte*) main::chargen1#1 = (byte*) main::chargen1#5 -Alias (byte[]) bits_count#2 = (byte[]) bits_count#8 Alias (byte*) main::charset4#7 = (byte*) main::charset4#8 Alias (byte*) CHARGEN#8 = (byte*) CHARGEN#9 Alias (byte*) PROCPORT#10 = (byte*) PROCPORT#9 @@ -1659,7 +1601,6 @@ Alias (byte) main::bits_gen#4 = (byte/word~) main::$18 Alias (byte) main::bits_gen#16 = (byte) main::bits_gen#5 (byte~) main::$28 Alias (byte*) main::chargen#4 = (byte*) main::chargen#9 Alias (byte*) main::chargen1#2 = (byte*) main::chargen1#6 -Alias (byte[]) bits_count#3 = (byte[]) bits_count#9 Alias (byte*) main::charset4#5 = (byte*) main::charset4#6 Alias (byte*) CHARGEN#6 = (byte*) CHARGEN#7 Alias (byte*) PROCPORT#7 = (byte*) PROCPORT#8 @@ -1671,7 +1612,6 @@ Alias (byte*) main::chargen#1 = (byte*~) main::$37 Alias (byte*) main::charset4#3 = (byte*) main::charset4#4 Alias (byte*) main::chargen#10 = (byte*) main::chargen#5 Alias (byte*) CHARGEN#4 = (byte*) CHARGEN#5 -Alias (byte[]) bits_count#11 = (byte[]) bits_count#4 Alias (byte*) PROCPORT#5 = (byte*) PROCPORT#6 Alias (byte*) SCREEN#4 = (byte*) SCREEN#5 Alias (byte*) D018#5 = (byte*) D018#6 @@ -1683,7 +1623,6 @@ Alias (byte*) D018#1 = (byte*) D018#2 Alias (byte*) PROCPORT#0 = (byte*) PROCPORT#3 Alias (byte*) CHARGEN#0 = (byte*) CHARGEN#3 Alias (byte*) CHARSET4#0 = (byte*) CHARSET4#2 -Alias (byte[]) bits_count#0 = (byte[]) bits_count#10 Alias (byte*) SCREEN#0 = (byte*) SCREEN#13 Alias (byte*) D018#0 = (byte*) D018#14 Succesful SSA optimization Pass2AliasElimination @@ -1699,7 +1638,6 @@ CONTROL FLOW GRAPH main: scope:[main] from @1 (byte*) D018#13 ← phi( @1/(byte*) D018#0 ) (byte*) SCREEN#12 ← phi( @1/(byte*) SCREEN#0 ) - (byte[]) bits_count#5 ← phi( @1/(byte[]) bits_count#0 ) (byte*) CHARSET4#1 ← phi( @1/(byte*) CHARSET4#0 ) (byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#0 ) (byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#0 ) @@ -1714,7 +1652,6 @@ main::@1: scope:[main] from main main::@5 (byte*) PROCPORT#11 ← phi( main/(byte*) PROCPORT#1 main::@5/(byte*) PROCPORT#2 ) (byte*) CHARGEN#10 ← phi( main/(byte*) CHARGEN#1 main::@5/(byte*) CHARGEN#2 ) (byte*) main::charset4#10 ← phi( main/(byte*) main::charset4#0 main::@5/(byte*) main::charset4#1 ) - (byte[]) bits_count#1 ← phi( main/(byte[]) bits_count#5 main::@5/(byte[]) bits_count#6 ) (byte*) main::chargen#2 ← phi( main/(byte*) main::chargen#0 main::@5/(byte*) main::chargen#1 ) (byte) main::bits_gen#0 ← (byte/signed byte/word/signed word) 0 (byte*) main::chargen1#0 ← (byte*) main::chargen#2 + (byte/signed byte/word/signed word) 1 @@ -1724,7 +1661,7 @@ main::@1: scope:[main] from main main::@5 (byte~) main::$4 ← (byte~) main::$1 | (byte~) main::$3 (byte~) main::$5 ← (byte~) main::$4 >> (byte/signed byte/word/signed word) 1 (byte~) main::$6 ← (byte~) main::$5 >> (byte/signed byte/word/signed word) 2 - (byte) main::bits#0 ← *((byte[]) bits_count#1 + (byte~) main::$6) + (byte) main::bits#0 ← *((byte[]) bits_count#0 + (byte~) main::$6) (boolean~) main::$8 ← (byte) main::bits#0 < (byte/signed byte/word/signed word) 2 if((boolean~) main::$8) goto main::@2 to:main::@7 @@ -1734,7 +1671,6 @@ main::@2: scope:[main] from main::@1 main::@7 (byte*) PROCPORT#10 ← phi( main::@1/(byte*) PROCPORT#11 main::@7/(byte*) PROCPORT#11 ) (byte*) CHARGEN#8 ← phi( main::@1/(byte*) CHARGEN#10 main::@7/(byte*) CHARGEN#10 ) (byte*) main::charset4#7 ← phi( main::@1/(byte*) main::charset4#10 main::@7/(byte*) main::charset4#10 ) - (byte[]) bits_count#2 ← phi( main::@1/(byte[]) bits_count#1 main::@7/(byte[]) bits_count#1 ) (byte*) main::chargen1#1 ← phi( main::@1/(byte*) main::chargen1#0 main::@7/(byte*) main::chargen1#0 ) (byte*) main::chargen#3 ← phi( main::@1/(byte*) main::chargen#2 main::@7/(byte*) main::chargen#2 ) (byte) main::bits_gen#9 ← phi( main::@1/(byte) main::bits_gen#0 main::@7/(byte) main::bits_gen#2 ) @@ -1744,7 +1680,7 @@ main::@2: scope:[main] from main::@1 main::@7 (byte~) main::$13 ← (byte~) main::$12 >> (byte/signed byte/word/signed word) 2 (byte~) main::$14 ← (byte~) main::$11 | (byte~) main::$13 (byte~) main::$15 ← (byte~) main::$14 >> (byte/signed byte/word/signed word) 1 - (byte) main::bits#1 ← *((byte[]) bits_count#2 + (byte~) main::$15) + (byte) main::bits#1 ← *((byte[]) bits_count#0 + (byte~) main::$15) (boolean~) main::$17 ← (byte) main::bits#1 < (byte/signed byte/word/signed word) 2 if((boolean~) main::$17) goto main::@3 to:main::@8 @@ -1757,7 +1693,6 @@ main::@3: scope:[main] from main::@2 main::@8 (byte*) PROCPORT#7 ← phi( main::@2/(byte*) PROCPORT#10 main::@8/(byte*) PROCPORT#10 ) (byte*) CHARGEN#6 ← phi( main::@2/(byte*) CHARGEN#8 main::@8/(byte*) CHARGEN#8 ) (byte*) main::charset4#5 ← phi( main::@2/(byte*) main::charset4#7 main::@8/(byte*) main::charset4#7 ) - (byte[]) bits_count#3 ← phi( main::@2/(byte[]) bits_count#2 main::@8/(byte[]) bits_count#2 ) (byte*) main::chargen1#2 ← phi( main::@2/(byte*) main::chargen1#1 main::@8/(byte*) main::chargen1#1 ) (byte*) main::chargen#4 ← phi( main::@2/(byte*) main::chargen#3 main::@8/(byte*) main::chargen#3 ) (byte) main::bits_gen#11 ← phi( main::@2/(byte) main::bits_gen#1 main::@8/(byte) main::bits_gen#4 ) @@ -1767,7 +1702,7 @@ main::@3: scope:[main] from main::@2 main::@8 (byte~) main::$22 ← *((byte*) main::chargen1#2) & (byte/signed byte/word/signed word) 6 (byte~) main::$23 ← (byte~) main::$22 >> (byte/signed byte/word/signed word) 1 (byte~) main::$24 ← (byte~) main::$21 | (byte~) main::$23 - (byte) main::bits#2 ← *((byte[]) bits_count#3 + (byte~) main::$24) + (byte) main::bits#2 ← *((byte[]) bits_count#0 + (byte~) main::$24) (boolean~) main::$26 ← (byte) main::bits#2 < (byte/signed byte/word/signed word) 2 if((boolean~) main::$26) goto main::@4 to:main::@9 @@ -1780,7 +1715,6 @@ main::@4: scope:[main] from main::@3 main::@9 (byte*) PROCPORT#5 ← phi( main::@3/(byte*) PROCPORT#7 main::@9/(byte*) PROCPORT#7 ) (byte*) CHARGEN#4 ← phi( main::@3/(byte*) CHARGEN#6 main::@9/(byte*) CHARGEN#6 ) (byte*) main::charset4#3 ← phi( main::@3/(byte*) main::charset4#5 main::@9/(byte*) main::charset4#5 ) - (byte[]) bits_count#11 ← phi( main::@3/(byte[]) bits_count#3 main::@9/(byte[]) bits_count#3 ) (byte*) main::chargen1#3 ← phi( main::@3/(byte*) main::chargen1#2 main::@9/(byte*) main::chargen1#2 ) (byte*) main::chargen#10 ← phi( main::@3/(byte*) main::chargen#4 main::@9/(byte*) main::chargen#4 ) (byte) main::bits_gen#13 ← phi( main::@3/(byte) main::bits_gen#14 main::@9/(byte) main::bits_gen#6 ) @@ -1789,7 +1723,7 @@ main::@4: scope:[main] from main::@3 main::@9 (byte~) main::$30 ← (byte~) main::$29 << (byte/signed byte/word/signed word) 2 (byte~) main::$31 ← *((byte*) main::chargen1#3) & (byte/signed byte/word/signed word) 1 (byte~) main::$32 ← (byte~) main::$30 | (byte~) main::$31 - (byte) main::bits#3 ← *((byte[]) bits_count#11 + (byte~) main::$32) + (byte) main::bits#3 ← *((byte[]) bits_count#0 + (byte~) main::$32) (boolean~) main::$34 ← (byte) main::bits#3 < (byte/signed byte/word/signed word) 2 if((boolean~) main::$34) goto main::@5 to:main::@10 @@ -1800,7 +1734,6 @@ main::@5: scope:[main] from main::@10 main::@4 (byte*) D018#3 ← phi( main::@10/(byte*) D018#5 main::@4/(byte*) D018#5 ) (byte*) SCREEN#2 ← phi( main::@10/(byte*) SCREEN#4 main::@4/(byte*) SCREEN#4 ) (byte*) PROCPORT#2 ← phi( main::@10/(byte*) PROCPORT#5 main::@4/(byte*) PROCPORT#5 ) - (byte[]) bits_count#6 ← phi( main::@10/(byte[]) bits_count#11 main::@4/(byte[]) bits_count#11 ) (byte*) CHARGEN#2 ← phi( main::@10/(byte*) CHARGEN#4 main::@4/(byte*) CHARGEN#4 ) (byte*) main::chargen#6 ← phi( main::@10/(byte*) main::chargen#10 main::@4/(byte*) main::chargen#10 ) (byte*) main::charset4#2 ← phi( main::@10/(byte*) main::charset4#3 main::@4/(byte*) main::charset4#3 ) @@ -1844,14 +1777,12 @@ main::@return: scope:[main] from main::@12 Not aliassing across scopes: PROCPORT#1 PROCPORT#0 Not aliassing across scopes: CHARGEN#1 CHARGEN#0 Not aliassing across scopes: CHARSET4#1 CHARSET4#0 -Not aliassing across scopes: bits_count#5 bits_count#0 Not aliassing across scopes: SCREEN#12 SCREEN#0 Not aliassing across scopes: D018#13 D018#0 Not aliassing across scopes: main::chargen#0 CHARGEN#1 Not aliassing across scopes: main::charset4#0 CHARSET4#1 Alias (byte*) main::chargen#10 = (byte*) main::chargen#3 (byte*) main::chargen#2 (byte*) main::chargen#4 (byte*) main::chargen#6 Alias (byte*) main::chargen1#0 = (byte*) main::chargen1#1 (byte*) main::chargen1#2 (byte*) main::chargen1#3 -Alias (byte[]) bits_count#1 = (byte[]) bits_count#2 (byte[]) bits_count#3 (byte[]) bits_count#11 (byte[]) bits_count#6 Alias (byte*) main::charset4#10 = (byte*) main::charset4#7 (byte*) main::charset4#5 (byte*) main::charset4#3 (byte*) main::charset4#2 Alias (byte*) CHARGEN#10 = (byte*) CHARGEN#8 (byte*) CHARGEN#6 (byte*) CHARGEN#4 (byte*) CHARGEN#2 Alias (byte*) PROCPORT#10 = (byte*) PROCPORT#11 (byte*) PROCPORT#7 (byte*) PROCPORT#5 (byte*) PROCPORT#2 @@ -1870,7 +1801,6 @@ CONTROL FLOW GRAPH main: scope:[main] from @1 (byte*) D018#13 ← phi( @1/(byte*) D018#0 ) (byte*) SCREEN#12 ← phi( @1/(byte*) SCREEN#0 ) - (byte[]) bits_count#5 ← phi( @1/(byte[]) bits_count#0 ) (byte*) CHARSET4#1 ← phi( @1/(byte*) CHARSET4#0 ) (byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#0 ) (byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#0 ) @@ -1885,7 +1815,6 @@ main::@1: scope:[main] from main main::@5 (byte*) PROCPORT#10 ← phi( main/(byte*) PROCPORT#1 main::@5/(byte*) PROCPORT#10 ) (byte*) CHARGEN#10 ← phi( main/(byte*) CHARGEN#1 main::@5/(byte*) CHARGEN#10 ) (byte*) main::charset4#10 ← phi( main/(byte*) main::charset4#0 main::@5/(byte*) main::charset4#1 ) - (byte[]) bits_count#1 ← phi( main/(byte[]) bits_count#5 main::@5/(byte[]) bits_count#1 ) (byte*) main::chargen#10 ← phi( main/(byte*) main::chargen#0 main::@5/(byte*) main::chargen#1 ) (byte) main::bits_gen#0 ← (byte/signed byte/word/signed word) 0 (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte/signed byte/word/signed word) 1 @@ -1895,7 +1824,7 @@ main::@1: scope:[main] from main main::@5 (byte~) main::$4 ← (byte~) main::$1 | (byte~) main::$3 (byte~) main::$5 ← (byte~) main::$4 >> (byte/signed byte/word/signed word) 1 (byte~) main::$6 ← (byte~) main::$5 >> (byte/signed byte/word/signed word) 2 - (byte) main::bits#0 ← *((byte[]) bits_count#1 + (byte~) main::$6) + (byte) main::bits#0 ← *((byte[]) bits_count#0 + (byte~) main::$6) (boolean~) main::$8 ← (byte) main::bits#0 < (byte/signed byte/word/signed word) 2 if((boolean~) main::$8) goto main::@2 to:main::@7 @@ -1907,7 +1836,7 @@ main::@2: scope:[main] from main::@1 main::@7 (byte~) main::$13 ← (byte~) main::$12 >> (byte/signed byte/word/signed word) 2 (byte~) main::$14 ← (byte~) main::$11 | (byte~) main::$13 (byte~) main::$15 ← (byte~) main::$14 >> (byte/signed byte/word/signed word) 1 - (byte) main::bits#1 ← *((byte[]) bits_count#1 + (byte~) main::$15) + (byte) main::bits#1 ← *((byte[]) bits_count#0 + (byte~) main::$15) (boolean~) main::$17 ← (byte) main::bits#1 < (byte/signed byte/word/signed word) 2 if((boolean~) main::$17) goto main::@3 to:main::@8 @@ -1922,7 +1851,7 @@ main::@3: scope:[main] from main::@2 main::@8 (byte~) main::$22 ← *((byte*) main::chargen1#0) & (byte/signed byte/word/signed word) 6 (byte~) main::$23 ← (byte~) main::$22 >> (byte/signed byte/word/signed word) 1 (byte~) main::$24 ← (byte~) main::$21 | (byte~) main::$23 - (byte) main::bits#2 ← *((byte[]) bits_count#1 + (byte~) main::$24) + (byte) main::bits#2 ← *((byte[]) bits_count#0 + (byte~) main::$24) (boolean~) main::$26 ← (byte) main::bits#2 < (byte/signed byte/word/signed word) 2 if((boolean~) main::$26) goto main::@4 to:main::@9 @@ -1936,7 +1865,7 @@ main::@4: scope:[main] from main::@3 main::@9 (byte~) main::$30 ← (byte~) main::$29 << (byte/signed byte/word/signed word) 2 (byte~) main::$31 ← *((byte*) main::chargen1#0) & (byte/signed byte/word/signed word) 1 (byte~) main::$32 ← (byte~) main::$30 | (byte~) main::$31 - (byte) main::bits#3 ← *((byte[]) bits_count#1 + (byte~) main::$32) + (byte) main::bits#3 ← *((byte[]) bits_count#0 + (byte~) main::$32) (boolean~) main::$34 ← (byte) main::bits#3 < (byte/signed byte/word/signed word) 2 if((boolean~) main::$34) goto main::@5 to:main::@10 @@ -1984,12 +1913,10 @@ main::@return: scope:[main] from main::@12 Not aliassing across scopes: PROCPORT#1 PROCPORT#0 Not aliassing across scopes: CHARGEN#1 CHARGEN#0 Not aliassing across scopes: CHARSET4#1 CHARSET4#0 -Not aliassing across scopes: bits_count#5 bits_count#0 Not aliassing across scopes: SCREEN#12 SCREEN#0 Not aliassing across scopes: D018#13 D018#0 Not aliassing across scopes: main::chargen#0 CHARGEN#1 Not aliassing across scopes: main::charset4#0 CHARSET4#1 -Self Phi Eliminated (byte[]) bits_count#1 Self Phi Eliminated (byte*) CHARGEN#10 Self Phi Eliminated (byte*) PROCPORT#10 Self Phi Eliminated (byte*) SCREEN#10 @@ -2009,7 +1936,6 @@ CONTROL FLOW GRAPH main: scope:[main] from @1 (byte*) D018#13 ← phi( @1/(byte*) D018#0 ) (byte*) SCREEN#12 ← phi( @1/(byte*) SCREEN#0 ) - (byte[]) bits_count#5 ← phi( @1/(byte[]) bits_count#0 ) (byte*) CHARSET4#1 ← phi( @1/(byte*) CHARSET4#0 ) (byte*) CHARGEN#1 ← phi( @1/(byte*) CHARGEN#0 ) (byte*) PROCPORT#1 ← phi( @1/(byte*) PROCPORT#0 ) @@ -2024,7 +1950,6 @@ main::@1: scope:[main] from main main::@5 (byte*) PROCPORT#10 ← phi( main/(byte*) PROCPORT#1 ) (byte*) CHARGEN#10 ← phi( main/(byte*) CHARGEN#1 ) (byte*) main::charset4#10 ← phi( main/(byte*) main::charset4#0 main::@5/(byte*) main::charset4#1 ) - (byte[]) bits_count#1 ← phi( main/(byte[]) bits_count#5 ) (byte*) main::chargen#10 ← phi( main/(byte*) main::chargen#0 main::@5/(byte*) main::chargen#1 ) (byte) main::bits_gen#0 ← (byte/signed byte/word/signed word) 0 (byte*) main::chargen1#0 ← (byte*) main::chargen#10 + (byte/signed byte/word/signed word) 1 @@ -2034,7 +1959,7 @@ main::@1: scope:[main] from main main::@5 (byte~) main::$4 ← (byte~) main::$1 | (byte~) main::$3 (byte~) main::$5 ← (byte~) main::$4 >> (byte/signed byte/word/signed word) 1 (byte~) main::$6 ← (byte~) main::$5 >> (byte/signed byte/word/signed word) 2 - (byte) main::bits#0 ← *((byte[]) bits_count#1 + (byte~) main::$6) + (byte) main::bits#0 ← *((byte[]) bits_count#0 + (byte~) main::$6) (boolean~) main::$8 ← (byte) main::bits#0 < (byte/signed byte/word/signed word) 2 if((boolean~) main::$8) goto main::@2 to:main::@7 @@ -2046,7 +1971,7 @@ main::@2: scope:[main] from main::@1 main::@7 (byte~) main::$13 ← (byte~) main::$12 >> (byte/signed byte/word/signed word) 2 (byte~) main::$14 ← (byte~) main::$11 | (byte~) main::$13 (byte~) main::$15 ← (byte~) main::$14 >> (byte/signed byte/word/signed word) 1 - (byte) main::bits#1 ← *((byte[]) bits_count#1 + (byte~) main::$15) + (byte) main::bits#1 ← *((byte[]) bits_count#0 + (byte~) main::$15) (boolean~) main::$17 ← (byte) main::bits#1 < (byte/signed byte/word/signed word) 2 if((boolean~) main::$17) goto main::@3 to:main::@8 @@ -2061,7 +1986,7 @@ main::@3: scope:[main] from main::@2 main::@8 (byte~) main::$22 ← *((byte*) main::chargen1#0) & (byte/signed byte/word/signed word) 6 (byte~) main::$23 ← (byte~) main::$22 >> (byte/signed byte/word/signed word) 1 (byte~) main::$24 ← (byte~) main::$21 | (byte~) main::$23 - (byte) main::bits#2 ← *((byte[]) bits_count#1 + (byte~) main::$24) + (byte) main::bits#2 ← *((byte[]) bits_count#0 + (byte~) main::$24) (boolean~) main::$26 ← (byte) main::bits#2 < (byte/signed byte/word/signed word) 2 if((boolean~) main::$26) goto main::@4 to:main::@9 @@ -2075,7 +2000,7 @@ main::@4: scope:[main] from main::@3 main::@9 (byte~) main::$30 ← (byte~) main::$29 << (byte/signed byte/word/signed word) 2 (byte~) main::$31 ← *((byte*) main::chargen1#0) & (byte/signed byte/word/signed word) 1 (byte~) main::$32 ← (byte~) main::$30 | (byte~) main::$31 - (byte) main::bits#3 ← *((byte[]) bits_count#1 + (byte~) main::$32) + (byte) main::bits#3 ← *((byte[]) bits_count#0 + (byte~) main::$32) (boolean~) main::$34 ← (byte) main::bits#3 < (byte/signed byte/word/signed word) 2 if((boolean~) main::$34) goto main::@5 to:main::@10 @@ -2123,10 +2048,8 @@ main::@return: scope:[main] from main::@12 Redundant Phi (byte*) PROCPORT#1 (byte*) PROCPORT#0 Redundant Phi (byte*) CHARGEN#1 (byte*) CHARGEN#0 Redundant Phi (byte*) CHARSET4#1 (byte*) CHARSET4#0 -Redundant Phi (byte[]) bits_count#5 (byte[]) bits_count#0 Redundant Phi (byte*) SCREEN#12 (byte*) SCREEN#0 Redundant Phi (byte*) D018#13 (byte*) D018#0 -Redundant Phi (byte[]) bits_count#1 (byte[]) bits_count#5 Redundant Phi (byte*) CHARGEN#10 (byte*) CHARGEN#1 Redundant Phi (byte*) PROCPORT#10 (byte*) PROCPORT#1 Redundant Phi (byte*) SCREEN#10 (byte*) SCREEN#12 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/incrementinarray.log b/src/main/java/dk/camelot64/kickc/test/ref/incrementinarray.log index ed31e5ce6..244083e2a 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/incrementinarray.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/incrementinarray.log @@ -568,26 +568,22 @@ print_cls::@return: scope:[print_cls] from print_cls::@1 main: scope:[main] from @7 (byte*) line_cursor#18 ← phi( @7/(byte*) line_cursor#14 ) (byte*) char_cursor#24 ← phi( @7/(byte*) char_cursor#20 ) - (byte[]) txt#5 ← phi( @7/(byte[]) txt#6 ) call print_cls param-assignment to:main::@3 main::@3: scope:[main] from main (byte*) line_cursor#17 ← phi( main/(byte*) line_cursor#18 ) (byte*) char_cursor#22 ← phi( main/(byte*) char_cursor#24 ) - (byte[]) txt#3 ← phi( main/(byte[]) txt#5 ) (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 main::@1: scope:[main] from main::@3 main::@5 (byte) main::i#4 ← phi( main::@3/(byte) main::i#0 main::@5/(byte) main::i#1 ) (byte*) line_cursor#15 ← phi( main::@3/(byte*) line_cursor#17 main::@5/(byte*) line_cursor#3 ) (byte*) char_cursor#19 ← phi( main::@3/(byte*) char_cursor#22 main::@5/(byte*) char_cursor#6 ) - (byte[]) txt#1 ← phi( main::@3/(byte[]) txt#3 main::@5/(byte[]) txt#2 ) - (byte*) print_str::str#1 ← (byte[]) txt#1 + (byte*) print_str::str#1 ← (byte[]) txt#0 call print_str param-assignment to:main::@4 main::@4: scope:[main] from main::@1 (byte) main::i#3 ← phi( main::@1/(byte) main::i#4 ) - (byte[]) txt#4 ← phi( main::@1/(byte[]) txt#1 ) (byte*) line_cursor#13 ← phi( main::@1/(byte*) line_cursor#15 ) (byte*) char_cursor#13 ← phi( main::@1/(byte*) char_cursor#19 ) (byte*) char_cursor#5 ← (byte*) char_cursor#13 @@ -595,12 +591,11 @@ main::@4: scope:[main] from main::@1 to:main::@5 main::@5: scope:[main] from main::@4 (byte) main::i#2 ← phi( main::@4/(byte) main::i#3 ) - (byte[]) txt#2 ← phi( main::@4/(byte[]) txt#4 ) (byte*) char_cursor#14 ← phi( main::@4/(byte*) char_cursor#5 ) (byte*) line_cursor#9 ← phi( main::@4/(byte*) line_cursor#13 ) (byte*) line_cursor#3 ← (byte*) line_cursor#9 (byte*) char_cursor#6 ← (byte*) char_cursor#14 - *((byte[]) txt#2 + (byte/signed byte/word/signed word) 1) ← ++ *((byte[]) txt#2 + (byte/signed byte/word/signed word) 1) + *((byte[]) txt#0 + (byte/signed byte/word/signed word) 1) ← ++ *((byte[]) txt#0 + (byte/signed byte/word/signed word) 1) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 11 if((boolean~) main::$3) goto main::@1 @@ -613,7 +608,6 @@ main::@return: scope:[main] from main::@5 return to:@return @7: scope:[] from @6 - (byte[]) txt#6 ← phi( @6/(byte[]) txt#0 ) (byte*) line_cursor#14 ← phi( @6/(byte*) line_cursor#16 ) (byte*) char_cursor#20 ← phi( @6/(byte*) char_cursor#23 ) call main param-assignment @@ -698,26 +692,22 @@ print_cls::@return: scope:[print_cls] from print_cls::@1 main: scope:[main] from @7 (byte*) line_cursor#18 ← phi( @7/(byte*) line_cursor#14 ) (byte*) char_cursor#24 ← phi( @7/(byte*) char_cursor#20 ) - (byte[]) txt#5 ← phi( @7/(byte[]) txt#6 ) call print_cls param-assignment to:main::@3 main::@3: scope:[main] from main (byte*) line_cursor#17 ← phi( main/(byte*) line_cursor#18 ) (byte*) char_cursor#22 ← phi( main/(byte*) char_cursor#24 ) - (byte[]) txt#3 ← phi( main/(byte[]) txt#5 ) (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 main::@1: scope:[main] from main::@3 main::@5 (byte) main::i#4 ← phi( main::@3/(byte) main::i#0 main::@5/(byte) main::i#1 ) (byte*) line_cursor#15 ← phi( main::@3/(byte*) line_cursor#17 main::@5/(byte*) line_cursor#3 ) (byte*) char_cursor#19 ← phi( main::@3/(byte*) char_cursor#22 main::@5/(byte*) char_cursor#6 ) - (byte[]) txt#1 ← phi( main::@3/(byte[]) txt#3 main::@5/(byte[]) txt#2 ) - (byte*) print_str::str#1 ← (byte[]) txt#1 + (byte*) print_str::str#1 ← (byte[]) txt#0 call print_str param-assignment to:main::@4 main::@4: scope:[main] from main::@1 (byte) main::i#3 ← phi( main::@1/(byte) main::i#4 ) - (byte[]) txt#4 ← phi( main::@1/(byte[]) txt#1 ) (byte*) line_cursor#13 ← phi( main::@1/(byte*) line_cursor#15 ) (byte*) char_cursor#13 ← phi( main::@1/(byte*) char_cursor#2 ) (byte*) char_cursor#5 ← (byte*) char_cursor#13 @@ -725,12 +715,11 @@ main::@4: scope:[main] from main::@1 to:main::@5 main::@5: scope:[main] from main::@4 (byte) main::i#2 ← phi( main::@4/(byte) main::i#3 ) - (byte[]) txt#2 ← phi( main::@4/(byte[]) txt#4 ) (byte*) char_cursor#14 ← phi( main::@4/(byte*) char_cursor#4 ) (byte*) line_cursor#9 ← phi( main::@4/(byte*) line_cursor#2 ) (byte*) line_cursor#3 ← (byte*) line_cursor#9 (byte*) char_cursor#6 ← (byte*) char_cursor#14 - *((byte[]) txt#2 + (byte/signed byte/word/signed word) 1) ← ++ *((byte[]) txt#2 + (byte/signed byte/word/signed word) 1) + *((byte[]) txt#0 + (byte/signed byte/word/signed word) 1) ← ++ *((byte[]) txt#0 + (byte/signed byte/word/signed word) 1) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 11 if((boolean~) main::$3) goto main::@1 @@ -743,7 +732,6 @@ main::@return: scope:[main] from main::@5 return to:@return @7: scope:[] from @6 - (byte[]) txt#6 ← phi( @6/(byte[]) txt#0 ) (byte*) line_cursor#14 ← phi( @6/(byte*) line_cursor#16 ) (byte*) char_cursor#20 ← phi( @6/(byte*) char_cursor#23 ) call main param-assignment @@ -850,21 +838,14 @@ INITIAL SSA SYMBOL TABLE (byte*) print_str::str#4 (byte[]) txt (byte[]) txt#0 -(byte[]) txt#1 -(byte[]) txt#2 -(byte[]) txt#3 -(byte[]) txt#4 -(byte[]) txt#5 -(byte[]) txt#6 Not aliassing across scopes: print_str::str#4 print_str::str#1 Not aliassing across scopes: char_cursor#21 char_cursor#19 Not aliassing across scopes: line_cursor#12 line_cursor#13 Not aliassing across scopes: char_cursor#18 char_cursor#5 -Not aliassing across scopes: txt#5 txt#6 Not aliassing across scopes: char_cursor#24 char_cursor#20 Not aliassing across scopes: line_cursor#18 line_cursor#14 -Not aliassing across scopes: print_str::str#1 txt#1 +Not aliassing across scopes: print_str::str#1 txt#0 Not aliassing across scopes: char_cursor#13 char_cursor#2 Not aliassing across scopes: line_cursor#9 line_cursor#2 Not aliassing across scopes: char_cursor#14 char_cursor#4 @@ -874,16 +855,13 @@ Alias (byte*) char_cursor#0 = (byte*) line_cursor#0 (byte*) char_cursor#23 (byte Alias (byte*) print_str::str#2 = (byte*) print_str::str#3 Alias (byte*) char_cursor#10 = (byte*) char_cursor#9 (byte*) char_cursor#17 (byte*) char_cursor#2 Alias (byte*) line_cursor#1 = (byte*~) print_ln::$0 (byte*) line_cursor#7 (byte*) char_cursor#3 (byte*) line_cursor#8 (byte*) char_cursor#12 (byte*) line_cursor#2 (byte*) char_cursor#4 -Alias (byte[]) txt#3 = (byte[]) txt#5 Alias (byte*) char_cursor#22 = (byte*) char_cursor#24 Alias (byte*) line_cursor#17 = (byte*) line_cursor#18 Alias (byte*) line_cursor#13 = (byte*) line_cursor#15 -Alias (byte[]) txt#1 = (byte[]) txt#4 (byte[]) txt#2 Alias (byte) main::i#2 = (byte) main::i#3 (byte) main::i#4 Alias (byte*) char_cursor#13 = (byte*) char_cursor#5 Alias (byte*) line_cursor#10 = (byte*) line_cursor#3 (byte*) line_cursor#9 (byte*) line_cursor#4 Alias (byte*) char_cursor#14 = (byte*) char_cursor#6 (byte*) char_cursor#15 (byte*) char_cursor#7 -Alias (byte[]) txt#0 = (byte[]) txt#6 Alias (byte*) char_cursor#16 = (byte*) char_cursor#8 Alias (byte*) line_cursor#11 = (byte*) line_cursor#5 Succesful SSA optimization Pass2AliasElimination @@ -945,7 +923,6 @@ print_cls::@return: scope:[print_cls] from print_cls::@1 main: scope:[main] from @7 (byte*) line_cursor#17 ← phi( @7/(byte*) char_cursor#0 ) (byte*) char_cursor#22 ← phi( @7/(byte*) char_cursor#0 ) - (byte[]) txt#3 ← phi( @7/(byte[]) txt#0 ) call print_cls param-assignment to:main::@3 main::@3: scope:[main] from main @@ -955,8 +932,7 @@ main::@1: scope:[main] from main::@3 main::@5 (byte) main::i#2 ← phi( main::@3/(byte) main::i#0 main::@5/(byte) main::i#1 ) (byte*) line_cursor#13 ← phi( main::@3/(byte*) line_cursor#17 main::@5/(byte*) line_cursor#10 ) (byte*) char_cursor#19 ← phi( main::@3/(byte*) char_cursor#22 main::@5/(byte*) char_cursor#14 ) - (byte[]) txt#1 ← phi( main::@3/(byte[]) txt#3 main::@5/(byte[]) txt#1 ) - (byte*) print_str::str#1 ← (byte[]) txt#1 + (byte*) print_str::str#1 ← (byte[]) txt#0 call print_str param-assignment to:main::@4 main::@4: scope:[main] from main::@1 @@ -966,7 +942,7 @@ main::@4: scope:[main] from main::@1 main::@5: scope:[main] from main::@4 (byte*) char_cursor#14 ← phi( main::@4/(byte*) line_cursor#1 ) (byte*) line_cursor#10 ← phi( main::@4/(byte*) line_cursor#1 ) - *((byte[]) txt#1 + (byte/signed byte/word/signed word) 1) ← ++ *((byte[]) txt#1 + (byte/signed byte/word/signed word) 1) + *((byte[]) txt#0 + (byte/signed byte/word/signed word) 1) ← ++ *((byte[]) txt#0 + (byte/signed byte/word/signed word) 1) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 11 if((boolean~) main::$3) goto main::@1 @@ -987,17 +963,15 @@ Not aliassing across scopes: print_str::str#4 print_str::str#1 Not aliassing across scopes: char_cursor#21 char_cursor#19 Not aliassing across scopes: line_cursor#12 line_cursor#13 Not aliassing across scopes: char_cursor#18 char_cursor#13 -Not aliassing across scopes: txt#3 txt#0 Not aliassing across scopes: char_cursor#22 char_cursor#0 Not aliassing across scopes: line_cursor#17 char_cursor#0 -Not aliassing across scopes: print_str::str#1 txt#1 +Not aliassing across scopes: print_str::str#1 txt#0 Not aliassing across scopes: char_cursor#13 char_cursor#10 Not aliassing across scopes: line_cursor#10 line_cursor#1 Not aliassing across scopes: char_cursor#14 line_cursor#1 Not aliassing across scopes: char_cursor#16 char_cursor#14 Not aliassing across scopes: line_cursor#11 line_cursor#10 Self Phi Eliminated (byte*) char_cursor#11 -Self Phi Eliminated (byte[]) txt#1 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -1057,7 +1031,6 @@ print_cls::@return: scope:[print_cls] from print_cls::@1 main: scope:[main] from @7 (byte*) line_cursor#17 ← phi( @7/(byte*) char_cursor#0 ) (byte*) char_cursor#22 ← phi( @7/(byte*) char_cursor#0 ) - (byte[]) txt#3 ← phi( @7/(byte[]) txt#0 ) call print_cls param-assignment to:main::@3 main::@3: scope:[main] from main @@ -1067,8 +1040,7 @@ main::@1: scope:[main] from main::@3 main::@5 (byte) main::i#2 ← phi( main::@3/(byte) main::i#0 main::@5/(byte) main::i#1 ) (byte*) line_cursor#13 ← phi( main::@3/(byte*) line_cursor#17 main::@5/(byte*) line_cursor#10 ) (byte*) char_cursor#19 ← phi( main::@3/(byte*) char_cursor#22 main::@5/(byte*) char_cursor#14 ) - (byte[]) txt#1 ← phi( main::@3/(byte[]) txt#3 ) - (byte*) print_str::str#1 ← (byte[]) txt#1 + (byte*) print_str::str#1 ← (byte[]) txt#0 call print_str param-assignment to:main::@4 main::@4: scope:[main] from main::@1 @@ -1078,7 +1050,7 @@ main::@4: scope:[main] from main::@1 main::@5: scope:[main] from main::@4 (byte*) char_cursor#14 ← phi( main::@4/(byte*) line_cursor#1 ) (byte*) line_cursor#10 ← phi( main::@4/(byte*) line_cursor#1 ) - *((byte[]) txt#1 + (byte/signed byte/word/signed word) 1) ← ++ *((byte[]) txt#1 + (byte/signed byte/word/signed word) 1) + *((byte[]) txt#0 + (byte/signed byte/word/signed word) 1) ← ++ *((byte[]) txt#0 + (byte/signed byte/word/signed word) 1) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$3 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 11 if((boolean~) main::$3) goto main::@1 @@ -1100,10 +1072,8 @@ Redundant Phi (byte*) char_cursor#21 (byte*) char_cursor#19 Redundant Phi (byte*) line_cursor#12 (byte*) line_cursor#13 Redundant Phi (byte*) char_cursor#18 (byte*) char_cursor#13 Redundant Phi (byte*) char_cursor#11 (byte*) char_cursor#18 -Redundant Phi (byte[]) txt#3 (byte[]) txt#0 Redundant Phi (byte*) char_cursor#22 (byte*) char_cursor#0 Redundant Phi (byte*) line_cursor#17 (byte*) char_cursor#0 -Redundant Phi (byte[]) txt#1 (byte[]) txt#3 Redundant Phi (byte*) char_cursor#13 (byte*) char_cursor#10 Redundant Phi (byte*) line_cursor#10 (byte*) line_cursor#1 Redundant Phi (byte*) char_cursor#14 (byte*) line_cursor#1 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/inline-string.log b/src/main/java/dk/camelot64/kickc/test/ref/inline-string.log index cd40f8598..2b40f4b14 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/inline-string.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/inline-string.log @@ -215,16 +215,14 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @2 (byte*) screen#15 ← phi( @2/(byte*) screen#17 ) - (byte[]) msg1#1 ← phi( @2/(byte[]) msg1#2 ) (byte[]) main::msg2#0 ← (const string) main::$3 - (byte*) print::msg#0 ← (byte[]) msg1#1 + (byte*) print::msg#0 ← (byte[]) msg1#0 call print param-assignment to:main::@1 main::@1: scope:[main] from main - (byte[]) main::msg2#1 ← phi( main/(byte[]) main::msg2#0 ) (byte*) screen#8 ← phi( main/(byte*) screen#15 ) (byte*) screen#0 ← (byte*) screen#8 - (byte*) print::msg#1 ← (byte[]) main::msg2#1 + (byte*) print::msg#1 ← (byte[]) main::msg2#0 call print param-assignment to:main::@2 main::@2: scope:[main] from main::@1 @@ -243,7 +241,6 @@ main::@return: scope:[main] from main::@3 return to:@return @1: scope:[] from @begin - (byte[]) msg1#3 ← phi( @begin/(byte[]) msg1#0 ) (byte*) screen#4 ← ((byte*)) (word/signed word) 1024 to:@2 print: scope:[print] from main main::@1 main::@2 @@ -270,7 +267,6 @@ print::@return: scope:[print] from print::@1 to:@return @2: scope:[] from @1 (byte*) screen#17 ← phi( @1/(byte*) screen#4 ) - (byte[]) msg1#2 ← phi( @1/(byte[]) msg1#3 ) call main param-assignment to:@3 @3: scope:[] from @2 @@ -285,16 +281,14 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN to:@1 main: scope:[main] from @2 (byte*) screen#15 ← phi( @2/(byte*) screen#17 ) - (byte[]) msg1#1 ← phi( @2/(byte[]) msg1#2 ) (byte[]) main::msg2#0 ← (const string) main::$3 - (byte*) print::msg#0 ← (byte[]) msg1#1 + (byte*) print::msg#0 ← (byte[]) msg1#0 call print param-assignment to:main::@1 main::@1: scope:[main] from main - (byte[]) main::msg2#1 ← phi( main/(byte[]) main::msg2#0 ) (byte*) screen#8 ← phi( main/(byte*) screen#6 ) (byte*) screen#0 ← (byte*) screen#8 - (byte*) print::msg#1 ← (byte[]) main::msg2#1 + (byte*) print::msg#1 ← (byte[]) main::msg2#0 call print param-assignment to:main::@2 main::@2: scope:[main] from main::@1 @@ -313,7 +307,6 @@ main::@return: scope:[main] from main::@3 return to:@return @1: scope:[] from @begin - (byte[]) msg1#3 ← phi( @begin/(byte[]) msg1#0 ) (byte*) screen#4 ← ((byte*)) (word/signed word) 1024 to:@2 print: scope:[print] from main main::@1 main::@2 @@ -340,7 +333,6 @@ print::@return: scope:[print] from print::@1 to:@return @2: scope:[] from @1 (byte*) screen#17 ← phi( @1/(byte*) screen#4 ) - (byte[]) msg1#2 ← phi( @1/(byte[]) msg1#3 ) call main param-assignment to:@3 @3: scope:[] from @2 @@ -365,12 +357,8 @@ INITIAL SSA SYMBOL TABLE (const string) main::msg = (string) "message 3 @" (byte[]) main::msg2 (byte[]) main::msg2#0 -(byte[]) main::msg2#1 (byte[]) msg1 (byte[]) msg1#0 -(byte[]) msg1#1 -(byte[]) msg1#2 -(byte[]) msg1#3 (void()) print((byte*) print::msg) (boolean~) print::$0 (label) print::@1 @@ -405,21 +393,18 @@ INITIAL SSA SYMBOL TABLE (byte*) screen#8 (byte*) screen#9 -Not aliassing across scopes: msg1#1 msg1#2 Not aliassing across scopes: screen#15 screen#17 -Not aliassing across scopes: print::msg#0 msg1#1 +Not aliassing across scopes: print::msg#0 msg1#0 Not aliassing across scopes: screen#8 screen#6 -Not aliassing across scopes: print::msg#1 main::msg2#1 +Not aliassing across scopes: print::msg#1 main::msg2#0 Not aliassing across scopes: screen#9 screen#6 Not aliassing across scopes: screen#10 screen#6 Not aliassing across scopes: print::msg#6 print::msg#0 Not aliassing across scopes: screen#18 screen#15 Not aliassing across scopes: screen#14 screen#3 -Alias (byte[]) main::msg2#0 = (byte[]) main::msg2#1 Alias (byte*) screen#0 = (byte*) screen#8 Alias (byte*) screen#1 = (byte*) screen#9 Alias (byte*) screen#10 = (byte*) screen#2 (byte*) screen#11 (byte*) screen#3 -Alias (byte[]) msg1#0 = (byte[]) msg1#3 (byte[]) msg1#2 Alias (byte*) print::msg#4 = (byte*) print::msg#5 Alias (byte*) screen#12 = (byte*) screen#16 (byte*) screen#13 (byte*) screen#6 Alias (byte*) screen#17 = (byte*) screen#4 @@ -431,9 +416,8 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @2 (byte*) screen#15 ← phi( @2/(byte*) screen#17 ) - (byte[]) msg1#1 ← phi( @2/(byte[]) msg1#0 ) (byte[]) main::msg2#0 ← (const string) main::$3 - (byte*) print::msg#0 ← (byte[]) msg1#1 + (byte*) print::msg#0 ← (byte[]) msg1#0 call print param-assignment to:main::@1 main::@1: scope:[main] from main @@ -481,9 +465,8 @@ print::@return: scope:[print] from print::@1 to:@end @end: scope:[] from @3 -Not aliassing across scopes: msg1#1 msg1#0 Not aliassing across scopes: screen#15 screen#17 -Not aliassing across scopes: print::msg#0 msg1#1 +Not aliassing across scopes: print::msg#0 msg1#0 Not aliassing across scopes: screen#0 screen#12 Not aliassing across scopes: print::msg#1 main::msg2#0 Not aliassing across scopes: screen#1 screen#12 @@ -491,7 +474,6 @@ Not aliassing across scopes: screen#10 screen#12 Not aliassing across scopes: print::msg#6 print::msg#0 Not aliassing across scopes: screen#18 screen#15 Not aliassing across scopes: screen#14 screen#10 -Redundant Phi (byte[]) msg1#1 (byte[]) msg1#0 Redundant Phi (byte*) screen#15 (byte*) screen#17 Redundant Phi (byte*) screen#0 (byte*) screen#12 Redundant Phi (byte*) screen#1 (byte*) screen#12 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/inline-word.log b/src/main/java/dk/camelot64/kickc/test/ref/inline-word.log index a5a37170c..928382524 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/inline-word.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/inline-word.log @@ -180,7 +180,6 @@ main::@return: scope:[main] from main::@3 to:@end @end: scope:[] from @2 -Completing Phi functions... Completing Phi functions... Completing Phi functions... CONTROL FLOW GRAPH SSA @@ -198,14 +197,12 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::h#4 ← phi( main/(byte) main::h#0 main::@3/(byte) main::h#1 ) - (byte[]) main::his#2 ← phi( main/(byte[]) main::his#0 main::@3/(byte[]) main::his#3 ) (byte) main::l#0 ← (byte/signed byte/word/signed word) 4 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::l#2 ← phi( main::@1/(byte) main::l#0 main::@2/(byte) main::l#1 ) (byte) main::h#2 ← phi( main::@1/(byte) main::h#4 main::@2/(byte) main::h#2 ) - (byte[]) main::his#1 ← phi( main::@1/(byte[]) main::his#2 main::@2/(byte[]) main::his#1 ) - (word) main::w#0 ← { *((byte[]) main::his#1 + (byte) main::h#2), (byte) main::l#2 } + (word) main::w#0 ← { *((byte[]) main::his#0 + (byte) main::h#2), (byte) main::l#2 } (byte*~) main::$5 ← ((byte*)) (word) main::w#0 (byte*) main::sc#0 ← (byte*~) main::$5 *((byte*) main::sc#0) ← (byte) '*' @@ -214,7 +211,6 @@ main::@2: scope:[main] from main::@1 main::@2 if((boolean~) main::$6) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@2 - (byte[]) main::his#3 ← phi( main::@2/(byte[]) main::his#1 ) (byte) main::h#3 ← phi( main::@2/(byte) main::h#2 ) (byte) main::h#1 ← ++ (byte) main::h#3 (boolean~) main::$7 ← (byte) main::h#1 != (byte/signed byte/word/signed word) 3 @@ -245,14 +241,12 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::h#4 ← phi( main/(byte) main::h#0 main::@3/(byte) main::h#1 ) - (byte[]) main::his#2 ← phi( main/(byte[]) main::his#0 main::@3/(byte[]) main::his#3 ) (byte) main::l#0 ← (byte/signed byte/word/signed word) 4 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::l#2 ← phi( main::@1/(byte) main::l#0 main::@2/(byte) main::l#1 ) (byte) main::h#2 ← phi( main::@1/(byte) main::h#4 main::@2/(byte) main::h#2 ) - (byte[]) main::his#1 ← phi( main::@1/(byte[]) main::his#2 main::@2/(byte[]) main::his#1 ) - (word) main::w#0 ← { *((byte[]) main::his#1 + (byte) main::h#2), (byte) main::l#2 } + (word) main::w#0 ← { *((byte[]) main::his#0 + (byte) main::h#2), (byte) main::l#2 } (byte*~) main::$5 ← ((byte*)) (word) main::w#0 (byte*) main::sc#0 ← (byte*~) main::$5 *((byte*) main::sc#0) ← (byte) '*' @@ -261,7 +255,6 @@ main::@2: scope:[main] from main::@1 main::@2 if((boolean~) main::$6) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@2 - (byte[]) main::his#3 ← phi( main::@2/(byte[]) main::his#1 ) (byte) main::h#3 ← phi( main::@2/(byte) main::h#2 ) (byte) main::h#1 ← ++ (byte) main::h#3 (boolean~) main::$7 ← (byte) main::h#1 != (byte/signed byte/word/signed word) 3 @@ -305,9 +298,6 @@ INITIAL SSA SYMBOL TABLE (byte) main::h#4 (byte[]) main::his (byte[]) main::his#0 -(byte[]) main::his#1 -(byte[]) main::his#2 -(byte[]) main::his#3 (byte) main::l (byte) main::l#0 (byte) main::l#1 @@ -334,14 +324,12 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::h#4 ← phi( main/(byte) main::h#0 main::@3/(byte) main::h#1 ) - (byte[]) main::his#2 ← phi( main/(byte[]) main::his#0 main::@3/(byte[]) main::his#3 ) (byte) main::l#0 ← (byte/signed byte/word/signed word) 4 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::l#2 ← phi( main::@1/(byte) main::l#0 main::@2/(byte) main::l#1 ) (byte) main::h#2 ← phi( main::@1/(byte) main::h#4 main::@2/(byte) main::h#2 ) - (byte[]) main::his#1 ← phi( main::@1/(byte[]) main::his#2 main::@2/(byte[]) main::his#1 ) - (word) main::w#0 ← { *((byte[]) main::his#1 + (byte) main::h#2), (byte) main::l#2 } + (word) main::w#0 ← { *((byte[]) main::his#0 + (byte) main::h#2), (byte) main::l#2 } (byte*~) main::$5 ← ((byte*)) (word) main::w#0 (byte*) main::sc#0 ← (byte*~) main::$5 *((byte*) main::sc#0) ← (byte) '*' @@ -350,7 +338,6 @@ main::@2: scope:[main] from main::@1 main::@2 if((boolean~) main::$6) goto main::@2 to:main::@3 main::@3: scope:[main] from main::@2 - (byte[]) main::his#3 ← phi( main::@2/(byte[]) main::his#1 ) (byte) main::h#3 ← phi( main::@2/(byte) main::h#2 ) (byte) main::h#1 ← ++ (byte) main::h#3 (boolean~) main::$7 ← (byte) main::h#1 != (byte/signed byte/word/signed word) 3 @@ -366,7 +353,6 @@ main::@return: scope:[main] from main::@3 Alias (byte*) main::sc#0 = (byte*~) main::$5 Alias (byte) main::h#2 = (byte) main::h#3 -Alias (byte[]) main::his#1 = (byte[]) main::his#3 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -383,14 +369,12 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::h#4 ← phi( main/(byte) main::h#0 main::@3/(byte) main::h#1 ) - (byte[]) main::his#2 ← phi( main/(byte[]) main::his#0 main::@3/(byte[]) main::his#1 ) (byte) main::l#0 ← (byte/signed byte/word/signed word) 4 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::l#2 ← phi( main::@1/(byte) main::l#0 main::@2/(byte) main::l#1 ) (byte) main::h#2 ← phi( main::@1/(byte) main::h#4 main::@2/(byte) main::h#2 ) - (byte[]) main::his#1 ← phi( main::@1/(byte[]) main::his#2 main::@2/(byte[]) main::his#1 ) - (word) main::w#0 ← { *((byte[]) main::his#1 + (byte) main::h#2), (byte) main::l#2 } + (word) main::w#0 ← { *((byte[]) main::his#0 + (byte) main::h#2), (byte) main::l#2 } (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 *((byte*) main::sc#0) ← (byte) '*' (byte) main::l#1 ← ++ (byte) main::l#2 @@ -410,7 +394,6 @@ main::@return: scope:[main] from main::@3 to:@end @end: scope:[] from @1 -Self Phi Eliminated (byte[]) main::his#1 Self Phi Eliminated (byte) main::h#2 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @@ -428,14 +411,12 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::h#4 ← phi( main/(byte) main::h#0 main::@3/(byte) main::h#1 ) - (byte[]) main::his#2 ← phi( main/(byte[]) main::his#0 main::@3/(byte[]) main::his#1 ) (byte) main::l#0 ← (byte/signed byte/word/signed word) 4 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::l#2 ← phi( main::@1/(byte) main::l#0 main::@2/(byte) main::l#1 ) (byte) main::h#2 ← phi( main::@1/(byte) main::h#4 ) - (byte[]) main::his#1 ← phi( main::@1/(byte[]) main::his#2 ) - (word) main::w#0 ← { *((byte[]) main::his#1 + (byte) main::h#2), (byte) main::l#2 } + (word) main::w#0 ← { *((byte[]) main::his#0 + (byte) main::h#2), (byte) main::l#2 } (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 *((byte*) main::sc#0) ← (byte) '*' (byte) main::l#1 ← ++ (byte) main::l#2 @@ -455,7 +436,6 @@ main::@return: scope:[main] from main::@3 to:@end @end: scope:[] from @1 -Redundant Phi (byte[]) main::his#1 (byte[]) main::his#2 Redundant Phi (byte) main::h#2 (byte) main::h#4 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH @@ -473,12 +453,11 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::h#4 ← phi( main/(byte) main::h#0 main::@3/(byte) main::h#1 ) - (byte[]) main::his#2 ← phi( main/(byte[]) main::his#0 main::@3/(byte[]) main::his#2 ) (byte) main::l#0 ← (byte/signed byte/word/signed word) 4 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::l#2 ← phi( main::@1/(byte) main::l#0 main::@2/(byte) main::l#1 ) - (word) main::w#0 ← { *((byte[]) main::his#2 + (byte) main::h#4), (byte) main::l#2 } + (word) main::w#0 ← { *((byte[]) main::his#0 + (byte) main::h#4), (byte) main::l#2 } (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 *((byte*) main::sc#0) ← (byte) '*' (byte) main::l#1 ← ++ (byte) main::l#2 @@ -516,12 +495,11 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::h#4 ← phi( main/(byte) main::h#0 main::@3/(byte) main::h#1 ) - (byte[]) main::his#2 ← phi( main/(byte[]) main::his#0 main::@3/(byte[]) main::his#2 ) (byte) main::l#0 ← (byte/signed byte/word/signed word) 4 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::l#2 ← phi( main::@1/(byte) main::l#0 main::@2/(byte) main::l#1 ) - (word) main::w#0 ← { *((byte[]) main::his#2 + (byte) main::h#4), (byte) main::l#2 } + (word) main::w#0 ← { *((byte[]) main::his#0 + (byte) main::h#4), (byte) main::l#2 } (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 *((byte*) main::sc#0) ← (byte) '*' (byte) main::l#1 ← ++ (byte) main::l#2 @@ -556,11 +534,10 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::h#4 ← phi( main/(const byte) main::h#0 main::@3/(byte) main::h#1 ) - (byte[]) main::his#2 ← phi( main/(byte[]) main::his#0 main::@3/(byte[]) main::his#2 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::l#2 ← phi( main::@1/(const byte) main::l#0 main::@2/(byte) main::l#1 ) - (word) main::w#0 ← { *((byte[]) main::his#2 + (byte) main::h#4), (byte) main::l#2 } + (word) main::w#0 ← { *((byte[]) main::his#0 + (byte) main::h#4), (byte) main::l#2 } (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 *((byte*) main::sc#0) ← (byte) '*' (byte) main::l#1 ← ++ (byte) main::l#2 @@ -592,11 +569,10 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::h#4 ← phi( main/(const byte) main::h#0 main::@3/(byte) main::h#1 ) - (byte[]) main::his#2 ← phi( main/(byte[]) main::his#0 main::@3/(byte[]) main::his#2 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::l#2 ← phi( main::@1/(const byte) main::l#0 main::@2/(byte) main::l#1 ) - (word) main::w#0 ← { *((byte[]) main::his#2 + (byte) main::h#4), (byte) main::l#2 } + (word) main::w#0 ← { *((byte[]) main::his#0 + (byte) main::h#4), (byte) main::l#2 } (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 *((byte*) main::sc#0) ← (byte) '*' (byte) main::l#1 ← ++ (byte) main::l#2 @@ -625,11 +601,10 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::h#4 ← phi( main/(const byte) main::h#0 main::@3/(byte) main::h#1 ) - (byte[]) main::his#2 ← phi( main/(byte[]) main::his#0 main::@3/(byte[]) main::his#2 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::l#2 ← phi( main::@1/(const byte) main::l#0 main::@2/(byte) main::l#1 ) - (word) main::w#0 ← { *((byte[]) main::his#2 + (byte) main::h#4), (byte) main::l#2 } + (word) main::w#0 ← { *((byte[]) main::his#0 + (byte) main::h#4), (byte) main::l#2 } (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 *((byte*) main::sc#0) ← (byte) '*' (byte) main::l#1 ← ++ (byte) main::l#2 @@ -656,11 +631,10 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::h#4 ← phi( main/(const byte) main::h#0 main::@3/(byte) main::h#1 ) - (byte[]) main::his#2 ← phi( main/(const byte[]) main::his#0 main::@3/(byte[]) main::his#2 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::l#2 ← phi( main::@1/(const byte) main::l#0 main::@2/(byte) main::l#1 ) - (word) main::w#0 ← { *((byte[]) main::his#2 + (byte) main::h#4), (byte) main::l#2 } + (word) main::w#0 ← { *((const byte[]) main::his#0 + (byte) main::h#4), (byte) main::l#2 } (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 *((byte*) main::sc#0) ← (byte) '*' (byte) main::l#1 ← ++ (byte) main::l#2 @@ -678,7 +652,7 @@ main::@return: scope:[main] from main::@3 to:@end @end: scope:[] from @1 -Fixing word constructor with main::$8 ← *(main::his#2 + main::h#4) w= main::l#2 +Fixing word constructor with main::$8 ← *(main::his#0 + main::h#4) w= main::l#2 Succesful SSA optimization Pass2FixWordConstructors CONTROL FLOW GRAPH @begin: scope:[] from @@ -687,11 +661,10 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::h#4 ← phi( main/(const byte) main::h#0 main::@3/(byte) main::h#1 ) - (byte[]) main::his#2 ← phi( main/(const byte[]) main::his#0 main::@3/(byte[]) main::his#2 ) to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::l#2 ← phi( main::@1/(const byte) main::l#0 main::@2/(byte) main::l#1 ) - (word~) main::$8 ← *((byte[]) main::his#2 + (byte) main::h#4) w= (byte) main::l#2 + (word~) main::$8 ← *((const byte[]) main::his#0 + (byte) main::h#4) w= (byte) main::l#2 (word) main::w#0 ← (word~) main::$8 (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 *((byte*) main::sc#0) ← (byte) '*' @@ -713,68 +686,6 @@ main::@return: scope:[main] from main::@3 Alias (word) main::w#0 = (word~) main::$8 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH -@begin: scope:[] from - to:@1 -main: scope:[main] from @1 - to:main::@1 -main::@1: scope:[main] from main main::@3 - (byte) main::h#4 ← phi( main/(const byte) main::h#0 main::@3/(byte) main::h#1 ) - (byte[]) main::his#2 ← phi( main/(const byte[]) main::his#0 main::@3/(byte[]) main::his#2 ) - to:main::@2 -main::@2: scope:[main] from main::@1 main::@2 - (byte) main::l#2 ← phi( main::@1/(const byte) main::l#0 main::@2/(byte) main::l#1 ) - (word) main::w#0 ← *((byte[]) main::his#2 + (byte) main::h#4) w= (byte) main::l#2 - (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 - *((byte*) main::sc#0) ← (byte) '*' - (byte) main::l#1 ← ++ (byte) main::l#2 - if((byte) main::l#1!=(byte/signed byte/word/signed word) 8) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@2 - (byte) main::h#1 ← ++ (byte) main::h#4 - if((byte) main::h#1!=(byte/signed byte/word/signed word) 3) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@3 - return - to:@return -@1: scope:[] from @begin - call main param-assignment - to:@end -@end: scope:[] from @1 - -Self Phi Eliminated (byte[]) main::his#2 -Succesful SSA optimization Pass2SelfPhiElimination -CONTROL FLOW GRAPH -@begin: scope:[] from - to:@1 -main: scope:[main] from @1 - to:main::@1 -main::@1: scope:[main] from main main::@3 - (byte) main::h#4 ← phi( main/(const byte) main::h#0 main::@3/(byte) main::h#1 ) - (byte[]) main::his#2 ← phi( main/(const byte[]) main::his#0 ) - to:main::@2 -main::@2: scope:[main] from main::@1 main::@2 - (byte) main::l#2 ← phi( main::@1/(const byte) main::l#0 main::@2/(byte) main::l#1 ) - (word) main::w#0 ← *((byte[]) main::his#2 + (byte) main::h#4) w= (byte) main::l#2 - (byte*) main::sc#0 ← ((byte*)) (word) main::w#0 - *((byte*) main::sc#0) ← (byte) '*' - (byte) main::l#1 ← ++ (byte) main::l#2 - if((byte) main::l#1!=(byte/signed byte/word/signed word) 8) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@2 - (byte) main::h#1 ← ++ (byte) main::h#4 - if((byte) main::h#1!=(byte/signed byte/word/signed word) 3) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@3 - return - to:@return -@1: scope:[] from @begin - call main param-assignment - to:@end -@end: scope:[] from @1 - -Redundant Phi (byte[]) main::his#2 (const byte[]) main::his#0 -Succesful SSA optimization Pass2RedundantPhiElimination -CONTROL FLOW GRAPH @begin: scope:[] from to:@1 main: scope:[main] from @1 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/inlinearrayproblem.log b/src/main/java/dk/camelot64/kickc/test/ref/inlinearrayproblem.log index d179a674e..3a3182263 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/inlinearrayproblem.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/inlinearrayproblem.log @@ -148,12 +148,10 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@1 (byte*) SCREEN2#1 ← phi( main/(byte*) SCREEN2#2 main::@1/(byte*) SCREEN2#1 ) - (byte[]) main::data#1 ← phi( main/(byte[]) main::data#0 main::@1/(byte[]) main::data#1 ) (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@1/(byte*) SCREEN#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) - (byte[]) main::txt#1 ← phi( main/(byte[]) main::txt#0 main::@1/(byte[]) main::txt#1 ) - *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::txt#1 + (byte) main::i#2) - *((byte*) SCREEN2#1 + (byte) main::i#2) ← *((byte[]) main::data#1 + (byte) main::i#2) + *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::txt#0 + (byte) main::i#2) + *((byte*) SCREEN2#1 + (byte) main::i#2) ← *((byte[]) main::data#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$0 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4 if((boolean~) main::$0) goto main::@1 @@ -185,12 +183,10 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@1 (byte*) SCREEN2#1 ← phi( main/(byte*) SCREEN2#2 main::@1/(byte*) SCREEN2#1 ) - (byte[]) main::data#1 ← phi( main/(byte[]) main::data#0 main::@1/(byte[]) main::data#1 ) (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@1/(byte*) SCREEN#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) - (byte[]) main::txt#1 ← phi( main/(byte[]) main::txt#0 main::@1/(byte[]) main::txt#1 ) - *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::txt#1 + (byte) main::i#2) - *((byte*) SCREEN2#1 + (byte) main::i#2) ← *((byte[]) main::data#1 + (byte) main::i#2) + *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::txt#0 + (byte) main::i#2) + *((byte*) SCREEN2#1 + (byte) main::i#2) ← *((byte[]) main::data#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$0 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4 if((boolean~) main::$0) goto main::@1 @@ -230,14 +226,12 @@ INITIAL SSA SYMBOL TABLE (label) main::@return (byte[]) main::data (byte[]) main::data#0 -(byte[]) main::data#1 (byte) main::i (byte) main::i#0 (byte) main::i#1 (byte) main::i#2 (byte[]) main::txt (byte[]) main::txt#0 -(byte[]) main::txt#1 Culled Empty Block (label) @2 Succesful SSA optimization Pass2CullEmptyBlocks @@ -256,12 +250,10 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@1 (byte*) SCREEN2#1 ← phi( main/(byte*) SCREEN2#2 main::@1/(byte*) SCREEN2#1 ) - (byte[]) main::data#1 ← phi( main/(byte[]) main::data#0 main::@1/(byte[]) main::data#1 ) (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@1/(byte*) SCREEN#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) - (byte[]) main::txt#1 ← phi( main/(byte[]) main::txt#0 main::@1/(byte[]) main::txt#1 ) - *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::txt#1 + (byte) main::i#2) - *((byte*) SCREEN2#1 + (byte) main::i#2) ← *((byte[]) main::data#1 + (byte) main::i#2) + *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::txt#0 + (byte) main::i#2) + *((byte*) SCREEN2#1 + (byte) main::i#2) ← *((byte[]) main::data#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$0 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4 if((boolean~) main::$0) goto main::@1 @@ -296,12 +288,10 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@1 (byte*) SCREEN2#1 ← phi( main/(byte*) SCREEN2#2 main::@1/(byte*) SCREEN2#1 ) - (byte[]) main::data#1 ← phi( main/(byte[]) main::data#0 main::@1/(byte[]) main::data#1 ) (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@1/(byte*) SCREEN#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) - (byte[]) main::txt#1 ← phi( main/(byte[]) main::txt#0 main::@1/(byte[]) main::txt#1 ) - *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::txt#1 + (byte) main::i#2) - *((byte*) SCREEN2#1 + (byte) main::i#2) ← *((byte[]) main::data#1 + (byte) main::i#2) + *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::txt#0 + (byte) main::i#2) + *((byte*) SCREEN2#1 + (byte) main::i#2) ← *((byte[]) main::data#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$0 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4 if((boolean~) main::$0) goto main::@1 @@ -316,9 +306,7 @@ main::@return: scope:[main] from main::@1 Not aliassing across scopes: SCREEN#2 SCREEN#0 Not aliassing across scopes: SCREEN2#2 SCREEN2#0 -Self Phi Eliminated (byte[]) main::txt#1 Self Phi Eliminated (byte*) SCREEN#1 -Self Phi Eliminated (byte[]) main::data#1 Self Phi Eliminated (byte*) SCREEN2#1 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @@ -336,12 +324,10 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@1 (byte*) SCREEN2#1 ← phi( main/(byte*) SCREEN2#2 ) - (byte[]) main::data#1 ← phi( main/(byte[]) main::data#0 ) (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) - (byte[]) main::txt#1 ← phi( main/(byte[]) main::txt#0 ) - *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::txt#1 + (byte) main::i#2) - *((byte*) SCREEN2#1 + (byte) main::i#2) ← *((byte[]) main::data#1 + (byte) main::i#2) + *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) main::txt#0 + (byte) main::i#2) + *((byte*) SCREEN2#1 + (byte) main::i#2) ← *((byte[]) main::data#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$0 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4 if((boolean~) main::$0) goto main::@1 @@ -356,9 +342,7 @@ main::@return: scope:[main] from main::@1 Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN2#2 (byte*) SCREEN2#0 -Redundant Phi (byte[]) main::txt#1 (byte[]) main::txt#0 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#2 -Redundant Phi (byte[]) main::data#1 (byte[]) main::data#0 Redundant Phi (byte*) SCREEN2#1 (byte*) SCREEN2#2 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH diff --git a/src/main/java/dk/camelot64/kickc/test/ref/inmem-const-array.log b/src/main/java/dk/camelot64/kickc/test/ref/inmem-const-array.log index 5bfd607f1..5239637c6 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/inmem-const-array.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/inmem-const-array.log @@ -203,11 +203,10 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@2 (byte*) main::cols#1 ← phi( main/(byte*) main::cols#0 main::@2/(byte*) main::cols#2 ) (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 ) - (byte[]) main::colseq#1 ← phi( main/(byte[]) main::colseq#0 main::@2/(byte[]) main::colseq#2 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#2 ) *((byte*) main::screen#1 + (byte) main::i#2) ← (byte) '*' - *((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#1 + (byte) main::j#3) + *((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#0 + (byte) main::j#3) (byte) main::j#1 ← ++ (byte) main::j#3 (boolean~) main::$0 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 3 (boolean~) main::$1 ← ! (boolean~) main::$0 @@ -216,7 +215,6 @@ main::@1: scope:[main] from main main::@2 main::@2: scope:[main] from main::@1 main::@3 (byte*) main::cols#2 ← phi( main::@1/(byte*) main::cols#1 main::@3/(byte*) main::cols#3 ) (byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main::@3/(byte) main::j#2 ) - (byte[]) main::colseq#2 ← phi( main::@1/(byte[]) main::colseq#1 main::@3/(byte[]) main::colseq#3 ) (byte*) main::screen#2 ← phi( main::@1/(byte*) main::screen#1 main::@3/(byte*) main::screen#3 ) (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#4 ) (byte) main::i#1 ← ++ (byte) main::i#3 @@ -225,7 +223,6 @@ main::@2: scope:[main] from main::@1 main::@3 to:main::@return main::@3: scope:[main] from main::@1 (byte*) main::cols#3 ← phi( main::@1/(byte*) main::cols#1 ) - (byte[]) main::colseq#3 ← phi( main::@1/(byte[]) main::colseq#1 ) (byte*) main::screen#3 ← phi( main::@1/(byte*) main::screen#1 ) (byte) main::i#4 ← phi( main::@1/(byte) main::i#2 ) (byte) main::j#2 ← (byte/signed byte/word/signed word) 0 @@ -262,11 +259,10 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@2 (byte*) main::cols#1 ← phi( main/(byte*) main::cols#0 main::@2/(byte*) main::cols#2 ) (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 ) - (byte[]) main::colseq#1 ← phi( main/(byte[]) main::colseq#0 main::@2/(byte[]) main::colseq#2 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#2 ) *((byte*) main::screen#1 + (byte) main::i#2) ← (byte) '*' - *((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#1 + (byte) main::j#3) + *((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#0 + (byte) main::j#3) (byte) main::j#1 ← ++ (byte) main::j#3 (boolean~) main::$0 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 3 (boolean~) main::$1 ← ! (boolean~) main::$0 @@ -275,7 +271,6 @@ main::@1: scope:[main] from main main::@2 main::@2: scope:[main] from main::@1 main::@3 (byte*) main::cols#2 ← phi( main::@1/(byte*) main::cols#1 main::@3/(byte*) main::cols#3 ) (byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main::@3/(byte) main::j#2 ) - (byte[]) main::colseq#2 ← phi( main::@1/(byte[]) main::colseq#1 main::@3/(byte[]) main::colseq#3 ) (byte*) main::screen#2 ← phi( main::@1/(byte*) main::screen#1 main::@3/(byte*) main::screen#3 ) (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#4 ) (byte) main::i#1 ← ++ (byte) main::i#3 @@ -284,7 +279,6 @@ main::@2: scope:[main] from main::@1 main::@3 to:main::@return main::@3: scope:[main] from main::@1 (byte*) main::cols#3 ← phi( main::@1/(byte*) main::cols#1 ) - (byte[]) main::colseq#3 ← phi( main::@1/(byte[]) main::colseq#1 ) (byte*) main::screen#3 ← phi( main::@1/(byte*) main::screen#1 ) (byte) main::i#4 ← phi( main::@1/(byte) main::i#2 ) (byte) main::j#2 ← (byte/signed byte/word/signed word) 0 @@ -334,9 +328,6 @@ INITIAL SSA SYMBOL TABLE (byte*) main::cols#3 (byte[]) main::colseq (byte[]) main::colseq#0 -(byte[]) main::colseq#1 -(byte[]) main::colseq#2 -(byte[]) main::colseq#3 (byte) main::i (byte) main::i#0 (byte) main::i#1 @@ -376,11 +367,10 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@2 (byte*) main::cols#1 ← phi( main/(byte*) main::cols#0 main::@2/(byte*) main::cols#2 ) (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 ) - (byte[]) main::colseq#1 ← phi( main/(byte[]) main::colseq#0 main::@2/(byte[]) main::colseq#2 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#2 ) *((byte*) main::screen#1 + (byte) main::i#2) ← (byte) '*' - *((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#1 + (byte) main::j#3) + *((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#0 + (byte) main::j#3) (byte) main::j#1 ← ++ (byte) main::j#3 (boolean~) main::$0 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 3 (boolean~) main::$1 ← ! (boolean~) main::$0 @@ -389,7 +379,6 @@ main::@1: scope:[main] from main main::@2 main::@2: scope:[main] from main::@1 main::@3 (byte*) main::cols#2 ← phi( main::@1/(byte*) main::cols#1 main::@3/(byte*) main::cols#3 ) (byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main::@3/(byte) main::j#2 ) - (byte[]) main::colseq#2 ← phi( main::@1/(byte[]) main::colseq#1 main::@3/(byte[]) main::colseq#3 ) (byte*) main::screen#2 ← phi( main::@1/(byte*) main::screen#1 main::@3/(byte*) main::screen#3 ) (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#4 ) (byte) main::i#1 ← ++ (byte) main::i#3 @@ -398,7 +387,6 @@ main::@2: scope:[main] from main::@1 main::@3 to:main::@return main::@3: scope:[main] from main::@1 (byte*) main::cols#3 ← phi( main::@1/(byte*) main::cols#1 ) - (byte[]) main::colseq#3 ← phi( main::@1/(byte[]) main::colseq#1 ) (byte*) main::screen#3 ← phi( main::@1/(byte*) main::screen#1 ) (byte) main::i#4 ← phi( main::@1/(byte) main::i#2 ) (byte) main::j#2 ← (byte/signed byte/word/signed word) 0 @@ -435,11 +423,10 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@2 (byte*) main::cols#1 ← phi( main/(byte*) main::cols#0 main::@2/(byte*) main::cols#2 ) (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 ) - (byte[]) main::colseq#1 ← phi( main/(byte[]) main::colseq#0 main::@2/(byte[]) main::colseq#2 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#2 ) *((byte*) main::screen#1 + (byte) main::i#2) ← (byte) '*' - *((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#1 + (byte) main::j#3) + *((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#0 + (byte) main::j#3) (byte) main::j#1 ← ++ (byte) main::j#3 (boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 3 if((boolean~) main::$1) goto main::@2 @@ -447,7 +434,6 @@ main::@1: scope:[main] from main main::@2 main::@2: scope:[main] from main::@1 main::@3 (byte*) main::cols#2 ← phi( main::@1/(byte*) main::cols#1 main::@3/(byte*) main::cols#3 ) (byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main::@3/(byte) main::j#2 ) - (byte[]) main::colseq#2 ← phi( main::@1/(byte[]) main::colseq#1 main::@3/(byte[]) main::colseq#3 ) (byte*) main::screen#2 ← phi( main::@1/(byte*) main::screen#1 main::@3/(byte*) main::screen#3 ) (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#4 ) (byte) main::i#1 ← ++ (byte) main::i#3 @@ -456,7 +442,6 @@ main::@2: scope:[main] from main::@1 main::@3 to:main::@return main::@3: scope:[main] from main::@1 (byte*) main::cols#3 ← phi( main::@1/(byte*) main::cols#1 ) - (byte[]) main::colseq#3 ← phi( main::@1/(byte[]) main::colseq#1 ) (byte*) main::screen#3 ← phi( main::@1/(byte*) main::screen#1 ) (byte) main::i#4 ← phi( main::@1/(byte) main::i#2 ) (byte) main::j#2 ← (byte/signed byte/word/signed word) 0 @@ -477,7 +462,6 @@ Not aliassing across scopes: RED#1 RED#2 Not aliassing across scopes: GREEN#1 GREEN#2 Alias (byte) main::i#2 = (byte) main::i#4 Alias (byte*) main::screen#1 = (byte*) main::screen#3 -Alias (byte[]) main::colseq#1 = (byte[]) main::colseq#3 Alias (byte*) main::cols#1 = (byte*) main::cols#3 Alias (byte) WHITE#0 = (byte) WHITE#2 Alias (byte) RED#0 = (byte) RED#2 @@ -502,11 +486,10 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@2 (byte*) main::cols#1 ← phi( main/(byte*) main::cols#0 main::@2/(byte*) main::cols#2 ) (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 ) - (byte[]) main::colseq#1 ← phi( main/(byte[]) main::colseq#0 main::@2/(byte[]) main::colseq#2 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#2 ) *((byte*) main::screen#1 + (byte) main::i#2) ← (byte) '*' - *((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#1 + (byte) main::j#3) + *((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#0 + (byte) main::j#3) (byte) main::j#1 ← ++ (byte) main::j#3 (boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 3 if((boolean~) main::$1) goto main::@2 @@ -514,7 +497,6 @@ main::@1: scope:[main] from main main::@2 main::@2: scope:[main] from main::@1 main::@3 (byte*) main::cols#2 ← phi( main::@1/(byte*) main::cols#1 main::@3/(byte*) main::cols#1 ) (byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main::@3/(byte) main::j#2 ) - (byte[]) main::colseq#2 ← phi( main::@1/(byte[]) main::colseq#1 main::@3/(byte[]) main::colseq#1 ) (byte*) main::screen#2 ← phi( main::@1/(byte*) main::screen#1 main::@3/(byte*) main::screen#1 ) (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#2 ) (byte) main::i#1 ← ++ (byte) main::i#3 @@ -537,7 +519,6 @@ Not aliassing across scopes: RED#1 RED#0 Not aliassing across scopes: GREEN#1 GREEN#0 Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte*) main::screen#1 = (byte*) main::screen#2 -Alias (byte[]) main::colseq#1 = (byte[]) main::colseq#2 Alias (byte*) main::cols#1 = (byte*) main::cols#2 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH @@ -559,11 +540,10 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@2 (byte*) main::cols#1 ← phi( main/(byte*) main::cols#0 main::@2/(byte*) main::cols#1 ) (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 ) - (byte[]) main::colseq#1 ← phi( main/(byte[]) main::colseq#0 main::@2/(byte[]) main::colseq#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#1 ) *((byte*) main::screen#1 + (byte) main::i#2) ← (byte) '*' - *((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#1 + (byte) main::j#3) + *((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#0 + (byte) main::j#3) (byte) main::j#1 ← ++ (byte) main::j#3 (boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 3 if((boolean~) main::$1) goto main::@2 @@ -589,7 +569,6 @@ Not aliassing across scopes: WHITE#1 WHITE#0 Not aliassing across scopes: RED#1 RED#0 Not aliassing across scopes: GREEN#1 GREEN#0 Self Phi Eliminated (byte*) main::screen#1 -Self Phi Eliminated (byte[]) main::colseq#1 Self Phi Eliminated (byte*) main::cols#1 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @@ -611,11 +590,10 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@2 (byte*) main::cols#1 ← phi( main/(byte*) main::cols#0 ) (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 ) - (byte[]) main::colseq#1 ← phi( main/(byte[]) main::colseq#0 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 ) *((byte*) main::screen#1 + (byte) main::i#2) ← (byte) '*' - *((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#1 + (byte) main::j#3) + *((byte*) main::cols#1 + (byte) main::i#2) ← *((byte[]) main::colseq#0 + (byte) main::j#3) (byte) main::j#1 ← ++ (byte) main::j#3 (boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 3 if((boolean~) main::$1) goto main::@2 @@ -641,7 +619,6 @@ Redundant Phi (byte) WHITE#1 (byte) WHITE#0 Redundant Phi (byte) RED#1 (byte) RED#0 Redundant Phi (byte) GREEN#1 (byte) GREEN#0 Redundant Phi (byte*) main::screen#1 (byte*) main::screen#0 -Redundant Phi (byte[]) main::colseq#1 (byte[]) main::colseq#0 Redundant Phi (byte*) main::cols#1 (byte*) main::cols#0 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH diff --git a/src/main/java/dk/camelot64/kickc/test/ref/inmemarray.log b/src/main/java/dk/camelot64/kickc/test/ref/inmemarray.log index 3a71f7fea..6d381bc86 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/inmemarray.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/inmemarray.log @@ -161,7 +161,6 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) SCREEN#2 ← phi( @1/(byte*) SCREEN#4 ) - (byte[]) TXT#2 ← phi( @1/(byte[]) TXT#4 ) (byte) main::j#0 ← (byte/signed byte/word/signed word) 0 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 @@ -169,8 +168,7 @@ main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@2/(byte*) SCREEN#3 ) (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 ) - (byte[]) TXT#1 ← phi( main/(byte[]) TXT#2 main::@2/(byte[]) TXT#3 ) - *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#1 + (byte) main::j#3) + *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#0 + (byte) main::j#3) (byte) main::j#1 ← ++ (byte) main::j#3 (boolean~) main::$0 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 8 (boolean~) main::$1 ← ! (boolean~) main::$0 @@ -179,7 +177,6 @@ main::@1: scope:[main] from main main::@2 main::@2: scope:[main] from main::@1 main::@3 (byte*) SCREEN#3 ← phi( main::@1/(byte*) SCREEN#1 main::@3/(byte*) SCREEN#5 ) (byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main::@3/(byte) main::j#2 ) - (byte[]) TXT#3 ← phi( main::@1/(byte[]) TXT#1 main::@3/(byte[]) TXT#5 ) (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#4 ) (byte) main::i#1 ← ++ (byte) main::i#3 (boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101 @@ -187,7 +184,6 @@ main::@2: scope:[main] from main::@1 main::@3 to:main::@return main::@3: scope:[main] from main::@1 (byte*) SCREEN#5 ← phi( main::@1/(byte*) SCREEN#1 ) - (byte[]) TXT#5 ← phi( main::@1/(byte[]) TXT#1 ) (byte) main::i#4 ← phi( main::@1/(byte) main::i#2 ) (byte) main::j#2 ← (byte/signed byte/word/signed word) 0 to:main::@2 @@ -196,7 +192,6 @@ main::@return: scope:[main] from main::@2 to:@return @1: scope:[] from @begin (byte*) SCREEN#4 ← phi( @begin/(byte*) SCREEN#0 ) - (byte[]) TXT#4 ← phi( @begin/(byte[]) TXT#0 ) call main param-assignment to:@2 @2: scope:[] from @1 @@ -210,7 +205,6 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN to:@1 main: scope:[main] from @1 (byte*) SCREEN#2 ← phi( @1/(byte*) SCREEN#4 ) - (byte[]) TXT#2 ← phi( @1/(byte[]) TXT#4 ) (byte) main::j#0 ← (byte/signed byte/word/signed word) 0 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 @@ -218,8 +212,7 @@ main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@2/(byte*) SCREEN#3 ) (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 ) - (byte[]) TXT#1 ← phi( main/(byte[]) TXT#2 main::@2/(byte[]) TXT#3 ) - *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#1 + (byte) main::j#3) + *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#0 + (byte) main::j#3) (byte) main::j#1 ← ++ (byte) main::j#3 (boolean~) main::$0 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 8 (boolean~) main::$1 ← ! (boolean~) main::$0 @@ -228,7 +221,6 @@ main::@1: scope:[main] from main main::@2 main::@2: scope:[main] from main::@1 main::@3 (byte*) SCREEN#3 ← phi( main::@1/(byte*) SCREEN#1 main::@3/(byte*) SCREEN#5 ) (byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main::@3/(byte) main::j#2 ) - (byte[]) TXT#3 ← phi( main::@1/(byte[]) TXT#1 main::@3/(byte[]) TXT#5 ) (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#4 ) (byte) main::i#1 ← ++ (byte) main::i#3 (boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101 @@ -236,7 +228,6 @@ main::@2: scope:[main] from main::@1 main::@3 to:main::@return main::@3: scope:[main] from main::@1 (byte*) SCREEN#5 ← phi( main::@1/(byte*) SCREEN#1 ) - (byte[]) TXT#5 ← phi( main::@1/(byte[]) TXT#1 ) (byte) main::i#4 ← phi( main::@1/(byte) main::i#2 ) (byte) main::j#2 ← (byte/signed byte/word/signed word) 0 to:main::@2 @@ -245,7 +236,6 @@ main::@return: scope:[main] from main::@2 to:@return @1: scope:[] from @begin (byte*) SCREEN#4 ← phi( @begin/(byte*) SCREEN#0 ) - (byte[]) TXT#4 ← phi( @begin/(byte[]) TXT#0 ) call main param-assignment to:@2 @2: scope:[] from @1 @@ -266,11 +256,6 @@ INITIAL SSA SYMBOL TABLE (byte*) SCREEN#5 (byte[]) TXT (byte[]) TXT#0 -(byte[]) TXT#1 -(byte[]) TXT#2 -(byte[]) TXT#3 -(byte[]) TXT#4 -(byte[]) TXT#5 (void()) main() (boolean~) main::$0 (boolean~) main::$1 @@ -301,7 +286,6 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @1 (byte*) SCREEN#2 ← phi( @1/(byte*) SCREEN#4 ) - (byte[]) TXT#2 ← phi( @1/(byte[]) TXT#4 ) (byte) main::j#0 ← (byte/signed byte/word/signed word) 0 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 @@ -309,8 +293,7 @@ main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@2/(byte*) SCREEN#3 ) (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 ) - (byte[]) TXT#1 ← phi( main/(byte[]) TXT#2 main::@2/(byte[]) TXT#3 ) - *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#1 + (byte) main::j#3) + *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#0 + (byte) main::j#3) (byte) main::j#1 ← ++ (byte) main::j#3 (boolean~) main::$0 ← (byte) main::j#1 == (byte/signed byte/word/signed word) 8 (boolean~) main::$1 ← ! (boolean~) main::$0 @@ -319,7 +302,6 @@ main::@1: scope:[main] from main main::@2 main::@2: scope:[main] from main::@1 main::@3 (byte*) SCREEN#3 ← phi( main::@1/(byte*) SCREEN#1 main::@3/(byte*) SCREEN#5 ) (byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main::@3/(byte) main::j#2 ) - (byte[]) TXT#3 ← phi( main::@1/(byte[]) TXT#1 main::@3/(byte[]) TXT#5 ) (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#4 ) (byte) main::i#1 ← ++ (byte) main::i#3 (boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101 @@ -327,7 +309,6 @@ main::@2: scope:[main] from main::@1 main::@3 to:main::@return main::@3: scope:[main] from main::@1 (byte*) SCREEN#5 ← phi( main::@1/(byte*) SCREEN#1 ) - (byte[]) TXT#5 ← phi( main::@1/(byte[]) TXT#1 ) (byte) main::i#4 ← phi( main::@1/(byte) main::i#2 ) (byte) main::j#2 ← (byte/signed byte/word/signed word) 0 to:main::@2 @@ -336,7 +317,6 @@ main::@return: scope:[main] from main::@2 to:@return @1: scope:[] from @begin (byte*) SCREEN#4 ← phi( @begin/(byte*) SCREEN#0 ) - (byte[]) TXT#4 ← phi( @begin/(byte[]) TXT#0 ) call main param-assignment to:@end @end: scope:[] from @1 @@ -350,7 +330,6 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @1 (byte*) SCREEN#2 ← phi( @1/(byte*) SCREEN#4 ) - (byte[]) TXT#2 ← phi( @1/(byte[]) TXT#4 ) (byte) main::j#0 ← (byte/signed byte/word/signed word) 0 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 @@ -358,8 +337,7 @@ main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@2/(byte*) SCREEN#3 ) (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 ) - (byte[]) TXT#1 ← phi( main/(byte[]) TXT#2 main::@2/(byte[]) TXT#3 ) - *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#1 + (byte) main::j#3) + *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#0 + (byte) main::j#3) (byte) main::j#1 ← ++ (byte) main::j#3 (boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 8 if((boolean~) main::$1) goto main::@2 @@ -367,7 +345,6 @@ main::@1: scope:[main] from main main::@2 main::@2: scope:[main] from main::@1 main::@3 (byte*) SCREEN#3 ← phi( main::@1/(byte*) SCREEN#1 main::@3/(byte*) SCREEN#5 ) (byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main::@3/(byte) main::j#2 ) - (byte[]) TXT#3 ← phi( main::@1/(byte[]) TXT#1 main::@3/(byte[]) TXT#5 ) (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#4 ) (byte) main::i#1 ← ++ (byte) main::i#3 (boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101 @@ -375,7 +352,6 @@ main::@2: scope:[main] from main::@1 main::@3 to:main::@return main::@3: scope:[main] from main::@1 (byte*) SCREEN#5 ← phi( main::@1/(byte*) SCREEN#1 ) - (byte[]) TXT#5 ← phi( main::@1/(byte[]) TXT#1 ) (byte) main::i#4 ← phi( main::@1/(byte) main::i#2 ) (byte) main::j#2 ← (byte/signed byte/word/signed word) 0 to:main::@2 @@ -384,17 +360,13 @@ main::@return: scope:[main] from main::@2 to:@return @1: scope:[] from @begin (byte*) SCREEN#4 ← phi( @begin/(byte*) SCREEN#0 ) - (byte[]) TXT#4 ← phi( @begin/(byte[]) TXT#0 ) call main param-assignment to:@end @end: scope:[] from @1 -Not aliassing across scopes: TXT#2 TXT#4 Not aliassing across scopes: SCREEN#2 SCREEN#4 Alias (byte) main::i#2 = (byte) main::i#4 -Alias (byte[]) TXT#1 = (byte[]) TXT#5 Alias (byte*) SCREEN#1 = (byte*) SCREEN#5 -Alias (byte[]) TXT#0 = (byte[]) TXT#4 Alias (byte*) SCREEN#0 = (byte*) SCREEN#4 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH @@ -404,7 +376,6 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @1 (byte*) SCREEN#2 ← phi( @1/(byte*) SCREEN#0 ) - (byte[]) TXT#2 ← phi( @1/(byte[]) TXT#0 ) (byte) main::j#0 ← (byte/signed byte/word/signed word) 0 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 @@ -412,8 +383,7 @@ main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@2/(byte*) SCREEN#3 ) (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 ) - (byte[]) TXT#1 ← phi( main/(byte[]) TXT#2 main::@2/(byte[]) TXT#3 ) - *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#1 + (byte) main::j#3) + *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#0 + (byte) main::j#3) (byte) main::j#1 ← ++ (byte) main::j#3 (boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 8 if((boolean~) main::$1) goto main::@2 @@ -421,7 +391,6 @@ main::@1: scope:[main] from main main::@2 main::@2: scope:[main] from main::@1 main::@3 (byte*) SCREEN#3 ← phi( main::@1/(byte*) SCREEN#1 main::@3/(byte*) SCREEN#1 ) (byte) main::j#4 ← phi( main::@1/(byte) main::j#1 main::@3/(byte) main::j#2 ) - (byte[]) TXT#3 ← phi( main::@1/(byte[]) TXT#1 main::@3/(byte[]) TXT#1 ) (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@3/(byte) main::i#2 ) (byte) main::i#1 ← ++ (byte) main::i#3 (boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 101 @@ -438,10 +407,8 @@ main::@return: scope:[main] from main::@2 to:@end @end: scope:[] from @1 -Not aliassing across scopes: TXT#2 TXT#0 Not aliassing across scopes: SCREEN#2 SCREEN#0 Alias (byte) main::i#2 = (byte) main::i#3 -Alias (byte[]) TXT#1 = (byte[]) TXT#3 Alias (byte*) SCREEN#1 = (byte*) SCREEN#3 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH @@ -451,7 +418,6 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @1 (byte*) SCREEN#2 ← phi( @1/(byte*) SCREEN#0 ) - (byte[]) TXT#2 ← phi( @1/(byte[]) TXT#0 ) (byte) main::j#0 ← (byte/signed byte/word/signed word) 0 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 @@ -459,8 +425,7 @@ main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 main::@2/(byte*) SCREEN#1 ) (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 ) - (byte[]) TXT#1 ← phi( main/(byte[]) TXT#2 main::@2/(byte[]) TXT#1 ) - *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#1 + (byte) main::j#3) + *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#0 + (byte) main::j#3) (byte) main::j#1 ← ++ (byte) main::j#3 (boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 8 if((boolean~) main::$1) goto main::@2 @@ -482,9 +447,7 @@ main::@return: scope:[main] from main::@2 to:@end @end: scope:[] from @1 -Not aliassing across scopes: TXT#2 TXT#0 Not aliassing across scopes: SCREEN#2 SCREEN#0 -Self Phi Eliminated (byte[]) TXT#1 Self Phi Eliminated (byte*) SCREEN#1 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @@ -494,7 +457,6 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @1 (byte*) SCREEN#2 ← phi( @1/(byte*) SCREEN#0 ) - (byte[]) TXT#2 ← phi( @1/(byte[]) TXT#0 ) (byte) main::j#0 ← (byte/signed byte/word/signed word) 0 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 @@ -502,8 +464,7 @@ main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#2 ) (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 ) - (byte[]) TXT#1 ← phi( main/(byte[]) TXT#2 ) - *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#1 + (byte) main::j#3) + *((byte*) SCREEN#1 + (byte) main::i#2) ← *((byte[]) TXT#0 + (byte) main::j#3) (byte) main::j#1 ← ++ (byte) main::j#3 (boolean~) main::$1 ← (byte) main::j#1 != (byte/signed byte/word/signed word) 8 if((boolean~) main::$1) goto main::@2 @@ -525,9 +486,7 @@ main::@return: scope:[main] from main::@2 to:@end @end: scope:[] from @1 -Redundant Phi (byte[]) TXT#2 (byte[]) TXT#0 Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#0 -Redundant Phi (byte[]) TXT#1 (byte[]) TXT#2 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#2 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH diff --git a/src/main/java/dk/camelot64/kickc/test/ref/inmemstring.log b/src/main/java/dk/camelot64/kickc/test/ref/inmemstring.log index 870038968..44dfafc3c 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/inmemstring.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/inmemstring.log @@ -159,7 +159,6 @@ main::@return: scope:[main] from main::@2 to:@end @end: scope:[] from @2 -Completing Phi functions... Completing Phi functions... Completing Phi functions... CONTROL FLOW GRAPH SSA @@ -168,7 +167,6 @@ CONTROL FLOW GRAPH SSA (byte[]) TEXT#0 ← (const string) $0 to:@1 main: scope:[main] from @1 - (byte[]) TEXT#2 ← phi( @1/(byte[]) TEXT#4 ) (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#3 ) (byte*) main::cursor#0 ← (byte*) SCREEN#1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 @@ -177,8 +175,7 @@ main::@1: scope:[main] from main main::@2 (byte*) SCREEN#4 ← phi( main/(byte*) SCREEN#1 main::@2/(byte*) SCREEN#2 ) (byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 ) (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#4 ) - (byte[]) TEXT#1 ← phi( main/(byte[]) TEXT#2 main::@2/(byte[]) TEXT#3 ) - *((byte*) main::cursor#2) ← *((byte[]) TEXT#1 + (byte) main::i#3) + *((byte*) main::cursor#2) ← *((byte[]) TEXT#0 + (byte) main::i#3) (byte) main::i#1 ← ++ (byte) main::i#3 (boolean~) main::$0 ← (byte) main::i#1 == (byte/signed byte/word/signed word) 8 (boolean~) main::$1 ← ! (boolean~) main::$0 @@ -186,7 +183,6 @@ main::@1: scope:[main] from main main::@2 to:main::@3 main::@2: scope:[main] from main::@1 main::@3 (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#2 ) - (byte[]) TEXT#3 ← phi( main::@1/(byte[]) TEXT#1 main::@3/(byte[]) TEXT#5 ) (byte*) SCREEN#2 ← phi( main::@1/(byte*) SCREEN#4 main::@3/(byte*) SCREEN#5 ) (byte*) main::cursor#3 ← phi( main::@1/(byte*) main::cursor#2 main::@3/(byte*) main::cursor#4 ) (byte*) main::cursor#1 ← ++ (byte*) main::cursor#3 @@ -195,7 +191,6 @@ main::@2: scope:[main] from main::@1 main::@3 if((boolean~) main::$3) goto main::@1 to:main::@return main::@3: scope:[main] from main::@1 - (byte[]) TEXT#5 ← phi( main::@1/(byte[]) TEXT#1 ) (byte*) SCREEN#5 ← phi( main::@1/(byte*) SCREEN#4 ) (byte*) main::cursor#4 ← phi( main::@1/(byte*) main::cursor#2 ) (byte) main::i#2 ← (byte/signed byte/word/signed word) 0 @@ -204,7 +199,6 @@ main::@return: scope:[main] from main::@2 return to:@return @1: scope:[] from @begin - (byte[]) TEXT#4 ← phi( @begin/(byte[]) TEXT#0 ) (byte*) SCREEN#3 ← phi( @begin/(byte*) SCREEN#0 ) call main param-assignment to:@2 @@ -218,7 +212,6 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN (byte[]) TEXT#0 ← (const string) $0 to:@1 main: scope:[main] from @1 - (byte[]) TEXT#2 ← phi( @1/(byte[]) TEXT#4 ) (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#3 ) (byte*) main::cursor#0 ← (byte*) SCREEN#1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 @@ -227,8 +220,7 @@ main::@1: scope:[main] from main main::@2 (byte*) SCREEN#4 ← phi( main/(byte*) SCREEN#1 main::@2/(byte*) SCREEN#2 ) (byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 ) (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#4 ) - (byte[]) TEXT#1 ← phi( main/(byte[]) TEXT#2 main::@2/(byte[]) TEXT#3 ) - *((byte*) main::cursor#2) ← *((byte[]) TEXT#1 + (byte) main::i#3) + *((byte*) main::cursor#2) ← *((byte[]) TEXT#0 + (byte) main::i#3) (byte) main::i#1 ← ++ (byte) main::i#3 (boolean~) main::$0 ← (byte) main::i#1 == (byte/signed byte/word/signed word) 8 (boolean~) main::$1 ← ! (boolean~) main::$0 @@ -236,7 +228,6 @@ main::@1: scope:[main] from main main::@2 to:main::@3 main::@2: scope:[main] from main::@1 main::@3 (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#2 ) - (byte[]) TEXT#3 ← phi( main::@1/(byte[]) TEXT#1 main::@3/(byte[]) TEXT#5 ) (byte*) SCREEN#2 ← phi( main::@1/(byte*) SCREEN#4 main::@3/(byte*) SCREEN#5 ) (byte*) main::cursor#3 ← phi( main::@1/(byte*) main::cursor#2 main::@3/(byte*) main::cursor#4 ) (byte*) main::cursor#1 ← ++ (byte*) main::cursor#3 @@ -245,7 +236,6 @@ main::@2: scope:[main] from main::@1 main::@3 if((boolean~) main::$3) goto main::@1 to:main::@return main::@3: scope:[main] from main::@1 - (byte[]) TEXT#5 ← phi( main::@1/(byte[]) TEXT#1 ) (byte*) SCREEN#5 ← phi( main::@1/(byte*) SCREEN#4 ) (byte*) main::cursor#4 ← phi( main::@1/(byte*) main::cursor#2 ) (byte) main::i#2 ← (byte/signed byte/word/signed word) 0 @@ -254,7 +244,6 @@ main::@return: scope:[main] from main::@2 return to:@return @1: scope:[] from @begin - (byte[]) TEXT#4 ← phi( @begin/(byte[]) TEXT#0 ) (byte*) SCREEN#3 ← phi( @begin/(byte*) SCREEN#0 ) call main param-assignment to:@2 @@ -277,11 +266,6 @@ INITIAL SSA SYMBOL TABLE (byte*) SCREEN#5 (byte[]) TEXT (byte[]) TEXT#0 -(byte[]) TEXT#1 -(byte[]) TEXT#2 -(byte[]) TEXT#3 -(byte[]) TEXT#4 -(byte[]) TEXT#5 (void()) main() (boolean~) main::$0 (boolean~) main::$1 @@ -312,7 +296,6 @@ CONTROL FLOW GRAPH (byte[]) TEXT#0 ← (const string) $0 to:@1 main: scope:[main] from @1 - (byte[]) TEXT#2 ← phi( @1/(byte[]) TEXT#4 ) (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#3 ) (byte*) main::cursor#0 ← (byte*) SCREEN#1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 @@ -321,8 +304,7 @@ main::@1: scope:[main] from main main::@2 (byte*) SCREEN#4 ← phi( main/(byte*) SCREEN#1 main::@2/(byte*) SCREEN#2 ) (byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 ) (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#4 ) - (byte[]) TEXT#1 ← phi( main/(byte[]) TEXT#2 main::@2/(byte[]) TEXT#3 ) - *((byte*) main::cursor#2) ← *((byte[]) TEXT#1 + (byte) main::i#3) + *((byte*) main::cursor#2) ← *((byte[]) TEXT#0 + (byte) main::i#3) (byte) main::i#1 ← ++ (byte) main::i#3 (boolean~) main::$0 ← (byte) main::i#1 == (byte/signed byte/word/signed word) 8 (boolean~) main::$1 ← ! (boolean~) main::$0 @@ -330,7 +312,6 @@ main::@1: scope:[main] from main main::@2 to:main::@3 main::@2: scope:[main] from main::@1 main::@3 (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#2 ) - (byte[]) TEXT#3 ← phi( main::@1/(byte[]) TEXT#1 main::@3/(byte[]) TEXT#5 ) (byte*) SCREEN#2 ← phi( main::@1/(byte*) SCREEN#4 main::@3/(byte*) SCREEN#5 ) (byte*) main::cursor#3 ← phi( main::@1/(byte*) main::cursor#2 main::@3/(byte*) main::cursor#4 ) (byte*) main::cursor#1 ← ++ (byte*) main::cursor#3 @@ -339,7 +320,6 @@ main::@2: scope:[main] from main::@1 main::@3 if((boolean~) main::$3) goto main::@1 to:main::@return main::@3: scope:[main] from main::@1 - (byte[]) TEXT#5 ← phi( main::@1/(byte[]) TEXT#1 ) (byte*) SCREEN#5 ← phi( main::@1/(byte*) SCREEN#4 ) (byte*) main::cursor#4 ← phi( main::@1/(byte*) main::cursor#2 ) (byte) main::i#2 ← (byte/signed byte/word/signed word) 0 @@ -348,7 +328,6 @@ main::@return: scope:[main] from main::@2 return to:@return @1: scope:[] from @begin - (byte[]) TEXT#4 ← phi( @begin/(byte[]) TEXT#0 ) (byte*) SCREEN#3 ← phi( @begin/(byte*) SCREEN#0 ) call main param-assignment to:@end @@ -362,7 +341,6 @@ CONTROL FLOW GRAPH (byte[]) TEXT#0 ← (const string) $0 to:@1 main: scope:[main] from @1 - (byte[]) TEXT#2 ← phi( @1/(byte[]) TEXT#4 ) (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#3 ) (byte*) main::cursor#0 ← (byte*) SCREEN#1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 @@ -371,15 +349,13 @@ main::@1: scope:[main] from main main::@2 (byte*) SCREEN#4 ← phi( main/(byte*) SCREEN#1 main::@2/(byte*) SCREEN#2 ) (byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 ) (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#4 ) - (byte[]) TEXT#1 ← phi( main/(byte[]) TEXT#2 main::@2/(byte[]) TEXT#3 ) - *((byte*) main::cursor#2) ← *((byte[]) TEXT#1 + (byte) main::i#3) + *((byte*) main::cursor#2) ← *((byte[]) TEXT#0 + (byte) main::i#3) (byte) main::i#1 ← ++ (byte) main::i#3 (boolean~) main::$1 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8 if((boolean~) main::$1) goto main::@2 to:main::@3 main::@2: scope:[main] from main::@1 main::@3 (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#2 ) - (byte[]) TEXT#3 ← phi( main::@1/(byte[]) TEXT#1 main::@3/(byte[]) TEXT#5 ) (byte*) SCREEN#2 ← phi( main::@1/(byte*) SCREEN#4 main::@3/(byte*) SCREEN#5 ) (byte*) main::cursor#3 ← phi( main::@1/(byte*) main::cursor#2 main::@3/(byte*) main::cursor#4 ) (byte*) main::cursor#1 ← ++ (byte*) main::cursor#3 @@ -388,7 +364,6 @@ main::@2: scope:[main] from main::@1 main::@3 if((boolean~) main::$3) goto main::@1 to:main::@return main::@3: scope:[main] from main::@1 - (byte[]) TEXT#5 ← phi( main::@1/(byte[]) TEXT#1 ) (byte*) SCREEN#5 ← phi( main::@1/(byte*) SCREEN#4 ) (byte*) main::cursor#4 ← phi( main::@1/(byte*) main::cursor#2 ) (byte) main::i#2 ← (byte/signed byte/word/signed word) 0 @@ -397,20 +372,16 @@ main::@return: scope:[main] from main::@2 return to:@return @1: scope:[] from @begin - (byte[]) TEXT#4 ← phi( @begin/(byte[]) TEXT#0 ) (byte*) SCREEN#3 ← phi( @begin/(byte*) SCREEN#0 ) call main param-assignment to:@end @end: scope:[] from @1 Not aliassing across scopes: SCREEN#1 SCREEN#3 -Not aliassing across scopes: TEXT#2 TEXT#4 Not aliassing across scopes: main::cursor#0 SCREEN#1 Alias (byte*) main::cursor#2 = (byte*) main::cursor#4 Alias (byte*) SCREEN#4 = (byte*) SCREEN#5 -Alias (byte[]) TEXT#1 = (byte[]) TEXT#5 Alias (byte*) SCREEN#0 = (byte*) SCREEN#3 -Alias (byte[]) TEXT#0 = (byte[]) TEXT#4 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -418,7 +389,6 @@ CONTROL FLOW GRAPH (byte[]) TEXT#0 ← (const string) $0 to:@1 main: scope:[main] from @1 - (byte[]) TEXT#2 ← phi( @1/(byte[]) TEXT#0 ) (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#0 ) (byte*) main::cursor#0 ← (byte*) SCREEN#1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 @@ -427,15 +397,13 @@ main::@1: scope:[main] from main main::@2 (byte*) SCREEN#4 ← phi( main/(byte*) SCREEN#1 main::@2/(byte*) SCREEN#2 ) (byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 ) (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#4 ) - (byte[]) TEXT#1 ← phi( main/(byte[]) TEXT#2 main::@2/(byte[]) TEXT#3 ) - *((byte*) main::cursor#2) ← *((byte[]) TEXT#1 + (byte) main::i#3) + *((byte*) main::cursor#2) ← *((byte[]) TEXT#0 + (byte) main::i#3) (byte) main::i#1 ← ++ (byte) main::i#3 (boolean~) main::$1 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8 if((boolean~) main::$1) goto main::@2 to:main::@3 main::@2: scope:[main] from main::@1 main::@3 (byte) main::i#4 ← phi( main::@1/(byte) main::i#1 main::@3/(byte) main::i#2 ) - (byte[]) TEXT#3 ← phi( main::@1/(byte[]) TEXT#1 main::@3/(byte[]) TEXT#1 ) (byte*) SCREEN#2 ← phi( main::@1/(byte*) SCREEN#4 main::@3/(byte*) SCREEN#4 ) (byte*) main::cursor#3 ← phi( main::@1/(byte*) main::cursor#2 main::@3/(byte*) main::cursor#2 ) (byte*) main::cursor#1 ← ++ (byte*) main::cursor#3 @@ -455,11 +423,9 @@ main::@return: scope:[main] from main::@2 @end: scope:[] from @1 Not aliassing across scopes: SCREEN#1 SCREEN#0 -Not aliassing across scopes: TEXT#2 TEXT#0 Not aliassing across scopes: main::cursor#0 SCREEN#1 Alias (byte*) main::cursor#2 = (byte*) main::cursor#3 Alias (byte*) SCREEN#2 = (byte*) SCREEN#4 -Alias (byte[]) TEXT#1 = (byte[]) TEXT#3 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -467,7 +433,6 @@ CONTROL FLOW GRAPH (byte[]) TEXT#0 ← (const string) $0 to:@1 main: scope:[main] from @1 - (byte[]) TEXT#2 ← phi( @1/(byte[]) TEXT#0 ) (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#0 ) (byte*) main::cursor#0 ← (byte*) SCREEN#1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 @@ -476,8 +441,7 @@ main::@1: scope:[main] from main main::@2 (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#1 main::@2/(byte*) SCREEN#2 ) (byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 ) (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#4 ) - (byte[]) TEXT#1 ← phi( main/(byte[]) TEXT#2 main::@2/(byte[]) TEXT#1 ) - *((byte*) main::cursor#2) ← *((byte[]) TEXT#1 + (byte) main::i#3) + *((byte*) main::cursor#2) ← *((byte[]) TEXT#0 + (byte) main::i#3) (byte) main::i#1 ← ++ (byte) main::i#3 (boolean~) main::$1 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8 if((boolean~) main::$1) goto main::@2 @@ -501,9 +465,7 @@ main::@return: scope:[main] from main::@2 @end: scope:[] from @1 Not aliassing across scopes: SCREEN#1 SCREEN#0 -Not aliassing across scopes: TEXT#2 TEXT#0 Not aliassing across scopes: main::cursor#0 SCREEN#1 -Self Phi Eliminated (byte[]) TEXT#1 Self Phi Eliminated (byte*) SCREEN#2 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @@ -512,7 +474,6 @@ CONTROL FLOW GRAPH (byte[]) TEXT#0 ← (const string) $0 to:@1 main: scope:[main] from @1 - (byte[]) TEXT#2 ← phi( @1/(byte[]) TEXT#0 ) (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#0 ) (byte*) main::cursor#0 ← (byte*) SCREEN#1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 @@ -521,8 +482,7 @@ main::@1: scope:[main] from main main::@2 (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#1 ) (byte*) main::cursor#2 ← phi( main/(byte*) main::cursor#0 main::@2/(byte*) main::cursor#1 ) (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#4 ) - (byte[]) TEXT#1 ← phi( main/(byte[]) TEXT#2 ) - *((byte*) main::cursor#2) ← *((byte[]) TEXT#1 + (byte) main::i#3) + *((byte*) main::cursor#2) ← *((byte[]) TEXT#0 + (byte) main::i#3) (byte) main::i#1 ← ++ (byte) main::i#3 (boolean~) main::$1 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 8 if((boolean~) main::$1) goto main::@2 @@ -546,8 +506,6 @@ main::@return: scope:[main] from main::@2 @end: scope:[] from @1 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 -Redundant Phi (byte[]) TEXT#2 (byte[]) TEXT#0 -Redundant Phi (byte[]) TEXT#1 (byte[]) TEXT#2 Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#1 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH diff --git a/src/main/java/dk/camelot64/kickc/test/ref/iterarray.log b/src/main/java/dk/camelot64/kickc/test/ref/iterarray.log index 9b6af57cb..48d3d3c94 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/iterarray.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/iterarray.log @@ -123,11 +123,10 @@ main: scope:[main] from @1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 5 to:main::@1 main::@1: scope:[main] from main main::@1 - (byte[16]) main::buf#1 ← phi( main/(byte[16]) main::buf#0 main::@1/(byte[16]) main::buf#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) (byte/word~) main::$0 ← (byte/signed byte/word/signed word) 2 + (byte) main::i#2 (byte/word~) main::$1 ← (byte/word~) main::$0 + (byte/signed byte/word/signed word) 2 - *((byte[16]) main::buf#1 + (byte) main::i#2) ← (byte/word~) main::$1 + *((byte[16]) main::buf#0 + (byte) main::i#2) ← (byte/word~) main::$1 (byte/word~) main::$2 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 (byte) main::i#1 ← (byte/word~) main::$2 (boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 10 @@ -151,11 +150,10 @@ main: scope:[main] from @1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 5 to:main::@1 main::@1: scope:[main] from main main::@1 - (byte[16]) main::buf#1 ← phi( main/(byte[16]) main::buf#0 main::@1/(byte[16]) main::buf#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) (byte/word~) main::$0 ← (byte/signed byte/word/signed word) 2 + (byte) main::i#2 (byte/word~) main::$1 ← (byte/word~) main::$0 + (byte/signed byte/word/signed word) 2 - *((byte[16]) main::buf#1 + (byte) main::i#2) ← (byte/word~) main::$1 + *((byte[16]) main::buf#0 + (byte) main::i#2) ← (byte/word~) main::$1 (byte/word~) main::$2 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 (byte) main::i#1 ← (byte/word~) main::$2 (boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 10 @@ -185,7 +183,6 @@ INITIAL SSA SYMBOL TABLE (label) main::@return (byte[16]) main::buf (byte[16]) main::buf#0 -(byte[16]) main::buf#1 (byte) main::i (byte) main::i#0 (byte) main::i#1 @@ -201,11 +198,10 @@ main: scope:[main] from @1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 5 to:main::@1 main::@1: scope:[main] from main main::@1 - (byte[16]) main::buf#1 ← phi( main/(byte[16]) main::buf#0 main::@1/(byte[16]) main::buf#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) (byte/word~) main::$0 ← (byte/signed byte/word/signed word) 2 + (byte) main::i#2 (byte/word~) main::$1 ← (byte/word~) main::$0 + (byte/signed byte/word/signed word) 2 - *((byte[16]) main::buf#1 + (byte) main::i#2) ← (byte/word~) main::$1 + *((byte[16]) main::buf#0 + (byte) main::i#2) ← (byte/word~) main::$1 (byte/word~) main::$2 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 (byte) main::i#1 ← (byte/word~) main::$2 (boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 10 @@ -222,60 +218,6 @@ main::@return: scope:[main] from main::@1 Alias (byte) main::i#1 = (byte/word~) main::$2 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH -@begin: scope:[] from - to:@1 -main: scope:[main] from @1 - (byte[16]) main::buf#0 ← ((byte*)) (word/signed word) 4352 - (byte) main::i#0 ← (byte/signed byte/word/signed word) 5 - to:main::@1 -main::@1: scope:[main] from main main::@1 - (byte[16]) main::buf#1 ← phi( main/(byte[16]) main::buf#0 main::@1/(byte[16]) main::buf#1 ) - (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) - (byte/word~) main::$0 ← (byte/signed byte/word/signed word) 2 + (byte) main::i#2 - (byte/word~) main::$1 ← (byte/word~) main::$0 + (byte/signed byte/word/signed word) 2 - *((byte[16]) main::buf#1 + (byte) main::i#2) ← (byte/word~) main::$1 - (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - (boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 10 - if((boolean~) main::$3) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return -@1: scope:[] from @begin - call main param-assignment - to:@end -@end: scope:[] from @1 - -Self Phi Eliminated (byte[16]) main::buf#1 -Succesful SSA optimization Pass2SelfPhiElimination -CONTROL FLOW GRAPH -@begin: scope:[] from - to:@1 -main: scope:[main] from @1 - (byte[16]) main::buf#0 ← ((byte*)) (word/signed word) 4352 - (byte) main::i#0 ← (byte/signed byte/word/signed word) 5 - to:main::@1 -main::@1: scope:[main] from main main::@1 - (byte[16]) main::buf#1 ← phi( main/(byte[16]) main::buf#0 ) - (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) - (byte/word~) main::$0 ← (byte/signed byte/word/signed word) 2 + (byte) main::i#2 - (byte/word~) main::$1 ← (byte/word~) main::$0 + (byte/signed byte/word/signed word) 2 - *((byte[16]) main::buf#1 + (byte) main::i#2) ← (byte/word~) main::$1 - (byte) main::i#1 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - (boolean~) main::$3 ← (byte) main::i#1 < (byte/signed byte/word/signed word) 10 - if((boolean~) main::$3) goto main::@1 - to:main::@return -main::@return: scope:[main] from main::@1 - return - to:@return -@1: scope:[] from @begin - call main param-assignment - to:@end -@end: scope:[] from @1 - -Redundant Phi (byte[16]) main::buf#1 (byte[16]) main::buf#0 -Succesful SSA optimization Pass2RedundantPhiElimination -CONTROL FLOW GRAPH @begin: scope:[] from to:@1 main: scope:[main] from @1 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/literals.log b/src/main/java/dk/camelot64/kickc/test/ref/literals.log index 494d4c3d0..1ac031913 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/literals.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/literals.log @@ -160,7 +160,6 @@ main::@return: scope:[main] from main::@1 to:@end @end: scope:[] from @2 -Completing Phi functions... Completing Phi functions... Completing Phi functions... CONTROL FLOW GRAPH SSA @@ -174,8 +173,6 @@ CONTROL FLOW GRAPH SSA (byte[]) nums#0 ← { (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 5 } to:@1 main: scope:[main] from @1 - (byte[]) nums#2 ← phi( @1/(byte[]) nums#3 ) - (byte[]) str#2 ← phi( @1/(byte[]) str#3 ) (byte) num#1 ← phi( @1/(byte) num#2 ) (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#3 ) (byte) char#1 ← phi( @1/(byte) char#2 ) @@ -184,14 +181,12 @@ main: scope:[main] from @1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@1 - (byte[]) nums#1 ← phi( main/(byte[]) nums#2 main::@1/(byte[]) nums#1 ) (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#1 main::@1/(byte*) SCREEN#2 ) - (byte[]) str#1 ← phi( main/(byte[]) str#2 main::@1/(byte[]) str#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) (byte/word~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i#2 - *((byte*) SCREEN#2 + (byte/word~) main::$0) ← *((byte[]) str#1 + (byte) main::i#2) + *((byte*) SCREEN#2 + (byte/word~) main::$0) ← *((byte[]) str#0 + (byte) main::i#2) (byte/word~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2 - *((byte*) SCREEN#2 + (byte/word~) main::$1) ← *((byte[]) nums#1 + (byte) main::i#2) + *((byte*) SCREEN#2 + (byte/word~) main::$1) ← *((byte[]) nums#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4 if((boolean~) main::$2) goto main::@1 @@ -200,8 +195,6 @@ main::@return: scope:[main] from main::@1 return to:@return @1: scope:[] from @begin - (byte[]) nums#3 ← phi( @begin/(byte[]) nums#0 ) - (byte[]) str#3 ← phi( @begin/(byte[]) str#0 ) (byte) num#2 ← phi( @begin/(byte) num#0 ) (byte*) SCREEN#3 ← phi( @begin/(byte*) SCREEN#0 ) (byte) char#2 ← phi( @begin/(byte) char#0 ) @@ -222,8 +215,6 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN (byte[]) nums#0 ← { (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 5 } to:@1 main: scope:[main] from @1 - (byte[]) nums#2 ← phi( @1/(byte[]) nums#3 ) - (byte[]) str#2 ← phi( @1/(byte[]) str#3 ) (byte) num#1 ← phi( @1/(byte) num#2 ) (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#3 ) (byte) char#1 ← phi( @1/(byte) char#2 ) @@ -232,14 +223,12 @@ main: scope:[main] from @1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@1 - (byte[]) nums#1 ← phi( main/(byte[]) nums#2 main::@1/(byte[]) nums#1 ) (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#1 main::@1/(byte*) SCREEN#2 ) - (byte[]) str#1 ← phi( main/(byte[]) str#2 main::@1/(byte[]) str#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) (byte/word~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i#2 - *((byte*) SCREEN#2 + (byte/word~) main::$0) ← *((byte[]) str#1 + (byte) main::i#2) + *((byte*) SCREEN#2 + (byte/word~) main::$0) ← *((byte[]) str#0 + (byte) main::i#2) (byte/word~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2 - *((byte*) SCREEN#2 + (byte/word~) main::$1) ← *((byte[]) nums#1 + (byte) main::i#2) + *((byte*) SCREEN#2 + (byte/word~) main::$1) ← *((byte[]) nums#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4 if((boolean~) main::$2) goto main::@1 @@ -248,8 +237,6 @@ main::@return: scope:[main] from main::@1 return to:@return @1: scope:[] from @begin - (byte[]) nums#3 ← phi( @begin/(byte[]) nums#0 ) - (byte[]) str#3 ← phi( @begin/(byte[]) str#0 ) (byte) num#2 ← phi( @begin/(byte) num#0 ) (byte*) SCREEN#3 ← phi( @begin/(byte*) SCREEN#0 ) (byte) char#2 ← phi( @begin/(byte) char#0 ) @@ -293,14 +280,8 @@ INITIAL SSA SYMBOL TABLE (byte) num#2 (byte[]) nums (byte[]) nums#0 -(byte[]) nums#1 -(byte[]) nums#2 -(byte[]) nums#3 (byte[]) str (byte[]) str#0 -(byte[]) str#1 -(byte[]) str#2 -(byte[]) str#3 Culled Empty Block (label) @2 Succesful SSA optimization Pass2CullEmptyBlocks @@ -315,8 +296,6 @@ CONTROL FLOW GRAPH (byte[]) nums#0 ← { (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 5 } to:@1 main: scope:[main] from @1 - (byte[]) nums#2 ← phi( @1/(byte[]) nums#3 ) - (byte[]) str#2 ← phi( @1/(byte[]) str#3 ) (byte) num#1 ← phi( @1/(byte) num#2 ) (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#3 ) (byte) char#1 ← phi( @1/(byte) char#2 ) @@ -325,14 +304,12 @@ main: scope:[main] from @1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@1 - (byte[]) nums#1 ← phi( main/(byte[]) nums#2 main::@1/(byte[]) nums#1 ) (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#1 main::@1/(byte*) SCREEN#2 ) - (byte[]) str#1 ← phi( main/(byte[]) str#2 main::@1/(byte[]) str#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) (byte/word~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i#2 - *((byte*) SCREEN#2 + (byte/word~) main::$0) ← *((byte[]) str#1 + (byte) main::i#2) + *((byte*) SCREEN#2 + (byte/word~) main::$0) ← *((byte[]) str#0 + (byte) main::i#2) (byte/word~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2 - *((byte*) SCREEN#2 + (byte/word~) main::$1) ← *((byte[]) nums#1 + (byte) main::i#2) + *((byte*) SCREEN#2 + (byte/word~) main::$1) ← *((byte[]) nums#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4 if((boolean~) main::$2) goto main::@1 @@ -341,8 +318,6 @@ main::@return: scope:[main] from main::@1 return to:@return @1: scope:[] from @begin - (byte[]) nums#3 ← phi( @begin/(byte[]) nums#0 ) - (byte[]) str#3 ← phi( @begin/(byte[]) str#0 ) (byte) num#2 ← phi( @begin/(byte) num#0 ) (byte*) SCREEN#3 ← phi( @begin/(byte*) SCREEN#0 ) (byte) char#2 ← phi( @begin/(byte) char#0 ) @@ -353,13 +328,10 @@ main::@return: scope:[main] from main::@1 Not aliassing across scopes: char#1 char#2 Not aliassing across scopes: SCREEN#1 SCREEN#3 Not aliassing across scopes: num#1 num#2 -Not aliassing across scopes: str#2 str#3 -Not aliassing across scopes: nums#2 nums#3 -Alias (byte[]) str#0 = (string~) $1 (byte[]) str#3 +Alias (byte[]) str#0 = (string~) $1 Alias (byte) char#0 = (byte) char#2 Alias (byte*) SCREEN#0 = (byte*) SCREEN#3 Alias (byte) num#0 = (byte) num#2 -Alias (byte[]) nums#0 = (byte[]) nums#3 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -371,8 +343,6 @@ CONTROL FLOW GRAPH (byte[]) nums#0 ← { (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 5 } to:@1 main: scope:[main] from @1 - (byte[]) nums#2 ← phi( @1/(byte[]) nums#0 ) - (byte[]) str#2 ← phi( @1/(byte[]) str#0 ) (byte) num#1 ← phi( @1/(byte) num#0 ) (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#0 ) (byte) char#1 ← phi( @1/(byte) char#0 ) @@ -381,14 +351,12 @@ main: scope:[main] from @1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@1 - (byte[]) nums#1 ← phi( main/(byte[]) nums#2 main::@1/(byte[]) nums#1 ) (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#1 main::@1/(byte*) SCREEN#2 ) - (byte[]) str#1 ← phi( main/(byte[]) str#2 main::@1/(byte[]) str#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) (byte/word~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i#2 - *((byte*) SCREEN#2 + (byte/word~) main::$0) ← *((byte[]) str#1 + (byte) main::i#2) + *((byte*) SCREEN#2 + (byte/word~) main::$0) ← *((byte[]) str#0 + (byte) main::i#2) (byte/word~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2 - *((byte*) SCREEN#2 + (byte/word~) main::$1) ← *((byte[]) nums#1 + (byte) main::i#2) + *((byte*) SCREEN#2 + (byte/word~) main::$1) ← *((byte[]) nums#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4 if((boolean~) main::$2) goto main::@1 @@ -404,11 +372,7 @@ main::@return: scope:[main] from main::@1 Not aliassing across scopes: char#1 char#0 Not aliassing across scopes: SCREEN#1 SCREEN#0 Not aliassing across scopes: num#1 num#0 -Not aliassing across scopes: str#2 str#0 -Not aliassing across scopes: nums#2 nums#0 -Self Phi Eliminated (byte[]) str#1 Self Phi Eliminated (byte*) SCREEN#2 -Self Phi Eliminated (byte[]) nums#1 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -420,8 +384,6 @@ CONTROL FLOW GRAPH (byte[]) nums#0 ← { (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 5 } to:@1 main: scope:[main] from @1 - (byte[]) nums#2 ← phi( @1/(byte[]) nums#0 ) - (byte[]) str#2 ← phi( @1/(byte[]) str#0 ) (byte) num#1 ← phi( @1/(byte) num#0 ) (byte*) SCREEN#1 ← phi( @1/(byte*) SCREEN#0 ) (byte) char#1 ← phi( @1/(byte) char#0 ) @@ -430,14 +392,12 @@ main: scope:[main] from @1 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@1 - (byte[]) nums#1 ← phi( main/(byte[]) nums#2 ) (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#1 ) - (byte[]) str#1 ← phi( main/(byte[]) str#2 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) (byte/word~) main::$0 ← (byte/signed byte/word/signed word) 4 + (byte) main::i#2 - *((byte*) SCREEN#2 + (byte/word~) main::$0) ← *((byte[]) str#1 + (byte) main::i#2) + *((byte*) SCREEN#2 + (byte/word~) main::$0) ← *((byte[]) str#0 + (byte) main::i#2) (byte/word~) main::$1 ← (byte/signed byte/word/signed word) 9 + (byte) main::i#2 - *((byte*) SCREEN#2 + (byte/word~) main::$1) ← *((byte[]) nums#1 + (byte) main::i#2) + *((byte*) SCREEN#2 + (byte/word~) main::$1) ← *((byte[]) nums#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$2 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 4 if((boolean~) main::$2) goto main::@1 @@ -453,11 +413,7 @@ main::@return: scope:[main] from main::@1 Redundant Phi (byte) char#1 (byte) char#0 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#0 Redundant Phi (byte) num#1 (byte) num#0 -Redundant Phi (byte[]) str#2 (byte[]) str#0 -Redundant Phi (byte[]) nums#2 (byte[]) nums#0 -Redundant Phi (byte[]) str#1 (byte[]) str#2 Redundant Phi (byte*) SCREEN#2 (byte*) SCREEN#1 -Redundant Phi (byte[]) nums#1 (byte[]) nums#2 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH @begin: scope:[] from diff --git a/src/main/java/dk/camelot64/kickc/test/ref/local-string.log b/src/main/java/dk/camelot64/kickc/test/ref/local-string.log index 243202a4e..040a9b352 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/local-string.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/local-string.log @@ -142,15 +142,13 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@2 (byte*) main::screen#2 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) - (byte[]) main::msg#1 ← phi( main/(byte[]) main::msg#0 main::@2/(byte[]) main::msg#2 ) - (boolean~) main::$0 ← *((byte[]) main::msg#1 + (byte) main::i#2) != (byte) '@' + (boolean~) main::$0 ← *((byte[]) main::msg#0 + (byte) main::i#2) != (byte) '@' if((boolean~) main::$0) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 (byte*) main::screen#1 ← phi( main::@1/(byte*) main::screen#2 ) (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 ) - (byte[]) main::msg#2 ← phi( main::@1/(byte[]) main::msg#1 ) - *((byte*) main::screen#1 + (byte) main::i#3) ← *((byte[]) main::msg#2 + (byte) main::i#3) + *((byte*) main::screen#1 + (byte) main::i#3) ← *((byte[]) main::msg#0 + (byte) main::i#3) (byte) main::i#1 ← ++ (byte) main::i#3 to:main::@1 main::@return: scope:[main] from main::@1 @@ -174,15 +172,13 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@2 (byte*) main::screen#2 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) - (byte[]) main::msg#1 ← phi( main/(byte[]) main::msg#0 main::@2/(byte[]) main::msg#2 ) - (boolean~) main::$0 ← *((byte[]) main::msg#1 + (byte) main::i#2) != (byte) '@' + (boolean~) main::$0 ← *((byte[]) main::msg#0 + (byte) main::i#2) != (byte) '@' if((boolean~) main::$0) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 (byte*) main::screen#1 ← phi( main::@1/(byte*) main::screen#2 ) (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 ) - (byte[]) main::msg#2 ← phi( main::@1/(byte[]) main::msg#1 ) - *((byte*) main::screen#1 + (byte) main::i#3) ← *((byte[]) main::msg#2 + (byte) main::i#3) + *((byte*) main::screen#1 + (byte) main::i#3) ← *((byte[]) main::msg#0 + (byte) main::i#3) (byte) main::i#1 ← ++ (byte) main::i#3 to:main::@1 main::@return: scope:[main] from main::@1 @@ -213,8 +209,6 @@ INITIAL SSA SYMBOL TABLE (byte) main::i#3 (byte[]) main::msg (byte[]) main::msg#0 -(byte[]) main::msg#1 -(byte[]) main::msg#2 (byte*) main::screen (byte*) main::screen#0 (byte*) main::screen#1 @@ -233,15 +227,13 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@2 (byte*) main::screen#2 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) - (byte[]) main::msg#1 ← phi( main/(byte[]) main::msg#0 main::@2/(byte[]) main::msg#2 ) - (boolean~) main::$0 ← *((byte[]) main::msg#1 + (byte) main::i#2) != (byte) '@' + (boolean~) main::$0 ← *((byte[]) main::msg#0 + (byte) main::i#2) != (byte) '@' if((boolean~) main::$0) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 (byte*) main::screen#1 ← phi( main::@1/(byte*) main::screen#2 ) (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 ) - (byte[]) main::msg#2 ← phi( main::@1/(byte[]) main::msg#1 ) - *((byte*) main::screen#1 + (byte) main::i#3) ← *((byte[]) main::msg#2 + (byte) main::i#3) + *((byte*) main::screen#1 + (byte) main::i#3) ← *((byte[]) main::msg#0 + (byte) main::i#3) (byte) main::i#1 ← ++ (byte) main::i#3 to:main::@1 main::@return: scope:[main] from main::@1 @@ -252,7 +244,6 @@ main::@return: scope:[main] from main::@1 to:@end @end: scope:[] from @1 -Alias (byte[]) main::msg#1 = (byte[]) main::msg#2 Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte*) main::screen#1 = (byte*) main::screen#2 Succesful SSA optimization Pass2AliasElimination @@ -267,12 +258,11 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@2 (byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 main::@2/(byte*) main::screen#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) - (byte[]) main::msg#1 ← phi( main/(byte[]) main::msg#0 main::@2/(byte[]) main::msg#1 ) - (boolean~) main::$0 ← *((byte[]) main::msg#1 + (byte) main::i#2) != (byte) '@' + (boolean~) main::$0 ← *((byte[]) main::msg#0 + (byte) main::i#2) != (byte) '@' if((boolean~) main::$0) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 - *((byte*) main::screen#1 + (byte) main::i#2) ← *((byte[]) main::msg#1 + (byte) main::i#2) + *((byte*) main::screen#1 + (byte) main::i#2) ← *((byte[]) main::msg#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 to:main::@1 main::@return: scope:[main] from main::@1 @@ -283,7 +273,6 @@ main::@return: scope:[main] from main::@1 to:@end @end: scope:[] from @1 -Self Phi Eliminated (byte[]) main::msg#1 Self Phi Eliminated (byte*) main::screen#1 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @@ -297,12 +286,11 @@ main: scope:[main] from @1 main::@1: scope:[main] from main main::@2 (byte*) main::screen#1 ← phi( main/(byte*) main::screen#0 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) - (byte[]) main::msg#1 ← phi( main/(byte[]) main::msg#0 ) - (boolean~) main::$0 ← *((byte[]) main::msg#1 + (byte) main::i#2) != (byte) '@' + (boolean~) main::$0 ← *((byte[]) main::msg#0 + (byte) main::i#2) != (byte) '@' if((boolean~) main::$0) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 - *((byte*) main::screen#1 + (byte) main::i#2) ← *((byte[]) main::msg#1 + (byte) main::i#2) + *((byte*) main::screen#1 + (byte) main::i#2) ← *((byte[]) main::msg#0 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 to:main::@1 main::@return: scope:[main] from main::@1 @@ -313,7 +301,6 @@ main::@return: scope:[main] from main::@1 to:@end @end: scope:[] from @1 -Redundant Phi (byte[]) main::msg#1 (byte[]) main::msg#0 Redundant Phi (byte*) main::screen#1 (byte*) main::screen#0 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH diff --git a/src/main/java/dk/camelot64/kickc/test/ref/modglobal.log b/src/main/java/dk/camelot64/kickc/test/ref/modglobal.log index bef823d52..bafb00190 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/modglobal.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/modglobal.log @@ -196,7 +196,6 @@ inccnt::@return: scope:[inccnt] from inccnt to:@end @end: scope:[] from @3 -Completing Phi functions... Completing Phi functions... Completing Phi functions... CONTROL FLOW GRAPH SSA @@ -207,14 +206,12 @@ CONTROL FLOW GRAPH SSA (byte[256]) SCREEN#0 ← ((byte*)) (word/signed word) 1024 to:@2 main: scope:[main] from @2 - (byte[256]) SCREEN#3 ← phi( @2/(byte[256]) SCREEN#4 ) (byte) cnt3#13 ← phi( @2/(byte) cnt3#14 ) (byte) cnt2#13 ← phi( @2/(byte) cnt2#14 ) (byte) cnt#14 ← phi( @2/(byte) cnt#15 ) (byte) inccnt::return#0 ← call inccnt param-assignment to:main::@1 main::@1: scope:[main] from main - (byte[256]) SCREEN#1 ← phi( main/(byte[256]) SCREEN#3 ) (byte) cnt3#7 ← phi( main/(byte) cnt3#13 ) (byte) cnt2#7 ← phi( main/(byte) cnt2#13 ) (byte) cnt#8 ← phi( main/(byte) cnt#14 ) @@ -223,12 +220,11 @@ main::@1: scope:[main] from main (byte) cnt#1 ← (byte) cnt#8 (byte) cnt2#1 ← (byte) cnt2#7 (byte) cnt3#1 ← (byte) cnt3#7 - *((byte[256]) SCREEN#1 + (byte/signed byte/word/signed word) 0) ← (byte~) main::$0 + *((byte[256]) SCREEN#0 + (byte/signed byte/word/signed word) 0) ← (byte~) main::$0 (byte) cnt#2 ← ++ (byte) cnt#1 (byte) inccnt::return#1 ← call inccnt param-assignment to:main::@2 main::@2: scope:[main] from main::@1 - (byte[256]) SCREEN#2 ← phi( main::@1/(byte[256]) SCREEN#1 ) (byte) cnt3#8 ← phi( main::@1/(byte) cnt3#1 ) (byte) cnt2#8 ← phi( main::@1/(byte) cnt2#1 ) (byte) cnt#9 ← phi( main::@1/(byte) cnt#2 ) @@ -237,7 +233,7 @@ main::@2: scope:[main] from main::@1 (byte) cnt#3 ← (byte) cnt#9 (byte) cnt2#2 ← (byte) cnt2#8 (byte) cnt3#2 ← (byte) cnt3#8 - *((byte[256]) SCREEN#2 + (byte/signed byte/word/signed word) 1) ← (byte~) main::$1 + *((byte[256]) SCREEN#0 + (byte/signed byte/word/signed word) 1) ← (byte~) main::$1 to:main::@return main::@return: scope:[main] from main::@2 (byte) cnt3#9 ← phi( main::@2/(byte) cnt3#2 ) @@ -269,7 +265,6 @@ inccnt::@return: scope:[inccnt] from inccnt return (byte) inccnt::return#3 to:@return @2: scope:[] from @begin - (byte[256]) SCREEN#4 ← phi( @begin/(byte[256]) SCREEN#0 ) (byte) cnt3#14 ← phi( @begin/(byte) cnt3#0 ) (byte) cnt2#14 ← phi( @begin/(byte) cnt2#0 ) (byte) cnt#15 ← phi( @begin/(byte) cnt#0 ) @@ -293,7 +288,6 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN (byte[256]) SCREEN#0 ← ((byte*)) (word/signed word) 1024 to:@2 main: scope:[main] from @2 - (byte[256]) SCREEN#3 ← phi( @2/(byte[256]) SCREEN#4 ) (byte) cnt3#13 ← phi( @2/(byte) cnt3#14 ) (byte) cnt2#13 ← phi( @2/(byte) cnt2#14 ) (byte) cnt#14 ← phi( @2/(byte) cnt#15 ) @@ -301,7 +295,6 @@ main: scope:[main] from @2 (byte) inccnt::return#0 ← (byte) inccnt::return#3 to:main::@1 main::@1: scope:[main] from main - (byte[256]) SCREEN#1 ← phi( main/(byte[256]) SCREEN#3 ) (byte) cnt3#7 ← phi( main/(byte) cnt3#5 ) (byte) cnt2#7 ← phi( main/(byte) cnt2#5 ) (byte) cnt#8 ← phi( main/(byte) cnt#6 ) @@ -310,13 +303,12 @@ main::@1: scope:[main] from main (byte) cnt#1 ← (byte) cnt#8 (byte) cnt2#1 ← (byte) cnt2#7 (byte) cnt3#1 ← (byte) cnt3#7 - *((byte[256]) SCREEN#1 + (byte/signed byte/word/signed word) 0) ← (byte~) main::$0 + *((byte[256]) SCREEN#0 + (byte/signed byte/word/signed word) 0) ← (byte~) main::$0 (byte) cnt#2 ← ++ (byte) cnt#1 call inccnt param-assignment (byte) inccnt::return#1 ← (byte) inccnt::return#3 to:main::@2 main::@2: scope:[main] from main::@1 - (byte[256]) SCREEN#2 ← phi( main::@1/(byte[256]) SCREEN#1 ) (byte) cnt3#8 ← phi( main::@1/(byte) cnt3#5 ) (byte) cnt2#8 ← phi( main::@1/(byte) cnt2#5 ) (byte) cnt#9 ← phi( main::@1/(byte) cnt#6 ) @@ -325,7 +317,7 @@ main::@2: scope:[main] from main::@1 (byte) cnt#3 ← (byte) cnt#9 (byte) cnt2#2 ← (byte) cnt2#8 (byte) cnt3#2 ← (byte) cnt3#8 - *((byte[256]) SCREEN#2 + (byte/signed byte/word/signed word) 1) ← (byte~) main::$1 + *((byte[256]) SCREEN#0 + (byte/signed byte/word/signed word) 1) ← (byte~) main::$1 to:main::@return main::@return: scope:[main] from main::@2 (byte) cnt3#9 ← phi( main::@2/(byte) cnt3#2 ) @@ -357,7 +349,6 @@ inccnt::@return: scope:[inccnt] from inccnt return to:@return @2: scope:[] from @begin - (byte[256]) SCREEN#4 ← phi( @begin/(byte[256]) SCREEN#0 ) (byte) cnt3#14 ← phi( @begin/(byte) cnt3#0 ) (byte) cnt2#14 ← phi( @begin/(byte) cnt2#0 ) (byte) cnt#15 ← phi( @begin/(byte) cnt#0 ) @@ -380,10 +371,6 @@ INITIAL SSA SYMBOL TABLE (label) @end (byte[256]) SCREEN (byte[256]) SCREEN#0 -(byte[256]) SCREEN#1 -(byte[256]) SCREEN#2 -(byte[256]) SCREEN#3 -(byte[256]) SCREEN#4 (byte) cnt (byte) cnt#0 (byte) cnt#1 @@ -453,7 +440,6 @@ INITIAL SSA SYMBOL TABLE Not aliassing across scopes: cnt#14 cnt#15 Not aliassing across scopes: cnt2#13 cnt2#14 Not aliassing across scopes: cnt3#13 cnt3#14 -Not aliassing across scopes: SCREEN#3 SCREEN#4 Not aliassing across scopes: inccnt::return#0 inccnt::return#3 Not aliassing across scopes: cnt#8 cnt#6 Not aliassing across scopes: cnt2#7 cnt2#5 @@ -472,7 +458,6 @@ Not aliassing across scopes: cnt#13 cnt#4 Not aliassing across scopes: cnt2#12 cnt2#3 Not aliassing across scopes: cnt3#12 cnt3#3 Alias (byte) inccnt::return#0 = (byte) inccnt::return#4 -Alias (byte[256]) SCREEN#1 = (byte[256]) SCREEN#3 (byte[256]) SCREEN#2 Alias (byte) cnt#1 = (byte) cnt#8 Alias (byte) cnt2#1 = (byte) cnt2#7 Alias (byte) cnt3#1 = (byte) cnt3#7 @@ -487,7 +472,6 @@ Alias (byte) cnt3#11 = (byte) cnt3#4 (byte) cnt3#5 Alias (byte) cnt#0 = (byte) cnt#15 Alias (byte) cnt2#0 = (byte) cnt2#14 Alias (byte) cnt3#0 = (byte) cnt3#14 -Alias (byte[256]) SCREEN#0 = (byte[256]) SCREEN#4 Alias (byte) cnt#13 = (byte) cnt#7 Alias (byte) cnt2#12 = (byte) cnt2#6 Alias (byte) cnt3#12 = (byte) cnt3#6 @@ -500,7 +484,6 @@ CONTROL FLOW GRAPH (byte[256]) SCREEN#0 ← ((byte*)) (word/signed word) 1024 to:@2 main: scope:[main] from @2 - (byte[256]) SCREEN#1 ← phi( @2/(byte[256]) SCREEN#0 ) (byte) cnt3#13 ← phi( @2/(byte) cnt3#0 ) (byte) cnt2#13 ← phi( @2/(byte) cnt2#0 ) (byte) cnt#14 ← phi( @2/(byte) cnt#0 ) @@ -512,7 +495,7 @@ main::@1: scope:[main] from main (byte) cnt2#1 ← phi( main/(byte) cnt2#11 ) (byte) cnt#1 ← phi( main/(byte) cnt#12 ) (byte~) main::$0 ← (byte) inccnt::return#0 - *((byte[256]) SCREEN#1 + (byte/signed byte/word/signed word) 0) ← (byte~) main::$0 + *((byte[256]) SCREEN#0 + (byte/signed byte/word/signed word) 0) ← (byte~) main::$0 (byte) cnt#2 ← ++ (byte) cnt#1 call inccnt param-assignment (byte) inccnt::return#1 ← (byte) inccnt::return#2 @@ -522,7 +505,7 @@ main::@2: scope:[main] from main::@1 (byte) cnt2#2 ← phi( main::@1/(byte) cnt2#11 ) (byte) cnt#10 ← phi( main::@1/(byte) cnt#12 ) (byte~) main::$1 ← (byte) inccnt::return#1 - *((byte[256]) SCREEN#1 + (byte/signed byte/word/signed word) 1) ← (byte~) main::$1 + *((byte[256]) SCREEN#0 + (byte/signed byte/word/signed word) 1) ← (byte~) main::$1 to:main::@return main::@return: scope:[main] from main::@2 return @@ -552,7 +535,6 @@ inccnt::@return: scope:[inccnt] from inccnt Not aliassing across scopes: cnt#14 cnt#0 Not aliassing across scopes: cnt2#13 cnt2#0 Not aliassing across scopes: cnt3#13 cnt3#0 -Not aliassing across scopes: SCREEN#1 SCREEN#0 Not aliassing across scopes: inccnt::return#0 inccnt::return#2 Not aliassing across scopes: cnt#1 cnt#12 Not aliassing across scopes: cnt2#1 cnt2#11 @@ -573,7 +555,6 @@ Not aliassing across scopes: cnt3#12 cnt3#2 Redundant Phi (byte) cnt#14 (byte) cnt#0 Redundant Phi (byte) cnt2#13 (byte) cnt2#0 Redundant Phi (byte) cnt3#13 (byte) cnt3#0 -Redundant Phi (byte[256]) SCREEN#1 (byte[256]) SCREEN#0 Redundant Phi (byte) cnt#1 (byte) cnt#12 Redundant Phi (byte) cnt2#1 (byte) cnt2#11 Redundant Phi (byte) cnt3#1 (byte) cnt3#11 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/modglobalmin.log b/src/main/java/dk/camelot64/kickc/test/ref/modglobalmin.log index c3cd6178e..5d374a239 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/modglobalmin.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/modglobalmin.log @@ -150,7 +150,6 @@ inccnt::@return: scope:[inccnt] from inccnt to:@end @end: scope:[] from @3 -Completing Phi functions... Completing Phi functions... Completing Phi functions... CONTROL FLOW GRAPH SSA @@ -159,24 +158,21 @@ CONTROL FLOW GRAPH SSA (byte[256]) SCREEN#0 ← ((byte*)) (word/signed word) 1024 to:@2 main: scope:[main] from @2 - (byte[256]) SCREEN#3 ← phi( @2/(byte[256]) SCREEN#4 ) (byte) cnt#15 ← phi( @2/(byte) cnt#16 ) call inccnt param-assignment to:main::@1 main::@1: scope:[main] from main - (byte[256]) SCREEN#1 ← phi( main/(byte[256]) SCREEN#3 ) (byte) cnt#9 ← phi( main/(byte) cnt#15 ) (byte) cnt#1 ← (byte) cnt#9 - *((byte[256]) SCREEN#1 + (byte/signed byte/word/signed word) 0) ← (byte) cnt#1 + *((byte[256]) SCREEN#0 + (byte/signed byte/word/signed word) 0) ← (byte) cnt#1 (byte) cnt#2 ← ++ (byte) cnt#1 call inccnt param-assignment to:main::@2 main::@2: scope:[main] from main::@1 - (byte[256]) SCREEN#2 ← phi( main::@1/(byte[256]) SCREEN#1 ) (byte) cnt#10 ← phi( main::@1/(byte) cnt#2 ) (byte) cnt#3 ← (byte) cnt#10 (byte) cnt#4 ← ++ (byte) cnt#3 - *((byte[256]) SCREEN#2 + (byte/signed byte/word/signed word) 1) ← (byte) cnt#4 + *((byte[256]) SCREEN#0 + (byte/signed byte/word/signed word) 1) ← (byte) cnt#4 to:main::@return main::@return: scope:[main] from main::@2 (byte) cnt#11 ← phi( main::@2/(byte) cnt#4 ) @@ -193,7 +189,6 @@ inccnt::@return: scope:[inccnt] from inccnt return to:@return @2: scope:[] from @begin - (byte[256]) SCREEN#4 ← phi( @begin/(byte[256]) SCREEN#0 ) (byte) cnt#16 ← phi( @begin/(byte) cnt#0 ) call main param-assignment to:@3 @@ -209,24 +204,21 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN (byte[256]) SCREEN#0 ← ((byte*)) (word/signed word) 1024 to:@2 main: scope:[main] from @2 - (byte[256]) SCREEN#3 ← phi( @2/(byte[256]) SCREEN#4 ) (byte) cnt#15 ← phi( @2/(byte) cnt#16 ) call inccnt param-assignment to:main::@1 main::@1: scope:[main] from main - (byte[256]) SCREEN#1 ← phi( main/(byte[256]) SCREEN#3 ) (byte) cnt#9 ← phi( main/(byte) cnt#7 ) (byte) cnt#1 ← (byte) cnt#9 - *((byte[256]) SCREEN#1 + (byte/signed byte/word/signed word) 0) ← (byte) cnt#1 + *((byte[256]) SCREEN#0 + (byte/signed byte/word/signed word) 0) ← (byte) cnt#1 (byte) cnt#2 ← ++ (byte) cnt#1 call inccnt param-assignment to:main::@2 main::@2: scope:[main] from main::@1 - (byte[256]) SCREEN#2 ← phi( main::@1/(byte[256]) SCREEN#1 ) (byte) cnt#10 ← phi( main::@1/(byte) cnt#7 ) (byte) cnt#3 ← (byte) cnt#10 (byte) cnt#4 ← ++ (byte) cnt#3 - *((byte[256]) SCREEN#2 + (byte/signed byte/word/signed word) 1) ← (byte) cnt#4 + *((byte[256]) SCREEN#0 + (byte/signed byte/word/signed word) 1) ← (byte) cnt#4 to:main::@return main::@return: scope:[main] from main::@2 (byte) cnt#11 ← phi( main::@2/(byte) cnt#4 ) @@ -243,7 +235,6 @@ inccnt::@return: scope:[inccnt] from inccnt return to:@return @2: scope:[] from @begin - (byte[256]) SCREEN#4 ← phi( @begin/(byte[256]) SCREEN#0 ) (byte) cnt#16 ← phi( @begin/(byte) cnt#0 ) call main param-assignment to:@3 @@ -260,10 +251,6 @@ INITIAL SSA SYMBOL TABLE (label) @end (byte[256]) SCREEN (byte[256]) SCREEN#0 -(byte[256]) SCREEN#1 -(byte[256]) SCREEN#2 -(byte[256]) SCREEN#3 -(byte[256]) SCREEN#4 (byte) cnt (byte) cnt#0 (byte) cnt#1 @@ -290,18 +277,15 @@ INITIAL SSA SYMBOL TABLE (label) main::@return Not aliassing across scopes: cnt#15 cnt#16 -Not aliassing across scopes: SCREEN#3 SCREEN#4 Not aliassing across scopes: cnt#9 cnt#7 Not aliassing across scopes: cnt#10 cnt#7 Not aliassing across scopes: cnt#12 cnt#15 Not aliassing across scopes: cnt#14 cnt#5 -Alias (byte[256]) SCREEN#1 = (byte[256]) SCREEN#3 (byte[256]) SCREEN#2 Alias (byte) cnt#1 = (byte) cnt#9 Alias (byte) cnt#10 = (byte) cnt#3 Alias (byte) cnt#11 = (byte) cnt#4 (byte) cnt#5 Alias (byte) cnt#13 = (byte) cnt#6 (byte) cnt#7 Alias (byte) cnt#0 = (byte) cnt#16 -Alias (byte[256]) SCREEN#0 = (byte[256]) SCREEN#4 Alias (byte) cnt#14 = (byte) cnt#8 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH @@ -310,20 +294,19 @@ CONTROL FLOW GRAPH (byte[256]) SCREEN#0 ← ((byte*)) (word/signed word) 1024 to:@2 main: scope:[main] from @2 - (byte[256]) SCREEN#1 ← phi( @2/(byte[256]) SCREEN#0 ) (byte) cnt#15 ← phi( @2/(byte) cnt#0 ) call inccnt param-assignment to:main::@1 main::@1: scope:[main] from main (byte) cnt#1 ← phi( main/(byte) cnt#13 ) - *((byte[256]) SCREEN#1 + (byte/signed byte/word/signed word) 0) ← (byte) cnt#1 + *((byte[256]) SCREEN#0 + (byte/signed byte/word/signed word) 0) ← (byte) cnt#1 (byte) cnt#2 ← ++ (byte) cnt#1 call inccnt param-assignment to:main::@2 main::@2: scope:[main] from main::@1 (byte) cnt#10 ← phi( main::@1/(byte) cnt#13 ) (byte) cnt#11 ← ++ (byte) cnt#10 - *((byte[256]) SCREEN#1 + (byte/signed byte/word/signed word) 1) ← (byte) cnt#11 + *((byte[256]) SCREEN#0 + (byte/signed byte/word/signed word) 1) ← (byte) cnt#11 to:main::@return main::@return: scope:[main] from main::@2 return @@ -344,13 +327,11 @@ inccnt::@return: scope:[inccnt] from inccnt @end: scope:[] from @3 Not aliassing across scopes: cnt#15 cnt#0 -Not aliassing across scopes: SCREEN#1 SCREEN#0 Not aliassing across scopes: cnt#1 cnt#13 Not aliassing across scopes: cnt#10 cnt#13 Not aliassing across scopes: cnt#12 cnt#15 Not aliassing across scopes: cnt#14 cnt#11 Redundant Phi (byte) cnt#15 (byte) cnt#0 -Redundant Phi (byte[256]) SCREEN#1 (byte[256]) SCREEN#0 Redundant Phi (byte) cnt#1 (byte) cnt#13 Redundant Phi (byte) cnt#10 (byte) cnt#13 Redundant Phi (byte) cnt#14 (byte) cnt#11 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/printmsg.log b/src/main/java/dk/camelot64/kickc/test/ref/printmsg.log index 2c0de5c3f..e5cbabfd2 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/printmsg.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/printmsg.log @@ -477,9 +477,6 @@ main::@return: scope:[main] from main::@6 to:@end @end: scope:[] from @8 -Completing Phi functions... -Completing Phi functions... -Completing Phi functions... Completing Phi functions... Completing Phi functions... Completing Phi functions... @@ -541,46 +538,37 @@ print_ln::@return: scope:[print_ln] from print_ln::@2 (byte[]) msg3#0 ← (const string) $2 to:@7 main: scope:[main] from @7 - (byte[]) msg3#5 ← phi( @7/(byte[]) msg3#6 ) - (byte[]) msg2#3 ← phi( @7/(byte[]) msg2#4 ) (byte*) line_cursor#21 ← phi( @7/(byte*) line_cursor#20 ) (byte*) char_cursor#27 ← phi( @7/(byte*) char_cursor#28 ) - (byte[]) msg#1 ← phi( @7/(byte[]) msg#2 ) - (byte*) print_str::str#1 ← (byte[]) msg#1 + (byte*) print_str::str#1 ← (byte[]) msg#0 call print_str param-assignment to:main::@1 main::@1: scope:[main] from main - (byte[]) msg3#4 ← phi( main/(byte[]) msg3#5 ) - (byte[]) msg2#2 ← phi( main/(byte[]) msg2#3 ) (byte*) line_cursor#17 ← phi( main/(byte*) line_cursor#21 ) (byte*) char_cursor#17 ← phi( main/(byte*) char_cursor#27 ) (byte*) char_cursor#5 ← (byte*) char_cursor#17 call print_ln param-assignment to:main::@2 main::@2: scope:[main] from main::@1 - (byte[]) msg3#3 ← phi( main::@1/(byte[]) msg3#4 ) - (byte[]) msg2#1 ← phi( main::@1/(byte[]) msg2#2 ) (byte*) char_cursor#18 ← phi( main::@1/(byte*) char_cursor#5 ) (byte*) line_cursor#11 ← phi( main::@1/(byte*) line_cursor#17 ) (byte*) line_cursor#3 ← (byte*) line_cursor#11 (byte*) char_cursor#6 ← (byte*) char_cursor#18 - (byte*) print_str::str#2 ← (byte[]) msg2#1 + (byte*) print_str::str#2 ← (byte[]) msg2#0 call print_str param-assignment to:main::@3 main::@3: scope:[main] from main::@2 - (byte[]) msg3#2 ← phi( main::@2/(byte[]) msg3#3 ) (byte*) line_cursor#18 ← phi( main::@2/(byte*) line_cursor#3 ) (byte*) char_cursor#19 ← phi( main::@2/(byte*) char_cursor#6 ) (byte*) char_cursor#7 ← (byte*) char_cursor#19 call print_ln param-assignment to:main::@4 main::@4: scope:[main] from main::@3 - (byte[]) msg3#1 ← phi( main::@3/(byte[]) msg3#2 ) (byte*) char_cursor#20 ← phi( main::@3/(byte*) char_cursor#7 ) (byte*) line_cursor#12 ← phi( main::@3/(byte*) line_cursor#18 ) (byte*) line_cursor#4 ← (byte*) line_cursor#12 (byte*) char_cursor#8 ← (byte*) char_cursor#20 - (byte*) print_str::str#3 ← (byte[]) msg3#1 + (byte*) print_str::str#3 ← (byte[]) msg3#0 call print_str param-assignment to:main::@5 main::@5: scope:[main] from main::@4 @@ -603,11 +591,8 @@ main::@return: scope:[main] from main::@6 return to:@return @7: scope:[] from @6 - (byte[]) msg3#6 ← phi( @6/(byte[]) msg3#0 ) - (byte[]) msg2#4 ← phi( @6/(byte[]) msg2#0 ) (byte*) line_cursor#20 ← phi( @6/(byte*) line_cursor#22 ) (byte*) char_cursor#28 ← phi( @6/(byte*) char_cursor#30 ) - (byte[]) msg#2 ← phi( @6/(byte[]) msg#0 ) call main param-assignment to:@8 @8: scope:[] from @7 @@ -676,46 +661,37 @@ print_ln::@return: scope:[print_ln] from print_ln::@2 (byte[]) msg3#0 ← (const string) $2 to:@7 main: scope:[main] from @7 - (byte[]) msg3#5 ← phi( @7/(byte[]) msg3#6 ) - (byte[]) msg2#3 ← phi( @7/(byte[]) msg2#4 ) (byte*) line_cursor#21 ← phi( @7/(byte*) line_cursor#20 ) (byte*) char_cursor#27 ← phi( @7/(byte*) char_cursor#28 ) - (byte[]) msg#1 ← phi( @7/(byte[]) msg#2 ) - (byte*) print_str::str#1 ← (byte[]) msg#1 + (byte*) print_str::str#1 ← (byte[]) msg#0 call print_str param-assignment to:main::@1 main::@1: scope:[main] from main - (byte[]) msg3#4 ← phi( main/(byte[]) msg3#5 ) - (byte[]) msg2#2 ← phi( main/(byte[]) msg2#3 ) (byte*) line_cursor#17 ← phi( main/(byte*) line_cursor#21 ) (byte*) char_cursor#17 ← phi( main/(byte*) char_cursor#2 ) (byte*) char_cursor#5 ← (byte*) char_cursor#17 call print_ln param-assignment to:main::@2 main::@2: scope:[main] from main::@1 - (byte[]) msg3#3 ← phi( main::@1/(byte[]) msg3#4 ) - (byte[]) msg2#1 ← phi( main::@1/(byte[]) msg2#2 ) (byte*) char_cursor#18 ← phi( main::@1/(byte*) char_cursor#4 ) (byte*) line_cursor#11 ← phi( main::@1/(byte*) line_cursor#2 ) (byte*) line_cursor#3 ← (byte*) line_cursor#11 (byte*) char_cursor#6 ← (byte*) char_cursor#18 - (byte*) print_str::str#2 ← (byte[]) msg2#1 + (byte*) print_str::str#2 ← (byte[]) msg2#0 call print_str param-assignment to:main::@3 main::@3: scope:[main] from main::@2 - (byte[]) msg3#2 ← phi( main::@2/(byte[]) msg3#3 ) (byte*) line_cursor#18 ← phi( main::@2/(byte*) line_cursor#3 ) (byte*) char_cursor#19 ← phi( main::@2/(byte*) char_cursor#2 ) (byte*) char_cursor#7 ← (byte*) char_cursor#19 call print_ln param-assignment to:main::@4 main::@4: scope:[main] from main::@3 - (byte[]) msg3#1 ← phi( main::@3/(byte[]) msg3#2 ) (byte*) char_cursor#20 ← phi( main::@3/(byte*) char_cursor#4 ) (byte*) line_cursor#12 ← phi( main::@3/(byte*) line_cursor#2 ) (byte*) line_cursor#4 ← (byte*) line_cursor#12 (byte*) char_cursor#8 ← (byte*) char_cursor#20 - (byte*) print_str::str#3 ← (byte[]) msg3#1 + (byte*) print_str::str#3 ← (byte[]) msg3#0 call print_str param-assignment to:main::@5 main::@5: scope:[main] from main::@4 @@ -738,11 +714,8 @@ main::@return: scope:[main] from main::@6 return to:@return @7: scope:[] from @6 - (byte[]) msg3#6 ← phi( @6/(byte[]) msg3#0 ) - (byte[]) msg2#4 ← phi( @6/(byte[]) msg2#0 ) (byte*) line_cursor#20 ← phi( @6/(byte*) line_cursor#22 ) (byte*) char_cursor#28 ← phi( @6/(byte*) char_cursor#30 ) - (byte[]) msg#2 ← phi( @6/(byte[]) msg#0 ) call main param-assignment to:@8 @8: scope:[] from @7 @@ -828,22 +801,10 @@ INITIAL SSA SYMBOL TABLE (label) main::@return (byte[]) msg (byte[]) msg#0 -(byte[]) msg#1 -(byte[]) msg#2 (byte[]) msg2 (byte[]) msg2#0 -(byte[]) msg2#1 -(byte[]) msg2#2 -(byte[]) msg2#3 -(byte[]) msg2#4 (byte[]) msg3 (byte[]) msg3#0 -(byte[]) msg3#1 -(byte[]) msg3#2 -(byte[]) msg3#3 -(byte[]) msg3#4 -(byte[]) msg3#5 -(byte[]) msg3#6 (void()) print_ln() (byte*~) print_ln::$0 (boolean~) print_ln::$1 @@ -868,20 +829,17 @@ Not aliassing across scopes: print_str::str#6 print_str::str#1 Not aliassing across scopes: char_cursor#29 char_cursor#27 Not aliassing across scopes: line_cursor#16 line_cursor#17 Not aliassing across scopes: char_cursor#26 char_cursor#5 -Not aliassing across scopes: msg#1 msg#2 Not aliassing across scopes: char_cursor#27 char_cursor#28 Not aliassing across scopes: line_cursor#21 line_cursor#20 -Not aliassing across scopes: msg2#3 msg2#4 -Not aliassing across scopes: msg3#5 msg3#6 -Not aliassing across scopes: print_str::str#1 msg#1 +Not aliassing across scopes: print_str::str#1 msg#0 Not aliassing across scopes: char_cursor#17 char_cursor#2 Not aliassing across scopes: line_cursor#11 line_cursor#2 Not aliassing across scopes: char_cursor#18 char_cursor#4 -Not aliassing across scopes: print_str::str#2 msg2#1 +Not aliassing across scopes: print_str::str#2 msg2#0 Not aliassing across scopes: char_cursor#19 char_cursor#2 Not aliassing across scopes: line_cursor#12 line_cursor#2 Not aliassing across scopes: char_cursor#20 char_cursor#4 -Not aliassing across scopes: print_str::str#3 msg3#1 +Not aliassing across scopes: print_str::str#3 msg3#0 Not aliassing across scopes: char_cursor#21 char_cursor#2 Not aliassing across scopes: line_cursor#13 line_cursor#2 Not aliassing across scopes: char_cursor#22 char_cursor#4 @@ -892,8 +850,6 @@ Alias (byte*) print_str::str#4 = (byte*) print_str::str#5 Alias (byte*) char_cursor#13 = (byte*) char_cursor#25 (byte*) char_cursor#14 (byte*) char_cursor#2 Alias (byte*) line_cursor#1 = (byte*~) print_ln::$0 (byte*) line_cursor#9 (byte*) char_cursor#3 (byte*) line_cursor#10 (byte*) char_cursor#16 (byte*) line_cursor#2 (byte*) char_cursor#4 Alias (byte*) line_cursor#17 = (byte*) line_cursor#21 -Alias (byte[]) msg2#1 = (byte[]) msg2#2 (byte[]) msg2#3 -Alias (byte[]) msg3#1 = (byte[]) msg3#4 (byte[]) msg3#5 (byte[]) msg3#3 (byte[]) msg3#2 Alias (byte*) char_cursor#17 = (byte*) char_cursor#5 Alias (byte*) line_cursor#11 = (byte*) line_cursor#3 (byte*) line_cursor#18 Alias (byte*) char_cursor#18 = (byte*) char_cursor#6 @@ -903,9 +859,6 @@ Alias (byte*) char_cursor#20 = (byte*) char_cursor#8 Alias (byte*) char_cursor#21 = (byte*) char_cursor#9 Alias (byte*) line_cursor#13 = (byte*) line_cursor#5 (byte*) line_cursor#14 (byte*) line_cursor#6 Alias (byte*) char_cursor#10 = (byte*) char_cursor#22 (byte*) char_cursor#23 (byte*) char_cursor#11 -Alias (byte[]) msg#0 = (byte[]) msg#2 -Alias (byte[]) msg2#0 = (byte[]) msg2#4 -Alias (byte[]) msg3#0 = (byte[]) msg3#6 Alias (byte*) char_cursor#12 = (byte*) char_cursor#24 Alias (byte*) line_cursor#15 = (byte*) line_cursor#7 Succesful SSA optimization Pass2AliasElimination @@ -953,12 +906,9 @@ print_ln::@return: scope:[print_ln] from print_ln::@2 (byte[]) msg3#0 ← (const string) $2 to:@7 main: scope:[main] from @7 - (byte[]) msg3#1 ← phi( @7/(byte[]) msg3#0 ) - (byte[]) msg2#1 ← phi( @7/(byte[]) msg2#0 ) (byte*) line_cursor#17 ← phi( @7/(byte*) char_cursor#0 ) (byte*) char_cursor#27 ← phi( @7/(byte*) char_cursor#0 ) - (byte[]) msg#1 ← phi( @7/(byte[]) msg#0 ) - (byte*) print_str::str#1 ← (byte[]) msg#1 + (byte*) print_str::str#1 ← (byte[]) msg#0 call print_str param-assignment to:main::@1 main::@1: scope:[main] from main @@ -968,7 +918,7 @@ main::@1: scope:[main] from main main::@2: scope:[main] from main::@1 (byte*) char_cursor#18 ← phi( main::@1/(byte*) line_cursor#1 ) (byte*) line_cursor#11 ← phi( main::@1/(byte*) line_cursor#1 ) - (byte*) print_str::str#2 ← (byte[]) msg2#1 + (byte*) print_str::str#2 ← (byte[]) msg2#0 call print_str param-assignment to:main::@3 main::@3: scope:[main] from main::@2 @@ -978,7 +928,7 @@ main::@3: scope:[main] from main::@2 main::@4: scope:[main] from main::@3 (byte*) char_cursor#20 ← phi( main::@3/(byte*) line_cursor#1 ) (byte*) line_cursor#12 ← phi( main::@3/(byte*) line_cursor#1 ) - (byte*) print_str::str#3 ← (byte[]) msg3#1 + (byte*) print_str::str#3 ← (byte[]) msg3#0 call print_str param-assignment to:main::@5 main::@5: scope:[main] from main::@4 @@ -1005,20 +955,17 @@ Not aliassing across scopes: print_str::str#6 print_str::str#1 Not aliassing across scopes: char_cursor#29 char_cursor#27 Not aliassing across scopes: line_cursor#16 line_cursor#17 Not aliassing across scopes: char_cursor#26 char_cursor#17 -Not aliassing across scopes: msg#1 msg#0 Not aliassing across scopes: char_cursor#27 char_cursor#0 Not aliassing across scopes: line_cursor#17 char_cursor#0 -Not aliassing across scopes: msg2#1 msg2#0 -Not aliassing across scopes: msg3#1 msg3#0 -Not aliassing across scopes: print_str::str#1 msg#1 +Not aliassing across scopes: print_str::str#1 msg#0 Not aliassing across scopes: char_cursor#17 char_cursor#13 Not aliassing across scopes: line_cursor#11 line_cursor#1 Not aliassing across scopes: char_cursor#18 line_cursor#1 -Not aliassing across scopes: print_str::str#2 msg2#1 +Not aliassing across scopes: print_str::str#2 msg2#0 Not aliassing across scopes: char_cursor#19 char_cursor#13 Not aliassing across scopes: line_cursor#12 line_cursor#1 Not aliassing across scopes: char_cursor#20 line_cursor#1 -Not aliassing across scopes: print_str::str#3 msg3#1 +Not aliassing across scopes: print_str::str#3 msg3#0 Not aliassing across scopes: char_cursor#21 char_cursor#13 Not aliassing across scopes: line_cursor#13 line_cursor#1 Not aliassing across scopes: char_cursor#10 line_cursor#1 @@ -1070,12 +1017,9 @@ print_ln::@return: scope:[print_ln] from print_ln::@2 (byte[]) msg3#0 ← (const string) $2 to:@7 main: scope:[main] from @7 - (byte[]) msg3#1 ← phi( @7/(byte[]) msg3#0 ) - (byte[]) msg2#1 ← phi( @7/(byte[]) msg2#0 ) (byte*) line_cursor#17 ← phi( @7/(byte*) char_cursor#0 ) (byte*) char_cursor#27 ← phi( @7/(byte*) char_cursor#0 ) - (byte[]) msg#1 ← phi( @7/(byte[]) msg#0 ) - (byte*) print_str::str#1 ← (byte[]) msg#1 + (byte*) print_str::str#1 ← (byte[]) msg#0 call print_str param-assignment to:main::@1 main::@1: scope:[main] from main @@ -1085,7 +1029,7 @@ main::@1: scope:[main] from main main::@2: scope:[main] from main::@1 (byte*) char_cursor#18 ← phi( main::@1/(byte*) line_cursor#1 ) (byte*) line_cursor#11 ← phi( main::@1/(byte*) line_cursor#1 ) - (byte*) print_str::str#2 ← (byte[]) msg2#1 + (byte*) print_str::str#2 ← (byte[]) msg2#0 call print_str param-assignment to:main::@3 main::@3: scope:[main] from main::@2 @@ -1095,7 +1039,7 @@ main::@3: scope:[main] from main::@2 main::@4: scope:[main] from main::@3 (byte*) char_cursor#20 ← phi( main::@3/(byte*) line_cursor#1 ) (byte*) line_cursor#12 ← phi( main::@3/(byte*) line_cursor#1 ) - (byte*) print_str::str#3 ← (byte[]) msg3#1 + (byte*) print_str::str#3 ← (byte[]) msg3#0 call print_str param-assignment to:main::@5 main::@5: scope:[main] from main::@4 @@ -1119,11 +1063,8 @@ main::@return: scope:[main] from main::@6 @end: scope:[] from @8 Redundant Phi (byte*) char_cursor#15 (byte*) char_cursor#26 -Redundant Phi (byte[]) msg#1 (byte[]) msg#0 Redundant Phi (byte*) char_cursor#27 (byte*) char_cursor#0 Redundant Phi (byte*) line_cursor#17 (byte*) char_cursor#0 -Redundant Phi (byte[]) msg2#1 (byte[]) msg2#0 -Redundant Phi (byte[]) msg3#1 (byte[]) msg3#0 Redundant Phi (byte*) char_cursor#17 (byte*) char_cursor#13 Redundant Phi (byte*) line_cursor#11 (byte*) line_cursor#1 Redundant Phi (byte*) char_cursor#18 (byte*) line_cursor#1 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/ptrtest.log b/src/main/java/dk/camelot64/kickc/test/ref/ptrtest.log index 7cd06e494..fa4d7dda7 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/ptrtest.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/ptrtest.log @@ -559,15 +559,13 @@ lvalue: scope:[lvalue] from main (byte) lvalue::i#0 ← (byte/signed byte/word/signed word) 2 to:lvalue::@1 lvalue::@1: scope:[lvalue] from lvalue lvalue::@2 - (byte[1024]) lvalue::SCREEN#2 ← phi( lvalue/(byte[1024]) lvalue::SCREEN#0 lvalue::@2/(byte[1024]) lvalue::SCREEN#1 ) (byte) lvalue::i#2 ← phi( lvalue/(byte) lvalue::i#0 lvalue::@2/(byte) lvalue::i#1 ) (boolean~) lvalue::$0 ← (byte) lvalue::i#2 < (byte/signed byte/word/signed word) 10 if((boolean~) lvalue::$0) goto lvalue::@2 to:lvalue::@return lvalue::@2: scope:[lvalue] from lvalue::@1 (byte) lvalue::i#3 ← phi( lvalue::@1/(byte) lvalue::i#2 ) - (byte[1024]) lvalue::SCREEN#1 ← phi( lvalue::@1/(byte[1024]) lvalue::SCREEN#2 ) - *((byte[1024]) lvalue::SCREEN#1 + (byte) lvalue::i#3) ← (byte/signed byte/word/signed word) 3 + *((byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#3) ← (byte/signed byte/word/signed word) 3 (byte) lvalue::i#1 ← ++ (byte) lvalue::i#3 to:lvalue::@1 lvalue::@return: scope:[lvalue] from lvalue::@1 @@ -580,15 +578,13 @@ rvalue: scope:[rvalue] from main::@1 (byte) rvalue::i#0 ← (byte/signed byte/word/signed word) 2 to:rvalue::@1 rvalue::@1: scope:[rvalue] from rvalue rvalue::@2 - (byte[1024]) rvalue::SCREEN#2 ← phi( rvalue/(byte[1024]) rvalue::SCREEN#0 rvalue::@2/(byte[1024]) rvalue::SCREEN#1 ) (byte) rvalue::i#2 ← phi( rvalue/(byte) rvalue::i#0 rvalue::@2/(byte) rvalue::i#1 ) (boolean~) rvalue::$0 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10 if((boolean~) rvalue::$0) goto rvalue::@2 to:rvalue::@return rvalue::@2: scope:[rvalue] from rvalue::@1 (byte) rvalue::i#3 ← phi( rvalue::@1/(byte) rvalue::i#2 ) - (byte[1024]) rvalue::SCREEN#1 ← phi( rvalue::@1/(byte[1024]) rvalue::SCREEN#2 ) - (byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#1 + (byte) rvalue::i#3) + (byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#3) (byte) rvalue::i#1 ← ++ (byte) rvalue::i#3 to:rvalue::@1 rvalue::@return: scope:[rvalue] from rvalue::@1 @@ -670,15 +666,13 @@ lvalue: scope:[lvalue] from main (byte) lvalue::i#0 ← (byte/signed byte/word/signed word) 2 to:lvalue::@1 lvalue::@1: scope:[lvalue] from lvalue lvalue::@2 - (byte[1024]) lvalue::SCREEN#2 ← phi( lvalue/(byte[1024]) lvalue::SCREEN#0 lvalue::@2/(byte[1024]) lvalue::SCREEN#1 ) (byte) lvalue::i#2 ← phi( lvalue/(byte) lvalue::i#0 lvalue::@2/(byte) lvalue::i#1 ) (boolean~) lvalue::$0 ← (byte) lvalue::i#2 < (byte/signed byte/word/signed word) 10 if((boolean~) lvalue::$0) goto lvalue::@2 to:lvalue::@return lvalue::@2: scope:[lvalue] from lvalue::@1 (byte) lvalue::i#3 ← phi( lvalue::@1/(byte) lvalue::i#2 ) - (byte[1024]) lvalue::SCREEN#1 ← phi( lvalue::@1/(byte[1024]) lvalue::SCREEN#2 ) - *((byte[1024]) lvalue::SCREEN#1 + (byte) lvalue::i#3) ← (byte/signed byte/word/signed word) 3 + *((byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#3) ← (byte/signed byte/word/signed word) 3 (byte) lvalue::i#1 ← ++ (byte) lvalue::i#3 to:lvalue::@1 lvalue::@return: scope:[lvalue] from lvalue::@1 @@ -691,15 +685,13 @@ rvalue: scope:[rvalue] from main::@1 (byte) rvalue::i#0 ← (byte/signed byte/word/signed word) 2 to:rvalue::@1 rvalue::@1: scope:[rvalue] from rvalue rvalue::@2 - (byte[1024]) rvalue::SCREEN#2 ← phi( rvalue/(byte[1024]) rvalue::SCREEN#0 rvalue::@2/(byte[1024]) rvalue::SCREEN#1 ) (byte) rvalue::i#2 ← phi( rvalue/(byte) rvalue::i#0 rvalue::@2/(byte) rvalue::i#1 ) (boolean~) rvalue::$0 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10 if((boolean~) rvalue::$0) goto rvalue::@2 to:rvalue::@return rvalue::@2: scope:[rvalue] from rvalue::@1 (byte) rvalue::i#3 ← phi( rvalue::@1/(byte) rvalue::i#2 ) - (byte[1024]) rvalue::SCREEN#1 ← phi( rvalue::@1/(byte[1024]) rvalue::SCREEN#2 ) - (byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#1 + (byte) rvalue::i#3) + (byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#3) (byte) rvalue::i#1 ← ++ (byte) rvalue::i#3 to:rvalue::@1 rvalue::@return: scope:[rvalue] from rvalue::@1 @@ -766,8 +758,6 @@ INITIAL SSA SYMBOL TABLE (label) lvalue::@return (byte[1024]) lvalue::SCREEN (byte[1024]) lvalue::SCREEN#0 -(byte[1024]) lvalue::SCREEN#1 -(byte[1024]) lvalue::SCREEN#2 (byte) lvalue::i (byte) lvalue::i#0 (byte) lvalue::i#1 @@ -805,8 +795,6 @@ INITIAL SSA SYMBOL TABLE (label) rvalue::@return (byte[1024]) rvalue::SCREEN (byte[1024]) rvalue::SCREEN#0 -(byte[1024]) rvalue::SCREEN#1 -(byte[1024]) rvalue::SCREEN#2 (byte) rvalue::b (byte) rvalue::b#0 (byte) rvalue::b#1 @@ -860,15 +848,13 @@ lvalue: scope:[lvalue] from main (byte) lvalue::i#0 ← (byte/signed byte/word/signed word) 2 to:lvalue::@1 lvalue::@1: scope:[lvalue] from lvalue lvalue::@2 - (byte[1024]) lvalue::SCREEN#2 ← phi( lvalue/(byte[1024]) lvalue::SCREEN#0 lvalue::@2/(byte[1024]) lvalue::SCREEN#1 ) (byte) lvalue::i#2 ← phi( lvalue/(byte) lvalue::i#0 lvalue::@2/(byte) lvalue::i#1 ) (boolean~) lvalue::$0 ← (byte) lvalue::i#2 < (byte/signed byte/word/signed word) 10 if((boolean~) lvalue::$0) goto lvalue::@2 to:lvalue::@return lvalue::@2: scope:[lvalue] from lvalue::@1 (byte) lvalue::i#3 ← phi( lvalue::@1/(byte) lvalue::i#2 ) - (byte[1024]) lvalue::SCREEN#1 ← phi( lvalue::@1/(byte[1024]) lvalue::SCREEN#2 ) - *((byte[1024]) lvalue::SCREEN#1 + (byte) lvalue::i#3) ← (byte/signed byte/word/signed word) 3 + *((byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#3) ← (byte/signed byte/word/signed word) 3 (byte) lvalue::i#1 ← ++ (byte) lvalue::i#3 to:lvalue::@1 lvalue::@return: scope:[lvalue] from lvalue::@1 @@ -881,15 +867,13 @@ rvalue: scope:[rvalue] from main::@1 (byte) rvalue::i#0 ← (byte/signed byte/word/signed word) 2 to:rvalue::@1 rvalue::@1: scope:[rvalue] from rvalue rvalue::@2 - (byte[1024]) rvalue::SCREEN#2 ← phi( rvalue/(byte[1024]) rvalue::SCREEN#0 rvalue::@2/(byte[1024]) rvalue::SCREEN#1 ) (byte) rvalue::i#2 ← phi( rvalue/(byte) rvalue::i#0 rvalue::@2/(byte) rvalue::i#1 ) (boolean~) rvalue::$0 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10 if((boolean~) rvalue::$0) goto rvalue::@2 to:rvalue::@return rvalue::@2: scope:[rvalue] from rvalue::@1 (byte) rvalue::i#3 ← phi( rvalue::@1/(byte) rvalue::i#2 ) - (byte[1024]) rvalue::SCREEN#1 ← phi( rvalue::@1/(byte[1024]) rvalue::SCREEN#2 ) - (byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#1 + (byte) rvalue::i#3) + (byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#3) (byte) rvalue::i#1 ← ++ (byte) rvalue::i#3 to:rvalue::@1 rvalue::@return: scope:[rvalue] from rvalue::@1 @@ -942,9 +926,7 @@ rvaluevar::@return: scope:[rvaluevar] from rvaluevar::@1 to:@end @end: scope:[] from @5 -Alias (byte[1024]) lvalue::SCREEN#1 = (byte[1024]) lvalue::SCREEN#2 Alias (byte) lvalue::i#2 = (byte) lvalue::i#3 -Alias (byte[1024]) rvalue::SCREEN#1 = (byte[1024]) rvalue::SCREEN#2 Alias (byte) rvalue::i#2 = (byte) rvalue::i#3 Alias (byte) lvaluevar::b#1 = (byte) lvaluevar::b#2 Alias (byte*) lvaluevar::screen#2 = (byte*) lvaluevar::screen#3 @@ -977,13 +959,12 @@ lvalue: scope:[lvalue] from main (byte) lvalue::i#0 ← (byte/signed byte/word/signed word) 2 to:lvalue::@1 lvalue::@1: scope:[lvalue] from lvalue lvalue::@2 - (byte[1024]) lvalue::SCREEN#1 ← phi( lvalue/(byte[1024]) lvalue::SCREEN#0 lvalue::@2/(byte[1024]) lvalue::SCREEN#1 ) (byte) lvalue::i#2 ← phi( lvalue/(byte) lvalue::i#0 lvalue::@2/(byte) lvalue::i#1 ) (boolean~) lvalue::$0 ← (byte) lvalue::i#2 < (byte/signed byte/word/signed word) 10 if((boolean~) lvalue::$0) goto lvalue::@2 to:lvalue::@return lvalue::@2: scope:[lvalue] from lvalue::@1 - *((byte[1024]) lvalue::SCREEN#1 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word) 3 + *((byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word) 3 (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 to:lvalue::@1 lvalue::@return: scope:[lvalue] from lvalue::@1 @@ -996,13 +977,12 @@ rvalue: scope:[rvalue] from main::@1 (byte) rvalue::i#0 ← (byte/signed byte/word/signed word) 2 to:rvalue::@1 rvalue::@1: scope:[rvalue] from rvalue rvalue::@2 - (byte[1024]) rvalue::SCREEN#1 ← phi( rvalue/(byte[1024]) rvalue::SCREEN#0 rvalue::@2/(byte[1024]) rvalue::SCREEN#1 ) (byte) rvalue::i#2 ← phi( rvalue/(byte) rvalue::i#0 rvalue::@2/(byte) rvalue::i#1 ) (boolean~) rvalue::$0 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10 if((boolean~) rvalue::$0) goto rvalue::@2 to:rvalue::@return rvalue::@2: scope:[rvalue] from rvalue::@1 - (byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#1 + (byte) rvalue::i#2) + (byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#2) (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 to:rvalue::@1 rvalue::@return: scope:[rvalue] from rvalue::@1 @@ -1050,8 +1030,6 @@ rvaluevar::@return: scope:[rvaluevar] from rvaluevar::@1 to:@end @end: scope:[] from @5 -Self Phi Eliminated (byte[1024]) lvalue::SCREEN#1 -Self Phi Eliminated (byte[1024]) rvalue::SCREEN#1 Self Phi Eliminated (byte) lvaluevar::b#1 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @@ -1079,13 +1057,12 @@ lvalue: scope:[lvalue] from main (byte) lvalue::i#0 ← (byte/signed byte/word/signed word) 2 to:lvalue::@1 lvalue::@1: scope:[lvalue] from lvalue lvalue::@2 - (byte[1024]) lvalue::SCREEN#1 ← phi( lvalue/(byte[1024]) lvalue::SCREEN#0 ) (byte) lvalue::i#2 ← phi( lvalue/(byte) lvalue::i#0 lvalue::@2/(byte) lvalue::i#1 ) (boolean~) lvalue::$0 ← (byte) lvalue::i#2 < (byte/signed byte/word/signed word) 10 if((boolean~) lvalue::$0) goto lvalue::@2 to:lvalue::@return lvalue::@2: scope:[lvalue] from lvalue::@1 - *((byte[1024]) lvalue::SCREEN#1 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word) 3 + *((byte[1024]) lvalue::SCREEN#0 + (byte) lvalue::i#2) ← (byte/signed byte/word/signed word) 3 (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 to:lvalue::@1 lvalue::@return: scope:[lvalue] from lvalue::@1 @@ -1098,13 +1075,12 @@ rvalue: scope:[rvalue] from main::@1 (byte) rvalue::i#0 ← (byte/signed byte/word/signed word) 2 to:rvalue::@1 rvalue::@1: scope:[rvalue] from rvalue rvalue::@2 - (byte[1024]) rvalue::SCREEN#1 ← phi( rvalue/(byte[1024]) rvalue::SCREEN#0 ) (byte) rvalue::i#2 ← phi( rvalue/(byte) rvalue::i#0 rvalue::@2/(byte) rvalue::i#1 ) (boolean~) rvalue::$0 ← (byte) rvalue::i#2 < (byte/signed byte/word/signed word) 10 if((boolean~) rvalue::$0) goto rvalue::@2 to:rvalue::@return rvalue::@2: scope:[rvalue] from rvalue::@1 - (byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#1 + (byte) rvalue::i#2) + (byte) rvalue::b#2 ← *((byte[1024]) rvalue::SCREEN#0 + (byte) rvalue::i#2) (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 to:rvalue::@1 rvalue::@return: scope:[rvalue] from rvalue::@1 @@ -1152,8 +1128,6 @@ rvaluevar::@return: scope:[rvaluevar] from rvaluevar::@1 to:@end @end: scope:[] from @5 -Redundant Phi (byte[1024]) lvalue::SCREEN#1 (byte[1024]) lvalue::SCREEN#0 -Redundant Phi (byte[1024]) rvalue::SCREEN#1 (byte[1024]) rvalue::SCREEN#0 Redundant Phi (byte) lvaluevar::b#1 (byte) lvaluevar::b#0 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH diff --git a/src/main/java/dk/camelot64/kickc/test/ref/scroll-clobber.log b/src/main/java/dk/camelot64/kickc/test/ref/scroll-clobber.log index 4f39e4cf5..5a620833a 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/scroll-clobber.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/scroll-clobber.log @@ -178,12 +178,10 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) SCREEN#4 ← phi( @1/(byte*) SCREEN#5 ) - (byte[]) TEXT#1 ← phi( @1/(byte[]) TEXT#3 ) - (byte*) main::nxt#0 ← (byte[]) TEXT#1 + (byte*) main::nxt#0 ← (byte[]) TEXT#0 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@2 - (byte[]) TEXT#4 ← phi( main/(byte[]) TEXT#1 main::@2/(byte[]) TEXT#5 ) (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#4 main::@2/(byte*) SCREEN#1 ) (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) main::nxt#3 ← phi( main/(byte*) main::nxt#0 main::@2/(byte*) main::nxt#1 ) @@ -193,7 +191,6 @@ main::@1: scope:[main] from main main::@2 if((boolean~) main::$1) goto main::@2 to:main::@3 main::@2: scope:[main] from main::@1 main::@3 - (byte[]) TEXT#5 ← phi( main::@1/(byte[]) TEXT#4 main::@3/(byte[]) TEXT#2 ) (byte*) main::nxt#4 ← phi( main::@1/(byte*) main::nxt#3 main::@3/(byte*) main::nxt#2 ) (byte*) SCREEN#1 ← phi( main::@1/(byte*) SCREEN#2 main::@3/(byte*) SCREEN#3 ) (byte) main::c#2 ← phi( main::@1/(byte) main::c#0 main::@3/(byte) main::c#1 ) @@ -206,8 +203,7 @@ main::@2: scope:[main] from main::@1 main::@3 main::@3: scope:[main] from main::@1 (byte*) SCREEN#3 ← phi( main::@1/(byte*) SCREEN#2 ) (byte) main::i#4 ← phi( main::@1/(byte) main::i#3 ) - (byte[]) TEXT#2 ← phi( main::@1/(byte[]) TEXT#4 ) - (byte*) main::nxt#2 ← (byte[]) TEXT#2 + (byte*) main::nxt#2 ← (byte[]) TEXT#0 (byte) main::c#1 ← *((byte*) main::nxt#2) to:main::@2 main::@return: scope:[main] from main::@2 @@ -215,7 +211,6 @@ main::@return: scope:[main] from main::@2 to:@return @1: scope:[] from @begin (byte*) SCREEN#5 ← phi( @begin/(byte*) SCREEN#0 ) - (byte[]) TEXT#3 ← phi( @begin/(byte[]) TEXT#0 ) call main param-assignment to:@2 @2: scope:[] from @1 @@ -229,12 +224,10 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN to:@1 main: scope:[main] from @1 (byte*) SCREEN#4 ← phi( @1/(byte*) SCREEN#5 ) - (byte[]) TEXT#1 ← phi( @1/(byte[]) TEXT#3 ) - (byte*) main::nxt#0 ← (byte[]) TEXT#1 + (byte*) main::nxt#0 ← (byte[]) TEXT#0 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@2 - (byte[]) TEXT#4 ← phi( main/(byte[]) TEXT#1 main::@2/(byte[]) TEXT#5 ) (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#4 main::@2/(byte*) SCREEN#1 ) (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) main::nxt#3 ← phi( main/(byte*) main::nxt#0 main::@2/(byte*) main::nxt#1 ) @@ -244,7 +237,6 @@ main::@1: scope:[main] from main main::@2 if((boolean~) main::$1) goto main::@2 to:main::@3 main::@2: scope:[main] from main::@1 main::@3 - (byte[]) TEXT#5 ← phi( main::@1/(byte[]) TEXT#4 main::@3/(byte[]) TEXT#2 ) (byte*) main::nxt#4 ← phi( main::@1/(byte*) main::nxt#3 main::@3/(byte*) main::nxt#2 ) (byte*) SCREEN#1 ← phi( main::@1/(byte*) SCREEN#2 main::@3/(byte*) SCREEN#3 ) (byte) main::c#2 ← phi( main::@1/(byte) main::c#0 main::@3/(byte) main::c#1 ) @@ -257,8 +249,7 @@ main::@2: scope:[main] from main::@1 main::@3 main::@3: scope:[main] from main::@1 (byte*) SCREEN#3 ← phi( main::@1/(byte*) SCREEN#2 ) (byte) main::i#4 ← phi( main::@1/(byte) main::i#3 ) - (byte[]) TEXT#2 ← phi( main::@1/(byte[]) TEXT#4 ) - (byte*) main::nxt#2 ← (byte[]) TEXT#2 + (byte*) main::nxt#2 ← (byte[]) TEXT#0 (byte) main::c#1 ← *((byte*) main::nxt#2) to:main::@2 main::@return: scope:[main] from main::@2 @@ -266,7 +257,6 @@ main::@return: scope:[main] from main::@2 to:@return @1: scope:[] from @begin (byte*) SCREEN#5 ← phi( @begin/(byte*) SCREEN#0 ) - (byte[]) TEXT#3 ← phi( @begin/(byte[]) TEXT#0 ) call main param-assignment to:@2 @2: scope:[] from @1 @@ -288,11 +278,6 @@ INITIAL SSA SYMBOL TABLE (byte*) SCREEN#5 (byte[]) TEXT (byte[]) TEXT#0 -(byte[]) TEXT#1 -(byte[]) TEXT#2 -(byte[]) TEXT#3 -(byte[]) TEXT#4 -(byte[]) TEXT#5 (void()) main() (boolean~) main::$0 (boolean~) main::$1 @@ -326,12 +311,10 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @1 (byte*) SCREEN#4 ← phi( @1/(byte*) SCREEN#5 ) - (byte[]) TEXT#1 ← phi( @1/(byte[]) TEXT#3 ) - (byte*) main::nxt#0 ← (byte[]) TEXT#1 + (byte*) main::nxt#0 ← (byte[]) TEXT#0 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@2 - (byte[]) TEXT#4 ← phi( main/(byte[]) TEXT#1 main::@2/(byte[]) TEXT#5 ) (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#4 main::@2/(byte*) SCREEN#1 ) (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) main::nxt#3 ← phi( main/(byte*) main::nxt#0 main::@2/(byte*) main::nxt#1 ) @@ -341,7 +324,6 @@ main::@1: scope:[main] from main main::@2 if((boolean~) main::$1) goto main::@2 to:main::@3 main::@2: scope:[main] from main::@1 main::@3 - (byte[]) TEXT#5 ← phi( main::@1/(byte[]) TEXT#4 main::@3/(byte[]) TEXT#2 ) (byte*) main::nxt#4 ← phi( main::@1/(byte*) main::nxt#3 main::@3/(byte*) main::nxt#2 ) (byte*) SCREEN#1 ← phi( main::@1/(byte*) SCREEN#2 main::@3/(byte*) SCREEN#3 ) (byte) main::c#2 ← phi( main::@1/(byte) main::c#0 main::@3/(byte) main::c#1 ) @@ -354,8 +336,7 @@ main::@2: scope:[main] from main::@1 main::@3 main::@3: scope:[main] from main::@1 (byte*) SCREEN#3 ← phi( main::@1/(byte*) SCREEN#2 ) (byte) main::i#4 ← phi( main::@1/(byte) main::i#3 ) - (byte[]) TEXT#2 ← phi( main::@1/(byte[]) TEXT#4 ) - (byte*) main::nxt#2 ← (byte[]) TEXT#2 + (byte*) main::nxt#2 ← (byte[]) TEXT#0 (byte) main::c#1 ← *((byte*) main::nxt#2) to:main::@2 main::@return: scope:[main] from main::@2 @@ -363,7 +344,6 @@ main::@return: scope:[main] from main::@2 to:@return @1: scope:[] from @begin (byte*) SCREEN#5 ← phi( @begin/(byte*) SCREEN#0 ) - (byte[]) TEXT#3 ← phi( @begin/(byte[]) TEXT#0 ) call main param-assignment to:@end @end: scope:[] from @1 @@ -377,12 +357,10 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @1 (byte*) SCREEN#4 ← phi( @1/(byte*) SCREEN#5 ) - (byte[]) TEXT#1 ← phi( @1/(byte[]) TEXT#3 ) - (byte*) main::nxt#0 ← (byte[]) TEXT#1 + (byte*) main::nxt#0 ← (byte[]) TEXT#0 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@2 - (byte[]) TEXT#4 ← phi( main/(byte[]) TEXT#1 main::@2/(byte[]) TEXT#5 ) (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#4 main::@2/(byte*) SCREEN#1 ) (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) main::nxt#3 ← phi( main/(byte*) main::nxt#0 main::@2/(byte*) main::nxt#1 ) @@ -391,7 +369,6 @@ main::@1: scope:[main] from main main::@2 if((boolean~) main::$1) goto main::@2 to:main::@3 main::@2: scope:[main] from main::@1 main::@3 - (byte[]) TEXT#5 ← phi( main::@1/(byte[]) TEXT#4 main::@3/(byte[]) TEXT#2 ) (byte*) main::nxt#4 ← phi( main::@1/(byte*) main::nxt#3 main::@3/(byte*) main::nxt#2 ) (byte*) SCREEN#1 ← phi( main::@1/(byte*) SCREEN#2 main::@3/(byte*) SCREEN#3 ) (byte) main::c#2 ← phi( main::@1/(byte) main::c#0 main::@3/(byte) main::c#1 ) @@ -404,8 +381,7 @@ main::@2: scope:[main] from main::@1 main::@3 main::@3: scope:[main] from main::@1 (byte*) SCREEN#3 ← phi( main::@1/(byte*) SCREEN#2 ) (byte) main::i#4 ← phi( main::@1/(byte) main::i#3 ) - (byte[]) TEXT#2 ← phi( main::@1/(byte[]) TEXT#4 ) - (byte*) main::nxt#2 ← (byte[]) TEXT#2 + (byte*) main::nxt#2 ← (byte[]) TEXT#0 (byte) main::c#1 ← *((byte*) main::nxt#2) to:main::@2 main::@return: scope:[main] from main::@2 @@ -413,19 +389,15 @@ main::@return: scope:[main] from main::@2 to:@return @1: scope:[] from @begin (byte*) SCREEN#5 ← phi( @begin/(byte*) SCREEN#0 ) - (byte[]) TEXT#3 ← phi( @begin/(byte[]) TEXT#0 ) call main param-assignment to:@end @end: scope:[] from @1 -Not aliassing across scopes: TEXT#1 TEXT#3 Not aliassing across scopes: SCREEN#4 SCREEN#5 -Not aliassing across scopes: main::nxt#0 TEXT#1 -Not aliassing across scopes: main::nxt#2 TEXT#2 -Alias (byte[]) TEXT#2 = (byte[]) TEXT#4 +Not aliassing across scopes: main::nxt#0 TEXT#0 +Not aliassing across scopes: main::nxt#2 TEXT#0 Alias (byte) main::i#3 = (byte) main::i#4 Alias (byte*) SCREEN#2 = (byte*) SCREEN#3 -Alias (byte[]) TEXT#0 = (byte[]) TEXT#3 Alias (byte*) SCREEN#0 = (byte*) SCREEN#5 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH @@ -435,12 +407,10 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @1 (byte*) SCREEN#4 ← phi( @1/(byte*) SCREEN#0 ) - (byte[]) TEXT#1 ← phi( @1/(byte[]) TEXT#0 ) - (byte*) main::nxt#0 ← (byte[]) TEXT#1 + (byte*) main::nxt#0 ← (byte[]) TEXT#0 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@2 - (byte[]) TEXT#2 ← phi( main/(byte[]) TEXT#1 main::@2/(byte[]) TEXT#5 ) (byte*) SCREEN#2 ← phi( main/(byte*) SCREEN#4 main::@2/(byte*) SCREEN#1 ) (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) main::nxt#3 ← phi( main/(byte*) main::nxt#0 main::@2/(byte*) main::nxt#1 ) @@ -449,7 +419,6 @@ main::@1: scope:[main] from main main::@2 if((boolean~) main::$1) goto main::@2 to:main::@3 main::@2: scope:[main] from main::@1 main::@3 - (byte[]) TEXT#5 ← phi( main::@1/(byte[]) TEXT#2 main::@3/(byte[]) TEXT#2 ) (byte*) main::nxt#4 ← phi( main::@1/(byte*) main::nxt#3 main::@3/(byte*) main::nxt#2 ) (byte*) SCREEN#1 ← phi( main::@1/(byte*) SCREEN#2 main::@3/(byte*) SCREEN#2 ) (byte) main::c#2 ← phi( main::@1/(byte) main::c#0 main::@3/(byte) main::c#1 ) @@ -460,7 +429,7 @@ main::@2: scope:[main] from main::@1 main::@3 if(true) goto main::@1 to:main::@return main::@3: scope:[main] from main::@1 - (byte*) main::nxt#2 ← (byte[]) TEXT#2 + (byte*) main::nxt#2 ← (byte[]) TEXT#0 (byte) main::c#1 ← *((byte*) main::nxt#2) to:main::@2 main::@return: scope:[main] from main::@2 @@ -471,13 +440,11 @@ main::@return: scope:[main] from main::@2 to:@end @end: scope:[] from @1 -Not aliassing across scopes: TEXT#1 TEXT#0 Not aliassing across scopes: SCREEN#4 SCREEN#0 -Not aliassing across scopes: main::nxt#0 TEXT#1 -Not aliassing across scopes: main::nxt#2 TEXT#2 +Not aliassing across scopes: main::nxt#0 TEXT#0 +Not aliassing across scopes: main::nxt#2 TEXT#0 Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte*) SCREEN#1 = (byte*) SCREEN#2 -Alias (byte[]) TEXT#2 = (byte[]) TEXT#5 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -486,12 +453,10 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @1 (byte*) SCREEN#4 ← phi( @1/(byte*) SCREEN#0 ) - (byte[]) TEXT#1 ← phi( @1/(byte[]) TEXT#0 ) - (byte*) main::nxt#0 ← (byte[]) TEXT#1 + (byte*) main::nxt#0 ← (byte[]) TEXT#0 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@2 - (byte[]) TEXT#2 ← phi( main/(byte[]) TEXT#1 main::@2/(byte[]) TEXT#2 ) (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#4 main::@2/(byte*) SCREEN#1 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) main::nxt#3 ← phi( main/(byte*) main::nxt#0 main::@2/(byte*) main::nxt#1 ) @@ -508,7 +473,7 @@ main::@2: scope:[main] from main::@1 main::@3 if(true) goto main::@1 to:main::@return main::@3: scope:[main] from main::@1 - (byte*) main::nxt#2 ← (byte[]) TEXT#2 + (byte*) main::nxt#2 ← (byte[]) TEXT#0 (byte) main::c#1 ← *((byte*) main::nxt#2) to:main::@2 main::@return: scope:[main] from main::@2 @@ -519,12 +484,10 @@ main::@return: scope:[main] from main::@2 to:@end @end: scope:[] from @1 -Not aliassing across scopes: TEXT#1 TEXT#0 Not aliassing across scopes: SCREEN#4 SCREEN#0 -Not aliassing across scopes: main::nxt#0 TEXT#1 -Not aliassing across scopes: main::nxt#2 TEXT#2 +Not aliassing across scopes: main::nxt#0 TEXT#0 +Not aliassing across scopes: main::nxt#2 TEXT#0 Self Phi Eliminated (byte*) SCREEN#1 -Self Phi Eliminated (byte[]) TEXT#2 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -533,12 +496,10 @@ CONTROL FLOW GRAPH to:@1 main: scope:[main] from @1 (byte*) SCREEN#4 ← phi( @1/(byte*) SCREEN#0 ) - (byte[]) TEXT#1 ← phi( @1/(byte[]) TEXT#0 ) - (byte*) main::nxt#0 ← (byte[]) TEXT#1 + (byte*) main::nxt#0 ← (byte[]) TEXT#0 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@1 main::@1: scope:[main] from main main::@2 - (byte[]) TEXT#2 ← phi( main/(byte[]) TEXT#1 ) (byte*) SCREEN#1 ← phi( main/(byte*) SCREEN#4 ) (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) (byte*) main::nxt#3 ← phi( main/(byte*) main::nxt#0 main::@2/(byte*) main::nxt#1 ) @@ -555,7 +516,7 @@ main::@2: scope:[main] from main::@1 main::@3 if(true) goto main::@1 to:main::@return main::@3: scope:[main] from main::@1 - (byte*) main::nxt#2 ← (byte[]) TEXT#2 + (byte*) main::nxt#2 ← (byte[]) TEXT#0 (byte) main::c#1 ← *((byte*) main::nxt#2) to:main::@2 main::@return: scope:[main] from main::@2 @@ -566,10 +527,8 @@ main::@return: scope:[main] from main::@2 to:@end @end: scope:[] from @1 -Redundant Phi (byte[]) TEXT#1 (byte[]) TEXT#0 Redundant Phi (byte*) SCREEN#4 (byte*) SCREEN#0 Redundant Phi (byte*) SCREEN#1 (byte*) SCREEN#4 -Redundant Phi (byte[]) TEXT#2 (byte[]) TEXT#1 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH @begin: scope:[] from diff --git a/src/main/java/dk/camelot64/kickc/test/ref/scroll.log b/src/main/java/dk/camelot64/kickc/test/ref/scroll.log index 9dc5d41c3..c5d5f1234 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/scroll.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/scroll.log @@ -462,7 +462,6 @@ main::@13: scope:[main] from main main::@1: scope:[main] from main::@4 (byte*) TEXT#11 ← phi( main::@4/(byte*) TEXT#12 ) (byte*) main::nxt#10 ← phi( main::@4/(byte*) main::nxt#11 ) - (byte[]) main::line#9 ← phi( main::@4/(byte[]) main::line#10 ) (byte*) SCROLL#9 ← phi( main::@4/(byte*) SCROLL#1 ) (byte) main::scroll#10 ← phi( main::@4/(byte) main::scroll#4 ) (byte*) BGCOL#8 ← phi( main::@4/(byte*) BGCOL#2 ) @@ -471,7 +470,6 @@ main::@1: scope:[main] from main::@4 main::@2: scope:[main] from main::@1 main::@13 main::@2 (byte*) TEXT#10 ← phi( main::@1/(byte*) TEXT#11 main::@13/(byte*) TEXT#1 main::@2/(byte*) TEXT#10 ) (byte*) main::nxt#9 ← phi( main::@1/(byte*) main::nxt#10 main::@13/(byte*) main::nxt#0 main::@2/(byte*) main::nxt#9 ) - (byte[]) main::line#8 ← phi( main::@1/(byte[]) main::line#9 main::@13/(byte[]) main::line#0 main::@2/(byte[]) main::line#8 ) (byte*) SCROLL#7 ← phi( main::@1/(byte*) SCROLL#9 main::@13/(byte*) SCROLL#10 main::@2/(byte*) SCROLL#7 ) (byte) main::scroll#7 ← phi( main::@1/(byte) main::scroll#10 main::@13/(byte) main::scroll#0 main::@2/(byte) main::scroll#7 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#8 main::@13/(byte*) BGCOL#9 main::@2/(byte*) BGCOL#5 ) @@ -482,7 +480,6 @@ main::@2: scope:[main] from main::@1 main::@13 main::@2 main::@3: scope:[main] from main::@2 main::@3 (byte*) TEXT#9 ← phi( main::@2/(byte*) TEXT#10 main::@3/(byte*) TEXT#9 ) (byte*) main::nxt#8 ← phi( main::@2/(byte*) main::nxt#9 main::@3/(byte*) main::nxt#8 ) - (byte[]) main::line#7 ← phi( main::@2/(byte[]) main::line#8 main::@3/(byte[]) main::line#7 ) (byte*) SCROLL#4 ← phi( main::@2/(byte*) SCROLL#7 main::@3/(byte*) SCROLL#4 ) (byte) main::scroll#5 ← phi( main::@2/(byte) main::scroll#7 main::@3/(byte) main::scroll#5 ) (byte*) BGCOL#3 ← phi( main::@2/(byte*) BGCOL#5 main::@3/(byte*) BGCOL#3 ) @@ -494,7 +491,6 @@ main::@8: scope:[main] from main::@3 (byte*) TEXT#8 ← phi( main::@3/(byte*) TEXT#9 ) (byte*) main::nxt#7 ← phi( main::@3/(byte*) main::nxt#8 ) (byte*) RASTER#9 ← phi( main::@3/(byte*) RASTER#2 ) - (byte[]) main::line#6 ← phi( main::@3/(byte[]) main::line#7 ) (byte*) SCROLL#3 ← phi( main::@3/(byte*) SCROLL#4 ) (byte) main::scroll#3 ← phi( main::@3/(byte) main::scroll#5 ) (byte*) BGCOL#1 ← phi( main::@3/(byte*) BGCOL#3 ) @@ -507,7 +503,6 @@ main::@8: scope:[main] from main::@3 main::@4: scope:[main] from main::@6 main::@8 (byte*) TEXT#12 ← phi( main::@6/(byte*) TEXT#13 main::@8/(byte*) TEXT#8 ) (byte*) main::nxt#11 ← phi( main::@6/(byte*) main::nxt#1 main::@8/(byte*) main::nxt#7 ) - (byte[]) main::line#10 ← phi( main::@6/(byte[]) main::line#2 main::@8/(byte[]) main::line#6 ) (byte*) RASTER#6 ← phi( main::@6/(byte*) RASTER#8 main::@8/(byte*) RASTER#9 ) (byte*) BGCOL#2 ← phi( main::@6/(byte*) BGCOL#4 main::@8/(byte*) BGCOL#1 ) (byte*) SCROLL#1 ← phi( main::@6/(byte*) SCROLL#2 main::@8/(byte*) SCROLL#3 ) @@ -522,7 +517,6 @@ main::@9: scope:[main] from main::@8 (byte*) SCROLL#11 ← phi( main::@8/(byte*) SCROLL#3 ) (byte*) TEXT#7 ← phi( main::@8/(byte*) TEXT#8 ) (byte*) main::nxt#6 ← phi( main::@8/(byte*) main::nxt#7 ) - (byte[]) main::line#3 ← phi( main::@8/(byte[]) main::line#6 ) (byte) main::scroll#2 ← (byte/signed byte/word/signed word) 7 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@5 @@ -533,10 +527,9 @@ main::@5: scope:[main] from main::@5 main::@9 (byte) main::scroll#11 ← phi( main::@5/(byte) main::scroll#11 main::@9/(byte) main::scroll#2 ) (byte*) TEXT#6 ← phi( main::@5/(byte*) TEXT#6 main::@9/(byte*) TEXT#7 ) (byte*) main::nxt#5 ← phi( main::@5/(byte*) main::nxt#5 main::@9/(byte*) main::nxt#6 ) - (byte[]) main::line#1 ← phi( main::@5/(byte[]) main::line#1 main::@9/(byte[]) main::line#3 ) (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@9/(byte) main::i#0 ) (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) main::line#1 + (byte) main::i#2) ← *((byte[]) main::line#1 + (byte/word~) main::$6) + *((byte[]) main::line#0 + (byte) main::i#2) ← *((byte[]) main::line#0 + (byte/word~) main::$6) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$7 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 39 if((boolean~) main::$7) goto main::@5 @@ -547,7 +540,6 @@ main::@10: scope:[main] from main::@5 (byte*) SCROLL#5 ← phi( main::@5/(byte*) SCROLL#8 ) (byte) main::scroll#8 ← phi( main::@5/(byte) main::scroll#11 ) (byte*) TEXT#4 ← phi( main::@5/(byte*) TEXT#6 ) - (byte[]) main::line#4 ← phi( main::@5/(byte[]) main::line#1 ) (byte*) main::nxt#3 ← phi( main::@5/(byte*) main::nxt#5 ) (byte) main::c#0 ← *((byte*) main::nxt#3) (boolean~) main::$8 ← (byte) main::c#0 == (byte) '@' @@ -561,9 +553,8 @@ main::@6: scope:[main] from main::@10 main::@11 (byte*) SCROLL#2 ← phi( main::@10/(byte*) SCROLL#5 main::@11/(byte*) SCROLL#6 ) (byte) main::scroll#6 ← phi( main::@10/(byte) main::scroll#8 main::@11/(byte) main::scroll#9 ) (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 ) - (byte[]) main::line#2 ← phi( main::@10/(byte[]) main::line#4 main::@11/(byte[]) main::line#5 ) (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((byte[]) main::line#2 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + *((byte[]) main::line#0 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@11: scope:[main] from main::@10 @@ -571,7 +562,6 @@ main::@11: scope:[main] from main::@10 (byte*) BGCOL#7 ← phi( main::@10/(byte*) BGCOL#6 ) (byte*) SCROLL#6 ← phi( main::@10/(byte*) SCROLL#5 ) (byte) main::scroll#9 ← phi( main::@10/(byte) main::scroll#8 ) - (byte[]) main::line#5 ← phi( main::@10/(byte[]) main::line#4 ) (byte*) TEXT#2 ← phi( main::@10/(byte*) TEXT#4 ) (byte*) main::nxt#2 ← (byte*) TEXT#2 (byte) main::c#1 ← *((byte*) main::nxt#2) @@ -641,7 +631,6 @@ main::@13: scope:[main] from main main::@1: scope:[main] from main::@4 (byte*) TEXT#11 ← phi( main::@4/(byte*) TEXT#12 ) (byte*) main::nxt#10 ← phi( main::@4/(byte*) main::nxt#11 ) - (byte[]) main::line#9 ← phi( main::@4/(byte[]) main::line#10 ) (byte*) SCROLL#9 ← phi( main::@4/(byte*) SCROLL#1 ) (byte) main::scroll#10 ← phi( main::@4/(byte) main::scroll#4 ) (byte*) BGCOL#8 ← phi( main::@4/(byte*) BGCOL#2 ) @@ -650,7 +639,6 @@ main::@1: scope:[main] from main::@4 main::@2: scope:[main] from main::@1 main::@13 main::@2 (byte*) TEXT#10 ← phi( main::@1/(byte*) TEXT#11 main::@13/(byte*) TEXT#1 main::@2/(byte*) TEXT#10 ) (byte*) main::nxt#9 ← phi( main::@1/(byte*) main::nxt#10 main::@13/(byte*) main::nxt#0 main::@2/(byte*) main::nxt#9 ) - (byte[]) main::line#8 ← phi( main::@1/(byte[]) main::line#9 main::@13/(byte[]) main::line#0 main::@2/(byte[]) main::line#8 ) (byte*) SCROLL#7 ← phi( main::@1/(byte*) SCROLL#9 main::@13/(byte*) SCROLL#10 main::@2/(byte*) SCROLL#7 ) (byte) main::scroll#7 ← phi( main::@1/(byte) main::scroll#10 main::@13/(byte) main::scroll#0 main::@2/(byte) main::scroll#7 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#8 main::@13/(byte*) BGCOL#9 main::@2/(byte*) BGCOL#5 ) @@ -661,7 +649,6 @@ main::@2: scope:[main] from main::@1 main::@13 main::@2 main::@3: scope:[main] from main::@2 main::@3 (byte*) TEXT#9 ← phi( main::@2/(byte*) TEXT#10 main::@3/(byte*) TEXT#9 ) (byte*) main::nxt#8 ← phi( main::@2/(byte*) main::nxt#9 main::@3/(byte*) main::nxt#8 ) - (byte[]) main::line#7 ← phi( main::@2/(byte[]) main::line#8 main::@3/(byte[]) main::line#7 ) (byte*) SCROLL#4 ← phi( main::@2/(byte*) SCROLL#7 main::@3/(byte*) SCROLL#4 ) (byte) main::scroll#5 ← phi( main::@2/(byte) main::scroll#7 main::@3/(byte) main::scroll#5 ) (byte*) BGCOL#3 ← phi( main::@2/(byte*) BGCOL#5 main::@3/(byte*) BGCOL#3 ) @@ -673,7 +660,6 @@ main::@8: scope:[main] from main::@3 (byte*) TEXT#8 ← phi( main::@3/(byte*) TEXT#9 ) (byte*) main::nxt#7 ← phi( main::@3/(byte*) main::nxt#8 ) (byte*) RASTER#9 ← phi( main::@3/(byte*) RASTER#2 ) - (byte[]) main::line#6 ← phi( main::@3/(byte[]) main::line#7 ) (byte*) SCROLL#3 ← phi( main::@3/(byte*) SCROLL#4 ) (byte) main::scroll#3 ← phi( main::@3/(byte) main::scroll#5 ) (byte*) BGCOL#1 ← phi( main::@3/(byte*) BGCOL#3 ) @@ -686,7 +672,6 @@ main::@8: scope:[main] from main::@3 main::@4: scope:[main] from main::@6 main::@8 (byte*) TEXT#12 ← phi( main::@6/(byte*) TEXT#13 main::@8/(byte*) TEXT#8 ) (byte*) main::nxt#11 ← phi( main::@6/(byte*) main::nxt#1 main::@8/(byte*) main::nxt#7 ) - (byte[]) main::line#10 ← phi( main::@6/(byte[]) main::line#2 main::@8/(byte[]) main::line#6 ) (byte*) RASTER#6 ← phi( main::@6/(byte*) RASTER#8 main::@8/(byte*) RASTER#9 ) (byte*) BGCOL#2 ← phi( main::@6/(byte*) BGCOL#4 main::@8/(byte*) BGCOL#1 ) (byte*) SCROLL#1 ← phi( main::@6/(byte*) SCROLL#2 main::@8/(byte*) SCROLL#3 ) @@ -701,7 +686,6 @@ main::@9: scope:[main] from main::@8 (byte*) SCROLL#11 ← phi( main::@8/(byte*) SCROLL#3 ) (byte*) TEXT#7 ← phi( main::@8/(byte*) TEXT#8 ) (byte*) main::nxt#6 ← phi( main::@8/(byte*) main::nxt#7 ) - (byte[]) main::line#3 ← phi( main::@8/(byte[]) main::line#6 ) (byte) main::scroll#2 ← (byte/signed byte/word/signed word) 7 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@5 @@ -712,10 +696,9 @@ main::@5: scope:[main] from main::@5 main::@9 (byte) main::scroll#11 ← phi( main::@5/(byte) main::scroll#11 main::@9/(byte) main::scroll#2 ) (byte*) TEXT#6 ← phi( main::@5/(byte*) TEXT#6 main::@9/(byte*) TEXT#7 ) (byte*) main::nxt#5 ← phi( main::@5/(byte*) main::nxt#5 main::@9/(byte*) main::nxt#6 ) - (byte[]) main::line#1 ← phi( main::@5/(byte[]) main::line#1 main::@9/(byte[]) main::line#3 ) (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@9/(byte) main::i#0 ) (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) main::line#1 + (byte) main::i#2) ← *((byte[]) main::line#1 + (byte/word~) main::$6) + *((byte[]) main::line#0 + (byte) main::i#2) ← *((byte[]) main::line#0 + (byte/word~) main::$6) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$7 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 39 if((boolean~) main::$7) goto main::@5 @@ -726,7 +709,6 @@ main::@10: scope:[main] from main::@5 (byte*) SCROLL#5 ← phi( main::@5/(byte*) SCROLL#8 ) (byte) main::scroll#8 ← phi( main::@5/(byte) main::scroll#11 ) (byte*) TEXT#4 ← phi( main::@5/(byte*) TEXT#6 ) - (byte[]) main::line#4 ← phi( main::@5/(byte[]) main::line#1 ) (byte*) main::nxt#3 ← phi( main::@5/(byte*) main::nxt#5 ) (byte) main::c#0 ← *((byte*) main::nxt#3) (boolean~) main::$8 ← (byte) main::c#0 == (byte) '@' @@ -740,9 +722,8 @@ main::@6: scope:[main] from main::@10 main::@11 (byte*) SCROLL#2 ← phi( main::@10/(byte*) SCROLL#5 main::@11/(byte*) SCROLL#6 ) (byte) main::scroll#6 ← phi( main::@10/(byte) main::scroll#8 main::@11/(byte) main::scroll#9 ) (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 ) - (byte[]) main::line#2 ← phi( main::@10/(byte[]) main::line#4 main::@11/(byte[]) main::line#5 ) (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((byte[]) main::line#2 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + *((byte[]) main::line#0 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@11: scope:[main] from main::@10 @@ -750,7 +731,6 @@ main::@11: scope:[main] from main::@10 (byte*) BGCOL#7 ← phi( main::@10/(byte*) BGCOL#6 ) (byte*) SCROLL#6 ← phi( main::@10/(byte*) SCROLL#5 ) (byte) main::scroll#9 ← phi( main::@10/(byte) main::scroll#8 ) - (byte[]) main::line#5 ← phi( main::@10/(byte[]) main::line#4 ) (byte*) TEXT#2 ← phi( main::@10/(byte*) TEXT#4 ) (byte*) main::nxt#2 ← (byte*) TEXT#2 (byte) main::c#1 ← *((byte*) main::nxt#2) @@ -908,16 +888,6 @@ INITIAL SSA SYMBOL TABLE (byte) main::i#2 (byte[]) main::line (byte[]) main::line#0 -(byte[]) main::line#1 -(byte[]) main::line#10 -(byte[]) main::line#2 -(byte[]) main::line#3 -(byte[]) main::line#4 -(byte[]) main::line#5 -(byte[]) main::line#6 -(byte[]) main::line#7 -(byte[]) main::line#8 -(byte[]) main::line#9 (byte*) main::nxt (byte*) main::nxt#0 (byte*) main::nxt#1 @@ -979,7 +949,6 @@ main::@13: scope:[main] from main main::@1: scope:[main] from main::@4 (byte*) TEXT#11 ← phi( main::@4/(byte*) TEXT#12 ) (byte*) main::nxt#10 ← phi( main::@4/(byte*) main::nxt#11 ) - (byte[]) main::line#9 ← phi( main::@4/(byte[]) main::line#10 ) (byte*) SCROLL#9 ← phi( main::@4/(byte*) SCROLL#1 ) (byte) main::scroll#10 ← phi( main::@4/(byte) main::scroll#4 ) (byte*) BGCOL#8 ← phi( main::@4/(byte*) BGCOL#2 ) @@ -988,7 +957,6 @@ main::@1: scope:[main] from main::@4 main::@2: scope:[main] from main::@1 main::@13 main::@2 (byte*) TEXT#10 ← phi( main::@1/(byte*) TEXT#11 main::@13/(byte*) TEXT#1 main::@2/(byte*) TEXT#10 ) (byte*) main::nxt#9 ← phi( main::@1/(byte*) main::nxt#10 main::@13/(byte*) main::nxt#0 main::@2/(byte*) main::nxt#9 ) - (byte[]) main::line#8 ← phi( main::@1/(byte[]) main::line#9 main::@13/(byte[]) main::line#0 main::@2/(byte[]) main::line#8 ) (byte*) SCROLL#7 ← phi( main::@1/(byte*) SCROLL#9 main::@13/(byte*) SCROLL#10 main::@2/(byte*) SCROLL#7 ) (byte) main::scroll#7 ← phi( main::@1/(byte) main::scroll#10 main::@13/(byte) main::scroll#0 main::@2/(byte) main::scroll#7 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#8 main::@13/(byte*) BGCOL#9 main::@2/(byte*) BGCOL#5 ) @@ -999,7 +967,6 @@ main::@2: scope:[main] from main::@1 main::@13 main::@2 main::@3: scope:[main] from main::@2 main::@3 (byte*) TEXT#9 ← phi( main::@2/(byte*) TEXT#10 main::@3/(byte*) TEXT#9 ) (byte*) main::nxt#8 ← phi( main::@2/(byte*) main::nxt#9 main::@3/(byte*) main::nxt#8 ) - (byte[]) main::line#7 ← phi( main::@2/(byte[]) main::line#8 main::@3/(byte[]) main::line#7 ) (byte*) SCROLL#4 ← phi( main::@2/(byte*) SCROLL#7 main::@3/(byte*) SCROLL#4 ) (byte) main::scroll#5 ← phi( main::@2/(byte) main::scroll#7 main::@3/(byte) main::scroll#5 ) (byte*) BGCOL#3 ← phi( main::@2/(byte*) BGCOL#5 main::@3/(byte*) BGCOL#3 ) @@ -1011,7 +978,6 @@ main::@8: scope:[main] from main::@3 (byte*) TEXT#8 ← phi( main::@3/(byte*) TEXT#9 ) (byte*) main::nxt#7 ← phi( main::@3/(byte*) main::nxt#8 ) (byte*) RASTER#9 ← phi( main::@3/(byte*) RASTER#2 ) - (byte[]) main::line#6 ← phi( main::@3/(byte[]) main::line#7 ) (byte*) SCROLL#3 ← phi( main::@3/(byte*) SCROLL#4 ) (byte) main::scroll#3 ← phi( main::@3/(byte) main::scroll#5 ) (byte*) BGCOL#1 ← phi( main::@3/(byte*) BGCOL#3 ) @@ -1024,7 +990,6 @@ main::@8: scope:[main] from main::@3 main::@4: scope:[main] from main::@6 main::@8 (byte*) TEXT#12 ← phi( main::@6/(byte*) TEXT#13 main::@8/(byte*) TEXT#8 ) (byte*) main::nxt#11 ← phi( main::@6/(byte*) main::nxt#1 main::@8/(byte*) main::nxt#7 ) - (byte[]) main::line#10 ← phi( main::@6/(byte[]) main::line#2 main::@8/(byte[]) main::line#6 ) (byte*) RASTER#6 ← phi( main::@6/(byte*) RASTER#8 main::@8/(byte*) RASTER#9 ) (byte*) BGCOL#2 ← phi( main::@6/(byte*) BGCOL#4 main::@8/(byte*) BGCOL#1 ) (byte*) SCROLL#1 ← phi( main::@6/(byte*) SCROLL#2 main::@8/(byte*) SCROLL#3 ) @@ -1039,7 +1004,6 @@ main::@9: scope:[main] from main::@8 (byte*) SCROLL#11 ← phi( main::@8/(byte*) SCROLL#3 ) (byte*) TEXT#7 ← phi( main::@8/(byte*) TEXT#8 ) (byte*) main::nxt#6 ← phi( main::@8/(byte*) main::nxt#7 ) - (byte[]) main::line#3 ← phi( main::@8/(byte[]) main::line#6 ) (byte) main::scroll#2 ← (byte/signed byte/word/signed word) 7 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@5 @@ -1050,10 +1014,9 @@ main::@5: scope:[main] from main::@5 main::@9 (byte) main::scroll#11 ← phi( main::@5/(byte) main::scroll#11 main::@9/(byte) main::scroll#2 ) (byte*) TEXT#6 ← phi( main::@5/(byte*) TEXT#6 main::@9/(byte*) TEXT#7 ) (byte*) main::nxt#5 ← phi( main::@5/(byte*) main::nxt#5 main::@9/(byte*) main::nxt#6 ) - (byte[]) main::line#1 ← phi( main::@5/(byte[]) main::line#1 main::@9/(byte[]) main::line#3 ) (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@9/(byte) main::i#0 ) (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) main::line#1 + (byte) main::i#2) ← *((byte[]) main::line#1 + (byte/word~) main::$6) + *((byte[]) main::line#0 + (byte) main::i#2) ← *((byte[]) main::line#0 + (byte/word~) main::$6) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$7 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 39 if((boolean~) main::$7) goto main::@5 @@ -1064,7 +1027,6 @@ main::@10: scope:[main] from main::@5 (byte*) SCROLL#5 ← phi( main::@5/(byte*) SCROLL#8 ) (byte) main::scroll#8 ← phi( main::@5/(byte) main::scroll#11 ) (byte*) TEXT#4 ← phi( main::@5/(byte*) TEXT#6 ) - (byte[]) main::line#4 ← phi( main::@5/(byte[]) main::line#1 ) (byte*) main::nxt#3 ← phi( main::@5/(byte*) main::nxt#5 ) (byte) main::c#0 ← *((byte*) main::nxt#3) (boolean~) main::$8 ← (byte) main::c#0 == (byte) '@' @@ -1078,9 +1040,8 @@ main::@6: scope:[main] from main::@10 main::@11 (byte*) SCROLL#2 ← phi( main::@10/(byte*) SCROLL#5 main::@11/(byte*) SCROLL#6 ) (byte) main::scroll#6 ← phi( main::@10/(byte) main::scroll#8 main::@11/(byte) main::scroll#9 ) (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 ) - (byte[]) main::line#2 ← phi( main::@10/(byte[]) main::line#4 main::@11/(byte[]) main::line#5 ) (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((byte[]) main::line#2 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + *((byte[]) main::line#0 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@11: scope:[main] from main::@10 @@ -1088,7 +1049,6 @@ main::@11: scope:[main] from main::@10 (byte*) BGCOL#7 ← phi( main::@10/(byte*) BGCOL#6 ) (byte*) SCROLL#6 ← phi( main::@10/(byte*) SCROLL#5 ) (byte) main::scroll#9 ← phi( main::@10/(byte) main::scroll#8 ) - (byte[]) main::line#5 ← phi( main::@10/(byte[]) main::line#4 ) (byte*) TEXT#2 ← phi( main::@10/(byte*) TEXT#4 ) (byte*) main::nxt#2 ← (byte*) TEXT#2 (byte) main::c#1 ← *((byte*) main::nxt#2) @@ -1159,7 +1119,6 @@ main::@13: scope:[main] from main main::@1: scope:[main] from main::@4 (byte*) TEXT#11 ← phi( main::@4/(byte*) TEXT#12 ) (byte*) main::nxt#10 ← phi( main::@4/(byte*) main::nxt#11 ) - (byte[]) main::line#9 ← phi( main::@4/(byte[]) main::line#10 ) (byte*) SCROLL#9 ← phi( main::@4/(byte*) SCROLL#1 ) (byte) main::scroll#10 ← phi( main::@4/(byte) main::scroll#4 ) (byte*) BGCOL#8 ← phi( main::@4/(byte*) BGCOL#2 ) @@ -1168,7 +1127,6 @@ main::@1: scope:[main] from main::@4 main::@2: scope:[main] from main::@1 main::@13 main::@2 (byte*) TEXT#10 ← phi( main::@1/(byte*) TEXT#11 main::@13/(byte*) TEXT#1 main::@2/(byte*) TEXT#10 ) (byte*) main::nxt#9 ← phi( main::@1/(byte*) main::nxt#10 main::@13/(byte*) main::nxt#0 main::@2/(byte*) main::nxt#9 ) - (byte[]) main::line#8 ← phi( main::@1/(byte[]) main::line#9 main::@13/(byte[]) main::line#0 main::@2/(byte[]) main::line#8 ) (byte*) SCROLL#7 ← phi( main::@1/(byte*) SCROLL#9 main::@13/(byte*) SCROLL#10 main::@2/(byte*) SCROLL#7 ) (byte) main::scroll#7 ← phi( main::@1/(byte) main::scroll#10 main::@13/(byte) main::scroll#0 main::@2/(byte) main::scroll#7 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#8 main::@13/(byte*) BGCOL#9 main::@2/(byte*) BGCOL#5 ) @@ -1179,7 +1137,6 @@ main::@2: scope:[main] from main::@1 main::@13 main::@2 main::@3: scope:[main] from main::@2 main::@3 (byte*) TEXT#9 ← phi( main::@2/(byte*) TEXT#10 main::@3/(byte*) TEXT#9 ) (byte*) main::nxt#8 ← phi( main::@2/(byte*) main::nxt#9 main::@3/(byte*) main::nxt#8 ) - (byte[]) main::line#7 ← phi( main::@2/(byte[]) main::line#8 main::@3/(byte[]) main::line#7 ) (byte*) SCROLL#4 ← phi( main::@2/(byte*) SCROLL#7 main::@3/(byte*) SCROLL#4 ) (byte) main::scroll#5 ← phi( main::@2/(byte) main::scroll#7 main::@3/(byte) main::scroll#5 ) (byte*) BGCOL#3 ← phi( main::@2/(byte*) BGCOL#5 main::@3/(byte*) BGCOL#3 ) @@ -1191,7 +1148,6 @@ main::@8: scope:[main] from main::@3 (byte*) TEXT#8 ← phi( main::@3/(byte*) TEXT#9 ) (byte*) main::nxt#7 ← phi( main::@3/(byte*) main::nxt#8 ) (byte*) RASTER#9 ← phi( main::@3/(byte*) RASTER#2 ) - (byte[]) main::line#6 ← phi( main::@3/(byte[]) main::line#7 ) (byte*) SCROLL#3 ← phi( main::@3/(byte*) SCROLL#4 ) (byte) main::scroll#3 ← phi( main::@3/(byte) main::scroll#5 ) (byte*) BGCOL#1 ← phi( main::@3/(byte*) BGCOL#3 ) @@ -1203,7 +1159,6 @@ main::@8: scope:[main] from main::@3 main::@4: scope:[main] from main::@6 main::@8 (byte*) TEXT#12 ← phi( main::@6/(byte*) TEXT#13 main::@8/(byte*) TEXT#8 ) (byte*) main::nxt#11 ← phi( main::@6/(byte*) main::nxt#1 main::@8/(byte*) main::nxt#7 ) - (byte[]) main::line#10 ← phi( main::@6/(byte[]) main::line#2 main::@8/(byte[]) main::line#6 ) (byte*) RASTER#6 ← phi( main::@6/(byte*) RASTER#8 main::@8/(byte*) RASTER#9 ) (byte*) BGCOL#2 ← phi( main::@6/(byte*) BGCOL#4 main::@8/(byte*) BGCOL#1 ) (byte*) SCROLL#1 ← phi( main::@6/(byte*) SCROLL#2 main::@8/(byte*) SCROLL#3 ) @@ -1218,7 +1173,6 @@ main::@9: scope:[main] from main::@8 (byte*) SCROLL#11 ← phi( main::@8/(byte*) SCROLL#3 ) (byte*) TEXT#7 ← phi( main::@8/(byte*) TEXT#8 ) (byte*) main::nxt#6 ← phi( main::@8/(byte*) main::nxt#7 ) - (byte[]) main::line#3 ← phi( main::@8/(byte[]) main::line#6 ) (byte) main::scroll#2 ← (byte/signed byte/word/signed word) 7 (byte) main::i#0 ← (byte/signed byte/word/signed word) 0 to:main::@5 @@ -1229,10 +1183,9 @@ main::@5: scope:[main] from main::@5 main::@9 (byte) main::scroll#11 ← phi( main::@5/(byte) main::scroll#11 main::@9/(byte) main::scroll#2 ) (byte*) TEXT#6 ← phi( main::@5/(byte*) TEXT#6 main::@9/(byte*) TEXT#7 ) (byte*) main::nxt#5 ← phi( main::@5/(byte*) main::nxt#5 main::@9/(byte*) main::nxt#6 ) - (byte[]) main::line#1 ← phi( main::@5/(byte[]) main::line#1 main::@9/(byte[]) main::line#3 ) (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@9/(byte) main::i#0 ) (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) main::line#1 + (byte) main::i#2) ← *((byte[]) main::line#1 + (byte/word~) main::$6) + *((byte[]) main::line#0 + (byte) main::i#2) ← *((byte[]) main::line#0 + (byte/word~) main::$6) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$7 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 39 if((boolean~) main::$7) goto main::@5 @@ -1243,7 +1196,6 @@ main::@10: scope:[main] from main::@5 (byte*) SCROLL#5 ← phi( main::@5/(byte*) SCROLL#8 ) (byte) main::scroll#8 ← phi( main::@5/(byte) main::scroll#11 ) (byte*) TEXT#4 ← phi( main::@5/(byte*) TEXT#6 ) - (byte[]) main::line#4 ← phi( main::@5/(byte[]) main::line#1 ) (byte*) main::nxt#3 ← phi( main::@5/(byte*) main::nxt#5 ) (byte) main::c#0 ← *((byte*) main::nxt#3) (boolean~) main::$9 ← (byte) main::c#0 != (byte) '@' @@ -1256,9 +1208,8 @@ main::@6: scope:[main] from main::@10 main::@11 (byte*) SCROLL#2 ← phi( main::@10/(byte*) SCROLL#5 main::@11/(byte*) SCROLL#6 ) (byte) main::scroll#6 ← phi( main::@10/(byte) main::scroll#8 main::@11/(byte) main::scroll#9 ) (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 ) - (byte[]) main::line#2 ← phi( main::@10/(byte[]) main::line#4 main::@11/(byte[]) main::line#5 ) (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((byte[]) main::line#2 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + *((byte[]) main::line#0 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@11: scope:[main] from main::@10 @@ -1266,7 +1217,6 @@ main::@11: scope:[main] from main::@10 (byte*) BGCOL#7 ← phi( main::@10/(byte*) BGCOL#6 ) (byte*) SCROLL#6 ← phi( main::@10/(byte*) SCROLL#5 ) (byte) main::scroll#9 ← phi( main::@10/(byte) main::scroll#8 ) - (byte[]) main::line#5 ← phi( main::@10/(byte[]) main::line#4 ) (byte*) TEXT#2 ← phi( main::@10/(byte*) TEXT#4 ) (byte*) main::nxt#2 ← (byte*) TEXT#2 (byte) main::c#1 ← *((byte*) main::nxt#2) @@ -1309,7 +1259,6 @@ Not aliassing across scopes: BGCOL#11 BGCOL#13 Not aliassing across scopes: SCROLL#12 SCROLL#13 Not aliassing across scopes: fillscreen::screen#0 SCREEN#1 Not aliassing across scopes: main::nxt#0 TEXT#1 -Not aliassing identity: main::line#1 main::line#1 Not aliassing identity: main::nxt#5 main::nxt#5 Not aliassing identity: TEXT#6 TEXT#6 Not aliassing identity: main::scroll#11 main::scroll#11 @@ -1329,18 +1278,15 @@ Alias (byte*) RASTER#3 = (byte*) RASTER#6 Alias (byte*) BGCOL#2 = (byte*) BGCOL#8 Alias (byte) main::scroll#10 = (byte) main::scroll#4 Alias (byte*) SCROLL#1 = (byte*) SCROLL#9 -Alias (byte[]) main::line#10 = (byte[]) main::line#9 Alias (byte*) main::nxt#10 = (byte*) main::nxt#11 Alias (byte*) TEXT#11 = (byte*) TEXT#12 Alias (byte*) BGCOL#1 = (byte*) BGCOL#3 (byte*) BGCOL#12 Alias (byte) main::scroll#3 = (byte) main::scroll#5 Alias (byte*) SCROLL#11 = (byte*) SCROLL#3 (byte*) SCROLL#4 -Alias (byte[]) main::line#3 = (byte[]) main::line#6 (byte[]) main::line#7 Alias (byte*) RASTER#13 = (byte*) RASTER#9 (byte*) RASTER#2 Alias (byte*) main::nxt#6 = (byte*) main::nxt#7 (byte*) main::nxt#8 Alias (byte*) TEXT#7 = (byte*) TEXT#8 (byte*) TEXT#9 Alias (byte*) main::nxt#3 = (byte*) main::nxt#5 -Alias (byte[]) main::line#1 = (byte[]) main::line#4 (byte[]) main::line#5 Alias (byte*) TEXT#2 = (byte*) TEXT#4 (byte*) TEXT#6 Alias (byte) main::scroll#11 = (byte) main::scroll#8 (byte) main::scroll#9 Alias (byte*) SCROLL#5 = (byte*) SCROLL#8 (byte*) SCROLL#6 @@ -1381,7 +1327,6 @@ main::@1: scope:[main] from main::@4 main::@2: scope:[main] from main::@1 main::@13 main::@2 (byte*) TEXT#10 ← phi( main::@1/(byte*) TEXT#11 main::@13/(byte*) TEXT#1 main::@2/(byte*) TEXT#10 ) (byte*) main::nxt#9 ← phi( main::@1/(byte*) main::nxt#10 main::@13/(byte*) main::nxt#0 main::@2/(byte*) main::nxt#9 ) - (byte[]) main::line#8 ← phi( main::@1/(byte[]) main::line#10 main::@13/(byte[]) main::line#0 main::@2/(byte[]) main::line#8 ) (byte*) SCROLL#7 ← phi( main::@1/(byte*) SCROLL#1 main::@13/(byte*) SCROLL#10 main::@2/(byte*) SCROLL#7 ) (byte) main::scroll#7 ← phi( main::@1/(byte) main::scroll#10 main::@13/(byte) main::scroll#0 main::@2/(byte) main::scroll#7 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#2 main::@13/(byte*) BGCOL#11 main::@2/(byte*) BGCOL#5 ) @@ -1392,7 +1337,6 @@ main::@2: scope:[main] from main::@1 main::@13 main::@2 main::@3: scope:[main] from main::@2 main::@3 (byte*) TEXT#7 ← phi( main::@2/(byte*) TEXT#10 main::@3/(byte*) TEXT#7 ) (byte*) main::nxt#6 ← phi( main::@2/(byte*) main::nxt#9 main::@3/(byte*) main::nxt#6 ) - (byte[]) main::line#3 ← phi( main::@2/(byte[]) main::line#8 main::@3/(byte[]) main::line#3 ) (byte*) SCROLL#11 ← phi( main::@2/(byte*) SCROLL#7 main::@3/(byte*) SCROLL#11 ) (byte) main::scroll#3 ← phi( main::@2/(byte) main::scroll#7 main::@3/(byte) main::scroll#3 ) (byte*) BGCOL#1 ← phi( main::@2/(byte*) BGCOL#5 main::@3/(byte*) BGCOL#1 ) @@ -1409,7 +1353,6 @@ main::@8: scope:[main] from main::@3 main::@4: scope:[main] from main::@6 main::@8 (byte*) TEXT#11 ← phi( main::@6/(byte*) TEXT#13 main::@8/(byte*) TEXT#7 ) (byte*) main::nxt#10 ← phi( main::@6/(byte*) main::nxt#1 main::@8/(byte*) main::nxt#6 ) - (byte[]) main::line#10 ← phi( main::@6/(byte[]) main::line#2 main::@8/(byte[]) main::line#3 ) (byte*) RASTER#3 ← phi( main::@6/(byte*) RASTER#8 main::@8/(byte*) RASTER#13 ) (byte*) BGCOL#2 ← phi( main::@6/(byte*) BGCOL#4 main::@8/(byte*) BGCOL#1 ) (byte*) SCROLL#1 ← phi( main::@6/(byte*) SCROLL#2 main::@8/(byte*) SCROLL#11 ) @@ -1429,10 +1372,9 @@ main::@5: scope:[main] from main::@5 main::@9 (byte) main::scroll#11 ← phi( main::@5/(byte) main::scroll#11 main::@9/(byte) main::scroll#2 ) (byte*) TEXT#2 ← phi( main::@5/(byte*) TEXT#2 main::@9/(byte*) TEXT#7 ) (byte*) main::nxt#3 ← phi( main::@5/(byte*) main::nxt#3 main::@9/(byte*) main::nxt#6 ) - (byte[]) main::line#1 ← phi( main::@5/(byte[]) main::line#1 main::@9/(byte[]) main::line#3 ) (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@9/(byte) main::i#0 ) (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) main::line#1 + (byte) main::i#2) ← *((byte[]) main::line#1 + (byte/word~) main::$6) + *((byte[]) main::line#0 + (byte) main::i#2) ← *((byte[]) main::line#0 + (byte/word~) main::$6) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$7 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 39 if((boolean~) main::$7) goto main::@5 @@ -1449,9 +1391,8 @@ main::@6: scope:[main] from main::@10 main::@11 (byte*) SCROLL#2 ← phi( main::@10/(byte*) SCROLL#5 main::@11/(byte*) SCROLL#5 ) (byte) main::scroll#6 ← phi( main::@10/(byte) main::scroll#11 main::@11/(byte) main::scroll#11 ) (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 ) - (byte[]) main::line#2 ← phi( main::@10/(byte[]) main::line#1 main::@11/(byte[]) main::line#1 ) (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((byte[]) main::line#2 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + *((byte[]) main::line#0 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@11: scope:[main] from main::@10 @@ -1490,7 +1431,6 @@ Not aliassing across scopes: BGCOL#11 BGCOL#0 Not aliassing across scopes: SCROLL#10 SCROLL#0 Not aliassing across scopes: fillscreen::screen#0 SCREEN#1 Not aliassing across scopes: main::nxt#0 TEXT#1 -Not aliassing identity: main::line#1 main::line#1 Not aliassing identity: main::nxt#3 main::nxt#3 Not aliassing identity: TEXT#2 TEXT#2 Not aliassing identity: main::scroll#11 main::scroll#11 @@ -1500,7 +1440,6 @@ Not aliassing identity: RASTER#10 RASTER#10 Not aliassing across scopes: main::nxt#2 TEXT#2 Not aliassing across scopes: fillscreen::cursor#0 fillscreen::screen#0 Not aliassing across scopes: fillscreen::fill#2 fillscreen::fill#0 -Alias (byte[]) main::line#1 = (byte[]) main::line#2 Alias (byte) main::scroll#11 = (byte) main::scroll#6 Alias (byte*) SCROLL#2 = (byte*) SCROLL#5 Alias (byte*) BGCOL#10 = (byte*) BGCOL#4 @@ -1535,7 +1474,6 @@ main::@1: scope:[main] from main::@4 main::@2: scope:[main] from main::@1 main::@13 main::@2 (byte*) TEXT#10 ← phi( main::@1/(byte*) TEXT#11 main::@13/(byte*) TEXT#1 main::@2/(byte*) TEXT#10 ) (byte*) main::nxt#9 ← phi( main::@1/(byte*) main::nxt#10 main::@13/(byte*) main::nxt#0 main::@2/(byte*) main::nxt#9 ) - (byte[]) main::line#8 ← phi( main::@1/(byte[]) main::line#10 main::@13/(byte[]) main::line#0 main::@2/(byte[]) main::line#8 ) (byte*) SCROLL#7 ← phi( main::@1/(byte*) SCROLL#1 main::@13/(byte*) SCROLL#10 main::@2/(byte*) SCROLL#7 ) (byte) main::scroll#7 ← phi( main::@1/(byte) main::scroll#10 main::@13/(byte) main::scroll#0 main::@2/(byte) main::scroll#7 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#2 main::@13/(byte*) BGCOL#11 main::@2/(byte*) BGCOL#5 ) @@ -1546,7 +1484,6 @@ main::@2: scope:[main] from main::@1 main::@13 main::@2 main::@3: scope:[main] from main::@2 main::@3 (byte*) TEXT#7 ← phi( main::@2/(byte*) TEXT#10 main::@3/(byte*) TEXT#7 ) (byte*) main::nxt#6 ← phi( main::@2/(byte*) main::nxt#9 main::@3/(byte*) main::nxt#6 ) - (byte[]) main::line#3 ← phi( main::@2/(byte[]) main::line#8 main::@3/(byte[]) main::line#3 ) (byte*) SCROLL#11 ← phi( main::@2/(byte*) SCROLL#7 main::@3/(byte*) SCROLL#11 ) (byte) main::scroll#3 ← phi( main::@2/(byte) main::scroll#7 main::@3/(byte) main::scroll#3 ) (byte*) BGCOL#1 ← phi( main::@2/(byte*) BGCOL#5 main::@3/(byte*) BGCOL#1 ) @@ -1563,7 +1500,6 @@ main::@8: scope:[main] from main::@3 main::@4: scope:[main] from main::@6 main::@8 (byte*) TEXT#11 ← phi( main::@6/(byte*) TEXT#13 main::@8/(byte*) TEXT#7 ) (byte*) main::nxt#10 ← phi( main::@6/(byte*) main::nxt#1 main::@8/(byte*) main::nxt#6 ) - (byte[]) main::line#10 ← phi( main::@6/(byte[]) main::line#1 main::@8/(byte[]) main::line#3 ) (byte*) RASTER#3 ← phi( main::@6/(byte*) RASTER#10 main::@8/(byte*) RASTER#13 ) (byte*) BGCOL#2 ← phi( main::@6/(byte*) BGCOL#10 main::@8/(byte*) BGCOL#1 ) (byte*) SCROLL#1 ← phi( main::@6/(byte*) SCROLL#2 main::@8/(byte*) SCROLL#11 ) @@ -1583,10 +1519,9 @@ main::@5: scope:[main] from main::@5 main::@9 (byte) main::scroll#11 ← phi( main::@5/(byte) main::scroll#11 main::@9/(byte) main::scroll#2 ) (byte*) TEXT#13 ← phi( main::@5/(byte*) TEXT#13 main::@9/(byte*) TEXT#7 ) (byte*) main::nxt#3 ← phi( main::@5/(byte*) main::nxt#3 main::@9/(byte*) main::nxt#6 ) - (byte[]) main::line#1 ← phi( main::@5/(byte[]) main::line#1 main::@9/(byte[]) main::line#3 ) (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@9/(byte) main::i#0 ) (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) main::line#1 + (byte) main::i#2) ← *((byte[]) main::line#1 + (byte/word~) main::$6) + *((byte[]) main::line#0 + (byte) main::i#2) ← *((byte[]) main::line#0 + (byte/word~) main::$6) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$7 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 39 if((boolean~) main::$7) goto main::@5 @@ -1599,7 +1534,7 @@ main::@10: scope:[main] from main::@5 main::@6: scope:[main] from main::@10 main::@11 (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 ) (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((byte[]) main::line#1 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + *((byte[]) main::line#0 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@11: scope:[main] from main::@10 @@ -1638,7 +1573,6 @@ Not aliassing across scopes: BGCOL#11 BGCOL#0 Not aliassing across scopes: SCROLL#10 SCROLL#0 Not aliassing across scopes: fillscreen::screen#0 SCREEN#1 Not aliassing across scopes: main::nxt#0 TEXT#1 -Not aliassing identity: main::line#1 main::line#1 Not aliassing identity: main::nxt#3 main::nxt#3 Not aliassing identity: TEXT#13 TEXT#13 Not aliassing identity: main::scroll#11 main::scroll#11 @@ -1652,17 +1586,14 @@ Self Phi Eliminated (byte*) RASTER#1 Self Phi Eliminated (byte*) BGCOL#5 Self Phi Eliminated (byte) main::scroll#7 Self Phi Eliminated (byte*) SCROLL#7 -Self Phi Eliminated (byte[]) main::line#8 Self Phi Eliminated (byte*) main::nxt#9 Self Phi Eliminated (byte*) TEXT#10 Self Phi Eliminated (byte*) RASTER#13 Self Phi Eliminated (byte*) BGCOL#1 Self Phi Eliminated (byte) main::scroll#3 Self Phi Eliminated (byte*) SCROLL#11 -Self Phi Eliminated (byte[]) main::line#3 Self Phi Eliminated (byte*) main::nxt#6 Self Phi Eliminated (byte*) TEXT#7 -Self Phi Eliminated (byte[]) main::line#1 Self Phi Eliminated (byte*) main::nxt#3 Self Phi Eliminated (byte*) TEXT#13 Self Phi Eliminated (byte) main::scroll#11 @@ -1700,7 +1631,6 @@ main::@1: scope:[main] from main::@4 main::@2: scope:[main] from main::@1 main::@13 main::@2 (byte*) TEXT#10 ← phi( main::@1/(byte*) TEXT#11 main::@13/(byte*) TEXT#1 ) (byte*) main::nxt#9 ← phi( main::@1/(byte*) main::nxt#10 main::@13/(byte*) main::nxt#0 ) - (byte[]) main::line#8 ← phi( main::@1/(byte[]) main::line#10 main::@13/(byte[]) main::line#0 ) (byte*) SCROLL#7 ← phi( main::@1/(byte*) SCROLL#1 main::@13/(byte*) SCROLL#10 ) (byte) main::scroll#7 ← phi( main::@1/(byte) main::scroll#10 main::@13/(byte) main::scroll#0 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#2 main::@13/(byte*) BGCOL#11 ) @@ -1711,7 +1641,6 @@ main::@2: scope:[main] from main::@1 main::@13 main::@2 main::@3: scope:[main] from main::@2 main::@3 (byte*) TEXT#7 ← phi( main::@2/(byte*) TEXT#10 ) (byte*) main::nxt#6 ← phi( main::@2/(byte*) main::nxt#9 ) - (byte[]) main::line#3 ← phi( main::@2/(byte[]) main::line#8 ) (byte*) SCROLL#11 ← phi( main::@2/(byte*) SCROLL#7 ) (byte) main::scroll#3 ← phi( main::@2/(byte) main::scroll#7 ) (byte*) BGCOL#1 ← phi( main::@2/(byte*) BGCOL#5 ) @@ -1728,7 +1657,6 @@ main::@8: scope:[main] from main::@3 main::@4: scope:[main] from main::@6 main::@8 (byte*) TEXT#11 ← phi( main::@6/(byte*) TEXT#13 main::@8/(byte*) TEXT#7 ) (byte*) main::nxt#10 ← phi( main::@6/(byte*) main::nxt#1 main::@8/(byte*) main::nxt#6 ) - (byte[]) main::line#10 ← phi( main::@6/(byte[]) main::line#1 main::@8/(byte[]) main::line#3 ) (byte*) RASTER#3 ← phi( main::@6/(byte*) RASTER#10 main::@8/(byte*) RASTER#13 ) (byte*) BGCOL#2 ← phi( main::@6/(byte*) BGCOL#10 main::@8/(byte*) BGCOL#1 ) (byte*) SCROLL#1 ← phi( main::@6/(byte*) SCROLL#2 main::@8/(byte*) SCROLL#11 ) @@ -1748,10 +1676,9 @@ main::@5: scope:[main] from main::@5 main::@9 (byte) main::scroll#11 ← phi( main::@9/(byte) main::scroll#2 ) (byte*) TEXT#13 ← phi( main::@9/(byte*) TEXT#7 ) (byte*) main::nxt#3 ← phi( main::@9/(byte*) main::nxt#6 ) - (byte[]) main::line#1 ← phi( main::@9/(byte[]) main::line#3 ) (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@9/(byte) main::i#0 ) (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) main::line#1 + (byte) main::i#2) ← *((byte[]) main::line#1 + (byte/word~) main::$6) + *((byte[]) main::line#0 + (byte) main::i#2) ← *((byte[]) main::line#0 + (byte/word~) main::$6) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$7 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 39 if((boolean~) main::$7) goto main::@5 @@ -1764,7 +1691,7 @@ main::@10: scope:[main] from main::@5 main::@6: scope:[main] from main::@10 main::@11 (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#3 main::@11/(byte*) main::nxt#2 ) (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((byte[]) main::line#1 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + *((byte[]) main::line#0 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@11: scope:[main] from main::@10 @@ -1805,10 +1732,8 @@ Redundant Phi (byte*) RASTER#13 (byte*) RASTER#1 Redundant Phi (byte*) BGCOL#1 (byte*) BGCOL#5 Redundant Phi (byte) main::scroll#3 (byte) main::scroll#7 Redundant Phi (byte*) SCROLL#11 (byte*) SCROLL#7 -Redundant Phi (byte[]) main::line#3 (byte[]) main::line#8 Redundant Phi (byte*) main::nxt#6 (byte*) main::nxt#9 Redundant Phi (byte*) TEXT#7 (byte*) TEXT#10 -Redundant Phi (byte[]) main::line#1 (byte[]) main::line#3 Redundant Phi (byte*) main::nxt#3 (byte*) main::nxt#6 Redundant Phi (byte*) TEXT#13 (byte*) TEXT#7 Redundant Phi (byte) main::scroll#11 (byte) main::scroll#2 @@ -1843,7 +1768,6 @@ main::@1: scope:[main] from main::@4 main::@2: scope:[main] from main::@1 main::@13 main::@2 (byte*) TEXT#10 ← phi( main::@1/(byte*) TEXT#11 main::@13/(byte*) TEXT#0 ) (byte*) main::nxt#9 ← phi( main::@1/(byte*) main::nxt#10 main::@13/(byte*) main::nxt#0 ) - (byte[]) main::line#8 ← phi( main::@1/(byte[]) main::line#10 main::@13/(byte[]) main::line#0 ) (byte*) SCROLL#7 ← phi( main::@1/(byte*) SCROLL#1 main::@13/(byte*) SCROLL#0 ) (byte) main::scroll#7 ← phi( main::@1/(byte) main::scroll#10 main::@13/(byte) main::scroll#0 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#2 main::@13/(byte*) BGCOL#0 ) @@ -1864,7 +1788,6 @@ main::@8: scope:[main] from main::@3 main::@4: scope:[main] from main::@6 main::@8 (byte*) TEXT#11 ← phi( main::@6/(byte*) TEXT#10 main::@8/(byte*) TEXT#10 ) (byte*) main::nxt#10 ← phi( main::@6/(byte*) main::nxt#1 main::@8/(byte*) main::nxt#9 ) - (byte[]) main::line#10 ← phi( main::@6/(byte[]) main::line#8 main::@8/(byte[]) main::line#8 ) (byte*) RASTER#3 ← phi( main::@6/(byte*) RASTER#1 main::@8/(byte*) RASTER#1 ) (byte*) BGCOL#2 ← phi( main::@6/(byte*) BGCOL#5 main::@8/(byte*) BGCOL#5 ) (byte*) SCROLL#1 ← phi( main::@6/(byte*) SCROLL#7 main::@8/(byte*) SCROLL#7 ) @@ -1880,7 +1803,7 @@ main::@9: scope:[main] from main::@8 main::@5: scope:[main] from main::@5 main::@9 (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@9/(byte) main::i#0 ) (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) main::line#8 + (byte) main::i#2) ← *((byte[]) main::line#8 + (byte/word~) main::$6) + *((byte[]) main::line#0 + (byte) main::i#2) ← *((byte[]) main::line#0 + (byte/word~) main::$6) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$7 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 39 if((boolean~) main::$7) goto main::@5 @@ -1893,7 +1816,7 @@ main::@10: scope:[main] from main::@5 main::@6: scope:[main] from main::@10 main::@11 (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#9 main::@11/(byte*) main::nxt#2 ) (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((byte[]) main::line#8 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + *((byte[]) main::line#0 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@11: scope:[main] from main::@10 @@ -1924,7 +1847,6 @@ fillscreen::@return: scope:[fillscreen] from fillscreen::@1 Redundant Phi (byte*) SCROLL#1 (byte*) SCROLL#7 Redundant Phi (byte*) BGCOL#2 (byte*) BGCOL#5 Redundant Phi (byte*) RASTER#3 (byte*) RASTER#1 -Redundant Phi (byte[]) main::line#10 (byte[]) main::line#8 Redundant Phi (byte*) TEXT#11 (byte*) TEXT#10 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH @@ -1950,7 +1872,6 @@ main::@1: scope:[main] from main::@4 main::@2: scope:[main] from main::@1 main::@13 main::@2 (byte*) TEXT#10 ← phi( main::@1/(byte*) TEXT#10 main::@13/(byte*) TEXT#0 ) (byte*) main::nxt#9 ← phi( main::@1/(byte*) main::nxt#10 main::@13/(byte*) main::nxt#0 ) - (byte[]) main::line#8 ← phi( main::@1/(byte[]) main::line#8 main::@13/(byte[]) main::line#0 ) (byte*) SCROLL#7 ← phi( main::@1/(byte*) SCROLL#7 main::@13/(byte*) SCROLL#0 ) (byte) main::scroll#7 ← phi( main::@1/(byte) main::scroll#10 main::@13/(byte) main::scroll#0 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#5 main::@13/(byte*) BGCOL#0 ) @@ -1982,7 +1903,7 @@ main::@9: scope:[main] from main::@8 main::@5: scope:[main] from main::@5 main::@9 (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@9/(byte) main::i#0 ) (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) main::line#8 + (byte) main::i#2) ← *((byte[]) main::line#8 + (byte/word~) main::$6) + *((byte[]) main::line#0 + (byte) main::i#2) ← *((byte[]) main::line#0 + (byte/word~) main::$6) (byte) main::i#1 ← ++ (byte) main::i#2 (boolean~) main::$7 ← (byte) main::i#1 != (byte/signed byte/word/signed word) 39 if((boolean~) main::$7) goto main::@5 @@ -1995,7 +1916,7 @@ main::@10: scope:[main] from main::@5 main::@6: scope:[main] from main::@10 main::@11 (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#9 main::@11/(byte*) main::nxt#2 ) (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((byte[]) main::line#8 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + *((byte[]) main::line#0 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@11: scope:[main] from main::@10 @@ -2053,7 +1974,6 @@ main::@1: scope:[main] from main::@4 main::@2: scope:[main] from main::@1 main::@13 main::@2 (byte*) TEXT#10 ← phi( main::@1/(byte*) TEXT#10 main::@13/(byte*) TEXT#0 ) (byte*) main::nxt#9 ← phi( main::@1/(byte*) main::nxt#10 main::@13/(byte*) main::nxt#0 ) - (byte[]) main::line#8 ← phi( main::@1/(byte[]) main::line#8 main::@13/(byte[]) main::line#0 ) (byte*) SCROLL#7 ← phi( main::@1/(byte*) SCROLL#7 main::@13/(byte*) SCROLL#0 ) (byte) main::scroll#7 ← phi( main::@1/(byte) main::scroll#10 main::@13/(byte) main::scroll#0 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#5 main::@13/(byte*) BGCOL#0 ) @@ -2082,7 +2002,7 @@ main::@9: scope:[main] from main::@8 main::@5: scope:[main] from main::@5 main::@9 (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@9/(byte) main::i#0 ) (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) main::line#8 + (byte) main::i#2) ← *((byte[]) main::line#8 + (byte/word~) main::$6) + *((byte[]) main::line#0 + (byte) main::i#2) ← *((byte[]) main::line#0 + (byte/word~) main::$6) (byte) main::i#1 ← ++ (byte) main::i#2 if((byte) main::i#1!=(byte/signed byte/word/signed word) 39) goto main::@5 to:main::@10 @@ -2093,7 +2013,7 @@ main::@10: scope:[main] from main::@5 main::@6: scope:[main] from main::@10 main::@11 (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#9 main::@11/(byte*) main::nxt#2 ) (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((byte[]) main::line#8 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + *((byte[]) main::line#0 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@11: scope:[main] from main::@10 @@ -2146,7 +2066,6 @@ main::@1: scope:[main] from main::@4 main::@2: scope:[main] from main::@1 main::@13 main::@2 (byte*) TEXT#10 ← phi( main::@1/(byte*) TEXT#10 main::@13/(const string) TEXT#0 ) (byte*) main::nxt#9 ← phi( main::@1/(byte*) main::nxt#10 main::@13/(byte*) main::nxt#0 ) - (byte[]) main::line#8 ← phi( main::@1/(byte[]) main::line#8 main::@13/(byte[]) main::line#0 ) (byte*) SCROLL#7 ← phi( main::@1/(byte*) SCROLL#7 main::@13/(const byte*) SCROLL#0 ) (byte) main::scroll#7 ← phi( main::@1/(byte) main::scroll#10 main::@13/(const byte) main::scroll#0 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#5 main::@13/(const byte*) BGCOL#0 ) @@ -2173,7 +2092,7 @@ main::@9: scope:[main] from main::@8 main::@5: scope:[main] from main::@5 main::@9 (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@9/(const byte) main::i#0 ) (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) main::line#8 + (byte) main::i#2) ← *((byte[]) main::line#8 + (byte/word~) main::$6) + *((byte[]) main::line#0 + (byte) main::i#2) ← *((byte[]) main::line#0 + (byte/word~) main::$6) (byte) main::i#1 ← ++ (byte) main::i#2 if((byte) main::i#1!=(byte/signed byte/word/signed word) 39) goto main::@5 to:main::@10 @@ -2184,7 +2103,7 @@ main::@10: scope:[main] from main::@5 main::@6: scope:[main] from main::@10 main::@11 (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#9 main::@11/(byte*) main::nxt#2 ) (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((byte[]) main::line#8 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + *((byte[]) main::line#0 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@11: scope:[main] from main::@10 @@ -2228,7 +2147,6 @@ main::@1: scope:[main] from main::@4 main::@2: scope:[main] from main::@1 main::@13 main::@2 (byte*) TEXT#10 ← phi( main::@1/(byte*) TEXT#10 main::@13/(const string) TEXT#0 ) (byte*) main::nxt#9 ← phi( main::@1/(byte*) main::nxt#10 main::@13/(const string) main::nxt#0 ) - (byte[]) main::line#8 ← phi( main::@1/(byte[]) main::line#8 main::@13/(const byte*) main::line#0 ) (byte*) SCROLL#7 ← phi( main::@1/(byte*) SCROLL#7 main::@13/(const byte*) SCROLL#0 ) (byte) main::scroll#7 ← phi( main::@1/(byte) main::scroll#10 main::@13/(const byte) main::scroll#0 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#5 main::@13/(const byte*) BGCOL#0 ) @@ -2255,7 +2173,7 @@ main::@9: scope:[main] from main::@8 main::@5: scope:[main] from main::@5 main::@9 (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@9/(const byte) main::i#0 ) (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) main::line#8 + (byte) main::i#2) ← *((byte[]) main::line#8 + (byte/word~) main::$6) + *((const byte*) main::line#0 + (byte) main::i#2) ← *((const byte*) main::line#0 + (byte/word~) main::$6) (byte) main::i#1 ← ++ (byte) main::i#2 if((byte) main::i#1!=(byte/signed byte/word/signed word) 39) goto main::@5 to:main::@10 @@ -2266,7 +2184,7 @@ main::@10: scope:[main] from main::@5 main::@6: scope:[main] from main::@10 main::@11 (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#9 main::@11/(byte*) main::nxt#2 ) (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((byte[]) main::line#8 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + *((const byte*) main::line#0 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@11: scope:[main] from main::@10 @@ -2308,7 +2226,6 @@ main::@1: scope:[main] from main::@4 main::@2: scope:[main] from main::@1 main::@13 main::@2 (byte*) TEXT#10 ← phi( main::@1/(byte*) TEXT#10 main::@13/(const string) TEXT#0 ) (byte*) main::nxt#9 ← phi( main::@1/(byte*) main::nxt#10 main::@13/(const string) main::nxt#0 ) - (byte[]) main::line#8 ← phi( main::@1/(byte[]) main::line#8 main::@13/(const byte*) main::line#0 ) (byte*) SCROLL#7 ← phi( main::@1/(byte*) SCROLL#7 main::@13/(const byte*) SCROLL#0 ) (byte) main::scroll#7 ← phi( main::@1/(byte) main::scroll#10 main::@13/(const byte) main::scroll#0 ) (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#5 main::@13/(const byte*) BGCOL#0 ) @@ -2335,7 +2252,7 @@ main::@9: scope:[main] from main::@8 main::@5: scope:[main] from main::@5 main::@9 (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@9/(const byte) main::i#0 ) (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) main::line#8 + (byte) main::i#2) ← *((byte[]) main::line#8 + (byte/word~) main::$6) + *((const byte*) main::line#0 + (byte) main::i#2) ← *((const byte*) main::line#0 + (byte/word~) main::$6) (byte) main::i#1 ← ++ (byte) main::i#2 if((byte) main::i#1!=(byte/signed byte/word/signed word) 39) goto main::@5 to:main::@10 @@ -2346,7 +2263,88 @@ main::@10: scope:[main] from main::@5 main::@6: scope:[main] from main::@10 main::@11 (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#9 main::@11/(byte*) main::nxt#2 ) (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((byte[]) main::line#8 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + *((const byte*) main::line#0 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 + to:main::@4 +main::@11: scope:[main] from main::@10 + (byte*) main::nxt#2 ← (byte*) TEXT#10 + (byte) main::c#1 ← *((byte*) main::nxt#2) + to:main::@6 +main::@return: scope:[main] from main::@4 + return + to:@return +fillscreen: scope:[fillscreen] from main + to:fillscreen::@1 +fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@1 + (byte*) fillscreen::cursor#2 ← phi( fillscreen/(const byte*) fillscreen::screen#0 fillscreen::@1/(byte*) fillscreen::cursor#1 ) + *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 + (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 + if((byte*) fillscreen::cursor#1<(const byte*) fillscreen::$0) goto fillscreen::@1 + to:fillscreen::@return +fillscreen::@return: scope:[fillscreen] from fillscreen::@1 + return + to:@return +@2: scope:[] from @begin + call main param-assignment + to:@end +@end: scope:[] from @2 + +Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 +Consolidated array index constant in assignment *(main::line#0+1 + main::$6) +Consolidated array index constant in *(main::line#0+39) +Succesful SSA optimization Pass2ConstantAdditionElimination +CONTROL FLOW GRAPH +@begin: scope:[] from + to:@2 +main: scope:[main] from @2 + call fillscreen param-assignment + to:main::@13 +main::@13: scope:[main] from main + to:main::@2 +main::@1: scope:[main] from main::@4 + to:main::@2 +main::@2: scope:[main] from main::@1 main::@13 main::@2 + (byte*) TEXT#10 ← phi( main::@1/(byte*) TEXT#10 main::@13/(const string) TEXT#0 ) + (byte*) main::nxt#9 ← phi( main::@1/(byte*) main::nxt#10 main::@13/(const string) main::nxt#0 ) + (byte*) SCROLL#7 ← phi( main::@1/(byte*) SCROLL#7 main::@13/(const byte*) SCROLL#0 ) + (byte) main::scroll#7 ← phi( main::@1/(byte) main::scroll#10 main::@13/(const byte) main::scroll#0 ) + (byte*) BGCOL#5 ← phi( main::@1/(byte*) BGCOL#5 main::@13/(const byte*) BGCOL#0 ) + (byte*) RASTER#1 ← phi( main::@1/(byte*) RASTER#1 main::@13/(const byte*) RASTER#0 ) + if(*((byte*) RASTER#1)!=(byte/word/signed word) 254) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@2 main::@3 + if(*((byte*) RASTER#1)!=(byte/word/signed word) 255) goto main::@3 + to:main::@8 +main::@8: scope:[main] from main::@3 + *((byte*) BGCOL#5) ← ++ *((byte*) BGCOL#5) + (byte) main::scroll#1 ← -- (byte) main::scroll#7 + if((byte) main::scroll#1!=(byte/word/signed word) 255) goto main::@4 + to:main::@9 +main::@4: scope:[main] from main::@6 main::@8 + (byte*) main::nxt#10 ← phi( main::@6/(byte*) main::nxt#1 main::@8/(byte*) main::nxt#9 ) + (byte) main::scroll#10 ← phi( main::@6/(const byte) main::scroll#2 main::@8/(byte) main::scroll#1 ) + *((byte*) SCROLL#7) ← (byte) main::scroll#10 + *((byte*) BGCOL#5) ← -- *((byte*) BGCOL#5) + if(true) goto main::@1 + to:main::@return +main::@9: scope:[main] from main::@8 + to:main::@5 +main::@5: scope:[main] from main::@5 main::@9 + (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@9/(const byte) main::i#0 ) + (byte/word~) main::$6 ← (byte) main::i#2 + *((const byte*) main::line#0 + (byte) main::i#2) ← *((const byte*) main::line#0+(byte/signed byte/word/signed word) 1 + (byte/word~) main::$6) + (byte) main::i#1 ← ++ (byte) main::i#2 + if((byte) main::i#1!=(byte/signed byte/word/signed word) 39) goto main::@5 + to:main::@10 +main::@10: scope:[main] from main::@5 + (byte) main::c#0 ← *((byte*) main::nxt#9) + if((byte) main::c#0!=(byte) '@') goto main::@6 + to:main::@11 +main::@6: scope:[main] from main::@10 main::@11 + (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#9 main::@11/(byte*) main::nxt#2 ) + (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) + *((const byte*) main::line#0+(byte/signed byte/word/signed word) 39) ← (byte) main::c#2 (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@11: scope:[main] from main::@10 @@ -2386,7 +2384,6 @@ main: scope:[main] from @2 main::@2: scope:[main] from main main::@2 main::@4 (byte*) TEXT#10 ← phi( main::@4/(byte*) TEXT#10 main/(const string) TEXT#0 ) (byte*) main::nxt#9 ← phi( main::@4/(byte*) main::nxt#10 main/(const string) main::nxt#0 ) - (byte[]) main::line#8 ← phi( main::@4/(byte[]) main::line#8 main/(const byte*) main::line#0 ) (byte*) SCROLL#7 ← phi( main::@4/(byte*) SCROLL#7 main/(const byte*) SCROLL#0 ) (byte) main::scroll#7 ← phi( main::@4/(byte) main::scroll#10 main/(const byte) main::scroll#0 ) (byte*) BGCOL#5 ← phi( main::@4/(byte*) BGCOL#5 main/(const byte*) BGCOL#0 ) @@ -2410,8 +2407,8 @@ main::@4: scope:[main] from main::@6 main::@8 to:main::@return main::@5: scope:[main] from main::@5 main::@8 (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@8/(const byte) main::i#0 ) - (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) main::line#8 + (byte) main::i#2) ← *((byte[]) main::line#8 + (byte/word~) main::$6) + (byte/word~) main::$6 ← (byte) main::i#2 + *((const byte*) main::line#0 + (byte) main::i#2) ← *((const byte*) main::line#0+(byte/signed byte/word/signed word) 1 + (byte/word~) main::$6) (byte) main::i#1 ← ++ (byte) main::i#2 if((byte) main::i#1!=(byte/signed byte/word/signed word) 39) goto main::@5 to:main::@10 @@ -2422,7 +2419,83 @@ main::@10: scope:[main] from main::@5 main::@6: scope:[main] from main::@10 main::@11 (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#9 main::@11/(byte*) main::nxt#2 ) (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((byte[]) main::line#8 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + *((const byte*) main::line#0+(byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 + to:main::@4 +main::@11: scope:[main] from main::@10 + (byte*) main::nxt#2 ← (byte*) TEXT#10 + (byte) main::c#1 ← *((byte*) main::nxt#2) + to:main::@6 +main::@return: scope:[main] from main::@4 + return + to:@return +fillscreen: scope:[fillscreen] from main + to:fillscreen::@1 +fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@1 + (byte*) fillscreen::cursor#2 ← phi( fillscreen/(const byte*) fillscreen::screen#0 fillscreen::@1/(byte*) fillscreen::cursor#1 ) + *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 + (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 + if((byte*) fillscreen::cursor#1<(const byte*) fillscreen::$0) goto fillscreen::@1 + to:fillscreen::@return +fillscreen::@return: scope:[fillscreen] from fillscreen::@1 + return + to:@return +@2: scope:[] from @begin + call main param-assignment + to:@end +@end: scope:[] from @2 + +Not aliassing identity: RASTER#1 RASTER#1 +Not aliassing identity: BGCOL#5 BGCOL#5 +Not aliassing identity: SCROLL#7 SCROLL#7 +Not aliassing identity: TEXT#10 TEXT#10 +Not aliassing across scopes: main::nxt#2 TEXT#10 +Alias (byte) main::i#2 = (byte/word~) main::$6 +Succesful SSA optimization Pass2AliasElimination +CONTROL FLOW GRAPH +@begin: scope:[] from + to:@2 +main: scope:[main] from @2 + call fillscreen param-assignment + to:main::@2 +main::@2: scope:[main] from main main::@2 main::@4 + (byte*) TEXT#10 ← phi( main::@4/(byte*) TEXT#10 main/(const string) TEXT#0 ) + (byte*) main::nxt#9 ← phi( main::@4/(byte*) main::nxt#10 main/(const string) main::nxt#0 ) + (byte*) SCROLL#7 ← phi( main::@4/(byte*) SCROLL#7 main/(const byte*) SCROLL#0 ) + (byte) main::scroll#7 ← phi( main::@4/(byte) main::scroll#10 main/(const byte) main::scroll#0 ) + (byte*) BGCOL#5 ← phi( main::@4/(byte*) BGCOL#5 main/(const byte*) BGCOL#0 ) + (byte*) RASTER#1 ← phi( main::@4/(byte*) RASTER#1 main/(const byte*) RASTER#0 ) + if(*((byte*) RASTER#1)!=(byte/word/signed word) 254) goto main::@2 + to:main::@3 +main::@3: scope:[main] from main::@2 main::@3 + if(*((byte*) RASTER#1)!=(byte/word/signed word) 255) goto main::@3 + to:main::@8 +main::@8: scope:[main] from main::@3 + *((byte*) BGCOL#5) ← ++ *((byte*) BGCOL#5) + (byte) main::scroll#1 ← -- (byte) main::scroll#7 + if((byte) main::scroll#1!=(byte/word/signed word) 255) goto main::@4 + to:main::@5 +main::@4: scope:[main] from main::@6 main::@8 + (byte*) main::nxt#10 ← phi( main::@6/(byte*) main::nxt#1 main::@8/(byte*) main::nxt#9 ) + (byte) main::scroll#10 ← phi( main::@6/(const byte) main::scroll#2 main::@8/(byte) main::scroll#1 ) + *((byte*) SCROLL#7) ← (byte) main::scroll#10 + *((byte*) BGCOL#5) ← -- *((byte*) BGCOL#5) + if(true) goto main::@2 + to:main::@return +main::@5: scope:[main] from main::@5 main::@8 + (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@8/(const byte) main::i#0 ) + *((const byte*) main::line#0 + (byte) main::i#2) ← *((const byte*) main::line#0+(byte/signed byte/word/signed word) 1 + (byte) main::i#2) + (byte) main::i#1 ← ++ (byte) main::i#2 + if((byte) main::i#1!=(byte/signed byte/word/signed word) 39) goto main::@5 + to:main::@10 +main::@10: scope:[main] from main::@5 + (byte) main::c#0 ← *((byte*) main::nxt#9) + if((byte) main::c#0!=(byte) '@') goto main::@6 + to:main::@11 +main::@6: scope:[main] from main::@10 main::@11 + (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#9 main::@11/(byte*) main::nxt#2 ) + (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) + *((const byte*) main::line#0+(byte/signed byte/word/signed word) 39) ← (byte) main::c#2 (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@11: scope:[main] from main::@10 @@ -2451,13 +2524,11 @@ fillscreen::@return: scope:[fillscreen] from fillscreen::@1 Not aliassing identity: RASTER#1 RASTER#1 Not aliassing identity: BGCOL#5 BGCOL#5 Not aliassing identity: SCROLL#7 SCROLL#7 -Not aliassing identity: main::line#8 main::line#8 Not aliassing identity: TEXT#10 TEXT#10 Not aliassing across scopes: main::nxt#2 TEXT#10 Self Phi Eliminated (byte*) RASTER#1 Self Phi Eliminated (byte*) BGCOL#5 Self Phi Eliminated (byte*) SCROLL#7 -Self Phi Eliminated (byte[]) main::line#8 Self Phi Eliminated (byte*) TEXT#10 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @@ -2469,7 +2540,6 @@ main: scope:[main] from @2 main::@2: scope:[main] from main main::@2 main::@4 (byte*) TEXT#10 ← phi( main/(const string) TEXT#0 ) (byte*) main::nxt#9 ← phi( main::@4/(byte*) main::nxt#10 main/(const string) main::nxt#0 ) - (byte[]) main::line#8 ← phi( main/(const byte*) main::line#0 ) (byte*) SCROLL#7 ← phi( main/(const byte*) SCROLL#0 ) (byte) main::scroll#7 ← phi( main::@4/(byte) main::scroll#10 main/(const byte) main::scroll#0 ) (byte*) BGCOL#5 ← phi( main/(const byte*) BGCOL#0 ) @@ -2493,8 +2563,7 @@ main::@4: scope:[main] from main::@6 main::@8 to:main::@return main::@5: scope:[main] from main::@5 main::@8 (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@8/(const byte) main::i#0 ) - (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) main::line#8 + (byte) main::i#2) ← *((byte[]) main::line#8 + (byte/word~) main::$6) + *((const byte*) main::line#0 + (byte) main::i#2) ← *((const byte*) main::line#0+(byte/signed byte/word/signed word) 1 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 if((byte) main::i#1!=(byte/signed byte/word/signed word) 39) goto main::@5 to:main::@10 @@ -2505,7 +2574,7 @@ main::@10: scope:[main] from main::@5 main::@6: scope:[main] from main::@10 main::@11 (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#9 main::@11/(byte*) main::nxt#2 ) (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((byte[]) main::line#8 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + *((const byte*) main::line#0+(byte/signed byte/word/signed word) 39) ← (byte) main::c#2 (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@11: scope:[main] from main::@10 @@ -2534,7 +2603,6 @@ fillscreen::@return: scope:[fillscreen] from fillscreen::@1 Redundant Phi (byte*) RASTER#1 (const byte*) RASTER#0 Redundant Phi (byte*) BGCOL#5 (const byte*) BGCOL#0 Redundant Phi (byte*) SCROLL#7 (const byte*) SCROLL#0 -Redundant Phi (byte[]) main::line#8 (const byte*) main::line#0 Redundant Phi (byte*) TEXT#10 (const string) TEXT#0 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH @@ -2565,8 +2633,7 @@ main::@4: scope:[main] from main::@6 main::@8 to:main::@return main::@5: scope:[main] from main::@5 main::@8 (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@8/(const byte) main::i#0 ) - (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((const byte*) main::line#0 + (byte) main::i#2) ← *((const byte*) main::line#0 + (byte/word~) main::$6) + *((const byte*) main::line#0 + (byte) main::i#2) ← *((const byte*) main::line#0+(byte/signed byte/word/signed word) 1 + (byte) main::i#2) (byte) main::i#1 ← ++ (byte) main::i#2 if((byte) main::i#1!=(byte/signed byte/word/signed word) 39) goto main::@5 to:main::@10 @@ -2577,7 +2644,7 @@ main::@10: scope:[main] from main::@5 main::@6: scope:[main] from main::@10 main::@11 (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#9 main::@11/(byte*) main::nxt#2 ) (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((const byte*) main::line#0 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 + *((const byte*) main::line#0+(byte/signed byte/word/signed word) 39) ← (byte) main::c#2 (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 to:main::@4 main::@11: scope:[main] from main::@10 @@ -2606,144 +2673,6 @@ fillscreen::@return: scope:[fillscreen] from fillscreen::@1 Constant (const string) main::nxt#2 = TEXT#0 Succesful SSA optimization Pass2ConstantIdentification CONTROL FLOW GRAPH -@begin: scope:[] from - to:@2 -main: scope:[main] from @2 - call fillscreen param-assignment - to:main::@2 -main::@2: scope:[main] from main main::@2 main::@4 - (byte*) main::nxt#9 ← phi( main::@4/(byte*) main::nxt#10 main/(const string) main::nxt#0 ) - (byte) main::scroll#7 ← phi( main::@4/(byte) main::scroll#10 main/(const byte) main::scroll#0 ) - if(*((const byte*) RASTER#0)!=(byte/word/signed word) 254) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@2 main::@3 - if(*((const byte*) RASTER#0)!=(byte/word/signed word) 255) goto main::@3 - to:main::@8 -main::@8: scope:[main] from main::@3 - *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0) - (byte) main::scroll#1 ← -- (byte) main::scroll#7 - if((byte) main::scroll#1!=(byte/word/signed word) 255) goto main::@4 - to:main::@5 -main::@4: scope:[main] from main::@6 main::@8 - (byte*) main::nxt#10 ← phi( main::@6/(byte*) main::nxt#1 main::@8/(byte*) main::nxt#9 ) - (byte) main::scroll#10 ← phi( main::@6/(const byte) main::scroll#2 main::@8/(byte) main::scroll#1 ) - *((const byte*) SCROLL#0) ← (byte) main::scroll#10 - *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) - if(true) goto main::@2 - to:main::@return -main::@5: scope:[main] from main::@5 main::@8 - (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@8/(const byte) main::i#0 ) - (byte/word~) main::$6 ← (byte) main::i#2 + (byte/signed byte/word/signed word) 1 - *((const byte*) main::line#0 + (byte) main::i#2) ← *((const byte*) main::line#0 + (byte/word~) main::$6) - (byte) main::i#1 ← ++ (byte) main::i#2 - if((byte) main::i#1!=(byte/signed byte/word/signed word) 39) goto main::@5 - to:main::@10 -main::@10: scope:[main] from main::@5 - (byte) main::c#0 ← *((byte*) main::nxt#9) - if((byte) main::c#0!=(byte) '@') goto main::@6 - to:main::@11 -main::@6: scope:[main] from main::@10 main::@11 - (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#9 main::@11/(const string) main::nxt#2 ) - (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((const byte*) main::line#0 + (byte/signed byte/word/signed word) 39) ← (byte) main::c#2 - (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 - to:main::@4 -main::@11: scope:[main] from main::@10 - (byte) main::c#1 ← *((const string) main::nxt#2) - to:main::@6 -main::@return: scope:[main] from main::@4 - return - to:@return -fillscreen: scope:[fillscreen] from main - to:fillscreen::@1 -fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@1 - (byte*) fillscreen::cursor#2 ← phi( fillscreen/(const byte*) fillscreen::screen#0 fillscreen::@1/(byte*) fillscreen::cursor#1 ) - *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 - (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 - if((byte*) fillscreen::cursor#1<(const byte*) fillscreen::$0) goto fillscreen::@1 - to:fillscreen::@return -fillscreen::@return: scope:[fillscreen] from fillscreen::@1 - return - to:@return -@2: scope:[] from @begin - call main param-assignment - to:@end -@end: scope:[] from @2 - -Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 -Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 -Consolidated array index constant in assignment *(main::line#0+1 + main::$6) -Consolidated array index constant in *(main::line#0+39) -Succesful SSA optimization Pass2ConstantAdditionElimination -CONTROL FLOW GRAPH -@begin: scope:[] from - to:@2 -main: scope:[main] from @2 - call fillscreen param-assignment - to:main::@2 -main::@2: scope:[main] from main main::@2 main::@4 - (byte*) main::nxt#9 ← phi( main::@4/(byte*) main::nxt#10 main/(const string) main::nxt#0 ) - (byte) main::scroll#7 ← phi( main::@4/(byte) main::scroll#10 main/(const byte) main::scroll#0 ) - if(*((const byte*) RASTER#0)!=(byte/word/signed word) 254) goto main::@2 - to:main::@3 -main::@3: scope:[main] from main::@2 main::@3 - if(*((const byte*) RASTER#0)!=(byte/word/signed word) 255) goto main::@3 - to:main::@8 -main::@8: scope:[main] from main::@3 - *((const byte*) BGCOL#0) ← ++ *((const byte*) BGCOL#0) - (byte) main::scroll#1 ← -- (byte) main::scroll#7 - if((byte) main::scroll#1!=(byte/word/signed word) 255) goto main::@4 - to:main::@5 -main::@4: scope:[main] from main::@6 main::@8 - (byte*) main::nxt#10 ← phi( main::@6/(byte*) main::nxt#1 main::@8/(byte*) main::nxt#9 ) - (byte) main::scroll#10 ← phi( main::@6/(const byte) main::scroll#2 main::@8/(byte) main::scroll#1 ) - *((const byte*) SCROLL#0) ← (byte) main::scroll#10 - *((const byte*) BGCOL#0) ← -- *((const byte*) BGCOL#0) - if(true) goto main::@2 - to:main::@return -main::@5: scope:[main] from main::@5 main::@8 - (byte) main::i#2 ← phi( main::@5/(byte) main::i#1 main::@8/(const byte) main::i#0 ) - (byte/word~) main::$6 ← (byte) main::i#2 - *((const byte*) main::line#0 + (byte) main::i#2) ← *((const byte*) main::line#0+(byte/signed byte/word/signed word) 1 + (byte/word~) main::$6) - (byte) main::i#1 ← ++ (byte) main::i#2 - if((byte) main::i#1!=(byte/signed byte/word/signed word) 39) goto main::@5 - to:main::@10 -main::@10: scope:[main] from main::@5 - (byte) main::c#0 ← *((byte*) main::nxt#9) - if((byte) main::c#0!=(byte) '@') goto main::@6 - to:main::@11 -main::@6: scope:[main] from main::@10 main::@11 - (byte*) main::nxt#4 ← phi( main::@10/(byte*) main::nxt#9 main::@11/(const string) main::nxt#2 ) - (byte) main::c#2 ← phi( main::@10/(byte) main::c#0 main::@11/(byte) main::c#1 ) - *((const byte*) main::line#0+(byte/signed byte/word/signed word) 39) ← (byte) main::c#2 - (byte*) main::nxt#1 ← ++ (byte*) main::nxt#4 - to:main::@4 -main::@11: scope:[main] from main::@10 - (byte) main::c#1 ← *((const string) main::nxt#2) - to:main::@6 -main::@return: scope:[main] from main::@4 - return - to:@return -fillscreen: scope:[fillscreen] from main - to:fillscreen::@1 -fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@1 - (byte*) fillscreen::cursor#2 ← phi( fillscreen/(const byte*) fillscreen::screen#0 fillscreen::@1/(byte*) fillscreen::cursor#1 ) - *((byte*) fillscreen::cursor#2) ← (const byte) fillscreen::fill#0 - (byte*) fillscreen::cursor#1 ← ++ (byte*) fillscreen::cursor#2 - if((byte*) fillscreen::cursor#1<(const byte*) fillscreen::$0) goto fillscreen::@1 - to:fillscreen::@return -fillscreen::@return: scope:[fillscreen] from fillscreen::@1 - return - to:@return -@2: scope:[] from @begin - call main param-assignment - to:@end -@end: scope:[] from @2 - -Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2 -Alias (byte) main::i#2 = (byte/word~) main::$6 -Succesful SSA optimization Pass2AliasElimination -CONTROL FLOW GRAPH @begin: scope:[] from to:@2 main: scope:[main] from @2 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/scrollbig.log b/src/main/java/dk/camelot64/kickc/test/ref/scrollbig.log index 2dfaf0d8b..7abfede83 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/scrollbig.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/scrollbig.log @@ -1441,31 +1441,23 @@ scroll_hard: scope:[scroll_hard] from scroll_bit::@1 (byte) scroll_hard::i#0 ← (byte/signed byte/word/signed word) 0 to:scroll_hard::@1 scroll_hard::@1: scope:[scroll_hard] from scroll_hard scroll_hard::@1 - (byte[]) scroll_hard::line7#1 ← phi( scroll_hard/(byte[]) scroll_hard::line7#0 scroll_hard::@1/(byte[]) scroll_hard::line7#1 ) - (byte[]) scroll_hard::line6#1 ← phi( scroll_hard/(byte[]) scroll_hard::line6#0 scroll_hard::@1/(byte[]) scroll_hard::line6#1 ) - (byte[]) scroll_hard::line5#1 ← phi( scroll_hard/(byte[]) scroll_hard::line5#0 scroll_hard::@1/(byte[]) scroll_hard::line5#1 ) - (byte[]) scroll_hard::line4#1 ← phi( scroll_hard/(byte[]) scroll_hard::line4#0 scroll_hard::@1/(byte[]) scroll_hard::line4#1 ) - (byte[]) scroll_hard::line3#1 ← phi( scroll_hard/(byte[]) scroll_hard::line3#0 scroll_hard::@1/(byte[]) scroll_hard::line3#1 ) - (byte[]) scroll_hard::line2#1 ← phi( scroll_hard/(byte[]) scroll_hard::line2#0 scroll_hard::@1/(byte[]) scroll_hard::line2#1 ) - (byte[]) scroll_hard::line1#1 ← phi( scroll_hard/(byte[]) scroll_hard::line1#0 scroll_hard::@1/(byte[]) scroll_hard::line1#1 ) - (byte[]) scroll_hard::line0#1 ← phi( scroll_hard/(byte[]) scroll_hard::line0#0 scroll_hard::@1/(byte[]) scroll_hard::line0#1 ) (byte) scroll_hard::i#2 ← phi( scroll_hard/(byte) scroll_hard::i#0 scroll_hard::@1/(byte) scroll_hard::i#1 ) (byte/word~) scroll_hard::$16 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line0#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line0#1 + (byte/word~) scroll_hard::$16) + *((byte[]) scroll_hard::line0#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line0#0 + (byte/word~) scroll_hard::$16) (byte/word~) scroll_hard::$17 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line1#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line1#1 + (byte/word~) scroll_hard::$17) + *((byte[]) scroll_hard::line1#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line1#0 + (byte/word~) scroll_hard::$17) (byte/word~) scroll_hard::$18 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line2#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line2#1 + (byte/word~) scroll_hard::$18) + *((byte[]) scroll_hard::line2#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line2#0 + (byte/word~) scroll_hard::$18) (byte/word~) scroll_hard::$19 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line3#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line3#1 + (byte/word~) scroll_hard::$19) + *((byte[]) scroll_hard::line3#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line3#0 + (byte/word~) scroll_hard::$19) (byte/word~) scroll_hard::$20 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line4#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line4#1 + (byte/word~) scroll_hard::$20) + *((byte[]) scroll_hard::line4#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line4#0 + (byte/word~) scroll_hard::$20) (byte/word~) scroll_hard::$21 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line5#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line5#1 + (byte/word~) scroll_hard::$21) + *((byte[]) scroll_hard::line5#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line5#0 + (byte/word~) scroll_hard::$21) (byte/word~) scroll_hard::$22 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line6#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line6#1 + (byte/word~) scroll_hard::$22) + *((byte[]) scroll_hard::line6#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line6#0 + (byte/word~) scroll_hard::$22) (byte/word~) scroll_hard::$23 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line7#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line7#1 + (byte/word~) scroll_hard::$23) + *((byte[]) scroll_hard::line7#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line7#0 + (byte/word~) scroll_hard::$23) (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#2 (boolean~) scroll_hard::$24 ← (byte) scroll_hard::i#1 != (byte/signed byte/word/signed word) 39 if((boolean~) scroll_hard::$24) goto scroll_hard::@1 @@ -1904,31 +1896,23 @@ scroll_hard: scope:[scroll_hard] from scroll_bit::@1 (byte) scroll_hard::i#0 ← (byte/signed byte/word/signed word) 0 to:scroll_hard::@1 scroll_hard::@1: scope:[scroll_hard] from scroll_hard scroll_hard::@1 - (byte[]) scroll_hard::line7#1 ← phi( scroll_hard/(byte[]) scroll_hard::line7#0 scroll_hard::@1/(byte[]) scroll_hard::line7#1 ) - (byte[]) scroll_hard::line6#1 ← phi( scroll_hard/(byte[]) scroll_hard::line6#0 scroll_hard::@1/(byte[]) scroll_hard::line6#1 ) - (byte[]) scroll_hard::line5#1 ← phi( scroll_hard/(byte[]) scroll_hard::line5#0 scroll_hard::@1/(byte[]) scroll_hard::line5#1 ) - (byte[]) scroll_hard::line4#1 ← phi( scroll_hard/(byte[]) scroll_hard::line4#0 scroll_hard::@1/(byte[]) scroll_hard::line4#1 ) - (byte[]) scroll_hard::line3#1 ← phi( scroll_hard/(byte[]) scroll_hard::line3#0 scroll_hard::@1/(byte[]) scroll_hard::line3#1 ) - (byte[]) scroll_hard::line2#1 ← phi( scroll_hard/(byte[]) scroll_hard::line2#0 scroll_hard::@1/(byte[]) scroll_hard::line2#1 ) - (byte[]) scroll_hard::line1#1 ← phi( scroll_hard/(byte[]) scroll_hard::line1#0 scroll_hard::@1/(byte[]) scroll_hard::line1#1 ) - (byte[]) scroll_hard::line0#1 ← phi( scroll_hard/(byte[]) scroll_hard::line0#0 scroll_hard::@1/(byte[]) scroll_hard::line0#1 ) (byte) scroll_hard::i#2 ← phi( scroll_hard/(byte) scroll_hard::i#0 scroll_hard::@1/(byte) scroll_hard::i#1 ) (byte/word~) scroll_hard::$16 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line0#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line0#1 + (byte/word~) scroll_hard::$16) + *((byte[]) scroll_hard::line0#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line0#0 + (byte/word~) scroll_hard::$16) (byte/word~) scroll_hard::$17 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line1#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line1#1 + (byte/word~) scroll_hard::$17) + *((byte[]) scroll_hard::line1#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line1#0 + (byte/word~) scroll_hard::$17) (byte/word~) scroll_hard::$18 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line2#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line2#1 + (byte/word~) scroll_hard::$18) + *((byte[]) scroll_hard::line2#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line2#0 + (byte/word~) scroll_hard::$18) (byte/word~) scroll_hard::$19 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line3#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line3#1 + (byte/word~) scroll_hard::$19) + *((byte[]) scroll_hard::line3#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line3#0 + (byte/word~) scroll_hard::$19) (byte/word~) scroll_hard::$20 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line4#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line4#1 + (byte/word~) scroll_hard::$20) + *((byte[]) scroll_hard::line4#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line4#0 + (byte/word~) scroll_hard::$20) (byte/word~) scroll_hard::$21 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line5#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line5#1 + (byte/word~) scroll_hard::$21) + *((byte[]) scroll_hard::line5#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line5#0 + (byte/word~) scroll_hard::$21) (byte/word~) scroll_hard::$22 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line6#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line6#1 + (byte/word~) scroll_hard::$22) + *((byte[]) scroll_hard::line6#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line6#0 + (byte/word~) scroll_hard::$22) (byte/word~) scroll_hard::$23 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line7#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line7#1 + (byte/word~) scroll_hard::$23) + *((byte[]) scroll_hard::line7#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line7#0 + (byte/word~) scroll_hard::$23) (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#2 (boolean~) scroll_hard::$24 ← (byte) scroll_hard::i#1 != (byte/signed byte/word/signed word) 39 if((boolean~) scroll_hard::$24) goto scroll_hard::@1 @@ -2366,28 +2350,20 @@ INITIAL SSA SYMBOL TABLE (byte) scroll_hard::i#2 (byte[]) scroll_hard::line0 (byte[]) scroll_hard::line0#0 -(byte[]) scroll_hard::line0#1 (byte[]) scroll_hard::line1 (byte[]) scroll_hard::line1#0 -(byte[]) scroll_hard::line1#1 (byte[]) scroll_hard::line2 (byte[]) scroll_hard::line2#0 -(byte[]) scroll_hard::line2#1 (byte[]) scroll_hard::line3 (byte[]) scroll_hard::line3#0 -(byte[]) scroll_hard::line3#1 (byte[]) scroll_hard::line4 (byte[]) scroll_hard::line4#0 -(byte[]) scroll_hard::line4#1 (byte[]) scroll_hard::line5 (byte[]) scroll_hard::line5#0 -(byte[]) scroll_hard::line5#1 (byte[]) scroll_hard::line6 (byte[]) scroll_hard::line6#0 -(byte[]) scroll_hard::line6#1 (byte[]) scroll_hard::line7 (byte[]) scroll_hard::line7#0 -(byte[]) scroll_hard::line7#1 (void()) scroll_soft() (boolean~) scroll_soft::$0 (boolean~) scroll_soft::$1 @@ -2784,31 +2760,23 @@ scroll_hard: scope:[scroll_hard] from scroll_bit::@1 (byte) scroll_hard::i#0 ← (byte/signed byte/word/signed word) 0 to:scroll_hard::@1 scroll_hard::@1: scope:[scroll_hard] from scroll_hard scroll_hard::@1 - (byte[]) scroll_hard::line7#1 ← phi( scroll_hard/(byte[]) scroll_hard::line7#0 scroll_hard::@1/(byte[]) scroll_hard::line7#1 ) - (byte[]) scroll_hard::line6#1 ← phi( scroll_hard/(byte[]) scroll_hard::line6#0 scroll_hard::@1/(byte[]) scroll_hard::line6#1 ) - (byte[]) scroll_hard::line5#1 ← phi( scroll_hard/(byte[]) scroll_hard::line5#0 scroll_hard::@1/(byte[]) scroll_hard::line5#1 ) - (byte[]) scroll_hard::line4#1 ← phi( scroll_hard/(byte[]) scroll_hard::line4#0 scroll_hard::@1/(byte[]) scroll_hard::line4#1 ) - (byte[]) scroll_hard::line3#1 ← phi( scroll_hard/(byte[]) scroll_hard::line3#0 scroll_hard::@1/(byte[]) scroll_hard::line3#1 ) - (byte[]) scroll_hard::line2#1 ← phi( scroll_hard/(byte[]) scroll_hard::line2#0 scroll_hard::@1/(byte[]) scroll_hard::line2#1 ) - (byte[]) scroll_hard::line1#1 ← phi( scroll_hard/(byte[]) scroll_hard::line1#0 scroll_hard::@1/(byte[]) scroll_hard::line1#1 ) - (byte[]) scroll_hard::line0#1 ← phi( scroll_hard/(byte[]) scroll_hard::line0#0 scroll_hard::@1/(byte[]) scroll_hard::line0#1 ) (byte) scroll_hard::i#2 ← phi( scroll_hard/(byte) scroll_hard::i#0 scroll_hard::@1/(byte) scroll_hard::i#1 ) (byte/word~) scroll_hard::$16 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line0#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line0#1 + (byte/word~) scroll_hard::$16) + *((byte[]) scroll_hard::line0#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line0#0 + (byte/word~) scroll_hard::$16) (byte/word~) scroll_hard::$17 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line1#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line1#1 + (byte/word~) scroll_hard::$17) + *((byte[]) scroll_hard::line1#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line1#0 + (byte/word~) scroll_hard::$17) (byte/word~) scroll_hard::$18 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line2#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line2#1 + (byte/word~) scroll_hard::$18) + *((byte[]) scroll_hard::line2#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line2#0 + (byte/word~) scroll_hard::$18) (byte/word~) scroll_hard::$19 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line3#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line3#1 + (byte/word~) scroll_hard::$19) + *((byte[]) scroll_hard::line3#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line3#0 + (byte/word~) scroll_hard::$19) (byte/word~) scroll_hard::$20 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line4#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line4#1 + (byte/word~) scroll_hard::$20) + *((byte[]) scroll_hard::line4#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line4#0 + (byte/word~) scroll_hard::$20) (byte/word~) scroll_hard::$21 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line5#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line5#1 + (byte/word~) scroll_hard::$21) + *((byte[]) scroll_hard::line5#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line5#0 + (byte/word~) scroll_hard::$21) (byte/word~) scroll_hard::$22 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line6#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line6#1 + (byte/word~) scroll_hard::$22) + *((byte[]) scroll_hard::line6#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line6#0 + (byte/word~) scroll_hard::$22) (byte/word~) scroll_hard::$23 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line7#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line7#1 + (byte/word~) scroll_hard::$23) + *((byte[]) scroll_hard::line7#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line7#0 + (byte/word~) scroll_hard::$23) (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#2 (boolean~) scroll_hard::$24 ← (byte) scroll_hard::i#1 != (byte/signed byte/word/signed word) 39 if((boolean~) scroll_hard::$24) goto scroll_hard::@1 @@ -3234,31 +3202,23 @@ scroll_hard: scope:[scroll_hard] from scroll_bit::@1 (byte) scroll_hard::i#0 ← (byte/signed byte/word/signed word) 0 to:scroll_hard::@1 scroll_hard::@1: scope:[scroll_hard] from scroll_hard scroll_hard::@1 - (byte[]) scroll_hard::line7#1 ← phi( scroll_hard/(byte[]) scroll_hard::line7#0 scroll_hard::@1/(byte[]) scroll_hard::line7#1 ) - (byte[]) scroll_hard::line6#1 ← phi( scroll_hard/(byte[]) scroll_hard::line6#0 scroll_hard::@1/(byte[]) scroll_hard::line6#1 ) - (byte[]) scroll_hard::line5#1 ← phi( scroll_hard/(byte[]) scroll_hard::line5#0 scroll_hard::@1/(byte[]) scroll_hard::line5#1 ) - (byte[]) scroll_hard::line4#1 ← phi( scroll_hard/(byte[]) scroll_hard::line4#0 scroll_hard::@1/(byte[]) scroll_hard::line4#1 ) - (byte[]) scroll_hard::line3#1 ← phi( scroll_hard/(byte[]) scroll_hard::line3#0 scroll_hard::@1/(byte[]) scroll_hard::line3#1 ) - (byte[]) scroll_hard::line2#1 ← phi( scroll_hard/(byte[]) scroll_hard::line2#0 scroll_hard::@1/(byte[]) scroll_hard::line2#1 ) - (byte[]) scroll_hard::line1#1 ← phi( scroll_hard/(byte[]) scroll_hard::line1#0 scroll_hard::@1/(byte[]) scroll_hard::line1#1 ) - (byte[]) scroll_hard::line0#1 ← phi( scroll_hard/(byte[]) scroll_hard::line0#0 scroll_hard::@1/(byte[]) scroll_hard::line0#1 ) (byte) scroll_hard::i#2 ← phi( scroll_hard/(byte) scroll_hard::i#0 scroll_hard::@1/(byte) scroll_hard::i#1 ) (byte/word~) scroll_hard::$16 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line0#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line0#1 + (byte/word~) scroll_hard::$16) + *((byte[]) scroll_hard::line0#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line0#0 + (byte/word~) scroll_hard::$16) (byte/word~) scroll_hard::$17 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line1#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line1#1 + (byte/word~) scroll_hard::$17) + *((byte[]) scroll_hard::line1#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line1#0 + (byte/word~) scroll_hard::$17) (byte/word~) scroll_hard::$18 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line2#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line2#1 + (byte/word~) scroll_hard::$18) + *((byte[]) scroll_hard::line2#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line2#0 + (byte/word~) scroll_hard::$18) (byte/word~) scroll_hard::$19 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line3#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line3#1 + (byte/word~) scroll_hard::$19) + *((byte[]) scroll_hard::line3#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line3#0 + (byte/word~) scroll_hard::$19) (byte/word~) scroll_hard::$20 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line4#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line4#1 + (byte/word~) scroll_hard::$20) + *((byte[]) scroll_hard::line4#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line4#0 + (byte/word~) scroll_hard::$20) (byte/word~) scroll_hard::$21 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line5#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line5#1 + (byte/word~) scroll_hard::$21) + *((byte[]) scroll_hard::line5#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line5#0 + (byte/word~) scroll_hard::$21) (byte/word~) scroll_hard::$22 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line6#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line6#1 + (byte/word~) scroll_hard::$22) + *((byte[]) scroll_hard::line6#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line6#0 + (byte/word~) scroll_hard::$22) (byte/word~) scroll_hard::$23 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line7#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line7#1 + (byte/word~) scroll_hard::$23) + *((byte[]) scroll_hard::line7#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line7#0 + (byte/word~) scroll_hard::$23) (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#2 (boolean~) scroll_hard::$24 ← (byte) scroll_hard::i#1 != (byte/signed byte/word/signed word) 39 if((boolean~) scroll_hard::$24) goto scroll_hard::@1 @@ -3574,31 +3534,23 @@ scroll_hard: scope:[scroll_hard] from scroll_bit::@1 (byte) scroll_hard::i#0 ← (byte/signed byte/word/signed word) 0 to:scroll_hard::@1 scroll_hard::@1: scope:[scroll_hard] from scroll_hard scroll_hard::@1 - (byte[]) scroll_hard::line7#1 ← phi( scroll_hard/(byte[]) scroll_hard::line7#0 scroll_hard::@1/(byte[]) scroll_hard::line7#1 ) - (byte[]) scroll_hard::line6#1 ← phi( scroll_hard/(byte[]) scroll_hard::line6#0 scroll_hard::@1/(byte[]) scroll_hard::line6#1 ) - (byte[]) scroll_hard::line5#1 ← phi( scroll_hard/(byte[]) scroll_hard::line5#0 scroll_hard::@1/(byte[]) scroll_hard::line5#1 ) - (byte[]) scroll_hard::line4#1 ← phi( scroll_hard/(byte[]) scroll_hard::line4#0 scroll_hard::@1/(byte[]) scroll_hard::line4#1 ) - (byte[]) scroll_hard::line3#1 ← phi( scroll_hard/(byte[]) scroll_hard::line3#0 scroll_hard::@1/(byte[]) scroll_hard::line3#1 ) - (byte[]) scroll_hard::line2#1 ← phi( scroll_hard/(byte[]) scroll_hard::line2#0 scroll_hard::@1/(byte[]) scroll_hard::line2#1 ) - (byte[]) scroll_hard::line1#1 ← phi( scroll_hard/(byte[]) scroll_hard::line1#0 scroll_hard::@1/(byte[]) scroll_hard::line1#1 ) - (byte[]) scroll_hard::line0#1 ← phi( scroll_hard/(byte[]) scroll_hard::line0#0 scroll_hard::@1/(byte[]) scroll_hard::line0#1 ) (byte) scroll_hard::i#2 ← phi( scroll_hard/(byte) scroll_hard::i#0 scroll_hard::@1/(byte) scroll_hard::i#1 ) (byte/word~) scroll_hard::$16 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line0#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line0#1 + (byte/word~) scroll_hard::$16) + *((byte[]) scroll_hard::line0#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line0#0 + (byte/word~) scroll_hard::$16) (byte/word~) scroll_hard::$17 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line1#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line1#1 + (byte/word~) scroll_hard::$17) + *((byte[]) scroll_hard::line1#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line1#0 + (byte/word~) scroll_hard::$17) (byte/word~) scroll_hard::$18 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line2#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line2#1 + (byte/word~) scroll_hard::$18) + *((byte[]) scroll_hard::line2#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line2#0 + (byte/word~) scroll_hard::$18) (byte/word~) scroll_hard::$19 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line3#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line3#1 + (byte/word~) scroll_hard::$19) + *((byte[]) scroll_hard::line3#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line3#0 + (byte/word~) scroll_hard::$19) (byte/word~) scroll_hard::$20 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line4#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line4#1 + (byte/word~) scroll_hard::$20) + *((byte[]) scroll_hard::line4#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line4#0 + (byte/word~) scroll_hard::$20) (byte/word~) scroll_hard::$21 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line5#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line5#1 + (byte/word~) scroll_hard::$21) + *((byte[]) scroll_hard::line5#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line5#0 + (byte/word~) scroll_hard::$21) (byte/word~) scroll_hard::$22 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line6#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line6#1 + (byte/word~) scroll_hard::$22) + *((byte[]) scroll_hard::line6#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line6#0 + (byte/word~) scroll_hard::$22) (byte/word~) scroll_hard::$23 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line7#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line7#1 + (byte/word~) scroll_hard::$23) + *((byte[]) scroll_hard::line7#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line7#0 + (byte/word~) scroll_hard::$23) (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#2 (boolean~) scroll_hard::$24 ← (byte) scroll_hard::i#1 != (byte/signed byte/word/signed word) 39 if((boolean~) scroll_hard::$24) goto scroll_hard::@1 @@ -3711,14 +3663,6 @@ Self Phi Eliminated (byte*) current_chargen#12 Self Phi Eliminated (byte) current_bit#14 Self Phi Eliminated (byte*) PROCPORT#2 Self Phi Eliminated (byte*) nxt#16 -Self Phi Eliminated (byte[]) scroll_hard::line0#1 -Self Phi Eliminated (byte[]) scroll_hard::line1#1 -Self Phi Eliminated (byte[]) scroll_hard::line2#1 -Self Phi Eliminated (byte[]) scroll_hard::line3#1 -Self Phi Eliminated (byte[]) scroll_hard::line4#1 -Self Phi Eliminated (byte[]) scroll_hard::line5#1 -Self Phi Eliminated (byte[]) scroll_hard::line6#1 -Self Phi Eliminated (byte[]) scroll_hard::line7#1 Self Phi Eliminated (byte) fillscreen::fill#1 Self Phi Eliminated (byte*) fillscreen::screen#2 Succesful SSA optimization Pass2SelfPhiElimination @@ -3945,31 +3889,23 @@ scroll_hard: scope:[scroll_hard] from scroll_bit::@1 (byte) scroll_hard::i#0 ← (byte/signed byte/word/signed word) 0 to:scroll_hard::@1 scroll_hard::@1: scope:[scroll_hard] from scroll_hard scroll_hard::@1 - (byte[]) scroll_hard::line7#1 ← phi( scroll_hard/(byte[]) scroll_hard::line7#0 ) - (byte[]) scroll_hard::line6#1 ← phi( scroll_hard/(byte[]) scroll_hard::line6#0 ) - (byte[]) scroll_hard::line5#1 ← phi( scroll_hard/(byte[]) scroll_hard::line5#0 ) - (byte[]) scroll_hard::line4#1 ← phi( scroll_hard/(byte[]) scroll_hard::line4#0 ) - (byte[]) scroll_hard::line3#1 ← phi( scroll_hard/(byte[]) scroll_hard::line3#0 ) - (byte[]) scroll_hard::line2#1 ← phi( scroll_hard/(byte[]) scroll_hard::line2#0 ) - (byte[]) scroll_hard::line1#1 ← phi( scroll_hard/(byte[]) scroll_hard::line1#0 ) - (byte[]) scroll_hard::line0#1 ← phi( scroll_hard/(byte[]) scroll_hard::line0#0 ) (byte) scroll_hard::i#2 ← phi( scroll_hard/(byte) scroll_hard::i#0 scroll_hard::@1/(byte) scroll_hard::i#1 ) (byte/word~) scroll_hard::$16 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line0#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line0#1 + (byte/word~) scroll_hard::$16) + *((byte[]) scroll_hard::line0#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line0#0 + (byte/word~) scroll_hard::$16) (byte/word~) scroll_hard::$17 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line1#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line1#1 + (byte/word~) scroll_hard::$17) + *((byte[]) scroll_hard::line1#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line1#0 + (byte/word~) scroll_hard::$17) (byte/word~) scroll_hard::$18 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line2#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line2#1 + (byte/word~) scroll_hard::$18) + *((byte[]) scroll_hard::line2#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line2#0 + (byte/word~) scroll_hard::$18) (byte/word~) scroll_hard::$19 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line3#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line3#1 + (byte/word~) scroll_hard::$19) + *((byte[]) scroll_hard::line3#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line3#0 + (byte/word~) scroll_hard::$19) (byte/word~) scroll_hard::$20 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line4#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line4#1 + (byte/word~) scroll_hard::$20) + *((byte[]) scroll_hard::line4#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line4#0 + (byte/word~) scroll_hard::$20) (byte/word~) scroll_hard::$21 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line5#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line5#1 + (byte/word~) scroll_hard::$21) + *((byte[]) scroll_hard::line5#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line5#0 + (byte/word~) scroll_hard::$21) (byte/word~) scroll_hard::$22 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line6#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line6#1 + (byte/word~) scroll_hard::$22) + *((byte[]) scroll_hard::line6#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line6#0 + (byte/word~) scroll_hard::$22) (byte/word~) scroll_hard::$23 ← (byte) scroll_hard::i#2 + (byte/signed byte/word/signed word) 1 - *((byte[]) scroll_hard::line7#1 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line7#1 + (byte/word~) scroll_hard::$23) + *((byte[]) scroll_hard::line7#0 + (byte) scroll_hard::i#2) ← *((byte[]) scroll_hard::line7#0 + (byte/word~) scroll_hard::$23) (byte) scroll_hard::i#1 ← ++ (byte) scroll_hard::i#2 (boolean~) scroll_hard::$24 ← (byte) scroll_hard::i#1 != (byte/signed byte/word/signed word) 39 if((boolean~) scroll_hard::$24) goto scroll_hard::@1 @@ -4058,14 +3994,6 @@ Redundant Phi (byte*) nxt#16 (byte*) nxt#36 Redundant Phi (byte*) nxt#17 (byte*) nxt#24 Redundant Phi (byte*) TEXT#2 (byte*) TEXT#6 Redundant Phi (byte*) SCREEN#3 (byte*) SCREEN#10 -Redundant Phi (byte[]) scroll_hard::line0#1 (byte[]) scroll_hard::line0#0 -Redundant Phi (byte[]) scroll_hard::line1#1 (byte[]) scroll_hard::line1#0 -Redundant Phi (byte[]) scroll_hard::line2#1 (byte[]) scroll_hard::line2#0 -Redundant Phi (byte[]) scroll_hard::line3#1 (byte[]) scroll_hard::line3#0 -Redundant Phi (byte[]) scroll_hard::line4#1 (byte[]) scroll_hard::line4#0 -Redundant Phi (byte[]) scroll_hard::line5#1 (byte[]) scroll_hard::line5#0 -Redundant Phi (byte[]) scroll_hard::line6#1 (byte[]) scroll_hard::line6#0 -Redundant Phi (byte[]) scroll_hard::line7#1 (byte[]) scroll_hard::line7#0 Redundant Phi (byte*) fillscreen::cursor#0 (byte*) fillscreen::screen#0 Redundant Phi (byte) fillscreen::fill#2 (byte) fillscreen::fill#0 Redundant Phi (byte) fillscreen::fill#1 (byte) fillscreen::fill#2 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/signed-bytes.log b/src/main/java/dk/camelot64/kickc/test/ref/signed-bytes.log index 4d8cf58c2..e6a503d4c 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/signed-bytes.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/signed-bytes.log @@ -158,17 +158,15 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#1 ) - (byte[]) main::screen#2 ← phi( main/(byte[]) main::screen#0 main::@2/(byte[]) main::screen#1 ) (signed byte) main::i#2 ← phi( main/(signed byte) main::i#0 main::@2/(signed byte) main::i#1 ) (boolean~) main::$1 ← (signed byte) main::i#2 < (byte/signed byte/word/signed word) 127 if((boolean~) main::$1) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 (byte) main::j#2 ← phi( main::@1/(byte) main::j#3 ) - (byte[]) main::screen#1 ← phi( main::@1/(byte[]) main::screen#2 ) (signed byte) main::i#3 ← phi( main::@1/(signed byte) main::i#2 ) (byte~) main::$2 ← ((byte)) (signed byte) main::i#3 - *((byte[]) main::screen#1 + (byte) main::j#2) ← (byte~) main::$2 + *((byte[]) main::screen#0 + (byte) main::j#2) ← (byte~) main::$2 (signed byte) main::i#1 ← ++ (signed byte) main::i#3 (byte) main::j#1 ← ++ (byte) main::j#2 to:main::@1 @@ -193,17 +191,15 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#1 ) - (byte[]) main::screen#2 ← phi( main/(byte[]) main::screen#0 main::@2/(byte[]) main::screen#1 ) (signed byte) main::i#2 ← phi( main/(signed byte) main::i#0 main::@2/(signed byte) main::i#1 ) (boolean~) main::$1 ← (signed byte) main::i#2 < (byte/signed byte/word/signed word) 127 if((boolean~) main::$1) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 (byte) main::j#2 ← phi( main::@1/(byte) main::j#3 ) - (byte[]) main::screen#1 ← phi( main::@1/(byte[]) main::screen#2 ) (signed byte) main::i#3 ← phi( main::@1/(signed byte) main::i#2 ) (byte~) main::$2 ← ((byte)) (signed byte) main::i#3 - *((byte[]) main::screen#1 + (byte) main::j#2) ← (byte~) main::$2 + *((byte[]) main::screen#0 + (byte) main::j#2) ← (byte~) main::$2 (signed byte) main::i#1 ← ++ (signed byte) main::i#3 (byte) main::j#1 ← ++ (byte) main::j#2 to:main::@1 @@ -241,8 +237,6 @@ INITIAL SSA SYMBOL TABLE (byte) main::j#3 (byte[]) main::screen (byte[]) main::screen#0 -(byte[]) main::screen#1 -(byte[]) main::screen#2 Culled Empty Block (label) @2 Succesful SSA optimization Pass2CullEmptyBlocks @@ -257,17 +251,15 @@ main: scope:[main] from @1 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#1 ) - (byte[]) main::screen#2 ← phi( main/(byte[]) main::screen#0 main::@2/(byte[]) main::screen#1 ) (signed byte) main::i#2 ← phi( main/(signed byte) main::i#0 main::@2/(signed byte) main::i#1 ) (boolean~) main::$1 ← (signed byte) main::i#2 < (byte/signed byte/word/signed word) 127 if((boolean~) main::$1) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 (byte) main::j#2 ← phi( main::@1/(byte) main::j#3 ) - (byte[]) main::screen#1 ← phi( main::@1/(byte[]) main::screen#2 ) (signed byte) main::i#3 ← phi( main::@1/(signed byte) main::i#2 ) (byte~) main::$2 ← ((byte)) (signed byte) main::i#3 - *((byte[]) main::screen#1 + (byte) main::j#2) ← (byte~) main::$2 + *((byte[]) main::screen#0 + (byte) main::j#2) ← (byte~) main::$2 (signed byte) main::i#1 ← ++ (signed byte) main::i#3 (byte) main::j#1 ← ++ (byte) main::j#2 to:main::@1 @@ -281,72 +273,9 @@ main::@return: scope:[main] from main::@1 Alias (signed byte) main::i#0 = (signed byte/signed word~) main::$0 Alias (signed byte) main::i#2 = (signed byte) main::i#3 -Alias (byte[]) main::screen#1 = (byte[]) main::screen#2 Alias (byte) main::j#2 = (byte) main::j#3 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH -@begin: scope:[] from - to:@1 -main: scope:[main] from @1 - (byte[]) main::screen#0 ← ((byte*)) (word/signed word) 1024 - (byte) main::j#0 ← (byte/signed byte/word/signed word) 0 - (signed byte) main::i#0 ← - (byte/signed byte/word/signed word) 127 - to:main::@1 -main::@1: scope:[main] from main main::@2 - (byte) main::j#2 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#1 ) - (byte[]) main::screen#1 ← phi( main/(byte[]) main::screen#0 main::@2/(byte[]) main::screen#1 ) - (signed byte) main::i#2 ← phi( main/(signed byte) main::i#0 main::@2/(signed byte) main::i#1 ) - (boolean~) main::$1 ← (signed byte) main::i#2 < (byte/signed byte/word/signed word) 127 - if((boolean~) main::$1) goto main::@2 - to:main::@return -main::@2: scope:[main] from main::@1 - (byte~) main::$2 ← ((byte)) (signed byte) main::i#2 - *((byte[]) main::screen#1 + (byte) main::j#2) ← (byte~) main::$2 - (signed byte) main::i#1 ← ++ (signed byte) main::i#2 - (byte) main::j#1 ← ++ (byte) main::j#2 - to:main::@1 -main::@return: scope:[main] from main::@1 - return - to:@return -@1: scope:[] from @begin - call main param-assignment - to:@end -@end: scope:[] from @1 - -Self Phi Eliminated (byte[]) main::screen#1 -Succesful SSA optimization Pass2SelfPhiElimination -CONTROL FLOW GRAPH -@begin: scope:[] from - to:@1 -main: scope:[main] from @1 - (byte[]) main::screen#0 ← ((byte*)) (word/signed word) 1024 - (byte) main::j#0 ← (byte/signed byte/word/signed word) 0 - (signed byte) main::i#0 ← - (byte/signed byte/word/signed word) 127 - to:main::@1 -main::@1: scope:[main] from main main::@2 - (byte) main::j#2 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#1 ) - (byte[]) main::screen#1 ← phi( main/(byte[]) main::screen#0 ) - (signed byte) main::i#2 ← phi( main/(signed byte) main::i#0 main::@2/(signed byte) main::i#1 ) - (boolean~) main::$1 ← (signed byte) main::i#2 < (byte/signed byte/word/signed word) 127 - if((boolean~) main::$1) goto main::@2 - to:main::@return -main::@2: scope:[main] from main::@1 - (byte~) main::$2 ← ((byte)) (signed byte) main::i#2 - *((byte[]) main::screen#1 + (byte) main::j#2) ← (byte~) main::$2 - (signed byte) main::i#1 ← ++ (signed byte) main::i#2 - (byte) main::j#1 ← ++ (byte) main::j#2 - to:main::@1 -main::@return: scope:[main] from main::@1 - return - to:@return -@1: scope:[] from @begin - call main param-assignment - to:@end -@end: scope:[] from @1 - -Redundant Phi (byte[]) main::screen#1 (byte[]) main::screen#0 -Succesful SSA optimization Pass2RedundantPhiElimination -CONTROL FLOW GRAPH @begin: scope:[] from to:@1 main: scope:[main] from @1 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/sinus-basic.log b/src/main/java/dk/camelot64/kickc/test/ref/sinus-basic.log index f103511ad..818a2cd7a 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/sinus-basic.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/sinus-basic.log @@ -1787,30 +1787,22 @@ main: scope:[main] from @34 main::@3: scope:[main] from main (byte*) line_cursor#28 ← phi( main/(byte*) line_cursor#29 ) (byte*) char_cursor#46 ← phi( main/(byte*) char_cursor#47 ) - (byte[]) main::f_i#10 ← phi( main/(byte[]) main::f_i#0 ) - (byte[]) main::f_127#4 ← phi( main/(byte[]) main::f_127#0 ) call divFACby10 param-assignment to:main::@4 main::@4: scope:[main] from main::@3 (byte*) line_cursor#27 ← phi( main::@3/(byte*) line_cursor#28 ) (byte*) char_cursor#45 ← phi( main::@3/(byte*) char_cursor#46 ) - (byte[]) main::f_i#8 ← phi( main::@3/(byte[]) main::f_i#10 ) - (byte[]) main::f_127#1 ← phi( main::@3/(byte[]) main::f_127#4 ) - (byte*) setMEMtoFAC::mem#0 ← (byte[]) main::f_127#1 + (byte*) setMEMtoFAC::mem#0 ← (byte[]) main::f_127#0 call setMEMtoFAC param-assignment to:main::@5 main::@5: scope:[main] from main::@4 (byte*) line_cursor#26 ← phi( main::@4/(byte*) line_cursor#27 ) (byte*) char_cursor#44 ← phi( main::@4/(byte*) char_cursor#45 ) - (byte[]) main::f_127#12 ← phi( main::@4/(byte[]) main::f_127#1 ) - (byte[]) main::f_i#7 ← phi( main::@4/(byte[]) main::f_i#8 ) (byte) main::i#0 ← (byte/signed byte/word/signed word) 1 to:main::@1 main::@1: scope:[main] from main::@16 main::@5 (byte*) line_cursor#25 ← phi( main::@16/(byte*) line_cursor#3 main::@5/(byte*) line_cursor#26 ) (byte*) char_cursor#43 ← phi( main::@16/(byte*) char_cursor#12 main::@5/(byte*) char_cursor#44 ) - (byte[]) main::f_127#10 ← phi( main::@16/(byte[]) main::f_127#11 main::@5/(byte[]) main::f_127#12 ) - (byte[]) main::f_i#5 ← phi( main::@16/(byte[]) main::f_i#6 main::@5/(byte[]) main::f_i#7 ) (byte) main::i#2 ← phi( main::@16/(byte) main::i#1 main::@5/(byte) main::i#0 ) (word~) main::$3 ← ((word)) (byte) main::i#2 (word) setFAC::w#1 ← (word~) main::$3 @@ -1820,8 +1812,6 @@ main::@6: scope:[main] from main::@1 (byte) main::i#13 ← phi( main::@1/(byte) main::i#2 ) (byte*) line_cursor#24 ← phi( main::@1/(byte*) line_cursor#25 ) (byte*) char_cursor#42 ← phi( main::@1/(byte*) char_cursor#43 ) - (byte[]) main::f_127#9 ← phi( main::@1/(byte[]) main::f_127#10 ) - (byte[]) main::f_i#3 ← phi( main::@1/(byte[]) main::f_i#5 ) (byte*) mulFACbyMEM::mem#0 ← (byte*) main::f_2pi#0 call mulFACbyMEM param-assignment to:main::@7 @@ -1829,17 +1819,13 @@ main::@7: scope:[main] from main::@6 (byte) main::i#12 ← phi( main::@6/(byte) main::i#13 ) (byte*) line_cursor#23 ← phi( main::@6/(byte*) line_cursor#24 ) (byte*) char_cursor#41 ← phi( main::@6/(byte*) char_cursor#42 ) - (byte[]) main::f_127#8 ← phi( main::@6/(byte[]) main::f_127#9 ) - (byte[]) main::f_i#1 ← phi( main::@6/(byte[]) main::f_i#3 ) - (byte*) setMEMtoFAC::mem#1 ← (byte[]) main::f_i#1 + (byte*) setMEMtoFAC::mem#1 ← (byte[]) main::f_i#0 call setMEMtoFAC param-assignment to:main::@8 main::@8: scope:[main] from main::@7 (byte) main::i#11 ← phi( main::@7/(byte) main::i#12 ) (byte*) line_cursor#22 ← phi( main::@7/(byte*) line_cursor#23 ) (byte*) char_cursor#40 ← phi( main::@7/(byte*) char_cursor#41 ) - (byte[]) main::f_127#7 ← phi( main::@7/(byte[]) main::f_127#8 ) - (byte[]) main::f_i#4 ← phi( main::@7/(byte[]) main::f_i#1 ) (word) setFAC::w#2 ← (byte/signed byte/word/signed word) 25 call setFAC param-assignment to:main::@9 @@ -1847,48 +1833,36 @@ main::@9: scope:[main] from main::@8 (byte) main::i#10 ← phi( main::@8/(byte) main::i#11 ) (byte*) line_cursor#21 ← phi( main::@8/(byte*) line_cursor#22 ) (byte*) char_cursor#39 ← phi( main::@8/(byte*) char_cursor#40 ) - (byte[]) main::f_127#6 ← phi( main::@8/(byte[]) main::f_127#7 ) - (byte[]) main::f_i#2 ← phi( main::@8/(byte[]) main::f_i#4 ) - (byte*) divMEMbyFAC::mem#0 ← (byte[]) main::f_i#2 + (byte*) divMEMbyFAC::mem#0 ← (byte[]) main::f_i#0 call divMEMbyFAC param-assignment to:main::@10 main::@10: scope:[main] from main::@9 - (byte[]) main::f_i#15 ← phi( main::@9/(byte[]) main::f_i#2 ) (byte) main::i#9 ← phi( main::@9/(byte) main::i#10 ) (byte*) line_cursor#20 ← phi( main::@9/(byte*) line_cursor#21 ) (byte*) char_cursor#38 ← phi( main::@9/(byte*) char_cursor#39 ) - (byte[]) main::f_127#5 ← phi( main::@9/(byte[]) main::f_127#6 ) call sinFAC param-assignment to:main::@11 main::@11: scope:[main] from main::@10 - (byte[]) main::f_i#14 ← phi( main::@10/(byte[]) main::f_i#15 ) (byte) main::i#8 ← phi( main::@10/(byte) main::i#9 ) (byte*) line_cursor#19 ← phi( main::@10/(byte*) line_cursor#20 ) (byte*) char_cursor#37 ← phi( main::@10/(byte*) char_cursor#38 ) - (byte[]) main::f_127#2 ← phi( main::@10/(byte[]) main::f_127#5 ) - (byte*) mulFACbyMEM::mem#1 ← (byte[]) main::f_127#2 + (byte*) mulFACbyMEM::mem#1 ← (byte[]) main::f_127#0 call mulFACbyMEM param-assignment to:main::@12 main::@12: scope:[main] from main::@11 - (byte[]) main::f_i#13 ← phi( main::@11/(byte[]) main::f_i#14 ) (byte) main::i#7 ← phi( main::@11/(byte) main::i#8 ) (byte*) line_cursor#18 ← phi( main::@11/(byte*) line_cursor#19 ) (byte*) char_cursor#36 ← phi( main::@11/(byte*) char_cursor#37 ) - (byte[]) main::f_127#3 ← phi( main::@11/(byte[]) main::f_127#2 ) - (byte*) addMEMtoFAC::mem#0 ← (byte[]) main::f_127#3 + (byte*) addMEMtoFAC::mem#0 ← (byte[]) main::f_127#0 call addMEMtoFAC param-assignment to:main::@13 main::@13: scope:[main] from main::@12 - (byte[]) main::f_127#15 ← phi( main::@12/(byte[]) main::f_127#3 ) - (byte[]) main::f_i#12 ← phi( main::@12/(byte[]) main::f_i#13 ) (byte) main::i#6 ← phi( main::@12/(byte) main::i#7 ) (byte*) line_cursor#17 ← phi( main::@12/(byte*) line_cursor#18 ) (byte*) char_cursor#34 ← phi( main::@12/(byte*) char_cursor#36 ) (word) getFAC::return#2 ← call getFAC param-assignment to:main::@14 main::@14: scope:[main] from main::@13 - (byte[]) main::f_127#14 ← phi( main::@13/(byte[]) main::f_127#15 ) - (byte[]) main::f_i#11 ← phi( main::@13/(byte[]) main::f_i#12 ) (byte) main::i#5 ← phi( main::@13/(byte) main::i#6 ) (byte*) line_cursor#15 ← phi( main::@13/(byte*) line_cursor#17 ) (byte*) char_cursor#32 ← phi( main::@13/(byte*) char_cursor#34 ) @@ -1898,8 +1872,6 @@ main::@14: scope:[main] from main::@13 call print_word param-assignment to:main::@15 main::@15: scope:[main] from main::@14 - (byte[]) main::f_127#13 ← phi( main::@14/(byte[]) main::f_127#14 ) - (byte[]) main::f_i#9 ← phi( main::@14/(byte[]) main::f_i#11 ) (byte) main::i#4 ← phi( main::@14/(byte) main::i#5 ) (byte*) line_cursor#13 ← phi( main::@14/(byte*) line_cursor#15 ) (byte*) char_cursor#25 ← phi( main::@14/(byte*) char_cursor#32 ) @@ -1907,8 +1879,6 @@ main::@15: scope:[main] from main::@14 call print_ln param-assignment to:main::@16 main::@16: scope:[main] from main::@15 - (byte[]) main::f_127#11 ← phi( main::@15/(byte[]) main::f_127#13 ) - (byte[]) main::f_i#6 ← phi( main::@15/(byte[]) main::f_i#9 ) (byte) main::i#3 ← phi( main::@15/(byte) main::i#4 ) (byte*) char_cursor#26 ← phi( main::@15/(byte*) char_cursor#11 ) (byte*) line_cursor#9 ← phi( main::@15/(byte*) line_cursor#13 ) @@ -2132,30 +2102,22 @@ main: scope:[main] from @34 main::@3: scope:[main] from main (byte*) line_cursor#28 ← phi( main/(byte*) line_cursor#29 ) (byte*) char_cursor#46 ← phi( main/(byte*) char_cursor#47 ) - (byte[]) main::f_i#10 ← phi( main/(byte[]) main::f_i#0 ) - (byte[]) main::f_127#4 ← phi( main/(byte[]) main::f_127#0 ) call divFACby10 param-assignment to:main::@4 main::@4: scope:[main] from main::@3 (byte*) line_cursor#27 ← phi( main::@3/(byte*) line_cursor#28 ) (byte*) char_cursor#45 ← phi( main::@3/(byte*) char_cursor#46 ) - (byte[]) main::f_i#8 ← phi( main::@3/(byte[]) main::f_i#10 ) - (byte[]) main::f_127#1 ← phi( main::@3/(byte[]) main::f_127#4 ) - (byte*) setMEMtoFAC::mem#0 ← (byte[]) main::f_127#1 + (byte*) setMEMtoFAC::mem#0 ← (byte[]) main::f_127#0 call setMEMtoFAC param-assignment to:main::@5 main::@5: scope:[main] from main::@4 (byte*) line_cursor#26 ← phi( main::@4/(byte*) line_cursor#27 ) (byte*) char_cursor#44 ← phi( main::@4/(byte*) char_cursor#45 ) - (byte[]) main::f_127#12 ← phi( main::@4/(byte[]) main::f_127#1 ) - (byte[]) main::f_i#7 ← phi( main::@4/(byte[]) main::f_i#8 ) (byte) main::i#0 ← (byte/signed byte/word/signed word) 1 to:main::@1 main::@1: scope:[main] from main::@16 main::@5 (byte*) line_cursor#25 ← phi( main::@16/(byte*) line_cursor#3 main::@5/(byte*) line_cursor#26 ) (byte*) char_cursor#43 ← phi( main::@16/(byte*) char_cursor#12 main::@5/(byte*) char_cursor#44 ) - (byte[]) main::f_127#10 ← phi( main::@16/(byte[]) main::f_127#11 main::@5/(byte[]) main::f_127#12 ) - (byte[]) main::f_i#5 ← phi( main::@16/(byte[]) main::f_i#6 main::@5/(byte[]) main::f_i#7 ) (byte) main::i#2 ← phi( main::@16/(byte) main::i#1 main::@5/(byte) main::i#0 ) (word~) main::$3 ← ((word)) (byte) main::i#2 (word) setFAC::w#1 ← (word~) main::$3 @@ -2165,8 +2127,6 @@ main::@6: scope:[main] from main::@1 (byte) main::i#13 ← phi( main::@1/(byte) main::i#2 ) (byte*) line_cursor#24 ← phi( main::@1/(byte*) line_cursor#25 ) (byte*) char_cursor#42 ← phi( main::@1/(byte*) char_cursor#43 ) - (byte[]) main::f_127#9 ← phi( main::@1/(byte[]) main::f_127#10 ) - (byte[]) main::f_i#3 ← phi( main::@1/(byte[]) main::f_i#5 ) (byte*) mulFACbyMEM::mem#0 ← (byte*) main::f_2pi#0 call mulFACbyMEM param-assignment to:main::@7 @@ -2174,17 +2134,13 @@ main::@7: scope:[main] from main::@6 (byte) main::i#12 ← phi( main::@6/(byte) main::i#13 ) (byte*) line_cursor#23 ← phi( main::@6/(byte*) line_cursor#24 ) (byte*) char_cursor#41 ← phi( main::@6/(byte*) char_cursor#42 ) - (byte[]) main::f_127#8 ← phi( main::@6/(byte[]) main::f_127#9 ) - (byte[]) main::f_i#1 ← phi( main::@6/(byte[]) main::f_i#3 ) - (byte*) setMEMtoFAC::mem#1 ← (byte[]) main::f_i#1 + (byte*) setMEMtoFAC::mem#1 ← (byte[]) main::f_i#0 call setMEMtoFAC param-assignment to:main::@8 main::@8: scope:[main] from main::@7 (byte) main::i#11 ← phi( main::@7/(byte) main::i#12 ) (byte*) line_cursor#22 ← phi( main::@7/(byte*) line_cursor#23 ) (byte*) char_cursor#40 ← phi( main::@7/(byte*) char_cursor#41 ) - (byte[]) main::f_127#7 ← phi( main::@7/(byte[]) main::f_127#8 ) - (byte[]) main::f_i#4 ← phi( main::@7/(byte[]) main::f_i#1 ) (word) setFAC::w#2 ← (byte/signed byte/word/signed word) 25 call setFAC param-assignment to:main::@9 @@ -2192,40 +2148,30 @@ main::@9: scope:[main] from main::@8 (byte) main::i#10 ← phi( main::@8/(byte) main::i#11 ) (byte*) line_cursor#21 ← phi( main::@8/(byte*) line_cursor#22 ) (byte*) char_cursor#39 ← phi( main::@8/(byte*) char_cursor#40 ) - (byte[]) main::f_127#6 ← phi( main::@8/(byte[]) main::f_127#7 ) - (byte[]) main::f_i#2 ← phi( main::@8/(byte[]) main::f_i#4 ) - (byte*) divMEMbyFAC::mem#0 ← (byte[]) main::f_i#2 + (byte*) divMEMbyFAC::mem#0 ← (byte[]) main::f_i#0 call divMEMbyFAC param-assignment to:main::@10 main::@10: scope:[main] from main::@9 - (byte[]) main::f_i#15 ← phi( main::@9/(byte[]) main::f_i#2 ) (byte) main::i#9 ← phi( main::@9/(byte) main::i#10 ) (byte*) line_cursor#20 ← phi( main::@9/(byte*) line_cursor#21 ) (byte*) char_cursor#38 ← phi( main::@9/(byte*) char_cursor#39 ) - (byte[]) main::f_127#5 ← phi( main::@9/(byte[]) main::f_127#6 ) call sinFAC param-assignment to:main::@11 main::@11: scope:[main] from main::@10 - (byte[]) main::f_i#14 ← phi( main::@10/(byte[]) main::f_i#15 ) (byte) main::i#8 ← phi( main::@10/(byte) main::i#9 ) (byte*) line_cursor#19 ← phi( main::@10/(byte*) line_cursor#20 ) (byte*) char_cursor#37 ← phi( main::@10/(byte*) char_cursor#38 ) - (byte[]) main::f_127#2 ← phi( main::@10/(byte[]) main::f_127#5 ) - (byte*) mulFACbyMEM::mem#1 ← (byte[]) main::f_127#2 + (byte*) mulFACbyMEM::mem#1 ← (byte[]) main::f_127#0 call mulFACbyMEM param-assignment to:main::@12 main::@12: scope:[main] from main::@11 - (byte[]) main::f_i#13 ← phi( main::@11/(byte[]) main::f_i#14 ) (byte) main::i#7 ← phi( main::@11/(byte) main::i#8 ) (byte*) line_cursor#18 ← phi( main::@11/(byte*) line_cursor#19 ) (byte*) char_cursor#36 ← phi( main::@11/(byte*) char_cursor#37 ) - (byte[]) main::f_127#3 ← phi( main::@11/(byte[]) main::f_127#2 ) - (byte*) addMEMtoFAC::mem#0 ← (byte[]) main::f_127#3 + (byte*) addMEMtoFAC::mem#0 ← (byte[]) main::f_127#0 call addMEMtoFAC param-assignment to:main::@13 main::@13: scope:[main] from main::@12 - (byte[]) main::f_127#15 ← phi( main::@12/(byte[]) main::f_127#3 ) - (byte[]) main::f_i#12 ← phi( main::@12/(byte[]) main::f_i#13 ) (byte) main::i#6 ← phi( main::@12/(byte) main::i#7 ) (byte*) line_cursor#17 ← phi( main::@12/(byte*) line_cursor#18 ) (byte*) char_cursor#34 ← phi( main::@12/(byte*) char_cursor#36 ) @@ -2233,8 +2179,6 @@ main::@13: scope:[main] from main::@12 (word) getFAC::return#2 ← (word) getFAC::return#1 to:main::@14 main::@14: scope:[main] from main::@13 - (byte[]) main::f_127#14 ← phi( main::@13/(byte[]) main::f_127#15 ) - (byte[]) main::f_i#11 ← phi( main::@13/(byte[]) main::f_i#12 ) (byte) main::i#5 ← phi( main::@13/(byte) main::i#6 ) (byte*) line_cursor#15 ← phi( main::@13/(byte*) line_cursor#17 ) (byte*) char_cursor#32 ← phi( main::@13/(byte*) char_cursor#34 ) @@ -2244,8 +2188,6 @@ main::@14: scope:[main] from main::@13 call print_word param-assignment to:main::@15 main::@15: scope:[main] from main::@14 - (byte[]) main::f_127#13 ← phi( main::@14/(byte[]) main::f_127#14 ) - (byte[]) main::f_i#9 ← phi( main::@14/(byte[]) main::f_i#11 ) (byte) main::i#4 ← phi( main::@14/(byte) main::i#5 ) (byte*) line_cursor#13 ← phi( main::@14/(byte*) line_cursor#15 ) (byte*) char_cursor#25 ← phi( main::@14/(byte*) char_cursor#5 ) @@ -2253,8 +2195,6 @@ main::@15: scope:[main] from main::@14 call print_ln param-assignment to:main::@16 main::@16: scope:[main] from main::@15 - (byte[]) main::f_127#11 ← phi( main::@15/(byte[]) main::f_127#13 ) - (byte[]) main::f_i#6 ← phi( main::@15/(byte[]) main::f_i#9 ) (byte) main::i#3 ← phi( main::@15/(byte) main::i#4 ) (byte*) char_cursor#26 ← phi( main::@15/(byte*) char_cursor#2 ) (byte*) line_cursor#9 ← phi( main::@15/(byte*) line_cursor#2 ) @@ -2416,40 +2356,10 @@ INITIAL SSA SYMBOL TABLE (label) main::@return (byte[]) main::f_127 (byte[]) main::f_127#0 -(byte[]) main::f_127#1 -(byte[]) main::f_127#10 -(byte[]) main::f_127#11 -(byte[]) main::f_127#12 -(byte[]) main::f_127#13 -(byte[]) main::f_127#14 -(byte[]) main::f_127#15 -(byte[]) main::f_127#2 -(byte[]) main::f_127#3 -(byte[]) main::f_127#4 -(byte[]) main::f_127#5 -(byte[]) main::f_127#6 -(byte[]) main::f_127#7 -(byte[]) main::f_127#8 -(byte[]) main::f_127#9 (byte*) main::f_2pi (byte*) main::f_2pi#0 (byte[]) main::f_i (byte[]) main::f_i#0 -(byte[]) main::f_i#1 -(byte[]) main::f_i#10 -(byte[]) main::f_i#11 -(byte[]) main::f_i#12 -(byte[]) main::f_i#13 -(byte[]) main::f_i#14 -(byte[]) main::f_i#15 -(byte[]) main::f_i#2 -(byte[]) main::f_i#3 -(byte[]) main::f_i#4 -(byte[]) main::f_i#5 -(byte[]) main::f_i#6 -(byte[]) main::f_i#7 -(byte[]) main::f_i#8 -(byte[]) main::f_i#9 (byte) main::i (byte) main::i#0 (byte) main::i#1 @@ -2565,12 +2475,12 @@ Not aliassing across scopes: mulFACbyMEM::mem#2 mulFACbyMEM::mem#1 Not aliassing across scopes: prepareMEM::mem#4 mulFACbyMEM::mem#2 Not aliassing across scopes: char_cursor#47 char_cursor#33 Not aliassing across scopes: line_cursor#29 line_cursor#14 -Not aliassing across scopes: setMEMtoFAC::mem#0 main::f_127#1 +Not aliassing across scopes: setMEMtoFAC::mem#0 main::f_127#0 Not aliassing across scopes: mulFACbyMEM::mem#0 main::f_2pi#0 -Not aliassing across scopes: setMEMtoFAC::mem#1 main::f_i#1 -Not aliassing across scopes: divMEMbyFAC::mem#0 main::f_i#2 -Not aliassing across scopes: mulFACbyMEM::mem#1 main::f_127#2 -Not aliassing across scopes: addMEMtoFAC::mem#0 main::f_127#3 +Not aliassing across scopes: setMEMtoFAC::mem#1 main::f_i#0 +Not aliassing across scopes: divMEMbyFAC::mem#0 main::f_i#0 +Not aliassing across scopes: mulFACbyMEM::mem#1 main::f_127#0 +Not aliassing across scopes: addMEMtoFAC::mem#0 main::f_127#0 Not aliassing across scopes: getFAC::return#2 getFAC::return#1 Not aliassing across scopes: main::$12 getFAC::return#4 Not aliassing across scopes: char_cursor#25 char_cursor#5 @@ -2591,13 +2501,9 @@ Alias (byte*) char_cursor#21 = (byte*) char_cursor#7 (byte*) char_cursor#22 (byt Alias (byte*) char_cursor#10 = (byte*) char_cursor#24 (byte*) char_cursor#9 Alias (byte*) prepareMEM::mem#0 = (byte*~) setFAC::$0 Alias (word) getFAC::return#0 = (word) getFAC::w#0 (word) getFAC::return#3 (word) getFAC::return#1 -Alias (byte[]) main::f_127#0 = (byte[]) main::f_127#4 (byte[]) main::f_127#1 (byte[]) main::f_127#12 -Alias (byte[]) main::f_i#0 = (byte[]) main::f_i#10 (byte[]) main::f_i#8 (byte[]) main::f_i#7 Alias (byte*) char_cursor#44 = (byte*) char_cursor#46 (byte*) char_cursor#47 (byte*) char_cursor#45 Alias (byte*) line_cursor#26 = (byte*) line_cursor#28 (byte*) line_cursor#29 (byte*) line_cursor#27 Alias (word) setFAC::w#1 = (word~) main::$3 -Alias (byte[]) main::f_i#1 = (byte[]) main::f_i#3 (byte[]) main::f_i#5 (byte[]) main::f_i#4 (byte[]) main::f_i#2 (byte[]) main::f_i#15 (byte[]) main::f_i#14 (byte[]) main::f_i#13 (byte[]) main::f_i#12 (byte[]) main::f_i#11 (byte[]) main::f_i#9 (byte[]) main::f_i#6 -Alias (byte[]) main::f_127#10 = (byte[]) main::f_127#9 (byte[]) main::f_127#8 (byte[]) main::f_127#7 (byte[]) main::f_127#6 (byte[]) main::f_127#5 (byte[]) main::f_127#2 (byte[]) main::f_127#3 (byte[]) main::f_127#15 (byte[]) main::f_127#14 (byte[]) main::f_127#13 (byte[]) main::f_127#11 Alias (byte*) char_cursor#32 = (byte*) char_cursor#42 (byte*) char_cursor#43 (byte*) char_cursor#41 (byte*) char_cursor#40 (byte*) char_cursor#39 (byte*) char_cursor#38 (byte*) char_cursor#37 (byte*) char_cursor#36 (byte*) char_cursor#34 Alias (byte*) line_cursor#13 = (byte*) line_cursor#24 (byte*) line_cursor#25 (byte*) line_cursor#23 (byte*) line_cursor#22 (byte*) line_cursor#21 (byte*) line_cursor#20 (byte*) line_cursor#19 (byte*) line_cursor#18 (byte*) line_cursor#17 (byte*) line_cursor#15 Alias (byte) main::i#10 = (byte) main::i#13 (byte) main::i#2 (byte) main::i#12 (byte) main::i#11 (byte) main::i#9 (byte) main::i#8 (byte) main::i#7 (byte) main::i#6 (byte) main::i#5 (byte) main::i#4 (byte) main::i#3 @@ -2785,8 +2691,6 @@ main::@5: scope:[main] from main::@4 main::@1: scope:[main] from main::@16 main::@5 (byte*) line_cursor#13 ← phi( main::@16/(byte*) line_cursor#10 main::@5/(byte*) line_cursor#26 ) (byte*) char_cursor#32 ← phi( main::@16/(byte*) char_cursor#12 main::@5/(byte*) char_cursor#44 ) - (byte[]) main::f_127#10 ← phi( main::@16/(byte[]) main::f_127#10 main::@5/(byte[]) main::f_127#0 ) - (byte[]) main::f_i#1 ← phi( main::@16/(byte[]) main::f_i#1 main::@5/(byte[]) main::f_i#0 ) (byte) main::i#10 ← phi( main::@16/(byte) main::i#1 main::@5/(byte) main::i#0 ) (word) setFAC::w#1 ← ((word)) (byte) main::i#10 call setFAC param-assignment @@ -2796,7 +2700,7 @@ main::@6: scope:[main] from main::@1 call mulFACbyMEM param-assignment to:main::@7 main::@7: scope:[main] from main::@6 - (byte*) setMEMtoFAC::mem#1 ← (byte[]) main::f_i#1 + (byte*) setMEMtoFAC::mem#1 ← (byte[]) main::f_i#0 call setMEMtoFAC param-assignment to:main::@8 main::@8: scope:[main] from main::@7 @@ -2804,18 +2708,18 @@ main::@8: scope:[main] from main::@7 call setFAC param-assignment to:main::@9 main::@9: scope:[main] from main::@8 - (byte*) divMEMbyFAC::mem#0 ← (byte[]) main::f_i#1 + (byte*) divMEMbyFAC::mem#0 ← (byte[]) main::f_i#0 call divMEMbyFAC param-assignment to:main::@10 main::@10: scope:[main] from main::@9 call sinFAC param-assignment to:main::@11 main::@11: scope:[main] from main::@10 - (byte*) mulFACbyMEM::mem#1 ← (byte[]) main::f_127#10 + (byte*) mulFACbyMEM::mem#1 ← (byte[]) main::f_127#0 call mulFACbyMEM param-assignment to:main::@12 main::@12: scope:[main] from main::@11 - (byte*) addMEMtoFAC::mem#0 ← (byte[]) main::f_127#10 + (byte*) addMEMtoFAC::mem#0 ← (byte[]) main::f_127#0 call addMEMtoFAC param-assignment to:main::@13 main::@13: scope:[main] from main::@12 @@ -2874,13 +2778,11 @@ Not aliassing across scopes: prepareMEM::mem#4 mulFACbyMEM::mem#2 Not aliassing across scopes: char_cursor#44 char_cursor#0 Not aliassing across scopes: line_cursor#26 char_cursor#0 Not aliassing across scopes: setMEMtoFAC::mem#0 main::f_127#0 -Not aliassing identity: main::f_i#1 main::f_i#1 -Not aliassing identity: main::f_127#10 main::f_127#10 Not aliassing across scopes: mulFACbyMEM::mem#0 main::f_2pi#0 -Not aliassing across scopes: setMEMtoFAC::mem#1 main::f_i#1 -Not aliassing across scopes: divMEMbyFAC::mem#0 main::f_i#1 -Not aliassing across scopes: mulFACbyMEM::mem#1 main::f_127#10 -Not aliassing across scopes: addMEMtoFAC::mem#0 main::f_127#10 +Not aliassing across scopes: setMEMtoFAC::mem#1 main::f_i#0 +Not aliassing across scopes: divMEMbyFAC::mem#0 main::f_i#0 +Not aliassing across scopes: mulFACbyMEM::mem#1 main::f_127#0 +Not aliassing across scopes: addMEMtoFAC::mem#0 main::f_127#0 Not aliassing across scopes: getFAC::return#2 getFAC::return#0 Not aliassing across scopes: print_word::w#0 getFAC::return#2 Not aliassing across scopes: char_cursor#11 char_cursor#18 @@ -2889,8 +2791,6 @@ Not aliassing across scopes: char_cursor#12 line_cursor#1 Not aliassing across scopes: char_cursor#14 char_cursor#12 Not aliassing across scopes: line_cursor#11 line_cursor#10 Self Phi Eliminated (byte*) char_cursor#15 -Self Phi Eliminated (byte[]) main::f_i#1 -Self Phi Eliminated (byte[]) main::f_127#10 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -3068,8 +2968,6 @@ main::@5: scope:[main] from main::@4 main::@1: scope:[main] from main::@16 main::@5 (byte*) line_cursor#13 ← phi( main::@16/(byte*) line_cursor#10 main::@5/(byte*) line_cursor#26 ) (byte*) char_cursor#32 ← phi( main::@16/(byte*) char_cursor#12 main::@5/(byte*) char_cursor#44 ) - (byte[]) main::f_127#10 ← phi( main::@5/(byte[]) main::f_127#0 ) - (byte[]) main::f_i#1 ← phi( main::@5/(byte[]) main::f_i#0 ) (byte) main::i#10 ← phi( main::@16/(byte) main::i#1 main::@5/(byte) main::i#0 ) (word) setFAC::w#1 ← ((word)) (byte) main::i#10 call setFAC param-assignment @@ -3079,7 +2977,7 @@ main::@6: scope:[main] from main::@1 call mulFACbyMEM param-assignment to:main::@7 main::@7: scope:[main] from main::@6 - (byte*) setMEMtoFAC::mem#1 ← (byte[]) main::f_i#1 + (byte*) setMEMtoFAC::mem#1 ← (byte[]) main::f_i#0 call setMEMtoFAC param-assignment to:main::@8 main::@8: scope:[main] from main::@7 @@ -3087,18 +2985,18 @@ main::@8: scope:[main] from main::@7 call setFAC param-assignment to:main::@9 main::@9: scope:[main] from main::@8 - (byte*) divMEMbyFAC::mem#0 ← (byte[]) main::f_i#1 + (byte*) divMEMbyFAC::mem#0 ← (byte[]) main::f_i#0 call divMEMbyFAC param-assignment to:main::@10 main::@10: scope:[main] from main::@9 call sinFAC param-assignment to:main::@11 main::@11: scope:[main] from main::@10 - (byte*) mulFACbyMEM::mem#1 ← (byte[]) main::f_127#10 + (byte*) mulFACbyMEM::mem#1 ← (byte[]) main::f_127#0 call mulFACbyMEM param-assignment to:main::@12 main::@12: scope:[main] from main::@11 - (byte*) addMEMtoFAC::mem#0 ← (byte[]) main::f_127#10 + (byte*) addMEMtoFAC::mem#0 ← (byte[]) main::f_127#0 call addMEMtoFAC param-assignment to:main::@13 main::@13: scope:[main] from main::@12 @@ -3145,8 +3043,6 @@ Redundant Phi (byte*) addMEMtoFAC::mem#1 (byte*) addMEMtoFAC::mem#0 Redundant Phi (byte*) divMEMbyFAC::mem#1 (byte*) divMEMbyFAC::mem#0 Redundant Phi (byte*) char_cursor#44 (byte*) char_cursor#0 Redundant Phi (byte*) line_cursor#26 (byte*) char_cursor#0 -Redundant Phi (byte[]) main::f_i#1 (byte[]) main::f_i#0 -Redundant Phi (byte[]) main::f_127#10 (byte[]) main::f_127#0 Redundant Phi (byte*) char_cursor#11 (byte*) char_cursor#18 Redundant Phi (byte*) line_cursor#10 (byte*) line_cursor#1 Redundant Phi (byte*) char_cursor#12 (byte*) line_cursor#1 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/sinus-sprites.log b/src/main/java/dk/camelot64/kickc/test/ref/sinus-sprites.log index ab01130e6..993446aa3 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/sinus-sprites.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/sinus-sprites.log @@ -3784,13 +3784,11 @@ gen_sprites: scope:[gen_sprites] from init::@4 gen_sprites::@1: scope:[gen_sprites] from gen_sprites gen_sprites::@3 (byte*) gen_sprites::spr#2 ← phi( gen_sprites/(byte*) gen_sprites::spr#0 gen_sprites::@3/(byte*) gen_sprites::spr#1 ) (byte) gen_sprites::i#2 ← phi( gen_sprites/(byte) gen_sprites::i#0 gen_sprites::@3/(byte) gen_sprites::i#1 ) - (byte[]) gen_sprites::cml#1 ← phi( gen_sprites/(byte[]) gen_sprites::cml#0 gen_sprites::@3/(byte[]) gen_sprites::cml#2 ) - (byte) gen_chargen_sprite::ch#0 ← *((byte[]) gen_sprites::cml#1 + (byte) gen_sprites::i#2) + (byte) gen_chargen_sprite::ch#0 ← *((byte[]) gen_sprites::cml#0 + (byte) gen_sprites::i#2) (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 call gen_chargen_sprite param-assignment to:gen_sprites::@3 gen_sprites::@3: scope:[gen_sprites] from gen_sprites::@1 - (byte[]) gen_sprites::cml#2 ← phi( gen_sprites::@1/(byte[]) gen_sprites::cml#1 ) (byte) gen_sprites::i#3 ← phi( gen_sprites::@1/(byte) gen_sprites::i#2 ) (byte*) gen_sprites::spr#3 ← phi( gen_sprites::@1/(byte*) gen_sprites::spr#2 ) (byte*~) gen_sprites::$1 ← (byte*) gen_sprites::spr#3 + (byte/signed byte/word/signed word) 64 @@ -3956,10 +3954,7 @@ gen_sintab::@3: scope:[gen_sintab] from gen_sintab (byte) progress_idx#64 ← phi( gen_sintab/(byte) progress_idx#65 ) (byte*) gen_sintab::sintab#23 ← phi( gen_sintab/(byte*) gen_sintab::sintab#24 ) (byte) gen_sintab::length#23 ← phi( gen_sintab/(byte) gen_sintab::length#24 ) - (byte[]) gen_sintab::f_i#22 ← phi( gen_sintab/(byte[]) gen_sintab::f_i#0 ) (byte*) gen_sintab::f_2pi#22 ← phi( gen_sintab/(byte*) gen_sintab::f_2pi#0 ) - (byte[]) gen_sintab::f_amp#12 ← phi( gen_sintab/(byte[]) gen_sintab::f_amp#0 ) - (byte[]) gen_sintab::f_min#8 ← phi( gen_sintab/(byte[]) gen_sintab::f_min#0 ) (byte) gen_sintab::min#3 ← phi( gen_sintab/(byte) gen_sintab::min#4 ) call setARGtoFAC param-assignment to:gen_sintab::@4 @@ -3968,10 +3963,7 @@ gen_sintab::@4: scope:[gen_sintab] from gen_sintab::@3 (byte) progress_idx#63 ← phi( gen_sintab::@3/(byte) progress_idx#64 ) (byte*) gen_sintab::sintab#22 ← phi( gen_sintab::@3/(byte*) gen_sintab::sintab#23 ) (byte) gen_sintab::length#22 ← phi( gen_sintab::@3/(byte) gen_sintab::length#23 ) - (byte[]) gen_sintab::f_i#21 ← phi( gen_sintab::@3/(byte[]) gen_sintab::f_i#22 ) (byte*) gen_sintab::f_2pi#21 ← phi( gen_sintab::@3/(byte*) gen_sintab::f_2pi#22 ) - (byte[]) gen_sintab::f_amp#10 ← phi( gen_sintab::@3/(byte[]) gen_sintab::f_amp#12 ) - (byte[]) gen_sintab::f_min#5 ← phi( gen_sintab::@3/(byte[]) gen_sintab::f_min#8 ) (byte) gen_sintab::min#2 ← phi( gen_sintab::@3/(byte) gen_sintab::min#3 ) asm { lda#0ldx#0ldy#0 } (word~) gen_sintab::$3 ← ((word)) (byte) gen_sintab::min#2 @@ -3983,11 +3975,8 @@ gen_sintab::@5: scope:[gen_sintab] from gen_sintab::@4 (byte) progress_idx#62 ← phi( gen_sintab::@4/(byte) progress_idx#63 ) (byte*) gen_sintab::sintab#21 ← phi( gen_sintab::@4/(byte*) gen_sintab::sintab#22 ) (byte) gen_sintab::length#21 ← phi( gen_sintab::@4/(byte) gen_sintab::length#22 ) - (byte[]) gen_sintab::f_i#20 ← phi( gen_sintab::@4/(byte[]) gen_sintab::f_i#21 ) (byte*) gen_sintab::f_2pi#19 ← phi( gen_sintab::@4/(byte*) gen_sintab::f_2pi#21 ) - (byte[]) gen_sintab::f_amp#8 ← phi( gen_sintab::@4/(byte[]) gen_sintab::f_amp#10 ) - (byte[]) gen_sintab::f_min#1 ← phi( gen_sintab::@4/(byte[]) gen_sintab::f_min#5 ) - (byte*) setMEMtoFAC::mem#0 ← (byte[]) gen_sintab::f_min#1 + (byte*) setMEMtoFAC::mem#0 ← (byte[]) gen_sintab::f_min#0 call setMEMtoFAC param-assignment to:gen_sintab::@6 gen_sintab::@6: scope:[gen_sintab] from gen_sintab::@5 @@ -3995,10 +3984,7 @@ gen_sintab::@6: scope:[gen_sintab] from gen_sintab::@5 (byte) progress_idx#61 ← phi( gen_sintab::@5/(byte) progress_idx#62 ) (byte*) gen_sintab::sintab#20 ← phi( gen_sintab::@5/(byte*) gen_sintab::sintab#21 ) (byte) gen_sintab::length#20 ← phi( gen_sintab::@5/(byte) gen_sintab::length#21 ) - (byte[]) gen_sintab::f_i#19 ← phi( gen_sintab::@5/(byte[]) gen_sintab::f_i#20 ) (byte*) gen_sintab::f_2pi#17 ← phi( gen_sintab::@5/(byte*) gen_sintab::f_2pi#19 ) - (byte[]) gen_sintab::f_min#15 ← phi( gen_sintab::@5/(byte[]) gen_sintab::f_min#1 ) - (byte[]) gen_sintab::f_amp#5 ← phi( gen_sintab::@5/(byte[]) gen_sintab::f_amp#8 ) call subFACfromARG param-assignment to:gen_sintab::@7 gen_sintab::@7: scope:[gen_sintab] from gen_sintab::@6 @@ -4006,11 +3992,8 @@ gen_sintab::@7: scope:[gen_sintab] from gen_sintab::@6 (byte) progress_idx#60 ← phi( gen_sintab::@6/(byte) progress_idx#61 ) (byte*) gen_sintab::sintab#19 ← phi( gen_sintab::@6/(byte*) gen_sintab::sintab#20 ) (byte) gen_sintab::length#19 ← phi( gen_sintab::@6/(byte) gen_sintab::length#20 ) - (byte[]) gen_sintab::f_i#18 ← phi( gen_sintab::@6/(byte[]) gen_sintab::f_i#19 ) (byte*) gen_sintab::f_2pi#15 ← phi( gen_sintab::@6/(byte*) gen_sintab::f_2pi#17 ) - (byte[]) gen_sintab::f_min#13 ← phi( gen_sintab::@6/(byte[]) gen_sintab::f_min#15 ) - (byte[]) gen_sintab::f_amp#1 ← phi( gen_sintab::@6/(byte[]) gen_sintab::f_amp#5 ) - (byte*) setMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_amp#1 + (byte*) setMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_amp#0 call setMEMtoFAC param-assignment to:gen_sintab::@8 gen_sintab::@8: scope:[gen_sintab] from gen_sintab::@7 @@ -4018,10 +4001,7 @@ gen_sintab::@8: scope:[gen_sintab] from gen_sintab::@7 (byte) progress_idx#59 ← phi( gen_sintab::@7/(byte) progress_idx#60 ) (byte*) gen_sintab::sintab#18 ← phi( gen_sintab::@7/(byte*) gen_sintab::sintab#19 ) (byte) gen_sintab::length#18 ← phi( gen_sintab::@7/(byte) gen_sintab::length#19 ) - (byte[]) gen_sintab::f_i#16 ← phi( gen_sintab::@7/(byte[]) gen_sintab::f_i#18 ) (byte*) gen_sintab::f_2pi#13 ← phi( gen_sintab::@7/(byte*) gen_sintab::f_2pi#15 ) - (byte[]) gen_sintab::f_min#11 ← phi( gen_sintab::@7/(byte[]) gen_sintab::f_min#13 ) - (byte[]) gen_sintab::f_amp#6 ← phi( gen_sintab::@7/(byte[]) gen_sintab::f_amp#1 ) (word) setFAC::w#2 ← (byte/signed byte/word/signed word) 2 call setFAC param-assignment to:gen_sintab::@9 @@ -4030,11 +4010,8 @@ gen_sintab::@9: scope:[gen_sintab] from gen_sintab::@8 (byte) progress_idx#58 ← phi( gen_sintab::@8/(byte) progress_idx#59 ) (byte*) gen_sintab::sintab#17 ← phi( gen_sintab::@8/(byte*) gen_sintab::sintab#18 ) (byte) gen_sintab::length#17 ← phi( gen_sintab::@8/(byte) gen_sintab::length#18 ) - (byte[]) gen_sintab::f_i#14 ← phi( gen_sintab::@8/(byte[]) gen_sintab::f_i#16 ) (byte*) gen_sintab::f_2pi#11 ← phi( gen_sintab::@8/(byte*) gen_sintab::f_2pi#13 ) - (byte[]) gen_sintab::f_min#9 ← phi( gen_sintab::@8/(byte[]) gen_sintab::f_min#11 ) - (byte[]) gen_sintab::f_amp#2 ← phi( gen_sintab::@8/(byte[]) gen_sintab::f_amp#6 ) - (byte*) divMEMbyFAC::mem#0 ← (byte[]) gen_sintab::f_amp#2 + (byte*) divMEMbyFAC::mem#0 ← (byte[]) gen_sintab::f_amp#0 call divMEMbyFAC param-assignment to:gen_sintab::@10 gen_sintab::@10: scope:[gen_sintab] from gen_sintab::@9 @@ -4042,45 +4019,33 @@ gen_sintab::@10: scope:[gen_sintab] from gen_sintab::@9 (byte) progress_idx#57 ← phi( gen_sintab::@9/(byte) progress_idx#58 ) (byte*) gen_sintab::sintab#16 ← phi( gen_sintab::@9/(byte*) gen_sintab::sintab#17 ) (byte) gen_sintab::length#16 ← phi( gen_sintab::@9/(byte) gen_sintab::length#17 ) - (byte[]) gen_sintab::f_i#12 ← phi( gen_sintab::@9/(byte[]) gen_sintab::f_i#14 ) (byte*) gen_sintab::f_2pi#9 ← phi( gen_sintab::@9/(byte*) gen_sintab::f_2pi#11 ) - (byte[]) gen_sintab::f_min#6 ← phi( gen_sintab::@9/(byte[]) gen_sintab::f_min#9 ) - (byte[]) gen_sintab::f_amp#3 ← phi( gen_sintab::@9/(byte[]) gen_sintab::f_amp#2 ) - (byte*) setMEMtoFAC::mem#2 ← (byte[]) gen_sintab::f_amp#3 + (byte*) setMEMtoFAC::mem#2 ← (byte[]) gen_sintab::f_amp#0 call setMEMtoFAC param-assignment to:gen_sintab::@11 gen_sintab::@11: scope:[gen_sintab] from gen_sintab::@10 (byte*) progress_cursor#56 ← phi( gen_sintab::@10/(byte*) progress_cursor#57 ) (byte) progress_idx#56 ← phi( gen_sintab::@10/(byte) progress_idx#57 ) (byte*) gen_sintab::sintab#15 ← phi( gen_sintab::@10/(byte*) gen_sintab::sintab#16 ) - (byte[]) gen_sintab::f_amp#20 ← phi( gen_sintab::@10/(byte[]) gen_sintab::f_amp#3 ) (byte) gen_sintab::length#14 ← phi( gen_sintab::@10/(byte) gen_sintab::length#16 ) - (byte[]) gen_sintab::f_i#10 ← phi( gen_sintab::@10/(byte[]) gen_sintab::f_i#12 ) (byte*) gen_sintab::f_2pi#7 ← phi( gen_sintab::@10/(byte*) gen_sintab::f_2pi#9 ) - (byte[]) gen_sintab::f_min#2 ← phi( gen_sintab::@10/(byte[]) gen_sintab::f_min#6 ) - (byte*) addMEMtoFAC::mem#0 ← (byte[]) gen_sintab::f_min#2 + (byte*) addMEMtoFAC::mem#0 ← (byte[]) gen_sintab::f_min#0 call addMEMtoFAC param-assignment to:gen_sintab::@12 gen_sintab::@12: scope:[gen_sintab] from gen_sintab::@11 (byte*) progress_cursor#55 ← phi( gen_sintab::@11/(byte*) progress_cursor#56 ) (byte) progress_idx#55 ← phi( gen_sintab::@11/(byte) progress_idx#56 ) (byte*) gen_sintab::sintab#14 ← phi( gen_sintab::@11/(byte*) gen_sintab::sintab#15 ) - (byte[]) gen_sintab::f_amp#18 ← phi( gen_sintab::@11/(byte[]) gen_sintab::f_amp#20 ) (byte) gen_sintab::length#12 ← phi( gen_sintab::@11/(byte) gen_sintab::length#14 ) - (byte[]) gen_sintab::f_i#8 ← phi( gen_sintab::@11/(byte[]) gen_sintab::f_i#10 ) (byte*) gen_sintab::f_2pi#5 ← phi( gen_sintab::@11/(byte*) gen_sintab::f_2pi#7 ) - (byte[]) gen_sintab::f_min#3 ← phi( gen_sintab::@11/(byte[]) gen_sintab::f_min#2 ) - (byte*) setMEMtoFAC::mem#3 ← (byte[]) gen_sintab::f_min#3 + (byte*) setMEMtoFAC::mem#3 ← (byte[]) gen_sintab::f_min#0 call setMEMtoFAC param-assignment to:gen_sintab::@13 gen_sintab::@13: scope:[gen_sintab] from gen_sintab::@12 (byte*) progress_cursor#54 ← phi( gen_sintab::@12/(byte*) progress_cursor#55 ) (byte) progress_idx#54 ← phi( gen_sintab::@12/(byte) progress_idx#55 ) (byte*) gen_sintab::sintab#12 ← phi( gen_sintab::@12/(byte*) gen_sintab::sintab#14 ) - (byte[]) gen_sintab::f_min#19 ← phi( gen_sintab::@12/(byte[]) gen_sintab::f_min#3 ) - (byte[]) gen_sintab::f_amp#16 ← phi( gen_sintab::@12/(byte[]) gen_sintab::f_amp#18 ) (byte) gen_sintab::length#10 ← phi( gen_sintab::@12/(byte) gen_sintab::length#12 ) - (byte[]) gen_sintab::f_i#6 ← phi( gen_sintab::@12/(byte[]) gen_sintab::f_i#8 ) (byte*) gen_sintab::f_2pi#3 ← phi( gen_sintab::@12/(byte*) gen_sintab::f_2pi#5 ) (byte) gen_sintab::i#0 ← (byte/signed byte/word/signed word) 0 to:gen_sintab::@1 @@ -4088,10 +4053,7 @@ gen_sintab::@1: scope:[gen_sintab] from gen_sintab::@13 gen_sintab::@23 (byte*) progress_cursor#53 ← phi( gen_sintab::@13/(byte*) progress_cursor#54 gen_sintab::@23/(byte*) progress_cursor#12 ) (byte) progress_idx#53 ← phi( gen_sintab::@13/(byte) progress_idx#54 gen_sintab::@23/(byte) progress_idx#13 ) (byte*) gen_sintab::sintab#11 ← phi( gen_sintab::@13/(byte*) gen_sintab::sintab#12 gen_sintab::@23/(byte*) gen_sintab::sintab#13 ) - (byte[]) gen_sintab::f_min#18 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_min#19 gen_sintab::@23/(byte[]) gen_sintab::f_min#20 ) - (byte[]) gen_sintab::f_amp#15 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_amp#16 gen_sintab::@23/(byte[]) gen_sintab::f_amp#17 ) (byte) gen_sintab::length#8 ← phi( gen_sintab::@13/(byte) gen_sintab::length#10 gen_sintab::@23/(byte) gen_sintab::length#3 ) - (byte[]) gen_sintab::f_i#5 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_i#6 gen_sintab::@23/(byte[]) gen_sintab::f_i#7 ) (byte*) gen_sintab::f_2pi#2 ← phi( gen_sintab::@13/(byte*) gen_sintab::f_2pi#3 gen_sintab::@23/(byte*) gen_sintab::f_2pi#4 ) (byte) gen_sintab::i#2 ← phi( gen_sintab::@13/(byte) gen_sintab::i#0 gen_sintab::@23/(byte) gen_sintab::i#1 ) (word~) gen_sintab::$13 ← ((word)) (byte) gen_sintab::i#2 @@ -4103,10 +4065,7 @@ gen_sintab::@14: scope:[gen_sintab] from gen_sintab::@1 (byte) progress_idx#52 ← phi( gen_sintab::@1/(byte) progress_idx#53 ) (byte) gen_sintab::i#12 ← phi( gen_sintab::@1/(byte) gen_sintab::i#2 ) (byte*) gen_sintab::sintab#10 ← phi( gen_sintab::@1/(byte*) gen_sintab::sintab#11 ) - (byte[]) gen_sintab::f_min#17 ← phi( gen_sintab::@1/(byte[]) gen_sintab::f_min#18 ) - (byte[]) gen_sintab::f_amp#14 ← phi( gen_sintab::@1/(byte[]) gen_sintab::f_amp#15 ) (byte) gen_sintab::length#6 ← phi( gen_sintab::@1/(byte) gen_sintab::length#8 ) - (byte[]) gen_sintab::f_i#3 ← phi( gen_sintab::@1/(byte[]) gen_sintab::f_i#5 ) (byte*) gen_sintab::f_2pi#1 ← phi( gen_sintab::@1/(byte*) gen_sintab::f_2pi#2 ) (byte*) mulFACbyMEM::mem#0 ← (byte*) gen_sintab::f_2pi#1 call mulFACbyMEM param-assignment @@ -4117,11 +4076,8 @@ gen_sintab::@15: scope:[gen_sintab] from gen_sintab::@14 (byte) progress_idx#51 ← phi( gen_sintab::@14/(byte) progress_idx#52 ) (byte) gen_sintab::i#11 ← phi( gen_sintab::@14/(byte) gen_sintab::i#12 ) (byte*) gen_sintab::sintab#9 ← phi( gen_sintab::@14/(byte*) gen_sintab::sintab#10 ) - (byte[]) gen_sintab::f_min#16 ← phi( gen_sintab::@14/(byte[]) gen_sintab::f_min#17 ) - (byte[]) gen_sintab::f_amp#13 ← phi( gen_sintab::@14/(byte[]) gen_sintab::f_amp#14 ) (byte) gen_sintab::length#4 ← phi( gen_sintab::@14/(byte) gen_sintab::length#6 ) - (byte[]) gen_sintab::f_i#1 ← phi( gen_sintab::@14/(byte[]) gen_sintab::f_i#3 ) - (byte*) setMEMtoFAC::mem#4 ← (byte[]) gen_sintab::f_i#1 + (byte*) setMEMtoFAC::mem#4 ← (byte[]) gen_sintab::f_i#0 call setMEMtoFAC param-assignment to:gen_sintab::@16 gen_sintab::@16: scope:[gen_sintab] from gen_sintab::@15 @@ -4130,9 +4086,6 @@ gen_sintab::@16: scope:[gen_sintab] from gen_sintab::@15 (byte) progress_idx#50 ← phi( gen_sintab::@15/(byte) progress_idx#51 ) (byte) gen_sintab::i#10 ← phi( gen_sintab::@15/(byte) gen_sintab::i#11 ) (byte*) gen_sintab::sintab#8 ← phi( gen_sintab::@15/(byte*) gen_sintab::sintab#9 ) - (byte[]) gen_sintab::f_min#14 ← phi( gen_sintab::@15/(byte[]) gen_sintab::f_min#16 ) - (byte[]) gen_sintab::f_amp#11 ← phi( gen_sintab::@15/(byte[]) gen_sintab::f_amp#13 ) - (byte[]) gen_sintab::f_i#4 ← phi( gen_sintab::@15/(byte[]) gen_sintab::f_i#1 ) (byte) gen_sintab::length#2 ← phi( gen_sintab::@15/(byte) gen_sintab::length#4 ) (word~) gen_sintab::$17 ← ((word)) (byte) gen_sintab::length#2 (word) setFAC::w#4 ← (word~) gen_sintab::$17 @@ -4145,54 +4098,39 @@ gen_sintab::@17: scope:[gen_sintab] from gen_sintab::@16 (byte) progress_idx#49 ← phi( gen_sintab::@16/(byte) progress_idx#50 ) (byte) gen_sintab::i#9 ← phi( gen_sintab::@16/(byte) gen_sintab::i#10 ) (byte*) gen_sintab::sintab#7 ← phi( gen_sintab::@16/(byte*) gen_sintab::sintab#8 ) - (byte[]) gen_sintab::f_min#12 ← phi( gen_sintab::@16/(byte[]) gen_sintab::f_min#14 ) - (byte[]) gen_sintab::f_amp#9 ← phi( gen_sintab::@16/(byte[]) gen_sintab::f_amp#11 ) - (byte[]) gen_sintab::f_i#2 ← phi( gen_sintab::@16/(byte[]) gen_sintab::f_i#4 ) - (byte*) divMEMbyFAC::mem#1 ← (byte[]) gen_sintab::f_i#2 + (byte*) divMEMbyFAC::mem#1 ← (byte[]) gen_sintab::f_i#0 call divMEMbyFAC param-assignment to:gen_sintab::@18 gen_sintab::@18: scope:[gen_sintab] from gen_sintab::@17 - (byte[]) gen_sintab::f_i#17 ← phi( gen_sintab::@17/(byte[]) gen_sintab::f_i#2 ) (byte*) gen_sintab::f_2pi#14 ← phi( gen_sintab::@17/(byte*) gen_sintab::f_2pi#16 ) (byte) gen_sintab::length#13 ← phi( gen_sintab::@17/(byte) gen_sintab::length#15 ) (byte*) progress_cursor#47 ← phi( gen_sintab::@17/(byte*) progress_cursor#49 ) (byte) progress_idx#47 ← phi( gen_sintab::@17/(byte) progress_idx#49 ) (byte) gen_sintab::i#8 ← phi( gen_sintab::@17/(byte) gen_sintab::i#9 ) (byte*) gen_sintab::sintab#6 ← phi( gen_sintab::@17/(byte*) gen_sintab::sintab#7 ) - (byte[]) gen_sintab::f_min#10 ← phi( gen_sintab::@17/(byte[]) gen_sintab::f_min#12 ) - (byte[]) gen_sintab::f_amp#7 ← phi( gen_sintab::@17/(byte[]) gen_sintab::f_amp#9 ) call sinFAC param-assignment to:gen_sintab::@19 gen_sintab::@19: scope:[gen_sintab] from gen_sintab::@18 - (byte[]) gen_sintab::f_i#15 ← phi( gen_sintab::@18/(byte[]) gen_sintab::f_i#17 ) (byte*) gen_sintab::f_2pi#12 ← phi( gen_sintab::@18/(byte*) gen_sintab::f_2pi#14 ) (byte) gen_sintab::length#11 ← phi( gen_sintab::@18/(byte) gen_sintab::length#13 ) (byte*) progress_cursor#45 ← phi( gen_sintab::@18/(byte*) progress_cursor#47 ) (byte) progress_idx#45 ← phi( gen_sintab::@18/(byte) progress_idx#47 ) (byte) gen_sintab::i#7 ← phi( gen_sintab::@18/(byte) gen_sintab::i#8 ) (byte*) gen_sintab::sintab#5 ← phi( gen_sintab::@18/(byte*) gen_sintab::sintab#6 ) - (byte[]) gen_sintab::f_min#7 ← phi( gen_sintab::@18/(byte[]) gen_sintab::f_min#10 ) - (byte[]) gen_sintab::f_amp#4 ← phi( gen_sintab::@18/(byte[]) gen_sintab::f_amp#7 ) - (byte*) mulFACbyMEM::mem#1 ← (byte[]) gen_sintab::f_amp#4 + (byte*) mulFACbyMEM::mem#1 ← (byte[]) gen_sintab::f_amp#0 call mulFACbyMEM param-assignment to:gen_sintab::@20 gen_sintab::@20: scope:[gen_sintab] from gen_sintab::@19 - (byte[]) gen_sintab::f_amp#22 ← phi( gen_sintab::@19/(byte[]) gen_sintab::f_amp#4 ) - (byte[]) gen_sintab::f_i#13 ← phi( gen_sintab::@19/(byte[]) gen_sintab::f_i#15 ) (byte*) gen_sintab::f_2pi#10 ← phi( gen_sintab::@19/(byte*) gen_sintab::f_2pi#12 ) (byte) gen_sintab::length#9 ← phi( gen_sintab::@19/(byte) gen_sintab::length#11 ) (byte*) progress_cursor#42 ← phi( gen_sintab::@19/(byte*) progress_cursor#45 ) (byte) progress_idx#42 ← phi( gen_sintab::@19/(byte) progress_idx#45 ) (byte) gen_sintab::i#6 ← phi( gen_sintab::@19/(byte) gen_sintab::i#7 ) (byte*) gen_sintab::sintab#4 ← phi( gen_sintab::@19/(byte*) gen_sintab::sintab#5 ) - (byte[]) gen_sintab::f_min#4 ← phi( gen_sintab::@19/(byte[]) gen_sintab::f_min#7 ) - (byte*) addMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_min#4 + (byte*) addMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_min#0 call addMEMtoFAC param-assignment to:gen_sintab::@21 gen_sintab::@21: scope:[gen_sintab] from gen_sintab::@20 - (byte[]) gen_sintab::f_min#22 ← phi( gen_sintab::@20/(byte[]) gen_sintab::f_min#4 ) - (byte[]) gen_sintab::f_amp#21 ← phi( gen_sintab::@20/(byte[]) gen_sintab::f_amp#22 ) - (byte[]) gen_sintab::f_i#11 ← phi( gen_sintab::@20/(byte[]) gen_sintab::f_i#13 ) (byte*) gen_sintab::f_2pi#8 ← phi( gen_sintab::@20/(byte*) gen_sintab::f_2pi#10 ) (byte) gen_sintab::length#7 ← phi( gen_sintab::@20/(byte) gen_sintab::length#9 ) (byte*) progress_cursor#38 ← phi( gen_sintab::@20/(byte*) progress_cursor#42 ) @@ -4202,9 +4140,6 @@ gen_sintab::@21: scope:[gen_sintab] from gen_sintab::@20 (word) getFAC::return#2 ← call getFAC param-assignment to:gen_sintab::@22 gen_sintab::@22: scope:[gen_sintab] from gen_sintab::@21 - (byte[]) gen_sintab::f_min#21 ← phi( gen_sintab::@21/(byte[]) gen_sintab::f_min#22 ) - (byte[]) gen_sintab::f_amp#19 ← phi( gen_sintab::@21/(byte[]) gen_sintab::f_amp#21 ) - (byte[]) gen_sintab::f_i#9 ← phi( gen_sintab::@21/(byte[]) gen_sintab::f_i#11 ) (byte*) gen_sintab::f_2pi#6 ← phi( gen_sintab::@21/(byte*) gen_sintab::f_2pi#8 ) (byte) gen_sintab::length#5 ← phi( gen_sintab::@21/(byte) gen_sintab::length#7 ) (byte*) progress_cursor#34 ← phi( gen_sintab::@21/(byte*) progress_cursor#38 ) @@ -4219,9 +4154,6 @@ gen_sintab::@22: scope:[gen_sintab] from gen_sintab::@21 to:gen_sintab::@23 gen_sintab::@23: scope:[gen_sintab] from gen_sintab::@22 (byte*) gen_sintab::sintab#13 ← phi( gen_sintab::@22/(byte*) gen_sintab::sintab#2 ) - (byte[]) gen_sintab::f_min#20 ← phi( gen_sintab::@22/(byte[]) gen_sintab::f_min#21 ) - (byte[]) gen_sintab::f_amp#17 ← phi( gen_sintab::@22/(byte[]) gen_sintab::f_amp#19 ) - (byte[]) gen_sintab::f_i#7 ← phi( gen_sintab::@22/(byte[]) gen_sintab::f_i#9 ) (byte*) gen_sintab::f_2pi#4 ← phi( gen_sintab::@22/(byte*) gen_sintab::f_2pi#6 ) (byte) gen_sintab::length#3 ← phi( gen_sintab::@22/(byte) gen_sintab::length#5 ) (byte) gen_sintab::i#4 ← phi( gen_sintab::@22/(byte) gen_sintab::i#3 ) @@ -4753,13 +4685,11 @@ gen_sprites: scope:[gen_sprites] from init::@4 gen_sprites::@1: scope:[gen_sprites] from gen_sprites gen_sprites::@3 (byte*) gen_sprites::spr#2 ← phi( gen_sprites/(byte*) gen_sprites::spr#0 gen_sprites::@3/(byte*) gen_sprites::spr#1 ) (byte) gen_sprites::i#2 ← phi( gen_sprites/(byte) gen_sprites::i#0 gen_sprites::@3/(byte) gen_sprites::i#1 ) - (byte[]) gen_sprites::cml#1 ← phi( gen_sprites/(byte[]) gen_sprites::cml#0 gen_sprites::@3/(byte[]) gen_sprites::cml#2 ) - (byte) gen_chargen_sprite::ch#0 ← *((byte[]) gen_sprites::cml#1 + (byte) gen_sprites::i#2) + (byte) gen_chargen_sprite::ch#0 ← *((byte[]) gen_sprites::cml#0 + (byte) gen_sprites::i#2) (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 call gen_chargen_sprite param-assignment to:gen_sprites::@3 gen_sprites::@3: scope:[gen_sprites] from gen_sprites::@1 - (byte[]) gen_sprites::cml#2 ← phi( gen_sprites::@1/(byte[]) gen_sprites::cml#1 ) (byte) gen_sprites::i#3 ← phi( gen_sprites::@1/(byte) gen_sprites::i#2 ) (byte*) gen_sprites::spr#3 ← phi( gen_sprites::@1/(byte*) gen_sprites::spr#2 ) (byte*~) gen_sprites::$1 ← (byte*) gen_sprites::spr#3 + (byte/signed byte/word/signed word) 64 @@ -4925,10 +4855,7 @@ gen_sintab::@3: scope:[gen_sintab] from gen_sintab (byte) progress_idx#64 ← phi( gen_sintab/(byte) progress_idx#65 ) (byte*) gen_sintab::sintab#23 ← phi( gen_sintab/(byte*) gen_sintab::sintab#24 ) (byte) gen_sintab::length#23 ← phi( gen_sintab/(byte) gen_sintab::length#24 ) - (byte[]) gen_sintab::f_i#22 ← phi( gen_sintab/(byte[]) gen_sintab::f_i#0 ) (byte*) gen_sintab::f_2pi#22 ← phi( gen_sintab/(byte*) gen_sintab::f_2pi#0 ) - (byte[]) gen_sintab::f_amp#12 ← phi( gen_sintab/(byte[]) gen_sintab::f_amp#0 ) - (byte[]) gen_sintab::f_min#8 ← phi( gen_sintab/(byte[]) gen_sintab::f_min#0 ) (byte) gen_sintab::min#3 ← phi( gen_sintab/(byte) gen_sintab::min#4 ) call setARGtoFAC param-assignment to:gen_sintab::@4 @@ -4937,10 +4864,7 @@ gen_sintab::@4: scope:[gen_sintab] from gen_sintab::@3 (byte) progress_idx#63 ← phi( gen_sintab::@3/(byte) progress_idx#64 ) (byte*) gen_sintab::sintab#22 ← phi( gen_sintab::@3/(byte*) gen_sintab::sintab#23 ) (byte) gen_sintab::length#22 ← phi( gen_sintab::@3/(byte) gen_sintab::length#23 ) - (byte[]) gen_sintab::f_i#21 ← phi( gen_sintab::@3/(byte[]) gen_sintab::f_i#22 ) (byte*) gen_sintab::f_2pi#21 ← phi( gen_sintab::@3/(byte*) gen_sintab::f_2pi#22 ) - (byte[]) gen_sintab::f_amp#10 ← phi( gen_sintab::@3/(byte[]) gen_sintab::f_amp#12 ) - (byte[]) gen_sintab::f_min#5 ← phi( gen_sintab::@3/(byte[]) gen_sintab::f_min#8 ) (byte) gen_sintab::min#2 ← phi( gen_sintab::@3/(byte) gen_sintab::min#3 ) asm { lda#0ldx#0ldy#0 } (word~) gen_sintab::$3 ← ((word)) (byte) gen_sintab::min#2 @@ -4952,11 +4876,8 @@ gen_sintab::@5: scope:[gen_sintab] from gen_sintab::@4 (byte) progress_idx#62 ← phi( gen_sintab::@4/(byte) progress_idx#63 ) (byte*) gen_sintab::sintab#21 ← phi( gen_sintab::@4/(byte*) gen_sintab::sintab#22 ) (byte) gen_sintab::length#21 ← phi( gen_sintab::@4/(byte) gen_sintab::length#22 ) - (byte[]) gen_sintab::f_i#20 ← phi( gen_sintab::@4/(byte[]) gen_sintab::f_i#21 ) (byte*) gen_sintab::f_2pi#19 ← phi( gen_sintab::@4/(byte*) gen_sintab::f_2pi#21 ) - (byte[]) gen_sintab::f_amp#8 ← phi( gen_sintab::@4/(byte[]) gen_sintab::f_amp#10 ) - (byte[]) gen_sintab::f_min#1 ← phi( gen_sintab::@4/(byte[]) gen_sintab::f_min#5 ) - (byte*) setMEMtoFAC::mem#0 ← (byte[]) gen_sintab::f_min#1 + (byte*) setMEMtoFAC::mem#0 ← (byte[]) gen_sintab::f_min#0 call setMEMtoFAC param-assignment to:gen_sintab::@6 gen_sintab::@6: scope:[gen_sintab] from gen_sintab::@5 @@ -4964,10 +4885,7 @@ gen_sintab::@6: scope:[gen_sintab] from gen_sintab::@5 (byte) progress_idx#61 ← phi( gen_sintab::@5/(byte) progress_idx#62 ) (byte*) gen_sintab::sintab#20 ← phi( gen_sintab::@5/(byte*) gen_sintab::sintab#21 ) (byte) gen_sintab::length#20 ← phi( gen_sintab::@5/(byte) gen_sintab::length#21 ) - (byte[]) gen_sintab::f_i#19 ← phi( gen_sintab::@5/(byte[]) gen_sintab::f_i#20 ) (byte*) gen_sintab::f_2pi#17 ← phi( gen_sintab::@5/(byte*) gen_sintab::f_2pi#19 ) - (byte[]) gen_sintab::f_min#15 ← phi( gen_sintab::@5/(byte[]) gen_sintab::f_min#1 ) - (byte[]) gen_sintab::f_amp#5 ← phi( gen_sintab::@5/(byte[]) gen_sintab::f_amp#8 ) call subFACfromARG param-assignment to:gen_sintab::@7 gen_sintab::@7: scope:[gen_sintab] from gen_sintab::@6 @@ -4975,11 +4893,8 @@ gen_sintab::@7: scope:[gen_sintab] from gen_sintab::@6 (byte) progress_idx#60 ← phi( gen_sintab::@6/(byte) progress_idx#61 ) (byte*) gen_sintab::sintab#19 ← phi( gen_sintab::@6/(byte*) gen_sintab::sintab#20 ) (byte) gen_sintab::length#19 ← phi( gen_sintab::@6/(byte) gen_sintab::length#20 ) - (byte[]) gen_sintab::f_i#18 ← phi( gen_sintab::@6/(byte[]) gen_sintab::f_i#19 ) (byte*) gen_sintab::f_2pi#15 ← phi( gen_sintab::@6/(byte*) gen_sintab::f_2pi#17 ) - (byte[]) gen_sintab::f_min#13 ← phi( gen_sintab::@6/(byte[]) gen_sintab::f_min#15 ) - (byte[]) gen_sintab::f_amp#1 ← phi( gen_sintab::@6/(byte[]) gen_sintab::f_amp#5 ) - (byte*) setMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_amp#1 + (byte*) setMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_amp#0 call setMEMtoFAC param-assignment to:gen_sintab::@8 gen_sintab::@8: scope:[gen_sintab] from gen_sintab::@7 @@ -4987,10 +4902,7 @@ gen_sintab::@8: scope:[gen_sintab] from gen_sintab::@7 (byte) progress_idx#59 ← phi( gen_sintab::@7/(byte) progress_idx#60 ) (byte*) gen_sintab::sintab#18 ← phi( gen_sintab::@7/(byte*) gen_sintab::sintab#19 ) (byte) gen_sintab::length#18 ← phi( gen_sintab::@7/(byte) gen_sintab::length#19 ) - (byte[]) gen_sintab::f_i#16 ← phi( gen_sintab::@7/(byte[]) gen_sintab::f_i#18 ) (byte*) gen_sintab::f_2pi#13 ← phi( gen_sintab::@7/(byte*) gen_sintab::f_2pi#15 ) - (byte[]) gen_sintab::f_min#11 ← phi( gen_sintab::@7/(byte[]) gen_sintab::f_min#13 ) - (byte[]) gen_sintab::f_amp#6 ← phi( gen_sintab::@7/(byte[]) gen_sintab::f_amp#1 ) (word) setFAC::w#2 ← (byte/signed byte/word/signed word) 2 call setFAC param-assignment to:gen_sintab::@9 @@ -4999,11 +4911,8 @@ gen_sintab::@9: scope:[gen_sintab] from gen_sintab::@8 (byte) progress_idx#58 ← phi( gen_sintab::@8/(byte) progress_idx#59 ) (byte*) gen_sintab::sintab#17 ← phi( gen_sintab::@8/(byte*) gen_sintab::sintab#18 ) (byte) gen_sintab::length#17 ← phi( gen_sintab::@8/(byte) gen_sintab::length#18 ) - (byte[]) gen_sintab::f_i#14 ← phi( gen_sintab::@8/(byte[]) gen_sintab::f_i#16 ) (byte*) gen_sintab::f_2pi#11 ← phi( gen_sintab::@8/(byte*) gen_sintab::f_2pi#13 ) - (byte[]) gen_sintab::f_min#9 ← phi( gen_sintab::@8/(byte[]) gen_sintab::f_min#11 ) - (byte[]) gen_sintab::f_amp#2 ← phi( gen_sintab::@8/(byte[]) gen_sintab::f_amp#6 ) - (byte*) divMEMbyFAC::mem#0 ← (byte[]) gen_sintab::f_amp#2 + (byte*) divMEMbyFAC::mem#0 ← (byte[]) gen_sintab::f_amp#0 call divMEMbyFAC param-assignment to:gen_sintab::@10 gen_sintab::@10: scope:[gen_sintab] from gen_sintab::@9 @@ -5011,45 +4920,33 @@ gen_sintab::@10: scope:[gen_sintab] from gen_sintab::@9 (byte) progress_idx#57 ← phi( gen_sintab::@9/(byte) progress_idx#58 ) (byte*) gen_sintab::sintab#16 ← phi( gen_sintab::@9/(byte*) gen_sintab::sintab#17 ) (byte) gen_sintab::length#16 ← phi( gen_sintab::@9/(byte) gen_sintab::length#17 ) - (byte[]) gen_sintab::f_i#12 ← phi( gen_sintab::@9/(byte[]) gen_sintab::f_i#14 ) (byte*) gen_sintab::f_2pi#9 ← phi( gen_sintab::@9/(byte*) gen_sintab::f_2pi#11 ) - (byte[]) gen_sintab::f_min#6 ← phi( gen_sintab::@9/(byte[]) gen_sintab::f_min#9 ) - (byte[]) gen_sintab::f_amp#3 ← phi( gen_sintab::@9/(byte[]) gen_sintab::f_amp#2 ) - (byte*) setMEMtoFAC::mem#2 ← (byte[]) gen_sintab::f_amp#3 + (byte*) setMEMtoFAC::mem#2 ← (byte[]) gen_sintab::f_amp#0 call setMEMtoFAC param-assignment to:gen_sintab::@11 gen_sintab::@11: scope:[gen_sintab] from gen_sintab::@10 (byte*) progress_cursor#56 ← phi( gen_sintab::@10/(byte*) progress_cursor#57 ) (byte) progress_idx#56 ← phi( gen_sintab::@10/(byte) progress_idx#57 ) (byte*) gen_sintab::sintab#15 ← phi( gen_sintab::@10/(byte*) gen_sintab::sintab#16 ) - (byte[]) gen_sintab::f_amp#20 ← phi( gen_sintab::@10/(byte[]) gen_sintab::f_amp#3 ) (byte) gen_sintab::length#14 ← phi( gen_sintab::@10/(byte) gen_sintab::length#16 ) - (byte[]) gen_sintab::f_i#10 ← phi( gen_sintab::@10/(byte[]) gen_sintab::f_i#12 ) (byte*) gen_sintab::f_2pi#7 ← phi( gen_sintab::@10/(byte*) gen_sintab::f_2pi#9 ) - (byte[]) gen_sintab::f_min#2 ← phi( gen_sintab::@10/(byte[]) gen_sintab::f_min#6 ) - (byte*) addMEMtoFAC::mem#0 ← (byte[]) gen_sintab::f_min#2 + (byte*) addMEMtoFAC::mem#0 ← (byte[]) gen_sintab::f_min#0 call addMEMtoFAC param-assignment to:gen_sintab::@12 gen_sintab::@12: scope:[gen_sintab] from gen_sintab::@11 (byte*) progress_cursor#55 ← phi( gen_sintab::@11/(byte*) progress_cursor#56 ) (byte) progress_idx#55 ← phi( gen_sintab::@11/(byte) progress_idx#56 ) (byte*) gen_sintab::sintab#14 ← phi( gen_sintab::@11/(byte*) gen_sintab::sintab#15 ) - (byte[]) gen_sintab::f_amp#18 ← phi( gen_sintab::@11/(byte[]) gen_sintab::f_amp#20 ) (byte) gen_sintab::length#12 ← phi( gen_sintab::@11/(byte) gen_sintab::length#14 ) - (byte[]) gen_sintab::f_i#8 ← phi( gen_sintab::@11/(byte[]) gen_sintab::f_i#10 ) (byte*) gen_sintab::f_2pi#5 ← phi( gen_sintab::@11/(byte*) gen_sintab::f_2pi#7 ) - (byte[]) gen_sintab::f_min#3 ← phi( gen_sintab::@11/(byte[]) gen_sintab::f_min#2 ) - (byte*) setMEMtoFAC::mem#3 ← (byte[]) gen_sintab::f_min#3 + (byte*) setMEMtoFAC::mem#3 ← (byte[]) gen_sintab::f_min#0 call setMEMtoFAC param-assignment to:gen_sintab::@13 gen_sintab::@13: scope:[gen_sintab] from gen_sintab::@12 (byte*) progress_cursor#54 ← phi( gen_sintab::@12/(byte*) progress_cursor#55 ) (byte) progress_idx#54 ← phi( gen_sintab::@12/(byte) progress_idx#55 ) (byte*) gen_sintab::sintab#12 ← phi( gen_sintab::@12/(byte*) gen_sintab::sintab#14 ) - (byte[]) gen_sintab::f_min#19 ← phi( gen_sintab::@12/(byte[]) gen_sintab::f_min#3 ) - (byte[]) gen_sintab::f_amp#16 ← phi( gen_sintab::@12/(byte[]) gen_sintab::f_amp#18 ) (byte) gen_sintab::length#10 ← phi( gen_sintab::@12/(byte) gen_sintab::length#12 ) - (byte[]) gen_sintab::f_i#6 ← phi( gen_sintab::@12/(byte[]) gen_sintab::f_i#8 ) (byte*) gen_sintab::f_2pi#3 ← phi( gen_sintab::@12/(byte*) gen_sintab::f_2pi#5 ) (byte) gen_sintab::i#0 ← (byte/signed byte/word/signed word) 0 to:gen_sintab::@1 @@ -5057,10 +4954,7 @@ gen_sintab::@1: scope:[gen_sintab] from gen_sintab::@13 gen_sintab::@23 (byte*) progress_cursor#53 ← phi( gen_sintab::@13/(byte*) progress_cursor#54 gen_sintab::@23/(byte*) progress_cursor#12 ) (byte) progress_idx#53 ← phi( gen_sintab::@13/(byte) progress_idx#54 gen_sintab::@23/(byte) progress_idx#13 ) (byte*) gen_sintab::sintab#11 ← phi( gen_sintab::@13/(byte*) gen_sintab::sintab#12 gen_sintab::@23/(byte*) gen_sintab::sintab#13 ) - (byte[]) gen_sintab::f_min#18 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_min#19 gen_sintab::@23/(byte[]) gen_sintab::f_min#20 ) - (byte[]) gen_sintab::f_amp#15 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_amp#16 gen_sintab::@23/(byte[]) gen_sintab::f_amp#17 ) (byte) gen_sintab::length#8 ← phi( gen_sintab::@13/(byte) gen_sintab::length#10 gen_sintab::@23/(byte) gen_sintab::length#3 ) - (byte[]) gen_sintab::f_i#5 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_i#6 gen_sintab::@23/(byte[]) gen_sintab::f_i#7 ) (byte*) gen_sintab::f_2pi#2 ← phi( gen_sintab::@13/(byte*) gen_sintab::f_2pi#3 gen_sintab::@23/(byte*) gen_sintab::f_2pi#4 ) (byte) gen_sintab::i#2 ← phi( gen_sintab::@13/(byte) gen_sintab::i#0 gen_sintab::@23/(byte) gen_sintab::i#1 ) (word~) gen_sintab::$13 ← ((word)) (byte) gen_sintab::i#2 @@ -5072,10 +4966,7 @@ gen_sintab::@14: scope:[gen_sintab] from gen_sintab::@1 (byte) progress_idx#52 ← phi( gen_sintab::@1/(byte) progress_idx#53 ) (byte) gen_sintab::i#12 ← phi( gen_sintab::@1/(byte) gen_sintab::i#2 ) (byte*) gen_sintab::sintab#10 ← phi( gen_sintab::@1/(byte*) gen_sintab::sintab#11 ) - (byte[]) gen_sintab::f_min#17 ← phi( gen_sintab::@1/(byte[]) gen_sintab::f_min#18 ) - (byte[]) gen_sintab::f_amp#14 ← phi( gen_sintab::@1/(byte[]) gen_sintab::f_amp#15 ) (byte) gen_sintab::length#6 ← phi( gen_sintab::@1/(byte) gen_sintab::length#8 ) - (byte[]) gen_sintab::f_i#3 ← phi( gen_sintab::@1/(byte[]) gen_sintab::f_i#5 ) (byte*) gen_sintab::f_2pi#1 ← phi( gen_sintab::@1/(byte*) gen_sintab::f_2pi#2 ) (byte*) mulFACbyMEM::mem#0 ← (byte*) gen_sintab::f_2pi#1 call mulFACbyMEM param-assignment @@ -5086,11 +4977,8 @@ gen_sintab::@15: scope:[gen_sintab] from gen_sintab::@14 (byte) progress_idx#51 ← phi( gen_sintab::@14/(byte) progress_idx#52 ) (byte) gen_sintab::i#11 ← phi( gen_sintab::@14/(byte) gen_sintab::i#12 ) (byte*) gen_sintab::sintab#9 ← phi( gen_sintab::@14/(byte*) gen_sintab::sintab#10 ) - (byte[]) gen_sintab::f_min#16 ← phi( gen_sintab::@14/(byte[]) gen_sintab::f_min#17 ) - (byte[]) gen_sintab::f_amp#13 ← phi( gen_sintab::@14/(byte[]) gen_sintab::f_amp#14 ) (byte) gen_sintab::length#4 ← phi( gen_sintab::@14/(byte) gen_sintab::length#6 ) - (byte[]) gen_sintab::f_i#1 ← phi( gen_sintab::@14/(byte[]) gen_sintab::f_i#3 ) - (byte*) setMEMtoFAC::mem#4 ← (byte[]) gen_sintab::f_i#1 + (byte*) setMEMtoFAC::mem#4 ← (byte[]) gen_sintab::f_i#0 call setMEMtoFAC param-assignment to:gen_sintab::@16 gen_sintab::@16: scope:[gen_sintab] from gen_sintab::@15 @@ -5099,9 +4987,6 @@ gen_sintab::@16: scope:[gen_sintab] from gen_sintab::@15 (byte) progress_idx#50 ← phi( gen_sintab::@15/(byte) progress_idx#51 ) (byte) gen_sintab::i#10 ← phi( gen_sintab::@15/(byte) gen_sintab::i#11 ) (byte*) gen_sintab::sintab#8 ← phi( gen_sintab::@15/(byte*) gen_sintab::sintab#9 ) - (byte[]) gen_sintab::f_min#14 ← phi( gen_sintab::@15/(byte[]) gen_sintab::f_min#16 ) - (byte[]) gen_sintab::f_amp#11 ← phi( gen_sintab::@15/(byte[]) gen_sintab::f_amp#13 ) - (byte[]) gen_sintab::f_i#4 ← phi( gen_sintab::@15/(byte[]) gen_sintab::f_i#1 ) (byte) gen_sintab::length#2 ← phi( gen_sintab::@15/(byte) gen_sintab::length#4 ) (word~) gen_sintab::$17 ← ((word)) (byte) gen_sintab::length#2 (word) setFAC::w#4 ← (word~) gen_sintab::$17 @@ -5114,54 +4999,39 @@ gen_sintab::@17: scope:[gen_sintab] from gen_sintab::@16 (byte) progress_idx#49 ← phi( gen_sintab::@16/(byte) progress_idx#50 ) (byte) gen_sintab::i#9 ← phi( gen_sintab::@16/(byte) gen_sintab::i#10 ) (byte*) gen_sintab::sintab#7 ← phi( gen_sintab::@16/(byte*) gen_sintab::sintab#8 ) - (byte[]) gen_sintab::f_min#12 ← phi( gen_sintab::@16/(byte[]) gen_sintab::f_min#14 ) - (byte[]) gen_sintab::f_amp#9 ← phi( gen_sintab::@16/(byte[]) gen_sintab::f_amp#11 ) - (byte[]) gen_sintab::f_i#2 ← phi( gen_sintab::@16/(byte[]) gen_sintab::f_i#4 ) - (byte*) divMEMbyFAC::mem#1 ← (byte[]) gen_sintab::f_i#2 + (byte*) divMEMbyFAC::mem#1 ← (byte[]) gen_sintab::f_i#0 call divMEMbyFAC param-assignment to:gen_sintab::@18 gen_sintab::@18: scope:[gen_sintab] from gen_sintab::@17 - (byte[]) gen_sintab::f_i#17 ← phi( gen_sintab::@17/(byte[]) gen_sintab::f_i#2 ) (byte*) gen_sintab::f_2pi#14 ← phi( gen_sintab::@17/(byte*) gen_sintab::f_2pi#16 ) (byte) gen_sintab::length#13 ← phi( gen_sintab::@17/(byte) gen_sintab::length#15 ) (byte*) progress_cursor#47 ← phi( gen_sintab::@17/(byte*) progress_cursor#49 ) (byte) progress_idx#47 ← phi( gen_sintab::@17/(byte) progress_idx#49 ) (byte) gen_sintab::i#8 ← phi( gen_sintab::@17/(byte) gen_sintab::i#9 ) (byte*) gen_sintab::sintab#6 ← phi( gen_sintab::@17/(byte*) gen_sintab::sintab#7 ) - (byte[]) gen_sintab::f_min#10 ← phi( gen_sintab::@17/(byte[]) gen_sintab::f_min#12 ) - (byte[]) gen_sintab::f_amp#7 ← phi( gen_sintab::@17/(byte[]) gen_sintab::f_amp#9 ) call sinFAC param-assignment to:gen_sintab::@19 gen_sintab::@19: scope:[gen_sintab] from gen_sintab::@18 - (byte[]) gen_sintab::f_i#15 ← phi( gen_sintab::@18/(byte[]) gen_sintab::f_i#17 ) (byte*) gen_sintab::f_2pi#12 ← phi( gen_sintab::@18/(byte*) gen_sintab::f_2pi#14 ) (byte) gen_sintab::length#11 ← phi( gen_sintab::@18/(byte) gen_sintab::length#13 ) (byte*) progress_cursor#45 ← phi( gen_sintab::@18/(byte*) progress_cursor#47 ) (byte) progress_idx#45 ← phi( gen_sintab::@18/(byte) progress_idx#47 ) (byte) gen_sintab::i#7 ← phi( gen_sintab::@18/(byte) gen_sintab::i#8 ) (byte*) gen_sintab::sintab#5 ← phi( gen_sintab::@18/(byte*) gen_sintab::sintab#6 ) - (byte[]) gen_sintab::f_min#7 ← phi( gen_sintab::@18/(byte[]) gen_sintab::f_min#10 ) - (byte[]) gen_sintab::f_amp#4 ← phi( gen_sintab::@18/(byte[]) gen_sintab::f_amp#7 ) - (byte*) mulFACbyMEM::mem#1 ← (byte[]) gen_sintab::f_amp#4 + (byte*) mulFACbyMEM::mem#1 ← (byte[]) gen_sintab::f_amp#0 call mulFACbyMEM param-assignment to:gen_sintab::@20 gen_sintab::@20: scope:[gen_sintab] from gen_sintab::@19 - (byte[]) gen_sintab::f_amp#22 ← phi( gen_sintab::@19/(byte[]) gen_sintab::f_amp#4 ) - (byte[]) gen_sintab::f_i#13 ← phi( gen_sintab::@19/(byte[]) gen_sintab::f_i#15 ) (byte*) gen_sintab::f_2pi#10 ← phi( gen_sintab::@19/(byte*) gen_sintab::f_2pi#12 ) (byte) gen_sintab::length#9 ← phi( gen_sintab::@19/(byte) gen_sintab::length#11 ) (byte*) progress_cursor#42 ← phi( gen_sintab::@19/(byte*) progress_cursor#45 ) (byte) progress_idx#42 ← phi( gen_sintab::@19/(byte) progress_idx#45 ) (byte) gen_sintab::i#6 ← phi( gen_sintab::@19/(byte) gen_sintab::i#7 ) (byte*) gen_sintab::sintab#4 ← phi( gen_sintab::@19/(byte*) gen_sintab::sintab#5 ) - (byte[]) gen_sintab::f_min#4 ← phi( gen_sintab::@19/(byte[]) gen_sintab::f_min#7 ) - (byte*) addMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_min#4 + (byte*) addMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_min#0 call addMEMtoFAC param-assignment to:gen_sintab::@21 gen_sintab::@21: scope:[gen_sintab] from gen_sintab::@20 - (byte[]) gen_sintab::f_min#22 ← phi( gen_sintab::@20/(byte[]) gen_sintab::f_min#4 ) - (byte[]) gen_sintab::f_amp#21 ← phi( gen_sintab::@20/(byte[]) gen_sintab::f_amp#22 ) - (byte[]) gen_sintab::f_i#11 ← phi( gen_sintab::@20/(byte[]) gen_sintab::f_i#13 ) (byte*) gen_sintab::f_2pi#8 ← phi( gen_sintab::@20/(byte*) gen_sintab::f_2pi#10 ) (byte) gen_sintab::length#7 ← phi( gen_sintab::@20/(byte) gen_sintab::length#9 ) (byte*) progress_cursor#38 ← phi( gen_sintab::@20/(byte*) progress_cursor#42 ) @@ -5172,9 +5042,6 @@ gen_sintab::@21: scope:[gen_sintab] from gen_sintab::@20 (word) getFAC::return#2 ← (word) getFAC::return#1 to:gen_sintab::@22 gen_sintab::@22: scope:[gen_sintab] from gen_sintab::@21 - (byte[]) gen_sintab::f_min#21 ← phi( gen_sintab::@21/(byte[]) gen_sintab::f_min#22 ) - (byte[]) gen_sintab::f_amp#19 ← phi( gen_sintab::@21/(byte[]) gen_sintab::f_amp#21 ) - (byte[]) gen_sintab::f_i#9 ← phi( gen_sintab::@21/(byte[]) gen_sintab::f_i#11 ) (byte*) gen_sintab::f_2pi#6 ← phi( gen_sintab::@21/(byte*) gen_sintab::f_2pi#8 ) (byte) gen_sintab::length#5 ← phi( gen_sintab::@21/(byte) gen_sintab::length#7 ) (byte*) progress_cursor#34 ← phi( gen_sintab::@21/(byte*) progress_cursor#38 ) @@ -5189,9 +5056,6 @@ gen_sintab::@22: scope:[gen_sintab] from gen_sintab::@21 to:gen_sintab::@23 gen_sintab::@23: scope:[gen_sintab] from gen_sintab::@22 (byte*) gen_sintab::sintab#13 ← phi( gen_sintab::@22/(byte*) gen_sintab::sintab#2 ) - (byte[]) gen_sintab::f_min#20 ← phi( gen_sintab::@22/(byte[]) gen_sintab::f_min#21 ) - (byte[]) gen_sintab::f_amp#17 ← phi( gen_sintab::@22/(byte[]) gen_sintab::f_amp#19 ) - (byte[]) gen_sintab::f_i#7 ← phi( gen_sintab::@22/(byte[]) gen_sintab::f_i#9 ) (byte*) gen_sintab::f_2pi#4 ← phi( gen_sintab::@22/(byte*) gen_sintab::f_2pi#6 ) (byte) gen_sintab::length#3 ← phi( gen_sintab::@22/(byte) gen_sintab::length#5 ) (byte) gen_sintab::i#4 ← phi( gen_sintab::@22/(byte) gen_sintab::i#3 ) @@ -5541,76 +5405,10 @@ INITIAL SSA SYMBOL TABLE (byte*) gen_sintab::f_2pi#9 (byte[]) gen_sintab::f_amp (byte[]) gen_sintab::f_amp#0 -(byte[]) gen_sintab::f_amp#1 -(byte[]) gen_sintab::f_amp#10 -(byte[]) gen_sintab::f_amp#11 -(byte[]) gen_sintab::f_amp#12 -(byte[]) gen_sintab::f_amp#13 -(byte[]) gen_sintab::f_amp#14 -(byte[]) gen_sintab::f_amp#15 -(byte[]) gen_sintab::f_amp#16 -(byte[]) gen_sintab::f_amp#17 -(byte[]) gen_sintab::f_amp#18 -(byte[]) gen_sintab::f_amp#19 -(byte[]) gen_sintab::f_amp#2 -(byte[]) gen_sintab::f_amp#20 -(byte[]) gen_sintab::f_amp#21 -(byte[]) gen_sintab::f_amp#22 -(byte[]) gen_sintab::f_amp#3 -(byte[]) gen_sintab::f_amp#4 -(byte[]) gen_sintab::f_amp#5 -(byte[]) gen_sintab::f_amp#6 -(byte[]) gen_sintab::f_amp#7 -(byte[]) gen_sintab::f_amp#8 -(byte[]) gen_sintab::f_amp#9 (byte[]) gen_sintab::f_i (byte[]) gen_sintab::f_i#0 -(byte[]) gen_sintab::f_i#1 -(byte[]) gen_sintab::f_i#10 -(byte[]) gen_sintab::f_i#11 -(byte[]) gen_sintab::f_i#12 -(byte[]) gen_sintab::f_i#13 -(byte[]) gen_sintab::f_i#14 -(byte[]) gen_sintab::f_i#15 -(byte[]) gen_sintab::f_i#16 -(byte[]) gen_sintab::f_i#17 -(byte[]) gen_sintab::f_i#18 -(byte[]) gen_sintab::f_i#19 -(byte[]) gen_sintab::f_i#2 -(byte[]) gen_sintab::f_i#20 -(byte[]) gen_sintab::f_i#21 -(byte[]) gen_sintab::f_i#22 -(byte[]) gen_sintab::f_i#3 -(byte[]) gen_sintab::f_i#4 -(byte[]) gen_sintab::f_i#5 -(byte[]) gen_sintab::f_i#6 -(byte[]) gen_sintab::f_i#7 -(byte[]) gen_sintab::f_i#8 -(byte[]) gen_sintab::f_i#9 (byte[]) gen_sintab::f_min (byte[]) gen_sintab::f_min#0 -(byte[]) gen_sintab::f_min#1 -(byte[]) gen_sintab::f_min#10 -(byte[]) gen_sintab::f_min#11 -(byte[]) gen_sintab::f_min#12 -(byte[]) gen_sintab::f_min#13 -(byte[]) gen_sintab::f_min#14 -(byte[]) gen_sintab::f_min#15 -(byte[]) gen_sintab::f_min#16 -(byte[]) gen_sintab::f_min#17 -(byte[]) gen_sintab::f_min#18 -(byte[]) gen_sintab::f_min#19 -(byte[]) gen_sintab::f_min#2 -(byte[]) gen_sintab::f_min#20 -(byte[]) gen_sintab::f_min#21 -(byte[]) gen_sintab::f_min#22 -(byte[]) gen_sintab::f_min#3 -(byte[]) gen_sintab::f_min#4 -(byte[]) gen_sintab::f_min#5 -(byte[]) gen_sintab::f_min#6 -(byte[]) gen_sintab::f_min#7 -(byte[]) gen_sintab::f_min#8 -(byte[]) gen_sintab::f_min#9 (byte) gen_sintab::i (byte) gen_sintab::i#0 (byte) gen_sintab::i#1 @@ -5696,8 +5494,6 @@ INITIAL SSA SYMBOL TABLE (label) gen_sprites::@return (byte[]) gen_sprites::cml (byte[]) gen_sprites::cml#0 -(byte[]) gen_sprites::cml#1 -(byte[]) gen_sprites::cml#2 (byte) gen_sprites::i (byte) gen_sprites::i#0 (byte) gen_sprites::i#1 @@ -6540,13 +6336,11 @@ gen_sprites: scope:[gen_sprites] from init::@4 gen_sprites::@1: scope:[gen_sprites] from gen_sprites gen_sprites::@3 (byte*) gen_sprites::spr#2 ← phi( gen_sprites/(byte*) gen_sprites::spr#0 gen_sprites::@3/(byte*) gen_sprites::spr#1 ) (byte) gen_sprites::i#2 ← phi( gen_sprites/(byte) gen_sprites::i#0 gen_sprites::@3/(byte) gen_sprites::i#1 ) - (byte[]) gen_sprites::cml#1 ← phi( gen_sprites/(byte[]) gen_sprites::cml#0 gen_sprites::@3/(byte[]) gen_sprites::cml#2 ) - (byte) gen_chargen_sprite::ch#0 ← *((byte[]) gen_sprites::cml#1 + (byte) gen_sprites::i#2) + (byte) gen_chargen_sprite::ch#0 ← *((byte[]) gen_sprites::cml#0 + (byte) gen_sprites::i#2) (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 call gen_chargen_sprite param-assignment to:gen_sprites::@3 gen_sprites::@3: scope:[gen_sprites] from gen_sprites::@1 - (byte[]) gen_sprites::cml#2 ← phi( gen_sprites::@1/(byte[]) gen_sprites::cml#1 ) (byte) gen_sprites::i#3 ← phi( gen_sprites::@1/(byte) gen_sprites::i#2 ) (byte*) gen_sprites::spr#3 ← phi( gen_sprites::@1/(byte*) gen_sprites::spr#2 ) (byte*~) gen_sprites::$1 ← (byte*) gen_sprites::spr#3 + (byte/signed byte/word/signed word) 64 @@ -6710,10 +6504,7 @@ gen_sintab::@3: scope:[gen_sintab] from gen_sintab (byte) progress_idx#64 ← phi( gen_sintab/(byte) progress_idx#65 ) (byte*) gen_sintab::sintab#23 ← phi( gen_sintab/(byte*) gen_sintab::sintab#24 ) (byte) gen_sintab::length#23 ← phi( gen_sintab/(byte) gen_sintab::length#24 ) - (byte[]) gen_sintab::f_i#22 ← phi( gen_sintab/(byte[]) gen_sintab::f_i#0 ) (byte*) gen_sintab::f_2pi#22 ← phi( gen_sintab/(byte*) gen_sintab::f_2pi#0 ) - (byte[]) gen_sintab::f_amp#12 ← phi( gen_sintab/(byte[]) gen_sintab::f_amp#0 ) - (byte[]) gen_sintab::f_min#8 ← phi( gen_sintab/(byte[]) gen_sintab::f_min#0 ) (byte) gen_sintab::min#3 ← phi( gen_sintab/(byte) gen_sintab::min#4 ) call setARGtoFAC param-assignment to:gen_sintab::@4 @@ -6722,10 +6513,7 @@ gen_sintab::@4: scope:[gen_sintab] from gen_sintab::@3 (byte) progress_idx#63 ← phi( gen_sintab::@3/(byte) progress_idx#64 ) (byte*) gen_sintab::sintab#22 ← phi( gen_sintab::@3/(byte*) gen_sintab::sintab#23 ) (byte) gen_sintab::length#22 ← phi( gen_sintab::@3/(byte) gen_sintab::length#23 ) - (byte[]) gen_sintab::f_i#21 ← phi( gen_sintab::@3/(byte[]) gen_sintab::f_i#22 ) (byte*) gen_sintab::f_2pi#21 ← phi( gen_sintab::@3/(byte*) gen_sintab::f_2pi#22 ) - (byte[]) gen_sintab::f_amp#10 ← phi( gen_sintab::@3/(byte[]) gen_sintab::f_amp#12 ) - (byte[]) gen_sintab::f_min#5 ← phi( gen_sintab::@3/(byte[]) gen_sintab::f_min#8 ) (byte) gen_sintab::min#2 ← phi( gen_sintab::@3/(byte) gen_sintab::min#3 ) asm { lda#0ldx#0ldy#0 } (word~) gen_sintab::$3 ← ((word)) (byte) gen_sintab::min#2 @@ -6737,11 +6525,8 @@ gen_sintab::@5: scope:[gen_sintab] from gen_sintab::@4 (byte) progress_idx#62 ← phi( gen_sintab::@4/(byte) progress_idx#63 ) (byte*) gen_sintab::sintab#21 ← phi( gen_sintab::@4/(byte*) gen_sintab::sintab#22 ) (byte) gen_sintab::length#21 ← phi( gen_sintab::@4/(byte) gen_sintab::length#22 ) - (byte[]) gen_sintab::f_i#20 ← phi( gen_sintab::@4/(byte[]) gen_sintab::f_i#21 ) (byte*) gen_sintab::f_2pi#19 ← phi( gen_sintab::@4/(byte*) gen_sintab::f_2pi#21 ) - (byte[]) gen_sintab::f_amp#8 ← phi( gen_sintab::@4/(byte[]) gen_sintab::f_amp#10 ) - (byte[]) gen_sintab::f_min#1 ← phi( gen_sintab::@4/(byte[]) gen_sintab::f_min#5 ) - (byte*) setMEMtoFAC::mem#0 ← (byte[]) gen_sintab::f_min#1 + (byte*) setMEMtoFAC::mem#0 ← (byte[]) gen_sintab::f_min#0 call setMEMtoFAC param-assignment to:gen_sintab::@6 gen_sintab::@6: scope:[gen_sintab] from gen_sintab::@5 @@ -6749,10 +6534,7 @@ gen_sintab::@6: scope:[gen_sintab] from gen_sintab::@5 (byte) progress_idx#61 ← phi( gen_sintab::@5/(byte) progress_idx#62 ) (byte*) gen_sintab::sintab#20 ← phi( gen_sintab::@5/(byte*) gen_sintab::sintab#21 ) (byte) gen_sintab::length#20 ← phi( gen_sintab::@5/(byte) gen_sintab::length#21 ) - (byte[]) gen_sintab::f_i#19 ← phi( gen_sintab::@5/(byte[]) gen_sintab::f_i#20 ) (byte*) gen_sintab::f_2pi#17 ← phi( gen_sintab::@5/(byte*) gen_sintab::f_2pi#19 ) - (byte[]) gen_sintab::f_min#15 ← phi( gen_sintab::@5/(byte[]) gen_sintab::f_min#1 ) - (byte[]) gen_sintab::f_amp#5 ← phi( gen_sintab::@5/(byte[]) gen_sintab::f_amp#8 ) call subFACfromARG param-assignment to:gen_sintab::@7 gen_sintab::@7: scope:[gen_sintab] from gen_sintab::@6 @@ -6760,11 +6542,8 @@ gen_sintab::@7: scope:[gen_sintab] from gen_sintab::@6 (byte) progress_idx#60 ← phi( gen_sintab::@6/(byte) progress_idx#61 ) (byte*) gen_sintab::sintab#19 ← phi( gen_sintab::@6/(byte*) gen_sintab::sintab#20 ) (byte) gen_sintab::length#19 ← phi( gen_sintab::@6/(byte) gen_sintab::length#20 ) - (byte[]) gen_sintab::f_i#18 ← phi( gen_sintab::@6/(byte[]) gen_sintab::f_i#19 ) (byte*) gen_sintab::f_2pi#15 ← phi( gen_sintab::@6/(byte*) gen_sintab::f_2pi#17 ) - (byte[]) gen_sintab::f_min#13 ← phi( gen_sintab::@6/(byte[]) gen_sintab::f_min#15 ) - (byte[]) gen_sintab::f_amp#1 ← phi( gen_sintab::@6/(byte[]) gen_sintab::f_amp#5 ) - (byte*) setMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_amp#1 + (byte*) setMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_amp#0 call setMEMtoFAC param-assignment to:gen_sintab::@8 gen_sintab::@8: scope:[gen_sintab] from gen_sintab::@7 @@ -6772,10 +6551,7 @@ gen_sintab::@8: scope:[gen_sintab] from gen_sintab::@7 (byte) progress_idx#59 ← phi( gen_sintab::@7/(byte) progress_idx#60 ) (byte*) gen_sintab::sintab#18 ← phi( gen_sintab::@7/(byte*) gen_sintab::sintab#19 ) (byte) gen_sintab::length#18 ← phi( gen_sintab::@7/(byte) gen_sintab::length#19 ) - (byte[]) gen_sintab::f_i#16 ← phi( gen_sintab::@7/(byte[]) gen_sintab::f_i#18 ) (byte*) gen_sintab::f_2pi#13 ← phi( gen_sintab::@7/(byte*) gen_sintab::f_2pi#15 ) - (byte[]) gen_sintab::f_min#11 ← phi( gen_sintab::@7/(byte[]) gen_sintab::f_min#13 ) - (byte[]) gen_sintab::f_amp#6 ← phi( gen_sintab::@7/(byte[]) gen_sintab::f_amp#1 ) (word) setFAC::w#2 ← (byte/signed byte/word/signed word) 2 call setFAC param-assignment to:gen_sintab::@9 @@ -6784,11 +6560,8 @@ gen_sintab::@9: scope:[gen_sintab] from gen_sintab::@8 (byte) progress_idx#58 ← phi( gen_sintab::@8/(byte) progress_idx#59 ) (byte*) gen_sintab::sintab#17 ← phi( gen_sintab::@8/(byte*) gen_sintab::sintab#18 ) (byte) gen_sintab::length#17 ← phi( gen_sintab::@8/(byte) gen_sintab::length#18 ) - (byte[]) gen_sintab::f_i#14 ← phi( gen_sintab::@8/(byte[]) gen_sintab::f_i#16 ) (byte*) gen_sintab::f_2pi#11 ← phi( gen_sintab::@8/(byte*) gen_sintab::f_2pi#13 ) - (byte[]) gen_sintab::f_min#9 ← phi( gen_sintab::@8/(byte[]) gen_sintab::f_min#11 ) - (byte[]) gen_sintab::f_amp#2 ← phi( gen_sintab::@8/(byte[]) gen_sintab::f_amp#6 ) - (byte*) divMEMbyFAC::mem#0 ← (byte[]) gen_sintab::f_amp#2 + (byte*) divMEMbyFAC::mem#0 ← (byte[]) gen_sintab::f_amp#0 call divMEMbyFAC param-assignment to:gen_sintab::@10 gen_sintab::@10: scope:[gen_sintab] from gen_sintab::@9 @@ -6796,45 +6569,33 @@ gen_sintab::@10: scope:[gen_sintab] from gen_sintab::@9 (byte) progress_idx#57 ← phi( gen_sintab::@9/(byte) progress_idx#58 ) (byte*) gen_sintab::sintab#16 ← phi( gen_sintab::@9/(byte*) gen_sintab::sintab#17 ) (byte) gen_sintab::length#16 ← phi( gen_sintab::@9/(byte) gen_sintab::length#17 ) - (byte[]) gen_sintab::f_i#12 ← phi( gen_sintab::@9/(byte[]) gen_sintab::f_i#14 ) (byte*) gen_sintab::f_2pi#9 ← phi( gen_sintab::@9/(byte*) gen_sintab::f_2pi#11 ) - (byte[]) gen_sintab::f_min#6 ← phi( gen_sintab::@9/(byte[]) gen_sintab::f_min#9 ) - (byte[]) gen_sintab::f_amp#3 ← phi( gen_sintab::@9/(byte[]) gen_sintab::f_amp#2 ) - (byte*) setMEMtoFAC::mem#2 ← (byte[]) gen_sintab::f_amp#3 + (byte*) setMEMtoFAC::mem#2 ← (byte[]) gen_sintab::f_amp#0 call setMEMtoFAC param-assignment to:gen_sintab::@11 gen_sintab::@11: scope:[gen_sintab] from gen_sintab::@10 (byte*) progress_cursor#56 ← phi( gen_sintab::@10/(byte*) progress_cursor#57 ) (byte) progress_idx#56 ← phi( gen_sintab::@10/(byte) progress_idx#57 ) (byte*) gen_sintab::sintab#15 ← phi( gen_sintab::@10/(byte*) gen_sintab::sintab#16 ) - (byte[]) gen_sintab::f_amp#20 ← phi( gen_sintab::@10/(byte[]) gen_sintab::f_amp#3 ) (byte) gen_sintab::length#14 ← phi( gen_sintab::@10/(byte) gen_sintab::length#16 ) - (byte[]) gen_sintab::f_i#10 ← phi( gen_sintab::@10/(byte[]) gen_sintab::f_i#12 ) (byte*) gen_sintab::f_2pi#7 ← phi( gen_sintab::@10/(byte*) gen_sintab::f_2pi#9 ) - (byte[]) gen_sintab::f_min#2 ← phi( gen_sintab::@10/(byte[]) gen_sintab::f_min#6 ) - (byte*) addMEMtoFAC::mem#0 ← (byte[]) gen_sintab::f_min#2 + (byte*) addMEMtoFAC::mem#0 ← (byte[]) gen_sintab::f_min#0 call addMEMtoFAC param-assignment to:gen_sintab::@12 gen_sintab::@12: scope:[gen_sintab] from gen_sintab::@11 (byte*) progress_cursor#55 ← phi( gen_sintab::@11/(byte*) progress_cursor#56 ) (byte) progress_idx#55 ← phi( gen_sintab::@11/(byte) progress_idx#56 ) (byte*) gen_sintab::sintab#14 ← phi( gen_sintab::@11/(byte*) gen_sintab::sintab#15 ) - (byte[]) gen_sintab::f_amp#18 ← phi( gen_sintab::@11/(byte[]) gen_sintab::f_amp#20 ) (byte) gen_sintab::length#12 ← phi( gen_sintab::@11/(byte) gen_sintab::length#14 ) - (byte[]) gen_sintab::f_i#8 ← phi( gen_sintab::@11/(byte[]) gen_sintab::f_i#10 ) (byte*) gen_sintab::f_2pi#5 ← phi( gen_sintab::@11/(byte*) gen_sintab::f_2pi#7 ) - (byte[]) gen_sintab::f_min#3 ← phi( gen_sintab::@11/(byte[]) gen_sintab::f_min#2 ) - (byte*) setMEMtoFAC::mem#3 ← (byte[]) gen_sintab::f_min#3 + (byte*) setMEMtoFAC::mem#3 ← (byte[]) gen_sintab::f_min#0 call setMEMtoFAC param-assignment to:gen_sintab::@13 gen_sintab::@13: scope:[gen_sintab] from gen_sintab::@12 (byte*) progress_cursor#54 ← phi( gen_sintab::@12/(byte*) progress_cursor#55 ) (byte) progress_idx#54 ← phi( gen_sintab::@12/(byte) progress_idx#55 ) (byte*) gen_sintab::sintab#12 ← phi( gen_sintab::@12/(byte*) gen_sintab::sintab#14 ) - (byte[]) gen_sintab::f_min#19 ← phi( gen_sintab::@12/(byte[]) gen_sintab::f_min#3 ) - (byte[]) gen_sintab::f_amp#16 ← phi( gen_sintab::@12/(byte[]) gen_sintab::f_amp#18 ) (byte) gen_sintab::length#10 ← phi( gen_sintab::@12/(byte) gen_sintab::length#12 ) - (byte[]) gen_sintab::f_i#6 ← phi( gen_sintab::@12/(byte[]) gen_sintab::f_i#8 ) (byte*) gen_sintab::f_2pi#3 ← phi( gen_sintab::@12/(byte*) gen_sintab::f_2pi#5 ) (byte) gen_sintab::i#0 ← (byte/signed byte/word/signed word) 0 to:gen_sintab::@1 @@ -6842,10 +6603,7 @@ gen_sintab::@1: scope:[gen_sintab] from gen_sintab::@13 gen_sintab::@23 (byte*) progress_cursor#53 ← phi( gen_sintab::@13/(byte*) progress_cursor#54 gen_sintab::@23/(byte*) progress_cursor#12 ) (byte) progress_idx#53 ← phi( gen_sintab::@13/(byte) progress_idx#54 gen_sintab::@23/(byte) progress_idx#13 ) (byte*) gen_sintab::sintab#11 ← phi( gen_sintab::@13/(byte*) gen_sintab::sintab#12 gen_sintab::@23/(byte*) gen_sintab::sintab#13 ) - (byte[]) gen_sintab::f_min#18 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_min#19 gen_sintab::@23/(byte[]) gen_sintab::f_min#20 ) - (byte[]) gen_sintab::f_amp#15 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_amp#16 gen_sintab::@23/(byte[]) gen_sintab::f_amp#17 ) (byte) gen_sintab::length#8 ← phi( gen_sintab::@13/(byte) gen_sintab::length#10 gen_sintab::@23/(byte) gen_sintab::length#3 ) - (byte[]) gen_sintab::f_i#5 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_i#6 gen_sintab::@23/(byte[]) gen_sintab::f_i#7 ) (byte*) gen_sintab::f_2pi#2 ← phi( gen_sintab::@13/(byte*) gen_sintab::f_2pi#3 gen_sintab::@23/(byte*) gen_sintab::f_2pi#4 ) (byte) gen_sintab::i#2 ← phi( gen_sintab::@13/(byte) gen_sintab::i#0 gen_sintab::@23/(byte) gen_sintab::i#1 ) (word~) gen_sintab::$13 ← ((word)) (byte) gen_sintab::i#2 @@ -6857,10 +6615,7 @@ gen_sintab::@14: scope:[gen_sintab] from gen_sintab::@1 (byte) progress_idx#52 ← phi( gen_sintab::@1/(byte) progress_idx#53 ) (byte) gen_sintab::i#12 ← phi( gen_sintab::@1/(byte) gen_sintab::i#2 ) (byte*) gen_sintab::sintab#10 ← phi( gen_sintab::@1/(byte*) gen_sintab::sintab#11 ) - (byte[]) gen_sintab::f_min#17 ← phi( gen_sintab::@1/(byte[]) gen_sintab::f_min#18 ) - (byte[]) gen_sintab::f_amp#14 ← phi( gen_sintab::@1/(byte[]) gen_sintab::f_amp#15 ) (byte) gen_sintab::length#6 ← phi( gen_sintab::@1/(byte) gen_sintab::length#8 ) - (byte[]) gen_sintab::f_i#3 ← phi( gen_sintab::@1/(byte[]) gen_sintab::f_i#5 ) (byte*) gen_sintab::f_2pi#1 ← phi( gen_sintab::@1/(byte*) gen_sintab::f_2pi#2 ) (byte*) mulFACbyMEM::mem#0 ← (byte*) gen_sintab::f_2pi#1 call mulFACbyMEM param-assignment @@ -6871,11 +6626,8 @@ gen_sintab::@15: scope:[gen_sintab] from gen_sintab::@14 (byte) progress_idx#51 ← phi( gen_sintab::@14/(byte) progress_idx#52 ) (byte) gen_sintab::i#11 ← phi( gen_sintab::@14/(byte) gen_sintab::i#12 ) (byte*) gen_sintab::sintab#9 ← phi( gen_sintab::@14/(byte*) gen_sintab::sintab#10 ) - (byte[]) gen_sintab::f_min#16 ← phi( gen_sintab::@14/(byte[]) gen_sintab::f_min#17 ) - (byte[]) gen_sintab::f_amp#13 ← phi( gen_sintab::@14/(byte[]) gen_sintab::f_amp#14 ) (byte) gen_sintab::length#4 ← phi( gen_sintab::@14/(byte) gen_sintab::length#6 ) - (byte[]) gen_sintab::f_i#1 ← phi( gen_sintab::@14/(byte[]) gen_sintab::f_i#3 ) - (byte*) setMEMtoFAC::mem#4 ← (byte[]) gen_sintab::f_i#1 + (byte*) setMEMtoFAC::mem#4 ← (byte[]) gen_sintab::f_i#0 call setMEMtoFAC param-assignment to:gen_sintab::@16 gen_sintab::@16: scope:[gen_sintab] from gen_sintab::@15 @@ -6884,9 +6636,6 @@ gen_sintab::@16: scope:[gen_sintab] from gen_sintab::@15 (byte) progress_idx#50 ← phi( gen_sintab::@15/(byte) progress_idx#51 ) (byte) gen_sintab::i#10 ← phi( gen_sintab::@15/(byte) gen_sintab::i#11 ) (byte*) gen_sintab::sintab#8 ← phi( gen_sintab::@15/(byte*) gen_sintab::sintab#9 ) - (byte[]) gen_sintab::f_min#14 ← phi( gen_sintab::@15/(byte[]) gen_sintab::f_min#16 ) - (byte[]) gen_sintab::f_amp#11 ← phi( gen_sintab::@15/(byte[]) gen_sintab::f_amp#13 ) - (byte[]) gen_sintab::f_i#4 ← phi( gen_sintab::@15/(byte[]) gen_sintab::f_i#1 ) (byte) gen_sintab::length#2 ← phi( gen_sintab::@15/(byte) gen_sintab::length#4 ) (word~) gen_sintab::$17 ← ((word)) (byte) gen_sintab::length#2 (word) setFAC::w#4 ← (word~) gen_sintab::$17 @@ -6899,54 +6648,39 @@ gen_sintab::@17: scope:[gen_sintab] from gen_sintab::@16 (byte) progress_idx#49 ← phi( gen_sintab::@16/(byte) progress_idx#50 ) (byte) gen_sintab::i#9 ← phi( gen_sintab::@16/(byte) gen_sintab::i#10 ) (byte*) gen_sintab::sintab#7 ← phi( gen_sintab::@16/(byte*) gen_sintab::sintab#8 ) - (byte[]) gen_sintab::f_min#12 ← phi( gen_sintab::@16/(byte[]) gen_sintab::f_min#14 ) - (byte[]) gen_sintab::f_amp#9 ← phi( gen_sintab::@16/(byte[]) gen_sintab::f_amp#11 ) - (byte[]) gen_sintab::f_i#2 ← phi( gen_sintab::@16/(byte[]) gen_sintab::f_i#4 ) - (byte*) divMEMbyFAC::mem#1 ← (byte[]) gen_sintab::f_i#2 + (byte*) divMEMbyFAC::mem#1 ← (byte[]) gen_sintab::f_i#0 call divMEMbyFAC param-assignment to:gen_sintab::@18 gen_sintab::@18: scope:[gen_sintab] from gen_sintab::@17 - (byte[]) gen_sintab::f_i#17 ← phi( gen_sintab::@17/(byte[]) gen_sintab::f_i#2 ) (byte*) gen_sintab::f_2pi#14 ← phi( gen_sintab::@17/(byte*) gen_sintab::f_2pi#16 ) (byte) gen_sintab::length#13 ← phi( gen_sintab::@17/(byte) gen_sintab::length#15 ) (byte*) progress_cursor#47 ← phi( gen_sintab::@17/(byte*) progress_cursor#49 ) (byte) progress_idx#47 ← phi( gen_sintab::@17/(byte) progress_idx#49 ) (byte) gen_sintab::i#8 ← phi( gen_sintab::@17/(byte) gen_sintab::i#9 ) (byte*) gen_sintab::sintab#6 ← phi( gen_sintab::@17/(byte*) gen_sintab::sintab#7 ) - (byte[]) gen_sintab::f_min#10 ← phi( gen_sintab::@17/(byte[]) gen_sintab::f_min#12 ) - (byte[]) gen_sintab::f_amp#7 ← phi( gen_sintab::@17/(byte[]) gen_sintab::f_amp#9 ) call sinFAC param-assignment to:gen_sintab::@19 gen_sintab::@19: scope:[gen_sintab] from gen_sintab::@18 - (byte[]) gen_sintab::f_i#15 ← phi( gen_sintab::@18/(byte[]) gen_sintab::f_i#17 ) (byte*) gen_sintab::f_2pi#12 ← phi( gen_sintab::@18/(byte*) gen_sintab::f_2pi#14 ) (byte) gen_sintab::length#11 ← phi( gen_sintab::@18/(byte) gen_sintab::length#13 ) (byte*) progress_cursor#45 ← phi( gen_sintab::@18/(byte*) progress_cursor#47 ) (byte) progress_idx#45 ← phi( gen_sintab::@18/(byte) progress_idx#47 ) (byte) gen_sintab::i#7 ← phi( gen_sintab::@18/(byte) gen_sintab::i#8 ) (byte*) gen_sintab::sintab#5 ← phi( gen_sintab::@18/(byte*) gen_sintab::sintab#6 ) - (byte[]) gen_sintab::f_min#7 ← phi( gen_sintab::@18/(byte[]) gen_sintab::f_min#10 ) - (byte[]) gen_sintab::f_amp#4 ← phi( gen_sintab::@18/(byte[]) gen_sintab::f_amp#7 ) - (byte*) mulFACbyMEM::mem#1 ← (byte[]) gen_sintab::f_amp#4 + (byte*) mulFACbyMEM::mem#1 ← (byte[]) gen_sintab::f_amp#0 call mulFACbyMEM param-assignment to:gen_sintab::@20 gen_sintab::@20: scope:[gen_sintab] from gen_sintab::@19 - (byte[]) gen_sintab::f_amp#22 ← phi( gen_sintab::@19/(byte[]) gen_sintab::f_amp#4 ) - (byte[]) gen_sintab::f_i#13 ← phi( gen_sintab::@19/(byte[]) gen_sintab::f_i#15 ) (byte*) gen_sintab::f_2pi#10 ← phi( gen_sintab::@19/(byte*) gen_sintab::f_2pi#12 ) (byte) gen_sintab::length#9 ← phi( gen_sintab::@19/(byte) gen_sintab::length#11 ) (byte*) progress_cursor#42 ← phi( gen_sintab::@19/(byte*) progress_cursor#45 ) (byte) progress_idx#42 ← phi( gen_sintab::@19/(byte) progress_idx#45 ) (byte) gen_sintab::i#6 ← phi( gen_sintab::@19/(byte) gen_sintab::i#7 ) (byte*) gen_sintab::sintab#4 ← phi( gen_sintab::@19/(byte*) gen_sintab::sintab#5 ) - (byte[]) gen_sintab::f_min#4 ← phi( gen_sintab::@19/(byte[]) gen_sintab::f_min#7 ) - (byte*) addMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_min#4 + (byte*) addMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_min#0 call addMEMtoFAC param-assignment to:gen_sintab::@21 gen_sintab::@21: scope:[gen_sintab] from gen_sintab::@20 - (byte[]) gen_sintab::f_min#22 ← phi( gen_sintab::@20/(byte[]) gen_sintab::f_min#4 ) - (byte[]) gen_sintab::f_amp#21 ← phi( gen_sintab::@20/(byte[]) gen_sintab::f_amp#22 ) - (byte[]) gen_sintab::f_i#11 ← phi( gen_sintab::@20/(byte[]) gen_sintab::f_i#13 ) (byte*) gen_sintab::f_2pi#8 ← phi( gen_sintab::@20/(byte*) gen_sintab::f_2pi#10 ) (byte) gen_sintab::length#7 ← phi( gen_sintab::@20/(byte) gen_sintab::length#9 ) (byte*) progress_cursor#38 ← phi( gen_sintab::@20/(byte*) progress_cursor#42 ) @@ -6957,9 +6691,6 @@ gen_sintab::@21: scope:[gen_sintab] from gen_sintab::@20 (word) getFAC::return#2 ← (word) getFAC::return#1 to:gen_sintab::@22 gen_sintab::@22: scope:[gen_sintab] from gen_sintab::@21 - (byte[]) gen_sintab::f_min#21 ← phi( gen_sintab::@21/(byte[]) gen_sintab::f_min#22 ) - (byte[]) gen_sintab::f_amp#19 ← phi( gen_sintab::@21/(byte[]) gen_sintab::f_amp#21 ) - (byte[]) gen_sintab::f_i#9 ← phi( gen_sintab::@21/(byte[]) gen_sintab::f_i#11 ) (byte*) gen_sintab::f_2pi#6 ← phi( gen_sintab::@21/(byte*) gen_sintab::f_2pi#8 ) (byte) gen_sintab::length#5 ← phi( gen_sintab::@21/(byte) gen_sintab::length#7 ) (byte*) progress_cursor#34 ← phi( gen_sintab::@21/(byte*) progress_cursor#38 ) @@ -6974,9 +6705,6 @@ gen_sintab::@22: scope:[gen_sintab] from gen_sintab::@21 to:gen_sintab::@23 gen_sintab::@23: scope:[gen_sintab] from gen_sintab::@22 (byte*) gen_sintab::sintab#13 ← phi( gen_sintab::@22/(byte*) gen_sintab::sintab#2 ) - (byte[]) gen_sintab::f_min#20 ← phi( gen_sintab::@22/(byte[]) gen_sintab::f_min#21 ) - (byte[]) gen_sintab::f_amp#17 ← phi( gen_sintab::@22/(byte[]) gen_sintab::f_amp#19 ) - (byte[]) gen_sintab::f_i#7 ← phi( gen_sintab::@22/(byte[]) gen_sintab::f_i#9 ) (byte*) gen_sintab::f_2pi#4 ← phi( gen_sintab::@22/(byte*) gen_sintab::f_2pi#6 ) (byte) gen_sintab::length#3 ← phi( gen_sintab::@22/(byte) gen_sintab::length#5 ) (byte) gen_sintab::i#4 ← phi( gen_sintab::@22/(byte) gen_sintab::i#3 ) @@ -7068,17 +6796,17 @@ Not aliassing across scopes: gen_sintab::length#24 gen_sintab::length#0 Not aliassing across scopes: gen_sintab::sintab#24 gen_sintab::sintab#0 Not aliassing across scopes: progress_idx#65 progress_idx#2 Not aliassing across scopes: progress_cursor#65 progress_cursor#2 -Not aliassing across scopes: setMEMtoFAC::mem#0 gen_sintab::f_min#1 -Not aliassing across scopes: setMEMtoFAC::mem#1 gen_sintab::f_amp#1 -Not aliassing across scopes: divMEMbyFAC::mem#0 gen_sintab::f_amp#2 -Not aliassing across scopes: setMEMtoFAC::mem#2 gen_sintab::f_amp#3 -Not aliassing across scopes: addMEMtoFAC::mem#0 gen_sintab::f_min#2 -Not aliassing across scopes: setMEMtoFAC::mem#3 gen_sintab::f_min#3 +Not aliassing across scopes: setMEMtoFAC::mem#0 gen_sintab::f_min#0 +Not aliassing across scopes: setMEMtoFAC::mem#1 gen_sintab::f_amp#0 +Not aliassing across scopes: divMEMbyFAC::mem#0 gen_sintab::f_amp#0 +Not aliassing across scopes: setMEMtoFAC::mem#2 gen_sintab::f_amp#0 +Not aliassing across scopes: addMEMtoFAC::mem#0 gen_sintab::f_min#0 +Not aliassing across scopes: setMEMtoFAC::mem#3 gen_sintab::f_min#0 Not aliassing across scopes: mulFACbyMEM::mem#0 gen_sintab::f_2pi#1 -Not aliassing across scopes: setMEMtoFAC::mem#4 gen_sintab::f_i#1 -Not aliassing across scopes: divMEMbyFAC::mem#1 gen_sintab::f_i#2 -Not aliassing across scopes: mulFACbyMEM::mem#1 gen_sintab::f_amp#4 -Not aliassing across scopes: addMEMtoFAC::mem#1 gen_sintab::f_min#4 +Not aliassing across scopes: setMEMtoFAC::mem#4 gen_sintab::f_i#0 +Not aliassing across scopes: divMEMbyFAC::mem#1 gen_sintab::f_i#0 +Not aliassing across scopes: mulFACbyMEM::mem#1 gen_sintab::f_amp#0 +Not aliassing across scopes: addMEMtoFAC::mem#1 gen_sintab::f_min#0 Not aliassing across scopes: getFAC::return#2 getFAC::return#1 Not aliassing across scopes: gen_sintab::$23 getFAC::return#4 Not aliassing across scopes: progress_idx#27 progress_idx#12 @@ -7148,7 +6876,6 @@ Alias (byte) place_sprites::spr_x#1 = (byte/word~) place_sprites::$3 Alias (byte) place_sprites::col#1 = (byte~) place_sprites::$5 Alias (byte*) gen_sprites::spr#2 = (byte*) gen_sprites::spr#3 Alias (byte) gen_sprites::i#2 = (byte) gen_sprites::i#3 -Alias (byte[]) gen_sprites::cml#1 = (byte[]) gen_sprites::cml#2 Alias (byte*) gen_sprites::spr#1 = (byte*~) gen_sprites::$1 Alias (byte*) gen_chargen_sprite::chargen#0 = (byte*~) gen_chargen_sprite::$2 Alias (byte) gen_chargen_sprite::s_gen#7 = (byte) gen_chargen_sprite::s_gen#8 @@ -7177,10 +6904,7 @@ Alias (byte) gen_chargen_sprite::bits#1 = (byte~) gen_chargen_sprite::$11 Alias (byte*) gen_chargen_sprite::sprite#2 = (byte*~) gen_chargen_sprite::$13 Alias (word) setFAC::w#0 = (word~) gen_sintab::$0 Alias (byte) gen_sintab::min#2 = (byte) gen_sintab::min#3 (byte) gen_sintab::min#4 -Alias (byte[]) gen_sintab::f_min#0 = (byte[]) gen_sintab::f_min#8 (byte[]) gen_sintab::f_min#5 (byte[]) gen_sintab::f_min#1 (byte[]) gen_sintab::f_min#15 (byte[]) gen_sintab::f_min#13 (byte[]) gen_sintab::f_min#11 (byte[]) gen_sintab::f_min#9 (byte[]) gen_sintab::f_min#6 (byte[]) gen_sintab::f_min#2 (byte[]) gen_sintab::f_min#3 (byte[]) gen_sintab::f_min#19 -Alias (byte[]) gen_sintab::f_amp#0 = (byte[]) gen_sintab::f_amp#12 (byte[]) gen_sintab::f_amp#10 (byte[]) gen_sintab::f_amp#8 (byte[]) gen_sintab::f_amp#5 (byte[]) gen_sintab::f_amp#1 (byte[]) gen_sintab::f_amp#6 (byte[]) gen_sintab::f_amp#2 (byte[]) gen_sintab::f_amp#3 (byte[]) gen_sintab::f_amp#20 (byte[]) gen_sintab::f_amp#18 (byte[]) gen_sintab::f_amp#16 Alias (byte*) gen_sintab::f_2pi#0 = (byte*) gen_sintab::f_2pi#22 (byte*) gen_sintab::f_2pi#21 (byte*) gen_sintab::f_2pi#19 (byte*) gen_sintab::f_2pi#17 (byte*) gen_sintab::f_2pi#15 (byte*) gen_sintab::f_2pi#13 (byte*) gen_sintab::f_2pi#11 (byte*) gen_sintab::f_2pi#9 (byte*) gen_sintab::f_2pi#7 (byte*) gen_sintab::f_2pi#5 (byte*) gen_sintab::f_2pi#3 -Alias (byte[]) gen_sintab::f_i#0 = (byte[]) gen_sintab::f_i#22 (byte[]) gen_sintab::f_i#21 (byte[]) gen_sintab::f_i#20 (byte[]) gen_sintab::f_i#19 (byte[]) gen_sintab::f_i#18 (byte[]) gen_sintab::f_i#16 (byte[]) gen_sintab::f_i#14 (byte[]) gen_sintab::f_i#12 (byte[]) gen_sintab::f_i#10 (byte[]) gen_sintab::f_i#8 (byte[]) gen_sintab::f_i#6 Alias (byte) gen_sintab::length#10 = (byte) gen_sintab::length#23 (byte) gen_sintab::length#24 (byte) gen_sintab::length#22 (byte) gen_sintab::length#21 (byte) gen_sintab::length#20 (byte) gen_sintab::length#19 (byte) gen_sintab::length#18 (byte) gen_sintab::length#17 (byte) gen_sintab::length#16 (byte) gen_sintab::length#14 (byte) gen_sintab::length#12 Alias (byte*) gen_sintab::sintab#12 = (byte*) gen_sintab::sintab#23 (byte*) gen_sintab::sintab#24 (byte*) gen_sintab::sintab#22 (byte*) gen_sintab::sintab#21 (byte*) gen_sintab::sintab#20 (byte*) gen_sintab::sintab#19 (byte*) gen_sintab::sintab#18 (byte*) gen_sintab::sintab#17 (byte*) gen_sintab::sintab#16 (byte*) gen_sintab::sintab#15 (byte*) gen_sintab::sintab#14 Alias (byte) progress_idx#54 = (byte) progress_idx#64 (byte) progress_idx#65 (byte) progress_idx#63 (byte) progress_idx#62 (byte) progress_idx#61 (byte) progress_idx#60 (byte) progress_idx#59 (byte) progress_idx#58 (byte) progress_idx#57 (byte) progress_idx#56 (byte) progress_idx#55 @@ -7188,10 +6912,7 @@ Alias (byte*) progress_cursor#54 = (byte*) progress_cursor#64 (byte*) progress_c Alias (word) setFAC::w#1 = (word~) gen_sintab::$3 Alias (word) setFAC::w#3 = (word~) gen_sintab::$13 Alias (byte*) gen_sintab::f_2pi#1 = (byte*) gen_sintab::f_2pi#2 (byte*) gen_sintab::f_2pi#20 (byte*) gen_sintab::f_2pi#18 (byte*) gen_sintab::f_2pi#16 (byte*) gen_sintab::f_2pi#14 (byte*) gen_sintab::f_2pi#12 (byte*) gen_sintab::f_2pi#10 (byte*) gen_sintab::f_2pi#8 (byte*) gen_sintab::f_2pi#6 (byte*) gen_sintab::f_2pi#4 -Alias (byte[]) gen_sintab::f_i#1 = (byte[]) gen_sintab::f_i#3 (byte[]) gen_sintab::f_i#5 (byte[]) gen_sintab::f_i#4 (byte[]) gen_sintab::f_i#2 (byte[]) gen_sintab::f_i#17 (byte[]) gen_sintab::f_i#15 (byte[]) gen_sintab::f_i#13 (byte[]) gen_sintab::f_i#11 (byte[]) gen_sintab::f_i#9 (byte[]) gen_sintab::f_i#7 Alias (byte) gen_sintab::length#11 = (byte) gen_sintab::length#6 (byte) gen_sintab::length#8 (byte) gen_sintab::length#4 (byte) gen_sintab::length#2 (byte) gen_sintab::length#15 (byte) gen_sintab::length#13 (byte) gen_sintab::length#9 (byte) gen_sintab::length#7 (byte) gen_sintab::length#5 (byte) gen_sintab::length#3 -Alias (byte[]) gen_sintab::f_amp#11 = (byte[]) gen_sintab::f_amp#14 (byte[]) gen_sintab::f_amp#15 (byte[]) gen_sintab::f_amp#13 (byte[]) gen_sintab::f_amp#9 (byte[]) gen_sintab::f_amp#7 (byte[]) gen_sintab::f_amp#4 (byte[]) gen_sintab::f_amp#22 (byte[]) gen_sintab::f_amp#21 (byte[]) gen_sintab::f_amp#19 (byte[]) gen_sintab::f_amp#17 -Alias (byte[]) gen_sintab::f_min#10 = (byte[]) gen_sintab::f_min#17 (byte[]) gen_sintab::f_min#18 (byte[]) gen_sintab::f_min#16 (byte[]) gen_sintab::f_min#14 (byte[]) gen_sintab::f_min#12 (byte[]) gen_sintab::f_min#7 (byte[]) gen_sintab::f_min#4 (byte[]) gen_sintab::f_min#22 (byte[]) gen_sintab::f_min#21 (byte[]) gen_sintab::f_min#20 Alias (byte*) gen_sintab::sintab#10 = (byte*) gen_sintab::sintab#11 (byte*) gen_sintab::sintab#9 (byte*) gen_sintab::sintab#8 (byte*) gen_sintab::sintab#7 (byte*) gen_sintab::sintab#6 (byte*) gen_sintab::sintab#5 (byte*) gen_sintab::sintab#4 (byte*) gen_sintab::sintab#3 (byte*) gen_sintab::sintab#2 (byte*) gen_sintab::sintab#13 Alias (byte) gen_sintab::i#10 = (byte) gen_sintab::i#12 (byte) gen_sintab::i#2 (byte) gen_sintab::i#11 (byte) gen_sintab::i#9 (byte) gen_sintab::i#8 (byte) gen_sintab::i#7 (byte) gen_sintab::i#6 (byte) gen_sintab::i#5 (byte) gen_sintab::i#3 (byte) gen_sintab::i#4 Alias (byte) progress_idx#34 = (byte) progress_idx#52 (byte) progress_idx#53 (byte) progress_idx#51 (byte) progress_idx#50 (byte) progress_idx#49 (byte) progress_idx#47 (byte) progress_idx#45 (byte) progress_idx#42 (byte) progress_idx#38 @@ -7600,8 +7321,7 @@ gen_sprites: scope:[gen_sprites] from init::@4 gen_sprites::@1: scope:[gen_sprites] from gen_sprites gen_sprites::@3 (byte*) gen_sprites::spr#2 ← phi( gen_sprites/(byte*) gen_sprites::spr#0 gen_sprites::@3/(byte*) gen_sprites::spr#1 ) (byte) gen_sprites::i#2 ← phi( gen_sprites/(byte) gen_sprites::i#0 gen_sprites::@3/(byte) gen_sprites::i#1 ) - (byte[]) gen_sprites::cml#1 ← phi( gen_sprites/(byte[]) gen_sprites::cml#0 gen_sprites::@3/(byte[]) gen_sprites::cml#1 ) - (byte) gen_chargen_sprite::ch#0 ← *((byte[]) gen_sprites::cml#1 + (byte) gen_sprites::i#2) + (byte) gen_chargen_sprite::ch#0 ← *((byte[]) gen_sprites::cml#0 + (byte) gen_sprites::i#2) (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 call gen_chargen_sprite param-assignment to:gen_sprites::@3 @@ -7777,10 +7497,7 @@ gen_sintab::@1: scope:[gen_sintab] from gen_sintab::@13 gen_sintab::@23 (byte*) progress_cursor#34 ← phi( gen_sintab::@13/(byte*) progress_cursor#54 gen_sintab::@23/(byte*) progress_cursor#12 ) (byte) progress_idx#34 ← phi( gen_sintab::@13/(byte) progress_idx#54 gen_sintab::@23/(byte) progress_idx#13 ) (byte*) gen_sintab::sintab#10 ← phi( gen_sintab::@13/(byte*) gen_sintab::sintab#12 gen_sintab::@23/(byte*) gen_sintab::sintab#10 ) - (byte[]) gen_sintab::f_min#10 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_min#0 gen_sintab::@23/(byte[]) gen_sintab::f_min#10 ) - (byte[]) gen_sintab::f_amp#11 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_amp#0 gen_sintab::@23/(byte[]) gen_sintab::f_amp#11 ) (byte) gen_sintab::length#11 ← phi( gen_sintab::@13/(byte) gen_sintab::length#10 gen_sintab::@23/(byte) gen_sintab::length#11 ) - (byte[]) gen_sintab::f_i#1 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_i#0 gen_sintab::@23/(byte[]) gen_sintab::f_i#1 ) (byte*) gen_sintab::f_2pi#1 ← phi( gen_sintab::@13/(byte*) gen_sintab::f_2pi#0 gen_sintab::@23/(byte*) gen_sintab::f_2pi#1 ) (byte) gen_sintab::i#10 ← phi( gen_sintab::@13/(byte) gen_sintab::i#0 gen_sintab::@23/(byte) gen_sintab::i#1 ) (word) setFAC::w#3 ← ((word)) (byte) gen_sintab::i#10 @@ -7791,7 +7508,7 @@ gen_sintab::@14: scope:[gen_sintab] from gen_sintab::@1 call mulFACbyMEM param-assignment to:gen_sintab::@15 gen_sintab::@15: scope:[gen_sintab] from gen_sintab::@14 - (byte*) setMEMtoFAC::mem#4 ← (byte[]) gen_sintab::f_i#1 + (byte*) setMEMtoFAC::mem#4 ← (byte[]) gen_sintab::f_i#0 call setMEMtoFAC param-assignment to:gen_sintab::@16 gen_sintab::@16: scope:[gen_sintab] from gen_sintab::@15 @@ -7799,18 +7516,18 @@ gen_sintab::@16: scope:[gen_sintab] from gen_sintab::@15 call setFAC param-assignment to:gen_sintab::@17 gen_sintab::@17: scope:[gen_sintab] from gen_sintab::@16 - (byte*) divMEMbyFAC::mem#1 ← (byte[]) gen_sintab::f_i#1 + (byte*) divMEMbyFAC::mem#1 ← (byte[]) gen_sintab::f_i#0 call divMEMbyFAC param-assignment to:gen_sintab::@18 gen_sintab::@18: scope:[gen_sintab] from gen_sintab::@17 call sinFAC param-assignment to:gen_sintab::@19 gen_sintab::@19: scope:[gen_sintab] from gen_sintab::@18 - (byte*) mulFACbyMEM::mem#1 ← (byte[]) gen_sintab::f_amp#11 + (byte*) mulFACbyMEM::mem#1 ← (byte[]) gen_sintab::f_amp#0 call mulFACbyMEM param-assignment to:gen_sintab::@20 gen_sintab::@20: scope:[gen_sintab] from gen_sintab::@19 - (byte*) addMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_min#10 + (byte*) addMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_min#0 call addMEMtoFAC param-assignment to:gen_sintab::@21 gen_sintab::@21: scope:[gen_sintab] from gen_sintab::@20 @@ -7907,10 +7624,10 @@ Not aliassing across scopes: setMEMtoFAC::mem#2 gen_sintab::f_amp#0 Not aliassing across scopes: addMEMtoFAC::mem#0 gen_sintab::f_min#0 Not aliassing across scopes: setMEMtoFAC::mem#3 gen_sintab::f_min#0 Not aliassing across scopes: mulFACbyMEM::mem#0 gen_sintab::f_2pi#1 -Not aliassing across scopes: setMEMtoFAC::mem#4 gen_sintab::f_i#1 -Not aliassing across scopes: divMEMbyFAC::mem#1 gen_sintab::f_i#1 -Not aliassing across scopes: mulFACbyMEM::mem#1 gen_sintab::f_amp#11 -Not aliassing across scopes: addMEMtoFAC::mem#1 gen_sintab::f_min#10 +Not aliassing across scopes: setMEMtoFAC::mem#4 gen_sintab::f_i#0 +Not aliassing across scopes: divMEMbyFAC::mem#1 gen_sintab::f_i#0 +Not aliassing across scopes: mulFACbyMEM::mem#1 gen_sintab::f_amp#0 +Not aliassing across scopes: addMEMtoFAC::mem#1 gen_sintab::f_min#0 Not aliassing across scopes: getFAC::return#2 getFAC::return#0 Not aliassing across scopes: gen_sintab::$23 getFAC::return#2 Not aliassing across scopes: progress_idx#13 progress_idx#12 @@ -8320,8 +8037,7 @@ gen_sprites: scope:[gen_sprites] from init::@4 gen_sprites::@1: scope:[gen_sprites] from gen_sprites gen_sprites::@3 (byte*) gen_sprites::spr#2 ← phi( gen_sprites/(byte*) gen_sprites::spr#0 gen_sprites::@3/(byte*) gen_sprites::spr#1 ) (byte) gen_sprites::i#2 ← phi( gen_sprites/(byte) gen_sprites::i#0 gen_sprites::@3/(byte) gen_sprites::i#1 ) - (byte[]) gen_sprites::cml#1 ← phi( gen_sprites/(byte[]) gen_sprites::cml#0 gen_sprites::@3/(byte[]) gen_sprites::cml#1 ) - (byte) gen_chargen_sprite::ch#0 ← *((byte[]) gen_sprites::cml#1 + (byte) gen_sprites::i#2) + (byte) gen_chargen_sprite::ch#0 ← *((byte[]) gen_sprites::cml#0 + (byte) gen_sprites::i#2) (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 call gen_chargen_sprite param-assignment to:gen_sprites::@3 @@ -8484,10 +8200,7 @@ gen_sintab::@1: scope:[gen_sintab] from gen_sintab::@13 gen_sintab::@23 (byte*) progress_cursor#34 ← phi( gen_sintab::@13/(byte*) progress_cursor#54 gen_sintab::@23/(byte*) progress_cursor#12 ) (byte) progress_idx#34 ← phi( gen_sintab::@13/(byte) progress_idx#54 gen_sintab::@23/(byte) progress_idx#13 ) (byte*) gen_sintab::sintab#10 ← phi( gen_sintab::@13/(byte*) gen_sintab::sintab#12 gen_sintab::@23/(byte*) gen_sintab::sintab#10 ) - (byte[]) gen_sintab::f_min#10 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_min#0 gen_sintab::@23/(byte[]) gen_sintab::f_min#10 ) - (byte[]) gen_sintab::f_amp#11 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_amp#0 gen_sintab::@23/(byte[]) gen_sintab::f_amp#11 ) (byte) gen_sintab::length#11 ← phi( gen_sintab::@13/(byte) gen_sintab::length#10 gen_sintab::@23/(byte) gen_sintab::length#11 ) - (byte[]) gen_sintab::f_i#1 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_i#0 gen_sintab::@23/(byte[]) gen_sintab::f_i#1 ) (byte*) gen_sintab::f_2pi#1 ← phi( gen_sintab::@13/(byte*) gen_sintab::f_2pi#0 gen_sintab::@23/(byte*) gen_sintab::f_2pi#1 ) (byte) gen_sintab::i#10 ← phi( gen_sintab::@13/(byte) gen_sintab::i#0 gen_sintab::@23/(byte) gen_sintab::i#1 ) (word) setFAC::w#3 ← ((word)) (byte) gen_sintab::i#10 @@ -8498,7 +8211,7 @@ gen_sintab::@14: scope:[gen_sintab] from gen_sintab::@1 call mulFACbyMEM param-assignment to:gen_sintab::@15 gen_sintab::@15: scope:[gen_sintab] from gen_sintab::@14 - (byte*) setMEMtoFAC::mem#4 ← (byte[]) gen_sintab::f_i#1 + (byte*) setMEMtoFAC::mem#4 ← (byte[]) gen_sintab::f_i#0 call setMEMtoFAC param-assignment to:gen_sintab::@16 gen_sintab::@16: scope:[gen_sintab] from gen_sintab::@15 @@ -8506,18 +8219,18 @@ gen_sintab::@16: scope:[gen_sintab] from gen_sintab::@15 call setFAC param-assignment to:gen_sintab::@17 gen_sintab::@17: scope:[gen_sintab] from gen_sintab::@16 - (byte*) divMEMbyFAC::mem#1 ← (byte[]) gen_sintab::f_i#1 + (byte*) divMEMbyFAC::mem#1 ← (byte[]) gen_sintab::f_i#0 call divMEMbyFAC param-assignment to:gen_sintab::@18 gen_sintab::@18: scope:[gen_sintab] from gen_sintab::@17 call sinFAC param-assignment to:gen_sintab::@19 gen_sintab::@19: scope:[gen_sintab] from gen_sintab::@18 - (byte*) mulFACbyMEM::mem#1 ← (byte[]) gen_sintab::f_amp#11 + (byte*) mulFACbyMEM::mem#1 ← (byte[]) gen_sintab::f_amp#0 call mulFACbyMEM param-assignment to:gen_sintab::@20 gen_sintab::@20: scope:[gen_sintab] from gen_sintab::@19 - (byte*) addMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_min#10 + (byte*) addMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_min#0 call addMEMtoFAC param-assignment to:gen_sintab::@21 gen_sintab::@21: scope:[gen_sintab] from gen_sintab::@20 @@ -8614,10 +8327,10 @@ Not aliassing across scopes: setMEMtoFAC::mem#2 gen_sintab::f_amp#0 Not aliassing across scopes: addMEMtoFAC::mem#0 gen_sintab::f_min#0 Not aliassing across scopes: setMEMtoFAC::mem#3 gen_sintab::f_min#0 Not aliassing across scopes: mulFACbyMEM::mem#0 gen_sintab::f_2pi#1 -Not aliassing across scopes: setMEMtoFAC::mem#4 gen_sintab::f_i#1 -Not aliassing across scopes: divMEMbyFAC::mem#1 gen_sintab::f_i#1 -Not aliassing across scopes: mulFACbyMEM::mem#1 gen_sintab::f_amp#11 -Not aliassing across scopes: addMEMtoFAC::mem#1 gen_sintab::f_min#10 +Not aliassing across scopes: setMEMtoFAC::mem#4 gen_sintab::f_i#0 +Not aliassing across scopes: divMEMbyFAC::mem#1 gen_sintab::f_i#0 +Not aliassing across scopes: mulFACbyMEM::mem#1 gen_sintab::f_amp#0 +Not aliassing across scopes: addMEMtoFAC::mem#1 gen_sintab::f_min#0 Not aliassing across scopes: getFAC::return#2 getFAC::return#0 Not aliassing across scopes: gen_sintab::$23 getFAC::return#2 Not aliassing across scopes: progress_idx#13 progress_idx#12 @@ -8637,17 +8350,13 @@ Self Phi Eliminated (byte) progress_idx#32 Self Phi Eliminated (byte) sin_idx_x#10 Self Phi Eliminated (byte) sin_idx_y#10 Self Phi Eliminated (byte*) place_sprites::sprites_ptr#1 -Self Phi Eliminated (byte[]) gen_sprites::cml#1 Self Phi Eliminated (byte) gen_chargen_sprite::c#2 Self Phi Eliminated (byte) gen_chargen_sprite::bits#3 Self Phi Eliminated (byte) gen_chargen_sprite::x#2 Self Phi Eliminated (byte) gen_chargen_sprite::y#3 Self Phi Eliminated (byte*) gen_chargen_sprite::chargen#2 Self Phi Eliminated (byte*) gen_sintab::f_2pi#1 -Self Phi Eliminated (byte[]) gen_sintab::f_i#1 Self Phi Eliminated (byte) gen_sintab::length#11 -Self Phi Eliminated (byte[]) gen_sintab::f_amp#11 -Self Phi Eliminated (byte[]) gen_sintab::f_min#10 Self Phi Eliminated (byte*) gen_sintab::sintab#10 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @@ -9029,8 +8738,7 @@ gen_sprites: scope:[gen_sprites] from init::@4 gen_sprites::@1: scope:[gen_sprites] from gen_sprites gen_sprites::@3 (byte*) gen_sprites::spr#2 ← phi( gen_sprites/(byte*) gen_sprites::spr#0 gen_sprites::@3/(byte*) gen_sprites::spr#1 ) (byte) gen_sprites::i#2 ← phi( gen_sprites/(byte) gen_sprites::i#0 gen_sprites::@3/(byte) gen_sprites::i#1 ) - (byte[]) gen_sprites::cml#1 ← phi( gen_sprites/(byte[]) gen_sprites::cml#0 ) - (byte) gen_chargen_sprite::ch#0 ← *((byte[]) gen_sprites::cml#1 + (byte) gen_sprites::i#2) + (byte) gen_chargen_sprite::ch#0 ← *((byte[]) gen_sprites::cml#0 + (byte) gen_sprites::i#2) (byte*) gen_chargen_sprite::sprite#0 ← (byte*) gen_sprites::spr#2 call gen_chargen_sprite param-assignment to:gen_sprites::@3 @@ -9193,10 +8901,7 @@ gen_sintab::@1: scope:[gen_sintab] from gen_sintab::@13 gen_sintab::@23 (byte*) progress_cursor#34 ← phi( gen_sintab::@13/(byte*) progress_cursor#54 gen_sintab::@23/(byte*) progress_cursor#12 ) (byte) progress_idx#34 ← phi( gen_sintab::@13/(byte) progress_idx#54 gen_sintab::@23/(byte) progress_idx#13 ) (byte*) gen_sintab::sintab#10 ← phi( gen_sintab::@13/(byte*) gen_sintab::sintab#12 ) - (byte[]) gen_sintab::f_min#10 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_min#0 ) - (byte[]) gen_sintab::f_amp#11 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_amp#0 ) (byte) gen_sintab::length#11 ← phi( gen_sintab::@13/(byte) gen_sintab::length#10 ) - (byte[]) gen_sintab::f_i#1 ← phi( gen_sintab::@13/(byte[]) gen_sintab::f_i#0 ) (byte*) gen_sintab::f_2pi#1 ← phi( gen_sintab::@13/(byte*) gen_sintab::f_2pi#0 ) (byte) gen_sintab::i#10 ← phi( gen_sintab::@13/(byte) gen_sintab::i#0 gen_sintab::@23/(byte) gen_sintab::i#1 ) (word) setFAC::w#3 ← ((word)) (byte) gen_sintab::i#10 @@ -9207,7 +8912,7 @@ gen_sintab::@14: scope:[gen_sintab] from gen_sintab::@1 call mulFACbyMEM param-assignment to:gen_sintab::@15 gen_sintab::@15: scope:[gen_sintab] from gen_sintab::@14 - (byte*) setMEMtoFAC::mem#4 ← (byte[]) gen_sintab::f_i#1 + (byte*) setMEMtoFAC::mem#4 ← (byte[]) gen_sintab::f_i#0 call setMEMtoFAC param-assignment to:gen_sintab::@16 gen_sintab::@16: scope:[gen_sintab] from gen_sintab::@15 @@ -9215,18 +8920,18 @@ gen_sintab::@16: scope:[gen_sintab] from gen_sintab::@15 call setFAC param-assignment to:gen_sintab::@17 gen_sintab::@17: scope:[gen_sintab] from gen_sintab::@16 - (byte*) divMEMbyFAC::mem#1 ← (byte[]) gen_sintab::f_i#1 + (byte*) divMEMbyFAC::mem#1 ← (byte[]) gen_sintab::f_i#0 call divMEMbyFAC param-assignment to:gen_sintab::@18 gen_sintab::@18: scope:[gen_sintab] from gen_sintab::@17 call sinFAC param-assignment to:gen_sintab::@19 gen_sintab::@19: scope:[gen_sintab] from gen_sintab::@18 - (byte*) mulFACbyMEM::mem#1 ← (byte[]) gen_sintab::f_amp#11 + (byte*) mulFACbyMEM::mem#1 ← (byte[]) gen_sintab::f_amp#0 call mulFACbyMEM param-assignment to:gen_sintab::@20 gen_sintab::@20: scope:[gen_sintab] from gen_sintab::@19 - (byte*) addMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_min#10 + (byte*) addMEMtoFAC::mem#1 ← (byte[]) gen_sintab::f_min#0 call addMEMtoFAC param-assignment to:gen_sintab::@21 gen_sintab::@21: scope:[gen_sintab] from gen_sintab::@20 @@ -9289,7 +8994,6 @@ Redundant Phi (byte) sin_idx_y#9 (byte) sin_idx_y#13 Redundant Phi (byte) sin_idx_x#10 (byte) sin_idx_x#9 Redundant Phi (byte) sin_idx_y#10 (byte) sin_idx_y#9 Redundant Phi (byte*) place_sprites::sprites_ptr#1 (byte*) place_sprites::sprites_ptr#0 -Redundant Phi (byte[]) gen_sprites::cml#1 (byte[]) gen_sprites::cml#0 Redundant Phi (byte) gen_chargen_sprite::ch#1 (byte) gen_chargen_sprite::ch#0 Redundant Phi (byte*) gen_chargen_sprite::sprite#12 (byte*) gen_chargen_sprite::sprite#0 Redundant Phi (byte) gen_chargen_sprite::c#2 (byte) gen_chargen_sprite::c#3 @@ -9298,10 +9002,7 @@ Redundant Phi (byte) gen_chargen_sprite::x#2 (byte) gen_chargen_sprite::x#6 Redundant Phi (byte) gen_chargen_sprite::y#3 (byte) gen_chargen_sprite::y#10 Redundant Phi (byte*) gen_chargen_sprite::chargen#2 (byte*) gen_chargen_sprite::chargen#7 Redundant Phi (byte*) gen_sintab::f_2pi#1 (byte*) gen_sintab::f_2pi#0 -Redundant Phi (byte[]) gen_sintab::f_i#1 (byte[]) gen_sintab::f_i#0 Redundant Phi (byte) gen_sintab::length#11 (byte) gen_sintab::length#10 -Redundant Phi (byte[]) gen_sintab::f_amp#11 (byte[]) gen_sintab::f_amp#0 -Redundant Phi (byte[]) gen_sintab::f_min#10 (byte[]) gen_sintab::f_min#0 Redundant Phi (byte*) gen_sintab::sintab#10 (byte*) gen_sintab::sintab#12 Redundant Phi (byte) progress_idx#13 (byte) progress_idx#12 Redundant Phi (byte*) progress_cursor#12 (byte*) progress_cursor#11 diff --git a/src/main/java/dk/camelot64/kickc/test/ref/voronoi.log b/src/main/java/dk/camelot64/kickc/test/ref/voronoi.log index a45b6deac..ab3fad163 100644 --- a/src/main/java/dk/camelot64/kickc/test/ref/voronoi.log +++ b/src/main/java/dk/camelot64/kickc/test/ref/voronoi.log @@ -1027,43 +1027,28 @@ CONTROL FLOW GRAPH SSA (byte[]) COLS#0 ← { (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 5, (byte/signed byte/word/signed word) 7 } to:@5 main: scope:[main] from @5 - (byte[]) COLS#22 ← phi( @5/(byte[]) COLS#24 ) (byte) numpoints#22 ← phi( @5/(byte) numpoints#24 ) - (byte[]) YPOS#28 ← phi( @5/(byte[]) YPOS#31 ) - (byte[]) XPOS#26 ← phi( @5/(byte[]) XPOS#30 ) (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[]) COLS#20 ← phi( main/(byte[]) COLS#22 ) (byte) numpoints#20 ← phi( main/(byte) numpoints#22 ) - (byte[]) YPOS#23 ← phi( main/(byte[]) YPOS#28 ) - (byte[]) XPOS#20 ← phi( main/(byte[]) XPOS#26 ) (byte*) COLORS#3 ← phi( main/(byte*) COLORS#5 ) to:main::@1 main::@1: scope:[main] from main::@3 main::@5 - (byte[]) COLS#19 ← phi( main::@3/(byte[]) COLS#20 main::@5/(byte[]) COLS#21 ) (byte) numpoints#19 ← phi( main::@3/(byte) numpoints#20 main::@5/(byte) numpoints#21 ) - (byte[]) YPOS#18 ← phi( main::@3/(byte[]) YPOS#23 main::@5/(byte[]) YPOS#24 ) - (byte[]) XPOS#14 ← phi( main::@3/(byte[]) XPOS#20 main::@5/(byte[]) XPOS#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[]) COLS#23 ← phi( main::@1/(byte[]) COLS#19 ) (byte) numpoints#23 ← phi( main::@1/(byte) numpoints#19 ) (byte*) COLORS#6 ← phi( main::@1/(byte*) COLORS#2 ) - (byte[]) YPOS#14 ← phi( main::@1/(byte[]) YPOS#18 ) - (byte[]) XPOS#8 ← phi( main::@1/(byte[]) XPOS#14 ) call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - (byte[]) COLS#21 ← phi( main::@4/(byte[]) COLS#23 ) (byte) numpoints#21 ← phi( main::@4/(byte) numpoints#23 ) - (byte[]) YPOS#24 ← phi( main::@4/(byte[]) YPOS#14 ) - (byte[]) XPOS#21 ← phi( main::@4/(byte[]) XPOS#8 ) (byte*) COLORS#4 ← phi( main::@4/(byte*) COLORS#6 ) if(true) goto main::@1 to:main::@return @@ -1071,88 +1056,67 @@ main::@return: scope:[main] from main::@5 return to:@return animate: scope:[animate] from main::@4 - (byte[]) YPOS#8 ← phi( main::@4/(byte[]) YPOS#14 ) - (byte[]) XPOS#1 ← phi( main::@4/(byte[]) XPOS#8 ) - (byte/word~) animate::$0 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 - (boolean~) animate::$1 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) == (byte/signed byte/word/signed word) 40 + (byte/word~) animate::$0 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 + (boolean~) animate::$1 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) == (byte/signed byte/word/signed word) 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[]) XPOS#9 ← phi( animate/(byte[]) XPOS#1 animate::@7/(byte[]) XPOS#2 ) - (byte[]) YPOS#1 ← phi( animate/(byte[]) YPOS#8 animate::@7/(byte[]) YPOS#9 ) - (byte/word~) animate::$3 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 - (boolean~) animate::$4 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) == (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$3 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 + (boolean~) animate::$4 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) == (byte/signed byte/word/signed word) 25 (boolean~) animate::$5 ← ! (boolean~) animate::$4 if((boolean~) animate::$5) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - (byte[]) YPOS#9 ← phi( animate/(byte[]) YPOS#8 ) - (byte[]) XPOS#2 ← phi( animate/(byte[]) XPOS#1 ) - *((byte[]) XPOS#2 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte[]) YPOS#10 ← phi( animate::@1/(byte[]) YPOS#1 animate::@8/(byte[]) YPOS#2 ) - (byte[]) XPOS#3 ← phi( animate::@1/(byte[]) XPOS#9 animate::@8/(byte[]) XPOS#10 ) - (byte/signed byte/word/signed word~) animate::$6 ← *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 - *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 - (boolean~) animate::$7 ← *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) == (byte/word/signed word) 255 + (byte/signed byte/word/signed word~) animate::$6 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 + (boolean~) animate::$7 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) == (byte/word/signed word) 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[]) XPOS#10 ← phi( animate::@1/(byte[]) XPOS#9 ) - (byte[]) YPOS#2 ← phi( animate::@1/(byte[]) YPOS#1 ) - *((byte[]) YPOS#2 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte[]) XPOS#16 ← phi( animate::@2/(byte[]) XPOS#3 animate::@9/(byte[]) XPOS#4 ) - (byte[]) YPOS#3 ← phi( animate::@2/(byte[]) YPOS#10 animate::@9/(byte[]) YPOS#11 ) - (byte/word~) animate::$9 ← *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 - (boolean~) animate::$10 ← *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) == (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$9 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 + (boolean~) animate::$10 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) == (byte/signed byte/word/signed word) 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[]) YPOS#11 ← phi( animate::@2/(byte[]) YPOS#10 ) - (byte[]) XPOS#4 ← phi( animate::@2/(byte[]) XPOS#3 ) - *((byte[]) XPOS#4 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 40 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte[]) XPOS#11 ← phi( animate::@10/(byte[]) XPOS#15 animate::@3/(byte[]) XPOS#16 ) - (byte[]) YPOS#4 ← phi( animate::@10/(byte[]) YPOS#5 animate::@3/(byte[]) YPOS#3 ) - (byte/signed byte/word/signed word~) animate::$12 ← *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 - (boolean~) animate::$13 ← *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) == (byte/word/signed word) 255 + (byte/signed byte/word/signed word~) animate::$12 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 + (boolean~) animate::$13 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) == (byte/word/signed word) 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[]) XPOS#15 ← phi( animate::@3/(byte[]) XPOS#16 ) - (byte[]) YPOS#5 ← phi( animate::@3/(byte[]) YPOS#3 ) - *((byte[]) YPOS#5 + (byte/signed byte/word/signed word) 2) ← (byte/signed byte/word/signed word) 0 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) ← (byte/signed byte/word/signed word) 0 to:animate::@4 animate::@5: scope:[animate] from animate::@4 to:animate::@return animate::@11: scope:[animate] from animate::@4 - (byte[]) XPOS#5 ← phi( animate::@4/(byte[]) XPOS#11 ) - (byte[]) YPOS#6 ← phi( animate::@4/(byte[]) YPOS#4 ) - *((byte[]) YPOS#6 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word) 25 - (byte/word~) animate::$15 ← *((byte[]) XPOS#5 + (byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 - *((byte[]) XPOS#5 + (byte/signed byte/word/signed word) 3) ← (byte/word~) animate::$15 - (boolean~) animate::$16 ← *((byte[]) XPOS#5 + (byte/signed byte/word/signed word) 3) >= (byte/signed byte/word/signed word) 40 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$15 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/word~) animate::$15 + (boolean~) animate::$16 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) >= (byte/signed byte/word/signed word) 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[]) XPOS#6 ← phi( animate::@11/(byte[]) XPOS#5 ) - (byte/signed byte/word/signed word~) animate::$18 ← *((byte[]) XPOS#6 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 40 - *((byte[]) XPOS#6 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$18 + (byte/signed byte/word/signed word~) animate::$18 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 40 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$18 to:animate::@return animate::@return: scope:[animate] from animate::@12 animate::@5 animate::@6 return @@ -1176,28 +1140,19 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 return to:@return render: scope:[render] from main::@1 - (byte[]) COLS#17 ← phi( main::@1/(byte[]) COLS#19 ) (byte) numpoints#17 ← phi( main::@1/(byte) numpoints#19 ) - (byte[]) YPOS#25 ← phi( main::@1/(byte[]) YPOS#18 ) - (byte[]) XPOS#27 ← phi( main::@1/(byte[]) XPOS#14 ) (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) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[]) COLS#15 ← phi( render/(byte[]) COLS#17 render::@3/(byte[]) COLS#18 ) (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#18 ) - (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#25 render::@3/(byte[]) YPOS#26 ) - (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#27 render::@3/(byte[]) XPOS#28 ) (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) 0 to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[]) COLS#14 ← phi( render::@1/(byte[]) COLS#15 render::@5/(byte[]) COLS#16 ) (byte) numpoints#14 ← phi( render::@1/(byte) numpoints#15 render::@5/(byte) numpoints#16 ) - (byte[]) YPOS#15 ← phi( render::@1/(byte[]) YPOS#19 render::@5/(byte[]) YPOS#20 ) - (byte[]) XPOS#17 ← phi( render::@1/(byte[]) XPOS#22 render::@5/(byte[]) XPOS#23 ) (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 ) @@ -1206,10 +1161,7 @@ render::@2: scope:[render] from render::@1 render::@5 (byte) findcol::return#0 ← call findcol param-assignment to:render::@5 render::@5: scope:[render] from render::@2 - (byte[]) COLS#16 ← phi( render::@2/(byte[]) COLS#14 ) (byte) numpoints#16 ← phi( render::@2/(byte) numpoints#14 ) - (byte[]) YPOS#20 ← phi( render::@2/(byte[]) YPOS#15 ) - (byte[]) XPOS#23 ← phi( render::@2/(byte[]) XPOS#17 ) (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 ) @@ -1222,10 +1174,7 @@ render::@5: scope:[render] from render::@2 if((boolean~) render::$1) goto render::@2 to:render::@3 render::@3: scope:[render] from render::@5 - (byte[]) COLS#18 ← phi( render::@5/(byte[]) COLS#16 ) (byte) numpoints#18 ← phi( render::@5/(byte) numpoints#16 ) - (byte[]) YPOS#26 ← phi( render::@5/(byte[]) YPOS#20 ) - (byte[]) XPOS#28 ← phi( render::@5/(byte[]) XPOS#23 ) (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) 40 @@ -1238,37 +1187,28 @@ render::@return: scope:[render] from render::@3 return to:@return findcol: scope:[findcol] from render::@2 - (byte[]) COLS#11 ← phi( render::@2/(byte[]) COLS#14 ) (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[]) YPOS#12 ← phi( render::@2/(byte[]) YPOS#15 ) - (byte[]) XPOS#12 ← phi( render::@2/(byte[]) XPOS#17 ) (byte) findcol::mindiff#0 ← (byte/word/signed word) 255 (byte) findcol::mincol#0 ← (byte/signed byte/word/signed word) 0 (byte) findcol::i#0 ← (byte/signed byte/word/signed word) 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[]) COLS#9 ← phi( findcol/(byte[]) COLS#11 findcol::@8/(byte[]) COLS#12 ) (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[]) YPOS#7 ← phi( findcol/(byte[]) YPOS#12 findcol::@8/(byte[]) YPOS#13 ) (byte) findcol::i#2 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[]) XPOS#7 ← phi( findcol/(byte[]) XPOS#12 findcol::@8/(byte[]) XPOS#13 ) - (byte) findcol::xp#0 ← *((byte[]) XPOS#7 + (byte) findcol::i#2) - (byte) findcol::yp#0 ← *((byte[]) YPOS#7 + (byte) findcol::i#2) + (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[]) YPOS#32 ← phi( findcol::@1/(byte[]) YPOS#7 findcol::@3/(byte[]) YPOS#33 ) - (byte[]) XPOS#33 ← phi( findcol::@1/(byte[]) XPOS#7 findcol::@3/(byte[]) XPOS#34 ) - (byte[]) COLS#8 ← phi( findcol::@1/(byte[]) COLS#9 findcol::@3/(byte[]) COLS#10 ) (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 ) @@ -1282,9 +1222,6 @@ findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 to:findcol::@12 findcol::@9: scope:[findcol] from findcol::@1 (byte) findcol::mincol#13 ← phi( findcol::@1/(byte) findcol::mincol#11 ) - (byte[]) YPOS#34 ← phi( findcol::@1/(byte[]) YPOS#7 ) - (byte[]) XPOS#35 ← phi( findcol::@1/(byte[]) XPOS#7 ) - (byte[]) COLS#13 ← phi( findcol::@1/(byte[]) COLS#9 ) (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 ) @@ -1298,9 +1235,6 @@ findcol::@9: scope:[findcol] from findcol::@1 to:findcol::@10 findcol::@3: scope:[findcol] from findcol::@9 (byte) findcol::mincol#12 ← phi( findcol::@9/(byte) findcol::mincol#13 ) - (byte[]) YPOS#33 ← phi( findcol::@9/(byte[]) YPOS#34 ) - (byte[]) XPOS#34 ← phi( findcol::@9/(byte[]) XPOS#35 ) - (byte[]) COLS#10 ← phi( findcol::@9/(byte[]) COLS#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 ) @@ -1319,9 +1253,6 @@ findcol::@return: scope:[findcol] from findcol::@10 findcol::@17 to:@return findcol::@4: scope:[findcol] from findcol::@2 (byte) findcol::mincol#9 ← phi( findcol::@2/(byte) findcol::mincol#10 ) - (byte[]) YPOS#30 ← phi( findcol::@2/(byte[]) YPOS#32 ) - (byte[]) XPOS#32 ← phi( findcol::@2/(byte[]) XPOS#33 ) - (byte[]) COLS#7 ← phi( findcol::@2/(byte[]) COLS#8 ) (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 ) @@ -1334,9 +1265,6 @@ findcol::@4: scope:[findcol] from findcol::@2 to:findcol::@5 findcol::@12: scope:[findcol] from findcol::@2 (byte) findcol::mincol#8 ← phi( findcol::@2/(byte) findcol::mincol#10 ) - (byte[]) YPOS#29 ← phi( findcol::@2/(byte[]) YPOS#32 ) - (byte[]) XPOS#31 ← phi( findcol::@2/(byte[]) XPOS#33 ) - (byte[]) COLS#6 ← phi( findcol::@2/(byte[]) COLS#8 ) (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 ) @@ -1350,9 +1278,6 @@ findcol::@12: scope:[findcol] from findcol::@2 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[]) YPOS#27 ← phi( findcol::@12/(byte[]) YPOS#29 findcol::@4/(byte[]) YPOS#30 ) - (byte[]) XPOS#29 ← phi( findcol::@12/(byte[]) XPOS#31 findcol::@4/(byte[]) XPOS#32 ) - (byte[]) COLS#5 ← phi( findcol::@12/(byte[]) COLS#6 findcol::@4/(byte[]) COLS#7 ) (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 ) @@ -1366,9 +1291,6 @@ findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 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[]) YPOS#22 ← phi( findcol::@5/(byte[]) YPOS#27 ) - (byte[]) XPOS#25 ← phi( findcol::@5/(byte[]) XPOS#29 ) - (byte[]) COLS#4 ← phi( findcol::@5/(byte[]) COLS#5 ) (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 ) @@ -1382,9 +1304,6 @@ findcol::@6: scope:[findcol] from findcol::@5 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[]) YPOS#21 ← phi( findcol::@5/(byte[]) YPOS#27 ) - (byte[]) XPOS#24 ← phi( findcol::@5/(byte[]) XPOS#29 ) - (byte[]) COLS#3 ← phi( findcol::@5/(byte[]) COLS#5 ) (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 ) @@ -1399,9 +1318,6 @@ 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[]) YPOS#17 ← phi( findcol::@14/(byte[]) YPOS#21 findcol::@6/(byte[]) YPOS#22 ) - (byte[]) XPOS#19 ← phi( findcol::@14/(byte[]) XPOS#24 findcol::@6/(byte[]) XPOS#25 ) - (byte[]) COLS#2 ← phi( findcol::@14/(byte[]) COLS#3 findcol::@6/(byte[]) COLS#4 ) (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 ) @@ -1411,13 +1327,10 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 if((boolean~) findcol::$15) goto findcol::@8 to:findcol::@16 findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 - (byte[]) COLS#12 ← phi( findcol::@16/(byte[]) COLS#1 findcol::@7/(byte[]) COLS#2 ) (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[]) YPOS#13 ← phi( findcol::@16/(byte[]) YPOS#16 findcol::@7/(byte[]) YPOS#17 ) - (byte[]) XPOS#13 ← phi( findcol::@16/(byte[]) XPOS#18 findcol::@7/(byte[]) XPOS#19 ) (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 @@ -1427,24 +1340,18 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 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[]) YPOS#16 ← phi( findcol::@7/(byte[]) YPOS#17 ) - (byte[]) XPOS#18 ← phi( findcol::@7/(byte[]) XPOS#19 ) (byte) numpoints#2 ← phi( findcol::@7/(byte) numpoints#3 ) (byte) findcol::i#4 ← phi( findcol::@7/(byte) findcol::i#5 ) - (byte[]) COLS#1 ← phi( findcol::@7/(byte[]) COLS#2 ) (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#1 + (byte) findcol::i#4) + (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[]) COLS#24 ← phi( @begin/(byte[]) COLS#0 ) (byte) numpoints#24 ← phi( @begin/(byte) numpoints#0 ) - (byte[]) YPOS#31 ← phi( @begin/(byte[]) YPOS#0 ) - (byte[]) XPOS#30 ← phi( @begin/(byte[]) XPOS#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 ) @@ -1465,43 +1372,28 @@ CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN (byte[]) COLS#0 ← { (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 5, (byte/signed byte/word/signed word) 7 } to:@5 main: scope:[main] from @5 - (byte[]) COLS#22 ← phi( @5/(byte[]) COLS#24 ) (byte) numpoints#22 ← phi( @5/(byte) numpoints#24 ) - (byte[]) YPOS#28 ← phi( @5/(byte[]) YPOS#31 ) - (byte[]) XPOS#26 ← phi( @5/(byte[]) XPOS#30 ) (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[]) COLS#20 ← phi( main/(byte[]) COLS#22 ) (byte) numpoints#20 ← phi( main/(byte) numpoints#22 ) - (byte[]) YPOS#23 ← phi( main/(byte[]) YPOS#28 ) - (byte[]) XPOS#20 ← phi( main/(byte[]) XPOS#26 ) (byte*) COLORS#3 ← phi( main/(byte*) COLORS#5 ) to:main::@1 main::@1: scope:[main] from main::@3 main::@5 - (byte[]) COLS#19 ← phi( main::@3/(byte[]) COLS#20 main::@5/(byte[]) COLS#21 ) (byte) numpoints#19 ← phi( main::@3/(byte) numpoints#20 main::@5/(byte) numpoints#21 ) - (byte[]) YPOS#18 ← phi( main::@3/(byte[]) YPOS#23 main::@5/(byte[]) YPOS#24 ) - (byte[]) XPOS#14 ← phi( main::@3/(byte[]) XPOS#20 main::@5/(byte[]) XPOS#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[]) COLS#23 ← phi( main::@1/(byte[]) COLS#19 ) (byte) numpoints#23 ← phi( main::@1/(byte) numpoints#19 ) (byte*) COLORS#6 ← phi( main::@1/(byte*) COLORS#2 ) - (byte[]) YPOS#14 ← phi( main::@1/(byte[]) YPOS#18 ) - (byte[]) XPOS#8 ← phi( main::@1/(byte[]) XPOS#14 ) call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - (byte[]) COLS#21 ← phi( main::@4/(byte[]) COLS#23 ) (byte) numpoints#21 ← phi( main::@4/(byte) numpoints#23 ) - (byte[]) YPOS#24 ← phi( main::@4/(byte[]) YPOS#14 ) - (byte[]) XPOS#21 ← phi( main::@4/(byte[]) XPOS#8 ) (byte*) COLORS#4 ← phi( main::@4/(byte*) COLORS#6 ) if(true) goto main::@1 to:main::@return @@ -1509,88 +1401,67 @@ main::@return: scope:[main] from main::@5 return to:@return animate: scope:[animate] from main::@4 - (byte[]) YPOS#8 ← phi( main::@4/(byte[]) YPOS#14 ) - (byte[]) XPOS#1 ← phi( main::@4/(byte[]) XPOS#8 ) - (byte/word~) animate::$0 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 - (boolean~) animate::$1 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) == (byte/signed byte/word/signed word) 40 + (byte/word~) animate::$0 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 + (boolean~) animate::$1 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) == (byte/signed byte/word/signed word) 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[]) XPOS#9 ← phi( animate/(byte[]) XPOS#1 animate::@7/(byte[]) XPOS#2 ) - (byte[]) YPOS#1 ← phi( animate/(byte[]) YPOS#8 animate::@7/(byte[]) YPOS#9 ) - (byte/word~) animate::$3 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 - (boolean~) animate::$4 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) == (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$3 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 + (boolean~) animate::$4 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) == (byte/signed byte/word/signed word) 25 (boolean~) animate::$5 ← ! (boolean~) animate::$4 if((boolean~) animate::$5) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - (byte[]) YPOS#9 ← phi( animate/(byte[]) YPOS#8 ) - (byte[]) XPOS#2 ← phi( animate/(byte[]) XPOS#1 ) - *((byte[]) XPOS#2 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte[]) YPOS#10 ← phi( animate::@1/(byte[]) YPOS#1 animate::@8/(byte[]) YPOS#2 ) - (byte[]) XPOS#3 ← phi( animate::@1/(byte[]) XPOS#9 animate::@8/(byte[]) XPOS#10 ) - (byte/signed byte/word/signed word~) animate::$6 ← *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 - *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 - (boolean~) animate::$7 ← *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) == (byte/word/signed word) 255 + (byte/signed byte/word/signed word~) animate::$6 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 + (boolean~) animate::$7 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) == (byte/word/signed word) 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[]) XPOS#10 ← phi( animate::@1/(byte[]) XPOS#9 ) - (byte[]) YPOS#2 ← phi( animate::@1/(byte[]) YPOS#1 ) - *((byte[]) YPOS#2 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte[]) XPOS#16 ← phi( animate::@2/(byte[]) XPOS#3 animate::@9/(byte[]) XPOS#4 ) - (byte[]) YPOS#3 ← phi( animate::@2/(byte[]) YPOS#10 animate::@9/(byte[]) YPOS#11 ) - (byte/word~) animate::$9 ← *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 - (boolean~) animate::$10 ← *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) == (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$9 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 + (boolean~) animate::$10 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) == (byte/signed byte/word/signed word) 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[]) YPOS#11 ← phi( animate::@2/(byte[]) YPOS#10 ) - (byte[]) XPOS#4 ← phi( animate::@2/(byte[]) XPOS#3 ) - *((byte[]) XPOS#4 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 40 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte[]) XPOS#11 ← phi( animate::@10/(byte[]) XPOS#15 animate::@3/(byte[]) XPOS#16 ) - (byte[]) YPOS#4 ← phi( animate::@10/(byte[]) YPOS#5 animate::@3/(byte[]) YPOS#3 ) - (byte/signed byte/word/signed word~) animate::$12 ← *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 - (boolean~) animate::$13 ← *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) == (byte/word/signed word) 255 + (byte/signed byte/word/signed word~) animate::$12 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 + (boolean~) animate::$13 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) == (byte/word/signed word) 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[]) XPOS#15 ← phi( animate::@3/(byte[]) XPOS#16 ) - (byte[]) YPOS#5 ← phi( animate::@3/(byte[]) YPOS#3 ) - *((byte[]) YPOS#5 + (byte/signed byte/word/signed word) 2) ← (byte/signed byte/word/signed word) 0 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) ← (byte/signed byte/word/signed word) 0 to:animate::@4 animate::@5: scope:[animate] from animate::@4 to:animate::@return animate::@11: scope:[animate] from animate::@4 - (byte[]) XPOS#5 ← phi( animate::@4/(byte[]) XPOS#11 ) - (byte[]) YPOS#6 ← phi( animate::@4/(byte[]) YPOS#4 ) - *((byte[]) YPOS#6 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word) 25 - (byte/word~) animate::$15 ← *((byte[]) XPOS#5 + (byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 - *((byte[]) XPOS#5 + (byte/signed byte/word/signed word) 3) ← (byte/word~) animate::$15 - (boolean~) animate::$16 ← *((byte[]) XPOS#5 + (byte/signed byte/word/signed word) 3) >= (byte/signed byte/word/signed word) 40 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$15 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/word~) animate::$15 + (boolean~) animate::$16 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) >= (byte/signed byte/word/signed word) 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[]) XPOS#6 ← phi( animate::@11/(byte[]) XPOS#5 ) - (byte/signed byte/word/signed word~) animate::$18 ← *((byte[]) XPOS#6 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 40 - *((byte[]) XPOS#6 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$18 + (byte/signed byte/word/signed word~) animate::$18 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 40 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$18 to:animate::@return animate::@return: scope:[animate] from animate::@12 animate::@5 animate::@6 return @@ -1614,28 +1485,19 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 return to:@return render: scope:[render] from main::@1 - (byte[]) COLS#17 ← phi( main::@1/(byte[]) COLS#19 ) (byte) numpoints#17 ← phi( main::@1/(byte) numpoints#19 ) - (byte[]) YPOS#25 ← phi( main::@1/(byte[]) YPOS#18 ) - (byte[]) XPOS#27 ← phi( main::@1/(byte[]) XPOS#14 ) (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) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[]) COLS#15 ← phi( render/(byte[]) COLS#17 render::@3/(byte[]) COLS#18 ) (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#18 ) - (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#25 render::@3/(byte[]) YPOS#26 ) - (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#27 render::@3/(byte[]) XPOS#28 ) (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) 0 to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[]) COLS#14 ← phi( render::@1/(byte[]) COLS#15 render::@5/(byte[]) COLS#16 ) (byte) numpoints#14 ← phi( render::@1/(byte) numpoints#15 render::@5/(byte) numpoints#16 ) - (byte[]) YPOS#15 ← phi( render::@1/(byte[]) YPOS#19 render::@5/(byte[]) YPOS#20 ) - (byte[]) XPOS#17 ← phi( render::@1/(byte[]) XPOS#22 render::@5/(byte[]) XPOS#23 ) (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 ) @@ -1645,10 +1507,7 @@ render::@2: scope:[render] from render::@1 render::@5 (byte) findcol::return#0 ← (byte) findcol::return#2 to:render::@5 render::@5: scope:[render] from render::@2 - (byte[]) COLS#16 ← phi( render::@2/(byte[]) COLS#14 ) (byte) numpoints#16 ← phi( render::@2/(byte) numpoints#14 ) - (byte[]) YPOS#20 ← phi( render::@2/(byte[]) YPOS#15 ) - (byte[]) XPOS#23 ← phi( render::@2/(byte[]) XPOS#17 ) (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 ) @@ -1661,10 +1520,7 @@ render::@5: scope:[render] from render::@2 if((boolean~) render::$1) goto render::@2 to:render::@3 render::@3: scope:[render] from render::@5 - (byte[]) COLS#18 ← phi( render::@5/(byte[]) COLS#16 ) (byte) numpoints#18 ← phi( render::@5/(byte) numpoints#16 ) - (byte[]) YPOS#26 ← phi( render::@5/(byte[]) YPOS#20 ) - (byte[]) XPOS#28 ← phi( render::@5/(byte[]) XPOS#23 ) (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) 40 @@ -1677,37 +1533,28 @@ render::@return: scope:[render] from render::@3 return to:@return findcol: scope:[findcol] from render::@2 - (byte[]) COLS#11 ← phi( render::@2/(byte[]) COLS#14 ) (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[]) YPOS#12 ← phi( render::@2/(byte[]) YPOS#15 ) - (byte[]) XPOS#12 ← phi( render::@2/(byte[]) XPOS#17 ) (byte) findcol::mindiff#0 ← (byte/word/signed word) 255 (byte) findcol::mincol#0 ← (byte/signed byte/word/signed word) 0 (byte) findcol::i#0 ← (byte/signed byte/word/signed word) 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[]) COLS#9 ← phi( findcol/(byte[]) COLS#11 findcol::@8/(byte[]) COLS#12 ) (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[]) YPOS#7 ← phi( findcol/(byte[]) YPOS#12 findcol::@8/(byte[]) YPOS#13 ) (byte) findcol::i#2 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[]) XPOS#7 ← phi( findcol/(byte[]) XPOS#12 findcol::@8/(byte[]) XPOS#13 ) - (byte) findcol::xp#0 ← *((byte[]) XPOS#7 + (byte) findcol::i#2) - (byte) findcol::yp#0 ← *((byte[]) YPOS#7 + (byte) findcol::i#2) + (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[]) YPOS#32 ← phi( findcol::@1/(byte[]) YPOS#7 findcol::@3/(byte[]) YPOS#33 ) - (byte[]) XPOS#33 ← phi( findcol::@1/(byte[]) XPOS#7 findcol::@3/(byte[]) XPOS#34 ) - (byte[]) COLS#8 ← phi( findcol::@1/(byte[]) COLS#9 findcol::@3/(byte[]) COLS#10 ) (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 ) @@ -1721,9 +1568,6 @@ findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 to:findcol::@12 findcol::@9: scope:[findcol] from findcol::@1 (byte) findcol::mincol#13 ← phi( findcol::@1/(byte) findcol::mincol#11 ) - (byte[]) YPOS#34 ← phi( findcol::@1/(byte[]) YPOS#7 ) - (byte[]) XPOS#35 ← phi( findcol::@1/(byte[]) XPOS#7 ) - (byte[]) COLS#13 ← phi( findcol::@1/(byte[]) COLS#9 ) (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 ) @@ -1737,9 +1581,6 @@ findcol::@9: scope:[findcol] from findcol::@1 to:findcol::@10 findcol::@3: scope:[findcol] from findcol::@9 (byte) findcol::mincol#12 ← phi( findcol::@9/(byte) findcol::mincol#13 ) - (byte[]) YPOS#33 ← phi( findcol::@9/(byte[]) YPOS#34 ) - (byte[]) XPOS#34 ← phi( findcol::@9/(byte[]) XPOS#35 ) - (byte[]) COLS#10 ← phi( findcol::@9/(byte[]) COLS#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 ) @@ -1758,9 +1599,6 @@ findcol::@return: scope:[findcol] from findcol::@10 findcol::@17 to:@return findcol::@4: scope:[findcol] from findcol::@2 (byte) findcol::mincol#9 ← phi( findcol::@2/(byte) findcol::mincol#10 ) - (byte[]) YPOS#30 ← phi( findcol::@2/(byte[]) YPOS#32 ) - (byte[]) XPOS#32 ← phi( findcol::@2/(byte[]) XPOS#33 ) - (byte[]) COLS#7 ← phi( findcol::@2/(byte[]) COLS#8 ) (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 ) @@ -1773,9 +1611,6 @@ findcol::@4: scope:[findcol] from findcol::@2 to:findcol::@5 findcol::@12: scope:[findcol] from findcol::@2 (byte) findcol::mincol#8 ← phi( findcol::@2/(byte) findcol::mincol#10 ) - (byte[]) YPOS#29 ← phi( findcol::@2/(byte[]) YPOS#32 ) - (byte[]) XPOS#31 ← phi( findcol::@2/(byte[]) XPOS#33 ) - (byte[]) COLS#6 ← phi( findcol::@2/(byte[]) COLS#8 ) (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 ) @@ -1789,9 +1624,6 @@ findcol::@12: scope:[findcol] from findcol::@2 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[]) YPOS#27 ← phi( findcol::@12/(byte[]) YPOS#29 findcol::@4/(byte[]) YPOS#30 ) - (byte[]) XPOS#29 ← phi( findcol::@12/(byte[]) XPOS#31 findcol::@4/(byte[]) XPOS#32 ) - (byte[]) COLS#5 ← phi( findcol::@12/(byte[]) COLS#6 findcol::@4/(byte[]) COLS#7 ) (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 ) @@ -1805,9 +1637,6 @@ findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 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[]) YPOS#22 ← phi( findcol::@5/(byte[]) YPOS#27 ) - (byte[]) XPOS#25 ← phi( findcol::@5/(byte[]) XPOS#29 ) - (byte[]) COLS#4 ← phi( findcol::@5/(byte[]) COLS#5 ) (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 ) @@ -1821,9 +1650,6 @@ findcol::@6: scope:[findcol] from findcol::@5 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[]) YPOS#21 ← phi( findcol::@5/(byte[]) YPOS#27 ) - (byte[]) XPOS#24 ← phi( findcol::@5/(byte[]) XPOS#29 ) - (byte[]) COLS#3 ← phi( findcol::@5/(byte[]) COLS#5 ) (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 ) @@ -1838,9 +1664,6 @@ 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[]) YPOS#17 ← phi( findcol::@14/(byte[]) YPOS#21 findcol::@6/(byte[]) YPOS#22 ) - (byte[]) XPOS#19 ← phi( findcol::@14/(byte[]) XPOS#24 findcol::@6/(byte[]) XPOS#25 ) - (byte[]) COLS#2 ← phi( findcol::@14/(byte[]) COLS#3 findcol::@6/(byte[]) COLS#4 ) (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 ) @@ -1850,13 +1673,10 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 if((boolean~) findcol::$15) goto findcol::@8 to:findcol::@16 findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 - (byte[]) COLS#12 ← phi( findcol::@16/(byte[]) COLS#1 findcol::@7/(byte[]) COLS#2 ) (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[]) YPOS#13 ← phi( findcol::@16/(byte[]) YPOS#16 findcol::@7/(byte[]) YPOS#17 ) - (byte[]) XPOS#13 ← phi( findcol::@16/(byte[]) XPOS#18 findcol::@7/(byte[]) XPOS#19 ) (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 @@ -1866,24 +1686,18 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 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[]) YPOS#16 ← phi( findcol::@7/(byte[]) YPOS#17 ) - (byte[]) XPOS#18 ← phi( findcol::@7/(byte[]) XPOS#19 ) (byte) numpoints#2 ← phi( findcol::@7/(byte) numpoints#3 ) (byte) findcol::i#4 ← phi( findcol::@7/(byte) findcol::i#5 ) - (byte[]) COLS#1 ← phi( findcol::@7/(byte[]) COLS#2 ) (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#1 + (byte) findcol::i#4) + (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[]) COLS#24 ← phi( @begin/(byte[]) COLS#0 ) (byte) numpoints#24 ← phi( @begin/(byte) numpoints#0 ) - (byte[]) YPOS#31 ← phi( @begin/(byte[]) YPOS#0 ) - (byte[]) XPOS#30 ← phi( @begin/(byte[]) XPOS#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 ) @@ -1909,30 +1723,6 @@ INITIAL SSA SYMBOL TABLE (byte*) COLORS#7 (byte[]) COLS (byte[]) COLS#0 -(byte[]) COLS#1 -(byte[]) COLS#10 -(byte[]) COLS#11 -(byte[]) COLS#12 -(byte[]) COLS#13 -(byte[]) COLS#14 -(byte[]) COLS#15 -(byte[]) COLS#16 -(byte[]) COLS#17 -(byte[]) COLS#18 -(byte[]) COLS#19 -(byte[]) COLS#2 -(byte[]) COLS#20 -(byte[]) COLS#21 -(byte[]) COLS#22 -(byte[]) COLS#23 -(byte[]) COLS#24 -(byte[]) COLS#3 -(byte[]) COLS#4 -(byte[]) COLS#5 -(byte[]) COLS#6 -(byte[]) COLS#7 -(byte[]) COLS#8 -(byte[]) COLS#9 (byte) FILL (byte) FILL#0 (byte) FILL#1 @@ -1947,77 +1737,8 @@ INITIAL SSA SYMBOL TABLE (byte*) SCREEN#4 (byte[]) XPOS (byte[]) XPOS#0 -(byte[]) XPOS#1 -(byte[]) XPOS#10 -(byte[]) XPOS#11 -(byte[]) XPOS#12 -(byte[]) XPOS#13 -(byte[]) XPOS#14 -(byte[]) XPOS#15 -(byte[]) XPOS#16 -(byte[]) XPOS#17 -(byte[]) XPOS#18 -(byte[]) XPOS#19 -(byte[]) XPOS#2 -(byte[]) XPOS#20 -(byte[]) XPOS#21 -(byte[]) XPOS#22 -(byte[]) XPOS#23 -(byte[]) XPOS#24 -(byte[]) XPOS#25 -(byte[]) XPOS#26 -(byte[]) XPOS#27 -(byte[]) XPOS#28 -(byte[]) XPOS#29 -(byte[]) XPOS#3 -(byte[]) XPOS#30 -(byte[]) XPOS#31 -(byte[]) XPOS#32 -(byte[]) XPOS#33 -(byte[]) XPOS#34 -(byte[]) XPOS#35 -(byte[]) XPOS#4 -(byte[]) XPOS#5 -(byte[]) XPOS#6 -(byte[]) XPOS#7 -(byte[]) XPOS#8 -(byte[]) XPOS#9 (byte[]) YPOS (byte[]) YPOS#0 -(byte[]) YPOS#1 -(byte[]) YPOS#10 -(byte[]) YPOS#11 -(byte[]) YPOS#12 -(byte[]) YPOS#13 -(byte[]) YPOS#14 -(byte[]) YPOS#15 -(byte[]) YPOS#16 -(byte[]) YPOS#17 -(byte[]) YPOS#18 -(byte[]) YPOS#19 -(byte[]) YPOS#2 -(byte[]) YPOS#20 -(byte[]) YPOS#21 -(byte[]) YPOS#22 -(byte[]) YPOS#23 -(byte[]) YPOS#24 -(byte[]) YPOS#25 -(byte[]) YPOS#26 -(byte[]) YPOS#27 -(byte[]) YPOS#28 -(byte[]) YPOS#29 -(byte[]) YPOS#3 -(byte[]) YPOS#30 -(byte[]) YPOS#31 -(byte[]) YPOS#32 -(byte[]) YPOS#33 -(byte[]) YPOS#34 -(byte[]) YPOS#4 -(byte[]) YPOS#5 -(byte[]) YPOS#6 -(byte[]) YPOS#7 -(byte[]) YPOS#8 -(byte[]) YPOS#9 (void()) animate() (byte/word~) animate::$0 (boolean~) animate::$1 @@ -2280,43 +2001,28 @@ CONTROL FLOW GRAPH (byte[]) COLS#0 ← { (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 5, (byte/signed byte/word/signed word) 7 } to:@5 main: scope:[main] from @5 - (byte[]) COLS#22 ← phi( @5/(byte[]) COLS#24 ) (byte) numpoints#22 ← phi( @5/(byte) numpoints#24 ) - (byte[]) YPOS#28 ← phi( @5/(byte[]) YPOS#31 ) - (byte[]) XPOS#26 ← phi( @5/(byte[]) XPOS#30 ) (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[]) COLS#20 ← phi( main/(byte[]) COLS#22 ) (byte) numpoints#20 ← phi( main/(byte) numpoints#22 ) - (byte[]) YPOS#23 ← phi( main/(byte[]) YPOS#28 ) - (byte[]) XPOS#20 ← phi( main/(byte[]) XPOS#26 ) (byte*) COLORS#3 ← phi( main/(byte*) COLORS#5 ) to:main::@1 main::@1: scope:[main] from main::@3 main::@5 - (byte[]) COLS#19 ← phi( main::@3/(byte[]) COLS#20 main::@5/(byte[]) COLS#21 ) (byte) numpoints#19 ← phi( main::@3/(byte) numpoints#20 main::@5/(byte) numpoints#21 ) - (byte[]) YPOS#18 ← phi( main::@3/(byte[]) YPOS#23 main::@5/(byte[]) YPOS#24 ) - (byte[]) XPOS#14 ← phi( main::@3/(byte[]) XPOS#20 main::@5/(byte[]) XPOS#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[]) COLS#23 ← phi( main::@1/(byte[]) COLS#19 ) (byte) numpoints#23 ← phi( main::@1/(byte) numpoints#19 ) (byte*) COLORS#6 ← phi( main::@1/(byte*) COLORS#2 ) - (byte[]) YPOS#14 ← phi( main::@1/(byte[]) YPOS#18 ) - (byte[]) XPOS#8 ← phi( main::@1/(byte[]) XPOS#14 ) call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - (byte[]) COLS#21 ← phi( main::@4/(byte[]) COLS#23 ) (byte) numpoints#21 ← phi( main::@4/(byte) numpoints#23 ) - (byte[]) YPOS#24 ← phi( main::@4/(byte[]) YPOS#14 ) - (byte[]) XPOS#21 ← phi( main::@4/(byte[]) XPOS#8 ) (byte*) COLORS#4 ← phi( main::@4/(byte*) COLORS#6 ) if(true) goto main::@1 to:main::@return @@ -2324,84 +2030,63 @@ main::@return: scope:[main] from main::@5 return to:@return animate: scope:[animate] from main::@4 - (byte[]) YPOS#8 ← phi( main::@4/(byte[]) YPOS#14 ) - (byte[]) XPOS#1 ← phi( main::@4/(byte[]) XPOS#8 ) - (byte/word~) animate::$0 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 - (boolean~) animate::$1 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) == (byte/signed byte/word/signed word) 40 + (byte/word~) animate::$0 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 + (boolean~) animate::$1 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) == (byte/signed byte/word/signed word) 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[]) XPOS#9 ← phi( animate/(byte[]) XPOS#1 animate::@7/(byte[]) XPOS#2 ) - (byte[]) YPOS#1 ← phi( animate/(byte[]) YPOS#8 animate::@7/(byte[]) YPOS#9 ) - (byte/word~) animate::$3 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 - (boolean~) animate::$4 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) == (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$3 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 + (boolean~) animate::$4 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) == (byte/signed byte/word/signed word) 25 (boolean~) animate::$5 ← ! (boolean~) animate::$4 if((boolean~) animate::$5) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - (byte[]) YPOS#9 ← phi( animate/(byte[]) YPOS#8 ) - (byte[]) XPOS#2 ← phi( animate/(byte[]) XPOS#1 ) - *((byte[]) XPOS#2 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte[]) YPOS#10 ← phi( animate::@1/(byte[]) YPOS#1 animate::@8/(byte[]) YPOS#2 ) - (byte[]) XPOS#3 ← phi( animate::@1/(byte[]) XPOS#9 animate::@8/(byte[]) XPOS#10 ) - (byte/signed byte/word/signed word~) animate::$6 ← *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 - *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 - (boolean~) animate::$7 ← *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) == (byte/word/signed word) 255 + (byte/signed byte/word/signed word~) animate::$6 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 + (boolean~) animate::$7 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) == (byte/word/signed word) 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[]) XPOS#10 ← phi( animate::@1/(byte[]) XPOS#9 ) - (byte[]) YPOS#2 ← phi( animate::@1/(byte[]) YPOS#1 ) - *((byte[]) YPOS#2 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte[]) XPOS#16 ← phi( animate::@2/(byte[]) XPOS#3 animate::@9/(byte[]) XPOS#4 ) - (byte[]) YPOS#3 ← phi( animate::@2/(byte[]) YPOS#10 animate::@9/(byte[]) YPOS#11 ) - (byte/word~) animate::$9 ← *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 - (boolean~) animate::$10 ← *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) == (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$9 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 + (boolean~) animate::$10 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) == (byte/signed byte/word/signed word) 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[]) YPOS#11 ← phi( animate::@2/(byte[]) YPOS#10 ) - (byte[]) XPOS#4 ← phi( animate::@2/(byte[]) XPOS#3 ) - *((byte[]) XPOS#4 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 40 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte[]) XPOS#11 ← phi( animate::@10/(byte[]) XPOS#15 animate::@3/(byte[]) XPOS#16 ) - (byte[]) YPOS#4 ← phi( animate::@10/(byte[]) YPOS#5 animate::@3/(byte[]) YPOS#3 ) - (byte/signed byte/word/signed word~) animate::$12 ← *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 - (boolean~) animate::$13 ← *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) == (byte/word/signed word) 255 + (byte/signed byte/word/signed word~) animate::$12 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 + (boolean~) animate::$13 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) == (byte/word/signed word) 255 (boolean~) animate::$14 ← ! (boolean~) animate::$13 if((boolean~) animate::$14) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - (byte[]) XPOS#15 ← phi( animate::@3/(byte[]) XPOS#16 ) - (byte[]) YPOS#5 ← phi( animate::@3/(byte[]) YPOS#3 ) - *((byte[]) YPOS#5 + (byte/signed byte/word/signed word) 2) ← (byte/signed byte/word/signed word) 0 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) ← (byte/signed byte/word/signed word) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - (byte[]) XPOS#5 ← phi( animate::@4/(byte[]) XPOS#11 ) - (byte[]) YPOS#6 ← phi( animate::@4/(byte[]) YPOS#4 ) - *((byte[]) YPOS#6 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word) 25 - (byte/word~) animate::$15 ← *((byte[]) XPOS#5 + (byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 - *((byte[]) XPOS#5 + (byte/signed byte/word/signed word) 3) ← (byte/word~) animate::$15 - (boolean~) animate::$16 ← *((byte[]) XPOS#5 + (byte/signed byte/word/signed word) 3) >= (byte/signed byte/word/signed word) 40 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$15 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/word~) animate::$15 + (boolean~) animate::$16 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) >= (byte/signed byte/word/signed word) 40 (boolean~) animate::$17 ← ! (boolean~) animate::$16 if((boolean~) animate::$17) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte[]) XPOS#6 ← phi( animate::@11/(byte[]) XPOS#5 ) - (byte/signed byte/word/signed word~) animate::$18 ← *((byte[]) XPOS#6 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 40 - *((byte[]) XPOS#6 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$18 + (byte/signed byte/word/signed word~) animate::$18 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 40 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$18 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return @@ -2425,28 +2110,19 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 return to:@return render: scope:[render] from main::@1 - (byte[]) COLS#17 ← phi( main::@1/(byte[]) COLS#19 ) (byte) numpoints#17 ← phi( main::@1/(byte) numpoints#19 ) - (byte[]) YPOS#25 ← phi( main::@1/(byte[]) YPOS#18 ) - (byte[]) XPOS#27 ← phi( main::@1/(byte[]) XPOS#14 ) (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) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[]) COLS#15 ← phi( render/(byte[]) COLS#17 render::@3/(byte[]) COLS#18 ) (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#18 ) - (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#25 render::@3/(byte[]) YPOS#26 ) - (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#27 render::@3/(byte[]) XPOS#28 ) (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) 0 to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[]) COLS#14 ← phi( render::@1/(byte[]) COLS#15 render::@5/(byte[]) COLS#16 ) (byte) numpoints#14 ← phi( render::@1/(byte) numpoints#15 render::@5/(byte) numpoints#16 ) - (byte[]) YPOS#15 ← phi( render::@1/(byte[]) YPOS#19 render::@5/(byte[]) YPOS#20 ) - (byte[]) XPOS#17 ← phi( render::@1/(byte[]) XPOS#22 render::@5/(byte[]) XPOS#23 ) (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 ) @@ -2456,10 +2132,7 @@ render::@2: scope:[render] from render::@1 render::@5 (byte) findcol::return#0 ← (byte) findcol::return#2 to:render::@5 render::@5: scope:[render] from render::@2 - (byte[]) COLS#16 ← phi( render::@2/(byte[]) COLS#14 ) (byte) numpoints#16 ← phi( render::@2/(byte) numpoints#14 ) - (byte[]) YPOS#20 ← phi( render::@2/(byte[]) YPOS#15 ) - (byte[]) XPOS#23 ← phi( render::@2/(byte[]) XPOS#17 ) (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 ) @@ -2472,10 +2145,7 @@ render::@5: scope:[render] from render::@2 if((boolean~) render::$1) goto render::@2 to:render::@3 render::@3: scope:[render] from render::@5 - (byte[]) COLS#18 ← phi( render::@5/(byte[]) COLS#16 ) (byte) numpoints#18 ← phi( render::@5/(byte) numpoints#16 ) - (byte[]) YPOS#26 ← phi( render::@5/(byte[]) YPOS#20 ) - (byte[]) XPOS#28 ← phi( render::@5/(byte[]) XPOS#23 ) (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) 40 @@ -2488,37 +2158,28 @@ render::@return: scope:[render] from render::@3 return to:@return findcol: scope:[findcol] from render::@2 - (byte[]) COLS#11 ← phi( render::@2/(byte[]) COLS#14 ) (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[]) YPOS#12 ← phi( render::@2/(byte[]) YPOS#15 ) - (byte[]) XPOS#12 ← phi( render::@2/(byte[]) XPOS#17 ) (byte) findcol::mindiff#0 ← (byte/word/signed word) 255 (byte) findcol::mincol#0 ← (byte/signed byte/word/signed word) 0 (byte) findcol::i#0 ← (byte/signed byte/word/signed word) 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[]) COLS#9 ← phi( findcol/(byte[]) COLS#11 findcol::@8/(byte[]) COLS#12 ) (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[]) YPOS#7 ← phi( findcol/(byte[]) YPOS#12 findcol::@8/(byte[]) YPOS#13 ) (byte) findcol::i#2 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[]) XPOS#7 ← phi( findcol/(byte[]) XPOS#12 findcol::@8/(byte[]) XPOS#13 ) - (byte) findcol::xp#0 ← *((byte[]) XPOS#7 + (byte) findcol::i#2) - (byte) findcol::yp#0 ← *((byte[]) YPOS#7 + (byte) findcol::i#2) + (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[]) YPOS#32 ← phi( findcol::@1/(byte[]) YPOS#7 findcol::@3/(byte[]) YPOS#33 ) - (byte[]) XPOS#33 ← phi( findcol::@1/(byte[]) XPOS#7 findcol::@3/(byte[]) XPOS#34 ) - (byte[]) COLS#8 ← phi( findcol::@1/(byte[]) COLS#9 findcol::@3/(byte[]) COLS#10 ) (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 ) @@ -2532,9 +2193,6 @@ findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 to:findcol::@12 findcol::@9: scope:[findcol] from findcol::@1 (byte) findcol::mincol#13 ← phi( findcol::@1/(byte) findcol::mincol#11 ) - (byte[]) YPOS#34 ← phi( findcol::@1/(byte[]) YPOS#7 ) - (byte[]) XPOS#35 ← phi( findcol::@1/(byte[]) XPOS#7 ) - (byte[]) COLS#13 ← phi( findcol::@1/(byte[]) COLS#9 ) (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 ) @@ -2548,9 +2206,6 @@ findcol::@9: scope:[findcol] from findcol::@1 to:findcol::@10 findcol::@3: scope:[findcol] from findcol::@9 (byte) findcol::mincol#12 ← phi( findcol::@9/(byte) findcol::mincol#13 ) - (byte[]) YPOS#33 ← phi( findcol::@9/(byte[]) YPOS#34 ) - (byte[]) XPOS#34 ← phi( findcol::@9/(byte[]) XPOS#35 ) - (byte[]) COLS#10 ← phi( findcol::@9/(byte[]) COLS#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 ) @@ -2569,9 +2224,6 @@ findcol::@return: scope:[findcol] from findcol::@10 findcol::@17 to:@return findcol::@4: scope:[findcol] from findcol::@2 (byte) findcol::mincol#9 ← phi( findcol::@2/(byte) findcol::mincol#10 ) - (byte[]) YPOS#30 ← phi( findcol::@2/(byte[]) YPOS#32 ) - (byte[]) XPOS#32 ← phi( findcol::@2/(byte[]) XPOS#33 ) - (byte[]) COLS#7 ← phi( findcol::@2/(byte[]) COLS#8 ) (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 ) @@ -2584,9 +2236,6 @@ findcol::@4: scope:[findcol] from findcol::@2 to:findcol::@5 findcol::@12: scope:[findcol] from findcol::@2 (byte) findcol::mincol#8 ← phi( findcol::@2/(byte) findcol::mincol#10 ) - (byte[]) YPOS#29 ← phi( findcol::@2/(byte[]) YPOS#32 ) - (byte[]) XPOS#31 ← phi( findcol::@2/(byte[]) XPOS#33 ) - (byte[]) COLS#6 ← phi( findcol::@2/(byte[]) COLS#8 ) (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 ) @@ -2600,9 +2249,6 @@ findcol::@12: scope:[findcol] from findcol::@2 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[]) YPOS#27 ← phi( findcol::@12/(byte[]) YPOS#29 findcol::@4/(byte[]) YPOS#30 ) - (byte[]) XPOS#29 ← phi( findcol::@12/(byte[]) XPOS#31 findcol::@4/(byte[]) XPOS#32 ) - (byte[]) COLS#5 ← phi( findcol::@12/(byte[]) COLS#6 findcol::@4/(byte[]) COLS#7 ) (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 ) @@ -2616,9 +2262,6 @@ findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 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[]) YPOS#22 ← phi( findcol::@5/(byte[]) YPOS#27 ) - (byte[]) XPOS#25 ← phi( findcol::@5/(byte[]) XPOS#29 ) - (byte[]) COLS#4 ← phi( findcol::@5/(byte[]) COLS#5 ) (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 ) @@ -2632,9 +2275,6 @@ findcol::@6: scope:[findcol] from findcol::@5 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[]) YPOS#21 ← phi( findcol::@5/(byte[]) YPOS#27 ) - (byte[]) XPOS#24 ← phi( findcol::@5/(byte[]) XPOS#29 ) - (byte[]) COLS#3 ← phi( findcol::@5/(byte[]) COLS#5 ) (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 ) @@ -2649,9 +2289,6 @@ 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[]) YPOS#17 ← phi( findcol::@14/(byte[]) YPOS#21 findcol::@6/(byte[]) YPOS#22 ) - (byte[]) XPOS#19 ← phi( findcol::@14/(byte[]) XPOS#24 findcol::@6/(byte[]) XPOS#25 ) - (byte[]) COLS#2 ← phi( findcol::@14/(byte[]) COLS#3 findcol::@6/(byte[]) COLS#4 ) (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 ) @@ -2661,13 +2298,10 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 if((boolean~) findcol::$15) goto findcol::@8 to:findcol::@16 findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 - (byte[]) COLS#12 ← phi( findcol::@16/(byte[]) COLS#1 findcol::@7/(byte[]) COLS#2 ) (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[]) YPOS#13 ← phi( findcol::@16/(byte[]) YPOS#16 findcol::@7/(byte[]) YPOS#17 ) - (byte[]) XPOS#13 ← phi( findcol::@16/(byte[]) XPOS#18 findcol::@7/(byte[]) XPOS#19 ) (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 @@ -2677,24 +2311,18 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 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[]) YPOS#16 ← phi( findcol::@7/(byte[]) YPOS#17 ) - (byte[]) XPOS#18 ← phi( findcol::@7/(byte[]) XPOS#19 ) (byte) numpoints#2 ← phi( findcol::@7/(byte) numpoints#3 ) (byte) findcol::i#4 ← phi( findcol::@7/(byte) findcol::i#5 ) - (byte[]) COLS#1 ← phi( findcol::@7/(byte[]) COLS#2 ) (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#1 + (byte) findcol::i#4) + (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[]) COLS#24 ← phi( @begin/(byte[]) COLS#0 ) (byte) numpoints#24 ← phi( @begin/(byte) numpoints#0 ) - (byte[]) YPOS#31 ← phi( @begin/(byte[]) YPOS#0 ) - (byte[]) XPOS#30 ← phi( @begin/(byte[]) XPOS#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 ) @@ -2702,12 +2330,12 @@ findcol::@17: scope:[findcol] from findcol::@8 to:@end @end: scope:[] from @5 -Inversing boolean not (boolean~) animate::$2 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 40 from (boolean~) animate::$1 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) == (byte/signed byte/word/signed word) 40 -Inversing boolean not (boolean~) animate::$5 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 25 from (boolean~) animate::$4 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) == (byte/signed byte/word/signed word) 25 -Inversing boolean not (boolean~) animate::$8 ← *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) != (byte/word/signed word) 255 from (boolean~) animate::$7 ← *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) == (byte/word/signed word) 255 -Inversing boolean not (boolean~) animate::$11 ← *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) != (byte/signed byte/word/signed word) 25 from (boolean~) animate::$10 ← *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) == (byte/signed byte/word/signed word) 25 -Inversing boolean not (boolean~) animate::$14 ← *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) != (byte/word/signed word) 255 from (boolean~) animate::$13 ← *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) == (byte/word/signed word) 255 -Inversing boolean not (boolean~) animate::$17 ← *((byte[]) XPOS#5 + (byte/signed byte/word/signed word) 3) < (byte/signed byte/word/signed word) 40 from (boolean~) animate::$16 ← *((byte[]) XPOS#5 + (byte/signed byte/word/signed word) 3) >= (byte/signed byte/word/signed word) 40 +Inversing boolean not (boolean~) animate::$2 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 40 from (boolean~) animate::$1 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) == (byte/signed byte/word/signed word) 40 +Inversing boolean not (boolean~) animate::$5 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 25 from (boolean~) animate::$4 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) == (byte/signed byte/word/signed word) 25 +Inversing boolean not (boolean~) animate::$8 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) != (byte/word/signed word) 255 from (boolean~) animate::$7 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) == (byte/word/signed word) 255 +Inversing boolean not (boolean~) animate::$11 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) != (byte/signed byte/word/signed word) 25 from (boolean~) animate::$10 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) == (byte/signed byte/word/signed word) 25 +Inversing boolean not (boolean~) animate::$14 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) != (byte/word/signed word) 255 from (boolean~) animate::$13 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) == (byte/word/signed word) 255 +Inversing boolean not (boolean~) animate::$17 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) < (byte/signed byte/word/signed word) 40 from (boolean~) animate::$16 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) >= (byte/signed byte/word/signed word) 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 @@ -2725,43 +2353,28 @@ CONTROL FLOW GRAPH (byte[]) COLS#0 ← { (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 5, (byte/signed byte/word/signed word) 7 } to:@5 main: scope:[main] from @5 - (byte[]) COLS#22 ← phi( @5/(byte[]) COLS#24 ) (byte) numpoints#22 ← phi( @5/(byte) numpoints#24 ) - (byte[]) YPOS#28 ← phi( @5/(byte[]) YPOS#31 ) - (byte[]) XPOS#26 ← phi( @5/(byte[]) XPOS#30 ) (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[]) COLS#20 ← phi( main/(byte[]) COLS#22 ) (byte) numpoints#20 ← phi( main/(byte) numpoints#22 ) - (byte[]) YPOS#23 ← phi( main/(byte[]) YPOS#28 ) - (byte[]) XPOS#20 ← phi( main/(byte[]) XPOS#26 ) (byte*) COLORS#3 ← phi( main/(byte*) COLORS#5 ) to:main::@1 main::@1: scope:[main] from main::@3 main::@5 - (byte[]) COLS#19 ← phi( main::@3/(byte[]) COLS#20 main::@5/(byte[]) COLS#21 ) (byte) numpoints#19 ← phi( main::@3/(byte) numpoints#20 main::@5/(byte) numpoints#21 ) - (byte[]) YPOS#18 ← phi( main::@3/(byte[]) YPOS#23 main::@5/(byte[]) YPOS#24 ) - (byte[]) XPOS#14 ← phi( main::@3/(byte[]) XPOS#20 main::@5/(byte[]) XPOS#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[]) COLS#23 ← phi( main::@1/(byte[]) COLS#19 ) (byte) numpoints#23 ← phi( main::@1/(byte) numpoints#19 ) (byte*) COLORS#6 ← phi( main::@1/(byte*) COLORS#2 ) - (byte[]) YPOS#14 ← phi( main::@1/(byte[]) YPOS#18 ) - (byte[]) XPOS#8 ← phi( main::@1/(byte[]) XPOS#14 ) call animate param-assignment to:main::@5 main::@5: scope:[main] from main::@4 - (byte[]) COLS#21 ← phi( main::@4/(byte[]) COLS#23 ) (byte) numpoints#21 ← phi( main::@4/(byte) numpoints#23 ) - (byte[]) YPOS#24 ← phi( main::@4/(byte[]) YPOS#14 ) - (byte[]) XPOS#21 ← phi( main::@4/(byte[]) XPOS#8 ) (byte*) COLORS#4 ← phi( main::@4/(byte*) COLORS#6 ) if(true) goto main::@1 to:main::@return @@ -2769,78 +2382,57 @@ main::@return: scope:[main] from main::@5 return to:@return animate: scope:[animate] from main::@4 - (byte[]) YPOS#8 ← phi( main::@4/(byte[]) YPOS#14 ) - (byte[]) XPOS#1 ← phi( main::@4/(byte[]) XPOS#8 ) - (byte/word~) animate::$0 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 - (boolean~) animate::$2 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 40 + (byte/word~) animate::$0 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 + (boolean~) animate::$2 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 40 if((boolean~) animate::$2) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte[]) XPOS#9 ← phi( animate/(byte[]) XPOS#1 animate::@7/(byte[]) XPOS#2 ) - (byte[]) YPOS#1 ← phi( animate/(byte[]) YPOS#8 animate::@7/(byte[]) YPOS#9 ) - (byte/word~) animate::$3 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 - (boolean~) animate::$5 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$3 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 + (boolean~) animate::$5 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 25 if((boolean~) animate::$5) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - (byte[]) YPOS#9 ← phi( animate/(byte[]) YPOS#8 ) - (byte[]) XPOS#2 ← phi( animate/(byte[]) XPOS#1 ) - *((byte[]) XPOS#2 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte[]) YPOS#10 ← phi( animate::@1/(byte[]) YPOS#1 animate::@8/(byte[]) YPOS#2 ) - (byte[]) XPOS#3 ← phi( animate::@1/(byte[]) XPOS#9 animate::@8/(byte[]) XPOS#10 ) - (byte/signed byte/word/signed word~) animate::$6 ← *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 - *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 - (boolean~) animate::$8 ← *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) != (byte/word/signed word) 255 + (byte/signed byte/word/signed word~) animate::$6 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 + (boolean~) animate::$8 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) != (byte/word/signed word) 255 if((boolean~) animate::$8) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - (byte[]) XPOS#10 ← phi( animate::@1/(byte[]) XPOS#9 ) - (byte[]) YPOS#2 ← phi( animate::@1/(byte[]) YPOS#1 ) - *((byte[]) YPOS#2 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte[]) XPOS#16 ← phi( animate::@2/(byte[]) XPOS#3 animate::@9/(byte[]) XPOS#4 ) - (byte[]) YPOS#3 ← phi( animate::@2/(byte[]) YPOS#10 animate::@9/(byte[]) YPOS#11 ) - (byte/word~) animate::$9 ← *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 - (boolean~) animate::$11 ← *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) != (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$9 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 + (boolean~) animate::$11 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) != (byte/signed byte/word/signed word) 25 if((boolean~) animate::$11) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - (byte[]) YPOS#11 ← phi( animate::@2/(byte[]) YPOS#10 ) - (byte[]) XPOS#4 ← phi( animate::@2/(byte[]) XPOS#3 ) - *((byte[]) XPOS#4 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 40 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte[]) XPOS#11 ← phi( animate::@10/(byte[]) XPOS#15 animate::@3/(byte[]) XPOS#16 ) - (byte[]) YPOS#4 ← phi( animate::@10/(byte[]) YPOS#5 animate::@3/(byte[]) YPOS#3 ) - (byte/signed byte/word/signed word~) animate::$12 ← *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 - (boolean~) animate::$14 ← *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) != (byte/word/signed word) 255 + (byte/signed byte/word/signed word~) animate::$12 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 + (boolean~) animate::$14 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) != (byte/word/signed word) 255 if((boolean~) animate::$14) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - (byte[]) XPOS#15 ← phi( animate::@3/(byte[]) XPOS#16 ) - (byte[]) YPOS#5 ← phi( animate::@3/(byte[]) YPOS#3 ) - *((byte[]) YPOS#5 + (byte/signed byte/word/signed word) 2) ← (byte/signed byte/word/signed word) 0 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) ← (byte/signed byte/word/signed word) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - (byte[]) XPOS#5 ← phi( animate::@4/(byte[]) XPOS#11 ) - (byte[]) YPOS#6 ← phi( animate::@4/(byte[]) YPOS#4 ) - *((byte[]) YPOS#6 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word) 25 - (byte/word~) animate::$15 ← *((byte[]) XPOS#5 + (byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 - *((byte[]) XPOS#5 + (byte/signed byte/word/signed word) 3) ← (byte/word~) animate::$15 - (boolean~) animate::$17 ← *((byte[]) XPOS#5 + (byte/signed byte/word/signed word) 3) < (byte/signed byte/word/signed word) 40 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$15 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/word~) animate::$15 + (boolean~) animate::$17 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) < (byte/signed byte/word/signed word) 40 if((boolean~) animate::$17) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte[]) XPOS#6 ← phi( animate::@11/(byte[]) XPOS#5 ) - (byte/signed byte/word/signed word~) animate::$18 ← *((byte[]) XPOS#6 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 40 - *((byte[]) XPOS#6 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$18 + (byte/signed byte/word/signed word~) animate::$18 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 40 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$18 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return @@ -2864,28 +2456,19 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 return to:@return render: scope:[render] from main::@1 - (byte[]) COLS#17 ← phi( main::@1/(byte[]) COLS#19 ) (byte) numpoints#17 ← phi( main::@1/(byte) numpoints#19 ) - (byte[]) YPOS#25 ← phi( main::@1/(byte[]) YPOS#18 ) - (byte[]) XPOS#27 ← phi( main::@1/(byte[]) XPOS#14 ) (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) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[]) COLS#15 ← phi( render/(byte[]) COLS#17 render::@3/(byte[]) COLS#18 ) (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#18 ) - (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#25 render::@3/(byte[]) YPOS#26 ) - (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#27 render::@3/(byte[]) XPOS#28 ) (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) 0 to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[]) COLS#14 ← phi( render::@1/(byte[]) COLS#15 render::@5/(byte[]) COLS#16 ) (byte) numpoints#14 ← phi( render::@1/(byte) numpoints#15 render::@5/(byte) numpoints#16 ) - (byte[]) YPOS#15 ← phi( render::@1/(byte[]) YPOS#19 render::@5/(byte[]) YPOS#20 ) - (byte[]) XPOS#17 ← phi( render::@1/(byte[]) XPOS#22 render::@5/(byte[]) XPOS#23 ) (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 ) @@ -2895,10 +2478,7 @@ render::@2: scope:[render] from render::@1 render::@5 (byte) findcol::return#0 ← (byte) findcol::return#2 to:render::@5 render::@5: scope:[render] from render::@2 - (byte[]) COLS#16 ← phi( render::@2/(byte[]) COLS#14 ) (byte) numpoints#16 ← phi( render::@2/(byte) numpoints#14 ) - (byte[]) YPOS#20 ← phi( render::@2/(byte[]) YPOS#15 ) - (byte[]) XPOS#23 ← phi( render::@2/(byte[]) XPOS#17 ) (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 ) @@ -2911,10 +2491,7 @@ render::@5: scope:[render] from render::@2 if((boolean~) render::$1) goto render::@2 to:render::@3 render::@3: scope:[render] from render::@5 - (byte[]) COLS#18 ← phi( render::@5/(byte[]) COLS#16 ) (byte) numpoints#18 ← phi( render::@5/(byte) numpoints#16 ) - (byte[]) YPOS#26 ← phi( render::@5/(byte[]) YPOS#20 ) - (byte[]) XPOS#28 ← phi( render::@5/(byte[]) XPOS#23 ) (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) 40 @@ -2927,36 +2504,27 @@ render::@return: scope:[render] from render::@3 return to:@return findcol: scope:[findcol] from render::@2 - (byte[]) COLS#11 ← phi( render::@2/(byte[]) COLS#14 ) (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[]) YPOS#12 ← phi( render::@2/(byte[]) YPOS#15 ) - (byte[]) XPOS#12 ← phi( render::@2/(byte[]) XPOS#17 ) (byte) findcol::mindiff#0 ← (byte/word/signed word) 255 (byte) findcol::mincol#0 ← (byte/signed byte/word/signed word) 0 (byte) findcol::i#0 ← (byte/signed byte/word/signed word) 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[]) COLS#9 ← phi( findcol/(byte[]) COLS#11 findcol::@8/(byte[]) COLS#12 ) (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[]) YPOS#7 ← phi( findcol/(byte[]) YPOS#12 findcol::@8/(byte[]) YPOS#13 ) (byte) findcol::i#2 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[]) XPOS#7 ← phi( findcol/(byte[]) XPOS#12 findcol::@8/(byte[]) XPOS#13 ) - (byte) findcol::xp#0 ← *((byte[]) XPOS#7 + (byte) findcol::i#2) - (byte) findcol::yp#0 ← *((byte[]) YPOS#7 + (byte) findcol::i#2) + (byte) findcol::xp#0 ← *((byte[]) XPOS#0 + (byte) findcol::i#2) + (byte) findcol::yp#0 ← *((byte[]) YPOS#0 + (byte) findcol::i#2) (boolean~) findcol::$1 ← (byte) findcol::x#1 != (byte) findcol::xp#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[]) YPOS#32 ← phi( findcol::@1/(byte[]) YPOS#7 findcol::@3/(byte[]) YPOS#33 ) - (byte[]) XPOS#33 ← phi( findcol::@1/(byte[]) XPOS#7 findcol::@3/(byte[]) XPOS#34 ) - (byte[]) COLS#8 ← phi( findcol::@1/(byte[]) COLS#9 findcol::@3/(byte[]) COLS#10 ) (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 ) @@ -2969,9 +2537,6 @@ findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 to:findcol::@12 findcol::@9: scope:[findcol] from findcol::@1 (byte) findcol::mincol#13 ← phi( findcol::@1/(byte) findcol::mincol#11 ) - (byte[]) YPOS#34 ← phi( findcol::@1/(byte[]) YPOS#7 ) - (byte[]) XPOS#35 ← phi( findcol::@1/(byte[]) XPOS#7 ) - (byte[]) COLS#13 ← phi( findcol::@1/(byte[]) COLS#9 ) (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 ) @@ -2984,9 +2549,6 @@ findcol::@9: scope:[findcol] from findcol::@1 to:findcol::@10 findcol::@3: scope:[findcol] from findcol::@9 (byte) findcol::mincol#12 ← phi( findcol::@9/(byte) findcol::mincol#13 ) - (byte[]) YPOS#33 ← phi( findcol::@9/(byte[]) YPOS#34 ) - (byte[]) XPOS#34 ← phi( findcol::@9/(byte[]) XPOS#35 ) - (byte[]) COLS#10 ← phi( findcol::@9/(byte[]) COLS#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 ) @@ -3005,9 +2567,6 @@ findcol::@return: scope:[findcol] from findcol::@10 findcol::@17 to:@return findcol::@4: scope:[findcol] from findcol::@2 (byte) findcol::mincol#9 ← phi( findcol::@2/(byte) findcol::mincol#10 ) - (byte[]) YPOS#30 ← phi( findcol::@2/(byte[]) YPOS#32 ) - (byte[]) XPOS#32 ← phi( findcol::@2/(byte[]) XPOS#33 ) - (byte[]) COLS#7 ← phi( findcol::@2/(byte[]) COLS#8 ) (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 ) @@ -3020,9 +2579,6 @@ findcol::@4: scope:[findcol] from findcol::@2 to:findcol::@5 findcol::@12: scope:[findcol] from findcol::@2 (byte) findcol::mincol#8 ← phi( findcol::@2/(byte) findcol::mincol#10 ) - (byte[]) YPOS#29 ← phi( findcol::@2/(byte[]) YPOS#32 ) - (byte[]) XPOS#31 ← phi( findcol::@2/(byte[]) XPOS#33 ) - (byte[]) COLS#6 ← phi( findcol::@2/(byte[]) COLS#8 ) (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 ) @@ -3036,9 +2592,6 @@ findcol::@12: scope:[findcol] from findcol::@2 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[]) YPOS#27 ← phi( findcol::@12/(byte[]) YPOS#29 findcol::@4/(byte[]) YPOS#30 ) - (byte[]) XPOS#29 ← phi( findcol::@12/(byte[]) XPOS#31 findcol::@4/(byte[]) XPOS#32 ) - (byte[]) COLS#5 ← phi( findcol::@12/(byte[]) COLS#6 findcol::@4/(byte[]) COLS#7 ) (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 ) @@ -3051,9 +2604,6 @@ findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 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[]) YPOS#22 ← phi( findcol::@5/(byte[]) YPOS#27 ) - (byte[]) XPOS#25 ← phi( findcol::@5/(byte[]) XPOS#29 ) - (byte[]) COLS#4 ← phi( findcol::@5/(byte[]) COLS#5 ) (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 ) @@ -3067,9 +2617,6 @@ findcol::@6: scope:[findcol] from findcol::@5 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[]) YPOS#21 ← phi( findcol::@5/(byte[]) YPOS#27 ) - (byte[]) XPOS#24 ← phi( findcol::@5/(byte[]) XPOS#29 ) - (byte[]) COLS#3 ← phi( findcol::@5/(byte[]) COLS#5 ) (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 ) @@ -3084,9 +2631,6 @@ 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[]) YPOS#17 ← phi( findcol::@14/(byte[]) YPOS#21 findcol::@6/(byte[]) YPOS#22 ) - (byte[]) XPOS#19 ← phi( findcol::@14/(byte[]) XPOS#24 findcol::@6/(byte[]) XPOS#25 ) - (byte[]) COLS#2 ← phi( findcol::@14/(byte[]) COLS#3 findcol::@6/(byte[]) COLS#4 ) (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 ) @@ -3095,13 +2639,10 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 if((boolean~) findcol::$15) goto findcol::@8 to:findcol::@16 findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 - (byte[]) COLS#12 ← phi( findcol::@16/(byte[]) COLS#1 findcol::@7/(byte[]) COLS#2 ) (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[]) YPOS#13 ← phi( findcol::@16/(byte[]) YPOS#16 findcol::@7/(byte[]) YPOS#17 ) - (byte[]) XPOS#13 ← phi( findcol::@16/(byte[]) XPOS#18 findcol::@7/(byte[]) XPOS#19 ) (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 @@ -3111,24 +2652,18 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 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[]) YPOS#16 ← phi( findcol::@7/(byte[]) YPOS#17 ) - (byte[]) XPOS#18 ← phi( findcol::@7/(byte[]) XPOS#19 ) (byte) numpoints#2 ← phi( findcol::@7/(byte) numpoints#3 ) (byte) findcol::i#4 ← phi( findcol::@7/(byte) findcol::i#5 ) - (byte[]) COLS#1 ← phi( findcol::@7/(byte[]) COLS#2 ) (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#1 + (byte) findcol::i#4) + (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[]) COLS#24 ← phi( @begin/(byte[]) COLS#0 ) (byte) numpoints#24 ← phi( @begin/(byte) numpoints#0 ) - (byte[]) YPOS#31 ← phi( @begin/(byte[]) YPOS#0 ) - (byte[]) XPOS#30 ← phi( @begin/(byte[]) XPOS#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 ) @@ -3139,59 +2674,29 @@ findcol::@17: scope:[findcol] from findcol::@8 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: XPOS#26 XPOS#30 -Not aliassing across scopes: YPOS#28 YPOS#31 Not aliassing across scopes: numpoints#22 numpoints#24 -Not aliassing across scopes: COLS#22 COLS#24 -Not aliassing across scopes: XPOS#1 XPOS#8 -Not aliassing across scopes: YPOS#8 YPOS#14 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: XPOS#27 XPOS#14 -Not aliassing across scopes: YPOS#25 YPOS#18 Not aliassing across scopes: numpoints#17 numpoints#19 -Not aliassing across scopes: COLS#17 COLS#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: XPOS#12 XPOS#17 -Not aliassing across scopes: YPOS#12 YPOS#15 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 -Not aliassing across scopes: COLS#11 COLS#14 Alias (byte*) COLORS#3 = (byte*) COLORS#5 -Alias (byte[]) XPOS#20 = (byte[]) XPOS#26 -Alias (byte[]) YPOS#23 = (byte[]) YPOS#28 Alias (byte) numpoints#20 = (byte) numpoints#22 -Alias (byte[]) COLS#20 = (byte[]) COLS#22 -Alias (byte[]) XPOS#14 = (byte[]) XPOS#8 (byte[]) XPOS#21 -Alias (byte[]) YPOS#14 = (byte[]) YPOS#18 (byte[]) YPOS#24 Alias (byte*) COLORS#2 = (byte*) COLORS#6 (byte*) COLORS#4 Alias (byte) numpoints#19 = (byte) numpoints#23 (byte) numpoints#21 -Alias (byte[]) COLS#19 = (byte[]) COLS#23 (byte[]) COLS#21 -Alias (byte[]) XPOS#1 = (byte[]) XPOS#2 -Alias (byte[]) YPOS#8 = (byte[]) YPOS#9 -Alias (byte[]) YPOS#1 = (byte[]) YPOS#2 -Alias (byte[]) XPOS#10 = (byte[]) XPOS#9 -Alias (byte[]) XPOS#3 = (byte[]) XPOS#4 -Alias (byte[]) YPOS#10 = (byte[]) YPOS#11 -Alias (byte[]) YPOS#3 = (byte[]) YPOS#5 -Alias (byte[]) XPOS#15 = (byte[]) XPOS#16 -Alias (byte[]) YPOS#4 = (byte[]) YPOS#6 -Alias (byte[]) XPOS#11 = (byte[]) XPOS#5 (byte[]) XPOS#6 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[]) XPOS#17 = (byte[]) XPOS#23 (byte[]) XPOS#28 -Alias (byte[]) YPOS#15 = (byte[]) YPOS#20 (byte[]) YPOS#26 Alias (byte) numpoints#14 = (byte) numpoints#16 (byte) numpoints#18 -Alias (byte[]) COLS#14 = (byte[]) COLS#16 (byte[]) COLS#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 @@ -3201,9 +2706,6 @@ 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[]) COLS#10 = (byte[]) COLS#13 (byte[]) COLS#9 -Alias (byte[]) XPOS#34 = (byte[]) XPOS#35 (byte[]) XPOS#7 -Alias (byte[]) YPOS#33 = (byte[]) YPOS#34 (byte[]) YPOS#7 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 @@ -3213,9 +2715,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[]) COLS#6 = (byte[]) COLS#7 (byte[]) COLS#8 -Alias (byte[]) XPOS#31 = (byte[]) XPOS#32 (byte[]) XPOS#33 -Alias (byte[]) YPOS#29 = (byte[]) YPOS#30 (byte[]) YPOS#32 Alias (byte) findcol::mincol#10 = (byte) findcol::mincol#9 (byte) findcol::mincol#8 Alias (byte) findcol::diff#0 = (byte/signed byte/word/signed word~) findcol::$7 Alias (byte) findcol::diff#1 = (byte/signed byte/word/signed word~) findcol::$6 @@ -3225,29 +2724,20 @@ 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[]) COLS#3 = (byte[]) COLS#4 (byte[]) COLS#5 -Alias (byte[]) XPOS#24 = (byte[]) XPOS#25 (byte[]) XPOS#29 -Alias (byte[]) YPOS#21 = (byte[]) YPOS#22 (byte[]) YPOS#27 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[]) COLS#1 = (byte[]) COLS#2 Alias (byte) findcol::i#4 = (byte) findcol::i#5 Alias (byte) numpoints#2 = (byte) numpoints#3 -Alias (byte[]) XPOS#18 = (byte[]) XPOS#19 -Alias (byte[]) YPOS#16 = (byte[]) YPOS#17 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[]) XPOS#0 = (byte[]) XPOS#30 -Alias (byte[]) YPOS#0 = (byte[]) YPOS#31 Alias (byte) numpoints#0 = (byte) numpoints#24 -Alias (byte[]) COLS#0 = (byte[]) COLS#24 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -3260,10 +2750,7 @@ CONTROL FLOW GRAPH (byte[]) COLS#0 ← { (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 5, (byte/signed byte/word/signed word) 7 } to:@5 main: scope:[main] from @5 - (byte[]) COLS#20 ← phi( @5/(byte[]) COLS#0 ) (byte) numpoints#20 ← phi( @5/(byte) numpoints#0 ) - (byte[]) YPOS#23 ← phi( @5/(byte[]) YPOS#0 ) - (byte[]) XPOS#20 ← phi( @5/(byte[]) XPOS#0 ) (byte*) COLORS#3 ← phi( @5/(byte*) COLORS#0 ) (byte) FILL#3 ← phi( @5/(byte) FILL#0 ) (byte*) SCREEN#3 ← phi( @5/(byte*) SCREEN#0 ) @@ -3272,10 +2759,7 @@ main: scope:[main] from @5 main::@3: scope:[main] from main to:main::@1 main::@1: scope:[main] from main::@3 main::@5 - (byte[]) COLS#19 ← phi( main::@3/(byte[]) COLS#20 main::@5/(byte[]) COLS#19 ) (byte) numpoints#19 ← phi( main::@3/(byte) numpoints#20 main::@5/(byte) numpoints#19 ) - (byte[]) YPOS#14 ← phi( main::@3/(byte[]) YPOS#23 main::@5/(byte[]) YPOS#14 ) - (byte[]) XPOS#14 ← phi( main::@3/(byte[]) XPOS#20 main::@5/(byte[]) XPOS#14 ) (byte*) COLORS#2 ← phi( main::@3/(byte*) COLORS#3 main::@5/(byte*) COLORS#2 ) call render param-assignment to:main::@4 @@ -3289,67 +2773,57 @@ main::@return: scope:[main] from main::@5 return to:@return animate: scope:[animate] from main::@4 - (byte[]) YPOS#8 ← phi( main::@4/(byte[]) YPOS#14 ) - (byte[]) XPOS#1 ← phi( main::@4/(byte[]) XPOS#14 ) - (byte/word~) animate::$0 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 - (boolean~) animate::$2 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 40 + (byte/word~) animate::$0 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 + (boolean~) animate::$2 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 40 if((boolean~) animate::$2) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte[]) XPOS#10 ← phi( animate/(byte[]) XPOS#1 animate::@7/(byte[]) XPOS#1 ) - (byte[]) YPOS#1 ← phi( animate/(byte[]) YPOS#8 animate::@7/(byte[]) YPOS#8 ) - (byte/word~) animate::$3 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 - (boolean~) animate::$5 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$3 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 + (boolean~) animate::$5 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 25 if((boolean~) animate::$5) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte[]) YPOS#10 ← phi( animate::@1/(byte[]) YPOS#1 animate::@8/(byte[]) YPOS#1 ) - (byte[]) XPOS#3 ← phi( animate::@1/(byte[]) XPOS#10 animate::@8/(byte[]) XPOS#10 ) - (byte/signed byte/word/signed word~) animate::$6 ← *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 - *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 - (boolean~) animate::$8 ← *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) != (byte/word/signed word) 255 + (byte/signed byte/word/signed word~) animate::$6 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 + (boolean~) animate::$8 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) != (byte/word/signed word) 255 if((boolean~) animate::$8) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte[]) XPOS#15 ← phi( animate::@2/(byte[]) XPOS#3 animate::@9/(byte[]) XPOS#3 ) - (byte[]) YPOS#3 ← phi( animate::@2/(byte[]) YPOS#10 animate::@9/(byte[]) YPOS#10 ) - (byte/word~) animate::$9 ← *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 - (boolean~) animate::$11 ← *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) != (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$9 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 + (boolean~) animate::$11 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) != (byte/signed byte/word/signed word) 25 if((boolean~) animate::$11) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((byte[]) XPOS#3 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 40 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte[]) XPOS#11 ← phi( animate::@10/(byte[]) XPOS#15 animate::@3/(byte[]) XPOS#15 ) - (byte[]) YPOS#4 ← phi( animate::@10/(byte[]) YPOS#3 animate::@3/(byte[]) YPOS#3 ) - (byte/signed byte/word/signed word~) animate::$12 ← *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 - (boolean~) animate::$14 ← *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) != (byte/word/signed word) 255 + (byte/signed byte/word/signed word~) animate::$12 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 + (boolean~) animate::$14 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) != (byte/word/signed word) 255 if((boolean~) animate::$14) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((byte[]) YPOS#3 + (byte/signed byte/word/signed word) 2) ← (byte/signed byte/word/signed word) 0 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) ← (byte/signed byte/word/signed word) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - *((byte[]) YPOS#4 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word) 25 - (byte/word~) animate::$15 ← *((byte[]) XPOS#11 + (byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 - *((byte[]) XPOS#11 + (byte/signed byte/word/signed word) 3) ← (byte/word~) animate::$15 - (boolean~) animate::$17 ← *((byte[]) XPOS#11 + (byte/signed byte/word/signed word) 3) < (byte/signed byte/word/signed word) 40 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$15 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/word~) animate::$15 + (boolean~) animate::$17 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) < (byte/signed byte/word/signed word) 40 if((boolean~) animate::$17) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte/signed byte/word/signed word~) animate::$18 ← *((byte[]) XPOS#11 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 40 - *((byte[]) XPOS#11 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$18 + (byte/signed byte/word/signed word~) animate::$18 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 40 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$18 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return @@ -3373,28 +2847,19 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 return to:@return render: scope:[render] from main::@1 - (byte[]) COLS#17 ← phi( main::@1/(byte[]) COLS#19 ) (byte) numpoints#17 ← phi( main::@1/(byte) numpoints#19 ) - (byte[]) YPOS#25 ← phi( main::@1/(byte[]) YPOS#14 ) - (byte[]) XPOS#27 ← phi( main::@1/(byte[]) XPOS#14 ) (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) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[]) COLS#15 ← phi( render/(byte[]) COLS#17 render::@3/(byte[]) COLS#14 ) (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#14 ) - (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#25 render::@3/(byte[]) YPOS#15 ) - (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#27 render::@3/(byte[]) XPOS#17 ) (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) 0 to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[]) COLS#14 ← phi( render::@1/(byte[]) COLS#15 render::@5/(byte[]) COLS#14 ) (byte) numpoints#14 ← phi( render::@1/(byte) numpoints#15 render::@5/(byte) numpoints#14 ) - (byte[]) YPOS#15 ← phi( render::@1/(byte[]) YPOS#19 render::@5/(byte[]) YPOS#15 ) - (byte[]) XPOS#17 ← phi( render::@1/(byte[]) XPOS#22 render::@5/(byte[]) XPOS#17 ) (byte*) render::colline#2 ← 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#2 ) (byte) render::x#2 ← phi( render::@1/(byte) render::x#0 render::@5/(byte) render::x#1 ) @@ -3420,36 +2885,27 @@ render::@return: scope:[render] from render::@3 return to:@return findcol: scope:[findcol] from render::@2 - (byte[]) COLS#11 ← phi( render::@2/(byte[]) COLS#14 ) (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[]) YPOS#12 ← phi( render::@2/(byte[]) YPOS#15 ) - (byte[]) XPOS#12 ← phi( render::@2/(byte[]) XPOS#17 ) (byte) findcol::mindiff#0 ← (byte/word/signed word) 255 (byte) findcol::mincol#0 ← (byte/signed byte/word/signed word) 0 (byte) findcol::i#0 ← (byte/signed byte/word/signed word) 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#2 ) - (byte[]) COLS#10 ← phi( findcol/(byte[]) COLS#11 findcol::@8/(byte[]) COLS#12 ) (byte) numpoints#10 ← phi( findcol/(byte) numpoints#12 findcol::@8/(byte) numpoints#1 ) (byte) findcol::mindiff#10 ← phi( findcol/(byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::y#1 ← 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[]) YPOS#33 ← phi( findcol/(byte[]) YPOS#12 findcol::@8/(byte[]) YPOS#13 ) (byte) findcol::i#12 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[]) XPOS#34 ← phi( findcol/(byte[]) XPOS#12 findcol::@8/(byte[]) XPOS#13 ) - (byte) findcol::xp#0 ← *((byte[]) XPOS#34 + (byte) findcol::i#12) - (byte) findcol::yp#0 ← *((byte[]) YPOS#33 + (byte) findcol::i#12) + (byte) findcol::xp#0 ← *((byte[]) XPOS#0 + (byte) findcol::i#12) + (byte) findcol::yp#0 ← *((byte[]) YPOS#0 + (byte) findcol::i#12) (boolean~) findcol::$1 ← (byte) findcol::x#1 != (byte) findcol::xp#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#11 ) - (byte[]) YPOS#29 ← phi( findcol::@1/(byte[]) YPOS#33 findcol::@3/(byte[]) YPOS#33 ) - (byte[]) XPOS#31 ← phi( findcol::@1/(byte[]) XPOS#34 findcol::@3/(byte[]) XPOS#34 ) - (byte[]) COLS#6 ← phi( findcol::@1/(byte[]) COLS#10 findcol::@3/(byte[]) COLS#10 ) (byte) numpoints#7 ← phi( findcol::@1/(byte) numpoints#10 findcol::@3/(byte) numpoints#10 ) (byte) findcol::i#10 ← phi( findcol::@1/(byte) findcol::i#12 findcol::@3/(byte) findcol::i#12 ) (byte) findcol::mindiff#6 ← phi( findcol::@1/(byte) findcol::mindiff#10 findcol::@3/(byte) findcol::mindiff#10 ) @@ -3482,9 +2938,6 @@ findcol::@12: scope:[findcol] from findcol::@2 findcol::@5: scope:[findcol] from findcol::@12 findcol::@4 (byte) findcol::mincol#5 ← phi( findcol::@12/(byte) findcol::mincol#10 findcol::@4/(byte) findcol::mincol#10 ) (byte) findcol::x#11 ← phi( findcol::@12/(byte) findcol::x#2 findcol::@4/(byte) findcol::x#2 ) - (byte[]) YPOS#21 ← phi( findcol::@12/(byte[]) YPOS#29 findcol::@4/(byte[]) YPOS#29 ) - (byte[]) XPOS#24 ← phi( findcol::@12/(byte[]) XPOS#31 findcol::@4/(byte[]) XPOS#31 ) - (byte[]) COLS#3 ← phi( findcol::@12/(byte[]) COLS#6 findcol::@4/(byte[]) COLS#6 ) (byte) numpoints#4 ← phi( findcol::@12/(byte) numpoints#7 findcol::@4/(byte) numpoints#7 ) (byte) findcol::i#6 ← phi( findcol::@12/(byte) findcol::i#10 findcol::@4/(byte) findcol::i#10 ) (byte) findcol::mindiff#3 ← phi( findcol::@12/(byte) findcol::mindiff#6 findcol::@4/(byte) findcol::mindiff#6 ) @@ -3506,9 +2959,6 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 (byte) findcol::y#12 ← phi( findcol::@14/(byte) findcol::y#2 findcol::@6/(byte) findcol::y#2 ) (byte) findcol::mincol#4 ← phi( findcol::@14/(byte) findcol::mincol#5 findcol::@6/(byte) findcol::mincol#5 ) (byte) findcol::x#10 ← phi( findcol::@14/(byte) findcol::x#11 findcol::@6/(byte) findcol::x#11 ) - (byte[]) YPOS#16 ← phi( findcol::@14/(byte[]) YPOS#21 findcol::@6/(byte[]) YPOS#21 ) - (byte[]) XPOS#18 ← phi( findcol::@14/(byte[]) XPOS#24 findcol::@6/(byte[]) XPOS#24 ) - (byte[]) COLS#1 ← phi( findcol::@14/(byte[]) COLS#3 findcol::@6/(byte[]) COLS#3 ) (byte) numpoints#2 ← phi( findcol::@14/(byte) numpoints#4 findcol::@6/(byte) numpoints#4 ) (byte) findcol::i#4 ← phi( findcol::@14/(byte) findcol::i#6 findcol::@6/(byte) findcol::i#6 ) (byte) findcol::mindiff#2 ← phi( findcol::@14/(byte) findcol::mindiff#3 findcol::@6/(byte) findcol::mindiff#3 ) @@ -3517,13 +2967,10 @@ findcol::@7: scope:[findcol] from findcol::@14 findcol::@6 if((boolean~) findcol::$15) goto findcol::@8 to:findcol::@16 findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 - (byte[]) COLS#12 ← phi( findcol::@16/(byte[]) COLS#1 findcol::@7/(byte[]) COLS#1 ) (byte) findcol::mindiff#11 ← phi( findcol::@16/(byte) findcol::diff#6 findcol::@7/(byte) findcol::mindiff#2 ) (byte) findcol::y#9 ← phi( findcol::@16/(byte) findcol::y#12 findcol::@7/(byte) findcol::y#12 ) (byte) findcol::mincol#2 ← phi( findcol::@16/(byte) findcol::mincol#1 findcol::@7/(byte) findcol::mincol#4 ) (byte) findcol::x#6 ← phi( findcol::@16/(byte) findcol::x#10 findcol::@7/(byte) findcol::x#10 ) - (byte[]) YPOS#13 ← phi( findcol::@16/(byte[]) YPOS#16 findcol::@7/(byte[]) YPOS#16 ) - (byte[]) XPOS#13 ← phi( findcol::@16/(byte[]) XPOS#18 findcol::@7/(byte[]) XPOS#18 ) (byte) numpoints#1 ← phi( findcol::@16/(byte) numpoints#2 findcol::@7/(byte) numpoints#2 ) (byte) findcol::i#3 ← phi( findcol::@16/(byte) findcol::i#4 findcol::@7/(byte) findcol::i#4 ) (byte) findcol::i#1 ← ++ (byte) findcol::i#3 @@ -3531,7 +2978,7 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 if((boolean~) findcol::$16) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← *((byte[]) COLS#1 + (byte) findcol::i#4) + (byte) findcol::mincol#1 ← *((byte[]) COLS#0 + (byte) findcol::i#4) to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return @@ -3543,33 +2990,20 @@ findcol::@17: scope:[findcol] from findcol::@8 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: XPOS#20 XPOS#0 -Not aliassing across scopes: YPOS#23 YPOS#0 Not aliassing across scopes: numpoints#20 numpoints#0 -Not aliassing across scopes: COLS#20 COLS#0 -Not aliassing across scopes: XPOS#1 XPOS#14 -Not aliassing across scopes: YPOS#8 YPOS#14 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: XPOS#27 XPOS#14 -Not aliassing across scopes: YPOS#25 YPOS#14 Not aliassing across scopes: numpoints#17 numpoints#19 -Not aliassing across scopes: COLS#17 COLS#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: XPOS#12 XPOS#17 -Not aliassing across scopes: YPOS#12 YPOS#15 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 -Not aliassing across scopes: COLS#11 COLS#14 -Alias (byte[]) YPOS#1 = (byte[]) YPOS#8 (byte[]) YPOS#10 (byte[]) YPOS#3 (byte[]) YPOS#4 -Alias (byte[]) XPOS#1 = (byte[]) XPOS#10 (byte[]) XPOS#3 (byte[]) XPOS#15 (byte[]) XPOS#11 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 @@ -3577,9 +3011,6 @@ 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[]) COLS#1 = (byte[]) COLS#6 (byte[]) COLS#10 (byte[]) COLS#3 (byte[]) COLS#12 -Alias (byte[]) XPOS#13 = (byte[]) XPOS#31 (byte[]) XPOS#34 (byte[]) XPOS#24 (byte[]) XPOS#18 -Alias (byte[]) YPOS#13 = (byte[]) YPOS#29 (byte[]) YPOS#33 (byte[]) YPOS#21 (byte[]) YPOS#16 Alias (byte) findcol::mincol#10 = (byte) findcol::mincol#11 (byte) findcol::mincol#5 (byte) findcol::mincol#4 Succesful SSA optimization Pass2AliasElimination CONTROL FLOW GRAPH @@ -3593,10 +3024,7 @@ CONTROL FLOW GRAPH (byte[]) COLS#0 ← { (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 5, (byte/signed byte/word/signed word) 7 } to:@5 main: scope:[main] from @5 - (byte[]) COLS#20 ← phi( @5/(byte[]) COLS#0 ) (byte) numpoints#20 ← phi( @5/(byte) numpoints#0 ) - (byte[]) YPOS#23 ← phi( @5/(byte[]) YPOS#0 ) - (byte[]) XPOS#20 ← phi( @5/(byte[]) XPOS#0 ) (byte*) COLORS#3 ← phi( @5/(byte*) COLORS#0 ) (byte) FILL#3 ← phi( @5/(byte) FILL#0 ) (byte*) SCREEN#3 ← phi( @5/(byte*) SCREEN#0 ) @@ -3605,10 +3033,7 @@ main: scope:[main] from @5 main::@3: scope:[main] from main to:main::@1 main::@1: scope:[main] from main::@3 main::@5 - (byte[]) COLS#19 ← phi( main::@3/(byte[]) COLS#20 main::@5/(byte[]) COLS#19 ) (byte) numpoints#19 ← phi( main::@3/(byte) numpoints#20 main::@5/(byte) numpoints#19 ) - (byte[]) YPOS#14 ← phi( main::@3/(byte[]) YPOS#23 main::@5/(byte[]) YPOS#14 ) - (byte[]) XPOS#14 ← phi( main::@3/(byte[]) XPOS#20 main::@5/(byte[]) XPOS#14 ) (byte*) COLORS#2 ← phi( main::@3/(byte*) COLORS#3 main::@5/(byte*) COLORS#2 ) call render param-assignment to:main::@4 @@ -3622,59 +3047,57 @@ main::@return: scope:[main] from main::@5 return to:@return animate: scope:[animate] from main::@4 - (byte[]) YPOS#1 ← phi( main::@4/(byte[]) YPOS#14 ) - (byte[]) XPOS#1 ← phi( main::@4/(byte[]) XPOS#14 ) - (byte/word~) animate::$0 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 - (boolean~) animate::$2 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 40 + (byte/word~) animate::$0 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 + (boolean~) animate::$2 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 40 if((boolean~) animate::$2) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte/word~) animate::$3 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 - (boolean~) animate::$5 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$3 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 + (boolean~) animate::$5 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 25 if((boolean~) animate::$5) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte/signed byte/word/signed word~) animate::$6 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 - (boolean~) animate::$8 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 1) != (byte/word/signed word) 255 + (byte/signed byte/word/signed word~) animate::$6 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 + (boolean~) animate::$8 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) != (byte/word/signed word) 255 if((boolean~) animate::$8) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte/word~) animate::$9 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 - (boolean~) animate::$11 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 2) != (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$9 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 + (boolean~) animate::$11 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) != (byte/signed byte/word/signed word) 25 if((boolean~) animate::$11) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 40 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte/signed byte/word/signed word~) animate::$12 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 - (boolean~) animate::$14 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 3) != (byte/word/signed word) 255 + (byte/signed byte/word/signed word~) animate::$12 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 + (boolean~) animate::$14 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) != (byte/word/signed word) 255 if((boolean~) animate::$14) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 2) ← (byte/signed byte/word/signed word) 0 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) ← (byte/signed byte/word/signed word) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word) 25 - (byte/word~) animate::$15 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 3) ← (byte/word~) animate::$15 - (boolean~) animate::$17 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 3) < (byte/signed byte/word/signed word) 40 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$15 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/word~) animate::$15 + (boolean~) animate::$17 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) < (byte/signed byte/word/signed word) 40 if((boolean~) animate::$17) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte/signed byte/word/signed word~) animate::$18 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 40 - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$18 + (byte/signed byte/word/signed word~) animate::$18 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 40 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$18 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return @@ -3698,28 +3121,19 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 return to:@return render: scope:[render] from main::@1 - (byte[]) COLS#17 ← phi( main::@1/(byte[]) COLS#19 ) (byte) numpoints#17 ← phi( main::@1/(byte) numpoints#19 ) - (byte[]) YPOS#25 ← phi( main::@1/(byte[]) YPOS#14 ) - (byte[]) XPOS#27 ← phi( main::@1/(byte[]) XPOS#14 ) (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) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[]) COLS#15 ← phi( render/(byte[]) COLS#17 render::@3/(byte[]) COLS#14 ) (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#14 ) - (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#25 render::@3/(byte[]) YPOS#15 ) - (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#27 render::@3/(byte[]) XPOS#17 ) (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) 0 to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[]) COLS#14 ← phi( render::@1/(byte[]) COLS#15 render::@5/(byte[]) COLS#14 ) (byte) numpoints#14 ← phi( render::@1/(byte) numpoints#15 render::@5/(byte) numpoints#14 ) - (byte[]) YPOS#15 ← phi( render::@1/(byte[]) YPOS#19 render::@5/(byte[]) YPOS#15 ) - (byte[]) XPOS#17 ← phi( render::@1/(byte[]) XPOS#22 render::@5/(byte[]) XPOS#17 ) (byte*) render::colline#2 ← 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#2 ) (byte) render::x#2 ← phi( render::@1/(byte) render::x#0 render::@5/(byte) render::x#1 ) @@ -3745,28 +3159,22 @@ render::@return: scope:[render] from render::@3 return to:@return findcol: scope:[findcol] from render::@2 - (byte[]) COLS#11 ← phi( render::@2/(byte[]) COLS#14 ) (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[]) YPOS#12 ← phi( render::@2/(byte[]) YPOS#15 ) - (byte[]) XPOS#12 ← phi( render::@2/(byte[]) XPOS#17 ) (byte) findcol::mindiff#0 ← (byte/word/signed word) 255 (byte) findcol::mincol#0 ← (byte/signed byte/word/signed word) 0 (byte) findcol::i#0 ← (byte/signed byte/word/signed word) 0 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#10 ← phi( findcol/(byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) - (byte[]) COLS#1 ← phi( findcol/(byte[]) COLS#11 findcol::@8/(byte[]) COLS#1 ) (byte) numpoints#1 ← phi( findcol/(byte) numpoints#12 findcol::@8/(byte) numpoints#1 ) (byte) findcol::mindiff#10 ← phi( findcol/(byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::y#1 ← phi( findcol/(byte) findcol::y#8 findcol::@8/(byte) findcol::y#1 ) (byte) findcol::x#1 ← phi( findcol/(byte) findcol::x#5 findcol::@8/(byte) findcol::x#1 ) - (byte[]) YPOS#13 ← phi( findcol/(byte[]) YPOS#12 findcol::@8/(byte[]) YPOS#13 ) (byte) findcol::i#10 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[]) XPOS#13 ← phi( findcol/(byte[]) XPOS#12 findcol::@8/(byte[]) XPOS#13 ) - (byte) findcol::xp#0 ← *((byte[]) XPOS#13 + (byte) findcol::i#10) - (byte) findcol::yp#0 ← *((byte[]) YPOS#13 + (byte) findcol::i#10) + (byte) findcol::xp#0 ← *((byte[]) XPOS#0 + (byte) findcol::i#10) + (byte) findcol::yp#0 ← *((byte[]) YPOS#0 + (byte) findcol::i#10) (boolean~) findcol::$1 ← (byte) findcol::x#1 != (byte) findcol::xp#0 if((boolean~) findcol::$1) goto findcol::@2 to:findcol::@9 @@ -3819,7 +3227,7 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 if((boolean~) findcol::$16) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← *((byte[]) COLS#1 + (byte) findcol::i#10) + (byte) findcol::mincol#1 ← *((byte[]) COLS#0 + (byte) findcol::i#10) to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return @@ -3831,50 +3239,30 @@ findcol::@17: scope:[findcol] from findcol::@8 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: XPOS#20 XPOS#0 -Not aliassing across scopes: YPOS#23 YPOS#0 Not aliassing across scopes: numpoints#20 numpoints#0 -Not aliassing across scopes: COLS#20 COLS#0 -Not aliassing across scopes: XPOS#1 XPOS#14 -Not aliassing across scopes: YPOS#1 YPOS#14 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: XPOS#27 XPOS#14 -Not aliassing across scopes: YPOS#25 YPOS#14 Not aliassing across scopes: numpoints#17 numpoints#19 -Not aliassing across scopes: COLS#17 COLS#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: XPOS#12 XPOS#17 -Not aliassing across scopes: YPOS#12 YPOS#15 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 -Not aliassing across scopes: COLS#11 COLS#14 Self Phi Eliminated (byte*) COLORS#2 -Self Phi Eliminated (byte[]) XPOS#14 -Self Phi Eliminated (byte[]) YPOS#14 Self Phi Eliminated (byte) numpoints#19 -Self Phi Eliminated (byte[]) COLS#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[]) XPOS#17 -Self Phi Eliminated (byte[]) YPOS#15 Self Phi Eliminated (byte) numpoints#14 -Self Phi Eliminated (byte[]) COLS#14 -Self Phi Eliminated (byte[]) XPOS#13 -Self Phi Eliminated (byte[]) YPOS#13 Self Phi Eliminated (byte) findcol::x#1 Self Phi Eliminated (byte) findcol::y#1 Self Phi Eliminated (byte) numpoints#1 -Self Phi Eliminated (byte[]) COLS#1 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -3887,10 +3275,7 @@ CONTROL FLOW GRAPH (byte[]) COLS#0 ← { (byte/signed byte/word/signed word) 1, (byte/signed byte/word/signed word) 2, (byte/signed byte/word/signed word) 3, (byte/signed byte/word/signed word) 4, (byte/signed byte/word/signed word) 5, (byte/signed byte/word/signed word) 7 } to:@5 main: scope:[main] from @5 - (byte[]) COLS#20 ← phi( @5/(byte[]) COLS#0 ) (byte) numpoints#20 ← phi( @5/(byte) numpoints#0 ) - (byte[]) YPOS#23 ← phi( @5/(byte[]) YPOS#0 ) - (byte[]) XPOS#20 ← phi( @5/(byte[]) XPOS#0 ) (byte*) COLORS#3 ← phi( @5/(byte*) COLORS#0 ) (byte) FILL#3 ← phi( @5/(byte) FILL#0 ) (byte*) SCREEN#3 ← phi( @5/(byte*) SCREEN#0 ) @@ -3899,10 +3284,7 @@ main: scope:[main] from @5 main::@3: scope:[main] from main to:main::@1 main::@1: scope:[main] from main::@3 main::@5 - (byte[]) COLS#19 ← phi( main::@3/(byte[]) COLS#20 ) (byte) numpoints#19 ← phi( main::@3/(byte) numpoints#20 ) - (byte[]) YPOS#14 ← phi( main::@3/(byte[]) YPOS#23 ) - (byte[]) XPOS#14 ← phi( main::@3/(byte[]) XPOS#20 ) (byte*) COLORS#2 ← phi( main::@3/(byte*) COLORS#3 ) call render param-assignment to:main::@4 @@ -3916,59 +3298,57 @@ main::@return: scope:[main] from main::@5 return to:@return animate: scope:[animate] from main::@4 - (byte[]) YPOS#1 ← phi( main::@4/(byte[]) YPOS#14 ) - (byte[]) XPOS#1 ← phi( main::@4/(byte[]) XPOS#14 ) - (byte/word~) animate::$0 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 - (boolean~) animate::$2 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 40 + (byte/word~) animate::$0 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$0 + (boolean~) animate::$2 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 40 if((boolean~) animate::$2) goto animate::@1 to:animate::@7 animate::@1: scope:[animate] from animate animate::@7 - (byte/word~) animate::$3 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 - (boolean~) animate::$5 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$3 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) + (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/word~) animate::$3 + (boolean~) animate::$5 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) != (byte/signed byte/word/signed word) 25 if((boolean~) animate::$5) goto animate::@2 to:animate::@8 animate::@7: scope:[animate] from animate - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 to:animate::@1 animate::@2: scope:[animate] from animate::@1 animate::@8 - (byte/signed byte/word/signed word~) animate::$6 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 - (boolean~) animate::$8 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 1) != (byte/word/signed word) 255 + (byte/signed byte/word/signed word~) animate::$6 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) - (byte/signed byte/word/signed word) 1 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word~) animate::$6 + (boolean~) animate::$8 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) != (byte/word/signed word) 255 if((boolean~) animate::$8) goto animate::@3 to:animate::@9 animate::@8: scope:[animate] from animate::@1 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 0) ← (byte/signed byte/word/signed word) 0 to:animate::@2 animate::@3: scope:[animate] from animate::@2 animate::@9 - (byte/word~) animate::$9 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 - (boolean~) animate::$11 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 2) != (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$9 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) + (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) ← (byte/word~) animate::$9 + (boolean~) animate::$11 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) != (byte/signed byte/word/signed word) 25 if((boolean~) animate::$11) goto animate::@4 to:animate::@10 animate::@9: scope:[animate] from animate::@2 - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 40 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 1) ← (byte/signed byte/word/signed word) 40 to:animate::@3 animate::@4: scope:[animate] from animate::@10 animate::@3 - (byte/signed byte/word/signed word~) animate::$12 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 - (boolean~) animate::$14 ← *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 3) != (byte/word/signed word) 255 + (byte/signed byte/word/signed word~) animate::$12 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 1 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$12 + (boolean~) animate::$14 ← *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) != (byte/word/signed word) 255 if((boolean~) animate::$14) goto animate::@return to:animate::@11 animate::@10: scope:[animate] from animate::@3 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 2) ← (byte/signed byte/word/signed word) 0 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 2) ← (byte/signed byte/word/signed word) 0 to:animate::@4 animate::@11: scope:[animate] from animate::@4 - *((byte[]) YPOS#1 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word) 25 - (byte/word~) animate::$15 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 3) ← (byte/word~) animate::$15 - (boolean~) animate::$17 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 3) < (byte/signed byte/word/signed word) 40 + *((byte[]) YPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word) 25 + (byte/word~) animate::$15 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) + (byte/signed byte/word/signed word) 7 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/word~) animate::$15 + (boolean~) animate::$17 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) < (byte/signed byte/word/signed word) 40 if((boolean~) animate::$17) goto animate::@return to:animate::@12 animate::@12: scope:[animate] from animate::@11 - (byte/signed byte/word/signed word~) animate::$18 ← *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 40 - *((byte[]) XPOS#1 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$18 + (byte/signed byte/word/signed word~) animate::$18 ← *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) - (byte/signed byte/word/signed word) 40 + *((byte[]) XPOS#0 + (byte/signed byte/word/signed word) 3) ← (byte/signed byte/word/signed word~) animate::$18 to:animate::@return animate::@return: scope:[animate] from animate::@11 animate::@12 animate::@4 return @@ -3992,28 +3372,19 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 return to:@return render: scope:[render] from main::@1 - (byte[]) COLS#17 ← phi( main::@1/(byte[]) COLS#19 ) (byte) numpoints#17 ← phi( main::@1/(byte) numpoints#19 ) - (byte[]) YPOS#25 ← phi( main::@1/(byte[]) YPOS#14 ) - (byte[]) XPOS#27 ← phi( main::@1/(byte[]) XPOS#14 ) (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) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[]) COLS#15 ← phi( render/(byte[]) COLS#17 render::@3/(byte[]) COLS#14 ) (byte) numpoints#15 ← phi( render/(byte) numpoints#17 render::@3/(byte) numpoints#14 ) - (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#25 render::@3/(byte[]) YPOS#15 ) - (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#27 render::@3/(byte[]) XPOS#17 ) (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) 0 to:render::@2 render::@2: scope:[render] from render::@1 render::@5 - (byte[]) COLS#14 ← phi( render::@1/(byte[]) COLS#15 ) (byte) numpoints#14 ← phi( render::@1/(byte) numpoints#15 ) - (byte[]) YPOS#15 ← phi( render::@1/(byte[]) YPOS#19 ) - (byte[]) XPOS#17 ← phi( render::@1/(byte[]) XPOS#22 ) (byte*) render::colline#2 ← phi( render::@1/(byte*) render::colline#5 ) (byte) render::y#2 ← phi( render::@1/(byte) render::y#4 ) (byte) render::x#2 ← phi( render::@1/(byte) render::x#0 render::@5/(byte) render::x#1 ) @@ -4039,28 +3410,22 @@ render::@return: scope:[render] from render::@3 return to:@return findcol: scope:[findcol] from render::@2 - (byte[]) COLS#11 ← phi( render::@2/(byte[]) COLS#14 ) (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[]) YPOS#12 ← phi( render::@2/(byte[]) YPOS#15 ) - (byte[]) XPOS#12 ← phi( render::@2/(byte[]) XPOS#17 ) (byte) findcol::mindiff#0 ← (byte/word/signed word) 255 (byte) findcol::mincol#0 ← (byte/signed byte/word/signed word) 0 (byte) findcol::i#0 ← (byte/signed byte/word/signed word) 0 to:findcol::@1 findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#10 ← phi( findcol/(byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) - (byte[]) COLS#1 ← phi( findcol/(byte[]) COLS#11 ) (byte) numpoints#1 ← phi( findcol/(byte) numpoints#12 ) (byte) findcol::mindiff#10 ← phi( findcol/(byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::y#1 ← phi( findcol/(byte) findcol::y#8 ) (byte) findcol::x#1 ← phi( findcol/(byte) findcol::x#5 ) - (byte[]) YPOS#13 ← phi( findcol/(byte[]) YPOS#12 ) (byte) findcol::i#10 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte[]) XPOS#13 ← phi( findcol/(byte[]) XPOS#12 ) - (byte) findcol::xp#0 ← *((byte[]) XPOS#13 + (byte) findcol::i#10) - (byte) findcol::yp#0 ← *((byte[]) YPOS#13 + (byte) findcol::i#10) + (byte) findcol::xp#0 ← *((byte[]) XPOS#0 + (byte) findcol::i#10) + (byte) findcol::yp#0 ← *((byte[]) YPOS#0 + (byte) findcol::i#10) (boolean~) findcol::$1 ← (byte) findcol::x#1 != (byte) findcol::xp#0 if((boolean~) findcol::$1) goto findcol::@2 to:findcol::@9 @@ -4113,7 +3478,7 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 if((boolean~) findcol::$16) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← *((byte[]) COLS#1 + (byte) findcol::i#10) + (byte) findcol::mincol#1 ← *((byte[]) COLS#0 + (byte) findcol::i#10) to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return @@ -4125,44 +3490,24 @@ findcol::@17: scope:[findcol] from findcol::@8 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[]) XPOS#20 (byte[]) XPOS#0 -Redundant Phi (byte[]) YPOS#23 (byte[]) YPOS#0 Redundant Phi (byte) numpoints#20 (byte) numpoints#0 -Redundant Phi (byte[]) COLS#20 (byte[]) COLS#0 Redundant Phi (byte*) COLORS#2 (byte*) COLORS#3 -Redundant Phi (byte[]) XPOS#14 (byte[]) XPOS#20 -Redundant Phi (byte[]) YPOS#14 (byte[]) YPOS#23 Redundant Phi (byte) numpoints#19 (byte) numpoints#20 -Redundant Phi (byte[]) COLS#19 (byte[]) COLS#20 -Redundant Phi (byte[]) XPOS#1 (byte[]) XPOS#14 -Redundant Phi (byte[]) YPOS#1 (byte[]) YPOS#14 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[]) XPOS#27 (byte[]) XPOS#14 -Redundant Phi (byte[]) YPOS#25 (byte[]) YPOS#14 Redundant Phi (byte) numpoints#17 (byte) numpoints#19 -Redundant Phi (byte[]) COLS#17 (byte[]) COLS#19 Redundant Phi (byte) render::y#2 (byte) render::y#4 Redundant Phi (byte*) render::colline#2 (byte*) render::colline#5 -Redundant Phi (byte[]) XPOS#17 (byte[]) XPOS#22 -Redundant Phi (byte[]) YPOS#15 (byte[]) YPOS#19 Redundant Phi (byte) numpoints#14 (byte) numpoints#15 -Redundant Phi (byte[]) COLS#14 (byte[]) COLS#15 -Redundant Phi (byte[]) XPOS#12 (byte[]) XPOS#17 -Redundant Phi (byte[]) YPOS#12 (byte[]) YPOS#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[]) COLS#11 (byte[]) COLS#14 -Redundant Phi (byte[]) XPOS#13 (byte[]) XPOS#12 -Redundant Phi (byte[]) YPOS#13 (byte[]) YPOS#12 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 -Redundant Phi (byte[]) COLS#1 (byte[]) COLS#11 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -4266,10 +3611,7 @@ render: scope:[render] from main::@1 (byte) render::y#0 ← (byte/signed byte/word/signed word) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[]) COLS#15 ← phi( render/(byte[]) COLS#0 render::@3/(byte[]) COLS#15 ) (byte) numpoints#15 ← phi( render/(byte) numpoints#0 render::@3/(byte) numpoints#15 ) - (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#0 render::@3/(byte[]) YPOS#19 ) - (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#0 render::@3/(byte[]) XPOS#22 ) (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) 0 @@ -4306,8 +3648,8 @@ findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#10 ← phi( findcol/(byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) (byte) findcol::mindiff#10 ← phi( findcol/(byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::i#10 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte) findcol::xp#0 ← *((byte[]) XPOS#22 + (byte) findcol::i#10) - (byte) findcol::yp#0 ← *((byte[]) YPOS#19 + (byte) findcol::i#10) + (byte) findcol::xp#0 ← *((byte[]) XPOS#0 + (byte) findcol::i#10) + (byte) findcol::yp#0 ← *((byte[]) YPOS#0 + (byte) findcol::i#10) (boolean~) findcol::$1 ← (byte) findcol::x#0 != (byte) findcol::xp#0 if((boolean~) findcol::$1) goto findcol::@2 to:findcol::@9 @@ -4360,7 +3702,7 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 if((boolean~) findcol::$16) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← *((byte[]) COLS#15 + (byte) findcol::i#10) + (byte) findcol::mincol#1 ← *((byte[]) COLS#0 + (byte) findcol::i#10) to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return @@ -4480,10 +3822,7 @@ render: scope:[render] from main::@1 (byte) render::y#0 ← (byte/signed byte/word/signed word) 0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[]) COLS#15 ← phi( render/(byte[]) COLS#0 render::@3/(byte[]) COLS#15 ) (byte) numpoints#15 ← phi( render/(byte) numpoints#0 render::@3/(byte) numpoints#15 ) - (byte[]) YPOS#19 ← phi( render/(byte[]) YPOS#0 render::@3/(byte[]) YPOS#19 ) - (byte[]) XPOS#22 ← phi( render/(byte[]) XPOS#0 render::@3/(byte[]) XPOS#22 ) (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) 0 @@ -4518,8 +3857,8 @@ findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#10 ← phi( findcol/(byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) (byte) findcol::mindiff#10 ← phi( findcol/(byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::i#10 ← phi( findcol/(byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte) findcol::xp#0 ← *((byte[]) XPOS#22 + (byte) findcol::i#10) - (byte) findcol::yp#0 ← *((byte[]) YPOS#19 + (byte) findcol::i#10) + (byte) findcol::xp#0 ← *((byte[]) XPOS#0 + (byte) findcol::i#10) + (byte) findcol::yp#0 ← *((byte[]) YPOS#0 + (byte) findcol::i#10) if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 @@ -4566,7 +3905,7 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 if((byte) findcol::i#1<(byte) numpoints#15) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← *((byte[]) COLS#15 + (byte) findcol::i#10) + (byte) findcol::mincol#1 ← *((byte[]) COLS#0 + (byte) findcol::i#10) to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return @@ -4676,10 +4015,7 @@ render: scope:[render] from main::@1 (byte*) render::colline#0 ← (const byte*) COLORS#0 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[]) COLS#15 ← phi( render/(const byte[]) COLS#0 render::@3/(byte[]) COLS#15 ) (byte) numpoints#15 ← phi( render/(const byte) numpoints#0 render::@3/(byte) numpoints#15 ) - (byte[]) YPOS#19 ← phi( render/(const byte[]) YPOS#0 render::@3/(byte[]) YPOS#19 ) - (byte[]) XPOS#22 ← phi( render/(const byte[]) XPOS#0 render::@3/(byte[]) XPOS#22 ) (byte*) render::colline#5 ← phi( render/(byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(const byte) render::y#0 render::@3/(byte) render::y#1 ) to:render::@2 @@ -4710,8 +4046,8 @@ findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#10 ← phi( findcol/(const byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) (byte) findcol::mindiff#10 ← phi( findcol/(const byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::i#10 ← phi( findcol/(const byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte) findcol::xp#0 ← *((byte[]) XPOS#22 + (byte) findcol::i#10) - (byte) findcol::yp#0 ← *((byte[]) YPOS#19 + (byte) findcol::i#10) + (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#10) + (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#10) if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 @@ -4757,7 +4093,7 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 if((byte) findcol::i#1<(byte) numpoints#15) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← *((byte[]) COLS#15 + (byte) findcol::i#10) + (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#10) to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return @@ -4854,10 +4190,7 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 render: scope:[render] from main::@1 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[]) COLS#15 ← phi( render/(const byte[]) COLS#0 render::@3/(byte[]) COLS#15 ) (byte) numpoints#15 ← phi( render/(const byte) numpoints#0 render::@3/(byte) numpoints#15 ) - (byte[]) YPOS#19 ← phi( render/(const byte[]) YPOS#0 render::@3/(byte[]) YPOS#19 ) - (byte[]) XPOS#22 ← phi( render/(const byte[]) XPOS#0 render::@3/(byte[]) XPOS#22 ) (byte*) render::colline#5 ← phi( render/(const byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(const byte) render::y#0 render::@3/(byte) render::y#1 ) to:render::@2 @@ -4888,8 +4221,8 @@ findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#10 ← phi( findcol/(const byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) (byte) findcol::mindiff#10 ← phi( findcol/(const byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::i#10 ← phi( findcol/(const byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte) findcol::xp#0 ← *((byte[]) XPOS#22 + (byte) findcol::i#10) - (byte) findcol::yp#0 ← *((byte[]) YPOS#19 + (byte) findcol::i#10) + (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#10) + (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#10) if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 @@ -4935,7 +4268,7 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 if((byte) findcol::i#1<(byte) numpoints#15) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← *((byte[]) COLS#15 + (byte) findcol::i#10) + (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#10) to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return @@ -5054,10 +4387,7 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 render: scope:[render] from main::@1 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[]) COLS#15 ← phi( render/(const byte[]) COLS#0 render::@3/(byte[]) COLS#15 ) (byte) numpoints#15 ← phi( render/(const byte) numpoints#0 render::@3/(byte) numpoints#15 ) - (byte[]) YPOS#19 ← phi( render/(const byte[]) YPOS#0 render::@3/(byte[]) YPOS#19 ) - (byte[]) XPOS#22 ← phi( render/(const byte[]) XPOS#0 render::@3/(byte[]) XPOS#22 ) (byte*) render::colline#5 ← phi( render/(const byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(const byte) render::y#0 render::@3/(byte) render::y#1 ) to:render::@2 @@ -5088,8 +4418,8 @@ findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#10 ← phi( findcol/(const byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) (byte) findcol::mindiff#10 ← phi( findcol/(const byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::i#10 ← phi( findcol/(const byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte) findcol::xp#0 ← *((byte[]) XPOS#22 + (byte) findcol::i#10) - (byte) findcol::yp#0 ← *((byte[]) YPOS#19 + (byte) findcol::i#10) + (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#10) + (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#10) if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@3 @@ -5135,7 +4465,7 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 if((byte) findcol::i#1<(byte) numpoints#15) goto findcol::@1 to:findcol::@17 findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← *((byte[]) COLS#15 + (byte) findcol::i#10) + (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#10) to:findcol::@8 findcol::@17: scope:[findcol] from findcol::@8 to:findcol::@return @@ -5231,10 +4561,7 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 render: scope:[render] from main::@1 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[]) COLS#15 ← phi( render/(const byte[]) COLS#0 render::@3/(byte[]) COLS#15 ) (byte) numpoints#15 ← phi( render/(const byte) numpoints#0 render::@3/(byte) numpoints#15 ) - (byte[]) YPOS#19 ← phi( render/(const byte[]) YPOS#0 render::@3/(byte[]) YPOS#19 ) - (byte[]) XPOS#22 ← phi( render/(const byte[]) XPOS#0 render::@3/(byte[]) XPOS#22 ) (byte*) render::colline#5 ← phi( render/(const byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(const byte) render::y#0 render::@3/(byte) render::y#1 ) to:render::@2 @@ -5265,8 +4592,8 @@ findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#10 ← phi( findcol/(const byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) (byte) findcol::mindiff#10 ← phi( findcol/(const byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::i#10 ← phi( findcol/(const byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte) findcol::xp#0 ← *((byte[]) XPOS#22 + (byte) findcol::i#10) - (byte) findcol::yp#0 ← *((byte[]) YPOS#19 + (byte) findcol::i#10) + (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#10) + (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#10) if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@9 @@ -5308,7 +4635,7 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 if((byte) findcol::i#1<(byte) numpoints#15) goto findcol::@1 to:findcol::@return findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← *((byte[]) COLS#15 + (byte) findcol::i#10) + (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#10) to:findcol::@8 @5: scope:[] from @begin call main param-assignment @@ -5319,10 +4646,7 @@ 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[]) XPOS#22 -Self Phi Eliminated (byte[]) YPOS#19 Self Phi Eliminated (byte) numpoints#15 -Self Phi Eliminated (byte[]) COLS#15 Succesful SSA optimization Pass2SelfPhiElimination CONTROL FLOW GRAPH @begin: scope:[] from @@ -5406,10 +4730,7 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 render: scope:[render] from main::@1 to:render::@1 render::@1: scope:[render] from render render::@3 - (byte[]) COLS#15 ← phi( render/(const byte[]) COLS#0 ) (byte) numpoints#15 ← phi( render/(const byte) numpoints#0 ) - (byte[]) YPOS#19 ← phi( render/(const byte[]) YPOS#0 ) - (byte[]) XPOS#22 ← phi( render/(const byte[]) XPOS#0 ) (byte*) render::colline#5 ← phi( render/(const byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(const byte) render::y#0 render::@3/(byte) render::y#1 ) to:render::@2 @@ -5440,8 +4761,8 @@ findcol::@1: scope:[findcol] from findcol findcol::@8 (byte) findcol::mincol#10 ← phi( findcol/(const byte) findcol::mincol#0 findcol::@8/(byte) findcol::mincol#2 ) (byte) findcol::mindiff#10 ← phi( findcol/(const byte) findcol::mindiff#0 findcol::@8/(byte) findcol::mindiff#11 ) (byte) findcol::i#10 ← phi( findcol/(const byte) findcol::i#0 findcol::@8/(byte) findcol::i#1 ) - (byte) findcol::xp#0 ← *((byte[]) XPOS#22 + (byte) findcol::i#10) - (byte) findcol::yp#0 ← *((byte[]) YPOS#19 + (byte) findcol::i#10) + (byte) findcol::xp#0 ← *((const byte[]) XPOS#0 + (byte) findcol::i#10) + (byte) findcol::yp#0 ← *((const byte[]) YPOS#0 + (byte) findcol::i#10) if((byte) findcol::x#0!=(byte) findcol::xp#0) goto findcol::@2 to:findcol::@9 findcol::@2: scope:[findcol] from findcol::@1 findcol::@9 @@ -5483,17 +4804,14 @@ findcol::@8: scope:[findcol] from findcol::@16 findcol::@7 if((byte) findcol::i#1<(byte) numpoints#15) goto findcol::@1 to:findcol::@return findcol::@16: scope:[findcol] from findcol::@7 - (byte) findcol::mincol#1 ← *((byte[]) COLS#15 + (byte) findcol::i#10) + (byte) findcol::mincol#1 ← *((const byte[]) COLS#0 + (byte) findcol::i#10) to:findcol::@8 @5: scope:[] from @begin call main param-assignment to:@end @end: scope:[] from @5 -Redundant Phi (byte[]) XPOS#22 (const byte[]) XPOS#0 -Redundant Phi (byte[]) YPOS#19 (const byte[]) YPOS#0 Redundant Phi (byte) numpoints#15 (const byte) numpoints#0 -Redundant Phi (byte[]) COLS#15 (const byte[]) COLS#0 Succesful SSA optimization Pass2RedundantPhiElimination CONTROL FLOW GRAPH @begin: scope:[] from