1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-04-09 21:37:31 +00:00

Implemented dword ASM and printing

This commit is contained in:
jespergravgaard 2018-02-15 19:50:33 +01:00
parent 8b54f38640
commit b5a79848f3
63 changed files with 6718 additions and 1339 deletions

View File

@ -75,6 +75,14 @@ public class AsmFormat {
} else {
return "$ffff & " + getAsmConstant(program, operand, Operator.BOOL_AND.getPrecedence(), codeScope);
}
} else if(Operator.CAST_DWORD.equals(operator) || Operator.CAST_SDWORD.equals(operator)) {
SymbolType operandType = SymbolTypeInference.inferType(program.getScope(), operand);
if(SymbolType.isDWord(operandType) || SymbolType.isSDWord(operandType)) {
// No cast needed
return getAsmConstant(program, operand, outerPrecedence, codeScope);
} else {
return "$ffffffff & " + getAsmConstant(program, operand, Operator.BOOL_AND.getPrecedence(), codeScope);
}
} else if(Operator.INCREMENT.equals(operator)) {
return getAsmConstant(program, operand, Operator.PLUS.getPrecedence(), codeScope) + "+1";
} else if(Operator.DECREMENT.equals(operator)) {

View File

@ -503,6 +503,8 @@ class AsmFragmentTemplateSynthesisRule {
synths.add(new AsmFragmentTemplateSynthesisRule("(v..)z1=(.*)_(plus|minus|band|bxor|bor)_(v..)z1", oneZ2, null, "$1z1=$2_$3_$4z2", null, mapZ, false));
synths.add(new AsmFragmentTemplateSynthesisRule("(v..)z1=_(neg|lo|hi)_(v..)z1", oneZ2, null, "$1z1=_$2_$3z2", null, mapZ, false));
//synths.add(new AsmFragmentTemplateSynthesisRule("(v..)z1=(v..)z1_(plus|minus|band|bxor|bor)_(v..)z2", null, null, "$1z1=$2z2_$3_$4z3", null, mapZ, false));
// Convert INC/DEC to +1/-1 ( ..._inc_xxx... -> ...xxx_plus_1_... / ..._dec_xxx... -> ...xxx_minus_1_... )
synths.add(new AsmFragmentTemplateSynthesisRule("vb(.)aa=_inc_(.*)", null, null, "vb$1aa=$2_plus_1", null, null));
synths.add(new AsmFragmentTemplateSynthesisRule("vb(.)aa=_dec_(.*)", null, null, "vb$1aa=$2_minus_1", null, null));

View File

@ -1,2 +0,0 @@
asl {z1}
rol {z1}+1

View File

@ -0,0 +1,7 @@
lda {z2}
sta {z1}
lda {z2}+1
sta {z1}+1
lda #0
sta {z1}+2
sta {z1}+3

View File

@ -0,0 +1,8 @@
inc {z1}
bne !+
inc {z1}+1
bne !+
inc {z1}+2
bne !+
inc {z1}+3
!:

View File

@ -0,0 +1,5 @@
sta {z1}
lda #0
sta {z1}+1
sta {z1}+2
sta {z1}+3

View File

@ -0,0 +1,8 @@
lda #<{c1}
sta {z1}
lda #>{c1}
sta {z1}+1
lda #<{c1}>>16
sta {z1}+2
lda #>{c1}>>16
sta {z1}+3

View File

@ -0,0 +1,4 @@
asl {z1}
rol {z1}+1
rol {z1}+2
rol {z1}+3

View File

@ -0,0 +1,4 @@
lda {z2}
sta {z1}
lda {z2}+1
sta {z1}+1

View File

@ -0,0 +1,8 @@
lda {z2}
sta {z1}
lda {z2}+1
sta {z1}+1
lda {z2}+2
sta {z1}+2
lda {z2}+3
sta {z1}+3

View File

@ -0,0 +1,14 @@
lda {z2}
clc
adc {z3}
sta {z1}
lda {z2}+1
adc {z3}+1
sta {z1}+1
lda {z2}+2
adc {z3}+2
sta {z1}+2
lda {z2}+3
adc {z3}+3
sta {z1}+3

View File

@ -0,0 +1,14 @@
lda {z2}
clc
adc #<{c1}
sta {z1}
lda {z2}+1
adc #>{c1}
sta {z1}+1
lda {z2}+2
adc #0
sta {z1}+2
lda {z2}+3
adc #0
sta {z1}+3

View File

@ -0,0 +1,14 @@
lda {z2}
clc
adc {z3}
sta {z1}
lda {z2}+1
adc {z3}+1
sta {z1}+1
lda {z2}+2
adc #0
sta {z1}+2
lda {z2}+3
adc #0
sta {z1}+3

View File

@ -0,0 +1,8 @@
lda {z2}
sta {z1}
lda {z2}+1
sta {z1}+1
lda {z3}
sta {z1}+2
lda {z3}+1
sta {z1}+3

View File

@ -0,0 +1,8 @@
lda {z3}
sta {z1}
lda {z3}+1
sta {z1}+1
lda {z2}+2
sta {z1}+2
lda {z2}+3
sta {z1}+3

View File

@ -0,0 +1,13 @@
lda {z1}
cmp {z2}
bne !+
lda {z1}+1
cmp {z2}+1
bne !+
lda {z1}+2
cmp {z2}+2
bne !+
lda {z1}+3
cmp {z2}+3
beq {la1}
!:

View File

@ -0,0 +1,12 @@
lda {z1}+3
cmp #>{c1}>>16
bne {la1}
lda {z1}+2
cmp #<{c1}>>16
bne {la1}
lda {z1}+1
cmp #>{c1}
bne {la1}
lda {z1}
cmp #<{c1}
bne {la1}

View File

@ -0,0 +1,4 @@
lda {z2}+2
sta {z1}
lda {z2}+3
sta {z1}+1

View File

@ -0,0 +1,4 @@
lda {z2}
sta {z1}
lda {z2}+1
sta {z1}+1

View File

@ -0,0 +1,5 @@
lda {z1}
bne !+
lda {z1}+1
beq {la1}
!:

View File

@ -0,0 +1,6 @@
lda {z1}+1
cmp {z2}+1
bne {la1}
lda {z1}
cmp {z2}
bne {la1}

View File

@ -21,6 +21,8 @@ public class Operator {
public static final Operator CAST_SBYTE = new Operator("((signed byte))", "_sbyte_", Type.UNARY, 2);
public static final Operator CAST_WORD = new Operator("((word))", "_word_", Type.UNARY, 2);
public static final Operator CAST_SWORD = new Operator("((signed word))", "_sword_", Type.UNARY, 2);
public static final Operator CAST_DWORD = new Operator("((dword))", "_dword_", Type.UNARY, 2);
public static final Operator CAST_SDWORD = new Operator("((signed dword))", "_sdword_", Type.UNARY, 2);
public static final Operator CAST_PTRBY = new Operator("((byte*))", "_ptrby_", Type.UNARY, 2);
public static final Operator MULTIPLY = new Operator("*", "_mul_", Type.BINARY, 3);
public static final Operator DIVIDE = new Operator("/", "_div_", Type.BINARY, 3);
@ -135,6 +137,10 @@ public class Operator {
return CAST_WORD;
} else if(SymbolType.SWORD.equals(castType)) {
return CAST_SWORD;
} else if(SymbolType.DWORD.equals(castType)) {
return CAST_DWORD;
} else if(SymbolType.SDWORD.equals(castType)) {
return CAST_SDWORD;
} else if(castType instanceof SymbolTypePointer && SymbolType.BYTE.equals(((SymbolTypePointer) castType).getElementType())) {
return CAST_PTRBY;
} else {

View File

@ -30,6 +30,10 @@ public class SymbolTypeInference {
return SymbolType.WORD;
} else if(operator.equals(Operator.CAST_SWORD)) {
return SymbolType.SWORD;
} else if(operator.equals(Operator.CAST_DWORD)) {
return SymbolType.DWORD;
} else if(operator.equals(Operator.CAST_SDWORD)) {
return SymbolType.SDWORD;
} else if(operator.equals(Operator.CAST_PTRBY)) {
return new SymbolTypePointer(SymbolType.BYTE);
} else if(operator.equals(Operator.ADDRESS_OF)) {
@ -76,10 +80,14 @@ public class SymbolTypeInference {
} else if(Operator.LOWBYTE.equals(operator)) {
if(subType instanceof SymbolTypePointer || SymbolType.isWord(subType) || SymbolType.isSWord(subType)) {
return SymbolType.BYTE;
} else if(SymbolType.isDWord(subType) || SymbolType.isSDWord(subType)) {
return SymbolType.WORD;
}
} else if(Operator.HIBYTE.equals(operator)) {
if(subType instanceof SymbolTypePointer || SymbolType.isWord(subType) || SymbolType.isSWord(subType)) {
return SymbolType.BYTE;
} else if(SymbolType.isDWord(subType) || SymbolType.isSDWord(subType)) {
return SymbolType.WORD;
}
} else if(Operator.CAST_BYTE.equals(operator)) {
return SymbolType.BYTE;

View File

@ -78,6 +78,12 @@ public class Pass1AddTypePromotions extends Pass1Base {
if(lValueType.equals(SymbolType.WORD) && SymbolType.isByte(rValueType)) {
return true;
}
if(lValueType.equals(SymbolType.DWORD) && SymbolType.isWord(rValueType)) {
return true;
}
if(lValueType.equals(SymbolType.DWORD) && SymbolType.isByte(rValueType)) {
return true;
}
// No type promotion found
return false;
}

View File

@ -200,6 +200,8 @@ public class Pass2ConstantIdentification extends Pass2SsaOptimization {
case "((sbyte))":
case "((word))":
case "((signed word))":
case "((dword))":
case "((signed dword))":
case "((byte*))":
return new ConstantUnary(operator, c);
case "*": { // pointer dereference - not constant

View File

@ -207,7 +207,11 @@ public class Pass4CodeGeneration {
while(statementsIt.hasNext()) {
Statement statement = statementsIt.next();
if(!(statement instanceof StatementPhiBlock)) {
generateStatementAsm(asm, block, statement, aluState, true);
try {
generateStatementAsm(asm, block, statement, aluState, true);
} catch(AsmFragmentTemplateSynthesizer.UnknownFragmentException e) {
throw new CompileError("Unknown fragment for statement "+statement.toString(program, false), e);
}
}
}
}

View File

@ -45,6 +45,12 @@ public class TestPrograms {
AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, false, false);
}
@Test
public void testLowHigh() throws IOException, URISyntaxException {
compileAndCompare("test-lowhigh");
}
@Test
public void testLongJump2() throws IOException, URISyntaxException {
compileAndCompare("longjump2");

View File

@ -25,4 +25,31 @@ signed word mul8s(signed byte a, signed byte b) {
>m = (>m)-(byte)a;
}
return (signed word)m;
}
}
// Perform binary multiplication of two unsigned 16-bit words into a 32-bit unsigned double word
dword mul16u(word a, word b) {
dword res = 0;
dword mb = b;
while(a!=0) {
if( (a&1) != 0) {
res = res + mb;
}
a = a>>1;
mb = mb<<1;
}
return res;
}
// Multiply of two signed words to a signed double word
// Fixes offsets introduced by using unsigned multiplication
signed dword mul16s(signed word a, signed word b) {
dword m = mul16u((word)a, (word) b);
if(a<0) {
>m = (>m)-(word)b;
}
if(b<0) {
>m = (>m)-(word)a;
}
return (signed dword)m;
}

View File

@ -43,6 +43,12 @@ void print_word(word w) {
print_byte(<w);
}
// Print a dword as HEX
void print_dword(dword dw) {
print_word(>dw);
print_word(<dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits

View File

@ -0,0 +1,24 @@
import "print.kc"
void main() {
print_cls();
for( dword dw = $12345678; dw != $12345690; dw++ ) {
dword dw2 = dw;
>dw2 = (>dw) + $1111; // Test set/get high word of dword
<dw2 = (<dw) + $1111; // Test set/get low word of dword
print_dword(dw2);
print_char(' ');
print_word(>dw2); // Test get high word of dword
print_char(' ');
print_word(<dw2); // Test get low word of dword
print_char(' ');
print_byte(> >dw2); // Test get high high byte of dword
print_char(' ');
print_byte(< >dw2); // Test get low high byte of dword
print_char(' ');
print_byte(> <dw2); // Test get high low byte of dword
print_char(' ');
print_byte(< <dw2); // Test get low low byte of dword
print_ln();
}
}

View File

@ -13,6 +13,7 @@ void main() {
mulf_tables_cmp();
mul8u_compare();
mul8s_compare();
//mul16u_compare();
}
// Slow multiplication of unsigned bytes
@ -43,6 +44,18 @@ signed word muls8s(signed byte a, signed byte b) {
return m;
}
// Slow multiplication of unsigned words
// Calculate an unsigned multiplication by repeated addition
dword muls16u(word a, word b) {
dword m = 0;
if(a!=0) {
for(word i = 0; i!=a; i++) {
m = m + b;
}
}
return m;
}
// ASM based multiplication tables
// <(( x * x )/4)
byte[512] align($100) mula_sqr1_lo;
@ -199,3 +212,40 @@ void mul8s_error(signed byte a, signed byte b, signed word ms, signed word mn, s
print_sword(mf);
print_ln();
}
// Perform many possible word multiplications (slow and fast) and compare the results
void mul16u_compare() {
word a = 0;
word b = 0;
for(byte i: 0..15) {
for(byte j: 0..15) {
a=a+3371;
b=b+4093;
dword ms = muls16u(a, b);
dword mn = mul16u(a,b);
byte ok = 1;
if(ms!=mn) {
ok = 0;
}
if(ok==0) {
*BGCOL = 2;
mul16u_error(a,b, ms, mn);
return;
}
}
}
print_str("multiply results match!@");
print_ln();
}
void mul16u_error(word a, word b, dword ms, dword mn) {
print_str("multiply mismatch @");
print_word(a);
print_str("*@");
print_word(b);
print_str(" slow:@");
print_dword(ms);
print_str(" / normal:@");
print_dword(mn);
print_ln();
}

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@13
@13: scope:[] from @begin
to:@14
@14: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @13
@end: scope:[] from @14
[3] phi() [ ] ( )
main: scope:[main] from @13
main: scope:[main] from @14
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1

View File

@ -106,6 +106,12 @@ void print_word(word w) {
print_byte(<w);
}
// Print a dword as HEX
void print_dword(dword dw) {
print_word(>dw);
print_word(<dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits
@ -197,6 +203,14 @@ proc (void()) print_word((word) print_word::w)
print_word::@return:
return
endproc // print_word()
proc (void()) print_dword((dword) print_dword::dw)
(word~) print_dword::$0 ← > (dword) print_dword::dw
(void~) print_dword::$1 ← call print_word (word~) print_dword::$0
(word~) print_dword::$2 ← < (dword) print_dword::dw
(void~) print_dword::$3 ← call print_word (word~) print_dword::$2
print_dword::@return:
return
endproc // print_dword()
proc (void()) print_byte((byte) print_byte::b)
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -361,6 +375,13 @@ SYMBOLS
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(void()) print_dword((dword) print_dword::dw)
(word~) print_dword::$0
(void~) print_dword::$1
(word~) print_dword::$2
(void~) print_dword::$3
(label) print_dword::@return
(dword) print_dword::dw
(void()) print_ln()
(byte*~) print_ln::$0
(boolean~) print_ln::$1
@ -528,6 +549,17 @@ print_word::@return: scope:[print_word] from print_word
to:@return
@5: scope:[] from @4
to:@6
print_dword: scope:[print_dword] from
(word~) print_dword::$0 ← > (dword) print_dword::dw
(void~) print_dword::$1 ← call print_word (word~) print_dword::$0
(word~) print_dword::$2 ← < (dword) print_dword::dw
(void~) print_dword::$3 ← call print_word (word~) print_dword::$2
to:print_dword::@return
print_dword::@return: scope:[print_dword] from print_dword
return
to:@return
@6: scope:[] from @5
to:@7
print_byte: scope:[print_byte] from
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -538,8 +570,8 @@ print_byte: scope:[print_byte] from
print_byte::@return: scope:[print_byte] from print_byte
return
to:@return
@6: scope:[] from @5
to:@7
@7: scope:[] from @6
to:@8
print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor
@ -547,8 +579,8 @@ print_char: scope:[print_char] from
print_char::@return: scope:[print_char] from print_char
return
to:@return
@7: scope:[] from @6
to:@8
@8: scope:[] from @7
to:@9
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
@ -566,11 +598,11 @@ print_cls::@2: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@8: scope:[] from @7
@9: scope:[] from @8
(byte*) BGCOL ← ((byte*)) (word/dword/signed dword) 53281
(byte) GREEN ← (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) RED ← (byte/signed byte/word/signed word/dword/signed dword) 2
to:@9
to:@10
main: scope:[main] from
(void~) main::$0 ← call print_cls
*((byte*) BGCOL) ← (byte) GREEN
@ -580,8 +612,8 @@ main: scope:[main] from
main::@return: scope:[main] from main
return
to:@return
@9: scope:[] from @8
to:@10
@10: scope:[] from @9
to:@11
test_bytes: scope:[test_bytes] from
(byte) test_bytes::bb ← (byte/signed byte/word/signed word/dword/signed dword) 0
(void~) test_bytes::$0 ← call assert_byte (string) "0=0@" (byte) test_bytes::bb (byte/signed byte/word/signed word/dword/signed dword) 0
@ -596,8 +628,8 @@ test_bytes: scope:[test_bytes] from
test_bytes::@return: scope:[test_bytes] from test_bytes
return
to:@return
@10: scope:[] from @9
to:@11
@11: scope:[] from @10
to:@12
assert_byte: scope:[assert_byte] from
(void~) assert_byte::$0 ← call print_str (byte*) assert_byte::msg
(void~) assert_byte::$1 ← call print_str (string) " @"
@ -620,8 +652,8 @@ assert_byte::@4: scope:[assert_byte] from
assert_byte::@return: scope:[assert_byte] from assert_byte::@2
return
to:@return
@11: scope:[] from @10
to:@12
@12: scope:[] from @11
to:@13
test_sbytes: scope:[test_sbytes] from
(signed byte) test_sbytes::bb ← (byte/signed byte/word/signed word/dword/signed dword) 0
(void~) test_sbytes::$0 ← call assert_sbyte (string) "0=0@" (signed byte) test_sbytes::bb (byte/signed byte/word/signed word/dword/signed dword) 0
@ -644,8 +676,8 @@ test_sbytes: scope:[test_sbytes] from
test_sbytes::@return: scope:[test_sbytes] from test_sbytes
return
to:@return
@12: scope:[] from @11
to:@13
@13: scope:[] from @12
to:@14
assert_sbyte: scope:[assert_sbyte] from
(void~) assert_sbyte::$0 ← call print_str (byte*) assert_sbyte::msg
(void~) assert_sbyte::$1 ← call print_str (string) " @"
@ -668,13 +700,14 @@ assert_sbyte::@4: scope:[assert_sbyte] from
assert_sbyte::@return: scope:[assert_sbyte] from assert_sbyte::@2
return
to:@return
@13: scope:[] from @12
@14: scope:[] from @13
call main
to:@end
@end: scope:[] from @13
@end: scope:[] from @14
Removing unused procedure print_sword
Removing unused procedure print_sbyte
Removing unused procedure print_dword
Removing unused procedure print_word
Removing unused procedure print_byte
Removing unused procedure print_char
@ -724,11 +757,12 @@ Removing empty block @4
Removing empty block @5
Removing empty block @6
Removing empty block @7
Removing empty block @9
Removing empty block @8
Removing empty block @10
Removing empty block assert_byte::@4
Removing empty block @11
Removing empty block assert_byte::@4
Removing empty block @12
Removing empty block @13
Removing empty block assert_sbyte::@4
PROCEDURE MODIFY VARIABLE ANALYSIS
print_str modifies char_cursor
@ -760,7 +794,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) line_cursor#0 ← (byte*) SCREEN#0
(byte*) char_cursor#0 ← (byte*) line_cursor#0
to:@8
to:@9
print_str: scope:[print_str] from assert_byte assert_byte::@1 assert_byte::@3 assert_byte::@5 assert_sbyte assert_sbyte::@1 assert_sbyte::@3 assert_sbyte::@5
(byte*) char_cursor#80 ← phi( assert_byte/(byte*) char_cursor#70 assert_byte::@1/(byte*) char_cursor#71 assert_byte::@3/(byte*) char_cursor#72 assert_byte::@5/(byte*) char_cursor#15 assert_sbyte/(byte*) char_cursor#75 assert_sbyte::@1/(byte*) char_cursor#76 assert_sbyte::@3/(byte*) char_cursor#77 assert_sbyte::@5/(byte*) char_cursor#27 )
(byte*) print_str::str#11 ← phi( assert_byte/(byte*) print_str::str#1 assert_byte::@1/(byte*) print_str::str#3 assert_byte::@3/(byte*) print_str::str#4 assert_byte::@5/(byte*) print_str::str#2 assert_sbyte/(byte*) print_str::str#5 assert_sbyte::@1/(byte*) print_str::str#7 assert_sbyte::@3/(byte*) print_str::str#8 assert_sbyte::@5/(byte*) print_str::str#6 )
@ -828,16 +862,16 @@ print_cls::@return: scope:[print_cls] from print_cls::@2
(byte*) char_cursor#6 ← (byte*) char_cursor#38
return
to:@return
@8: scope:[] from @begin
@9: scope:[] from @begin
(byte*) char_cursor#81 ← phi( @begin/(byte*) char_cursor#0 )
(byte*) line_cursor#58 ← phi( @begin/(byte*) line_cursor#0 )
(byte*) BGCOL#0 ← ((byte*)) (word/dword/signed dword) 53281
(byte) GREEN#0 ← (byte/signed byte/word/signed word/dword/signed dword) 5
(byte) RED#0 ← (byte/signed byte/word/signed word/dword/signed dword) 2
to:@13
main: scope:[main] from @13
(byte*) char_cursor#68 ← phi( @13/(byte*) char_cursor#79 )
(byte*) line_cursor#48 ← phi( @13/(byte*) line_cursor#53 )
to:@14
main: scope:[main] from @14
(byte*) char_cursor#68 ← phi( @14/(byte*) char_cursor#79 )
(byte*) line_cursor#48 ← phi( @14/(byte*) line_cursor#53 )
call print_cls param-assignment
to:main::@1
main::@1: scope:[main] from main
@ -1131,23 +1165,23 @@ assert_sbyte::@return: scope:[assert_sbyte] from assert_sbyte::@9
(byte*) line_cursor#22 ← (byte*) line_cursor#45
return
to:@return
@13: scope:[] from @8
(byte*) char_cursor#79 ← phi( @8/(byte*) char_cursor#81 )
(byte*) line_cursor#53 ← phi( @8/(byte*) line_cursor#58 )
@14: scope:[] from @9
(byte*) char_cursor#79 ← phi( @9/(byte*) char_cursor#81 )
(byte*) line_cursor#53 ← phi( @9/(byte*) line_cursor#58 )
call main param-assignment
to:@14
@14: scope:[] from @13
(byte*) char_cursor#65 ← phi( @13/(byte*) char_cursor#10 )
(byte*) line_cursor#46 ← phi( @13/(byte*) line_cursor#8 )
to:@15
@15: scope:[] from @14
(byte*) char_cursor#65 ← phi( @14/(byte*) char_cursor#10 )
(byte*) line_cursor#46 ← phi( @14/(byte*) line_cursor#8 )
(byte*) line_cursor#23 ← (byte*) line_cursor#46
(byte*) char_cursor#33 ← (byte*) char_cursor#65
to:@end
@end: scope:[] from @14
@end: scope:[] from @15
SYMBOL TABLE SSA
(label) @13
(label) @14
(label) @8
(label) @15
(label) @9
(label) @begin
(label) @end
(byte*) BGCOL
@ -1858,7 +1892,7 @@ Constant (const signed byte) assert_sbyte::b#3 = test_sbytes::be#0
Succesful SSA optimization Pass2ConstantIdentification
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) print_cls::@2
Culled Empty Block (label) @8
Culled Empty Block (label) @9
Culled Empty Block (label) main::@3
Culled Empty Block (label) test_bytes::@3
Culled Empty Block (label) assert_byte::@7
@ -1868,7 +1902,7 @@ Culled Empty Block (label) test_sbytes::@5
Culled Empty Block (label) assert_sbyte::@7
Culled Empty Block (label) assert_sbyte::@8
Culled Empty Block (label) assert_sbyte::@9
Culled Empty Block (label) @14
Culled Empty Block (label) @15
Succesful SSA optimization Pass2CullEmptyBlocks
Not aliassing across scopes: print_str::str#11 print_str::str#1
Not aliassing across scopes: char_cursor#80 char_cursor#70
@ -1998,12 +2032,12 @@ Constant inlined print_str::str#8 = (const string) assert_sbyte::str2
Constant inlined print_str::str#7 = (const string) assert_sbyte::str1
Constant inlined print_str::str#6 = (const string) assert_sbyte::str
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @13 @end main main::@1 main::@2 main::@return test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4 test_sbytes::@return assert_sbyte assert_sbyte::@5 assert_sbyte::@6 assert_sbyte::@3 assert_sbyte::@2 assert_sbyte::@return assert_sbyte::@1 print_str print_str::@1 print_str::@return print_str::@2 print_ln print_ln::@1 print_ln::@return test_bytes test_bytes::@1 test_bytes::@2 test_bytes::@return assert_byte assert_byte::@5 assert_byte::@6 assert_byte::@3 assert_byte::@2 assert_byte::@return assert_byte::@1 print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @14 @end main main::@1 main::@2 main::@return test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4 test_sbytes::@return assert_sbyte assert_sbyte::@5 assert_sbyte::@6 assert_sbyte::@3 assert_sbyte::@2 assert_sbyte::@return assert_sbyte::@1 print_str print_str::@1 print_str::@return print_str::@2 print_ln print_ln::@1 print_ln::@return test_bytes test_bytes::@1 test_bytes::@2 test_bytes::@return assert_byte assert_byte::@5 assert_byte::@6 assert_byte::@3 assert_byte::@2 assert_byte::@return assert_byte::@1 print_cls print_cls::@1 print_cls::@return
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1)
Block Sequence Planned @begin @13 @end main main::@1 main::@2 main::@return test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4 test_sbytes::@return assert_sbyte assert_sbyte::@5 assert_sbyte::@6 assert_sbyte::@3 assert_sbyte::@2 assert_sbyte::@return assert_sbyte::@1 print_str print_str::@1 print_str::@return print_str::@2 print_ln print_ln::@1 print_ln::@return print_ln::@3 test_bytes test_bytes::@1 test_bytes::@2 test_bytes::@return assert_byte assert_byte::@5 assert_byte::@6 assert_byte::@3 assert_byte::@2 assert_byte::@return assert_byte::@1 print_cls print_cls::@1 print_cls::@return print_cls::@3
Block Sequence Planned @begin @14 @end main main::@1 main::@2 main::@return test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4 test_sbytes::@return assert_sbyte assert_sbyte::@5 assert_sbyte::@6 assert_sbyte::@3 assert_sbyte::@2 assert_sbyte::@return assert_sbyte::@1 print_str print_str::@1 print_str::@return print_str::@2 print_ln print_ln::@1 print_ln::@return print_ln::@3 test_bytes test_bytes::@1 test_bytes::@2 test_bytes::@return assert_byte assert_byte::@5 assert_byte::@6 assert_byte::@3 assert_byte::@2 assert_byte::@return assert_byte::@1 print_cls print_cls::@1 print_cls::@return print_cls::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @13
Adding NOP phi() at start of @14
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@2
@ -2059,9 +2093,9 @@ Coalesced [87] print_cls::sc#3 ← print_cls::sc#1
Coalesced down to 10 phi equivalence classes
Culled Empty Block (label) print_ln::@3
Culled Empty Block (label) print_cls::@3
Block Sequence Planned @begin @13 @end main main::@1 main::@2 main::@return test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4 test_sbytes::@return assert_sbyte assert_sbyte::@5 assert_sbyte::@6 assert_sbyte::@3 assert_sbyte::@2 assert_sbyte::@return assert_sbyte::@1 print_str print_str::@1 print_str::@return print_str::@2 print_ln print_ln::@1 print_ln::@return test_bytes test_bytes::@1 test_bytes::@2 test_bytes::@return assert_byte assert_byte::@5 assert_byte::@6 assert_byte::@3 assert_byte::@2 assert_byte::@return assert_byte::@1 print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @14 @end main main::@1 main::@2 main::@return test_sbytes test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4 test_sbytes::@return assert_sbyte assert_sbyte::@5 assert_sbyte::@6 assert_sbyte::@3 assert_sbyte::@2 assert_sbyte::@return assert_sbyte::@1 print_str print_str::@1 print_str::@return print_str::@2 print_ln print_ln::@1 print_ln::@return test_bytes test_bytes::@1 test_bytes::@2 test_bytes::@return assert_byte assert_byte::@5 assert_byte::@6 assert_byte::@3 assert_byte::@2 assert_byte::@return assert_byte::@1 print_cls print_cls::@1 print_cls::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @13
Adding NOP phi() at start of @14
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@2
@ -2090,14 +2124,14 @@ Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@13
@13: scope:[] from @begin
to:@14
@14: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @13
@end: scope:[] from @14
[3] phi() [ ] ( )
main: scope:[main] from @13
main: scope:[main] from @14
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1
@ -2254,46 +2288,46 @@ print_cls::@return: scope:[print_cls] from print_cls::@1
DOMINATORS
@begin dominated by @begin
@13 dominated by @13 @begin
@end dominated by @end @13 @begin
main dominated by main @13 @begin
main::@1 dominated by main main::@1 @13 @begin
main::@2 dominated by main main::@1 main::@2 @13 @begin
main::@return dominated by main::@return main main::@1 main::@2 @13 @begin
test_sbytes dominated by main test_sbytes main::@1 main::@2 @13 @begin
test_sbytes::@1 dominated by main test_sbytes main::@1 main::@2 @13 @begin test_sbytes::@1
test_sbytes::@2 dominated by main test_sbytes main::@1 main::@2 @13 @begin test_sbytes::@1 test_sbytes::@2
test_sbytes::@3 dominated by main test_sbytes main::@1 main::@2 @13 @begin test_sbytes::@1 test_sbytes::@2 test_sbytes::@3
test_sbytes::@4 dominated by main test_sbytes main::@1 main::@2 @13 @begin test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4
test_sbytes::@return dominated by test_sbytes::@return main test_sbytes main::@1 main::@2 @13 @begin test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4
assert_sbyte dominated by assert_sbyte main test_sbytes main::@1 main::@2 @13 @begin
assert_sbyte::@5 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @13 @begin assert_sbyte::@5
assert_sbyte::@6 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @13 @begin assert_sbyte::@5 assert_sbyte::@6
assert_sbyte::@3 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @13 @begin assert_sbyte::@5 assert_sbyte::@3 assert_sbyte::@6
assert_sbyte::@2 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @13 @begin assert_sbyte::@5 assert_sbyte::@2 assert_sbyte::@6
assert_sbyte::@return dominated by assert_sbyte assert_sbyte::@return main test_sbytes main::@1 main::@2 @13 @begin assert_sbyte::@5 assert_sbyte::@2 assert_sbyte::@6
assert_sbyte::@1 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @13 @begin assert_sbyte::@5 assert_sbyte::@1 assert_sbyte::@6
print_str dominated by main main::@1 @13 @begin print_str
print_str::@1 dominated by main print_str::@1 main::@1 @13 @begin print_str
print_str::@return dominated by print_str::@return main print_str::@1 main::@1 @13 @begin print_str
print_str::@2 dominated by main print_str::@1 print_str::@2 main::@1 @13 @begin print_str
print_ln dominated by main main::@1 @13 @begin print_ln
print_ln::@1 dominated by print_ln::@1 main main::@1 @13 @begin print_ln
print_ln::@return dominated by print_ln::@1 main print_ln::@return main::@1 @13 @begin print_ln
test_bytes dominated by test_bytes main main::@1 @13 @begin
test_bytes::@1 dominated by test_bytes main main::@1 @13 @begin test_bytes::@1
test_bytes::@2 dominated by test_bytes main main::@1 @13 @begin test_bytes::@2 test_bytes::@1
test_bytes::@return dominated by test_bytes main main::@1 @13 @begin test_bytes::@2 test_bytes::@1 test_bytes::@return
assert_byte dominated by test_bytes main main::@1 @13 @begin assert_byte
assert_byte::@5 dominated by test_bytes main assert_byte::@5 main::@1 @13 @begin assert_byte
assert_byte::@6 dominated by test_bytes main assert_byte::@5 assert_byte::@6 main::@1 @13 @begin assert_byte
assert_byte::@3 dominated by test_bytes assert_byte::@3 main assert_byte::@5 assert_byte::@6 main::@1 @13 @begin assert_byte
assert_byte::@2 dominated by test_bytes main assert_byte::@5 assert_byte::@6 assert_byte::@2 main::@1 @13 @begin assert_byte
assert_byte::@return dominated by test_bytes main assert_byte::@5 assert_byte::@6 assert_byte::@2 main::@1 assert_byte::@return @13 @begin assert_byte
assert_byte::@1 dominated by test_bytes main assert_byte::@5 assert_byte::@6 assert_byte::@1 main::@1 @13 @begin assert_byte
print_cls dominated by main @13 @begin print_cls
print_cls::@1 dominated by main @13 @begin print_cls::@1 print_cls
print_cls::@return dominated by main print_cls::@return @13 @begin print_cls::@1 print_cls
@14 dominated by @begin @14
@end dominated by @end @begin @14
main dominated by main @begin @14
main::@1 dominated by main main::@1 @begin @14
main::@2 dominated by main main::@1 main::@2 @begin @14
main::@return dominated by main::@return main main::@1 main::@2 @begin @14
test_sbytes dominated by main test_sbytes main::@1 main::@2 @begin @14
test_sbytes::@1 dominated by main test_sbytes main::@1 main::@2 @begin @14 test_sbytes::@1
test_sbytes::@2 dominated by main test_sbytes main::@1 main::@2 @begin @14 test_sbytes::@1 test_sbytes::@2
test_sbytes::@3 dominated by main test_sbytes main::@1 main::@2 @begin @14 test_sbytes::@1 test_sbytes::@2 test_sbytes::@3
test_sbytes::@4 dominated by main test_sbytes main::@1 main::@2 @begin @14 test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4
test_sbytes::@return dominated by test_sbytes::@return main test_sbytes main::@1 main::@2 @begin @14 test_sbytes::@1 test_sbytes::@2 test_sbytes::@3 test_sbytes::@4
assert_sbyte dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @14
assert_sbyte::@5 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @14 assert_sbyte::@5
assert_sbyte::@6 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @14 assert_sbyte::@5 assert_sbyte::@6
assert_sbyte::@3 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @14 assert_sbyte::@5 assert_sbyte::@3 assert_sbyte::@6
assert_sbyte::@2 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @14 assert_sbyte::@5 assert_sbyte::@2 assert_sbyte::@6
assert_sbyte::@return dominated by assert_sbyte assert_sbyte::@return main test_sbytes main::@1 main::@2 @begin @14 assert_sbyte::@5 assert_sbyte::@2 assert_sbyte::@6
assert_sbyte::@1 dominated by assert_sbyte main test_sbytes main::@1 main::@2 @begin @14 assert_sbyte::@5 assert_sbyte::@1 assert_sbyte::@6
print_str dominated by main main::@1 @begin @14 print_str
print_str::@1 dominated by main print_str::@1 main::@1 @begin @14 print_str
print_str::@return dominated by print_str::@return main print_str::@1 main::@1 @begin @14 print_str
print_str::@2 dominated by main print_str::@1 print_str::@2 main::@1 @begin @14 print_str
print_ln dominated by main main::@1 @begin @14 print_ln
print_ln::@1 dominated by print_ln::@1 main main::@1 @begin @14 print_ln
print_ln::@return dominated by print_ln::@1 main print_ln::@return main::@1 @begin @14 print_ln
test_bytes dominated by test_bytes main main::@1 @begin @14
test_bytes::@1 dominated by test_bytes main main::@1 @begin @14 test_bytes::@1
test_bytes::@2 dominated by test_bytes main main::@1 @begin @14 test_bytes::@2 test_bytes::@1
test_bytes::@return dominated by test_bytes main main::@1 @begin @14 test_bytes::@2 test_bytes::@1 test_bytes::@return
assert_byte dominated by test_bytes main main::@1 @begin @14 assert_byte
assert_byte::@5 dominated by test_bytes main assert_byte::@5 main::@1 @begin @14 assert_byte
assert_byte::@6 dominated by test_bytes main assert_byte::@5 assert_byte::@6 main::@1 @begin @14 assert_byte
assert_byte::@3 dominated by test_bytes assert_byte::@3 main assert_byte::@5 assert_byte::@6 main::@1 @begin @14 assert_byte
assert_byte::@2 dominated by test_bytes main assert_byte::@5 assert_byte::@6 assert_byte::@2 main::@1 @begin @14 assert_byte
assert_byte::@return dominated by test_bytes main assert_byte::@5 assert_byte::@6 assert_byte::@2 main::@1 assert_byte::@return @begin @14 assert_byte
assert_byte::@1 dominated by test_bytes main assert_byte::@5 assert_byte::@6 assert_byte::@1 main::@1 @begin @14 assert_byte
print_cls dominated by main @begin @14 print_cls
print_cls::@1 dominated by main @begin @14 print_cls::@1 print_cls
print_cls::@return dominated by main print_cls::@return @begin @14 print_cls::@1 print_cls
NATURAL LOOPS
Found back edge: Loop head: print_str::@1 tails: print_str::@2 blocks: null
@ -2427,17 +2461,17 @@ INITIAL ASM
.label line_cursor = $a
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @13 [phi:@begin->@13]
b13_from_bbegin:
jmp b13
//SEG4 @13
b13:
//SEG3 [1] phi from @begin to @14 [phi:@begin->@14]
b14_from_bbegin:
jmp b14
//SEG4 @14
b14:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @13 to main [phi:@13->main]
main_from_b13:
//SEG6 [4] phi from @14 to main [phi:@14->main]
main_from_b14:
jsr main
//SEG7 [3] phi from @13 to @end [phi:@13->@end]
bend_from_b13:
//SEG7 [3] phi from @14 to @end [phi:@14->@end]
bend_from_b14:
jmp bend
//SEG8 @end
bend:
@ -3065,17 +3099,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label line_cursor = 7
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @13 [phi:@begin->@13]
b13_from_bbegin:
jmp b13
//SEG4 @13
b13:
//SEG3 [1] phi from @begin to @14 [phi:@begin->@14]
b14_from_bbegin:
jmp b14
//SEG4 @14
b14:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @13 to main [phi:@13->main]
main_from_b13:
//SEG6 [4] phi from @14 to main [phi:@14->main]
main_from_b14:
jsr main
//SEG7 [3] phi from @13 to @end [phi:@13->@end]
bend_from_b13:
//SEG7 [3] phi from @14 to @end [phi:@14->@end]
bend_from_b14:
jmp bend
//SEG8 @end
bend:
@ -3592,7 +3626,7 @@ print_cls: {
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b13
Removing instruction jmp b14
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
@ -3636,9 +3670,9 @@ Replacing label b2_from_b1 with b2
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b13_from_bbegin:
Removing instruction main_from_b13:
Removing instruction bend_from_b13:
Removing instruction b14_from_bbegin:
Removing instruction main_from_b14:
Removing instruction bend_from_b14:
Removing instruction b2_from_b1:
Removing instruction test_sbytes_from_b2:
Removing instruction b1_from_test_sbytes:
@ -3669,7 +3703,7 @@ Removing instruction b1_from_b6:
Removing instruction print_str_from_b1:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b13:
Removing instruction b14:
Removing instruction bend:
Removing instruction print_cls_from_main:
Removing instruction b1:
@ -3709,7 +3743,7 @@ Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @13
(label) @14
(label) @begin
(label) @end
(byte*) BGCOL
@ -3846,12 +3880,12 @@ Score: 1846
.label char_cursor = 5
.label line_cursor = 7
//SEG2 @begin
//SEG3 [1] phi from @begin to @13 [phi:@begin->@13]
//SEG4 @13
//SEG3 [1] phi from @begin to @14 [phi:@begin->@14]
//SEG4 @14
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @13 to main [phi:@13->main]
//SEG6 [4] phi from @14 to main [phi:@14->main]
jsr main
//SEG7 [3] phi from @13 to @end [phi:@13->@end]
//SEG7 [3] phi from @14 to @end [phi:@14->@end]
//SEG8 @end
//SEG9 main
main: {

View File

@ -1,4 +1,4 @@
(label) @13
(label) @14
(label) @begin
(label) @end
(byte*) BGCOL

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@9
@9: scope:[] from @begin
to:@10
@10: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @9
@end: scope:[] from @10
[3] phi() [ ] ( )
main: scope:[main] from @9
main: scope:[main] from @10
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1

View File

@ -59,6 +59,12 @@ void print_word(word w) {
print_byte(<w);
}
// Print a dword as HEX
void print_dword(dword dw) {
print_word(>dw);
print_word(<dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits
@ -151,6 +157,14 @@ proc (void()) print_word((word) print_word::w)
print_word::@return:
return
endproc // print_word()
proc (void()) print_dword((dword) print_dword::dw)
(word~) print_dword::$0 ← > (dword) print_dword::dw
(void~) print_dword::$1 ← call print_word (word~) print_dword::$0
(word~) print_dword::$2 ← < (dword) print_dword::dw
(void~) print_dword::$3 ← call print_word (word~) print_dword::$2
print_dword::@return:
return
endproc // print_dword()
proc (void()) print_byte((byte) print_byte::b)
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -224,6 +238,13 @@ SYMBOLS
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(void()) print_dword((dword) print_dword::dw)
(word~) print_dword::$0
(void~) print_dword::$1
(word~) print_dword::$2
(void~) print_dword::$3
(label) print_dword::@return
(dword) print_dword::dw
(void()) print_ln()
(byte*~) print_ln::$0
(boolean~) print_ln::$1
@ -361,6 +382,17 @@ print_word::@return: scope:[print_word] from print_word
to:@return
@5: scope:[] from @4
to:@6
print_dword: scope:[print_dword] from
(word~) print_dword::$0 ← > (dword) print_dword::dw
(void~) print_dword::$1 ← call print_word (word~) print_dword::$0
(word~) print_dword::$2 ← < (dword) print_dword::dw
(void~) print_dword::$3 ← call print_word (word~) print_dword::$2
to:print_dword::@return
print_dword::@return: scope:[print_dword] from print_dword
return
to:@return
@6: scope:[] from @5
to:@7
print_byte: scope:[print_byte] from
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -371,8 +403,8 @@ print_byte: scope:[print_byte] from
print_byte::@return: scope:[print_byte] from print_byte
return
to:@return
@6: scope:[] from @5
to:@7
@7: scope:[] from @6
to:@8
print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor
@ -380,8 +412,8 @@ print_char: scope:[print_char] from
print_char::@return: scope:[print_char] from print_char
return
to:@return
@7: scope:[] from @6
to:@8
@8: scope:[] from @7
to:@9
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
@ -399,9 +431,9 @@ print_cls::@2: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@8: scope:[] from @7
@9: scope:[] from @8
(byte[]) txt ← (string) "camelot@"
to:@9
to:@10
main: scope:[main] from
(void~) main::$0 ← call print_cls
(byte) main::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -419,13 +451,14 @@ main::@2: scope:[main] from main::@1
main::@return: scope:[main] from main::@2
return
to:@return
@9: scope:[] from @8
@10: scope:[] from @9
call main
to:@end
@end: scope:[] from @9
@end: scope:[] from @10
Removing unused procedure print_sword
Removing unused procedure print_sbyte
Removing unused procedure print_dword
Removing unused procedure print_word
Removing unused procedure print_byte
Removing unused procedure print_char
@ -444,6 +477,7 @@ Removing empty block @4
Removing empty block @5
Removing empty block @6
Removing empty block @7
Removing empty block @8
Removing empty block main::@2
PROCEDURE MODIFY VARIABLE ANALYSIS
print_str modifies char_cursor
@ -463,7 +497,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) line_cursor#0 ← (byte*) SCREEN#0
(byte*) char_cursor#0 ← (byte*) line_cursor#0
to:@8
to:@9
print_str: scope:[print_str] from main::@1
(byte*) char_cursor#27 ← phi( main::@1/(byte*) char_cursor#25 )
(byte*) print_str::str#4 ← phi( main::@1/(byte*) print_str::str#1 )
@ -531,14 +565,14 @@ print_cls::@return: scope:[print_cls] from print_cls::@2
(byte*) char_cursor#6 ← (byte*) char_cursor#16
return
to:@return
@8: scope:[] from @begin
@9: scope:[] from @begin
(byte*) char_cursor#28 ← phi( @begin/(byte*) char_cursor#0 )
(byte*) line_cursor#22 ← phi( @begin/(byte*) line_cursor#0 )
(byte[]) txt#0 ← (const string) $0
to:@9
main: scope:[main] from @9
(byte*) char_cursor#24 ← phi( @9/(byte*) char_cursor#26 )
(byte*) line_cursor#18 ← phi( @9/(byte*) line_cursor#20 )
to:@10
main: scope:[main] from @10
(byte*) char_cursor#24 ← phi( @10/(byte*) char_cursor#26 )
(byte*) line_cursor#18 ← phi( @10/(byte*) line_cursor#20 )
call print_cls param-assignment
to:main::@3
main::@3: scope:[main] from main
@ -580,23 +614,23 @@ main::@return: scope:[main] from main::@5
(byte*) char_cursor#10 ← (byte*) char_cursor#20
return
to:@return
@9: scope:[] from @8
(byte*) char_cursor#26 ← phi( @8/(byte*) char_cursor#28 )
(byte*) line_cursor#20 ← phi( @8/(byte*) line_cursor#22 )
call main param-assignment
to:@10
@10: scope:[] from @9
(byte*) char_cursor#21 ← phi( @9/(byte*) char_cursor#10 )
(byte*) line_cursor#16 ← phi( @9/(byte*) line_cursor#7 )
(byte*) char_cursor#26 ← phi( @9/(byte*) char_cursor#28 )
(byte*) line_cursor#20 ← phi( @9/(byte*) line_cursor#22 )
call main param-assignment
to:@11
@11: scope:[] from @10
(byte*) char_cursor#21 ← phi( @10/(byte*) char_cursor#10 )
(byte*) line_cursor#16 ← phi( @10/(byte*) line_cursor#7 )
(byte*) line_cursor#8 ← (byte*) line_cursor#16
(byte*) char_cursor#11 ← (byte*) char_cursor#21
to:@end
@end: scope:[] from @10
@end: scope:[] from @11
SYMBOL TABLE SSA
(const string) $0 = (string) "camelot@"
(label) @10
(label) @8
(label) @11
(label) @9
(label) @begin
(label) @end
@ -783,9 +817,9 @@ Consolidated array index constant in *(txt#0+1)
Succesful SSA optimization Pass2ConstantAdditionElimination
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) print_cls::@2
Culled Empty Block (label) @8
Culled Empty Block (label) @9
Culled Empty Block (label) main::@3
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Succesful SSA optimization Pass2CullEmptyBlocks
Not aliassing across scopes: char_cursor#12 char_cursor#25
Not aliassing across scopes: line_cursor#9 line_cursor#19
@ -808,13 +842,13 @@ Constant inlined print_cls::$0 = (const byte*) SCREEN#0+(word/signed word/dword/
Constant inlined print_cls::sc#0 = (const byte*) SCREEN#0
Constant inlined $0 = (const string) txt#0
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @9 @end main main::@1 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @10 @end main main::@1 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
Added new block during phi lifting main::@6(between main::@5 and main::@1)
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1)
Block Sequence Planned @begin @9 @end main main::@1 main::@4 main::@5 main::@return main::@6 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3
Block Sequence Planned @begin @10 @end main main::@1 main::@4 main::@5 main::@return main::@6 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @9
Adding NOP phi() at start of @10
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@4
@ -843,9 +877,9 @@ Coalesced [38] print_cls::sc#3 ← print_cls::sc#1
Coalesced down to 5 phi equivalence classes
Culled Empty Block (label) print_ln::@3
Culled Empty Block (label) print_cls::@3
Block Sequence Planned @begin @9 @end main main::@1 main::@4 main::@5 main::@return main::@6 print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @10 @end main main::@1 main::@4 main::@5 main::@return main::@6 print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @9
Adding NOP phi() at start of @10
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@4
@ -863,14 +897,14 @@ Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@9
@9: scope:[] from @begin
to:@10
@10: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @9
@end: scope:[] from @10
[3] phi() [ ] ( )
main: scope:[main] from @9
main: scope:[main] from @10
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1
@ -937,24 +971,24 @@ print_cls::@return: scope:[print_cls] from print_cls::@1
DOMINATORS
@begin dominated by @begin
@9 dominated by @begin @9
@end dominated by @begin @end @9
main dominated by @begin main @9
main::@1 dominated by @begin main main::@1 @9
main::@4 dominated by @begin main main::@1 @9 main::@4
main::@5 dominated by @begin main main::@1 @9 main::@5 main::@4
main::@return dominated by main::@return @begin main main::@1 @9 main::@5 main::@4
main::@6 dominated by @begin main main::@1 @9 main::@5 main::@6 main::@4
print_ln dominated by @begin main print_ln main::@1 @9 main::@4
print_ln::@1 dominated by print_ln::@1 @begin main print_ln main::@1 @9 main::@4
print_ln::@return dominated by print_ln::@1 @begin main print_ln print_ln::@return main::@1 @9 main::@4
print_str dominated by @begin main print_str main::@1 @9
print_str::@1 dominated by @begin main print_str::@1 print_str main::@1 @9
print_str::@return dominated by @begin print_str::@return main print_str::@1 print_str main::@1 @9
print_str::@2 dominated by @begin main print_str::@1 print_str::@2 print_str main::@1 @9
print_cls dominated by @begin main print_cls @9
print_cls::@1 dominated by @begin print_cls::@1 main print_cls @9
print_cls::@return dominated by @begin print_cls::@1 main print_cls print_cls::@return @9
@10 dominated by @begin @10
@end dominated by @begin @end @10
main dominated by @begin main @10
main::@1 dominated by @begin main main::@1 @10
main::@4 dominated by @begin main main::@1 @10 main::@4
main::@5 dominated by @begin main main::@1 main::@5 @10 main::@4
main::@return dominated by main::@return @begin main main::@1 main::@5 @10 main::@4
main::@6 dominated by @begin main main::@1 main::@5 main::@6 @10 main::@4
print_ln dominated by @begin main print_ln main::@1 @10 main::@4
print_ln::@1 dominated by print_ln::@1 @begin main print_ln main::@1 @10 main::@4
print_ln::@return dominated by print_ln::@1 @begin main print_ln print_ln::@return main::@1 @10 main::@4
print_str dominated by @begin main print_str main::@1 @10
print_str::@1 dominated by @begin main print_str::@1 print_str main::@1 @10
print_str::@return dominated by @begin print_str::@return main print_str::@1 print_str main::@1 @10
print_str::@2 dominated by @begin main print_str::@1 print_str::@2 print_str main::@1 @10
print_cls dominated by @begin main print_cls @10
print_cls::@1 dominated by @begin print_cls::@1 main print_cls @10
print_cls::@return dominated by @begin print_cls::@1 main print_cls print_cls::@return @10
NATURAL LOOPS
Found back edge: Loop head: main::@1 tails: main::@6 blocks: null
@ -1041,17 +1075,17 @@ INITIAL ASM
.label line_cursor = 3
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @9 [phi:@begin->@9]
b9_from_bbegin:
jmp b9
//SEG4 @9
b9:
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
b10_from_bbegin:
jmp b10
//SEG4 @10
b10:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @9 to main [phi:@9->main]
main_from_b9:
//SEG6 [4] phi from @10 to main [phi:@10->main]
main_from_b10:
jsr main
//SEG7 [3] phi from @9 to @end [phi:@9->@end]
bend_from_b9:
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
bend_from_b10:
jmp bend
//SEG8 @end
bend:
@ -1299,17 +1333,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label line_cursor = 2
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @9 [phi:@begin->@9]
b9_from_bbegin:
jmp b9
//SEG4 @9
b9:
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
b10_from_bbegin:
jmp b10
//SEG4 @10
b10:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @9 to main [phi:@9->main]
main_from_b9:
//SEG6 [4] phi from @10 to main [phi:@10->main]
main_from_b10:
jsr main
//SEG7 [3] phi from @9 to @end [phi:@9->@end]
bend_from_b9:
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
bend_from_b10:
jmp bend
//SEG8 @end
bend:
@ -1502,7 +1536,7 @@ print_cls: {
txt: .text "camelot@"
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b9
Removing instruction jmp b10
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b4
@ -1522,9 +1556,9 @@ Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b9_from_bbegin:
Removing instruction main_from_b9:
Removing instruction bend_from_b9:
Removing instruction b10_from_bbegin:
Removing instruction main_from_b10:
Removing instruction bend_from_b10:
Removing instruction print_str_from_b1:
Removing instruction b4_from_b1:
Removing instruction print_ln_from_b4:
@ -1532,7 +1566,7 @@ Removing instruction b1_from_print_ln:
Removing instruction b1_from_b1:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b9:
Removing instruction b10:
Removing instruction bend:
Removing instruction print_cls_from_main:
Removing instruction b1_from_main:
@ -1551,7 +1585,7 @@ Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @9
(label) @10
(label) @begin
(label) @end
(byte*) SCREEN
@ -1611,12 +1645,12 @@ Score: 11128
.label char_cursor = 6
.label line_cursor = 2
//SEG2 @begin
//SEG3 [1] phi from @begin to @9 [phi:@begin->@9]
//SEG4 @9
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
//SEG4 @10
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @9 to main [phi:@9->main]
//SEG6 [4] phi from @10 to main [phi:@10->main]
jsr main
//SEG7 [3] phi from @9 to @end [phi:@9->@end]
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
//SEG8 @end
//SEG9 main
main: {

View File

@ -1,4 +1,4 @@
(label) @9
(label) @10
(label) @begin
(label) @end
(byte*) SCREEN

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@9
@9: scope:[] from @begin
to:@10
@10: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @9
@end: scope:[] from @10
[3] phi() [ ] ( )
main: scope:[main] from @9
main: scope:[main] from @10
[4] phi() [ ] ( main:2 [ ] )
[5] call print_str param-assignment [ char_cursor#13 ] ( main:2 [ char_cursor#13 ] )
to:main::@1

View File

@ -61,6 +61,12 @@ void print_word(word w) {
print_byte(<w);
}
// Print a dword as HEX
void print_dword(dword dw) {
print_word(>dw);
print_word(<dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits
@ -152,6 +158,14 @@ proc (void()) print_word((word) print_word::w)
print_word::@return:
return
endproc // print_word()
proc (void()) print_dword((dword) print_dword::dw)
(word~) print_dword::$0 ← > (dword) print_dword::dw
(void~) print_dword::$1 ← call print_word (word~) print_dword::$0
(word~) print_dword::$2 ← < (dword) print_dword::dw
(void~) print_dword::$3 ← call print_word (word~) print_dword::$2
print_dword::@return:
return
endproc // print_dword()
proc (void()) print_byte((byte) print_byte::b)
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -227,6 +241,13 @@ SYMBOLS
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(void()) print_dword((dword) print_dword::dw)
(word~) print_dword::$0
(void~) print_dword::$1
(word~) print_dword::$2
(void~) print_dword::$3
(label) print_dword::@return
(dword) print_dword::dw
(void()) print_ln()
(byte*~) print_ln::$0
(boolean~) print_ln::$1
@ -363,6 +384,17 @@ print_word::@return: scope:[print_word] from print_word
to:@return
@5: scope:[] from @4
to:@6
print_dword: scope:[print_dword] from
(word~) print_dword::$0 ← > (dword) print_dword::dw
(void~) print_dword::$1 ← call print_word (word~) print_dword::$0
(word~) print_dword::$2 ← < (dword) print_dword::dw
(void~) print_dword::$3 ← call print_word (word~) print_dword::$2
to:print_dword::@return
print_dword::@return: scope:[print_dword] from print_dword
return
to:@return
@6: scope:[] from @5
to:@7
print_byte: scope:[print_byte] from
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -373,8 +405,8 @@ print_byte: scope:[print_byte] from
print_byte::@return: scope:[print_byte] from print_byte
return
to:@return
@6: scope:[] from @5
to:@7
@7: scope:[] from @6
to:@8
print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor
@ -382,8 +414,8 @@ print_char: scope:[print_char] from
print_char::@return: scope:[print_char] from print_char
return
to:@return
@7: scope:[] from @6
to:@8
@8: scope:[] from @7
to:@9
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
@ -401,11 +433,11 @@ print_cls::@2: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@8: scope:[] from @7
@9: scope:[] from @8
(byte[]) msg ← (string) "hello world! @"
(byte[]) msg2 ← (string) "hello c64! @"
(byte[]) msg3 ← (string) "hello 2017! @"
to:@9
to:@10
main: scope:[main] from
(void~) main::$0 ← call print_str (byte[]) msg
(void~) main::$1 ← call print_ln
@ -417,13 +449,14 @@ main: scope:[main] from
main::@return: scope:[main] from main
return
to:@return
@9: scope:[] from @8
@10: scope:[] from @9
call main
to:@end
@end: scope:[] from @9
@end: scope:[] from @10
Removing unused procedure print_sword
Removing unused procedure print_sbyte
Removing unused procedure print_dword
Removing unused procedure print_cls
Removing unused procedure print_word
Removing unused procedure print_byte
@ -448,6 +481,7 @@ Removing empty block @4
Removing empty block @5
Removing empty block @6
Removing empty block @7
Removing empty block @8
PROCEDURE MODIFY VARIABLE ANALYSIS
print_str modifies char_cursor
print_ln modifies line_cursor
@ -464,7 +498,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) line_cursor#0 ← (byte*) SCREEN#0
(byte*) char_cursor#0 ← (byte*) line_cursor#0
to:@8
to:@9
print_str: scope:[print_str] from main main::@2 main::@4
(byte*) char_cursor#29 ← phi( main/(byte*) char_cursor#27 main::@2/(byte*) char_cursor#6 main::@4/(byte*) char_cursor#8 )
(byte*) print_str::str#6 ← phi( main/(byte*) print_str::str#1 main::@2/(byte*) print_str::str#2 main::@4/(byte*) print_str::str#3 )
@ -510,16 +544,16 @@ print_ln::@return: scope:[print_ln] from print_ln::@2
(byte*) char_cursor#4 ← (byte*) char_cursor#16
return
to:@return
@8: scope:[] from @begin
@9: scope:[] from @begin
(byte*) line_cursor#22 ← phi( @begin/(byte*) line_cursor#0 )
(byte*) char_cursor#30 ← phi( @begin/(byte*) char_cursor#0 )
(byte[]) msg#0 ← (const string) $0
(byte[]) msg2#0 ← (const string) $1
(byte[]) msg3#0 ← (const string) $2
to:@9
main: scope:[main] from @9
(byte*) line_cursor#21 ← phi( @9/(byte*) line_cursor#20 )
(byte*) char_cursor#27 ← phi( @9/(byte*) char_cursor#28 )
to:@10
main: scope:[main] from @10
(byte*) line_cursor#21 ← phi( @10/(byte*) line_cursor#20 )
(byte*) char_cursor#27 ← phi( @10/(byte*) char_cursor#28 )
(byte*) print_str::str#1 ← (byte[]) msg#0
call print_str param-assignment
to:main::@1
@ -570,25 +604,25 @@ main::@return: scope:[main] from main::@6
(byte*) line_cursor#6 ← (byte*) line_cursor#14
return
to:@return
@9: scope:[] from @8
(byte*) line_cursor#20 ← phi( @8/(byte*) line_cursor#22 )
(byte*) char_cursor#28 ← phi( @8/(byte*) char_cursor#30 )
call main param-assignment
to:@10
@10: scope:[] from @9
(byte*) line_cursor#15 ← phi( @9/(byte*) line_cursor#6 )
(byte*) char_cursor#24 ← phi( @9/(byte*) char_cursor#11 )
(byte*) line_cursor#20 ← phi( @9/(byte*) line_cursor#22 )
(byte*) char_cursor#28 ← phi( @9/(byte*) char_cursor#30 )
call main param-assignment
to:@11
@11: scope:[] from @10
(byte*) line_cursor#15 ← phi( @10/(byte*) line_cursor#6 )
(byte*) char_cursor#24 ← phi( @10/(byte*) char_cursor#11 )
(byte*) char_cursor#12 ← (byte*) char_cursor#24
(byte*) line_cursor#7 ← (byte*) line_cursor#15
to:@end
@end: scope:[] from @10
@end: scope:[] from @11
SYMBOL TABLE SSA
(const string) $0 = (string) "hello world! @"
(const string) $1 = (string) "hello c64! @"
(const string) $2 = (string) "hello 2017! @"
(label) @10
(label) @8
(label) @11
(label) @9
(label) @begin
(label) @end
@ -774,9 +808,9 @@ Constant (const string) print_str::str#2 = msg2#0
Constant (const string) print_str::str#3 = msg3#0
Succesful SSA optimization Pass2ConstantIdentification
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) @8
Culled Empty Block (label) @9
Culled Empty Block (label) main::@6
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Succesful SSA optimization Pass2CullEmptyBlocks
OPTIMIZING CONTROL FLOW GRAPH
Inlining constant with var siblings (const string) print_str::str#1
@ -795,11 +829,11 @@ Constant inlined $0 = (const string) msg#0
Constant inlined $1 = (const string) msg2#0
Constant inlined $2 = (const string) msg3#0
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @9 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2
Block Sequence Planned @begin @10 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Block Sequence Planned @begin @9 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_ln::@3 print_str print_str::@1 print_str::@return print_str::@2
Block Sequence Planned @begin @10 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_ln::@3 print_str print_str::@1 print_str::@return print_str::@2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @9
Adding NOP phi() at start of @10
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
@ -828,9 +862,9 @@ Coalesced [33] print_str::str#8 ← print_str::str#0
Coalesced [34] char_cursor#34 ← char_cursor#1
Coalesced down to 3 phi equivalence classes
Culled Empty Block (label) print_ln::@3
Block Sequence Planned @begin @9 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2
Block Sequence Planned @begin @10 @end main main::@1 main::@2 main::@3 main::@4 main::@5 main::@return print_ln print_ln::@1 print_ln::@return print_str print_str::@1 print_str::@return print_str::@2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @9
Adding NOP phi() at start of @10
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
@ -847,14 +881,14 @@ Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@9
@9: scope:[] from @begin
to:@10
@10: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @9
@end: scope:[] from @10
[3] phi() [ ] ( )
main: scope:[main] from @9
main: scope:[main] from @10
[4] phi() [ ] ( main:2 [ ] )
[5] call print_str param-assignment [ char_cursor#13 ] ( main:2 [ char_cursor#13 ] )
to:main::@1
@ -912,22 +946,22 @@ print_str::@2: scope:[print_str] from print_str::@1
DOMINATORS
@begin dominated by @begin
@9 dominated by @begin @9
@end dominated by @begin @end @9
main dominated by @begin main @9
main::@1 dominated by @begin main main::@1 @9
main::@2 dominated by @begin main main::@1 @9 main::@2
main::@3 dominated by @begin main main::@1 @9 main::@2 main::@3
main::@4 dominated by @begin main main::@1 @9 main::@2 main::@3 main::@4
main::@5 dominated by @begin main main::@1 @9 main::@2 main::@5 main::@3 main::@4
main::@return dominated by main::@return @begin main main::@1 @9 main::@2 main::@5 main::@3 main::@4
print_ln dominated by @begin main print_ln main::@1 @9
print_ln::@1 dominated by print_ln::@1 @begin main print_ln main::@1 @9
print_ln::@return dominated by print_ln::@1 @begin main print_ln print_ln::@return main::@1 @9
print_str dominated by @begin main print_str @9
print_str::@1 dominated by @begin main print_str::@1 print_str @9
print_str::@return dominated by @begin print_str::@return main print_str::@1 print_str @9
print_str::@2 dominated by @begin main print_str::@1 print_str::@2 print_str @9
@10 dominated by @begin @10
@end dominated by @begin @end @10
main dominated by @begin main @10
main::@1 dominated by @begin main main::@1 @10
main::@2 dominated by @begin main main::@1 main::@2 @10
main::@3 dominated by @begin main main::@1 main::@2 main::@3 @10
main::@4 dominated by @begin main main::@1 main::@2 main::@3 @10 main::@4
main::@5 dominated by @begin main main::@1 main::@2 main::@5 main::@3 @10 main::@4
main::@return dominated by main::@return @begin main main::@1 main::@2 main::@5 main::@3 @10 main::@4
print_ln dominated by @begin main print_ln main::@1 @10
print_ln::@1 dominated by print_ln::@1 @begin main print_ln main::@1 @10
print_ln::@return dominated by print_ln::@1 @begin main print_ln print_ln::@return main::@1 @10
print_str dominated by @begin main print_str @10
print_str::@1 dominated by @begin main print_str::@1 print_str @10
print_str::@return dominated by @begin print_str::@return main print_str::@1 print_str @10
print_str::@2 dominated by @begin main print_str::@1 print_str::@2 print_str @10
NATURAL LOOPS
Found back edge: Loop head: print_ln::@1 tails: print_ln::@1 blocks: null
@ -994,17 +1028,17 @@ INITIAL ASM
.label line_cursor = 2
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @9 [phi:@begin->@9]
b9_from_bbegin:
jmp b9
//SEG4 @9
b9:
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
b10_from_bbegin:
jmp b10
//SEG4 @10
b10:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @9 to main [phi:@9->main]
main_from_b9:
//SEG6 [4] phi from @10 to main [phi:@10->main]
main_from_b10:
jsr main
//SEG7 [3] phi from @9 to @end [phi:@9->@end]
bend_from_b9:
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
bend_from_b10:
jmp bend
//SEG8 @end
bend:
@ -1209,17 +1243,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label line_cursor = 2
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @9 [phi:@begin->@9]
b9_from_bbegin:
jmp b9
//SEG4 @9
b9:
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
b10_from_bbegin:
jmp b10
//SEG4 @10
b10:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @9 to main [phi:@9->main]
main_from_b9:
//SEG6 [4] phi from @10 to main [phi:@10->main]
main_from_b10:
jsr main
//SEG7 [3] phi from @9 to @end [phi:@9->@end]
bend_from_b9:
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
bend_from_b10:
jmp bend
//SEG8 @end
bend:
@ -1392,7 +1426,7 @@ print_str: {
msg3: .text "hello 2017! @"
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b9
Removing instruction jmp b10
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
@ -1411,9 +1445,9 @@ Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Replacing label b1_from_b2 with b1
Removing instruction bbegin:
Removing instruction b9_from_bbegin:
Removing instruction main_from_b9:
Removing instruction bend_from_b9:
Removing instruction b10_from_bbegin:
Removing instruction main_from_b10:
Removing instruction bend_from_b10:
Removing instruction b1_from_main:
Removing instruction print_ln_from_b1:
Removing instruction b3_from_b2:
@ -1425,7 +1459,7 @@ Removing instruction b1_from_b1:
Removing instruction b1_from_print_str:
Removing instruction b1_from_b2:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b9:
Removing instruction b10:
Removing instruction bend:
Removing instruction print_str_from_main:
Removing instruction b1:
@ -1441,7 +1475,7 @@ Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
FINAL SYMBOL TABLE
(label) @9
(label) @10
(label) @begin
(label) @end
(byte*) SCREEN
@ -1498,12 +1532,12 @@ Score: 1039
.label char_cursor = 6
.label line_cursor = 2
//SEG2 @begin
//SEG3 [1] phi from @begin to @9 [phi:@begin->@9]
//SEG4 @9
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
//SEG4 @10
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @9 to main [phi:@9->main]
//SEG6 [4] phi from @10 to main [phi:@10->main]
jsr main
//SEG7 [3] phi from @9 to @end [phi:@9->@end]
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
//SEG8 @end
//SEG9 main
main: {

View File

@ -1,4 +1,4 @@
(label) @9
(label) @10
(label) @begin
(label) @end
(byte*) SCREEN

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@36
@36: scope:[] from @begin
to:@37
@37: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @36
@end: scope:[] from @37
[3] phi() [ ] ( )
main: scope:[main] from @36
main: scope:[main] from @37
[4] phi() [ ] ( main:2 [ ] )
[5] call setFAC param-assignment [ ] ( main:2 [ ] )
to:main::@3

View File

@ -70,6 +70,12 @@ void print_word(word w) {
print_byte(<w);
}
// Print a dword as HEX
void print_dword(dword dw) {
print_word(>dw);
print_word(<dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits
@ -440,6 +446,14 @@ proc (void()) print_word((word) print_word::w)
print_word::@return:
return
endproc // print_word()
proc (void()) print_dword((dword) print_dword::dw)
(word~) print_dword::$0 ← > (dword) print_dword::dw
(void~) print_dword::$1 ← call print_word (word~) print_dword::$0
(word~) print_dword::$2 ← < (dword) print_dword::dw
(void~) print_dword::$3 ← call print_word (word~) print_dword::$2
print_dword::@return:
return
endproc // print_dword()
proc (void()) print_byte((byte) print_byte::b)
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -734,6 +748,13 @@ SYMBOLS
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(void()) print_dword((dword) print_dword::dw)
(word~) print_dword::$0
(void~) print_dword::$1
(word~) print_dword::$2
(void~) print_dword::$3
(label) print_dword::@return
(dword) print_dword::dw
(void()) print_ln()
(byte*~) print_ln::$0
(boolean~) print_ln::$1
@ -914,6 +935,17 @@ print_word::@return: scope:[print_word] from print_word
to:@return
@5: scope:[] from @4
to:@6
print_dword: scope:[print_dword] from
(word~) print_dword::$0 ← > (dword) print_dword::dw
(void~) print_dword::$1 ← call print_word (word~) print_dword::$0
(word~) print_dword::$2 ← < (dword) print_dword::dw
(void~) print_dword::$3 ← call print_word (word~) print_dword::$2
to:print_dword::@return
print_dword::@return: scope:[print_dword] from print_dword
return
to:@return
@6: scope:[] from @5
to:@7
print_byte: scope:[print_byte] from
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -924,8 +956,8 @@ print_byte: scope:[print_byte] from
print_byte::@return: scope:[print_byte] from print_byte
return
to:@return
@6: scope:[] from @5
to:@7
@7: scope:[] from @6
to:@8
print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor
@ -933,8 +965,8 @@ print_char: scope:[print_char] from
print_char::@return: scope:[print_char] from print_char
return
to:@return
@7: scope:[] from @6
to:@8
@8: scope:[] from @7
to:@9
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
@ -952,10 +984,10 @@ print_cls::@2: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@8: scope:[] from @7
@9: scope:[] from @8
(byte*) memLo ← ((byte*)) (byte/word/signed word/dword/signed dword) 254
(byte*) memHi ← ((byte*)) (byte/word/signed word/dword/signed dword) 255
to:@9
to:@10
prepareMEM: scope:[prepareMEM] from
(byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem
*((byte*) memLo) ← (byte~) prepareMEM::$0
@ -965,8 +997,8 @@ prepareMEM: scope:[prepareMEM] from
prepareMEM::@return: scope:[prepareMEM] from prepareMEM
return
to:@return
@9: scope:[] from @8
to:@10
@10: scope:[] from @9
to:@11
setFAC: scope:[setFAC] from
(byte*~) setFAC::$0 ← ((byte*)) (word) setFAC::w
(void~) setFAC::$1 ← call prepareMEM (byte*~) setFAC::$0
@ -975,8 +1007,8 @@ setFAC: scope:[setFAC] from
setFAC::@return: scope:[setFAC] from setFAC
return
to:@return
@10: scope:[] from @9
to:@11
@11: scope:[] from @10
to:@12
getFAC: scope:[getFAC] from
asm { jsr$b1aa sty$fe sta$ff }
(word) getFAC::w ← { *((byte*) memHi), *((byte*) memLo) }
@ -988,24 +1020,24 @@ getFAC::@return: scope:[getFAC] from getFAC getFAC::@1
to:@return
getFAC::@1: scope:[getFAC] from
to:getFAC::@return
@11: scope:[] from @10
to:@12
@12: scope:[] from @11
to:@13
setARGtoFAC: scope:[setARGtoFAC] from
asm { jsr$bc0f }
to:setARGtoFAC::@return
setARGtoFAC::@return: scope:[setARGtoFAC] from setARGtoFAC
return
to:@return
@12: scope:[] from @11
to:@13
@13: scope:[] from @12
to:@14
setFACtoARG: scope:[setFACtoARG] from
asm { jsr$bbfc }
to:setFACtoARG::@return
setFACtoARG::@return: scope:[setFACtoARG] from setFACtoARG
return
to:@return
@13: scope:[] from @12
to:@14
@14: scope:[] from @13
to:@15
setMEMtoFAC: scope:[setMEMtoFAC] from
(void~) setMEMtoFAC::$0 ← call prepareMEM (byte*) setMEMtoFAC::mem
asm { ldx$fe ldy$ff jsr$bbd4 }
@ -1013,8 +1045,8 @@ setMEMtoFAC: scope:[setMEMtoFAC] from
setMEMtoFAC::@return: scope:[setMEMtoFAC] from setMEMtoFAC
return
to:@return
@14: scope:[] from @13
to:@15
@15: scope:[] from @14
to:@16
setFACtoMEM: scope:[setFACtoMEM] from
(void~) setFACtoMEM::$0 ← call prepareMEM (byte*) setFACtoMEM::mem
asm { lda$fe ldy$ff jsr$bba2 }
@ -1022,24 +1054,24 @@ setFACtoMEM: scope:[setFACtoMEM] from
setFACtoMEM::@return: scope:[setFACtoMEM] from setFACtoMEM
return
to:@return
@15: scope:[] from @14
to:@16
@16: scope:[] from @15
to:@17
setFACtoPIhalf: scope:[setFACtoPIhalf] from
asm { lda#$e0 ldy#$e2 jsr$bba2 }
to:setFACtoPIhalf::@return
setFACtoPIhalf::@return: scope:[setFACtoPIhalf] from setFACtoPIhalf
return
to:@return
@16: scope:[] from @15
to:@17
@17: scope:[] from @16
to:@18
setFACto2PI: scope:[setFACto2PI] from
asm { lda#$e5 ldy#$e2 jsr$bba2 }
to:setFACto2PI::@return
setFACto2PI::@return: scope:[setFACto2PI] from setFACto2PI
return
to:@return
@17: scope:[] from @16
to:@18
@18: scope:[] from @17
to:@19
setARGtoMEM: scope:[setARGtoMEM] from
(void~) setARGtoMEM::$0 ← call prepareMEM (byte*) setARGtoMEM::mem
asm { lda$fe ldy$ff jsr$ba8c }
@ -1047,8 +1079,8 @@ setARGtoMEM: scope:[setARGtoMEM] from
setARGtoMEM::@return: scope:[setARGtoMEM] from setARGtoMEM
return
to:@return
@18: scope:[] from @17
to:@19
@19: scope:[] from @18
to:@20
addMEMtoFAC: scope:[addMEMtoFAC] from
(void~) addMEMtoFAC::$0 ← call prepareMEM (byte*) addMEMtoFAC::mem
asm { lda$fe ldy$ff jsr$b867 }
@ -1056,16 +1088,16 @@ addMEMtoFAC: scope:[addMEMtoFAC] from
addMEMtoFAC::@return: scope:[addMEMtoFAC] from addMEMtoFAC
return
to:@return
@19: scope:[] from @18
to:@20
@20: scope:[] from @19
to:@21
addARGtoFAC: scope:[addARGtoFAC] from
asm { jsr$b86a }
to:addARGtoFAC::@return
addARGtoFAC::@return: scope:[addARGtoFAC] from addARGtoFAC
return
to:@return
@20: scope:[] from @19
to:@21
@21: scope:[] from @20
to:@22
subFACfromMEM: scope:[subFACfromMEM] from
(void~) subFACfromMEM::$0 ← call prepareMEM (byte*) subFACfromMEM::mem
asm { lda$fe ldy$ff jsr$b850 }
@ -1073,16 +1105,16 @@ subFACfromMEM: scope:[subFACfromMEM] from
subFACfromMEM::@return: scope:[subFACfromMEM] from subFACfromMEM
return
to:@return
@21: scope:[] from @20
to:@22
@22: scope:[] from @21
to:@23
subFACfromARG: scope:[subFACfromARG] from
asm { jsr$b853 }
to:subFACfromARG::@return
subFACfromARG::@return: scope:[subFACfromARG] from subFACfromARG
return
to:@return
@22: scope:[] from @21
to:@23
@23: scope:[] from @22
to:@24
divMEMbyFAC: scope:[divMEMbyFAC] from
(void~) divMEMbyFAC::$0 ← call prepareMEM (byte*) divMEMbyFAC::mem
asm { lda$fe ldy$ff jsr$bb0f }
@ -1090,8 +1122,8 @@ divMEMbyFAC: scope:[divMEMbyFAC] from
divMEMbyFAC::@return: scope:[divMEMbyFAC] from divMEMbyFAC
return
to:@return
@23: scope:[] from @22
to:@24
@24: scope:[] from @23
to:@25
mulFACbyMEM: scope:[mulFACbyMEM] from
(void~) mulFACbyMEM::$0 ← call prepareMEM (byte*) mulFACbyMEM::mem
asm { lda$fe ldy$ff jsr$ba28 }
@ -1099,8 +1131,8 @@ mulFACbyMEM: scope:[mulFACbyMEM] from
mulFACbyMEM::@return: scope:[mulFACbyMEM] from mulFACbyMEM
return
to:@return
@24: scope:[] from @23
to:@25
@25: scope:[] from @24
to:@26
pwrMEMbyFAC: scope:[pwrMEMbyFAC] from
(void~) pwrMEMbyFAC::$0 ← call prepareMEM (byte*) pwrMEMbyFAC::mem
asm { lda$fe ldy$ff jsr$bf78 }
@ -1108,88 +1140,88 @@ pwrMEMbyFAC: scope:[pwrMEMbyFAC] from
pwrMEMbyFAC::@return: scope:[pwrMEMbyFAC] from pwrMEMbyFAC
return
to:@return
@25: scope:[] from @24
to:@26
@26: scope:[] from @25
to:@27
intFAC: scope:[intFAC] from
asm { jsr$bccc }
to:intFAC::@return
intFAC::@return: scope:[intFAC] from intFAC
return
to:@return
@26: scope:[] from @25
to:@27
@27: scope:[] from @26
to:@28
sinFAC: scope:[sinFAC] from
asm { jsr$e26b }
to:sinFAC::@return
sinFAC::@return: scope:[sinFAC] from sinFAC
return
to:@return
@27: scope:[] from @26
to:@28
@28: scope:[] from @27
to:@29
cosFAC: scope:[cosFAC] from
asm { jsr$e264 }
to:cosFAC::@return
cosFAC::@return: scope:[cosFAC] from cosFAC
return
to:@return
@28: scope:[] from @27
to:@29
@29: scope:[] from @28
to:@30
tanFAC: scope:[tanFAC] from
asm { jsr$e2b4 }
to:tanFAC::@return
tanFAC::@return: scope:[tanFAC] from tanFAC
return
to:@return
@29: scope:[] from @28
to:@30
@30: scope:[] from @29
to:@31
atnFAC: scope:[atnFAC] from
asm { jsr$e303 }
to:atnFAC::@return
atnFAC::@return: scope:[atnFAC] from atnFAC
return
to:@return
@30: scope:[] from @29
to:@31
@31: scope:[] from @30
to:@32
sqrFAC: scope:[sqrFAC] from
asm { jsr$bf71 }
to:sqrFAC::@return
sqrFAC::@return: scope:[sqrFAC] from sqrFAC
return
to:@return
@31: scope:[] from @30
to:@32
@32: scope:[] from @31
to:@33
expFAC: scope:[expFAC] from
asm { jsr$bfed }
to:expFAC::@return
expFAC::@return: scope:[expFAC] from expFAC
return
to:@return
@32: scope:[] from @31
to:@33
@33: scope:[] from @32
to:@34
logFAC: scope:[logFAC] from
asm { jsr$b9ea }
to:logFAC::@return
logFAC::@return: scope:[logFAC] from logFAC
return
to:@return
@33: scope:[] from @32
to:@34
@34: scope:[] from @33
to:@35
divFACby10: scope:[divFACby10] from
asm { jsr$bafe }
to:divFACby10::@return
divFACby10::@return: scope:[divFACby10] from divFACby10
return
to:@return
@34: scope:[] from @33
to:@35
@35: scope:[] from @34
to:@36
mulFACby10: scope:[mulFACby10] from
asm { jsr$bae2 }
to:mulFACby10::@return
mulFACby10::@return: scope:[mulFACby10] from mulFACby10
return
to:@return
@35: scope:[] from @34
to:@36
@36: scope:[] from @35
to:@37
main: scope:[main] from
(byte[]) main::f_i ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte[]) main::f_127 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
@ -1221,14 +1253,15 @@ main::@2: scope:[main] from main::@1
main::@return: scope:[main] from main::@2
return
to:@return
@36: scope:[] from @35
@37: scope:[] from @36
call main
to:@end
@end: scope:[] from @36
@end: scope:[] from @37
Removing unused procedure print_str
Removing unused procedure print_sword
Removing unused procedure print_sbyte
Removing unused procedure print_dword
Removing unused procedure print_cls
Removing unused procedure setARGtoFAC
Removing unused procedure setFACtoARG
@ -1278,10 +1311,10 @@ Removing empty block @4
Removing empty block @5
Removing empty block @6
Removing empty block @7
Removing empty block @9
Removing empty block @8
Removing empty block @10
Removing empty block getFAC::@1
Removing empty block @11
Removing empty block getFAC::@1
Removing empty block @12
Removing empty block @13
Removing empty block @14
@ -1306,6 +1339,7 @@ Removing empty block @32
Removing empty block @33
Removing empty block @34
Removing empty block @35
Removing empty block @36
Removing empty block main::@2
PROCEDURE MODIFY VARIABLE ANALYSIS
print_ln modifies line_cursor
@ -1338,7 +1372,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) line_cursor#0 ← (byte*) SCREEN#0
(byte*) char_cursor#0 ← (byte*) line_cursor#0
to:@8
to:@9
print_ln: scope:[print_ln] from main::@15
(byte*) char_cursor#29 ← phi( main::@15/(byte*) char_cursor#11 )
(byte*) line_cursor#12 ← phi( main::@15/(byte*) line_cursor#13 )
@ -1422,12 +1456,12 @@ print_char::@return: scope:[print_char] from print_char
(byte*) char_cursor#10 ← (byte*) char_cursor#24
return
to:@return
@8: scope:[] from @begin
@9: scope:[] from @begin
(byte*) line_cursor#16 ← phi( @begin/(byte*) line_cursor#0 )
(byte*) char_cursor#35 ← phi( @begin/(byte*) char_cursor#0 )
(byte*) memLo#0 ← ((byte*)) (byte/word/signed word/dword/signed dword) 254
(byte*) memHi#0 ← ((byte*)) (byte/word/signed word/dword/signed dword) 255
to:@36
to:@37
prepareMEM: scope:[prepareMEM] from addMEMtoFAC divMEMbyFAC mulFACbyMEM setFAC setMEMtoFAC
(byte*) prepareMEM::mem#5 ← phi( addMEMtoFAC/(byte*) prepareMEM::mem#2 divMEMbyFAC/(byte*) prepareMEM::mem#3 mulFACbyMEM/(byte*) prepareMEM::mem#4 setFAC/(byte*) prepareMEM::mem#0 setMEMtoFAC/(byte*) prepareMEM::mem#1 )
(byte~) prepareMEM::$0 ← < (byte*) prepareMEM::mem#5
@ -1516,9 +1550,9 @@ divFACby10: scope:[divFACby10] from main::@3
divFACby10::@return: scope:[divFACby10] from divFACby10
return
to:@return
main: scope:[main] from @36
(byte*) line_cursor#29 ← phi( @36/(byte*) line_cursor#14 )
(byte*) char_cursor#47 ← phi( @36/(byte*) char_cursor#33 )
main: scope:[main] from @37
(byte*) line_cursor#29 ← phi( @37/(byte*) line_cursor#14 )
(byte*) char_cursor#47 ← phi( @37/(byte*) char_cursor#33 )
(byte[]) main::f_i#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte[]) main::f_127#0 ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte*) main::f_2pi#0 ← ((byte*)) (word/dword/signed dword) 58085
@ -1637,23 +1671,23 @@ main::@return: scope:[main] from main::@16
(byte*) line_cursor#4 ← (byte*) line_cursor#10
return
to:@return
@36: scope:[] from @8
(byte*) line_cursor#14 ← phi( @8/(byte*) line_cursor#16 )
(byte*) char_cursor#33 ← phi( @8/(byte*) char_cursor#35 )
@37: scope:[] from @9
(byte*) line_cursor#14 ← phi( @9/(byte*) line_cursor#16 )
(byte*) char_cursor#33 ← phi( @9/(byte*) char_cursor#35 )
call main param-assignment
to:@37
@37: scope:[] from @36
(byte*) line_cursor#11 ← phi( @36/(byte*) line_cursor#4 )
(byte*) char_cursor#28 ← phi( @36/(byte*) char_cursor#13 )
to:@38
@38: scope:[] from @37
(byte*) line_cursor#11 ← phi( @37/(byte*) line_cursor#4 )
(byte*) char_cursor#28 ← phi( @37/(byte*) char_cursor#13 )
(byte*) char_cursor#14 ← (byte*) char_cursor#28
(byte*) line_cursor#5 ← (byte*) line_cursor#11
to:@end
@end: scope:[] from @37
@end: scope:[] from @38
SYMBOL TABLE SSA
(label) @36
(label) @37
(label) @8
(label) @38
(label) @9
(label) @begin
(label) @end
(byte*) SCREEN
@ -2034,9 +2068,9 @@ Succesful SSA optimization Pass2NopCastElimination
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) print_word::@2
Culled Empty Block (label) print_byte::@2
Culled Empty Block (label) @8
Culled Empty Block (label) @9
Culled Empty Block (label) main::@5
Culled Empty Block (label) @37
Culled Empty Block (label) @38
Succesful SSA optimization Pass2CullEmptyBlocks
Not aliassing across scopes: line_cursor#6 line_cursor#13
Not aliassing across scopes: print_byte::b#2 print_byte::b#0
@ -2105,12 +2139,12 @@ Constant inlined setMEMtoFAC::mem#0 = (const byte[]) main::f_127#0
Constant inlined mulFACbyMEM::mem#1 = (const byte[]) main::f_127#0
Constant inlined setFAC::w#0 = (word/signed word/dword/signed dword) 1275
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @36 @end main main::@3 main::@4 main::@1 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@return print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return divFACby10 divFACby10::@return
Block Sequence Planned @begin @37 @end main main::@3 main::@4 main::@1 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@return print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return divFACby10 divFACby10::@return
Added new block during phi lifting main::@17(between main::@16 and main::@1)
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Block Sequence Planned @begin @36 @end main main::@3 main::@4 main::@1 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@return main::@17 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return divFACby10 divFACby10::@return
Block Sequence Planned @begin @37 @end main main::@3 main::@4 main::@1 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@return main::@17 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return divFACby10 divFACby10::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @36
Adding NOP phi() at start of @37
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@3
@ -2181,9 +2215,9 @@ Coalesced [87] prepareMEM::mem#6 ← prepareMEM::mem#4
Coalesced [104] prepareMEM::mem#8 ← prepareMEM::mem#1
Coalesced down to 9 phi equivalence classes
Culled Empty Block (label) print_ln::@3
Block Sequence Planned @begin @36 @end main main::@3 main::@4 main::@1 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@return main::@17 print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return divFACby10 divFACby10::@return
Block Sequence Planned @begin @37 @end main main::@3 main::@4 main::@1 main::@6 main::@7 main::@8 main::@9 main::@10 main::@11 main::@12 main::@13 main::@14 main::@15 main::@16 main::@return main::@17 print_ln print_ln::@1 print_ln::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return divFACby10 divFACby10::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @36
Adding NOP phi() at start of @37
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@3
@ -2229,14 +2263,14 @@ Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@36
@36: scope:[] from @begin
to:@37
@37: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @36
@end: scope:[] from @37
[3] phi() [ ] ( )
main: scope:[main] from @36
main: scope:[main] from @37
[4] phi() [ ] ( main:2 [ ] )
[5] call setFAC param-assignment [ ] ( main:2 [ ] )
to:main::@3
@ -2437,59 +2471,59 @@ divFACby10::@return: scope:[divFACby10] from divFACby10
DOMINATORS
@begin dominated by @begin
@36 dominated by @begin @36
@end dominated by @end @begin @36
main dominated by main @begin @36
main::@3 dominated by main main::@3 @begin @36
main::@4 dominated by main main::@3 main::@4 @begin @36
main::@1 dominated by main main::@1 main::@3 main::@4 @begin @36
main::@6 dominated by main main::@1 main::@6 main::@3 main::@4 @begin @36
main::@7 dominated by main::@7 main main::@1 main::@6 main::@3 main::@4 @begin @36
main::@8 dominated by main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36
main::@9 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36
main::@10 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 main::@10
main::@11 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 main::@11 main::@10
main::@12 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 main::@11 main::@10 main::@12
main::@13 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 main::@11 main::@10 main::@13 main::@12
main::@14 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 main::@11 main::@10 main::@13 main::@12 main::@14
main::@15 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 main::@11 main::@10 main::@13 main::@12 main::@15 main::@14
main::@16 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 main::@11 main::@10 main::@16 main::@13 main::@12 main::@15 main::@14
main::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 main::@return main::@11 main::@10 main::@16 main::@13 main::@12 main::@15 main::@14
main::@17 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 main::@11 main::@10 main::@17 main::@16 main::@13 main::@12 main::@15 main::@14
print_ln dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 print_ln main::@11 main::@10 main::@13 main::@12 main::@15 main::@14
print_ln::@1 dominated by main::@9 print_ln::@1 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 print_ln main::@11 main::@10 main::@13 main::@12 main::@15 main::@14
print_ln::@return dominated by main::@9 print_ln::@1 main::@7 main::@8 main print_ln::@return main::@1 main::@6 main::@3 main::@4 @begin @36 print_ln main::@11 main::@10 main::@13 main::@12 main::@15 main::@14
print_word dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @36 main::@11 main::@10 main::@13 main::@12 main::@14
print_word::@1 dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @36 print_word::@1 main::@11 main::@10 main::@13 main::@12 main::@14
print_word::@return dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @36 print_word::@return print_word::@1 main::@11 main::@10 main::@13 main::@12 main::@14
print_byte dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @36 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
print_byte::@1 dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @36 print_byte::@1 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
print_byte::@return dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @36 print_byte::@return print_byte::@1 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
print_char dominated by main::@9 main::@7 main::@8 main print_word print_char main::@1 main::@6 main::@3 main::@4 @begin @36 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
print_char::@return dominated by main::@9 main::@7 main::@8 main print_word print_char main::@1 main::@6 main::@3 main::@4 print_char::@return @begin @36 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
getFAC dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 getFAC main::@11 main::@10 main::@13 main::@12
getFAC::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 getFAC main::@11 main::@10 main::@13 main::@12 getFAC::@return
addMEMtoFAC dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 addMEMtoFAC main::@11 main::@10 main::@12
addMEMtoFAC::@1 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 addMEMtoFAC::@1 addMEMtoFAC main::@11 main::@10 main::@12
addMEMtoFAC::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 addMEMtoFAC::@1 addMEMtoFAC main::@11 main::@10 addMEMtoFAC::@return main::@12
prepareMEM dominated by main @begin @36 prepareMEM
prepareMEM::@return dominated by main @begin @36 prepareMEM::@return prepareMEM
mulFACbyMEM dominated by main mulFACbyMEM main::@1 main::@6 main::@3 main::@4 @begin @36
mulFACbyMEM::@1 dominated by main mulFACbyMEM main::@1 main::@6 main::@3 main::@4 @begin @36 mulFACbyMEM::@1
mulFACbyMEM::@return dominated by main mulFACbyMEM::@return mulFACbyMEM main::@1 main::@6 main::@3 main::@4 @begin @36 mulFACbyMEM::@1
sinFAC dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 sinFAC main::@10
sinFAC::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 sinFAC sinFAC::@return main::@10
divMEMbyFAC dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 divMEMbyFAC
divMEMbyFAC::@1 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 divMEMbyFAC::@1 divMEMbyFAC
divMEMbyFAC::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @36 divMEMbyFAC::@1 divMEMbyFAC divMEMbyFAC::@return
setFAC dominated by main @begin @36 setFAC
setFAC::@1 dominated by main @begin @36 setFAC setFAC::@1
setFAC::@return dominated by setFAC::@return main @begin @36 setFAC setFAC::@1
setMEMtoFAC dominated by main main::@3 main::@4 @begin @36 setMEMtoFAC
setMEMtoFAC::@1 dominated by main main::@3 main::@4 @begin @36 setMEMtoFAC setMEMtoFAC::@1
setMEMtoFAC::@return dominated by main main::@3 main::@4 @begin @36 setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return
divFACby10 dominated by main main::@3 @begin @36 divFACby10
divFACby10::@return dominated by divFACby10::@return main main::@3 @begin @36 divFACby10
@37 dominated by @begin @37
@end dominated by @end @begin @37
main dominated by main @begin @37
main::@3 dominated by main main::@3 @begin @37
main::@4 dominated by main main::@3 main::@4 @begin @37
main::@1 dominated by main main::@1 main::@3 main::@4 @begin @37
main::@6 dominated by main main::@1 main::@6 main::@3 main::@4 @begin @37
main::@7 dominated by main::@7 main main::@1 main::@6 main::@3 main::@4 @begin @37
main::@8 dominated by main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37
main::@9 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37
main::@10 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@10
main::@11 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10
main::@12 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 main::@12
main::@13 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 main::@13 main::@12
main::@14 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 main::@13 main::@12 main::@14
main::@15 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 main::@13 main::@12 main::@15 main::@14
main::@16 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 main::@16 main::@13 main::@12 main::@15 main::@14
main::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@return main::@11 main::@10 main::@16 main::@13 main::@12 main::@15 main::@14
main::@17 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 main::@17 main::@16 main::@13 main::@12 main::@15 main::@14
print_ln dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 print_ln main::@11 main::@10 main::@13 main::@12 main::@15 main::@14
print_ln::@1 dominated by main::@9 print_ln::@1 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 print_ln main::@11 main::@10 main::@13 main::@12 main::@15 main::@14
print_ln::@return dominated by main::@9 print_ln::@1 main::@7 main::@8 main print_ln::@return main::@1 main::@6 main::@3 main::@4 @begin @37 print_ln main::@11 main::@10 main::@13 main::@12 main::@15 main::@14
print_word dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 main::@13 main::@12 main::@14
print_word::@1 dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @37 print_word::@1 main::@11 main::@10 main::@13 main::@12 main::@14
print_word::@return dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @37 print_word::@return print_word::@1 main::@11 main::@10 main::@13 main::@12 main::@14
print_byte dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
print_byte::@1 dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @37 print_byte::@1 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
print_byte::@return dominated by main::@9 main::@7 main::@8 main print_word main::@1 main::@6 main::@3 main::@4 @begin @37 print_byte::@return print_byte::@1 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
print_char dominated by main::@9 main::@7 main::@8 main print_word print_char main::@1 main::@6 main::@3 main::@4 @begin @37 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
print_char::@return dominated by main::@9 main::@7 main::@8 main print_word print_char main::@1 main::@6 main::@3 main::@4 print_char::@return @begin @37 main::@11 main::@10 print_byte main::@13 main::@12 main::@14
getFAC dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 getFAC main::@11 main::@10 main::@13 main::@12
getFAC::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 getFAC main::@11 main::@10 main::@13 main::@12 getFAC::@return
addMEMtoFAC dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 addMEMtoFAC main::@11 main::@10 main::@12
addMEMtoFAC::@1 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 addMEMtoFAC::@1 addMEMtoFAC main::@11 main::@10 main::@12
addMEMtoFAC::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 addMEMtoFAC::@1 addMEMtoFAC main::@11 main::@10 addMEMtoFAC::@return main::@12
prepareMEM dominated by main @begin @37 prepareMEM
prepareMEM::@return dominated by main @begin @37 prepareMEM::@return prepareMEM
mulFACbyMEM dominated by main mulFACbyMEM main::@1 main::@6 main::@3 main::@4 @begin @37
mulFACbyMEM::@1 dominated by main mulFACbyMEM main::@1 main::@6 main::@3 main::@4 @begin @37 mulFACbyMEM::@1
mulFACbyMEM::@return dominated by main mulFACbyMEM::@return mulFACbyMEM main::@1 main::@6 main::@3 main::@4 @begin @37 mulFACbyMEM::@1
sinFAC dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 sinFAC main::@10
sinFAC::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 sinFAC sinFAC::@return main::@10
divMEMbyFAC dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 divMEMbyFAC
divMEMbyFAC::@1 dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 divMEMbyFAC::@1 divMEMbyFAC
divMEMbyFAC::@return dominated by main::@9 main::@7 main::@8 main main::@1 main::@6 main::@3 main::@4 @begin @37 divMEMbyFAC::@1 divMEMbyFAC divMEMbyFAC::@return
setFAC dominated by main @begin @37 setFAC
setFAC::@1 dominated by main @begin @37 setFAC setFAC::@1
setFAC::@return dominated by setFAC::@return main @begin @37 setFAC setFAC::@1
setMEMtoFAC dominated by main main::@3 main::@4 @begin @37 setMEMtoFAC
setMEMtoFAC::@1 dominated by main main::@3 main::@4 @begin @37 setMEMtoFAC setMEMtoFAC::@1
setMEMtoFAC::@return dominated by main main::@3 main::@4 @begin @37 setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return
divFACby10 dominated by main main::@3 @begin @37 divFACby10
divFACby10::@return dominated by divFACby10::@return main main::@3 @begin @37 divFACby10
NATURAL LOOPS
Found back edge: Loop head: main::@1 tails: main::@17 blocks: null
@ -2653,17 +2687,17 @@ INITIAL ASM
.label char_cursor = 7
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @36 [phi:@begin->@36]
b36_from_bbegin:
jmp b36
//SEG4 @36
b36:
//SEG3 [1] phi from @begin to @37 [phi:@begin->@37]
b37_from_bbegin:
jmp b37
//SEG4 @37
b37:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @36 to main [phi:@36->main]
main_from_b36:
//SEG6 [4] phi from @37 to main [phi:@37->main]
main_from_b37:
jsr main
//SEG7 [3] phi from @36 to @end [phi:@36->@end]
bend_from_b36:
//SEG7 [3] phi from @37 to @end [phi:@37->@end]
bend_from_b37:
jmp bend
//SEG8 @end
bend:
@ -3303,17 +3337,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label char_cursor = 5
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @36 [phi:@begin->@36]
b36_from_bbegin:
jmp b36
//SEG4 @36
b36:
//SEG3 [1] phi from @begin to @37 [phi:@begin->@37]
b37_from_bbegin:
jmp b37
//SEG4 @37
b37:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @36 to main [phi:@36->main]
main_from_b36:
//SEG6 [4] phi from @37 to main [phi:@37->main]
main_from_b37:
jsr main
//SEG7 [3] phi from @36 to @end [phi:@36->@end]
bend_from_b36:
//SEG7 [3] phi from @37 to @end [phi:@37->@end]
bend_from_b37:
jmp bend
//SEG8 @end
bend:
@ -3806,7 +3840,7 @@ divFACby10: {
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b36
Removing instruction jmp b37
Removing instruction jmp bend
Removing instruction jmp b3
Removing instruction jmp b4
@ -3848,9 +3882,9 @@ Succesful ASM optimization Pass5NextJumpElimination
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b36_from_bbegin:
Removing instruction main_from_b36:
Removing instruction bend_from_b36:
Removing instruction b37_from_bbegin:
Removing instruction main_from_b37:
Removing instruction bend_from_b37:
Removing instruction b3_from_main:
Removing instruction b4_from_b3:
Removing instruction setMEMtoFAC_from_b4:
@ -3873,7 +3907,7 @@ Removing instruction print_ln_from_b15:
Removing instruction b1_from_print_ln:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b36:
Removing instruction b37:
Removing instruction bend:
Removing instruction setFAC_from_main:
Removing instruction b3:
@ -3925,7 +3959,7 @@ Removing instruction breturn:
Succesful ASM optimization Pass5UnusedLabelElimination
FINAL SYMBOL TABLE
(label) @36
(label) @37
(label) @begin
(label) @end
(byte*) SCREEN
@ -4065,12 +4099,12 @@ Score: 4973
.label line_cursor = 3
.label char_cursor = 5
//SEG2 @begin
//SEG3 [1] phi from @begin to @36 [phi:@begin->@36]
//SEG4 @36
//SEG3 [1] phi from @begin to @37 [phi:@begin->@37]
//SEG4 @37
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @36 to main [phi:@36->main]
//SEG6 [4] phi from @37 to main [phi:@37->main]
jsr main
//SEG7 [3] phi from @36 to @end [phi:@36->@end]
//SEG7 [3] phi from @37 to @end [phi:@37->@end]
//SEG8 @end
//SEG9 main
main: {

View File

@ -1,4 +1,4 @@
(label) @36
(label) @37
(label) @begin
(label) @end
(byte*) SCREEN

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@45
@45: scope:[] from @begin
to:@46
@46: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @45
@end: scope:[] from @46
[3] phi() [ ] ( )
main: scope:[main] from @45
main: scope:[main] from @46
[4] phi() [ ] ( main:2 [ ] )
[5] call init param-assignment [ ] ( main:2 [ ] )
to:main::@2

View File

@ -580,6 +580,12 @@ void print_word(word w) {
print_byte(<w);
}
// Print a dword as HEX
void print_dword(dword dw) {
print_word(>dw);
print_word(<dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits
@ -871,6 +877,14 @@ proc (void()) print_word((word) print_word::w)
print_word::@return:
return
endproc // print_word()
proc (void()) print_dword((dword) print_dword::dw)
(word~) print_dword::$0 ← > (dword) print_dword::dw
(void~) print_dword::$1 ← call print_word (word~) print_dword::$0
(word~) print_dword::$2 ← < (dword) print_dword::dw
(void~) print_dword::$3 ← call print_word (word~) print_dword::$2
print_dword::@return:
return
endproc // print_dword()
proc (void()) print_byte((byte) print_byte::b)
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -1421,6 +1435,13 @@ SYMBOLS
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(void()) print_dword((dword) print_dword::dw)
(word~) print_dword::$0
(void~) print_dword::$1
(word~) print_dword::$2
(void~) print_dword::$3
(label) print_dword::@return
(dword) print_dword::dw
(void()) print_ln()
(byte*~) print_ln::$0
(boolean~) print_ln::$1
@ -1906,6 +1927,17 @@ print_word::@return: scope:[print_word] from print_word
to:@return
@32: scope:[] from @31
to:@33
print_dword: scope:[print_dword] from
(word~) print_dword::$0 ← > (dword) print_dword::dw
(void~) print_dword::$1 ← call print_word (word~) print_dword::$0
(word~) print_dword::$2 ← < (dword) print_dword::dw
(void~) print_dword::$3 ← call print_word (word~) print_dword::$2
to:print_dword::@return
print_dword::@return: scope:[print_dword] from print_dword
return
to:@return
@33: scope:[] from @32
to:@34
print_byte: scope:[print_byte] from
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -1916,8 +1948,8 @@ print_byte: scope:[print_byte] from
print_byte::@return: scope:[print_byte] from print_byte
return
to:@return
@33: scope:[] from @32
to:@34
@34: scope:[] from @33
to:@35
print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor
@ -1925,8 +1957,8 @@ print_char: scope:[print_char] from
print_char::@return: scope:[print_char] from print_char
return
to:@return
@34: scope:[] from @33
to:@35
@35: scope:[] from @34
to:@36
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
@ -1944,13 +1976,13 @@ print_cls::@2: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@35: scope:[] from @34
@36: scope:[] from @35
(byte) sinlen_x ← (byte/word/signed word/dword/signed dword) 221
(byte[221]) sintab_x ← { fill( 221, 0) }
(byte) sinlen_y ← (byte/word/signed word/dword/signed dword) 197
(byte[197]) sintab_y ← { fill( 197, 0) }
(byte*) sprites ← ((byte*)) (word/signed word/dword/signed dword) 8192
to:@36
to:@37
main: scope:[main] from
(void~) main::$0 ← call init
to:main::@1
@ -1969,8 +2001,8 @@ main::@4: scope:[main] from main::@3
main::@return: scope:[main] from main::@4
return
to:@return
@36: scope:[] from @35
to:@37
@37: scope:[] from @36
to:@38
init: scope:[init] from
(void~) init::$0 ← call clear_screen
(byte) init::i ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -1996,8 +2028,8 @@ init::@2: scope:[init] from init::@1
init::@return: scope:[init] from init::@2
return
to:@return
@37: scope:[] from @36
to:@38
@38: scope:[] from @37
to:@39
clear_screen: scope:[clear_screen] from
(byte*) clear_screen::sc ← (byte*) SCREEN
to:clear_screen::@1
@ -2013,10 +2045,10 @@ clear_screen::@2: scope:[clear_screen] from clear_screen::@1
clear_screen::@return: scope:[clear_screen] from clear_screen::@2
return
to:@return
@38: scope:[] from @37
@39: scope:[] from @38
(byte*) progress_cursor ← (byte*) SCREEN
(byte) progress_idx ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@39
to:@40
progress_init: scope:[progress_init] from
(byte*) progress_cursor ← (byte*) progress_init::line
(byte) progress_idx ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -2024,8 +2056,8 @@ progress_init: scope:[progress_init] from
progress_init::@return: scope:[progress_init] from progress_init
return
to:@return
@39: scope:[] from @38
to:@40
@40: scope:[] from @39
to:@41
progress_inc: scope:[progress_inc] from
(byte[]) progress_inc::progress_chars ← { (byte/signed byte/word/signed word/dword/signed dword) 32, (byte/signed byte/word/signed word/dword/signed dword) 101, (byte/signed byte/word/signed word/dword/signed dword) 116, (byte/signed byte/word/signed word/dword/signed dword) 117, (byte/signed byte/word/signed word/dword/signed dword) 97, (byte/word/signed word/dword/signed dword) 246, (byte/word/signed word/dword/signed dword) 231, (byte/word/signed word/dword/signed dword) 234, (byte/word/signed word/dword/signed dword) 224 }
(byte) progress_idx ← ++ (byte) progress_idx
@ -2044,10 +2076,10 @@ progress_inc::@2: scope:[progress_inc] from progress_inc
progress_inc::@return: scope:[progress_inc] from progress_inc::@1
return
to:@return
@40: scope:[] from @39
@41: scope:[] from @40
(byte) sin_idx_x ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) sin_idx_y ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@41
to:@42
anim: scope:[anim] from
*((byte*) BORDERCOL) ← ++ *((byte*) BORDERCOL)
(byte) anim::xidx ← (byte) sin_idx_x
@ -2120,8 +2152,8 @@ anim::@10: scope:[anim] from anim::@4
anim::@return: scope:[anim] from anim::@5
return
to:@return
@41: scope:[] from @40
to:@42
@42: scope:[] from @41
to:@43
place_sprites: scope:[place_sprites] from
*((byte*) SPRITES_ENABLE) ← (byte/signed byte/word/signed word/dword/signed dword) 127
*((byte*) SPRITES_EXPAND_X) ← (byte/signed byte/word/signed word/dword/signed dword) 127
@ -2158,8 +2190,8 @@ place_sprites::@2: scope:[place_sprites] from place_sprites::@1
place_sprites::@return: scope:[place_sprites] from place_sprites::@2
return
to:@return
@42: scope:[] from @41
to:@43
@43: scope:[] from @42
to:@44
gen_sprites: scope:[gen_sprites] from
(byte[]) gen_sprites::cml ← (string) "camelot"
(byte*) gen_sprites::spr ← (byte*) sprites
@ -2178,8 +2210,8 @@ gen_sprites::@2: scope:[gen_sprites] from gen_sprites::@1
gen_sprites::@return: scope:[gen_sprites] from gen_sprites::@2
return
to:@return
@43: scope:[] from @42
to:@44
@44: scope:[] from @43
to:@45
gen_chargen_sprite: scope:[gen_chargen_sprite] from
(word~) gen_chargen_sprite::$0 ← ((word)) (byte) gen_chargen_sprite::ch
(word~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 << (byte/signed byte/word/signed word/dword/signed dword) 3
@ -2251,8 +2283,8 @@ gen_chargen_sprite::@10: scope:[gen_chargen_sprite] from gen_chargen_sprite::@9
gen_chargen_sprite::@return: scope:[gen_chargen_sprite] from gen_chargen_sprite::@10
return
to:@return
@44: scope:[] from @43
to:@45
@45: scope:[] from @44
to:@46
gen_sintab: scope:[gen_sintab] from
(byte[]) gen_sintab::f_i ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
(byte[]) gen_sintab::f_min ← { (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0, (byte/signed byte/word/signed word/dword/signed dword) 0 }
@ -2298,10 +2330,10 @@ gen_sintab::@2: scope:[gen_sintab] from gen_sintab::@1
gen_sintab::@return: scope:[gen_sintab] from gen_sintab::@2
return
to:@return
@45: scope:[] from @44
@46: scope:[] from @45
call main
to:@end
@end: scope:[] from @45
@end: scope:[] from @46
Removing unused procedure setFACtoARG
Removing unused procedure setFACtoMEM
@ -2324,6 +2356,7 @@ Removing unused procedure print_str
Removing unused procedure print_ln
Removing unused procedure print_sword
Removing unused procedure print_sbyte
Removing unused procedure print_dword
Removing unused procedure print_cls
Removing unused procedure print_word
Removing unused procedure print_byte
@ -2422,17 +2455,18 @@ Removing empty block @31
Removing empty block @32
Removing empty block @33
Removing empty block @34
Removing empty block @35
Removing empty block main::@4
Removing empty block @36
Removing empty block @37
Removing empty block @38
Removing empty block clear_screen::@2
Removing empty block @39
Removing empty block @41
Removing empty block place_sprites::@2
Removing empty block @40
Removing empty block @42
Removing empty block gen_sprites::@2
Removing empty block place_sprites::@2
Removing empty block @43
Removing empty block gen_sprites::@2
Removing empty block @44
Removing empty block @45
Removing empty block gen_sintab::@2
PROCEDURE MODIFY VARIABLE ANALYSIS
main modifies progress_cursor
@ -2587,19 +2621,19 @@ sinFAC::@return: scope:[sinFAC] from sinFAC
to:@return
@27: scope:[] from @begin
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
to:@35
@35: scope:[] from @27
to:@36
@36: scope:[] from @27
(byte) sinlen_x#0 ← (byte/word/signed word/dword/signed dword) 221
(byte[221]) sintab_x#0 ← { fill( 221, 0) }
(byte) sinlen_y#0 ← (byte/word/signed word/dword/signed dword) 197
(byte[197]) sintab_y#0 ← { fill( 197, 0) }
(byte*) sprites#0 ← ((byte*)) (word/signed word/dword/signed dword) 8192
to:@38
main: scope:[main] from @45
(byte) sin_idx_y#24 ← phi( @45/(byte) sin_idx_y#17 )
(byte) sin_idx_x#26 ← phi( @45/(byte) sin_idx_x#16 )
(byte) progress_idx#30 ← phi( @45/(byte) progress_idx#35 )
(byte*) progress_cursor#29 ← phi( @45/(byte*) progress_cursor#35 )
to:@39
main: scope:[main] from @46
(byte) sin_idx_y#24 ← phi( @46/(byte) sin_idx_y#17 )
(byte) sin_idx_x#26 ← phi( @46/(byte) sin_idx_x#16 )
(byte) progress_idx#30 ← phi( @46/(byte) progress_idx#35 )
(byte*) progress_cursor#29 ← phi( @46/(byte*) progress_cursor#35 )
call init param-assignment
to:main::@5
main::@5: scope:[main] from main
@ -2751,10 +2785,10 @@ clear_screen::@1: scope:[clear_screen] from clear_screen clear_screen::@1
clear_screen::@return: scope:[clear_screen] from clear_screen::@1
return
to:@return
@38: scope:[] from @35
@39: scope:[] from @36
(byte*) progress_cursor#7 ← (byte*) SCREEN#0
(byte) progress_idx#7 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@40
to:@41
progress_init: scope:[progress_init] from init::@5 init::@7
(byte*) progress_init::line#2 ← phi( init::@5/(byte*) progress_init::line#0 init::@7/(byte*) progress_init::line#1 )
(byte*) progress_cursor#8 ← (byte*) progress_init::line#2
@ -2794,12 +2828,12 @@ progress_inc::@return: scope:[progress_inc] from progress_inc::@1
(byte*) progress_cursor#11 ← (byte*) progress_cursor#25
return
to:@return
@40: scope:[] from @38
(byte) progress_idx#39 ← phi( @38/(byte) progress_idx#7 )
(byte*) progress_cursor#39 ← phi( @38/(byte*) progress_cursor#7 )
@41: scope:[] from @39
(byte) progress_idx#39 ← phi( @39/(byte) progress_idx#7 )
(byte*) progress_cursor#39 ← phi( @39/(byte*) progress_cursor#7 )
(byte) sin_idx_x#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) sin_idx_y#2 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@45
to:@46
anim: scope:[anim] from main::@3
(byte) sin_idx_y#9 ← phi( main::@3/(byte) sin_idx_y#13 )
(byte) sin_idx_x#9 ← phi( main::@3/(byte) sin_idx_x#13 )
@ -3359,32 +3393,32 @@ gen_sintab::@return: scope:[gen_sintab] from gen_sintab::@23
(byte*) progress_cursor#13 ← (byte*) progress_cursor#27
return
to:@return
@45: scope:[] from @40
(byte) sin_idx_y#17 ← phi( @40/(byte) sin_idx_y#2 )
(byte) sin_idx_x#16 ← phi( @40/(byte) sin_idx_x#2 )
(byte) progress_idx#35 ← phi( @40/(byte) progress_idx#39 )
(byte*) progress_cursor#35 ← phi( @40/(byte*) progress_cursor#39 )
@46: scope:[] from @41
(byte) sin_idx_y#17 ← phi( @41/(byte) sin_idx_y#2 )
(byte) sin_idx_x#16 ← phi( @41/(byte) sin_idx_x#2 )
(byte) progress_idx#35 ← phi( @41/(byte) progress_idx#39 )
(byte*) progress_cursor#35 ← phi( @41/(byte*) progress_cursor#39 )
call main param-assignment
to:@46
@46: scope:[] from @45
(byte) sin_idx_y#12 ← phi( @45/(byte) sin_idx_y#1 )
(byte) sin_idx_x#12 ← phi( @45/(byte) sin_idx_x#1 )
(byte) progress_idx#29 ← phi( @45/(byte) progress_idx#1 )
(byte*) progress_cursor#28 ← phi( @45/(byte*) progress_cursor#1 )
to:@47
@47: scope:[] from @46
(byte) sin_idx_y#12 ← phi( @46/(byte) sin_idx_y#1 )
(byte) sin_idx_x#12 ← phi( @46/(byte) sin_idx_x#1 )
(byte) progress_idx#29 ← phi( @46/(byte) progress_idx#1 )
(byte*) progress_cursor#28 ← phi( @46/(byte*) progress_cursor#1 )
(byte*) progress_cursor#14 ← (byte*) progress_cursor#28
(byte) progress_idx#15 ← (byte) progress_idx#29
(byte) sin_idx_x#6 ← (byte) sin_idx_x#12
(byte) sin_idx_y#6 ← (byte) sin_idx_y#12
to:@end
@end: scope:[] from @46
@end: scope:[] from @47
SYMBOL TABLE SSA
(label) @27
(label) @35
(label) @38
(label) @40
(label) @45
(label) @36
(label) @39
(label) @41
(label) @46
(label) @47
(label) @begin
(label) @end
(byte*) BORDERCOL
@ -4684,18 +4718,18 @@ Succesful SSA optimization PassNEliminateUnusedVars
Eliminating Noop Cast (byte*) prepareMEM::mem#0 ← ((byte*)) (word) setFAC::w#5
Succesful SSA optimization Pass2NopCastElimination
Culled Empty Block (label) @27
Culled Empty Block (label) @35
Culled Empty Block (label) @36
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@1
Culled Empty Block (label) init::@3
Culled Empty Block (label) init::@10
Culled Empty Block (label) @38
Culled Empty Block (label) @40
Culled Empty Block (label) @39
Culled Empty Block (label) @41
Not culling empty block because it shares successor with its predecessor. (label) anim::@9
Not culling empty block because it shares successor with its predecessor. (label) anim::@10
Not culling empty block because it shares successor with its predecessor. (label) gen_chargen_sprite::@6
Culled Empty Block (label) gen_sintab::@13
Culled Empty Block (label) @46
Culled Empty Block (label) @47
Succesful SSA optimization Pass2CullEmptyBlocks
Not culling empty block because it shares successor with its predecessor. (label) anim::@9
Not culling empty block because it shares successor with its predecessor. (label) anim::@10
@ -4955,7 +4989,7 @@ Constant inlined progress_idx#11 = (byte/signed byte/word/signed word/dword/sign
Constant inlined gen_sprites::$3 = (const string) gen_sprites::cml#0
Constant inlined anim::j2#0 = (byte/signed byte/word/signed word/dword/signed dword) 12
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @45 @end main main::@2 main::@3 main::@6 main::@return anim anim::@1 anim::@6 anim::@2 anim::@7 anim::@3 anim::@8 anim::@9 anim::@4 anim::@10 anim::@5 anim::@return init init::@1 init::@2 init::@4 init::@5 init::@6 init::@7 init::@8 init::@9 init::@return clear_screen clear_screen::@1 clear_screen::@return gen_sintab gen_sintab::@3 gen_sintab::@4 gen_sintab::@5 gen_sintab::@6 gen_sintab::@7 gen_sintab::@8 gen_sintab::@9 gen_sintab::@10 gen_sintab::@11 gen_sintab::@12 gen_sintab::@1 gen_sintab::@14 gen_sintab::@15 gen_sintab::@16 gen_sintab::@17 gen_sintab::@18 gen_sintab::@19 gen_sintab::@20 gen_sintab::@21 gen_sintab::@22 gen_sintab::@23 gen_sintab::@return progress_inc progress_inc::@2 progress_inc::@1 progress_inc::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return subFACfromARG subFACfromARG::@return setARGtoFAC setARGtoFAC::@return progress_init progress_init::@return gen_sprites gen_sprites::@1 gen_sprites::@3 gen_sprites::@return gen_chargen_sprite gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite::@7 gen_chargen_sprite::@5 gen_chargen_sprite::@8 gen_chargen_sprite::@9 gen_chargen_sprite::@10 gen_chargen_sprite::@return place_sprites place_sprites::@1 place_sprites::@return
Block Sequence Planned @begin @46 @end main main::@2 main::@3 main::@6 main::@return anim anim::@1 anim::@6 anim::@2 anim::@7 anim::@3 anim::@8 anim::@9 anim::@4 anim::@10 anim::@5 anim::@return init init::@1 init::@2 init::@4 init::@5 init::@6 init::@7 init::@8 init::@9 init::@return clear_screen clear_screen::@1 clear_screen::@return gen_sintab gen_sintab::@3 gen_sintab::@4 gen_sintab::@5 gen_sintab::@6 gen_sintab::@7 gen_sintab::@8 gen_sintab::@9 gen_sintab::@10 gen_sintab::@11 gen_sintab::@12 gen_sintab::@1 gen_sintab::@14 gen_sintab::@15 gen_sintab::@16 gen_sintab::@17 gen_sintab::@18 gen_sintab::@19 gen_sintab::@20 gen_sintab::@21 gen_sintab::@22 gen_sintab::@23 gen_sintab::@return progress_inc progress_inc::@2 progress_inc::@1 progress_inc::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return subFACfromARG subFACfromARG::@return setARGtoFAC setARGtoFAC::@return progress_init progress_init::@return gen_sprites gen_sprites::@1 gen_sprites::@3 gen_sprites::@return gen_chargen_sprite gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite::@7 gen_chargen_sprite::@5 gen_chargen_sprite::@8 gen_chargen_sprite::@9 gen_chargen_sprite::@10 gen_chargen_sprite::@return place_sprites place_sprites::@1 place_sprites::@return
Added new block during phi lifting main::@7(between main::@6 and main::@2)
Added new block during phi lifting anim::@11(between anim::@3 and anim::@1)
Added new block during phi lifting anim::@12(between anim::@1 and anim::@2)
@ -4972,9 +5006,9 @@ Added new block during phi lifting gen_chargen_sprite::@12(between gen_chargen_s
Added new block during phi lifting gen_chargen_sprite::@13(between gen_chargen_sprite::@5 and gen_chargen_sprite::@4)
Added new block during phi lifting gen_chargen_sprite::@14(between gen_chargen_sprite::@4 and gen_chargen_sprite::@5)
Added new block during phi lifting place_sprites::@3(between place_sprites::@1 and place_sprites::@1)
Block Sequence Planned @begin @45 @end main main::@2 main::@3 main::@6 main::@return main::@7 anim anim::@1 anim::@6 anim::@2 anim::@7 anim::@3 anim::@8 anim::@9 anim::@4 anim::@10 anim::@5 anim::@return anim::@15 anim::@14 anim::@11 anim::@13 anim::@12 init init::@1 init::@2 init::@4 init::@5 init::@6 init::@7 init::@8 init::@9 init::@return init::@11 clear_screen clear_screen::@1 clear_screen::@return clear_screen::@3 gen_sintab gen_sintab::@3 gen_sintab::@4 gen_sintab::@5 gen_sintab::@6 gen_sintab::@7 gen_sintab::@8 gen_sintab::@9 gen_sintab::@10 gen_sintab::@11 gen_sintab::@12 gen_sintab::@1 gen_sintab::@14 gen_sintab::@15 gen_sintab::@16 gen_sintab::@17 gen_sintab::@18 gen_sintab::@19 gen_sintab::@20 gen_sintab::@21 gen_sintab::@22 gen_sintab::@23 gen_sintab::@return gen_sintab::@24 progress_inc progress_inc::@2 progress_inc::@1 progress_inc::@return progress_inc::@3 getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return subFACfromARG subFACfromARG::@return setARGtoFAC setARGtoFAC::@return progress_init progress_init::@return gen_sprites gen_sprites::@1 gen_sprites::@3 gen_sprites::@return gen_sprites::@4 gen_chargen_sprite gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite::@7 gen_chargen_sprite::@5 gen_chargen_sprite::@8 gen_chargen_sprite::@9 gen_chargen_sprite::@10 gen_chargen_sprite::@return gen_chargen_sprite::@11 gen_chargen_sprite::@12 gen_chargen_sprite::@13 gen_chargen_sprite::@14 place_sprites place_sprites::@1 place_sprites::@return place_sprites::@3
Block Sequence Planned @begin @46 @end main main::@2 main::@3 main::@6 main::@return main::@7 anim anim::@1 anim::@6 anim::@2 anim::@7 anim::@3 anim::@8 anim::@9 anim::@4 anim::@10 anim::@5 anim::@return anim::@15 anim::@14 anim::@11 anim::@13 anim::@12 init init::@1 init::@2 init::@4 init::@5 init::@6 init::@7 init::@8 init::@9 init::@return init::@11 clear_screen clear_screen::@1 clear_screen::@return clear_screen::@3 gen_sintab gen_sintab::@3 gen_sintab::@4 gen_sintab::@5 gen_sintab::@6 gen_sintab::@7 gen_sintab::@8 gen_sintab::@9 gen_sintab::@10 gen_sintab::@11 gen_sintab::@12 gen_sintab::@1 gen_sintab::@14 gen_sintab::@15 gen_sintab::@16 gen_sintab::@17 gen_sintab::@18 gen_sintab::@19 gen_sintab::@20 gen_sintab::@21 gen_sintab::@22 gen_sintab::@23 gen_sintab::@return gen_sintab::@24 progress_inc progress_inc::@2 progress_inc::@1 progress_inc::@return progress_inc::@3 getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return subFACfromARG subFACfromARG::@return setARGtoFAC setARGtoFAC::@return progress_init progress_init::@return gen_sprites gen_sprites::@1 gen_sprites::@3 gen_sprites::@return gen_sprites::@4 gen_chargen_sprite gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite::@7 gen_chargen_sprite::@5 gen_chargen_sprite::@8 gen_chargen_sprite::@9 gen_chargen_sprite::@10 gen_chargen_sprite::@return gen_chargen_sprite::@11 gen_chargen_sprite::@12 gen_chargen_sprite::@13 gen_chargen_sprite::@14 place_sprites place_sprites::@1 place_sprites::@return place_sprites::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @45
Adding NOP phi() at start of @46
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@3
@ -5153,9 +5187,9 @@ Culled Empty Block (label) gen_chargen_sprite::@12
Culled Empty Block (label) gen_chargen_sprite::@13
Culled Empty Block (label) gen_chargen_sprite::@14
Culled Empty Block (label) place_sprites::@3
Block Sequence Planned @begin @45 @end main main::@2 main::@3 main::@6 main::@return anim anim::@1 anim::@6 anim::@2 anim::@7 anim::@3 anim::@8 anim::@4 anim::@5 anim::@return anim::@15 anim::@14 init init::@1 init::@2 init::@4 init::@5 init::@6 init::@7 init::@8 init::@9 init::@return clear_screen clear_screen::@1 clear_screen::@return gen_sintab gen_sintab::@3 gen_sintab::@4 gen_sintab::@5 gen_sintab::@6 gen_sintab::@7 gen_sintab::@8 gen_sintab::@9 gen_sintab::@10 gen_sintab::@11 gen_sintab::@12 gen_sintab::@1 gen_sintab::@14 gen_sintab::@15 gen_sintab::@16 gen_sintab::@17 gen_sintab::@18 gen_sintab::@19 gen_sintab::@20 gen_sintab::@21 gen_sintab::@22 gen_sintab::@23 gen_sintab::@return progress_inc progress_inc::@2 progress_inc::@1 progress_inc::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return subFACfromARG subFACfromARG::@return setARGtoFAC setARGtoFAC::@return progress_init progress_init::@return gen_sprites gen_sprites::@1 gen_sprites::@3 gen_sprites::@return gen_chargen_sprite gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite::@7 gen_chargen_sprite::@5 gen_chargen_sprite::@8 gen_chargen_sprite::@9 gen_chargen_sprite::@10 gen_chargen_sprite::@return place_sprites place_sprites::@1 place_sprites::@return
Block Sequence Planned @begin @46 @end main main::@2 main::@3 main::@6 main::@return anim anim::@1 anim::@6 anim::@2 anim::@7 anim::@3 anim::@8 anim::@4 anim::@5 anim::@return anim::@15 anim::@14 init init::@1 init::@2 init::@4 init::@5 init::@6 init::@7 init::@8 init::@9 init::@return clear_screen clear_screen::@1 clear_screen::@return gen_sintab gen_sintab::@3 gen_sintab::@4 gen_sintab::@5 gen_sintab::@6 gen_sintab::@7 gen_sintab::@8 gen_sintab::@9 gen_sintab::@10 gen_sintab::@11 gen_sintab::@12 gen_sintab::@1 gen_sintab::@14 gen_sintab::@15 gen_sintab::@16 gen_sintab::@17 gen_sintab::@18 gen_sintab::@19 gen_sintab::@20 gen_sintab::@21 gen_sintab::@22 gen_sintab::@23 gen_sintab::@return progress_inc progress_inc::@2 progress_inc::@1 progress_inc::@return getFAC getFAC::@return addMEMtoFAC addMEMtoFAC::@1 addMEMtoFAC::@return prepareMEM prepareMEM::@return mulFACbyMEM mulFACbyMEM::@1 mulFACbyMEM::@return sinFAC sinFAC::@return divMEMbyFAC divMEMbyFAC::@1 divMEMbyFAC::@return setFAC setFAC::@1 setFAC::@return setMEMtoFAC setMEMtoFAC::@1 setMEMtoFAC::@return subFACfromARG subFACfromARG::@return setARGtoFAC setARGtoFAC::@return progress_init progress_init::@return gen_sprites gen_sprites::@1 gen_sprites::@3 gen_sprites::@return gen_chargen_sprite gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite::@7 gen_chargen_sprite::@5 gen_chargen_sprite::@8 gen_chargen_sprite::@9 gen_chargen_sprite::@10 gen_chargen_sprite::@return place_sprites place_sprites::@1 place_sprites::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @45
Adding NOP phi() at start of @46
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@3
@ -5239,14 +5273,14 @@ Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@45
@45: scope:[] from @begin
to:@46
@46: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @45
@end: scope:[] from @46
[3] phi() [ ] ( )
main: scope:[main] from @45
main: scope:[main] from @46
[4] phi() [ ] ( main:2 [ ] )
[5] call init param-assignment [ ] ( main:2 [ ] )
to:main::@2
@ -5708,111 +5742,111 @@ place_sprites::@return: scope:[place_sprites] from place_sprites::@1
DOMINATORS
@begin dominated by @begin
@45 dominated by @begin @45
@end dominated by @end @begin @45
main dominated by main @begin @45
main::@2 dominated by main::@2 main @begin @45
main::@3 dominated by main::@2 main::@3 main @begin @45
main::@6 dominated by main::@2 main::@6 main::@3 main @begin @45
main::@return dominated by main::@2 main::@6 main::@3 main::@return main @begin @45
anim dominated by main::@2 main::@3 anim main @begin @45
anim::@1 dominated by main::@2 main::@3 anim anim::@1 main @begin @45
anim::@6 dominated by main::@2 main::@3 anim anim::@6 anim::@1 main @begin @45
anim::@2 dominated by main::@2 main::@3 anim anim::@2 anim::@1 main @begin @45
anim::@7 dominated by main::@2 main::@3 anim anim::@2 anim::@1 anim::@7 main @begin @45
anim::@3 dominated by main::@2 main::@3 anim anim::@3 anim::@2 anim::@1 main @begin @45
anim::@8 dominated by main::@2 main::@3 anim anim::@3 anim::@2 anim::@1 anim::@8 main @begin @45
anim::@4 dominated by main::@2 main::@3 anim anim::@4 anim::@3 anim::@2 anim::@1 anim::@8 main @begin @45
anim::@5 dominated by main::@2 main::@3 anim anim::@5 anim::@4 anim::@3 anim::@2 anim::@1 anim::@8 main @begin @45
anim::@return dominated by main::@2 main::@3 anim anim::@5 anim::@4 anim::@3 anim::@2 anim::@1 anim::@8 anim::@return main @begin @45
anim::@15 dominated by main::@2 main::@3 anim anim::@4 anim::@3 anim::@2 anim::@1 anim::@8 main @begin @45 anim::@15
anim::@14 dominated by main::@2 main::@3 anim anim::@3 anim::@2 anim::@1 anim::@8 main @begin @45 anim::@14
init dominated by init main @begin @45
init::@1 dominated by init main @begin init::@1 @45
init::@2 dominated by init main @begin init::@2 init::@1 @45
init::@4 dominated by init main @begin init::@2 init::@1 init::@4 @45
init::@5 dominated by init main @begin init::@2 init::@1 init::@5 init::@4 @45
init::@6 dominated by init main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45
init::@7 dominated by init main @begin init::@2 init::@1 init::@7 init::@6 init::@5 init::@4 @45
init::@8 dominated by init main @begin init::@2 init::@1 init::@7 init::@6 init::@5 init::@4 init::@8 @45
init::@9 dominated by init main @begin init::@2 init::@1 init::@7 init::@6 init::@5 init::@4 init::@9 init::@8 @45
init::@return dominated by init main @begin init::@return init::@2 init::@1 init::@7 init::@6 init::@5 init::@4 init::@9 init::@8 @45
clear_screen dominated by init clear_screen main @begin @45
clear_screen::@1 dominated by init clear_screen main @begin @45 clear_screen::@1
clear_screen::@return dominated by init clear_screen main @begin @45 clear_screen::@1 clear_screen::@return
gen_sintab dominated by init gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45
gen_sintab::@3 dominated by init gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
gen_sintab::@4 dominated by init gen_sintab main gen_sintab::@4 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
gen_sintab::@5 dominated by init gen_sintab main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
gen_sintab::@6 dominated by init gen_sintab gen_sintab::@6 main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
gen_sintab::@7 dominated by init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
gen_sintab::@8 dominated by init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
gen_sintab::@9 dominated by init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
gen_sintab::@10 dominated by gen_sintab::@10 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
gen_sintab::@11 dominated by gen_sintab::@10 gen_sintab::@11 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
gen_sintab::@12 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
gen_sintab::@1 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
gen_sintab::@14 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
gen_sintab::@15 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@15 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
gen_sintab::@16 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
gen_sintab::@17 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@17 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
gen_sintab::@18 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
gen_sintab::@19 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
gen_sintab::@20 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@20 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
gen_sintab::@21 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
gen_sintab::@22 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
gen_sintab::@23 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@23 gen_sintab::@22 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
gen_sintab::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@23 gen_sintab::@22 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 gen_sintab::@return @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
progress_inc dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 progress_inc gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
progress_inc::@2 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 progress_inc gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 progress_inc::@2 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
progress_inc::@1 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 progress_inc gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 progress_inc::@1 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
progress_inc::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 progress_inc gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 progress_inc::@1 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 progress_inc::@return @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
getFAC dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 getFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
getFAC::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 getFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1 getFAC::@return
addMEMtoFAC dominated by gen_sintab::@10 gen_sintab::@11 init addMEMtoFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
addMEMtoFAC::@1 dominated by gen_sintab::@10 gen_sintab::@11 init addMEMtoFAC::@1 addMEMtoFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
addMEMtoFAC::@return dominated by gen_sintab::@10 gen_sintab::@11 init addMEMtoFAC::@1 addMEMtoFAC addMEMtoFAC::@return gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
prepareMEM dominated by init prepareMEM gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45
prepareMEM::@return dominated by init prepareMEM gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 prepareMEM::@return
mulFACbyMEM dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 mulFACbyMEM init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
mulFACbyMEM::@1 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 mulFACbyMEM init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 mulFACbyMEM::@1 gen_sintab::@3 gen_sintab::@1
mulFACbyMEM::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 mulFACbyMEM::@return mulFACbyMEM init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 mulFACbyMEM::@1 gen_sintab::@3 gen_sintab::@1
sinFAC dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 init sinFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
sinFAC::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 init sinFAC sinFAC::@return gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3 gen_sintab::@1
divMEMbyFAC dominated by init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 divMEMbyFAC gen_sintab::@3
divMEMbyFAC::@1 dominated by init divMEMbyFAC::@1 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 divMEMbyFAC gen_sintab::@3
divMEMbyFAC::@return dominated by init divMEMbyFAC::@1 divMEMbyFAC::@return gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 divMEMbyFAC gen_sintab::@3
setFAC dominated by init setFAC gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45
setFAC::@1 dominated by init setFAC gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 setFAC::@1
setFAC::@return dominated by setFAC::@return init setFAC gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 setFAC::@1
setMEMtoFAC dominated by init setMEMtoFAC gen_sintab main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
setMEMtoFAC::@1 dominated by init setMEMtoFAC setMEMtoFAC::@1 gen_sintab main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
setMEMtoFAC::@return dominated by init setMEMtoFAC setMEMtoFAC::@1 gen_sintab main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 setMEMtoFAC::@return gen_sintab::@3
subFACfromARG dominated by init subFACfromARG gen_sintab gen_sintab::@6 main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
subFACfromARG::@return dominated by init subFACfromARG gen_sintab gen_sintab::@6 main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 subFACfromARG::@return gen_sintab::@3
setARGtoFAC dominated by setARGtoFAC init gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
setARGtoFAC::@return dominated by setARGtoFAC init gen_sintab main setARGtoFAC::@return @begin init::@2 init::@1 init::@6 init::@5 init::@4 @45 gen_sintab::@3
progress_init dominated by init progress_init main @begin init::@2 init::@1 init::@5 init::@4 @45
progress_init::@return dominated by init progress_init main @begin init::@2 init::@1 init::@5 init::@4 @45 progress_init::@return
gen_sprites dominated by init main @begin gen_sprites init::@2 init::@1 init::@4 @45
gen_sprites::@1 dominated by init main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @45
gen_sprites::@3 dominated by init main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @45 gen_sprites::@3
gen_sprites::@return dominated by init main gen_sprites::@return @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @45 gen_sprites::@3
gen_chargen_sprite dominated by init gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @45
gen_chargen_sprite::@1 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @45
gen_chargen_sprite::@2 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @45
gen_chargen_sprite::@6 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @45
gen_chargen_sprite::@3 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@3 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @45
gen_chargen_sprite::@4 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @45
gen_chargen_sprite::@7 dominated by init gen_chargen_sprite::@7 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @45
gen_chargen_sprite::@5 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @45
gen_chargen_sprite::@8 dominated by init gen_chargen_sprite::@8 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @45
gen_chargen_sprite::@9 dominated by init gen_chargen_sprite::@9 gen_chargen_sprite::@8 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @45
gen_chargen_sprite::@10 dominated by init gen_chargen_sprite::@10 gen_chargen_sprite::@9 gen_chargen_sprite::@8 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @45
gen_chargen_sprite::@return dominated by init gen_chargen_sprite::@10 gen_chargen_sprite::@return gen_chargen_sprite::@9 gen_chargen_sprite::@8 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @45
place_sprites dominated by init main @begin init::@2 init::@1 @45 place_sprites
place_sprites::@1 dominated by init place_sprites::@1 main @begin init::@2 init::@1 @45 place_sprites
place_sprites::@return dominated by init place_sprites::@return place_sprites::@1 main @begin init::@2 init::@1 @45 place_sprites
@46 dominated by @begin @46
@end dominated by @end @begin @46
main dominated by main @begin @46
main::@2 dominated by main::@2 main @begin @46
main::@3 dominated by main::@2 main::@3 main @begin @46
main::@6 dominated by main::@2 main::@6 main::@3 main @begin @46
main::@return dominated by main::@2 main::@6 main::@3 main::@return main @begin @46
anim dominated by main::@2 main::@3 anim main @begin @46
anim::@1 dominated by main::@2 main::@3 anim anim::@1 main @begin @46
anim::@6 dominated by main::@2 main::@3 anim anim::@6 anim::@1 main @begin @46
anim::@2 dominated by main::@2 main::@3 anim anim::@2 anim::@1 main @begin @46
anim::@7 dominated by main::@2 main::@3 anim anim::@2 anim::@1 anim::@7 main @begin @46
anim::@3 dominated by main::@2 main::@3 anim anim::@3 anim::@2 anim::@1 main @begin @46
anim::@8 dominated by main::@2 main::@3 anim anim::@3 anim::@2 anim::@1 anim::@8 main @begin @46
anim::@4 dominated by main::@2 main::@3 anim anim::@4 anim::@3 anim::@2 anim::@1 anim::@8 main @begin @46
anim::@5 dominated by main::@2 main::@3 anim anim::@5 anim::@4 anim::@3 anim::@2 anim::@1 anim::@8 main @begin @46
anim::@return dominated by main::@2 main::@3 anim anim::@5 anim::@4 anim::@3 anim::@2 anim::@1 anim::@8 anim::@return main @begin @46
anim::@15 dominated by main::@2 main::@3 anim anim::@4 anim::@3 anim::@2 anim::@1 anim::@8 main @begin @46 anim::@15
anim::@14 dominated by main::@2 main::@3 anim anim::@3 anim::@2 anim::@1 anim::@8 main @begin @46 anim::@14
init dominated by init main @begin @46
init::@1 dominated by init main @begin init::@1 @46
init::@2 dominated by init main @begin init::@2 init::@1 @46
init::@4 dominated by init main @begin init::@2 init::@1 init::@4 @46
init::@5 dominated by init main @begin init::@2 init::@1 init::@5 init::@4 @46
init::@6 dominated by init main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46
init::@7 dominated by init main @begin init::@2 init::@1 init::@7 init::@6 init::@5 init::@4 @46
init::@8 dominated by init main @begin init::@2 init::@1 init::@7 init::@6 init::@5 init::@4 init::@8 @46
init::@9 dominated by init main @begin init::@2 init::@1 init::@7 init::@6 init::@5 init::@4 init::@9 init::@8 @46
init::@return dominated by init main @begin init::@return init::@2 init::@1 init::@7 init::@6 init::@5 init::@4 init::@9 init::@8 @46
clear_screen dominated by init clear_screen main @begin @46
clear_screen::@1 dominated by init clear_screen main @begin @46 clear_screen::@1
clear_screen::@return dominated by init clear_screen main @begin @46 clear_screen::@1 clear_screen::@return
gen_sintab dominated by init gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46
gen_sintab::@3 dominated by init gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@4 dominated by init gen_sintab main gen_sintab::@4 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@5 dominated by init gen_sintab main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@6 dominated by init gen_sintab gen_sintab::@6 main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@7 dominated by init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@8 dominated by init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@9 dominated by init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@10 dominated by gen_sintab::@10 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@11 dominated by gen_sintab::@10 gen_sintab::@11 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@12 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
gen_sintab::@1 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@14 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@15 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@15 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@16 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@17 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@17 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@18 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@19 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@20 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@20 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@21 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@22 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@23 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@23 gen_sintab::@22 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
gen_sintab::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@23 gen_sintab::@22 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 gen_sintab::@return @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
progress_inc dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 progress_inc gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
progress_inc::@2 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 progress_inc gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 progress_inc::@2 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
progress_inc::@1 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 progress_inc gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 progress_inc::@1 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
progress_inc::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 progress_inc gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 gen_sintab::@22 progress_inc::@1 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 progress_inc::@return @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
getFAC dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 getFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
getFAC::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 gen_sintab::@19 init gen_sintab::@21 gen_sintab::@20 getFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1 getFAC::@return
addMEMtoFAC dominated by gen_sintab::@10 gen_sintab::@11 init addMEMtoFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
addMEMtoFAC::@1 dominated by gen_sintab::@10 gen_sintab::@11 init addMEMtoFAC::@1 addMEMtoFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
addMEMtoFAC::@return dominated by gen_sintab::@10 gen_sintab::@11 init addMEMtoFAC::@1 addMEMtoFAC addMEMtoFAC::@return gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
prepareMEM dominated by init prepareMEM gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46
prepareMEM::@return dominated by init prepareMEM gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 prepareMEM::@return
mulFACbyMEM dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 mulFACbyMEM init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
mulFACbyMEM::@1 dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 mulFACbyMEM init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 mulFACbyMEM::@1 gen_sintab::@3 gen_sintab::@1
mulFACbyMEM::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 mulFACbyMEM::@return mulFACbyMEM init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 mulFACbyMEM::@1 gen_sintab::@3 gen_sintab::@1
sinFAC dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 init sinFAC gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
sinFAC::@return dominated by gen_sintab::@10 gen_sintab::@12 gen_sintab::@11 gen_sintab::@14 gen_sintab::@16 gen_sintab::@15 gen_sintab::@18 gen_sintab::@17 init sinFAC sinFAC::@return gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3 gen_sintab::@1
divMEMbyFAC dominated by init gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 divMEMbyFAC gen_sintab::@3
divMEMbyFAC::@1 dominated by init divMEMbyFAC::@1 gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 divMEMbyFAC gen_sintab::@3
divMEMbyFAC::@return dominated by init divMEMbyFAC::@1 divMEMbyFAC::@return gen_sintab gen_sintab::@6 gen_sintab::@7 main gen_sintab::@4 gen_sintab::@5 gen_sintab::@8 gen_sintab::@9 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 divMEMbyFAC gen_sintab::@3
setFAC dominated by init setFAC gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46
setFAC::@1 dominated by init setFAC gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 setFAC::@1
setFAC::@return dominated by setFAC::@return init setFAC gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 setFAC::@1
setMEMtoFAC dominated by init setMEMtoFAC gen_sintab main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
setMEMtoFAC::@1 dominated by init setMEMtoFAC setMEMtoFAC::@1 gen_sintab main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
setMEMtoFAC::@return dominated by init setMEMtoFAC setMEMtoFAC::@1 gen_sintab main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 setMEMtoFAC::@return gen_sintab::@3
subFACfromARG dominated by init subFACfromARG gen_sintab gen_sintab::@6 main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
subFACfromARG::@return dominated by init subFACfromARG gen_sintab gen_sintab::@6 main gen_sintab::@4 gen_sintab::@5 @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 subFACfromARG::@return gen_sintab::@3
setARGtoFAC dominated by setARGtoFAC init gen_sintab main @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
setARGtoFAC::@return dominated by setARGtoFAC init gen_sintab main setARGtoFAC::@return @begin init::@2 init::@1 init::@6 init::@5 init::@4 @46 gen_sintab::@3
progress_init dominated by init progress_init main @begin init::@2 init::@1 init::@5 init::@4 @46
progress_init::@return dominated by init progress_init main @begin init::@2 init::@1 init::@5 init::@4 @46 progress_init::@return
gen_sprites dominated by init main @begin gen_sprites init::@2 init::@1 init::@4 @46
gen_sprites::@1 dominated by init main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_sprites::@3 dominated by init main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46 gen_sprites::@3
gen_sprites::@return dominated by init main gen_sprites::@return @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46 gen_sprites::@3
gen_chargen_sprite dominated by init gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@1 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@2 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@6 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@6 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@3 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@3 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@4 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@7 dominated by init gen_chargen_sprite::@7 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@5 dominated by init gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@8 dominated by init gen_chargen_sprite::@8 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@9 dominated by init gen_chargen_sprite::@9 gen_chargen_sprite::@8 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@10 dominated by init gen_chargen_sprite::@10 gen_chargen_sprite::@9 gen_chargen_sprite::@8 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
gen_chargen_sprite::@return dominated by init gen_chargen_sprite::@10 gen_chargen_sprite::@return gen_chargen_sprite::@9 gen_chargen_sprite::@8 gen_chargen_sprite::@1 gen_chargen_sprite::@2 gen_chargen_sprite::@5 gen_chargen_sprite::@3 gen_chargen_sprite::@4 gen_chargen_sprite main @begin gen_sprites init::@2 init::@1 init::@4 gen_sprites::@1 @46
place_sprites dominated by init main @begin init::@2 init::@1 @46 place_sprites
place_sprites::@1 dominated by init place_sprites::@1 main @begin init::@2 init::@1 @46 place_sprites
place_sprites::@return dominated by init place_sprites::@return place_sprites::@1 main @begin init::@2 init::@1 @46 place_sprites
NATURAL LOOPS
Found back edge: Loop head: main::@2 tails: main::@2 blocks: null
@ -6292,17 +6326,17 @@ INITIAL ASM
.label sin_idx_y = 3
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @45 [phi:@begin->@45]
b45_from_bbegin:
jmp b45
//SEG4 @45
b45:
//SEG3 [1] phi from @begin to @46 [phi:@begin->@46]
b46_from_bbegin:
jmp b46
//SEG4 @46
b46:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @45 to main [phi:@45->main]
main_from_b45:
//SEG6 [4] phi from @46 to main [phi:@46->main]
main_from_b46:
jsr main
//SEG7 [3] phi from @45 to @end [phi:@45->@end]
bend_from_b45:
//SEG7 [3] phi from @46 to @end [phi:@46->@end]
bend_from_b46:
jmp bend
//SEG8 @end
bend:
@ -8053,17 +8087,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label sin_idx_y = 3
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @45 [phi:@begin->@45]
b45_from_bbegin:
jmp b45
//SEG4 @45
b45:
//SEG3 [1] phi from @begin to @46 [phi:@begin->@46]
b46_from_bbegin:
jmp b46
//SEG4 @46
b46:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @45 to main [phi:@45->main]
main_from_b45:
//SEG6 [4] phi from @46 to main [phi:@46->main]
main_from_b46:
jsr main
//SEG7 [3] phi from @45 to @end [phi:@45->@end]
bend_from_b45:
//SEG7 [3] phi from @46 to @end [phi:@46->@end]
bend_from_b46:
jmp bend
//SEG8 @end
bend:
@ -9360,7 +9394,7 @@ place_sprites: {
sintab_y: .fill $c5, 0
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b45
Removing instruction jmp b46
Removing instruction jmp bend
Removing instruction jmp b2
Removing instruction jmp b3
@ -9480,9 +9514,9 @@ Replacing label b2_from_b8 with b2
Replacing label b1_from_b9 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b45_from_bbegin:
Removing instruction main_from_b45:
Removing instruction bend_from_b45:
Removing instruction b46_from_bbegin:
Removing instruction main_from_b46:
Removing instruction bend_from_b46:
Removing instruction b2_from_b6:
Removing instruction b3_from_b2:
Removing instruction b1_from_b3:
@ -9549,7 +9583,7 @@ Removing instruction b4_from_b5:
Removing instruction b5_from_b4:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b45:
Removing instruction b46:
Removing instruction bend:
Removing instruction init_from_main:
Removing instruction b2_from_main:
@ -9678,7 +9712,7 @@ Removing instruction jmp b2
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @45
(label) @46
(label) @begin
(label) @end
(byte*) BORDERCOL
@ -10051,12 +10085,12 @@ Score: 767890
.label sin_idx_x = 2
.label sin_idx_y = 3
//SEG2 @begin
//SEG3 [1] phi from @begin to @45 [phi:@begin->@45]
//SEG4 @45
//SEG3 [1] phi from @begin to @46 [phi:@begin->@46]
//SEG4 @46
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @45 to main [phi:@45->main]
//SEG6 [4] phi from @46 to main [phi:@46->main]
jsr main
//SEG7 [3] phi from @45 to @end [phi:@45->@end]
//SEG7 [3] phi from @46 to @end [phi:@46->@end]
//SEG8 @end
//SEG9 main
main: {

View File

@ -1,4 +1,4 @@
(label) @45
(label) @46
(label) @begin
(label) @end
(byte*) BORDERCOL

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@10
@10: scope:[] from @begin
to:@11
@11: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @10
@end: scope:[] from @11
[3] phi() [ ] ( )
main: scope:[main] from @10
main: scope:[main] from @11
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1

View File

@ -97,6 +97,12 @@ void print_word(word w) {
print_byte(<w);
}
// Print a dword as HEX
void print_dword(dword dw) {
print_word(>dw);
print_word(<dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits
@ -188,6 +194,14 @@ proc (void()) print_word((word) print_word::w)
print_word::@return:
return
endproc // print_word()
proc (void()) print_dword((dword) print_dword::dw)
(word~) print_dword::$0 ← > (dword) print_dword::dw
(void~) print_dword::$1 ← call print_word (word~) print_dword::$0
(word~) print_dword::$2 ← < (dword) print_dword::dw
(void~) print_dword::$3 ← call print_word (word~) print_dword::$2
print_dword::@return:
return
endproc // print_dword()
proc (void()) print_byte((byte) print_byte::b)
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -510,6 +524,13 @@ SYMBOLS
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(void()) print_dword((dword) print_dword::dw)
(word~) print_dword::$0
(void~) print_dword::$1
(word~) print_dword::$2
(void~) print_dword::$3
(label) print_dword::@return
(dword) print_dword::dw
(void()) print_ln()
(byte*~) print_ln::$0
(boolean~) print_ln::$1
@ -658,6 +679,17 @@ print_word::@return: scope:[print_word] from print_word
to:@return
@5: scope:[] from @4
to:@6
print_dword: scope:[print_dword] from
(word~) print_dword::$0 ← > (dword) print_dword::dw
(void~) print_dword::$1 ← call print_word (word~) print_dword::$0
(word~) print_dword::$2 ← < (dword) print_dword::dw
(void~) print_dword::$3 ← call print_word (word~) print_dword::$2
to:print_dword::@return
print_dword::@return: scope:[print_dword] from print_dword
return
to:@return
@6: scope:[] from @5
to:@7
print_byte: scope:[print_byte] from
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -668,8 +700,8 @@ print_byte: scope:[print_byte] from
print_byte::@return: scope:[print_byte] from print_byte
return
to:@return
@6: scope:[] from @5
to:@7
@7: scope:[] from @6
to:@8
print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor
@ -677,8 +709,8 @@ print_char: scope:[print_char] from
print_char::@return: scope:[print_char] from print_char
return
to:@return
@7: scope:[] from @6
to:@8
@8: scope:[] from @7
to:@9
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
@ -696,8 +728,8 @@ print_cls::@2: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@8: scope:[] from @7
to:@9
@9: scope:[] from @8
to:@10
main: scope:[main] from
(void~) main::$0 ← call print_cls
(byte) main::a ← (byte/signed byte/word/signed word/dword/signed dword) 7
@ -928,8 +960,8 @@ main::@44: scope:[main] from main::@22
main::@return: scope:[main] from main::@44
return
to:@return
@9: scope:[] from @8
to:@10
@10: scope:[] from @9
to:@11
printu: scope:[printu] from
(void~) printu::$0 ← call print_char (byte) ' '
(void~) printu::$1 ← call print_byte (byte) printu::a
@ -941,13 +973,14 @@ printu: scope:[printu] from
printu::@return: scope:[printu] from printu
return
to:@return
@10: scope:[] from @9
@11: scope:[] from @10
call main
to:@end
@end: scope:[] from @10
@end: scope:[] from @11
Removing unused procedure print_sword
Removing unused procedure print_sbyte
Removing unused procedure print_dword
Removing unused procedure print_word
Eliminating unused variable - keeping the call (void~) print_byte::$1
Eliminating unused variable - keeping the call (void~) print_byte::$3
@ -1016,9 +1049,10 @@ Removing empty block @5
Removing empty block @6
Removing empty block @7
Removing empty block @8
Removing empty block @9
Removing empty block main::@43
Removing empty block main::@44
Removing empty block @9
Removing empty block @10
PROCEDURE MODIFY VARIABLE ANALYSIS
print_str modifies char_cursor
print_ln modifies line_cursor
@ -1047,7 +1081,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) line_cursor#0 ← (byte*) SCREEN#0
(byte*) char_cursor#0 ← (byte*) line_cursor#0
to:@10
to:@11
print_str: scope:[print_str] from printu::@2
(byte*) char_cursor#119 ← phi( printu::@2/(byte*) char_cursor#40 )
(byte*) print_str::str#4 ← phi( printu::@2/(byte*) print_str::str#1 )
@ -1151,9 +1185,9 @@ print_cls::@return: scope:[print_cls] from print_cls::@2
(byte*) char_cursor#11 ← (byte*) char_cursor#56
return
to:@return
main: scope:[main] from @10
(byte*) char_cursor#96 ← phi( @10/(byte*) char_cursor#118 )
(byte*) line_cursor#26 ← phi( @10/(byte*) line_cursor#33 )
main: scope:[main] from @11
(byte*) char_cursor#96 ← phi( @11/(byte*) char_cursor#118 )
(byte*) line_cursor#26 ← phi( @11/(byte*) line_cursor#33 )
call print_cls param-assignment
to:main::@45
main::@45: scope:[main] from main
@ -1948,22 +1982,22 @@ printu::@return: scope:[printu] from printu::@6
(byte*) char_cursor#45 ← (byte*) char_cursor#90
return
to:@return
@10: scope:[] from @begin
@11: scope:[] from @begin
(byte*) char_cursor#118 ← phi( @begin/(byte*) char_cursor#0 )
(byte*) line_cursor#33 ← phi( @begin/(byte*) line_cursor#0 )
call main param-assignment
to:@11
@11: scope:[] from @10
(byte*) char_cursor#91 ← phi( @10/(byte*) char_cursor#38 )
(byte*) line_cursor#24 ← phi( @10/(byte*) line_cursor#11 )
to:@12
@12: scope:[] from @11
(byte*) char_cursor#91 ← phi( @11/(byte*) char_cursor#38 )
(byte*) line_cursor#24 ← phi( @11/(byte*) line_cursor#11 )
(byte*) line_cursor#12 ← (byte*) line_cursor#24
(byte*) char_cursor#46 ← (byte*) char_cursor#91
to:@end
@end: scope:[] from @11
@end: scope:[] from @12
SYMBOL TABLE SSA
(label) @10
(label) @11
(label) @12
(label) @begin
(label) @end
(byte*) SCREEN
@ -3467,7 +3501,7 @@ Not culling empty block because it shares successor with its predecessor. (label
Not culling empty block because it shares successor with its predecessor. (label) main::@41
Not culling empty block because it shares successor with its predecessor. (label) main::@42
Culled Empty Block (label) printu::@6
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Succesful SSA optimization Pass2CullEmptyBlocks
Not culling empty block because it shares successor with its predecessor. (label) main::@23
Not culling empty block because it shares successor with its predecessor. (label) main::@24
@ -6196,13 +6230,13 @@ Constant inlined printu::op#16 = (const string) main::op16
Constant inlined main::r#25 = (byte) '-'
Constant inlined print_byte::$4 = (const string) print_byte::hextab#0
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @10 @end main main::@1 main::@23 main::@2 main::@46 main::@24 main::@3 main::@47 main::@25 main::@4 main::@48 main::@26 main::@5 main::@49 main::@50 main::@27 main::@6 main::@51 main::@28 main::@7 main::@52 main::@29 main::@8 main::@53 main::@30 main::@9 main::@54 main::@55 main::@31 main::@10 main::@56 main::@32 main::@11 main::@57 main::@33 main::@12 main::@58 main::@34 main::@13 main::@59 main::@60 main::@35 main::@14 main::@61 main::@36 main::@15 main::@62 main::@37 main::@16 main::@63 main::@38 main::@17 main::@64 main::@65 main::@39 main::@18 main::@66 main::@40 main::@19 main::@67 main::@41 main::@20 main::@68 main::@42 main::@21 main::@69 main::@70 main::@22 main::@return print_ln print_ln::@1 print_ln::@return printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @11 @end main main::@1 main::@23 main::@2 main::@46 main::@24 main::@3 main::@47 main::@25 main::@4 main::@48 main::@26 main::@5 main::@49 main::@50 main::@27 main::@6 main::@51 main::@28 main::@7 main::@52 main::@29 main::@8 main::@53 main::@30 main::@9 main::@54 main::@55 main::@31 main::@10 main::@56 main::@32 main::@11 main::@57 main::@33 main::@12 main::@58 main::@34 main::@13 main::@59 main::@60 main::@35 main::@14 main::@61 main::@36 main::@15 main::@62 main::@37 main::@16 main::@63 main::@38 main::@17 main::@64 main::@65 main::@39 main::@18 main::@66 main::@40 main::@19 main::@67 main::@41 main::@20 main::@68 main::@42 main::@21 main::@69 main::@70 main::@22 main::@return print_ln print_ln::@1 print_ln::@return printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
Added new block during phi lifting main::@71(between main::@70 and main::@1)
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1)
Block Sequence Planned @begin @10 @end main main::@1 main::@23 main::@2 main::@46 main::@24 main::@3 main::@47 main::@25 main::@4 main::@48 main::@26 main::@5 main::@49 main::@50 main::@27 main::@6 main::@51 main::@28 main::@7 main::@52 main::@29 main::@8 main::@53 main::@30 main::@9 main::@54 main::@55 main::@31 main::@10 main::@56 main::@32 main::@11 main::@57 main::@33 main::@12 main::@58 main::@34 main::@13 main::@59 main::@60 main::@35 main::@14 main::@61 main::@36 main::@15 main::@62 main::@37 main::@16 main::@63 main::@38 main::@17 main::@64 main::@65 main::@39 main::@18 main::@66 main::@40 main::@19 main::@67 main::@41 main::@20 main::@68 main::@42 main::@21 main::@69 main::@70 main::@22 main::@return main::@71 print_ln print_ln::@1 print_ln::@return print_ln::@3 printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3
Block Sequence Planned @begin @11 @end main main::@1 main::@23 main::@2 main::@46 main::@24 main::@3 main::@47 main::@25 main::@4 main::@48 main::@26 main::@5 main::@49 main::@50 main::@27 main::@6 main::@51 main::@28 main::@7 main::@52 main::@29 main::@8 main::@53 main::@30 main::@9 main::@54 main::@55 main::@31 main::@10 main::@56 main::@32 main::@11 main::@57 main::@33 main::@12 main::@58 main::@34 main::@13 main::@59 main::@60 main::@35 main::@14 main::@61 main::@36 main::@15 main::@62 main::@37 main::@16 main::@63 main::@38 main::@17 main::@64 main::@65 main::@39 main::@18 main::@66 main::@40 main::@19 main::@67 main::@41 main::@20 main::@68 main::@42 main::@21 main::@69 main::@70 main::@22 main::@return main::@71 print_ln print_ln::@1 print_ln::@return print_ln::@3 printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return print_cls::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @10
Adding NOP phi() at start of @11
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@23
@ -6400,9 +6434,9 @@ Not culling empty block because it shares successor with its predecessor. (label
Not culling empty block because it shares successor with its predecessor. (label) main::@42
Culled Empty Block (label) print_ln::@3
Culled Empty Block (label) print_cls::@3
Block Sequence Planned @begin @10 @end main main::@1 main::@23 main::@2 main::@46 main::@24 main::@3 main::@47 main::@25 main::@4 main::@48 main::@26 main::@5 main::@49 main::@50 main::@27 main::@6 main::@51 main::@28 main::@7 main::@52 main::@29 main::@8 main::@53 main::@30 main::@9 main::@54 main::@55 main::@31 main::@10 main::@56 main::@32 main::@11 main::@57 main::@33 main::@12 main::@58 main::@34 main::@13 main::@59 main::@60 main::@35 main::@14 main::@61 main::@36 main::@15 main::@62 main::@37 main::@16 main::@63 main::@38 main::@17 main::@64 main::@65 main::@39 main::@18 main::@66 main::@40 main::@19 main::@67 main::@41 main::@20 main::@68 main::@42 main::@21 main::@69 main::@70 main::@22 main::@return main::@71 print_ln print_ln::@1 print_ln::@return printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @11 @end main main::@1 main::@23 main::@2 main::@46 main::@24 main::@3 main::@47 main::@25 main::@4 main::@48 main::@26 main::@5 main::@49 main::@50 main::@27 main::@6 main::@51 main::@28 main::@7 main::@52 main::@29 main::@8 main::@53 main::@30 main::@9 main::@54 main::@55 main::@31 main::@10 main::@56 main::@32 main::@11 main::@57 main::@33 main::@12 main::@58 main::@34 main::@13 main::@59 main::@60 main::@35 main::@14 main::@61 main::@36 main::@15 main::@62 main::@37 main::@16 main::@63 main::@38 main::@17 main::@64 main::@65 main::@39 main::@18 main::@66 main::@40 main::@19 main::@67 main::@41 main::@20 main::@68 main::@42 main::@21 main::@69 main::@70 main::@22 main::@return main::@71 print_ln print_ln::@1 print_ln::@return printu printu::@1 printu::@2 printu::@3 printu::@4 printu::@5 printu::@return print_char print_char::@return print_byte print_byte::@1 print_byte::@return print_str print_str::@1 print_str::@return print_str::@2 print_cls print_cls::@1 print_cls::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @10
Adding NOP phi() at start of @11
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@23
@ -6464,14 +6498,14 @@ Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@10
@10: scope:[] from @begin
to:@11
@11: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @10
@end: scope:[] from @11
[3] phi() [ ] ( )
main: scope:[main] from @10
main: scope:[main] from @11
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1
@ -6870,100 +6904,100 @@ print_cls::@return: scope:[print_cls] from print_cls::@1
DOMINATORS
@begin dominated by @begin
@10 dominated by @begin @10
@end dominated by @end @begin @10
main dominated by main @begin @10
main::@1 dominated by main main::@1 @begin @10
main::@23 dominated by main main::@1 @begin main::@23 @10
main::@2 dominated by main main::@1 main::@2 @begin @10
main::@46 dominated by main main::@46 main::@1 main::@2 @begin @10
main::@24 dominated by main main::@46 main::@1 main::@2 @begin main::@24 @10
main::@3 dominated by main main::@46 main::@1 main::@2 main::@3 @begin @10
main::@47 dominated by main main::@46 main::@47 main::@1 main::@2 main::@3 @begin @10
main::@25 dominated by main main::@46 main::@47 main::@1 main::@2 main::@3 @begin main::@25 @10
main::@4 dominated by main main::@46 main::@47 main::@1 main::@2 main::@3 main::@4 @begin @10
main::@48 dominated by main main::@46 main::@48 main::@47 main::@1 main::@2 main::@3 main::@4 @begin @10
main::@26 dominated by main main::@46 main::@48 main::@47 main::@1 main::@2 main::@3 main::@4 @begin main::@26 @10
main::@5 dominated by main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin @10
main::@49 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin @10
main::@50 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin @10 main::@50
main::@27 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin main::@27 @10 main::@50
main::@6 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@50
main::@51 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@51 main::@50
main::@28 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@28 @10 main::@51 main::@50
main::@7 dominated by main::@7 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@51 main::@50
main::@52 dominated by main::@7 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@52 main::@51 main::@50
main::@29 dominated by main::@7 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@29 @10 main::@52 main::@51 main::@50
main::@8 dominated by main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@52 main::@51 main::@50
main::@53 dominated by main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@53 main::@52 main::@51 main::@50
main::@30 dominated by main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@30 @begin @10 main::@53 main::@52 main::@51 main::@50
main::@9 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@53 main::@52 main::@51 main::@50
main::@54 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@53 main::@52 main::@54 main::@51 main::@50
main::@55 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@53 main::@52 main::@55 main::@54 main::@51 main::@50
main::@31 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 @begin @10 main::@53 main::@52 main::@55 main::@54 main::@51 main::@50
main::@10 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@53 main::@52 main::@55 main::@54 main::@10 main::@51 main::@50
main::@56 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@53 main::@52 main::@55 main::@54 main::@10 main::@51 main::@50 main::@56
main::@32 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@32 @10 main::@53 main::@52 main::@55 main::@54 main::@10 main::@51 main::@50 main::@56
main::@11 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@56
main::@57 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56
main::@33 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@33 @begin @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56
main::@12 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56 main::@12
main::@58 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56 main::@12 main::@58
main::@34 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@34 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56 main::@12 main::@58
main::@13 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@58
main::@59 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58
main::@60 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58
main::@35 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@35 main::@60 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58
main::@14 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58 main::@14
main::@61 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@61 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58 main::@14
main::@36 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@36 main::@60 main::@61 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58 main::@14
main::@15 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@61 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@62 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@62 main::@61 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@37 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@37 main::@60 main::@62 main::@61 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@16 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@62 main::@61 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@63 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@63 main::@60 main::@62 main::@61 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@38 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@38 main::@63 main::@60 main::@62 main::@61 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@17 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@63 main::@60 main::@62 main::@61 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@64 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@60 main::@62 main::@61 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@65 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@65 main::@60 main::@62 main::@61 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@39 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@39 main::@64 main::@63 main::@65 main::@60 main::@62 main::@61 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@18 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@65 main::@60 main::@62 main::@61 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@66 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@40 dominated by main::@9 main::@7 main::@8 main::@40 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@19 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@67 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@67 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@41 dominated by main::@9 main::@41 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@67 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@20 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@67 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@68 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@68 main::@67 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@42 dominated by main::@9 main::@42 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@68 main::@67 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@21 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@69 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@70 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@70 main::@64 main::@20 main::@63 main::@66 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@22 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@70 main::@64 main::@20 main::@63 main::@66 main::@22 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@return dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@70 main::@64 main::@20 main::@return main::@63 main::@66 main::@22 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@71 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@71 main::@70 main::@64 main::@20 main::@63 main::@66 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 @10 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
print_ln dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin print_ln @10
print_ln::@1 dominated by print_ln::@1 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin print_ln @10
print_ln::@return dominated by print_ln::@1 main::@49 main main::@46 main::@48 main::@47 print_ln::@return main::@1 main::@2 main::@5 main::@3 main::@4 @begin print_ln @10
printu dominated by main main::@1 main::@2 @begin @10 printu
printu::@1 dominated by main main::@1 main::@2 @begin @10 printu::@1 printu
printu::@2 dominated by main main::@1 main::@2 @begin @10 printu::@1 printu::@2 printu
printu::@3 dominated by main main::@1 main::@2 @begin @10 printu::@1 printu::@3 printu::@2 printu
printu::@4 dominated by main main::@1 main::@2 @begin @10 printu::@1 printu::@3 printu::@2 printu::@4 printu
printu::@5 dominated by main main::@1 main::@2 @begin @10 printu::@1 printu::@3 printu::@2 printu::@5 printu::@4 printu
printu::@return dominated by main main::@1 main::@2 printu::@return @begin @10 printu::@1 printu::@3 printu::@2 printu::@5 printu::@4 printu
print_char dominated by main print_char main::@1 main::@2 @begin @10 printu
print_char::@return dominated by main print_char main::@1 main::@2 print_char::@return @begin @10 printu
print_byte dominated by main main::@1 main::@2 @begin @10 print_byte printu::@1 printu
print_byte::@1 dominated by main main::@1 main::@2 @begin print_byte::@1 @10 print_byte printu::@1 printu
print_byte::@return dominated by main main::@1 main::@2 @begin print_byte::@return print_byte::@1 @10 print_byte printu::@1 printu
print_str dominated by main main::@1 main::@2 @begin @10 print_str printu::@1 printu::@2 printu
print_str::@1 dominated by main main::@1 main::@2 @begin print_str::@1 @10 print_str printu::@1 printu::@2 printu
print_str::@return dominated by main main::@1 main::@2 @begin print_str::@return print_str::@1 @10 print_str printu::@1 printu::@2 printu
print_str::@2 dominated by main main::@1 main::@2 @begin print_str::@1 print_str::@2 @10 print_str printu::@1 printu::@2 printu
print_cls dominated by main @begin @10 print_cls
print_cls::@1 dominated by main @begin @10 print_cls::@1 print_cls
print_cls::@return dominated by main @begin print_cls::@return @10 print_cls::@1 print_cls
@11 dominated by @begin @11
@end dominated by @end @begin @11
main dominated by main @begin @11
main::@1 dominated by main main::@1 @begin @11
main::@23 dominated by main main::@1 @begin main::@23 @11
main::@2 dominated by main main::@1 main::@2 @begin @11
main::@46 dominated by main main::@46 main::@1 main::@2 @begin @11
main::@24 dominated by main main::@46 main::@1 main::@2 @begin main::@24 @11
main::@3 dominated by main main::@46 main::@1 main::@2 main::@3 @begin @11
main::@47 dominated by main main::@46 main::@47 main::@1 main::@2 main::@3 @begin @11
main::@25 dominated by main main::@46 main::@47 main::@1 main::@2 main::@3 @begin main::@25 @11
main::@4 dominated by main main::@46 main::@47 main::@1 main::@2 main::@3 main::@4 @begin @11
main::@48 dominated by main main::@46 main::@48 main::@47 main::@1 main::@2 main::@3 main::@4 @begin @11
main::@26 dominated by main main::@46 main::@48 main::@47 main::@1 main::@2 main::@3 main::@4 @begin main::@26 @11
main::@5 dominated by main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin @11
main::@49 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin @11
main::@50 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin @11 main::@50
main::@27 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin main::@27 @11 main::@50
main::@6 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@50
main::@51 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@51 main::@50
main::@28 dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@28 @11 main::@51 main::@50
main::@7 dominated by main::@7 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@51 main::@50
main::@52 dominated by main::@7 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@52 main::@51 main::@50
main::@29 dominated by main::@7 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@29 @11 main::@52 main::@51 main::@50
main::@8 dominated by main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@52 main::@51 main::@50
main::@53 dominated by main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@51 main::@50
main::@30 dominated by main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@30 @begin @11 main::@53 main::@52 main::@51 main::@50
main::@9 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@51 main::@50
main::@54 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@54 main::@51 main::@50
main::@55 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@54 main::@51 main::@50
main::@31 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@31 @begin @11 main::@53 main::@52 main::@55 main::@54 main::@51 main::@50
main::@10 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@54 main::@10 main::@51 main::@50
main::@56 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@54 main::@10 main::@51 main::@50 main::@56
main::@32 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@32 @11 main::@53 main::@52 main::@55 main::@54 main::@10 main::@51 main::@50 main::@56
main::@11 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@56
main::@57 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56
main::@33 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 main::@33 @begin @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56
main::@12 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56 main::@12
main::@58 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56 main::@12 main::@58
main::@34 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@34 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@56 main::@12 main::@58
main::@13 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@58
main::@59 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58
main::@60 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58
main::@35 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@35 main::@60 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58
main::@14 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58 main::@14
main::@61 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58 main::@14
main::@36 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@36 main::@60 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@58 main::@14
main::@15 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@62 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@37 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@37 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@16 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@63 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@63 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@38 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@38 main::@63 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@17 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@63 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@64 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@65 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@65 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@39 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@39 main::@64 main::@63 main::@65 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@18 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@65 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@66 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@40 dominated by main::@9 main::@7 main::@8 main::@40 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@19 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@67 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@67 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@41 dominated by main::@9 main::@41 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@67 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@20 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@67 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@68 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@68 main::@67 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@42 dominated by main::@9 main::@42 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@60 main::@62 main::@61 main::@68 main::@67 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@21 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@69 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@64 main::@20 main::@63 main::@66 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@70 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@70 main::@64 main::@20 main::@63 main::@66 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@22 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@70 main::@64 main::@20 main::@63 main::@66 main::@22 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@return dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@70 main::@64 main::@20 main::@return main::@63 main::@66 main::@22 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
main::@71 dominated by main::@9 main::@7 main::@8 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@6 main::@3 main::@4 @begin main::@71 main::@70 main::@64 main::@20 main::@63 main::@66 main::@65 main::@21 main::@60 main::@62 main::@61 main::@68 main::@67 main::@69 @11 main::@53 main::@52 main::@55 main::@11 main::@54 main::@10 main::@51 main::@50 main::@17 main::@16 main::@19 main::@18 main::@57 main::@13 main::@56 main::@12 main::@59 main::@15 main::@58 main::@14
print_ln dominated by main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin print_ln @11
print_ln::@1 dominated by print_ln::@1 main::@49 main main::@46 main::@48 main::@47 main::@1 main::@2 main::@5 main::@3 main::@4 @begin print_ln @11
print_ln::@return dominated by print_ln::@1 main::@49 main main::@46 main::@48 main::@47 print_ln::@return main::@1 main::@2 main::@5 main::@3 main::@4 @begin print_ln @11
printu dominated by main main::@1 main::@2 @begin @11 printu
printu::@1 dominated by main main::@1 main::@2 @begin @11 printu::@1 printu
printu::@2 dominated by main main::@1 main::@2 @begin @11 printu::@1 printu::@2 printu
printu::@3 dominated by main main::@1 main::@2 @begin @11 printu::@1 printu::@3 printu::@2 printu
printu::@4 dominated by main main::@1 main::@2 @begin @11 printu::@1 printu::@3 printu::@2 printu::@4 printu
printu::@5 dominated by main main::@1 main::@2 @begin @11 printu::@1 printu::@3 printu::@2 printu::@5 printu::@4 printu
printu::@return dominated by main main::@1 main::@2 printu::@return @begin @11 printu::@1 printu::@3 printu::@2 printu::@5 printu::@4 printu
print_char dominated by main print_char main::@1 main::@2 @begin @11 printu
print_char::@return dominated by main print_char main::@1 main::@2 print_char::@return @begin @11 printu
print_byte dominated by main main::@1 main::@2 @begin @11 print_byte printu::@1 printu
print_byte::@1 dominated by main main::@1 main::@2 @begin print_byte::@1 @11 print_byte printu::@1 printu
print_byte::@return dominated by main main::@1 main::@2 @begin print_byte::@return print_byte::@1 @11 print_byte printu::@1 printu
print_str dominated by main main::@1 main::@2 @begin @11 print_str printu::@1 printu::@2 printu
print_str::@1 dominated by main main::@1 main::@2 @begin print_str::@1 @11 print_str printu::@1 printu::@2 printu
print_str::@return dominated by main main::@1 main::@2 @begin print_str::@return print_str::@1 @11 print_str printu::@1 printu::@2 printu
print_str::@2 dominated by main main::@1 main::@2 @begin print_str::@1 print_str::@2 @11 print_str printu::@1 printu::@2 printu
print_cls dominated by main @begin @11 print_cls
print_cls::@1 dominated by main @begin @11 print_cls::@1 print_cls
print_cls::@return dominated by main @begin print_cls::@return @11 print_cls::@1 print_cls
NATURAL LOOPS
Found back edge: Loop head: main::@22 tails: main::@22 blocks: null
@ -7262,17 +7296,17 @@ INITIAL ASM
.label line_cursor = $18
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
b10_from_bbegin:
jmp b10
//SEG4 @10
b10:
//SEG3 [1] phi from @begin to @11 [phi:@begin->@11]
b11_from_bbegin:
jmp b11
//SEG4 @11
b11:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @10 to main [phi:@10->main]
main_from_b10:
//SEG6 [4] phi from @11 to main [phi:@11->main]
main_from_b11:
jsr main
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
bend_from_b10:
//SEG7 [3] phi from @11 to @end [phi:@11->@end]
bend_from_b11:
jmp bend
//SEG8 @end
bend:
@ -8918,17 +8952,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label line_cursor = 4
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
b10_from_bbegin:
jmp b10
//SEG4 @10
b10:
//SEG3 [1] phi from @begin to @11 [phi:@begin->@11]
b11_from_bbegin:
jmp b11
//SEG4 @11
b11:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @10 to main [phi:@10->main]
main_from_b10:
//SEG6 [4] phi from @11 to main [phi:@11->main]
main_from_b11:
jsr main
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
bend_from_b10:
//SEG7 [3] phi from @11 to @end [phi:@11->@end]
bend_from_b11:
jmp bend
//SEG8 @end
bend:
@ -10224,7 +10258,7 @@ print_cls: {
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b10
Removing instruction jmp b11
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b23
@ -10318,9 +10352,9 @@ Replacing label b1_from_b2 with b1
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b10_from_bbegin:
Removing instruction main_from_b10:
Removing instruction bend_from_b10:
Removing instruction b11_from_bbegin:
Removing instruction main_from_b11:
Removing instruction bend_from_b11:
Removing instruction b23_from_b1:
Removing instruction b2_from_b23:
Removing instruction b24_from_b46:
@ -10379,7 +10413,7 @@ Removing instruction b1_from_print_str:
Removing instruction b1_from_b2:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b10:
Removing instruction b11:
Removing instruction bend:
Removing instruction print_cls_from_main:
Removing instruction b1_from_main:
@ -10498,7 +10532,7 @@ Removing instruction jmp b1
Succesful ASM optimization Pass5NextJumpElimination
FINAL SYMBOL TABLE
(label) @10
(label) @11
(label) @begin
(label) @end
(byte*) SCREEN
@ -10794,12 +10828,12 @@ Score: 15772
.label char_cursor = 9
.label line_cursor = 4
//SEG2 @begin
//SEG3 [1] phi from @begin to @10 [phi:@begin->@10]
//SEG4 @10
//SEG3 [1] phi from @begin to @11 [phi:@begin->@11]
//SEG4 @11
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @10 to main [phi:@10->main]
//SEG6 [4] phi from @11 to main [phi:@11->main]
jsr main
//SEG7 [3] phi from @10 to @end [phi:@10->@end]
//SEG7 [3] phi from @11 to @end [phi:@11->@end]
//SEG8 @end
//SEG9 main
main: {

View File

@ -1,4 +1,4 @@
(label) @10
(label) @11
(label) @begin
(label) @end
(byte*) SCREEN

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@17
@17: scope:[] from @begin
to:@18
@18: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @17
@end: scope:[] from @18
[3] phi() [ ] ( )
main: scope:[main] from @17
main: scope:[main] from @18
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1

View File

@ -131,6 +131,12 @@ void print_word(word w) {
print_byte(<w);
}
// Print a dword as HEX
void print_dword(dword dw) {
print_word(>dw);
print_word(<dw);
}
// Print a byte as HEX
void print_byte(byte b) {
// Table of hexadecimal digits
@ -354,6 +360,14 @@ proc (void()) print_word((word) print_word::w)
print_word::@return:
return
endproc // print_word()
proc (void()) print_dword((dword) print_dword::dw)
(word~) print_dword::$0 ← > (dword) print_dword::dw
(void~) print_dword::$1 ← call print_word (word~) print_dword::$0
(word~) print_dword::$2 ← < (dword) print_dword::dw
(void~) print_dword::$3 ← call print_word (word~) print_dword::$2
print_dword::@return:
return
endproc // print_dword()
proc (void()) print_byte((byte) print_byte::b)
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -818,6 +832,13 @@ SYMBOLS
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(void()) print_dword((dword) print_dword::dw)
(word~) print_dword::$0
(void~) print_dword::$1
(word~) print_dword::$2
(void~) print_dword::$3
(label) print_dword::@return
(dword) print_dword::dw
(void()) print_ln()
(byte*~) print_ln::$0
(boolean~) print_ln::$1
@ -1047,6 +1068,17 @@ print_word::@return: scope:[print_word] from print_word
to:@return
@5: scope:[] from @4
to:@6
print_dword: scope:[print_dword] from
(word~) print_dword::$0 ← > (dword) print_dword::dw
(void~) print_dword::$1 ← call print_word (word~) print_dword::$0
(word~) print_dword::$2 ← < (dword) print_dword::dw
(void~) print_dword::$3 ← call print_word (word~) print_dword::$2
to:print_dword::@return
print_dword::@return: scope:[print_dword] from print_dword
return
to:@return
@6: scope:[] from @5
to:@7
print_byte: scope:[print_byte] from
(byte[]) print_byte::hextab ← (string) "0123456789abcdef"
(byte~) print_byte::$0 ← (byte) print_byte::b >> (byte/signed byte/word/signed word/dword/signed dword) 4
@ -1057,8 +1089,8 @@ print_byte: scope:[print_byte] from
print_byte::@return: scope:[print_byte] from print_byte
return
to:@return
@6: scope:[] from @5
to:@7
@7: scope:[] from @6
to:@8
print_char: scope:[print_char] from
*((byte*) char_cursor) ← (byte) print_char::ch
(byte*) char_cursor ← ++ (byte*) char_cursor
@ -1066,8 +1098,8 @@ print_char: scope:[print_char] from
print_char::@return: scope:[print_char] from print_char
return
to:@return
@7: scope:[] from @6
to:@8
@8: scope:[] from @7
to:@9
print_cls: scope:[print_cls] from
(byte*) print_cls::sc ← (byte*) SCREEN
to:print_cls::@1
@ -1085,9 +1117,9 @@ print_cls::@2: scope:[print_cls] from print_cls::@1
print_cls::@return: scope:[print_cls] from print_cls::@2
return
to:@return
@8: scope:[] from @7
@9: scope:[] from @8
(byte) rem8u ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@9
to:@10
div8u: scope:[div8u] from
(byte) div8u::rem ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) div8u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -1133,9 +1165,9 @@ div8u::@return: scope:[div8u] from div8u::@6 div8u::@7
to:@return
div8u::@7: scope:[div8u] from
to:div8u::@return
@9: scope:[] from @8
@10: scope:[] from @9
(word) rem16u ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@10
to:@11
div16u: scope:[div16u] from
(word) div16u::rem ← (byte/signed byte/word/signed word/dword/signed dword) 0
(word) div16u::quotient ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -1182,9 +1214,9 @@ div16u::@return: scope:[div16u] from div16u::@6 div16u::@7
to:@return
div16u::@7: scope:[div16u] from
to:div16u::@return
@10: scope:[] from @9
@11: scope:[] from @10
(signed byte) rem8s ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@11
to:@12
div8s: scope:[div8s] from
(byte) div8s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 0
(byte) div8s::dividendu ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -1256,9 +1288,9 @@ div8s::@13: scope:[div8s] from
to:div8s::@5
div8s::@14: scope:[div8s] from
to:div8s::@6
@11: scope:[] from @10
@12: scope:[] from @11
(signed word) rem16s ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@12
to:@13
div16s: scope:[div16s] from
(byte) div16s::neg ← (byte/signed byte/word/signed word/dword/signed dword) 0
(word) div16s::dividendu ← (byte/signed byte/word/signed word/dword/signed dword) 0
@ -1330,8 +1362,8 @@ div16s::@13: scope:[div16s] from
to:div16s::@5
div16s::@14: scope:[div16s] from
to:div16s::@6
@12: scope:[] from @11
to:@13
@13: scope:[] from @12
to:@14
main: scope:[main] from
(void~) main::$0 ← call print_cls
(void~) main::$1 ← call test_8u
@ -1342,8 +1374,8 @@ main: scope:[main] from
main::@return: scope:[main] from main
return
to:@return
@13: scope:[] from @12
to:@14
@14: scope:[] from @13
to:@15
test_8u: scope:[test_8u] from
(byte[]) test_8u::dividends ← { (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255, (byte/word/signed word/dword/signed dword) 255 }
(byte[]) test_8u::divisors ← { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 13, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 19 }
@ -1372,8 +1404,8 @@ test_8u::@2: scope:[test_8u] from test_8u::@1
test_8u::@return: scope:[test_8u] from test_8u::@2
return
to:@return
@14: scope:[] from @13
to:@15
@15: scope:[] from @14
to:@16
test_16u: scope:[test_16u] from
(word[]) test_16u::dividends ← { (word/dword/signed dword) 65535, (word/dword/signed dword) 65535, (word/dword/signed dword) 65535, (word/dword/signed dword) 65535, (word/dword/signed dword) 65535, (word/dword/signed dword) 65535 }
(word[]) test_16u::divisors ← { (byte/signed byte/word/signed word/dword/signed dword) 5, (byte/signed byte/word/signed word/dword/signed dword) 7, (byte/signed byte/word/signed word/dword/signed dword) 11, (byte/signed byte/word/signed word/dword/signed dword) 13, (byte/signed byte/word/signed word/dword/signed dword) 17, (byte/signed byte/word/signed word/dword/signed dword) 19 }
@ -1402,8 +1434,8 @@ test_16u::@2: scope:[test_16u] from test_16u::@1
test_16u::@return: scope:[test_16u] from test_16u::@2
return
to:@return
@15: scope:[] from @14
to:@16
@16: scope:[] from @15
to:@17
test_8s: scope:[test_8s] from
(signed byte/signed word/signed dword~) test_8s::$0 ← - (byte/signed byte/word/signed word/dword/signed dword) 127
(signed byte/signed word/signed dword~) test_8s::$1 ← - (byte/signed byte/word/signed word/dword/signed dword) 127
@ -1435,8 +1467,8 @@ test_8s::@2: scope:[test_8s] from test_8s::@1
test_8s::@return: scope:[test_8s] from test_8s::@2
return
to:@return
@16: scope:[] from @15
to:@17
@17: scope:[] from @16
to:@18
test_16s: scope:[test_16s] from
(signed word/signed dword~) test_16s::$0 ← - (word/signed word/dword/signed dword) 32767
(signed word/signed dword~) test_16s::$1 ← - (word/signed word/dword/signed dword) 32767
@ -1471,11 +1503,12 @@ test_16s::@2: scope:[test_16s] from test_16s::@1
test_16s::@return: scope:[test_16s] from test_16s::@2
return
to:@return
@17: scope:[] from @16
@18: scope:[] from @17
call main
to:@end
@end: scope:[] from @17
@end: scope:[] from @18
Removing unused procedure print_dword
Eliminating unused variable - keeping the call (void~) print_sword::$5
Eliminating unused variable - keeping the call (void~) print_sword::$2
Eliminating unused variable - keeping the call (void~) print_sbyte::$5
@ -1546,6 +1579,7 @@ Removing empty block @4
Removing empty block @5
Removing empty block @6
Removing empty block @7
Removing empty block @8
Removing empty block div8u::@7
Removing empty block div16u::@7
Removing empty block div8s::@8
@ -1560,14 +1594,14 @@ Removing empty block div16s::@12
Removing empty block div16s::@6
Removing empty block div16s::@13
Removing empty block div16s::@14
Removing empty block @12
Removing empty block @13
Removing empty block test_8u::@2
Removing empty block @14
Removing empty block test_16u::@2
Removing empty block test_8u::@2
Removing empty block @15
Removing empty block test_8s::@2
Removing empty block test_16u::@2
Removing empty block @16
Removing empty block test_8s::@2
Removing empty block @17
Removing empty block test_16s::@2
PROCEDURE MODIFY VARIABLE ANALYSIS
print_str modifies char_cursor
@ -1624,7 +1658,7 @@ CONTROL FLOW GRAPH SSA WITH ASSIGNMENT CALL & RETURN
(byte*) SCREEN#0 ← ((byte*)) (word/signed word/dword/signed dword) 1024
(byte*) line_cursor#0 ← (byte*) SCREEN#0
(byte*) char_cursor#0 ← (byte*) line_cursor#0
to:@8
to:@9
print_str: scope:[print_str] from test_16s::@4 test_16s::@6 test_16s::@8 test_16u::@4 test_16u::@6 test_16u::@8 test_8s::@4 test_8s::@6 test_8s::@8 test_8u::@4 test_8u::@6 test_8u::@8
(byte*) char_cursor#140 ← phi( test_16s::@4/(byte*) char_cursor#54 test_16s::@6/(byte*) char_cursor#56 test_16s::@8/(byte*) char_cursor#58 test_16u::@4/(byte*) char_cursor#36 test_16u::@6/(byte*) char_cursor#38 test_16u::@8/(byte*) char_cursor#40 test_8s::@4/(byte*) char_cursor#45 test_8s::@6/(byte*) char_cursor#47 test_8s::@8/(byte*) char_cursor#49 test_8u::@4/(byte*) char_cursor#27 test_8u::@6/(byte*) char_cursor#29 test_8u::@8/(byte*) char_cursor#31 )
(byte*) print_str::str#15 ← phi( test_16s::@4/(byte*) print_str::str#10 test_16s::@6/(byte*) print_str::str#11 test_16s::@8/(byte*) print_str::str#12 test_16u::@4/(byte*) print_str::str#4 test_16u::@6/(byte*) print_str::str#5 test_16u::@8/(byte*) print_str::str#6 test_8s::@4/(byte*) print_str::str#7 test_8s::@6/(byte*) print_str::str#8 test_8s::@8/(byte*) print_str::str#9 test_8u::@4/(byte*) print_str::str#1 test_8u::@6/(byte*) print_str::str#2 test_8u::@8/(byte*) print_str::str#3 )
@ -1824,11 +1858,11 @@ print_cls::@return: scope:[print_cls] from print_cls::@2
(byte*) char_cursor#20 ← (byte*) char_cursor#82
return
to:@return
@8: scope:[] from @begin
@9: scope:[] from @begin
(byte*) char_cursor#154 ← phi( @begin/(byte*) char_cursor#0 )
(byte*) line_cursor#61 ← phi( @begin/(byte*) line_cursor#0 )
(byte) rem8u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@9
to:@10
div8u: scope:[div8u] from div8s::@4 test_8u::@1
(byte) div8u::divisor#6 ← phi( div8s::@4/(byte) div8u::divisor#0 test_8u::@1/(byte) div8u::divisor#1 )
(byte) div8u::dividend#5 ← phi( div8s::@4/(byte) div8u::dividend#1 test_8u::@1/(byte) div8u::dividend#2 )
@ -1904,12 +1938,12 @@ div8u::@return: scope:[div8u] from div8u::@6
(byte) rem8u#2 ← (byte) rem8u#13
return
to:@return
@9: scope:[] from @8
(byte) rem8u#50 ← phi( @8/(byte) rem8u#0 )
(byte*) char_cursor#153 ← phi( @8/(byte*) char_cursor#154 )
(byte*) line_cursor#56 ← phi( @8/(byte*) line_cursor#61 )
@10: scope:[] from @9
(byte) rem8u#50 ← phi( @9/(byte) rem8u#0 )
(byte*) char_cursor#153 ← phi( @9/(byte*) char_cursor#154 )
(byte*) line_cursor#56 ← phi( @9/(byte*) line_cursor#61 )
(word) rem16u#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@10
to:@11
div16u: scope:[div16u] from div16s::@4 test_16u::@1
(word) div16u::divisor#6 ← phi( div16s::@4/(word) div16u::divisor#0 test_16u::@1/(word) div16u::divisor#1 )
(word) div16u::dividend#5 ← phi( div16s::@4/(word) div16u::dividend#1 test_16u::@1/(word) div16u::dividend#2 )
@ -1986,13 +2020,13 @@ div16u::@return: scope:[div16u] from div16u::@6
(word) rem16u#2 ← (word) rem16u#13
return
to:@return
@10: scope:[] from @9
(word) rem16u#45 ← phi( @9/(word) rem16u#0 )
(byte) rem8u#47 ← phi( @9/(byte) rem8u#50 )
(byte*) char_cursor#148 ← phi( @9/(byte*) char_cursor#153 )
(byte*) line_cursor#51 ← phi( @9/(byte*) line_cursor#56 )
@11: scope:[] from @10
(word) rem16u#45 ← phi( @10/(word) rem16u#0 )
(byte) rem8u#47 ← phi( @10/(byte) rem8u#50 )
(byte*) char_cursor#148 ← phi( @10/(byte*) char_cursor#153 )
(byte*) line_cursor#51 ← phi( @10/(byte*) line_cursor#56 )
(signed byte) rem8s#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@11
to:@12
div8s: scope:[div8s] from test_8s::@1
(byte) rem8u#55 ← phi( test_8s::@1/(byte) rem8u#34 )
(signed byte) div8s::divisor#6 ← phi( test_8s::@1/(signed byte) div8s::divisor#0 )
@ -2097,14 +2131,14 @@ div8s::@return: scope:[div8s] from div8s::@11 div8s::@5
(signed byte) rem8s#3 ← (signed byte) rem8s#9
return
to:@return
@11: scope:[] from @10
(signed byte) rem8s#26 ← phi( @10/(signed byte) rem8s#0 )
(word) rem16u#44 ← phi( @10/(word) rem16u#45 )
(byte) rem8u#45 ← phi( @10/(byte) rem8u#47 )
(byte*) char_cursor#147 ← phi( @10/(byte*) char_cursor#148 )
(byte*) line_cursor#50 ← phi( @10/(byte*) line_cursor#51 )
@12: scope:[] from @11
(signed byte) rem8s#26 ← phi( @11/(signed byte) rem8s#0 )
(word) rem16u#44 ← phi( @11/(word) rem16u#45 )
(byte) rem8u#45 ← phi( @11/(byte) rem8u#47 )
(byte*) char_cursor#147 ← phi( @11/(byte*) char_cursor#148 )
(byte*) line_cursor#50 ← phi( @11/(byte*) line_cursor#51 )
(signed word) rem16s#0 ← (byte/signed byte/word/signed word/dword/signed dword) 0
to:@17
to:@18
div16s: scope:[div16s] from test_16s::@1
(word) rem16u#54 ← phi( test_16s::@1/(word) rem16u#33 )
(signed word) div16s::divisor#6 ← phi( test_16s::@1/(signed word) div16s::divisor#0 )
@ -2209,13 +2243,13 @@ div16s::@return: scope:[div16s] from div16s::@11 div16s::@5
(signed word) rem16s#3 ← (signed word) rem16s#9
return
to:@return
main: scope:[main] from @17
(signed word) rem16s#29 ← phi( @17/(signed word) rem16s#20 )
(signed byte) rem8s#29 ← phi( @17/(signed byte) rem8s#21 )
(word) rem16u#47 ← phi( @17/(word) rem16u#35 )
(byte) rem8u#39 ← phi( @17/(byte) rem8u#36 )
(byte*) char_cursor#134 ← phi( @17/(byte*) char_cursor#139 )
(byte*) line_cursor#40 ← phi( @17/(byte*) line_cursor#45 )
main: scope:[main] from @18
(signed word) rem16s#29 ← phi( @18/(signed word) rem16s#20 )
(signed byte) rem8s#29 ← phi( @18/(signed byte) rem8s#21 )
(word) rem16u#47 ← phi( @18/(word) rem16u#35 )
(byte) rem8u#39 ← phi( @18/(byte) rem8u#36 )
(byte*) char_cursor#134 ← phi( @18/(byte*) char_cursor#139 )
(byte*) line_cursor#40 ← phi( @18/(byte*) line_cursor#45 )
call print_cls param-assignment
to:main::@1
main::@1: scope:[main] from main
@ -2821,22 +2855,22 @@ test_16s::@return: scope:[test_16s] from test_16s::@11
(byte*) line_cursor#18 ← (byte*) line_cursor#37
return
to:@return
@17: scope:[] from @11
(signed word) rem16s#20 ← phi( @11/(signed word) rem16s#0 )
(signed byte) rem8s#21 ← phi( @11/(signed byte) rem8s#26 )
(word) rem16u#35 ← phi( @11/(word) rem16u#44 )
(byte) rem8u#36 ← phi( @11/(byte) rem8u#45 )
(byte*) char_cursor#139 ← phi( @11/(byte*) char_cursor#147 )
(byte*) line_cursor#45 ← phi( @11/(byte*) line_cursor#50 )
@18: scope:[] from @12
(signed word) rem16s#20 ← phi( @12/(signed word) rem16s#0 )
(signed byte) rem8s#21 ← phi( @12/(signed byte) rem8s#26 )
(word) rem16u#35 ← phi( @12/(word) rem16u#44 )
(byte) rem8u#36 ← phi( @12/(byte) rem8u#45 )
(byte*) char_cursor#139 ← phi( @12/(byte*) char_cursor#147 )
(byte*) line_cursor#45 ← phi( @12/(byte*) line_cursor#50 )
call main param-assignment
to:@18
@18: scope:[] from @17
(signed word) rem16s#15 ← phi( @17/(signed word) rem16s#5 )
(signed byte) rem8s#15 ← phi( @17/(signed byte) rem8s#5 )
(word) rem16u#26 ← phi( @17/(word) rem16u#7 )
(byte) rem8u#26 ← phi( @17/(byte) rem8u#7 )
(byte*) char_cursor#125 ← phi( @17/(byte*) char_cursor#26 )
(byte*) line_cursor#38 ← phi( @17/(byte*) line_cursor#10 )
to:@19
@19: scope:[] from @18
(signed word) rem16s#15 ← phi( @18/(signed word) rem16s#5 )
(signed byte) rem8s#15 ← phi( @18/(signed byte) rem8s#5 )
(word) rem16u#26 ← phi( @18/(word) rem16u#7 )
(byte) rem8u#26 ← phi( @18/(byte) rem8u#7 )
(byte*) char_cursor#125 ← phi( @18/(byte*) char_cursor#26 )
(byte*) line_cursor#38 ← phi( @18/(byte*) line_cursor#10 )
(byte*) line_cursor#19 ← (byte*) line_cursor#38
(byte*) char_cursor#63 ← (byte*) char_cursor#125
(byte) rem8u#12 ← (byte) rem8u#26
@ -2844,14 +2878,14 @@ test_16s::@return: scope:[test_16s] from test_16s::@11
(signed byte) rem8s#8 ← (signed byte) rem8s#15
(signed word) rem16s#8 ← (signed word) rem16s#15
to:@end
@end: scope:[] from @18
@end: scope:[] from @19
SYMBOL TABLE SSA
(label) @10
(label) @11
(label) @17
(label) @12
(label) @18
(label) @8
(label) @19
(label) @9
(label) @begin
(label) @end
@ -4880,18 +4914,18 @@ Culled Empty Block (label) print_sbyte::@3
Culled Empty Block (label) print_word::@2
Culled Empty Block (label) print_byte::@2
Culled Empty Block (label) print_cls::@2
Culled Empty Block (label) @8
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Culled Empty Block (label) div8s::@1
Culled Empty Block (label) div8s::@3
Culled Empty Block (label) div8s::@11
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Culled Empty Block (label) div16s::@1
Culled Empty Block (label) div16s::@3
Culled Empty Block (label) div16s::@11
Culled Empty Block (label) main::@5
Culled Empty Block (label) @18
Culled Empty Block (label) @19
Succesful SSA optimization Pass2CullEmptyBlocks
Not aliassing across scopes: char_cursor#126 char_cursor#17
Not aliassing across scopes: print_sword::w#5 print_sword::w#1
@ -5157,7 +5191,7 @@ Constant inlined print_str::str#5 = (const string) test_16u::str1
Constant inlined div8u::rem#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Constant inlined rem8u#0 = (byte/signed byte/word/signed word/dword/signed dword) 0
Succesful SSA optimization Pass2ConstantInlining
Block Sequence Planned @begin @17 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return print_ln print_ln::@1 print_ln::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@return div16s::@5 div16u div16u::@1 div16u::@4 div16u::@2 div16u::@5 div16u::@3 div16u::@6 div16u::@return test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@return div8s::@5 div8u div8u::@1 div8u::@4 div8u::@2 div8u::@5 div8u::@3 div8u::@6 div8u::@return test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @18 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return print_ln print_ln::@1 print_ln::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@return div16s::@5 div16u div16u::@1 div16u::@4 div16u::@2 div16u::@5 div16u::@3 div16u::@6 div16u::@return test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@return div8s::@5 div8u div8u::@1 div8u::@4 div8u::@2 div8u::@5 div8u::@3 div8u::@6 div8u::@return test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return print_cls print_cls::@1 print_cls::@return
Added new block during phi lifting test_16s::@12(between test_16s::@11 and test_16s::@1)
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Added new block during phi lifting print_sword::@5(between print_sword and print_sword::@1)
@ -5180,9 +5214,9 @@ Added new block during phi lifting div8u::@10(between div8u::@2 and div8u::@3)
Added new block during phi lifting test_16u::@12(between test_16u::@11 and test_16u::@1)
Added new block during phi lifting test_8u::@12(between test_8u::@11 and test_8u::@1)
Added new block during phi lifting print_cls::@3(between print_cls::@1 and print_cls::@1)
Block Sequence Planned @begin @17 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return test_16s::@12 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_sword::@5 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@18 div16s::@return div16s::@5 div16s::@17 div16s::@16 div16u div16u::@1 div16u::@4 div16u::@2 div16u::@5 div16u::@3 div16u::@6 div16u::@return div16u::@8 div16u::@10 div16u::@9 test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return test_8s::@12 print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return print_sbyte::@5 div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@18 div8s::@return div8s::@5 div8s::@17 div8s::@16 div8u div8u::@1 div8u::@4 div8u::@2 div8u::@5 div8u::@3 div8u::@6 div8u::@return div8u::@8 div8u::@10 div8u::@9 test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_16u::@12 test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return test_8u::@12 print_cls print_cls::@1 print_cls::@return print_cls::@3
Block Sequence Planned @begin @18 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return test_16s::@12 print_ln print_ln::@1 print_ln::@return print_ln::@3 print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_sword::@5 print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@18 div16s::@return div16s::@5 div16s::@17 div16s::@16 div16u div16u::@1 div16u::@4 div16u::@2 div16u::@5 div16u::@3 div16u::@6 div16u::@return div16u::@8 div16u::@10 div16u::@9 test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return test_8s::@12 print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return print_sbyte::@5 div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@18 div8s::@return div8s::@5 div8s::@17 div8s::@16 div8u div8u::@1 div8u::@4 div8u::@2 div8u::@5 div8u::@3 div8u::@6 div8u::@return div8u::@8 div8u::@10 div8u::@9 test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_16u::@12 test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return test_8u::@12 print_cls print_cls::@1 print_cls::@return print_cls::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @17
Adding NOP phi() at start of @18
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
@ -5379,9 +5413,9 @@ Culled Empty Block (label) div8u::@10
Culled Empty Block (label) div8u::@9
Culled Empty Block (label) test_16u::@12
Culled Empty Block (label) print_cls::@3
Block Sequence Planned @begin @17 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return print_ln print_ln::@1 print_ln::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@18 div16s::@return div16s::@5 div16s::@17 div16s::@16 div16u div16u::@1 div16u::@4 div16u::@2 div16u::@5 div16u::@3 div16u::@6 div16u::@return test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@18 div8s::@return div8s::@5 div8s::@17 div8s::@16 div8u div8u::@1 div8u::@4 div8u::@2 div8u::@5 div8u::@3 div8u::@6 div8u::@return test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return test_8u::@12 print_cls print_cls::@1 print_cls::@return
Block Sequence Planned @begin @18 @end main main::@1 main::@2 main::@3 main::@4 main::@return test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 test_16s::@9 test_16s::@10 test_16s::@11 test_16s::@return print_ln print_ln::@1 print_ln::@return print_sword print_sword::@2 print_sword::@4 print_sword::@1 print_sword::@return print_word print_word::@1 print_word::@return print_byte print_byte::@1 print_byte::@return print_char print_char::@return print_str print_str::@1 print_str::@return print_str::@2 div16s div16s::@7 div16s::@2 div16s::@9 div16s::@4 div16s::@15 div16s::@18 div16s::@return div16s::@5 div16s::@17 div16s::@16 div16u div16u::@1 div16u::@4 div16u::@2 div16u::@5 div16u::@3 div16u::@6 div16u::@return test_8s test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7 test_8s::@8 test_8s::@9 test_8s::@10 test_8s::@11 test_8s::@return print_sbyte print_sbyte::@2 print_sbyte::@4 print_sbyte::@1 print_sbyte::@return div8s div8s::@7 div8s::@2 div8s::@9 div8s::@4 div8s::@15 div8s::@18 div8s::@return div8s::@5 div8s::@17 div8s::@16 div8u div8u::@1 div8u::@4 div8u::@2 div8u::@5 div8u::@3 div8u::@6 div8u::@return test_16u test_16u::@1 test_16u::@3 test_16u::@4 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@9 test_16u::@10 test_16u::@11 test_16u::@return test_8u test_8u::@1 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@return test_8u::@12 print_cls print_cls::@1 print_cls::@return
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @17
Adding NOP phi() at start of @18
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
@ -5439,14 +5473,14 @@ Propagating live ranges...
FINAL CONTROL FLOW GRAPH
@begin: scope:[] from
[0] phi() [ ] ( )
to:@17
@17: scope:[] from @begin
to:@18
@18: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @17
@end: scope:[] from @18
[3] phi() [ ] ( )
main: scope:[main] from @17
main: scope:[main] from @18
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1
@ -5983,129 +6017,129 @@ print_cls::@return: scope:[print_cls] from print_cls::@1
DOMINATORS
@begin dominated by @begin
@17 dominated by @17 @begin
@end dominated by @17 @end @begin
main dominated by @17 main @begin
main::@1 dominated by main::@1 @17 main @begin
main::@2 dominated by main::@1 main::@2 @17 main @begin
main::@3 dominated by main::@1 main::@2 main::@3 @17 main @begin
main::@4 dominated by main::@1 main::@2 main::@3 main::@4 @17 main @begin
main::@return dominated by main::@1 main::@2 main::@3 main::@4 main::@return @17 main @begin
test_16s dominated by main::@1 main::@2 main::@3 main::@4 @17 test_16s main @begin
test_16s::@1 dominated by main::@1 main::@2 main::@3 main::@4 @17 test_16s test_16s::@1 main @begin
test_16s::@3 dominated by main::@1 main::@2 main::@3 main::@4 @17 test_16s test_16s::@1 test_16s::@3 main @begin
test_16s::@4 dominated by main::@1 main::@2 main::@3 main::@4 @17 test_16s test_16s::@1 test_16s::@3 test_16s::@4 main @begin
test_16s::@5 dominated by main::@1 main::@2 main::@3 main::@4 @17 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 main @begin
test_16s::@6 dominated by main::@1 main::@2 main::@3 main::@4 @17 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 main @begin
test_16s::@7 dominated by main::@1 main::@2 main::@3 main::@4 @17 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 main @begin
test_16s::@8 dominated by main::@1 main::@2 main::@3 main::@4 @17 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main @begin
test_16s::@9 dominated by main::@1 main::@2 main::@3 main::@4 @17 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin
test_16s::@10 dominated by main::@1 main::@2 main::@3 main::@4 @17 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@10
test_16s::@11 dominated by main::@1 main::@2 main::@3 main::@4 @17 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@11 test_16s::@10
test_16s::@return dominated by main::@1 main::@2 main::@3 main::@4 test_16s::@return @17 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@11 test_16s::@10
print_ln dominated by main::@1 print_ln @17 main @begin
print_ln::@1 dominated by main::@1 print_ln @17 print_ln::@1 main @begin
print_ln::@return dominated by print_ln::@return main::@1 print_ln @17 print_ln::@1 main @begin
print_sword dominated by main::@1 main::@2 main::@3 main::@4 @17 test_16s print_sword test_16s::@1 test_16s::@3 main @begin
print_sword::@2 dominated by main::@1 main::@2 main::@3 main::@4 @17 test_16s print_sword test_16s::@1 test_16s::@3 print_sword::@2 main @begin
print_sword::@4 dominated by main::@1 main::@2 main::@3 main::@4 @17 test_16s print_sword test_16s::@1 test_16s::@3 print_sword::@2 print_sword::@4 main @begin
print_sword::@1 dominated by main::@1 main::@2 main::@3 main::@4 @17 test_16s print_sword test_16s::@1 test_16s::@3 print_sword::@1 main @begin
print_sword::@return dominated by main::@1 main::@2 main::@3 main::@4 @17 test_16s print_sword test_16s::@1 test_16s::@3 print_sword::@1 main @begin print_sword::@return
print_word dominated by print_word main::@1 main::@2 @17 main @begin
print_word::@1 dominated by print_word main::@1 main::@2 print_word::@1 @17 main @begin
print_word::@return dominated by print_word main::@1 main::@2 print_word::@return print_word::@1 @17 main @begin
print_byte dominated by main::@1 print_byte @17 main @begin
print_byte::@1 dominated by main::@1 print_byte::@1 print_byte @17 main @begin
print_byte::@return dominated by main::@1 print_byte::@1 print_byte @17 main @begin print_byte::@return
print_char dominated by main::@1 @17 main print_char @begin
print_char::@return dominated by main::@1 @17 main print_char print_char::@return @begin
print_str dominated by main::@1 @17 print_str main @begin
print_str::@1 dominated by main::@1 print_str::@1 @17 print_str main @begin
print_str::@return dominated by main::@1 print_str::@return print_str::@1 @17 print_str main @begin
print_str::@2 dominated by main::@1 print_str::@1 print_str::@2 @17 print_str main @begin
div16s dominated by main::@1 main::@2 main::@3 main::@4 div16s @17 test_16s test_16s::@1 main @begin
div16s::@7 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@7 @17 test_16s test_16s::@1 main @begin
div16s::@2 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@2 @17 test_16s test_16s::@1 main @begin
div16s::@9 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@9 div16s::@2 @17 test_16s test_16s::@1 main @begin
div16s::@4 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 @17 test_16s test_16s::@1 main @begin
div16s::@15 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 @17 test_16s test_16s::@1 main @begin div16s::@15
div16s::@18 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 @17 test_16s test_16s::@1 main @begin div16s::@15 div16s::@18
div16s::@return dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 @17 test_16s test_16s::@1 main @begin div16s::@return div16s::@15
div16s::@5 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@5 div16s::@4 div16s::@2 @17 test_16s test_16s::@1 main @begin div16s::@15
div16s::@17 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@2 @17 test_16s test_16s::@1 main @begin div16s::@17
div16s::@16 dominated by main::@1 main::@2 main::@3 main::@4 div16s @17 test_16s test_16s::@1 main @begin div16s::@16
div16u dominated by main::@1 main::@2 div16u @17 main @begin
div16u::@1 dominated by main::@1 main::@2 div16u div16u::@1 @17 main @begin
div16u::@4 dominated by main::@1 main::@2 div16u div16u::@4 div16u::@1 @17 main @begin
div16u::@2 dominated by main::@1 main::@2 div16u div16u::@2 div16u::@1 @17 main @begin
div16u::@5 dominated by main::@1 main::@2 div16u div16u::@5 div16u::@2 div16u::@1 @17 main @begin
div16u::@3 dominated by main::@1 main::@2 div16u div16u::@3 div16u::@2 div16u::@1 @17 main @begin
div16u::@6 dominated by main::@1 main::@2 div16u div16u::@6 div16u::@3 div16u::@2 div16u::@1 @17 main @begin
div16u::@return dominated by div16u::@return main::@1 main::@2 div16u div16u::@6 div16u::@3 div16u::@2 div16u::@1 @17 main @begin
test_8s dominated by main::@1 main::@2 main::@3 test_8s @17 main @begin
test_8s::@1 dominated by main::@1 main::@2 main::@3 test_8s @17 main @begin test_8s::@1
test_8s::@3 dominated by main::@1 main::@2 main::@3 test_8s @17 main @begin test_8s::@1 test_8s::@3
test_8s::@4 dominated by main::@1 main::@2 main::@3 test_8s @17 main @begin test_8s::@1 test_8s::@3 test_8s::@4
test_8s::@5 dominated by main::@1 main::@2 main::@3 test_8s @17 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5
test_8s::@6 dominated by main::@1 main::@2 main::@3 test_8s @17 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6
test_8s::@7 dominated by main::@1 main::@2 main::@3 test_8s @17 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@8 dominated by main::@1 main::@2 main::@3 test_8s @17 main test_8s::@8 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@9 dominated by main::@1 main::@2 main::@3 test_8s @17 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@10 dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s @17 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@11 dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s::@11 test_8s @17 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@return dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s::@11 test_8s @17 main test_8s::@8 test_8s::@9 @begin test_8s::@return test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
print_sbyte dominated by main::@1 main::@2 main::@3 test_8s @17 print_sbyte main @begin test_8s::@1 test_8s::@3
print_sbyte::@2 dominated by main::@1 main::@2 main::@3 test_8s @17 print_sbyte main print_sbyte::@2 @begin test_8s::@1 test_8s::@3
print_sbyte::@4 dominated by main::@1 main::@2 main::@3 test_8s @17 print_sbyte main print_sbyte::@4 print_sbyte::@2 @begin test_8s::@1 test_8s::@3
print_sbyte::@1 dominated by main::@1 main::@2 main::@3 test_8s @17 print_sbyte main print_sbyte::@1 @begin test_8s::@1 test_8s::@3
print_sbyte::@return dominated by main::@1 main::@2 main::@3 test_8s @17 print_sbyte main print_sbyte::@1 @begin print_sbyte::@return test_8s::@1 test_8s::@3
div8s dominated by main::@1 main::@2 main::@3 div8s test_8s @17 main @begin test_8s::@1
div8s::@7 dominated by main::@1 main::@2 main::@3 div8s test_8s @17 main @begin test_8s::@1 div8s::@7
div8s::@2 dominated by main::@1 main::@2 main::@3 div8s test_8s @17 main div8s::@2 @begin test_8s::@1
div8s::@9 dominated by main::@1 main::@2 main::@3 div8s test_8s @17 main div8s::@2 @begin test_8s::@1 div8s::@9
div8s::@4 dominated by main::@1 main::@2 main::@3 div8s test_8s @17 main div8s::@2 @begin test_8s::@1 div8s::@4
div8s::@15 dominated by main::@1 main::@2 main::@3 div8s test_8s @17 div8s::@15 main div8s::@2 @begin test_8s::@1 div8s::@4
div8s::@18 dominated by main::@1 main::@2 main::@3 div8s test_8s @17 div8s::@18 div8s::@15 main div8s::@2 @begin test_8s::@1 div8s::@4
div8s::@return dominated by main::@1 main::@2 main::@3 div8s test_8s @17 div8s::@15 main div8s::@2 div8s::@return @begin test_8s::@1 div8s::@4
div8s::@5 dominated by main::@1 main::@2 main::@3 div8s test_8s @17 div8s::@15 main div8s::@2 @begin test_8s::@1 div8s::@5 div8s::@4
div8s::@17 dominated by main::@1 main::@2 main::@3 div8s test_8s @17 div8s::@17 main div8s::@2 @begin test_8s::@1
div8s::@16 dominated by main::@1 main::@2 main::@3 div8s test_8s @17 div8s::@16 main @begin test_8s::@1
div8u dominated by main::@1 div8u @17 main @begin
div8u::@1 dominated by main::@1 div8u @17 main @begin div8u::@1
div8u::@4 dominated by main::@1 div8u @17 main div8u::@4 @begin div8u::@1
div8u::@2 dominated by main::@1 div8u @17 main div8u::@2 @begin div8u::@1
div8u::@5 dominated by main::@1 div8u @17 main div8u::@2 div8u::@5 @begin div8u::@1
div8u::@3 dominated by main::@1 div8u @17 main div8u::@3 div8u::@2 @begin div8u::@1
div8u::@6 dominated by main::@1 div8u @17 main div8u::@3 div8u::@2 div8u::@6 @begin div8u::@1
div8u::@return dominated by main::@1 div8u div8u::@return @17 main div8u::@3 div8u::@2 div8u::@6 @begin div8u::@1
test_16u dominated by main::@1 main::@2 @17 test_16u main @begin
test_16u::@1 dominated by main::@1 main::@2 @17 test_16u test_16u::@1 main @begin
test_16u::@3 dominated by main::@1 main::@2 @17 test_16u test_16u::@1 test_16u::@3 main @begin
test_16u::@4 dominated by main::@1 main::@2 @17 test_16u test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@5 dominated by main::@1 main::@2 @17 test_16u test_16u::@5 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@6 dominated by main::@1 main::@2 @17 test_16u test_16u::@5 test_16u::@6 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@7 dominated by main::@1 main::@2 @17 test_16u test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@8 dominated by main::@1 main::@2 @17 test_16u test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@9 dominated by main::@1 main::@2 @17 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@10 dominated by main::@1 main::@2 test_16u::@10 @17 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@11 dominated by main::@1 main::@2 test_16u::@11 test_16u::@10 @17 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@return dominated by main::@1 main::@2 test_16u::@11 test_16u::@10 @17 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin test_16u::@return
test_8u dominated by main::@1 test_8u @17 main @begin
test_8u::@1 dominated by main::@1 test_8u @17 main @begin test_8u::@1
test_8u::@3 dominated by main::@1 test_8u @17 main @begin test_8u::@3 test_8u::@1
test_8u::@4 dominated by main::@1 test_8u @17 main @begin test_8u::@3 test_8u::@4 test_8u::@1
test_8u::@5 dominated by main::@1 test_8u @17 main @begin test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@6 dominated by main::@1 test_8u @17 main @begin test_8u::@6 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@7 dominated by main::@1 test_8u @17 main @begin test_8u::@6 test_8u::@7 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@8 dominated by main::@1 test_8u @17 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@9 dominated by main::@1 test_8u @17 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@10 dominated by main::@1 test_8u @17 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@11 dominated by main::@1 test_8u @17 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@return dominated by main::@1 test_8u @17 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 test_8u::@return
test_8u::@12 dominated by main::@1 test_8u @17 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@12 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
print_cls dominated by @17 print_cls main @begin
print_cls::@1 dominated by @17 print_cls main @begin print_cls::@1
print_cls::@return dominated by @17 print_cls main @begin print_cls::@return print_cls::@1
@18 dominated by @18 @begin
@end dominated by @18 @end @begin
main dominated by @18 main @begin
main::@1 dominated by main::@1 @18 main @begin
main::@2 dominated by main::@1 main::@2 @18 main @begin
main::@3 dominated by main::@1 main::@2 main::@3 @18 main @begin
main::@4 dominated by main::@1 main::@2 main::@3 main::@4 @18 main @begin
main::@return dominated by main::@1 main::@2 main::@3 main::@4 main::@return @18 main @begin
test_16s dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s main @begin
test_16s::@1 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 main @begin
test_16s::@3 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 main @begin
test_16s::@4 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 main @begin
test_16s::@5 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 main @begin
test_16s::@6 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 main @begin
test_16s::@7 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 main @begin
test_16s::@8 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main @begin
test_16s::@9 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin
test_16s::@10 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@10
test_16s::@11 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@11 test_16s::@10
test_16s::@return dominated by main::@1 main::@2 main::@3 main::@4 test_16s::@return @18 test_16s test_16s::@1 test_16s::@3 test_16s::@4 test_16s::@5 test_16s::@6 test_16s::@7 test_16s::@8 main test_16s::@9 @begin test_16s::@11 test_16s::@10
print_ln dominated by main::@1 print_ln @18 main @begin
print_ln::@1 dominated by main::@1 print_ln @18 print_ln::@1 main @begin
print_ln::@return dominated by print_ln::@return main::@1 print_ln @18 print_ln::@1 main @begin
print_sword dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s print_sword test_16s::@1 test_16s::@3 main @begin
print_sword::@2 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s print_sword test_16s::@1 test_16s::@3 print_sword::@2 main @begin
print_sword::@4 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s print_sword test_16s::@1 test_16s::@3 print_sword::@2 print_sword::@4 main @begin
print_sword::@1 dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s print_sword test_16s::@1 test_16s::@3 print_sword::@1 main @begin
print_sword::@return dominated by main::@1 main::@2 main::@3 main::@4 @18 test_16s print_sword test_16s::@1 test_16s::@3 print_sword::@1 main @begin print_sword::@return
print_word dominated by print_word main::@1 main::@2 @18 main @begin
print_word::@1 dominated by print_word main::@1 main::@2 print_word::@1 @18 main @begin
print_word::@return dominated by print_word main::@1 main::@2 print_word::@return print_word::@1 @18 main @begin
print_byte dominated by main::@1 print_byte @18 main @begin
print_byte::@1 dominated by main::@1 print_byte::@1 print_byte @18 main @begin
print_byte::@return dominated by main::@1 print_byte::@1 print_byte @18 main @begin print_byte::@return
print_char dominated by main::@1 @18 main print_char @begin
print_char::@return dominated by main::@1 @18 main print_char print_char::@return @begin
print_str dominated by main::@1 @18 print_str main @begin
print_str::@1 dominated by main::@1 print_str::@1 @18 print_str main @begin
print_str::@return dominated by main::@1 print_str::@return print_str::@1 @18 print_str main @begin
print_str::@2 dominated by main::@1 print_str::@1 print_str::@2 @18 print_str main @begin
div16s dominated by main::@1 main::@2 main::@3 main::@4 div16s @18 test_16s test_16s::@1 main @begin
div16s::@7 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@7 @18 test_16s test_16s::@1 main @begin
div16s::@2 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@2 @18 test_16s test_16s::@1 main @begin
div16s::@9 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@9 div16s::@2 @18 test_16s test_16s::@1 main @begin
div16s::@4 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 @18 test_16s test_16s::@1 main @begin
div16s::@15 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 @18 test_16s test_16s::@1 main @begin div16s::@15
div16s::@18 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 @18 test_16s test_16s::@1 main @begin div16s::@15 div16s::@18
div16s::@return dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@4 div16s::@2 @18 test_16s test_16s::@1 main @begin div16s::@return div16s::@15
div16s::@5 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@5 div16s::@4 div16s::@2 @18 test_16s test_16s::@1 main @begin div16s::@15
div16s::@17 dominated by main::@1 main::@2 main::@3 main::@4 div16s div16s::@2 @18 test_16s test_16s::@1 main @begin div16s::@17
div16s::@16 dominated by main::@1 main::@2 main::@3 main::@4 div16s @18 test_16s test_16s::@1 main @begin div16s::@16
div16u dominated by main::@1 main::@2 div16u @18 main @begin
div16u::@1 dominated by main::@1 main::@2 div16u div16u::@1 @18 main @begin
div16u::@4 dominated by main::@1 main::@2 div16u div16u::@4 div16u::@1 @18 main @begin
div16u::@2 dominated by main::@1 main::@2 div16u div16u::@2 div16u::@1 @18 main @begin
div16u::@5 dominated by main::@1 main::@2 div16u div16u::@5 div16u::@2 div16u::@1 @18 main @begin
div16u::@3 dominated by main::@1 main::@2 div16u div16u::@3 div16u::@2 div16u::@1 @18 main @begin
div16u::@6 dominated by main::@1 main::@2 div16u div16u::@6 div16u::@3 div16u::@2 div16u::@1 @18 main @begin
div16u::@return dominated by div16u::@return main::@1 main::@2 div16u div16u::@6 div16u::@3 div16u::@2 div16u::@1 @18 main @begin
test_8s dominated by main::@1 main::@2 main::@3 test_8s @18 main @begin
test_8s::@1 dominated by main::@1 main::@2 main::@3 test_8s @18 main @begin test_8s::@1
test_8s::@3 dominated by main::@1 main::@2 main::@3 test_8s @18 main @begin test_8s::@1 test_8s::@3
test_8s::@4 dominated by main::@1 main::@2 main::@3 test_8s @18 main @begin test_8s::@1 test_8s::@3 test_8s::@4
test_8s::@5 dominated by main::@1 main::@2 main::@3 test_8s @18 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5
test_8s::@6 dominated by main::@1 main::@2 main::@3 test_8s @18 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6
test_8s::@7 dominated by main::@1 main::@2 main::@3 test_8s @18 main @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@8 dominated by main::@1 main::@2 main::@3 test_8s @18 main test_8s::@8 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@9 dominated by main::@1 main::@2 main::@3 test_8s @18 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@10 dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s @18 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@11 dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s::@11 test_8s @18 main test_8s::@8 test_8s::@9 @begin test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
test_8s::@return dominated by main::@1 main::@2 main::@3 test_8s::@10 test_8s::@11 test_8s @18 main test_8s::@8 test_8s::@9 @begin test_8s::@return test_8s::@1 test_8s::@3 test_8s::@4 test_8s::@5 test_8s::@6 test_8s::@7
print_sbyte dominated by main::@1 main::@2 main::@3 test_8s @18 print_sbyte main @begin test_8s::@1 test_8s::@3
print_sbyte::@2 dominated by main::@1 main::@2 main::@3 test_8s @18 print_sbyte main print_sbyte::@2 @begin test_8s::@1 test_8s::@3
print_sbyte::@4 dominated by main::@1 main::@2 main::@3 test_8s @18 print_sbyte main print_sbyte::@4 print_sbyte::@2 @begin test_8s::@1 test_8s::@3
print_sbyte::@1 dominated by main::@1 main::@2 main::@3 test_8s @18 print_sbyte main print_sbyte::@1 @begin test_8s::@1 test_8s::@3
print_sbyte::@return dominated by main::@1 main::@2 main::@3 test_8s @18 print_sbyte main print_sbyte::@1 @begin print_sbyte::@return test_8s::@1 test_8s::@3
div8s dominated by main::@1 main::@2 main::@3 div8s test_8s @18 main @begin test_8s::@1
div8s::@7 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 main @begin test_8s::@1 div8s::@7
div8s::@2 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 main div8s::@2 @begin test_8s::@1
div8s::@9 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 main div8s::@2 @begin test_8s::@1 div8s::@9
div8s::@4 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 main div8s::@2 @begin test_8s::@1 div8s::@4
div8s::@15 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 div8s::@15 main div8s::@2 @begin test_8s::@1 div8s::@4
div8s::@18 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 div8s::@18 div8s::@15 main div8s::@2 @begin test_8s::@1 div8s::@4
div8s::@return dominated by main::@1 main::@2 main::@3 div8s test_8s @18 div8s::@15 main div8s::@2 div8s::@return @begin test_8s::@1 div8s::@4
div8s::@5 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 div8s::@15 main div8s::@2 @begin test_8s::@1 div8s::@5 div8s::@4
div8s::@17 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 div8s::@17 main div8s::@2 @begin test_8s::@1
div8s::@16 dominated by main::@1 main::@2 main::@3 div8s test_8s @18 div8s::@16 main @begin test_8s::@1
div8u dominated by main::@1 div8u @18 main @begin
div8u::@1 dominated by main::@1 div8u @18 main @begin div8u::@1
div8u::@4 dominated by main::@1 div8u @18 main div8u::@4 @begin div8u::@1
div8u::@2 dominated by main::@1 div8u @18 main div8u::@2 @begin div8u::@1
div8u::@5 dominated by main::@1 div8u @18 main div8u::@2 div8u::@5 @begin div8u::@1
div8u::@3 dominated by main::@1 div8u @18 main div8u::@3 div8u::@2 @begin div8u::@1
div8u::@6 dominated by main::@1 div8u @18 main div8u::@3 div8u::@2 div8u::@6 @begin div8u::@1
div8u::@return dominated by main::@1 div8u div8u::@return @18 main div8u::@3 div8u::@2 div8u::@6 @begin div8u::@1
test_16u dominated by main::@1 main::@2 @18 test_16u main @begin
test_16u::@1 dominated by main::@1 main::@2 @18 test_16u test_16u::@1 main @begin
test_16u::@3 dominated by main::@1 main::@2 @18 test_16u test_16u::@1 test_16u::@3 main @begin
test_16u::@4 dominated by main::@1 main::@2 @18 test_16u test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@5 dominated by main::@1 main::@2 @18 test_16u test_16u::@5 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@6 dominated by main::@1 main::@2 @18 test_16u test_16u::@5 test_16u::@6 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@7 dominated by main::@1 main::@2 @18 test_16u test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@8 dominated by main::@1 main::@2 @18 test_16u test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@9 dominated by main::@1 main::@2 @18 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@10 dominated by main::@1 main::@2 test_16u::@10 @18 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@11 dominated by main::@1 main::@2 test_16u::@11 test_16u::@10 @18 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin
test_16u::@return dominated by main::@1 main::@2 test_16u::@11 test_16u::@10 @18 test_16u test_16u::@9 test_16u::@5 test_16u::@6 test_16u::@7 test_16u::@8 test_16u::@1 test_16u::@3 test_16u::@4 main @begin test_16u::@return
test_8u dominated by main::@1 test_8u @18 main @begin
test_8u::@1 dominated by main::@1 test_8u @18 main @begin test_8u::@1
test_8u::@3 dominated by main::@1 test_8u @18 main @begin test_8u::@3 test_8u::@1
test_8u::@4 dominated by main::@1 test_8u @18 main @begin test_8u::@3 test_8u::@4 test_8u::@1
test_8u::@5 dominated by main::@1 test_8u @18 main @begin test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@6 dominated by main::@1 test_8u @18 main @begin test_8u::@6 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@7 dominated by main::@1 test_8u @18 main @begin test_8u::@6 test_8u::@7 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@8 dominated by main::@1 test_8u @18 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@9 dominated by main::@1 test_8u @18 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@10 dominated by main::@1 test_8u @18 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@11 dominated by main::@1 test_8u @18 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
test_8u::@return dominated by main::@1 test_8u @18 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1 test_8u::@return
test_8u::@12 dominated by main::@1 test_8u @18 main @begin test_8u::@6 test_8u::@7 test_8u::@8 test_8u::@9 test_8u::@10 test_8u::@12 test_8u::@11 test_8u::@3 test_8u::@4 test_8u::@5 test_8u::@1
print_cls dominated by @18 print_cls main @begin
print_cls::@1 dominated by @18 print_cls main @begin print_cls::@1
print_cls::@return dominated by @18 print_cls main @begin print_cls::@return print_cls::@1
NATURAL LOOPS
Found back edge: Loop head: test_16s::@1 tails: test_16s::@11 blocks: null
@ -6653,17 +6687,17 @@ INITIAL ASM
.label rem16s = 3
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @17 [phi:@begin->@17]
b17_from_bbegin:
jmp b17
//SEG4 @17
b17:
//SEG3 [1] phi from @begin to @18 [phi:@begin->@18]
b18_from_bbegin:
jmp b18
//SEG4 @18
b18:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @17 to main [phi:@17->main]
main_from_b17:
//SEG6 [4] phi from @18 to main [phi:@18->main]
main_from_b18:
jsr main
//SEG7 [3] phi from @17 to @end [phi:@17->@end]
bend_from_b17:
//SEG7 [3] phi from @18 to @end [phi:@18->@end]
bend_from_b18:
jmp bend
//SEG8 @end
bend:
@ -8701,17 +8735,17 @@ ASSEMBLER BEFORE OPTIMIZATION
.label rem16s = 3
//SEG2 @begin
bbegin:
//SEG3 [1] phi from @begin to @17 [phi:@begin->@17]
b17_from_bbegin:
jmp b17
//SEG4 @17
b17:
//SEG3 [1] phi from @begin to @18 [phi:@begin->@18]
b18_from_bbegin:
jmp b18
//SEG4 @18
b18:
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @17 to main [phi:@17->main]
main_from_b17:
//SEG6 [4] phi from @18 to main [phi:@18->main]
main_from_b18:
jsr main
//SEG7 [3] phi from @17 to @end [phi:@17->@end]
bend_from_b17:
//SEG7 [3] phi from @18 to @end [phi:@18->@end]
bend_from_b18:
jmp bend
//SEG8 @end
bend:
@ -10242,7 +10276,7 @@ print_cls: {
}
ASSEMBLER OPTIMIZATIONS
Removing instruction jmp b17
Removing instruction jmp b18
Removing instruction jmp bend
Removing instruction jmp b1
Removing instruction jmp b2
@ -10383,9 +10417,9 @@ Replacing label b1_from_b11 with b1
Replacing label b1_from_b1 with b1
Replacing label b1_from_b1 with b1
Removing instruction bbegin:
Removing instruction b17_from_bbegin:
Removing instruction main_from_b17:
Removing instruction bend_from_b17:
Removing instruction b18_from_bbegin:
Removing instruction main_from_b18:
Removing instruction bend_from_b18:
Removing instruction b1_from_main:
Removing instruction test_8u_from_b1:
Removing instruction b2_from_b1:
@ -10461,7 +10495,7 @@ Removing instruction b10_from_b9:
Removing instruction print_ln_from_b10:
Removing instruction b1_from_b1:
Succesful ASM optimization Pass5RedundantLabelElimination
Removing instruction b17:
Removing instruction b18:
Removing instruction bend:
Removing instruction print_cls_from_main:
Removing instruction b1:
@ -10597,7 +10631,7 @@ Succesful ASM optimization Pass5UnreachableCodeElimination
Fixing long branch [82] bne b1 to beq
FINAL SYMBOL TABLE
(label) @17
(label) @18
(label) @begin
(label) @end
(byte*) SCREEN
@ -11034,12 +11068,12 @@ Score: 33529
.label rem16u = 3
.label rem16s = 3
//SEG2 @begin
//SEG3 [1] phi from @begin to @17 [phi:@begin->@17]
//SEG4 @17
//SEG3 [1] phi from @begin to @18 [phi:@begin->@18]
//SEG4 @18
//SEG5 [2] call main param-assignment [ ] ( )
//SEG6 [4] phi from @17 to main [phi:@17->main]
//SEG6 [4] phi from @18 to main [phi:@18->main]
jsr main
//SEG7 [3] phi from @17 to @end [phi:@17->@end]
//SEG7 [3] phi from @18 to @end [phi:@18->@end]
//SEG8 @end
//SEG9 main
main: {

View File

@ -1,4 +1,4 @@
(label) @17
(label) @18
(label) @begin
(label) @end
(byte*) SCREEN

View File

@ -0,0 +1,239 @@
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
.label SCREEN = $400
.label line_cursor = 6
.label char_cursor = 8
jsr main
main: {
.label _2 = $a
.label _5 = $a
.label _15 = $a
.label _19 = $a
.label _23 = $a
.label _27 = $a
.label _32 = $a
.label _33 = $a
.label dw2 = $c
.label dw = 2
jsr print_cls
lda #<SCREEN
sta line_cursor
lda #>SCREEN
sta line_cursor+1
lda #<SCREEN
sta char_cursor
lda #>SCREEN
sta char_cursor+1
lda #<$12345678
sta dw
lda #>$12345678
sta dw+1
lda #<$12345678>>$10
sta dw+2
lda #>$12345678>>$10
sta dw+3
b1:
lda dw+2
sta _2
lda dw+3
sta _2+1
lda _32
clc
adc #<$1111
sta _32
lda _32+1
adc #>$1111
sta _32+1
lda dw
sta dw2
lda dw+1
sta dw2+1
lda _32
sta dw2+2
lda _32+1
sta dw2+3
lda dw
sta _5
lda dw+1
sta _5+1
lda _33
clc
adc #<$1111
sta _33
lda _33+1
adc #>$1111
sta _33+1
lda _33
sta dw2
lda _33+1
sta dw2+1
jsr print_dword
lda #' '
jsr print_char
lda dw2+2
sta print_word.w
lda dw2+3
sta print_word.w+1
jsr print_word
lda #' '
jsr print_char
lda dw2
sta print_word.w
lda dw2+1
sta print_word.w+1
jsr print_word
lda #' '
jsr print_char
lda dw2+2
sta _15
lda dw2+3
sta _15+1
tax
jsr print_byte
lda #' '
jsr print_char
lda dw2+2
sta _19
lda dw2+3
sta _19+1
lda _19
tax
jsr print_byte
lda #' '
jsr print_char
lda dw2
sta _23
lda dw2+1
sta _23+1
tax
jsr print_byte
lda #' '
jsr print_char
lda dw2
sta _27
lda dw2+1
sta _27+1
lda _27
tax
jsr print_byte
jsr print_ln
inc dw
bne !+
inc dw+1
bne !+
inc dw+2
bne !+
inc dw+3
!:
lda dw+3
cmp #>$12345690>>$10
bne b18
lda dw+2
cmp #<$12345690>>$10
bne b18
lda dw+1
cmp #>$12345690
bne b18
lda dw
cmp #<$12345690
bne b18
rts
b18:
lda line_cursor
sta char_cursor
lda line_cursor+1
sta char_cursor+1
jmp b1
}
print_ln: {
b1:
lda line_cursor
clc
adc #$28
sta line_cursor
bcc !+
inc line_cursor+1
!:
lda line_cursor+1
cmp char_cursor+1
bcc b1
bne !+
lda line_cursor
cmp char_cursor
bcc b1
!:
rts
}
print_byte: {
txa
lsr
lsr
lsr
lsr
tay
lda hextab,y
jsr print_char
txa
and #$f
tay
lda hextab,y
jsr print_char
rts
hextab: .text "0123456789abcdef"
}
print_char: {
ldy #0
sta (char_cursor),y
inc char_cursor
bne !+
inc char_cursor+1
!:
rts
}
print_word: {
.label w = $a
lda w+1
tax
jsr print_byte
lda w
tax
jsr print_byte
rts
}
print_dword: {
.label dw = $c
lda dw+2
sta print_word.w
lda dw+3
sta print_word.w+1
jsr print_word
lda dw
sta print_word.w
lda dw+1
sta print_word.w+1
jsr print_word
rts
}
print_cls: {
.label sc = 6
lda #<SCREEN
sta sc
lda #>SCREEN
sta sc+1
b1:
lda #' '
ldy #0
sta (sc),y
inc sc
bne !+
inc sc+1
!:
lda sc+1
cmp #>SCREEN+$3e8
bne b1
lda sc
cmp #<SCREEN+$3e8
bne b1
rts
}

View File

@ -0,0 +1,163 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@10
@10: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @10
[3] phi() [ ] ( )
main: scope:[main] from @10
[4] phi() [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1
main::@1: scope:[main] from main main::@18
[6] (byte*) line_cursor#19 ← phi( main::@18/(byte*) line_cursor#1 main/(const byte*) SCREEN#0 ) [ main::dw#10 char_cursor#69 line_cursor#19 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 ] )
[6] (byte*) char_cursor#69 ← phi( main::@18/(byte*~) char_cursor#71 main/(const byte*) SCREEN#0 ) [ main::dw#10 char_cursor#69 line_cursor#19 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 ] )
[6] (dword) main::dw#10 ← phi( main::@18/(dword) main::dw#1 main/(dword/signed dword) 305419896 ) [ main::dw#10 char_cursor#69 line_cursor#19 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 ] )
[7] (word~) main::$2 ← > (dword) main::dw#10 [ main::dw#10 char_cursor#69 line_cursor#19 main::$2 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$2 ] )
[8] (word~) main::$32 ← (word~) main::$2 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::$32 ] )
[9] (dword) main::dw2#1 ← (dword) main::dw#10 hi= (word~) main::$32 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 ] )
[10] (word~) main::$5 ← < (dword) main::dw#10 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$5 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$5 ] )
[11] (word~) main::$33 ← (word~) main::$5 + (word/signed word/dword/signed dword) 4369 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#1 main::$33 ] )
[12] (dword) main::dw2#10 ← (dword) main::dw2#1 lo= (word~) main::$33 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 ] )
[13] (dword) print_dword::dw#0 ← (dword) main::dw2#10 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 print_dword::dw#0 ] ( main:2 [ main::dw#10 char_cursor#69 line_cursor#19 main::dw2#10 print_dword::dw#0 ] )
[14] call print_dword param-assignment [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:main::@4
main::@4: scope:[main] from main::@1
[15] phi() [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
[16] call print_char param-assignment [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:main::@5
main::@5: scope:[main] from main::@4
[17] (word) print_word::w#2 ← > (dword) main::dw2#10 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#2 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#2 char_cursor#12 ] )
[18] call print_word param-assignment [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:main::@6
main::@6: scope:[main] from main::@5
[19] phi() [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
[20] call print_char param-assignment [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:main::@7
main::@7: scope:[main] from main::@6
[21] (word) print_word::w#3 ← < (dword) main::dw2#10 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#3 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#3 char_cursor#12 ] )
[22] call print_word param-assignment [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:main::@8
main::@8: scope:[main] from main::@7
[23] phi() [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
[24] call print_char param-assignment [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:main::@9
main::@9: scope:[main] from main::@8
[25] (word~) main::$15 ← > (dword) main::dw2#10 [ main::dw#10 line_cursor#19 main::dw2#10 main::$15 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 main::$15 char_cursor#12 ] )
[26] (byte) print_byte::b#2 ← > (word~) main::$15 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#2 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#2 char_cursor#12 ] )
[27] call print_byte param-assignment [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:main::@10
main::@10: scope:[main] from main::@9
[28] phi() [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
[29] call print_char param-assignment [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:main::@11
main::@11: scope:[main] from main::@10
[30] (word~) main::$19 ← > (dword) main::dw2#10 [ main::dw#10 line_cursor#19 main::dw2#10 main::$19 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 main::$19 char_cursor#12 ] )
[31] (byte) print_byte::b#3 ← < (word~) main::$19 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#3 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#3 char_cursor#12 ] )
[32] call print_byte param-assignment [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:main::@12
main::@12: scope:[main] from main::@11
[33] phi() [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
[34] call print_char param-assignment [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:main::@13
main::@13: scope:[main] from main::@12
[35] (word~) main::$23 ← < (dword) main::dw2#10 [ main::dw#10 line_cursor#19 main::dw2#10 main::$23 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 main::$23 char_cursor#12 ] )
[36] (byte) print_byte::b#4 ← > (word~) main::$23 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#4 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#4 char_cursor#12 ] )
[37] call print_byte param-assignment [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:main::@14
main::@14: scope:[main] from main::@13
[38] phi() [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
[39] call print_char param-assignment [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:main::@15
main::@15: scope:[main] from main::@14
[40] (word~) main::$27 ← < (dword) main::dw2#10 [ main::dw#10 line_cursor#19 main::$27 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 main::$27 char_cursor#12 ] )
[41] (byte) print_byte::b#5 ← < (word~) main::$27 [ main::dw#10 line_cursor#19 print_byte::b#5 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 print_byte::b#5 char_cursor#12 ] )
[42] call print_byte param-assignment [ main::dw#10 line_cursor#19 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 char_cursor#12 ] )
to:main::@16
main::@16: scope:[main] from main::@15
[43] phi() [ main::dw#10 line_cursor#19 char_cursor#12 ] ( main:2 [ main::dw#10 line_cursor#19 char_cursor#12 ] )
[44] call print_ln param-assignment [ main::dw#10 line_cursor#1 ] ( main:2 [ main::dw#10 line_cursor#1 ] )
to:main::@17
main::@17: scope:[main] from main::@16
[45] (dword) main::dw#1 ← ++ (dword) main::dw#10 [ main::dw#1 line_cursor#1 ] ( main:2 [ main::dw#1 line_cursor#1 ] )
[46] if((dword) main::dw#1!=(dword/signed dword) 305419920) goto main::@18 [ main::dw#1 line_cursor#1 ] ( main:2 [ main::dw#1 line_cursor#1 ] )
to:main::@return
main::@return: scope:[main] from main::@17
[47] return [ ] ( main:2 [ ] )
to:@return
main::@18: scope:[main] from main::@17
[48] (byte*~) char_cursor#71 ← (byte*) line_cursor#1 [ main::dw#1 char_cursor#71 line_cursor#1 ] ( main:2 [ main::dw#1 char_cursor#71 line_cursor#1 ] )
to:main::@1
print_ln: scope:[print_ln] from main::@16
[49] phi() [ line_cursor#19 char_cursor#12 ] ( main:2::print_ln:44 [ main::dw#10 line_cursor#19 char_cursor#12 ] )
to:print_ln::@1
print_ln::@1: scope:[print_ln] from print_ln print_ln::@1
[50] (byte*) line_cursor#9 ← phi( print_ln/(byte*) line_cursor#19 print_ln::@1/(byte*) line_cursor#1 ) [ line_cursor#9 char_cursor#12 ] ( main:2::print_ln:44 [ main::dw#10 line_cursor#9 char_cursor#12 ] )
[51] (byte*) line_cursor#1 ← (byte*) line_cursor#9 + (byte/signed byte/word/signed word/dword/signed dword) 40 [ line_cursor#1 char_cursor#12 ] ( main:2::print_ln:44 [ main::dw#10 line_cursor#1 char_cursor#12 ] )
[52] if((byte*) line_cursor#1<(byte*) char_cursor#12) goto print_ln::@1 [ line_cursor#1 char_cursor#12 ] ( main:2::print_ln:44 [ main::dw#10 line_cursor#1 char_cursor#12 ] )
to:print_ln::@return
print_ln::@return: scope:[print_ln] from print_ln::@1
[53] return [ line_cursor#1 ] ( main:2::print_ln:44 [ main::dw#10 line_cursor#1 ] )
to:@return
print_byte: scope:[print_byte] from main::@11 main::@13 main::@15 main::@9 print_word print_word::@1
[54] (byte*) char_cursor#67 ← phi( main::@11/(byte*) char_cursor#12 main::@13/(byte*) char_cursor#12 main::@15/(byte*) char_cursor#12 main::@9/(byte*) char_cursor#12 print_word/(byte*) char_cursor#65 print_word::@1/(byte*) char_cursor#12 ) [ print_byte::b#6 char_cursor#67 ] ( main:2::print_byte:27 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 ] main:2::print_byte:32 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 ] main:2::print_byte:37 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 ] main:2::print_byte:42 [ main::dw#10 line_cursor#19 print_byte::b#6 char_cursor#67 ] main:2::print_word:18::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#67 ] main:2::print_word:22::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#67 ] main:2::print_dword:14::print_word:73::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 char_cursor#67 ] main:2::print_dword:14::print_word:75::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#67 ] main:2::print_word:18::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 ] main:2::print_word:22::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 ] main:2::print_dword:14::print_word:73::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_byte::b#6 char_cursor#67 ] main:2::print_dword:14::print_word:75::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 ] )
[54] (byte) print_byte::b#6 ← phi( main::@11/(byte) print_byte::b#3 main::@13/(byte) print_byte::b#4 main::@15/(byte) print_byte::b#5 main::@9/(byte) print_byte::b#2 print_word/(byte) print_byte::b#0 print_word::@1/(byte) print_byte::b#1 ) [ print_byte::b#6 char_cursor#67 ] ( main:2::print_byte:27 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 ] main:2::print_byte:32 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 ] main:2::print_byte:37 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 ] main:2::print_byte:42 [ main::dw#10 line_cursor#19 print_byte::b#6 char_cursor#67 ] main:2::print_word:18::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#67 ] main:2::print_word:22::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#67 ] main:2::print_dword:14::print_word:73::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 char_cursor#67 ] main:2::print_dword:14::print_word:75::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#67 ] main:2::print_word:18::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 ] main:2::print_word:22::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 ] main:2::print_dword:14::print_word:73::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_byte::b#6 char_cursor#67 ] main:2::print_dword:14::print_word:75::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 ] )
[55] (byte~) print_byte::$0 ← (byte) print_byte::b#6 >> (byte/signed byte/word/signed word/dword/signed dword) 4 [ print_byte::b#6 char_cursor#67 print_byte::$0 ] ( main:2::print_byte:27 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 print_byte::$0 ] main:2::print_byte:32 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 print_byte::$0 ] main:2::print_byte:37 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 print_byte::$0 ] main:2::print_byte:42 [ main::dw#10 line_cursor#19 print_byte::b#6 char_cursor#67 print_byte::$0 ] main:2::print_word:18::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#67 print_byte::$0 ] main:2::print_word:22::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#67 print_byte::$0 ] main:2::print_dword:14::print_word:73::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 char_cursor#67 print_byte::$0 ] main:2::print_dword:14::print_word:75::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#67 print_byte::$0 ] main:2::print_word:18::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 print_byte::$0 ] main:2::print_word:22::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 print_byte::$0 ] main:2::print_dword:14::print_word:73::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_byte::b#6 char_cursor#67 print_byte::$0 ] main:2::print_dword:14::print_word:75::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 print_byte::$0 ] )
[56] (byte) print_char::ch#0 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$0) [ print_byte::b#6 char_cursor#67 print_char::ch#0 ] ( main:2::print_byte:27 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 print_char::ch#0 ] main:2::print_byte:32 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 print_char::ch#0 ] main:2::print_byte:37 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 print_char::ch#0 ] main:2::print_byte:42 [ main::dw#10 line_cursor#19 print_byte::b#6 char_cursor#67 print_char::ch#0 ] main:2::print_word:18::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#67 print_char::ch#0 ] main:2::print_word:22::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#67 print_char::ch#0 ] main:2::print_dword:14::print_word:73::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 char_cursor#67 print_char::ch#0 ] main:2::print_dword:14::print_word:75::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#67 print_char::ch#0 ] main:2::print_word:18::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 print_char::ch#0 ] main:2::print_word:22::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 print_char::ch#0 ] main:2::print_dword:14::print_word:73::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_byte::b#6 char_cursor#67 print_char::ch#0 ] main:2::print_dword:14::print_word:75::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#67 print_char::ch#0 ] )
[57] call print_char param-assignment [ char_cursor#12 print_byte::b#6 ] ( main:2::print_byte:27 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_byte::b#6 ] main:2::print_byte:32 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_byte::b#6 ] main:2::print_byte:37 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_byte::b#6 ] main:2::print_byte:42 [ main::dw#10 line_cursor#19 char_cursor#12 print_byte::b#6 ] main:2::print_word:18::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 print_byte::b#6 ] main:2::print_word:22::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 print_byte::b#6 ] main:2::print_dword:14::print_word:73::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 char_cursor#12 print_byte::b#6 ] main:2::print_dword:14::print_word:75::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 print_byte::b#6 ] main:2::print_word:18::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_byte::b#6 ] main:2::print_word:22::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_byte::b#6 ] main:2::print_dword:14::print_word:73::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 char_cursor#12 print_byte::b#6 ] main:2::print_dword:14::print_word:75::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_byte::b#6 ] )
to:print_byte::@1
print_byte::@1: scope:[print_byte] from print_byte
[58] (byte~) print_byte::$2 ← (byte) print_byte::b#6 & (byte/signed byte/word/signed word/dword/signed dword) 15 [ char_cursor#12 print_byte::$2 ] ( main:2::print_byte:27 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_byte::$2 ] main:2::print_byte:32 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_byte::$2 ] main:2::print_byte:37 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_byte::$2 ] main:2::print_byte:42 [ main::dw#10 line_cursor#19 char_cursor#12 print_byte::$2 ] main:2::print_word:18::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 print_byte::$2 ] main:2::print_word:22::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 print_byte::$2 ] main:2::print_dword:14::print_word:73::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 char_cursor#12 print_byte::$2 ] main:2::print_dword:14::print_word:75::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 print_byte::$2 ] main:2::print_word:18::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_byte::$2 ] main:2::print_word:22::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_byte::$2 ] main:2::print_dword:14::print_word:73::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 char_cursor#12 print_byte::$2 ] main:2::print_dword:14::print_word:75::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_byte::$2 ] )
[59] (byte) print_char::ch#1 ← *((const string) print_byte::hextab#0 + (byte~) print_byte::$2) [ char_cursor#12 print_char::ch#1 ] ( main:2::print_byte:27 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_char::ch#1 ] main:2::print_byte:32 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_char::ch#1 ] main:2::print_byte:37 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_char::ch#1 ] main:2::print_byte:42 [ main::dw#10 line_cursor#19 char_cursor#12 print_char::ch#1 ] main:2::print_word:18::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 print_char::ch#1 ] main:2::print_word:22::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 print_char::ch#1 ] main:2::print_dword:14::print_word:73::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 char_cursor#12 print_char::ch#1 ] main:2::print_dword:14::print_word:75::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 print_char::ch#1 ] main:2::print_word:18::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_char::ch#1 ] main:2::print_word:22::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_char::ch#1 ] main:2::print_dword:14::print_word:73::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 char_cursor#12 print_char::ch#1 ] main:2::print_dword:14::print_word:75::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_char::ch#1 ] )
[60] call print_char param-assignment [ char_cursor#12 ] ( main:2::print_byte:27 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_byte:32 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_byte:37 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_byte:42 [ main::dw#10 line_cursor#19 char_cursor#12 ] main:2::print_word:18::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 ] main:2::print_word:22::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 ] main:2::print_dword:14::print_word:73::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 char_cursor#12 ] main:2::print_dword:14::print_word:75::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 ] main:2::print_word:18::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_word:22::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_dword:14::print_word:73::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 char_cursor#12 ] main:2::print_dword:14::print_word:75::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:print_byte::@return
print_byte::@return: scope:[print_byte] from print_byte::@1
[61] return [ char_cursor#12 ] ( main:2::print_byte:27 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_byte:32 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_byte:37 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_byte:42 [ main::dw#10 line_cursor#19 char_cursor#12 ] main:2::print_word:18::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 ] main:2::print_word:22::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 ] main:2::print_dword:14::print_word:73::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 char_cursor#12 ] main:2::print_dword:14::print_word:75::print_byte:68 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 ] main:2::print_word:18::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_word:22::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_dword:14::print_word:73::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 char_cursor#12 ] main:2::print_dword:14::print_word:75::print_byte:70 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:@return
print_char: scope:[print_char] from main::@10 main::@12 main::@14 main::@4 main::@6 main::@8 print_byte print_byte::@1
[62] (byte*) char_cursor#44 ← phi( main::@10/(byte*) char_cursor#12 main::@12/(byte*) char_cursor#12 main::@14/(byte*) char_cursor#12 main::@4/(byte*) char_cursor#12 main::@6/(byte*) char_cursor#12 main::@8/(byte*) char_cursor#12 print_byte/(byte*) char_cursor#67 print_byte::@1/(byte*) char_cursor#12 ) [ print_char::ch#8 char_cursor#44 ] ( main:2::print_char:16 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_char:20 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_char:24 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_char:29 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_char:34 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_char:39 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_byte:27::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_byte:32::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_byte:37::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_byte:42::print_char:57 [ main::dw#10 line_cursor#19 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_word:18::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_word:22::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_dword:14::print_word:73::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_word:18::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_word:22::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_dword:14::print_word:73::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_byte:27::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_byte:32::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_byte:37::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_byte:42::print_char:60 [ main::dw#10 line_cursor#19 print_char::ch#8 char_cursor#44 ] main:2::print_word:18::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_char::ch#8 char_cursor#44 ] main:2::print_word:22::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_char::ch#8 char_cursor#44 ] main:2::print_dword:14::print_word:73::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 print_char::ch#8 char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_char::ch#8 char_cursor#44 ] main:2::print_word:18::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_word:22::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_dword:14::print_word:73::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_char::ch#8 char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] )
[62] (byte) print_char::ch#8 ← phi( main::@10/(byte) ' ' main::@12/(byte) ' ' main::@14/(byte) ' ' main::@4/(byte) ' ' main::@6/(byte) ' ' main::@8/(byte) ' ' print_byte/(byte) print_char::ch#0 print_byte::@1/(byte) print_char::ch#1 ) [ print_char::ch#8 char_cursor#44 ] ( main:2::print_char:16 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_char:20 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_char:24 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_char:29 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_char:34 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_char:39 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_byte:27::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_byte:32::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_byte:37::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_byte:42::print_char:57 [ main::dw#10 line_cursor#19 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_word:18::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_word:22::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_dword:14::print_word:73::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_word:18::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_word:22::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_dword:14::print_word:73::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 print_char::ch#8 char_cursor#44 ] main:2::print_byte:27::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_byte:32::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_byte:37::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_byte:42::print_char:60 [ main::dw#10 line_cursor#19 print_char::ch#8 char_cursor#44 ] main:2::print_word:18::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_char::ch#8 char_cursor#44 ] main:2::print_word:22::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_char::ch#8 char_cursor#44 ] main:2::print_dword:14::print_word:73::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 print_char::ch#8 char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_char::ch#8 char_cursor#44 ] main:2::print_word:18::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_word:22::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] main:2::print_dword:14::print_word:73::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_char::ch#8 char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_char::ch#8 char_cursor#44 ] )
[63] *((byte*) char_cursor#44) ← (byte) print_char::ch#8 [ char_cursor#44 ] ( main:2::print_char:16 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#44 ] main:2::print_char:20 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#44 ] main:2::print_char:24 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#44 ] main:2::print_char:29 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#44 ] main:2::print_char:34 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#44 ] main:2::print_char:39 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#44 ] main:2::print_byte:27::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#44 ] main:2::print_byte:32::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#44 ] main:2::print_byte:37::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#44 ] main:2::print_byte:42::print_char:57 [ main::dw#10 line_cursor#19 print_byte::b#6 char_cursor#44 ] main:2::print_word:18::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#44 ] main:2::print_word:22::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#44 ] main:2::print_dword:14::print_word:73::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#44 ] main:2::print_word:18::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#44 ] main:2::print_word:22::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#44 ] main:2::print_dword:14::print_word:73::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_byte::b#6 char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#44 ] main:2::print_byte:27::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#44 ] main:2::print_byte:32::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#44 ] main:2::print_byte:37::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#44 ] main:2::print_byte:42::print_char:60 [ main::dw#10 line_cursor#19 char_cursor#44 ] main:2::print_word:18::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#44 ] main:2::print_word:22::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#44 ] main:2::print_dword:14::print_word:73::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#44 ] main:2::print_word:18::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#44 ] main:2::print_word:22::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#44 ] main:2::print_dword:14::print_word:73::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 char_cursor#44 ] main:2::print_dword:14::print_word:75::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#44 ] )
[64] (byte*) char_cursor#12 ← ++ (byte*) char_cursor#44 [ char_cursor#12 ] ( main:2::print_char:16 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_char:20 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_char:24 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_char:29 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_char:34 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_char:39 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_byte:27::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#12 ] main:2::print_byte:32::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#12 ] main:2::print_byte:37::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#12 ] main:2::print_byte:42::print_char:57 [ main::dw#10 line_cursor#19 print_byte::b#6 char_cursor#12 ] main:2::print_word:18::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#12 ] main:2::print_word:22::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#12 ] main:2::print_dword:14::print_word:73::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 char_cursor#12 ] main:2::print_dword:14::print_word:75::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#12 ] main:2::print_word:18::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#12 ] main:2::print_word:22::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#12 ] main:2::print_dword:14::print_word:73::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_byte::b#6 char_cursor#12 ] main:2::print_dword:14::print_word:75::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#12 ] main:2::print_byte:27::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_byte:32::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_byte:37::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_byte:42::print_char:60 [ main::dw#10 line_cursor#19 char_cursor#12 ] main:2::print_word:18::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 ] main:2::print_word:22::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 ] main:2::print_dword:14::print_word:73::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 char_cursor#12 ] main:2::print_dword:14::print_word:75::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 ] main:2::print_word:18::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_word:22::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_dword:14::print_word:73::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 char_cursor#12 ] main:2::print_dword:14::print_word:75::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:print_char::@return
print_char::@return: scope:[print_char] from print_char
[65] return [ char_cursor#12 ] ( main:2::print_char:16 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_char:20 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_char:24 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_char:29 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_char:34 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_char:39 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_byte:27::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#12 ] main:2::print_byte:32::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#12 ] main:2::print_byte:37::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#12 ] main:2::print_byte:42::print_char:57 [ main::dw#10 line_cursor#19 print_byte::b#6 char_cursor#12 ] main:2::print_word:18::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#12 ] main:2::print_word:22::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#12 ] main:2::print_dword:14::print_word:73::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 print_byte::b#6 char_cursor#12 ] main:2::print_dword:14::print_word:75::print_byte:68::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 print_byte::b#6 char_cursor#12 ] main:2::print_word:18::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#12 ] main:2::print_word:22::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#12 ] main:2::print_dword:14::print_word:73::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_byte::b#6 char_cursor#12 ] main:2::print_dword:14::print_word:75::print_byte:70::print_char:57 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#6 char_cursor#12 ] main:2::print_byte:27::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_byte:32::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_byte:37::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_byte:42::print_char:60 [ main::dw#10 line_cursor#19 char_cursor#12 ] main:2::print_word:18::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 ] main:2::print_word:22::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 ] main:2::print_dword:14::print_word:73::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_word::w#4 char_cursor#12 ] main:2::print_dword:14::print_word:75::print_byte:68::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_word::w#4 char_cursor#12 ] main:2::print_word:18::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_word:22::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_dword:14::print_word:73::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 char_cursor#12 ] main:2::print_dword:14::print_word:75::print_byte:70::print_char:60 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:@return
print_word: scope:[print_word] from main::@5 main::@7 print_dword print_dword::@1
[66] (byte*) char_cursor#65 ← phi( main::@5/(byte*) char_cursor#12 main::@7/(byte*) char_cursor#12 print_dword/(byte*) char_cursor#69 print_dword::@1/(byte*) char_cursor#12 ) [ char_cursor#65 print_word::w#4 ] ( main:2::print_word:18 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#65 print_word::w#4 ] main:2::print_word:22 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#65 print_word::w#4 ] main:2::print_dword:14::print_word:73 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 char_cursor#65 print_word::w#4 ] main:2::print_dword:14::print_word:75 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#65 print_word::w#4 ] )
[66] (word) print_word::w#4 ← phi( main::@5/(word) print_word::w#2 main::@7/(word) print_word::w#3 print_dword/(word) print_word::w#0 print_dword::@1/(word) print_word::w#1 ) [ char_cursor#65 print_word::w#4 ] ( main:2::print_word:18 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#65 print_word::w#4 ] main:2::print_word:22 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#65 print_word::w#4 ] main:2::print_dword:14::print_word:73 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 char_cursor#65 print_word::w#4 ] main:2::print_dword:14::print_word:75 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#65 print_word::w#4 ] )
[67] (byte) print_byte::b#0 ← > (word) print_word::w#4 [ print_byte::b#0 char_cursor#65 print_word::w#4 ] ( main:2::print_word:18 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#0 char_cursor#65 print_word::w#4 ] main:2::print_word:22 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#0 char_cursor#65 print_word::w#4 ] main:2::print_dword:14::print_word:73 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 print_byte::b#0 char_cursor#65 print_word::w#4 ] main:2::print_dword:14::print_word:75 [ main::dw#10 line_cursor#19 main::dw2#10 print_byte::b#0 char_cursor#65 print_word::w#4 ] )
[68] call print_byte param-assignment [ char_cursor#12 print_word::w#4 ] ( main:2::print_word:18 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_word::w#4 ] main:2::print_word:22 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_word::w#4 ] main:2::print_dword:14::print_word:73 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 char_cursor#12 print_word::w#4 ] main:2::print_dword:14::print_word:75 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_word::w#4 ] )
to:print_word::@1
print_word::@1: scope:[print_word] from print_word
[69] (byte) print_byte::b#1 ← < (word) print_word::w#4 [ char_cursor#12 print_byte::b#1 ] ( main:2::print_word:18 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_byte::b#1 ] main:2::print_word:22 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_byte::b#1 ] main:2::print_dword:14::print_word:73 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 char_cursor#12 print_byte::b#1 ] main:2::print_dword:14::print_word:75 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_byte::b#1 ] )
[70] call print_byte param-assignment [ char_cursor#12 ] ( main:2::print_word:18 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_word:22 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_dword:14::print_word:73 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 char_cursor#12 ] main:2::print_dword:14::print_word:75 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:print_word::@return
print_word::@return: scope:[print_word] from print_word::@1
[71] return [ char_cursor#12 ] ( main:2::print_word:18 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_word:22 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] main:2::print_dword:14::print_word:73 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 char_cursor#12 ] main:2::print_dword:14::print_word:75 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:@return
print_dword: scope:[print_dword] from main::@1
[72] (word) print_word::w#0 ← > (dword) print_dword::dw#0 [ char_cursor#69 print_dword::dw#0 print_word::w#0 ] ( main:2::print_dword:14 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#69 print_dword::dw#0 print_word::w#0 ] )
[73] call print_word param-assignment [ print_dword::dw#0 char_cursor#12 ] ( main:2::print_dword:14 [ main::dw#10 line_cursor#19 main::dw2#10 print_dword::dw#0 char_cursor#12 ] )
to:print_dword::@1
print_dword::@1: scope:[print_dword] from print_dword
[74] (word) print_word::w#1 ← < (dword) print_dword::dw#0 [ char_cursor#12 print_word::w#1 ] ( main:2::print_dword:14 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 print_word::w#1 ] )
[75] call print_word param-assignment [ char_cursor#12 ] ( main:2::print_dword:14 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:print_dword::@return
print_dword::@return: scope:[print_dword] from print_dword::@1
[76] return [ char_cursor#12 ] ( main:2::print_dword:14 [ main::dw#10 line_cursor#19 main::dw2#10 char_cursor#12 ] )
to:@return
print_cls: scope:[print_cls] from main
[77] phi() [ ] ( main:2::print_cls:5 [ ] )
to:print_cls::@1
print_cls::@1: scope:[print_cls] from print_cls print_cls::@1
[78] (byte*) print_cls::sc#2 ← phi( print_cls/(const byte*) SCREEN#0 print_cls::@1/(byte*) print_cls::sc#1 ) [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] )
[79] *((byte*) print_cls::sc#2) ← (byte) ' ' [ print_cls::sc#2 ] ( main:2::print_cls:5 [ print_cls::sc#2 ] )
[80] (byte*) print_cls::sc#1 ← ++ (byte*) print_cls::sc#2 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] )
[81] if((byte*) print_cls::sc#1!=(const byte*) SCREEN#0+(word/signed word/dword/signed dword) 1000) goto print_cls::@1 [ print_cls::sc#1 ] ( main:2::print_cls:5 [ print_cls::sc#1 ] )
to:print_cls::@return
print_cls::@return: scope:[print_cls] from print_cls::@1
[82] return [ ] ( main:2::print_cls:5 [ ] )
to:@return

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,102 @@
(label) @10
(label) @begin
(label) @end
(byte*) SCREEN
(const byte*) SCREEN#0 SCREEN = ((byte*))(word/signed word/dword/signed dword) 1024
(byte*) char_cursor
(byte*) char_cursor#12 char_cursor zp ZP_WORD:8 4.918367346938773
(byte*) char_cursor#44 char_cursor zp ZP_WORD:8 37.0
(byte*) char_cursor#65 char_cursor zp ZP_WORD:8 14.0
(byte*) char_cursor#67 char_cursor zp ZP_WORD:8 16.666666666666664
(byte*) char_cursor#69 char_cursor zp ZP_WORD:8 1.4444444444444446
(byte*~) char_cursor#71 char_cursor zp ZP_WORD:8 22.0
(byte*) line_cursor
(byte*) line_cursor#1 line_cursor zp ZP_WORD:6 46.42857142857143
(byte*) line_cursor#19 line_cursor zp ZP_WORD:6 0.3333333333333333
(byte*) line_cursor#9 line_cursor zp ZP_WORD:6 204.0
(void()) main()
(word~) main::$15 $15 zp ZP_WORD:10 22.0
(word~) main::$19 $19 zp ZP_WORD:10 22.0
(word~) main::$2 $2 zp ZP_WORD:10 22.0
(word~) main::$23 $23 zp ZP_WORD:10 22.0
(word~) main::$27 $27 zp ZP_WORD:10 22.0
(word~) main::$32 $32 zp ZP_WORD:10 22.0
(word~) main::$33 $33 zp ZP_WORD:10 22.0
(word~) main::$5 $5 zp ZP_WORD:10 22.0
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@13
(label) main::@14
(label) main::@15
(label) main::@16
(label) main::@17
(label) main::@18
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@return
(dword) main::dw
(dword) main::dw#1 dw zp ZP_DWORD:2 11.0
(dword) main::dw#10 dw zp ZP_DWORD:2 1.4102564102564101
(dword) main::dw2
(dword) main::dw2#1 dw2 zp ZP_DWORD:12 7.333333333333333
(dword) main::dw2#10 dw2 zp ZP_DWORD:12 3.142857142857143
(void()) print_byte((byte) print_byte::b)
(byte~) print_byte::$0 reg byte a 4.0
(byte~) print_byte::$2 reg byte a 4.0
(label) print_byte::@1
(label) print_byte::@return
(byte) print_byte::b
(byte) print_byte::b#0 reg byte x 4.0
(byte) print_byte::b#1 reg byte x 4.0
(byte) print_byte::b#2 reg byte x 22.0
(byte) print_byte::b#3 reg byte x 22.0
(byte) print_byte::b#4 reg byte x 22.0
(byte) print_byte::b#5 reg byte x 22.0
(byte) print_byte::b#6 reg byte x 13.0
(byte[]) print_byte::hextab
(const string) print_byte::hextab#0 hextab = (string) "0123456789abcdef"
(void()) print_char((byte) print_char::ch)
(label) print_char::@return
(byte) print_char::ch
(byte) print_char::ch#0 reg byte a 4.0
(byte) print_char::ch#1 reg byte a 4.0
(byte) print_char::ch#8 reg byte a 6.0
(void()) print_cls()
(label) print_cls::@1
(label) print_cls::@return
(byte*) print_cls::sc
(byte*) print_cls::sc#1 sc zp ZP_WORD:6 16.5
(byte*) print_cls::sc#2 sc zp ZP_WORD:6 16.5
(void()) print_dword((dword) print_dword::dw)
(label) print_dword::@1
(label) print_dword::@return
(dword) print_dword::dw
(dword) print_dword::dw#0 dw zp ZP_DWORD:12 5.0
(void()) print_ln()
(label) print_ln::@1
(label) print_ln::@return
(void()) print_word((word) print_word::w)
(label) print_word::@1
(label) print_word::@return
(word) print_word::w
(word) print_word::w#0 w zp ZP_WORD:10 4.0
(word) print_word::w#1 w zp ZP_WORD:10 4.0
(word) print_word::w#2 w zp ZP_WORD:10 22.0
(word) print_word::w#3 w zp ZP_WORD:10 22.0
(word) print_word::w#4 w zp ZP_WORD:10 9.999999999999998
zp ZP_DWORD:2 [ main::dw#10 main::dw#1 ]
zp ZP_WORD:6 [ line_cursor#9 line_cursor#19 line_cursor#1 print_cls::sc#2 print_cls::sc#1 ]
reg byte x [ print_byte::b#6 print_byte::b#3 print_byte::b#4 print_byte::b#5 print_byte::b#2 print_byte::b#0 print_byte::b#1 ]
reg byte a [ print_char::ch#8 print_char::ch#0 print_char::ch#1 ]
zp ZP_WORD:8 [ char_cursor#44 char_cursor#67 char_cursor#12 char_cursor#65 char_cursor#69 char_cursor#71 ]
zp ZP_WORD:10 [ print_word::w#4 print_word::w#2 print_word::w#3 print_word::w#0 print_word::w#1 main::$2 main::$32 main::$5 main::$33 main::$15 main::$19 main::$23 main::$27 ]
zp ZP_DWORD:12 [ main::dw2#1 main::dw2#10 print_dword::dw#0 ]
reg byte a [ print_byte::$0 ]
reg byte a [ print_byte::$2 ]

View File

@ -1,13 +1,13 @@
@begin: scope:[] from
[0] phi() [ ] ( )
to:@22
@22: scope:[] from @begin
to:@28
@28: scope:[] from @begin
[1] phi() [ ] ( )
[2] call main param-assignment [ ] ( )
to:@end
@end: scope:[] from @22
@end: scope:[] from @28
[3] phi() [ ] ( )
main: scope:[main] from @22
main: scope:[main] from @28
[4] *((const byte*) BGCOL#0) ← (byte/signed byte/word/signed word/dword/signed dword) 5 [ ] ( main:2 [ ] )
[5] call print_cls param-assignment [ ] ( main:2 [ ] )
to:main::@1

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
(label) @22
(label) @28
(label) @begin
(label) @end
(byte*) BGCOL