mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-01-31 19:31:55 +00:00
Added test for direct increment of constant numberic pointer ++*$d020;
This commit is contained in:
parent
8462d75265
commit
788f3d63a2
@ -259,6 +259,13 @@ public class AsmFragmentSignature {
|
||||
return bind(deref.getPointer()) + "_derefidx_" + bind(deref.getIndex());
|
||||
}
|
||||
|
||||
// Find value if it is already bound
|
||||
for (String name : bindings.keySet()) {
|
||||
Value bound = bindings.get(name);
|
||||
if (bound.equals(value))
|
||||
return name;
|
||||
}
|
||||
|
||||
if (value instanceof VariableRef) {
|
||||
value = program.getSymbolInfos().getVariable((VariableRef) value);
|
||||
}
|
||||
@ -313,15 +320,6 @@ public class AsmFragmentSignature {
|
||||
} else if (value instanceof ConstantVar) {
|
||||
ConstantVar constantVar = (ConstantVar) value;
|
||||
SymbolType constType = constantVar.getType();
|
||||
// Find value if it is already bound
|
||||
for (String name : bindings.keySet()) {
|
||||
Value bound = bindings.get(name);
|
||||
if (bound instanceof ConstantVar) {
|
||||
if (bound.equals(value))
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (SymbolTypeBasic.BYTE.equals(constType)) {
|
||||
String name = "coby" + nextConstByteIdx++;
|
||||
|
@ -3,7 +3,6 @@
|
||||
void main() {
|
||||
|
||||
byte* screen = $0400;
|
||||
|
||||
// RValue pointer expression (constant)
|
||||
byte a = *(screen+80);
|
||||
|
||||
@ -24,5 +23,11 @@ void main() {
|
||||
*(screen+160+j) = *(screen+200+j);
|
||||
}
|
||||
|
||||
// Incrementing directly on a word
|
||||
++*$d020;
|
||||
--*($d000+$21);
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
@ -50,5 +50,7 @@ main: {
|
||||
inx
|
||||
cpx #$b
|
||||
bne b2
|
||||
inc $d020
|
||||
dec $d000+$21
|
||||
rts
|
||||
}
|
||||
|
@ -25,7 +25,11 @@ 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
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -8,6 +8,7 @@
|
||||
(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
|
||||
|
Loading…
x
Reference in New Issue
Block a user