|
|
|
@@ -3,7 +3,6 @@
|
|
|
|
|
void main() {
|
|
|
|
|
|
|
|
|
|
byte* screen = $0400;
|
|
|
|
|
|
|
|
|
|
// RValue pointer expression (constant)
|
|
|
|
|
byte a = *(screen+80);
|
|
|
|
|
|
|
|
|
@@ -24,8 +23,16 @@ void main() {
|
|
|
|
|
*(screen+160+j) = *(screen+200+j);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Incrementing directly on a word
|
|
|
|
|
++*$d020;
|
|
|
|
|
--*($d000+$21);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
Adding pre/post-modifier *((word) 53280) ← ++ *((word) 53280)
|
|
|
|
|
Adding pre/post-modifier *((var) main::$13) ← -- *((var) main::$13)
|
|
|
|
|
PROGRAM
|
|
|
|
|
proc (void()) main()
|
|
|
|
|
(byte*) main::screen ← (word) 1024
|
|
|
|
@@ -56,6 +63,11 @@ main::@2:
|
|
|
|
|
(byte) main::j ← ++ (byte) main::j
|
|
|
|
|
(boolean~) main::$12 ← (byte) main::j != (byte) 11
|
|
|
|
|
if((boolean~) main::$12) goto main::@2
|
|
|
|
|
*((word) 53280) ← ++ *((word) 53280)
|
|
|
|
|
(word~) main::$13 ← (word) 53248 + (byte) 33
|
|
|
|
|
*((word~) main::$13) ← -- *((word~) main::$13)
|
|
|
|
|
(word~) main::$14 ← (word) 53248 + (byte) 33
|
|
|
|
|
(word~) main::$15 ← (word) 53248 + (byte) 33
|
|
|
|
|
main::@return:
|
|
|
|
|
return
|
|
|
|
|
endproc // main()
|
|
|
|
@@ -68,6 +80,9 @@ SYMBOLS
|
|
|
|
|
(byte*~) main::$10
|
|
|
|
|
(byte*~) main::$11
|
|
|
|
|
(boolean~) main::$12
|
|
|
|
|
(word~) main::$13
|
|
|
|
|
(word~) main::$14
|
|
|
|
|
(word~) main::$15
|
|
|
|
|
(byte*~) main::$2
|
|
|
|
|
(boolean~) main::$3
|
|
|
|
|
(byte*~) main::$4
|
|
|
|
@@ -123,6 +138,11 @@ main::@2: scope:[main] from main::@2 main::@3
|
|
|
|
|
if((boolean~) main::$12) goto main::@2
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@4: scope:[main] from main::@2
|
|
|
|
|
*((word) 53280) ← ++ *((word) 53280)
|
|
|
|
|
(word~) main::$13 ← (word) 53248 + (byte) 33
|
|
|
|
|
*((word~) main::$13) ← -- *((word~) main::$13)
|
|
|
|
|
(word~) main::$14 ← (word) 53248 + (byte) 33
|
|
|
|
|
(word~) main::$15 ← (word) 53248 + (byte) 33
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
return
|
|
|
|
@@ -132,52 +152,6 @@ main::@return: scope:[main] from main::@4
|
|
|
|
|
to:@end
|
|
|
|
|
@end: scope:[] from @1
|
|
|
|
|
|
|
|
|
|
Removing empty block main::@4
|
|
|
|
|
CONTROL FLOW GRAPH
|
|
|
|
|
@begin: scope:[] from
|
|
|
|
|
to:@1
|
|
|
|
|
main: scope:[main] from
|
|
|
|
|
(byte*) main::screen ← (word) 1024
|
|
|
|
|
(byte*~) main::$0 ← (byte*) main::screen + (byte) 80
|
|
|
|
|
(byte) main::a ← *((byte*~) main::$0)
|
|
|
|
|
(byte) main::i ← (byte) 0
|
|
|
|
|
to:main::@1
|
|
|
|
|
main::@1: scope:[main] from main main::@1
|
|
|
|
|
(byte*~) main::$1 ← (byte*) main::screen + (byte) 40
|
|
|
|
|
(byte*~) main::$2 ← (byte*~) main::$1 + (byte) main::i
|
|
|
|
|
*((byte*) main::screen + (byte) main::i) ← *((byte*~) main::$2)
|
|
|
|
|
(byte) main::i ← ++ (byte) main::i
|
|
|
|
|
(boolean~) main::$3 ← (byte) main::i != (byte) 11
|
|
|
|
|
if((boolean~) main::$3) goto main::@1
|
|
|
|
|
to:main::@3
|
|
|
|
|
main::@3: scope:[main] from main::@1
|
|
|
|
|
(byte*~) main::$4 ← (byte*) main::screen + (byte) 81
|
|
|
|
|
(byte*) main::sc2 ← (byte*~) main::$4
|
|
|
|
|
(byte*~) main::$5 ← (byte*) main::screen + (byte) 121
|
|
|
|
|
*((byte*) main::sc2) ← *((byte*~) main::$5)
|
|
|
|
|
(byte*~) main::$6 ← (byte*) main::screen + (byte) 82
|
|
|
|
|
(byte*~) main::$7 ← (byte*) main::screen + (byte) 122
|
|
|
|
|
*((byte*~) main::$6) ← *((byte*~) main::$7)
|
|
|
|
|
(byte) main::j ← (byte) 0
|
|
|
|
|
to:main::@2
|
|
|
|
|
main::@2: scope:[main] from main::@2 main::@3
|
|
|
|
|
(byte*~) main::$8 ← (byte*) main::screen + (byte) 160
|
|
|
|
|
(byte*~) main::$9 ← (byte*~) main::$8 + (byte) main::j
|
|
|
|
|
(byte*~) main::$10 ← (byte*) main::screen + (byte) 200
|
|
|
|
|
(byte*~) main::$11 ← (byte*~) main::$10 + (byte) main::j
|
|
|
|
|
*((byte*~) main::$9) ← *((byte*~) main::$11)
|
|
|
|
|
(byte) main::j ← ++ (byte) main::j
|
|
|
|
|
(boolean~) main::$12 ← (byte) main::j != (byte) 11
|
|
|
|
|
if((boolean~) main::$12) goto main::@2
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@2
|
|
|
|
|
return
|
|
|
|
|
to:@return
|
|
|
|
|
@1: scope:[] from @begin
|
|
|
|
|
call main
|
|
|
|
|
to:@end
|
|
|
|
|
@end: scope:[] from @1
|
|
|
|
|
|
|
|
|
|
PROCEDURE MODIFY VARIABLE ANALYSIS
|
|
|
|
|
|
|
|
|
|
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL
|
|
|
|
@@ -216,8 +190,15 @@ main::@2: scope:[main] from main::@2 main::@3
|
|
|
|
|
(byte) main::j ← ++ (byte) main::j
|
|
|
|
|
(boolean~) main::$12 ← (byte) main::j != (byte) 11
|
|
|
|
|
if((boolean~) main::$12) goto main::@2
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@4: scope:[main] from main::@2
|
|
|
|
|
*((word) 53280) ← ++ *((word) 53280)
|
|
|
|
|
(word~) main::$13 ← (word) 53248 + (byte) 33
|
|
|
|
|
*((word~) main::$13) ← -- *((word~) main::$13)
|
|
|
|
|
(word~) main::$14 ← (word) 53248 + (byte) 33
|
|
|
|
|
(word~) main::$15 ← (word) 53248 + (byte) 33
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@2
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
return
|
|
|
|
|
to:@return
|
|
|
|
|
@1: scope:[] from @begin
|
|
|
|
@@ -269,8 +250,15 @@ main::@2: scope:[main] from main::@2 main::@3
|
|
|
|
|
(byte) main::j#1 ← ++ (byte) main::j#2
|
|
|
|
|
(boolean~) main::$12 ← (byte) main::j#1 != (byte) 11
|
|
|
|
|
if((boolean~) main::$12) goto main::@2
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@4: scope:[main] from main::@2
|
|
|
|
|
*((word) 53280) ← ++ *((word) 53280)
|
|
|
|
|
(word~) main::$13 ← (word) 53248 + (byte) 33
|
|
|
|
|
*((word~) main::$13) ← -- *((word~) main::$13)
|
|
|
|
|
(word~) main::$14 ← (word) 53248 + (byte) 33
|
|
|
|
|
(word~) main::$15 ← (word) 53248 + (byte) 33
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@2
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
return
|
|
|
|
|
to:@return
|
|
|
|
|
@1: scope:[] from @begin
|
|
|
|
@@ -321,8 +309,15 @@ main::@2: scope:[main] from main::@2 main::@3
|
|
|
|
|
(byte) main::j#1 ← ++ (byte) main::j#2
|
|
|
|
|
(boolean~) main::$12 ← (byte) main::j#1 != (byte) 11
|
|
|
|
|
if((boolean~) main::$12) goto main::@2
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@4: scope:[main] from main::@2
|
|
|
|
|
*((word) 53280) ← ++ *((word) 53280)
|
|
|
|
|
(word~) main::$13 ← (word) 53248 + (byte) 33
|
|
|
|
|
*((word~) main::$13) ← -- *((word~) main::$13)
|
|
|
|
|
(word~) main::$14 ← (word) 53248 + (byte) 33
|
|
|
|
|
(word~) main::$15 ← (word) 53248 + (byte) 33
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@2
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
return
|
|
|
|
|
to:@return
|
|
|
|
|
@1: scope:[] from @begin
|
|
|
|
@@ -343,6 +338,9 @@ INITIAL SSA SYMBOL TABLE
|
|
|
|
|
(byte*~) main::$10
|
|
|
|
|
(byte*~) main::$11
|
|
|
|
|
(boolean~) main::$12
|
|
|
|
|
(word~) main::$13
|
|
|
|
|
(word~) main::$14
|
|
|
|
|
(word~) main::$15
|
|
|
|
|
(byte*~) main::$2
|
|
|
|
|
(boolean~) main::$3
|
|
|
|
|
(byte*~) main::$4
|
|
|
|
@@ -354,6 +352,7 @@ INITIAL SSA SYMBOL TABLE
|
|
|
|
|
(label) main::@1
|
|
|
|
|
(label) main::@2
|
|
|
|
|
(label) main::@3
|
|
|
|
|
(label) main::@4
|
|
|
|
|
(label) main::@return
|
|
|
|
|
(byte) main::a
|
|
|
|
|
(byte) main::a#0
|
|
|
|
@@ -416,8 +415,15 @@ main::@2: scope:[main] from main::@2 main::@3
|
|
|
|
|
(byte) main::j#1 ← ++ (byte) main::j#2
|
|
|
|
|
(boolean~) main::$12 ← (byte) main::j#1 != (byte) 11
|
|
|
|
|
if((boolean~) main::$12) goto main::@2
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@4: scope:[main] from main::@2
|
|
|
|
|
*((word) 53280) ← ++ *((word) 53280)
|
|
|
|
|
(word~) main::$13 ← (word) 53248 + (byte) 33
|
|
|
|
|
*((word~) main::$13) ← -- *((word~) main::$13)
|
|
|
|
|
(word~) main::$14 ← (word) 53248 + (byte) 33
|
|
|
|
|
(word~) main::$15 ← (word) 53248 + (byte) 33
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@2
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
return
|
|
|
|
|
to:@return
|
|
|
|
|
@1: scope:[] from @begin
|
|
|
|
@@ -468,8 +474,15 @@ main::@2: scope:[main] from main::@2 main::@3
|
|
|
|
|
(byte) main::j#1 ← ++ (byte) main::j#2
|
|
|
|
|
(boolean~) main::$12 ← (byte) main::j#1 != (byte) 11
|
|
|
|
|
if((boolean~) main::$12) goto main::@2
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@4: scope:[main] from main::@2
|
|
|
|
|
*((word) 53280) ← ++ *((word) 53280)
|
|
|
|
|
(word~) main::$13 ← (word) 53248 + (byte) 33
|
|
|
|
|
*((word~) main::$13) ← -- *((word~) main::$13)
|
|
|
|
|
(word~) main::$14 ← (word) 53248 + (byte) 33
|
|
|
|
|
(word~) main::$15 ← (word) 53248 + (byte) 33
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@2
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
return
|
|
|
|
|
to:@return
|
|
|
|
|
@1: scope:[] from @begin
|
|
|
|
@@ -520,8 +533,15 @@ main::@2: scope:[main] from main::@2 main::@3
|
|
|
|
|
(byte) main::j#1 ← ++ (byte) main::j#2
|
|
|
|
|
(boolean~) main::$12 ← (byte) main::j#1 != (byte) 11
|
|
|
|
|
if((boolean~) main::$12) goto main::@2
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@4: scope:[main] from main::@2
|
|
|
|
|
*((word) 53280) ← ++ *((word) 53280)
|
|
|
|
|
(word~) main::$13 ← (word) 53248 + (byte) 33
|
|
|
|
|
*((word~) main::$13) ← -- *((word~) main::$13)
|
|
|
|
|
(word~) main::$14 ← (word) 53248 + (byte) 33
|
|
|
|
|
(word~) main::$15 ← (word) 53248 + (byte) 33
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@2
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
return
|
|
|
|
|
to:@return
|
|
|
|
|
@1: scope:[] from @begin
|
|
|
|
@@ -569,8 +589,15 @@ main::@2: scope:[main] from main::@2 main::@3
|
|
|
|
|
(byte) main::j#1 ← ++ (byte) main::j#2
|
|
|
|
|
(boolean~) main::$12 ← (byte) main::j#1 != (byte) 11
|
|
|
|
|
if((boolean~) main::$12) goto main::@2
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@4: scope:[main] from main::@2
|
|
|
|
|
*((word) 53280) ← ++ *((word) 53280)
|
|
|
|
|
(word~) main::$13 ← (word) 53248 + (byte) 33
|
|
|
|
|
*((word~) main::$13) ← -- *((word~) main::$13)
|
|
|
|
|
(word~) main::$14 ← (word) 53248 + (byte) 33
|
|
|
|
|
(word~) main::$15 ← (word) 53248 + (byte) 33
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@2
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
return
|
|
|
|
|
to:@return
|
|
|
|
|
@1: scope:[] from @begin
|
|
|
|
@@ -616,8 +643,15 @@ main::@2: scope:[main] from main::@2 main::@3
|
|
|
|
|
*((byte*~) main::$9) ← *((byte*~) main::$11)
|
|
|
|
|
(byte) main::j#1 ← ++ (byte) main::j#2
|
|
|
|
|
if((byte) main::j#1!=(byte) 11) goto main::@2
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@4: scope:[main] from main::@2
|
|
|
|
|
*((word) 53280) ← ++ *((word) 53280)
|
|
|
|
|
(word~) main::$13 ← (word) 53248 + (byte) 33
|
|
|
|
|
*((word~) main::$13) ← -- *((word~) main::$13)
|
|
|
|
|
(word~) main::$14 ← (word) 53248 + (byte) 33
|
|
|
|
|
(word~) main::$15 ← (word) 53248 + (byte) 33
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@2
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
return
|
|
|
|
|
to:@return
|
|
|
|
|
@1: scope:[] from @begin
|
|
|
|
@@ -628,6 +662,9 @@ main::@return: scope:[main] from main::@2
|
|
|
|
|
Constant (const byte*) main::screen#0 = 1024
|
|
|
|
|
Constant (const byte) main::i#0 = 0
|
|
|
|
|
Constant (const byte) main::j#0 = 0
|
|
|
|
|
Constant (const word) main::$13 = 53248+33
|
|
|
|
|
Constant (const word) main::$14 = 53248+33
|
|
|
|
|
Constant (const word) main::$15 = 53248+33
|
|
|
|
|
Succesful SSA optimization Pass2ConstantIdentification
|
|
|
|
|
CONTROL FLOW GRAPH
|
|
|
|
|
@begin: scope:[] from
|
|
|
|
@@ -661,8 +698,12 @@ main::@2: scope:[main] from main::@2 main::@3
|
|
|
|
|
*((byte*~) main::$9) ← *((byte*~) main::$11)
|
|
|
|
|
(byte) main::j#1 ← ++ (byte) main::j#2
|
|
|
|
|
if((byte) main::j#1!=(byte) 11) goto main::@2
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@4: scope:[main] from main::@2
|
|
|
|
|
*((word) 53280) ← ++ *((word) 53280)
|
|
|
|
|
*((const word) main::$13) ← -- *((const word) main::$13)
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@2
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
return
|
|
|
|
|
to:@return
|
|
|
|
|
@1: scope:[] from @begin
|
|
|
|
@@ -703,8 +744,12 @@ main::@2: scope:[main] from main::@2 main::@3
|
|
|
|
|
*((byte*~) main::$9) ← *((byte*~) main::$11)
|
|
|
|
|
(byte) main::j#1 ← ++ (byte) main::j#2
|
|
|
|
|
if((byte) main::j#1!=(byte) 11) goto main::@2
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@4: scope:[main] from main::@2
|
|
|
|
|
*((word) 53280) ← ++ *((word) 53280)
|
|
|
|
|
*((const word) main::$13) ← -- *((const word) main::$13)
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@2
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
return
|
|
|
|
|
to:@return
|
|
|
|
|
@1: scope:[] from @begin
|
|
|
|
@@ -730,8 +775,11 @@ Constant inlined main::$7 = (const byte*) main::screen#0+(byte) 122
|
|
|
|
|
Constant inlined main::$8 = (const byte*) main::screen#0+(byte) 160
|
|
|
|
|
Constant inlined main::$10 = (const byte*) main::screen#0+(byte) 200
|
|
|
|
|
Constant inlined main::j#0 = (byte) 0
|
|
|
|
|
Constant inlined main::$14 = (word) 53248+(byte) 33
|
|
|
|
|
Constant inlined main::$1 = (const byte*) main::screen#0+(byte) 40
|
|
|
|
|
Constant inlined main::$15 = (word) 53248+(byte) 33
|
|
|
|
|
Constant inlined main::i#0 = (byte) 0
|
|
|
|
|
Constant inlined main::$13 = (word) 53248+(byte) 33
|
|
|
|
|
Constant inlined main::$0 = (const byte*) main::screen#0+(byte) 80
|
|
|
|
|
Succesful SSA optimization Pass2ConstantInlining
|
|
|
|
|
CONTROL FLOW GRAPH
|
|
|
|
@@ -758,8 +806,12 @@ main::@2: scope:[main] from main::@2 main::@3
|
|
|
|
|
*((byte*~) main::$9) ← *((byte*~) main::$11)
|
|
|
|
|
(byte) main::j#1 ← ++ (byte) main::j#2
|
|
|
|
|
if((byte) main::j#1!=(byte) 11) goto main::@2
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@4: scope:[main] from main::@2
|
|
|
|
|
*((word) 53280) ← ++ *((word) 53280)
|
|
|
|
|
*((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33)
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@2
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
return
|
|
|
|
|
to:@return
|
|
|
|
|
@1: scope:[] from @begin
|
|
|
|
@@ -778,6 +830,7 @@ FINAL SYMBOL TABLE
|
|
|
|
|
(label) main::@1
|
|
|
|
|
(label) main::@2
|
|
|
|
|
(label) main::@3
|
|
|
|
|
(label) main::@4
|
|
|
|
|
(label) main::@return
|
|
|
|
|
(byte) main::a
|
|
|
|
|
(byte) main::a#0
|
|
|
|
@@ -792,10 +845,10 @@ FINAL SYMBOL TABLE
|
|
|
|
|
(byte*) main::screen
|
|
|
|
|
(const byte*) main::screen#0 = (word) 1024
|
|
|
|
|
|
|
|
|
|
Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return
|
|
|
|
|
Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@4 main::@return
|
|
|
|
|
Added new block during phi lifting main::@5(between main::@1 and main::@1)
|
|
|
|
|
Added new block during phi lifting main::@6(between main::@2 and main::@2)
|
|
|
|
|
Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return main::@6 main::@5
|
|
|
|
|
Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@4 main::@return main::@6 main::@5
|
|
|
|
|
CONTROL FLOW GRAPH - PHI LIFTED
|
|
|
|
|
@begin: scope:[] from
|
|
|
|
|
to:@1
|
|
|
|
@@ -824,8 +877,12 @@ main::@2: scope:[main] from main::@3 main::@6
|
|
|
|
|
*((byte*~) main::$9) ← *((byte*~) main::$11)
|
|
|
|
|
(byte) main::j#1 ← ++ (byte) main::j#2
|
|
|
|
|
if((byte) main::j#1!=(byte) 11) goto main::@6
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@4: scope:[main] from main::@2
|
|
|
|
|
*((word) 53280) ← ++ *((word) 53280)
|
|
|
|
|
*((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33)
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@2
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
return
|
|
|
|
|
to:@return
|
|
|
|
|
main::@6: scope:[main] from main::@2
|
|
|
|
@@ -869,24 +926,28 @@ main::@2: scope:[main] from main::@3 main::@6
|
|
|
|
|
[12] *((byte*~) main::$9) ← *((byte*~) main::$11) [ main::j#2 ]
|
|
|
|
|
[13] (byte) main::j#1 ← ++ (byte) main::j#2 [ main::j#1 ]
|
|
|
|
|
[14] if((byte) main::j#1!=(byte) 11) goto main::@6 [ main::j#1 ]
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@4: scope:[main] from main::@2
|
|
|
|
|
[15] *((word) 53280) ← ++ *((word) 53280) [ ]
|
|
|
|
|
[16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ]
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@2
|
|
|
|
|
[15] return [ ]
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
[17] return [ ]
|
|
|
|
|
to:@return
|
|
|
|
|
main::@6: scope:[main] from main::@2
|
|
|
|
|
[16] (byte~) main::j#3 ← (byte) main::j#1 [ main::j#3 ]
|
|
|
|
|
[18] (byte~) main::j#3 ← (byte) main::j#1 [ main::j#3 ]
|
|
|
|
|
to:main::@2
|
|
|
|
|
main::@5: scope:[main] from main::@1
|
|
|
|
|
[17] (byte~) main::i#3 ← (byte) main::i#1 [ main::i#3 ]
|
|
|
|
|
[19] (byte~) main::i#3 ← (byte) main::i#1 [ main::i#3 ]
|
|
|
|
|
to:main::@1
|
|
|
|
|
|
|
|
|
|
Created 2 initial phi equivalence classes
|
|
|
|
|
Coalesced [16] main::j#3 ← main::j#1
|
|
|
|
|
Coalesced [17] main::i#3 ← main::i#1
|
|
|
|
|
Coalesced [18] main::j#3 ← main::j#1
|
|
|
|
|
Coalesced [19] main::i#3 ← main::i#1
|
|
|
|
|
Coalesced down to 2 phi equivalence classes
|
|
|
|
|
Culled Empty Block (label) main::@6
|
|
|
|
|
Culled Empty Block (label) main::@5
|
|
|
|
|
Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@return
|
|
|
|
|
Block Sequence Planned @begin @1 @end main main::@1 main::@3 main::@2 main::@4 main::@return
|
|
|
|
|
Propagating live ranges...
|
|
|
|
|
Propagating live ranges...
|
|
|
|
|
Propagating live ranges...
|
|
|
|
@@ -918,9 +979,13 @@ main::@2: scope:[main] from main::@2 main::@3
|
|
|
|
|
[12] *((byte*~) main::$9) ← *((byte*~) main::$11) [ main::j#2 ]
|
|
|
|
|
[13] (byte) main::j#1 ← ++ (byte) main::j#2 [ main::j#1 ]
|
|
|
|
|
[14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ]
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@4: scope:[main] from main::@2
|
|
|
|
|
[15] *((word) 53280) ← ++ *((word) 53280) [ ]
|
|
|
|
|
[16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ]
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@2
|
|
|
|
|
[15] return [ ]
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
[17] return [ ]
|
|
|
|
|
to:@return
|
|
|
|
|
|
|
|
|
|
CONTROL FLOW GRAPH - PHI MEM COALESCED
|
|
|
|
@@ -951,9 +1016,13 @@ main::@2: scope:[main] from main::@2 main::@3
|
|
|
|
|
[12] *((byte*~) main::$9) ← *((byte*~) main::$11) [ main::j#2 ] ( main:0 [ main::j#2 ] )
|
|
|
|
|
[13] (byte) main::j#1 ← ++ (byte) main::j#2 [ main::j#1 ] ( main:0 [ main::j#1 ] )
|
|
|
|
|
[14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ] ( main:0 [ main::j#1 ] )
|
|
|
|
|
to:main::@4
|
|
|
|
|
main::@4: scope:[main] from main::@2
|
|
|
|
|
[15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] )
|
|
|
|
|
[16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] )
|
|
|
|
|
to:main::@return
|
|
|
|
|
main::@return: scope:[main] from main::@2
|
|
|
|
|
[15] return [ ] ( main:0 [ ] )
|
|
|
|
|
main::@return: scope:[main] from main::@4
|
|
|
|
|
[17] return [ ] ( main:0 [ ] )
|
|
|
|
|
to:@return
|
|
|
|
|
|
|
|
|
|
DOMINATORS
|
|
|
|
@@ -964,7 +1033,8 @@ main dominated by @1 @begin main
|
|
|
|
|
main::@1 dominated by @1 @begin main::@1 main
|
|
|
|
|
main::@3 dominated by @1 @begin main::@1 main::@3 main
|
|
|
|
|
main::@2 dominated by @1 @begin main::@2 main::@1 main::@3 main
|
|
|
|
|
main::@return dominated by @1 main::@return @begin main::@2 main::@1 main::@3 main
|
|
|
|
|
main::@4 dominated by @1 @begin main::@2 main::@1 main::@4 main::@3 main
|
|
|
|
|
main::@return dominated by @1 main::@return @begin main::@2 main::@1 main::@4 main::@3 main
|
|
|
|
|
|
|
|
|
|
Found back edge: Loop head: main::@1 tails: main::@1 blocks: null
|
|
|
|
|
Found back edge: Loop head: main::@2 tails: main::@2 blocks: null
|
|
|
|
@@ -1127,10 +1197,17 @@ main: {
|
|
|
|
|
lda j
|
|
|
|
|
cmp #$b
|
|
|
|
|
bne b2_from_b2
|
|
|
|
|
jmp b4
|
|
|
|
|
//SEG30 main::@4
|
|
|
|
|
b4:
|
|
|
|
|
//SEG31 [15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] ) -- _deref_cowo1=_inc__deref_cowo1
|
|
|
|
|
inc $d020
|
|
|
|
|
//SEG32 [16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] ) -- _deref_cowo1=_dec__deref_cowo1
|
|
|
|
|
dec $d000+$21
|
|
|
|
|
jmp breturn
|
|
|
|
|
//SEG30 main::@return
|
|
|
|
|
//SEG33 main::@return
|
|
|
|
|
breturn:
|
|
|
|
|
//SEG31 [15] return [ ] ( main:0 [ ] )
|
|
|
|
|
//SEG34 [17] return [ ] ( main:0 [ ] )
|
|
|
|
|
rts
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1177,8 +1254,8 @@ REGISTER UPLIFT SCOPES
|
|
|
|
|
Uplift Scope [main] 31.17: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 27.5: zp ZP_BYTE:3 [ main::j#2 main::j#1 ] 20: zp ZP_BYTE:4 [ main::a#0 ] 11: zp ZP_PTR_BYTE:5 [ main::$2 ] 11: zp ZP_PTR_BYTE:7 [ main::$9 ] 11: zp ZP_PTR_BYTE:9 [ main::$11 ]
|
|
|
|
|
Uplift Scope []
|
|
|
|
|
|
|
|
|
|
Uplifting [main] best 1175 combination reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::j#2 main::j#1 ] reg byte a [ main::a#0 ] zp ZP_PTR_BYTE:5 [ main::$2 ] zp ZP_PTR_BYTE:7 [ main::$9 ] zp ZP_PTR_BYTE:9 [ main::$11 ]
|
|
|
|
|
Uplifting [] best 1175 combination
|
|
|
|
|
Uplifting [main] best 1190 combination reg byte x [ main::i#2 main::i#1 ] reg byte x [ main::j#2 main::j#1 ] reg byte a [ main::a#0 ] zp ZP_PTR_BYTE:5 [ main::$2 ] zp ZP_PTR_BYTE:7 [ main::$9 ] zp ZP_PTR_BYTE:9 [ main::$11 ]
|
|
|
|
|
Uplifting [] best 1190 combination
|
|
|
|
|
Coalescing zero page register [ zp ZP_PTR_BYTE:5 [ main::$2 ] ] with [ zp ZP_PTR_BYTE:7 [ main::$9 ] ]
|
|
|
|
|
Allocated (was zp ZP_PTR_BYTE:5) zp ZP_PTR_BYTE:2 [ main::$2 main::$9 ]
|
|
|
|
|
Allocated (was zp ZP_PTR_BYTE:9) zp ZP_PTR_BYTE:4 [ main::$11 ]
|
|
|
|
@@ -1187,6 +1264,7 @@ Removing instruction jmp bend
|
|
|
|
|
Removing instruction jmp b1
|
|
|
|
|
Removing instruction jmp b3
|
|
|
|
|
Removing instruction jmp b2
|
|
|
|
|
Removing instruction jmp b4
|
|
|
|
|
Removing instruction jmp breturn
|
|
|
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
|
|
|
|
ASSEMBLER
|
|
|
|
@@ -1283,9 +1361,15 @@ main: {
|
|
|
|
|
//SEG29 [14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ] ( main:0 [ main::j#1 ] ) -- xby_neq_coby1_then_la1
|
|
|
|
|
cpx #$b
|
|
|
|
|
bne b2_from_b2
|
|
|
|
|
//SEG30 main::@return
|
|
|
|
|
//SEG30 main::@4
|
|
|
|
|
b4:
|
|
|
|
|
//SEG31 [15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] ) -- _deref_cowo1=_inc__deref_cowo1
|
|
|
|
|
inc $d020
|
|
|
|
|
//SEG32 [16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] ) -- _deref_cowo1=_dec__deref_cowo1
|
|
|
|
|
dec $d000+$21
|
|
|
|
|
//SEG33 main::@return
|
|
|
|
|
breturn:
|
|
|
|
|
//SEG31 [15] return [ ] ( main:0 [ ] )
|
|
|
|
|
//SEG34 [17] return [ ] ( main:0 [ ] )
|
|
|
|
|
rts
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1384,9 +1468,15 @@ main: {
|
|
|
|
|
//SEG29 [14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ] ( main:0 [ main::j#1 ] ) -- xby_neq_coby1_then_la1
|
|
|
|
|
cpx #$b
|
|
|
|
|
bne b2_from_b2
|
|
|
|
|
//SEG30 main::@return
|
|
|
|
|
//SEG30 main::@4
|
|
|
|
|
b4:
|
|
|
|
|
//SEG31 [15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] ) -- _deref_cowo1=_inc__deref_cowo1
|
|
|
|
|
inc $d020
|
|
|
|
|
//SEG32 [16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] ) -- _deref_cowo1=_dec__deref_cowo1
|
|
|
|
|
dec $d000+$21
|
|
|
|
|
//SEG33 main::@return
|
|
|
|
|
breturn:
|
|
|
|
|
//SEG31 [15] return [ ] ( main:0 [ ] )
|
|
|
|
|
//SEG34 [17] return [ ] ( main:0 [ ] )
|
|
|
|
|
rts
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1486,9 +1576,15 @@ main: {
|
|
|
|
|
//SEG29 [14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ] ( main:0 [ main::j#1 ] ) -- xby_neq_coby1_then_la1
|
|
|
|
|
cpx #$b
|
|
|
|
|
bne b2
|
|
|
|
|
//SEG30 main::@return
|
|
|
|
|
//SEG30 main::@4
|
|
|
|
|
b4:
|
|
|
|
|
//SEG31 [15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] ) -- _deref_cowo1=_inc__deref_cowo1
|
|
|
|
|
inc $d020
|
|
|
|
|
//SEG32 [16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] ) -- _deref_cowo1=_dec__deref_cowo1
|
|
|
|
|
dec $d000+$21
|
|
|
|
|
//SEG33 main::@return
|
|
|
|
|
breturn:
|
|
|
|
|
//SEG31 [15] return [ ] ( main:0 [ ] )
|
|
|
|
|
//SEG34 [17] return [ ] ( main:0 [ ] )
|
|
|
|
|
rts
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1497,6 +1593,7 @@ Removing instruction bend:
|
|
|
|
|
Removing instruction b1_from_main:
|
|
|
|
|
Removing instruction b3:
|
|
|
|
|
Removing instruction b2_from_b3:
|
|
|
|
|
Removing instruction b4:
|
|
|
|
|
Removing instruction breturn:
|
|
|
|
|
Succesful ASM optimization Pass5UnusedLabelElimination
|
|
|
|
|
ASSEMBLER
|
|
|
|
@@ -1584,8 +1681,13 @@ main: {
|
|
|
|
|
//SEG29 [14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ] ( main:0 [ main::j#1 ] ) -- xby_neq_coby1_then_la1
|
|
|
|
|
cpx #$b
|
|
|
|
|
bne b2
|
|
|
|
|
//SEG30 main::@return
|
|
|
|
|
//SEG31 [15] return [ ] ( main:0 [ ] )
|
|
|
|
|
//SEG30 main::@4
|
|
|
|
|
//SEG31 [15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] ) -- _deref_cowo1=_inc__deref_cowo1
|
|
|
|
|
inc $d020
|
|
|
|
|
//SEG32 [16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] ) -- _deref_cowo1=_dec__deref_cowo1
|
|
|
|
|
dec $d000+$21
|
|
|
|
|
//SEG33 main::@return
|
|
|
|
|
//SEG34 [17] return [ ] ( main:0 [ ] )
|
|
|
|
|
rts
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1675,8 +1777,13 @@ main: {
|
|
|
|
|
//SEG29 [14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ] ( main:0 [ main::j#1 ] ) -- xby_neq_coby1_then_la1
|
|
|
|
|
cpx #$b
|
|
|
|
|
bne b2
|
|
|
|
|
//SEG30 main::@return
|
|
|
|
|
//SEG31 [15] return [ ] ( main:0 [ ] )
|
|
|
|
|
//SEG30 main::@4
|
|
|
|
|
//SEG31 [15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] ) -- _deref_cowo1=_inc__deref_cowo1
|
|
|
|
|
inc $d020
|
|
|
|
|
//SEG32 [16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] ) -- _deref_cowo1=_dec__deref_cowo1
|
|
|
|
|
dec $d000+$21
|
|
|
|
|
//SEG33 main::@return
|
|
|
|
|
//SEG34 [17] return [ ] ( main:0 [ ] )
|
|
|
|
|
rts
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -1691,6 +1798,7 @@ FINAL SYMBOL TABLE
|
|
|
|
|
(label) main::@1
|
|
|
|
|
(label) main::@2
|
|
|
|
|
(label) main::@3
|
|
|
|
|
(label) main::@4
|
|
|
|
|
(label) main::@return
|
|
|
|
|
(byte) main::a
|
|
|
|
|
(byte) main::a#0 reg byte a 20.0
|
|
|
|
@@ -1794,8 +1902,13 @@ main: {
|
|
|
|
|
//SEG29 [14] if((byte) main::j#1!=(byte) 11) goto main::@2 [ main::j#1 ] ( main:0 [ main::j#1 ] ) -- xby_neq_coby1_then_la1
|
|
|
|
|
cpx #$b
|
|
|
|
|
bne b2
|
|
|
|
|
//SEG30 main::@return
|
|
|
|
|
//SEG31 [15] return [ ] ( main:0 [ ] )
|
|
|
|
|
//SEG30 main::@4
|
|
|
|
|
//SEG31 [15] *((word) 53280) ← ++ *((word) 53280) [ ] ( main:0 [ ] ) -- _deref_cowo1=_inc__deref_cowo1
|
|
|
|
|
inc $d020
|
|
|
|
|
//SEG32 [16] *((word) 53248+(byte) 33) ← -- *((word) 53248+(byte) 33) [ ] ( main:0 [ ] ) -- _deref_cowo1=_dec__deref_cowo1
|
|
|
|
|
dec $d000+$21
|
|
|
|
|
//SEG33 main::@return
|
|
|
|
|
//SEG34 [17] return [ ] ( main:0 [ ] )
|
|
|
|
|
rts
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|