2017-07-29 19:04:28 +00:00
|
|
|
byte[15] fibs = $1100;
|
|
|
|
|
2017-08-12 00:55:20 +00:00
|
|
|
main();
|
|
|
|
|
|
|
|
void main() {
|
|
|
|
fibs[0] = 0;
|
|
|
|
fibs[1] = 1;
|
|
|
|
byte i = 0;
|
|
|
|
do {
|
|
|
|
fibs[i+2] = fibs[i]+fibs[i+1];
|
|
|
|
} while(++i<15)
|
|
|
|
}
|
|
|
|
Adding pre/post-modifier (byte) main::i ← ++ (byte) main::i
|
2017-07-29 19:04:28 +00:00
|
|
|
PROGRAM
|
|
|
|
(byte[15]) fibs ← (word) 4352
|
2017-08-12 00:55:20 +00:00
|
|
|
(void~) $0 ← call main
|
2017-08-18 06:40:15 +00:00
|
|
|
proc (void()) main()
|
2017-07-29 19:04:28 +00:00
|
|
|
*((byte[15]) fibs + (byte) 0) ← (byte) 0
|
|
|
|
*((byte[15]) fibs + (byte) 1) ← (byte) 1
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte) main::i ← (byte) 0
|
|
|
|
main::@1:
|
|
|
|
(byte~) main::$0 ← (byte) main::i + (byte) 2
|
|
|
|
(byte~) main::$1 ← (byte[15]) fibs *idx (byte) main::i
|
|
|
|
(byte~) main::$2 ← (byte) main::i + (byte) 1
|
|
|
|
(byte~) main::$3 ← (byte[15]) fibs *idx (byte~) main::$2
|
|
|
|
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
|
|
|
*((byte[15]) fibs + (byte~) main::$0) ← (byte~) main::$4
|
|
|
|
(byte) main::i ← ++ (byte) main::i
|
|
|
|
(boolean~) main::$5 ← (byte) main::i < (byte) 15
|
|
|
|
if((boolean~) main::$5) goto main::@1
|
|
|
|
main::@return:
|
|
|
|
return
|
2017-08-18 06:40:15 +00:00
|
|
|
endproc // main()
|
2017-07-29 19:04:28 +00:00
|
|
|
|
|
|
|
SYMBOLS
|
2017-08-12 00:55:20 +00:00
|
|
|
(void~) $0
|
2017-07-29 19:04:28 +00:00
|
|
|
(byte[15]) fibs
|
2017-08-12 00:55:20 +00:00
|
|
|
(void()) main()
|
|
|
|
(byte~) main::$0
|
|
|
|
(byte~) main::$1
|
|
|
|
(byte~) main::$2
|
|
|
|
(byte~) main::$3
|
|
|
|
(byte~) main::$4
|
|
|
|
(boolean~) main::$5
|
|
|
|
(label) main::@1
|
|
|
|
(label) main::@return
|
|
|
|
(byte) main::i
|
2017-07-29 19:04:28 +00:00
|
|
|
|
|
|
|
INITIAL CONTROL FLOW GRAPH
|
2017-08-12 18:16:07 +00:00
|
|
|
@begin: scope:[] from
|
2017-07-29 19:04:28 +00:00
|
|
|
(byte[15]) fibs ← (word) 4352
|
2017-08-12 00:55:20 +00:00
|
|
|
(void~) $0 ← call main
|
|
|
|
to:@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main: scope:[main] from
|
2017-07-29 19:04:28 +00:00
|
|
|
*((byte[15]) fibs + (byte) 0) ← (byte) 0
|
|
|
|
*((byte[15]) fibs + (byte) 1) ← (byte) 1
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte) main::i ← (byte) 0
|
|
|
|
to:main::@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@1: scope:[main] from main main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte~) main::$0 ← (byte) main::i + (byte) 2
|
|
|
|
(byte~) main::$1 ← (byte[15]) fibs *idx (byte) main::i
|
|
|
|
(byte~) main::$2 ← (byte) main::i + (byte) 1
|
|
|
|
(byte~) main::$3 ← (byte[15]) fibs *idx (byte~) main::$2
|
|
|
|
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
|
|
|
*((byte[15]) fibs + (byte~) main::$0) ← (byte~) main::$4
|
|
|
|
(byte) main::i ← ++ (byte) main::i
|
|
|
|
(boolean~) main::$5 ← (byte) main::i < (byte) 15
|
|
|
|
if((boolean~) main::$5) goto main::@1
|
|
|
|
to:main::@2
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@2: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
to:main::@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@return: scope:[main] from main::@2
|
2017-08-12 00:55:20 +00:00
|
|
|
return
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@return
|
2017-08-12 18:16:07 +00:00
|
|
|
@1: scope:[] from @begin
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@end
|
2017-08-12 18:16:07 +00:00
|
|
|
@end: scope:[] from @1
|
2017-07-29 19:04:28 +00:00
|
|
|
|
2017-08-12 00:55:20 +00:00
|
|
|
Removing empty block main::@2
|
|
|
|
Removing empty block @1
|
2017-07-29 19:04:28 +00:00
|
|
|
CONTROL FLOW GRAPH
|
2017-08-12 18:16:07 +00:00
|
|
|
@begin: scope:[] from
|
2017-07-29 19:04:28 +00:00
|
|
|
(byte[15]) fibs ← (word) 4352
|
2017-08-12 00:55:20 +00:00
|
|
|
(void~) $0 ← call main
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@end
|
2017-08-12 18:16:07 +00:00
|
|
|
main: scope:[main] from
|
2017-07-29 19:04:28 +00:00
|
|
|
*((byte[15]) fibs + (byte) 0) ← (byte) 0
|
|
|
|
*((byte[15]) fibs + (byte) 1) ← (byte) 1
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte) main::i ← (byte) 0
|
|
|
|
to:main::@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@1: scope:[main] from main main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte~) main::$0 ← (byte) main::i + (byte) 2
|
|
|
|
(byte~) main::$1 ← (byte[15]) fibs *idx (byte) main::i
|
|
|
|
(byte~) main::$2 ← (byte) main::i + (byte) 1
|
|
|
|
(byte~) main::$3 ← (byte[15]) fibs *idx (byte~) main::$2
|
|
|
|
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
|
|
|
*((byte[15]) fibs + (byte~) main::$0) ← (byte~) main::$4
|
|
|
|
(byte) main::i ← ++ (byte) main::i
|
|
|
|
(boolean~) main::$5 ← (byte) main::i < (byte) 15
|
|
|
|
if((boolean~) main::$5) goto main::@1
|
|
|
|
to:main::@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@return: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
return
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@return
|
2017-08-12 18:16:07 +00:00
|
|
|
@end: scope:[] from @begin
|
2017-07-29 19:04:28 +00:00
|
|
|
|
2017-08-11 22:15:59 +00:00
|
|
|
PROCEDURE MODIFY VARIABLE ANALYSIS
|
|
|
|
|
2017-07-29 19:04:28 +00:00
|
|
|
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL
|
2017-08-12 18:16:07 +00:00
|
|
|
@begin: scope:[] from
|
2017-07-29 19:04:28 +00:00
|
|
|
(byte[15]) fibs ← (word) 4352
|
2017-08-12 00:55:20 +00:00
|
|
|
call main param-assignment
|
|
|
|
to:@2
|
2017-08-12 18:16:07 +00:00
|
|
|
@2: scope:[] from @begin
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@end
|
2017-08-12 18:16:07 +00:00
|
|
|
main: scope:[main] from @begin
|
2017-07-29 19:04:28 +00:00
|
|
|
*((byte[15]) fibs + (byte) 0) ← (byte) 0
|
|
|
|
*((byte[15]) fibs + (byte) 1) ← (byte) 1
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte) main::i ← (byte) 0
|
|
|
|
to:main::@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@1: scope:[main] from main main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte~) main::$0 ← (byte) main::i + (byte) 2
|
|
|
|
(byte~) main::$1 ← (byte[15]) fibs *idx (byte) main::i
|
|
|
|
(byte~) main::$2 ← (byte) main::i + (byte) 1
|
|
|
|
(byte~) main::$3 ← (byte[15]) fibs *idx (byte~) main::$2
|
|
|
|
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
|
|
|
*((byte[15]) fibs + (byte~) main::$0) ← (byte~) main::$4
|
|
|
|
(byte) main::i ← ++ (byte) main::i
|
|
|
|
(boolean~) main::$5 ← (byte) main::i < (byte) 15
|
|
|
|
if((boolean~) main::$5) goto main::@1
|
|
|
|
to:main::@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@return: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
return
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@return
|
2017-08-12 18:16:07 +00:00
|
|
|
@end: scope:[] from @2
|
2017-07-29 19:04:28 +00:00
|
|
|
|
|
|
|
Completing Phi functions...
|
|
|
|
CONTROL FLOW GRAPH SSA
|
2017-08-12 18:16:07 +00:00
|
|
|
@begin: scope:[] from
|
2017-07-29 19:04:28 +00:00
|
|
|
(byte[15]) fibs#0 ← (word) 4352
|
2017-08-12 00:55:20 +00:00
|
|
|
call main param-assignment
|
|
|
|
to:@2
|
2017-08-12 18:16:07 +00:00
|
|
|
@2: scope:[] from @begin
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@end
|
2017-08-12 18:16:07 +00:00
|
|
|
main: scope:[main] from @begin
|
2017-08-12 16:30:21 +00:00
|
|
|
(byte[15]) fibs#1 ← phi( @begin/(byte[15]) fibs#0 )
|
2017-08-12 00:55:20 +00:00
|
|
|
*((byte[15]) fibs#1 + (byte) 0) ← (byte) 0
|
|
|
|
*((byte[15]) fibs#1 + (byte) 1) ← (byte) 1
|
|
|
|
(byte) main::i#0 ← (byte) 0
|
|
|
|
to:main::@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@1: scope:[main] from main main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte[15]) fibs#2 ← phi( main/(byte[15]) fibs#1 main::@1/(byte[15]) fibs#2 )
|
|
|
|
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
|
|
|
(byte~) main::$0 ← (byte) main::i#2 + (byte) 2
|
|
|
|
(byte~) main::$1 ← (byte[15]) fibs#2 *idx (byte) main::i#2
|
|
|
|
(byte~) main::$2 ← (byte) main::i#2 + (byte) 1
|
|
|
|
(byte~) main::$3 ← (byte[15]) fibs#2 *idx (byte~) main::$2
|
|
|
|
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
|
|
|
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$4
|
|
|
|
(byte) main::i#1 ← ++ (byte) main::i#2
|
|
|
|
(boolean~) main::$5 ← (byte) main::i#1 < (byte) 15
|
|
|
|
if((boolean~) main::$5) goto main::@1
|
|
|
|
to:main::@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@return: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
return
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@return
|
2017-08-12 18:16:07 +00:00
|
|
|
@end: scope:[] from @2
|
2017-07-29 19:04:28 +00:00
|
|
|
|
|
|
|
CONTROL FLOW GRAPH WITH ASSIGNMENT CALL & RETURN
|
2017-08-12 18:16:07 +00:00
|
|
|
@begin: scope:[] from
|
2017-07-29 19:04:28 +00:00
|
|
|
(byte[15]) fibs#0 ← (word) 4352
|
2017-08-12 00:55:20 +00:00
|
|
|
call main param-assignment
|
|
|
|
to:@2
|
2017-08-12 18:16:07 +00:00
|
|
|
@2: scope:[] from @begin
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@end
|
2017-08-12 18:16:07 +00:00
|
|
|
main: scope:[main] from @begin
|
2017-08-12 16:30:21 +00:00
|
|
|
(byte[15]) fibs#1 ← phi( @begin/(byte[15]) fibs#0 )
|
2017-08-12 00:55:20 +00:00
|
|
|
*((byte[15]) fibs#1 + (byte) 0) ← (byte) 0
|
|
|
|
*((byte[15]) fibs#1 + (byte) 1) ← (byte) 1
|
|
|
|
(byte) main::i#0 ← (byte) 0
|
|
|
|
to:main::@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@1: scope:[main] from main main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte[15]) fibs#2 ← phi( main/(byte[15]) fibs#1 main::@1/(byte[15]) fibs#2 )
|
|
|
|
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
|
|
|
(byte~) main::$0 ← (byte) main::i#2 + (byte) 2
|
|
|
|
(byte~) main::$1 ← (byte[15]) fibs#2 *idx (byte) main::i#2
|
|
|
|
(byte~) main::$2 ← (byte) main::i#2 + (byte) 1
|
|
|
|
(byte~) main::$3 ← (byte[15]) fibs#2 *idx (byte~) main::$2
|
|
|
|
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
|
|
|
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$4
|
|
|
|
(byte) main::i#1 ← ++ (byte) main::i#2
|
|
|
|
(boolean~) main::$5 ← (byte) main::i#1 < (byte) 15
|
|
|
|
if((boolean~) main::$5) goto main::@1
|
|
|
|
to:main::@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@return: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
return
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@return
|
2017-08-12 18:16:07 +00:00
|
|
|
@end: scope:[] from @2
|
2017-07-29 19:04:28 +00:00
|
|
|
|
2017-08-20 19:09:03 +00:00
|
|
|
INITIAL SSA SYMBOL TABLE
|
|
|
|
(label) @2
|
|
|
|
(label) @begin
|
|
|
|
(label) @end
|
|
|
|
(byte[15]) fibs
|
|
|
|
(byte[15]) fibs#0
|
|
|
|
(byte[15]) fibs#1
|
|
|
|
(byte[15]) fibs#2
|
|
|
|
(void()) main()
|
|
|
|
(byte~) main::$0
|
|
|
|
(byte~) main::$1
|
|
|
|
(byte~) main::$2
|
|
|
|
(byte~) main::$3
|
|
|
|
(byte~) main::$4
|
|
|
|
(boolean~) main::$5
|
|
|
|
(label) main::@1
|
|
|
|
(label) main::@return
|
|
|
|
(byte) main::i
|
|
|
|
(byte) main::i#0
|
|
|
|
(byte) main::i#1
|
|
|
|
(byte) main::i#2
|
|
|
|
|
2017-08-12 00:55:20 +00:00
|
|
|
Culled Empty Block (label) @2
|
|
|
|
Succesful SSA optimization Pass2CullEmptyBlocks
|
2017-07-29 19:04:28 +00:00
|
|
|
CONTROL FLOW GRAPH
|
2017-08-12 18:16:07 +00:00
|
|
|
@begin: scope:[] from
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte[15]) fibs#0 ← (word) 4352
|
|
|
|
call main param-assignment
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@end
|
2017-08-12 18:16:07 +00:00
|
|
|
main: scope:[main] from @begin
|
2017-08-12 16:30:21 +00:00
|
|
|
(byte[15]) fibs#1 ← phi( @begin/(byte[15]) fibs#0 )
|
2017-08-12 00:55:20 +00:00
|
|
|
*((byte[15]) fibs#1 + (byte) 0) ← (byte) 0
|
|
|
|
*((byte[15]) fibs#1 + (byte) 1) ← (byte) 1
|
|
|
|
(byte) main::i#0 ← (byte) 0
|
|
|
|
to:main::@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@1: scope:[main] from main main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte[15]) fibs#2 ← phi( main/(byte[15]) fibs#1 main::@1/(byte[15]) fibs#2 )
|
|
|
|
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
|
|
|
(byte~) main::$0 ← (byte) main::i#2 + (byte) 2
|
|
|
|
(byte~) main::$1 ← (byte[15]) fibs#2 *idx (byte) main::i#2
|
|
|
|
(byte~) main::$2 ← (byte) main::i#2 + (byte) 1
|
|
|
|
(byte~) main::$3 ← (byte[15]) fibs#2 *idx (byte~) main::$2
|
|
|
|
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
|
|
|
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$4
|
|
|
|
(byte) main::i#1 ← ++ (byte) main::i#2
|
|
|
|
(boolean~) main::$5 ← (byte) main::i#1 < (byte) 15
|
|
|
|
if((boolean~) main::$5) goto main::@1
|
|
|
|
to:main::@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@return: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
return
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@return
|
2017-08-12 18:16:07 +00:00
|
|
|
@end: scope:[] from @begin
|
2017-07-29 19:04:28 +00:00
|
|
|
|
2017-10-15 15:53:18 +00:00
|
|
|
Alias (byte[15]) fibs#0 = (byte[15]) fibs#1
|
|
|
|
Succesful SSA optimization Pass2AliasElimination
|
2017-07-29 19:04:28 +00:00
|
|
|
CONTROL FLOW GRAPH
|
2017-08-12 18:16:07 +00:00
|
|
|
@begin: scope:[] from
|
2017-10-15 15:53:18 +00:00
|
|
|
(byte[15]) fibs#0 ← (word) 4352
|
2017-08-12 00:55:20 +00:00
|
|
|
call main param-assignment
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@end
|
2017-08-12 18:16:07 +00:00
|
|
|
main: scope:[main] from @begin
|
2017-10-15 15:53:18 +00:00
|
|
|
*((byte[15]) fibs#0 + (byte) 0) ← (byte) 0
|
|
|
|
*((byte[15]) fibs#0 + (byte) 1) ← (byte) 1
|
|
|
|
(byte) main::i#0 ← (byte) 0
|
2017-08-12 00:55:20 +00:00
|
|
|
to:main::@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@1: scope:[main] from main main::@1
|
2017-10-15 15:53:18 +00:00
|
|
|
(byte[15]) fibs#2 ← phi( main/(byte[15]) fibs#0 main::@1/(byte[15]) fibs#2 )
|
|
|
|
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte~) main::$0 ← (byte) main::i#2 + (byte) 2
|
|
|
|
(byte~) main::$1 ← (byte[15]) fibs#2 *idx (byte) main::i#2
|
|
|
|
(byte~) main::$2 ← (byte) main::i#2 + (byte) 1
|
|
|
|
(byte~) main::$3 ← (byte[15]) fibs#2 *idx (byte~) main::$2
|
|
|
|
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
|
|
|
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$4
|
|
|
|
(byte) main::i#1 ← ++ (byte) main::i#2
|
|
|
|
(boolean~) main::$5 ← (byte) main::i#1 < (byte) 15
|
|
|
|
if((boolean~) main::$5) goto main::@1
|
|
|
|
to:main::@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@return: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
return
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@return
|
2017-08-12 18:16:07 +00:00
|
|
|
@end: scope:[] from @begin
|
2017-08-12 00:55:20 +00:00
|
|
|
|
2017-10-15 15:53:18 +00:00
|
|
|
Self Phi Eliminated (byte[15]) fibs#2
|
|
|
|
Succesful SSA optimization Pass2SelfPhiElimination
|
2017-07-29 19:04:28 +00:00
|
|
|
CONTROL FLOW GRAPH
|
2017-08-12 18:16:07 +00:00
|
|
|
@begin: scope:[] from
|
2017-10-15 15:53:18 +00:00
|
|
|
(byte[15]) fibs#0 ← (word) 4352
|
2017-08-12 00:55:20 +00:00
|
|
|
call main param-assignment
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@end
|
2017-08-12 18:16:07 +00:00
|
|
|
main: scope:[main] from @begin
|
2017-10-15 15:53:18 +00:00
|
|
|
*((byte[15]) fibs#0 + (byte) 0) ← (byte) 0
|
|
|
|
*((byte[15]) fibs#0 + (byte) 1) ← (byte) 1
|
|
|
|
(byte) main::i#0 ← (byte) 0
|
2017-08-12 00:55:20 +00:00
|
|
|
to:main::@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@1: scope:[main] from main main::@1
|
2017-10-15 15:53:18 +00:00
|
|
|
(byte[15]) fibs#2 ← phi( main/(byte[15]) fibs#0 )
|
|
|
|
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte~) main::$0 ← (byte) main::i#2 + (byte) 2
|
|
|
|
(byte~) main::$1 ← (byte[15]) fibs#2 *idx (byte) main::i#2
|
|
|
|
(byte~) main::$2 ← (byte) main::i#2 + (byte) 1
|
|
|
|
(byte~) main::$3 ← (byte[15]) fibs#2 *idx (byte~) main::$2
|
|
|
|
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
|
|
|
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$4
|
|
|
|
(byte) main::i#1 ← ++ (byte) main::i#2
|
|
|
|
(boolean~) main::$5 ← (byte) main::i#1 < (byte) 15
|
|
|
|
if((boolean~) main::$5) goto main::@1
|
|
|
|
to:main::@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@return: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
return
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@return
|
2017-08-12 18:16:07 +00:00
|
|
|
@end: scope:[] from @begin
|
2017-08-12 00:55:20 +00:00
|
|
|
|
2017-10-15 15:53:18 +00:00
|
|
|
Simple Condition (boolean~) main::$5 if((byte) main::i#1<(byte) 15) goto main::@1
|
|
|
|
Succesful SSA optimization Pass2ConditionalJumpSimplification
|
2017-07-29 19:04:28 +00:00
|
|
|
CONTROL FLOW GRAPH
|
2017-08-12 18:16:07 +00:00
|
|
|
@begin: scope:[] from
|
2017-10-15 15:53:18 +00:00
|
|
|
(byte[15]) fibs#0 ← (word) 4352
|
2017-08-12 00:55:20 +00:00
|
|
|
call main param-assignment
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@end
|
2017-08-12 18:16:07 +00:00
|
|
|
main: scope:[main] from @begin
|
2017-10-15 15:53:18 +00:00
|
|
|
*((byte[15]) fibs#0 + (byte) 0) ← (byte) 0
|
|
|
|
*((byte[15]) fibs#0 + (byte) 1) ← (byte) 1
|
|
|
|
(byte) main::i#0 ← (byte) 0
|
2017-08-12 00:55:20 +00:00
|
|
|
to:main::@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@1: scope:[main] from main main::@1
|
2017-10-15 15:53:18 +00:00
|
|
|
(byte[15]) fibs#2 ← phi( main/(byte[15]) fibs#0 )
|
|
|
|
(byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 )
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte~) main::$0 ← (byte) main::i#2 + (byte) 2
|
|
|
|
(byte~) main::$1 ← (byte[15]) fibs#2 *idx (byte) main::i#2
|
|
|
|
(byte~) main::$2 ← (byte) main::i#2 + (byte) 1
|
|
|
|
(byte~) main::$3 ← (byte[15]) fibs#2 *idx (byte~) main::$2
|
|
|
|
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
|
|
|
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$4
|
|
|
|
(byte) main::i#1 ← ++ (byte) main::i#2
|
2017-10-15 15:53:18 +00:00
|
|
|
if((byte) main::i#1<(byte) 15) goto main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
to:main::@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@return: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
return
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@return
|
2017-08-12 18:16:07 +00:00
|
|
|
@end: scope:[] from @begin
|
2017-08-12 00:55:20 +00:00
|
|
|
|
2017-10-15 15:53:18 +00:00
|
|
|
Constant (const byte[15]) fibs#0 = 4352
|
|
|
|
Constant (const byte) main::i#0 = 0
|
|
|
|
Succesful SSA optimization Pass2ConstantIdentification
|
2017-07-29 19:04:28 +00:00
|
|
|
CONTROL FLOW GRAPH
|
2017-08-12 18:16:07 +00:00
|
|
|
@begin: scope:[] from
|
2017-08-12 00:55:20 +00:00
|
|
|
call main param-assignment
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@end
|
2017-08-12 18:16:07 +00:00
|
|
|
main: scope:[main] from @begin
|
2017-10-15 15:53:18 +00:00
|
|
|
*((const byte[15]) fibs#0 + (byte) 0) ← (byte) 0
|
|
|
|
*((const byte[15]) fibs#0 + (byte) 1) ← (byte) 1
|
2017-08-12 00:55:20 +00:00
|
|
|
to:main::@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@1: scope:[main] from main main::@1
|
2017-10-15 15:53:18 +00:00
|
|
|
(byte[15]) fibs#2 ← phi( main/(const byte[15]) fibs#0 )
|
|
|
|
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 )
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte~) main::$0 ← (byte) main::i#2 + (byte) 2
|
|
|
|
(byte~) main::$1 ← (byte[15]) fibs#2 *idx (byte) main::i#2
|
|
|
|
(byte~) main::$2 ← (byte) main::i#2 + (byte) 1
|
|
|
|
(byte~) main::$3 ← (byte[15]) fibs#2 *idx (byte~) main::$2
|
|
|
|
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
|
|
|
*((byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$4
|
|
|
|
(byte) main::i#1 ← ++ (byte) main::i#2
|
|
|
|
if((byte) main::i#1<(byte) 15) goto main::@1
|
|
|
|
to:main::@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@return: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
return
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@return
|
2017-08-12 18:16:07 +00:00
|
|
|
@end: scope:[] from @begin
|
2017-08-12 00:55:20 +00:00
|
|
|
|
2017-10-15 15:53:18 +00:00
|
|
|
Constant (const byte[15]) fibs#2 = fibs#0
|
|
|
|
Succesful SSA optimization Pass2ConstantIdentification
|
2017-07-29 19:04:28 +00:00
|
|
|
CONTROL FLOW GRAPH
|
2017-08-12 18:16:07 +00:00
|
|
|
@begin: scope:[] from
|
2017-08-12 00:55:20 +00:00
|
|
|
call main param-assignment
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@end
|
2017-08-12 18:16:07 +00:00
|
|
|
main: scope:[main] from @begin
|
2017-10-15 15:53:18 +00:00
|
|
|
*((const byte[15]) fibs#0 + (byte) 0) ← (byte) 0
|
|
|
|
*((const byte[15]) fibs#0 + (byte) 1) ← (byte) 1
|
2017-08-12 00:55:20 +00:00
|
|
|
to:main::@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@1: scope:[main] from main main::@1
|
2017-10-15 15:53:18 +00:00
|
|
|
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 )
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte~) main::$0 ← (byte) main::i#2 + (byte) 2
|
2017-10-15 15:53:18 +00:00
|
|
|
(byte~) main::$1 ← (const byte[15]) fibs#2 *idx (byte) main::i#2
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte~) main::$2 ← (byte) main::i#2 + (byte) 1
|
2017-10-15 15:53:18 +00:00
|
|
|
(byte~) main::$3 ← (const byte[15]) fibs#2 *idx (byte~) main::$2
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
2017-10-15 15:53:18 +00:00
|
|
|
*((const byte[15]) fibs#2 + (byte~) main::$0) ← (byte~) main::$4
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte) main::i#1 ← ++ (byte) main::i#2
|
|
|
|
if((byte) main::i#1<(byte) 15) goto main::@1
|
|
|
|
to:main::@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@return: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
return
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@return
|
2017-08-12 18:16:07 +00:00
|
|
|
@end: scope:[] from @begin
|
2017-07-29 19:04:28 +00:00
|
|
|
|
2017-10-15 15:53:18 +00:00
|
|
|
Consolidated assigned array index constant in assignment *(fibs#0+0)
|
|
|
|
Consolidated assigned array index constant in assignment *(fibs#0+1)
|
2017-08-12 00:55:20 +00:00
|
|
|
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
|
|
|
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
|
|
|
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
|
|
|
Consolidated referenced array index constant in assignment main::$3
|
2017-10-15 15:53:18 +00:00
|
|
|
Consolidated assigned array index constant in assignment *(fibs#2+2 + main::$0)
|
2017-07-29 19:04:28 +00:00
|
|
|
Succesful SSA optimization Pass2ConstantAdditionElimination
|
|
|
|
CONTROL FLOW GRAPH
|
2017-08-12 18:16:07 +00:00
|
|
|
@begin: scope:[] from
|
2017-08-12 00:55:20 +00:00
|
|
|
call main param-assignment
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@end
|
2017-08-12 18:16:07 +00:00
|
|
|
main: scope:[main] from @begin
|
2017-10-15 15:53:18 +00:00
|
|
|
*((const byte[15]) fibs#0+(byte) 0) ← (byte) 0
|
|
|
|
*((const byte[15]) fibs#0+(byte) 1) ← (byte) 1
|
2017-08-12 00:55:20 +00:00
|
|
|
to:main::@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@1: scope:[main] from main main::@1
|
2017-10-15 15:53:18 +00:00
|
|
|
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 )
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte~) main::$0 ← (byte) main::i#2
|
2017-10-15 15:53:18 +00:00
|
|
|
(byte~) main::$1 ← (const byte[15]) fibs#2 *idx (byte) main::i#2
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte~) main::$2 ← (byte) main::i#2
|
2017-10-15 15:53:18 +00:00
|
|
|
(byte~) main::$3 ← (const byte[15]) fibs#2+(byte) 1 *idx (byte~) main::$2
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
2017-10-15 15:53:18 +00:00
|
|
|
*((const byte[15]) fibs#2+(byte) 2 + (byte~) main::$0) ← (byte~) main::$4
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte) main::i#1 ← ++ (byte) main::i#2
|
|
|
|
if((byte) main::i#1<(byte) 15) goto main::@1
|
|
|
|
to:main::@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@return: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
return
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@return
|
2017-08-12 18:16:07 +00:00
|
|
|
@end: scope:[] from @begin
|
2017-08-12 00:55:20 +00:00
|
|
|
|
2017-10-15 15:53:18 +00:00
|
|
|
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
2017-08-12 00:55:20 +00:00
|
|
|
Alias (byte) main::i#2 = (byte~) main::$0 (byte~) main::$2
|
2017-07-29 19:04:28 +00:00
|
|
|
Succesful SSA optimization Pass2AliasElimination
|
|
|
|
CONTROL FLOW GRAPH
|
2017-08-12 18:16:07 +00:00
|
|
|
@begin: scope:[] from
|
2017-08-12 00:55:20 +00:00
|
|
|
call main param-assignment
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@end
|
2017-08-12 18:16:07 +00:00
|
|
|
main: scope:[main] from @begin
|
2017-10-15 15:53:18 +00:00
|
|
|
*((const byte[15]) fibs#0+(byte) 0) ← (byte) 0
|
|
|
|
*((const byte[15]) fibs#0+(byte) 1) ← (byte) 1
|
2017-08-12 00:55:20 +00:00
|
|
|
to:main::@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@1: scope:[main] from main main::@1
|
2017-10-15 15:53:18 +00:00
|
|
|
(byte) main::i#2 ← phi( main/(const byte) main::i#0 main::@1/(byte) main::i#1 )
|
|
|
|
(byte~) main::$1 ← (const byte[15]) fibs#2 *idx (byte) main::i#2
|
|
|
|
(byte~) main::$3 ← (const byte[15]) fibs#2+(byte) 1 *idx (byte) main::i#2
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
2017-10-15 15:53:18 +00:00
|
|
|
*((const byte[15]) fibs#2+(byte) 2 + (byte) main::i#2) ← (byte~) main::$4
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte) main::i#1 ← ++ (byte) main::i#2
|
|
|
|
if((byte) main::i#1<(byte) 15) goto main::@1
|
|
|
|
to:main::@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@return: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
return
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@return
|
2017-08-12 18:16:07 +00:00
|
|
|
@end: scope:[] from @begin
|
2017-08-12 00:55:20 +00:00
|
|
|
|
|
|
|
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
|
|
|
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
|
|
|
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
2017-10-15 15:53:18 +00:00
|
|
|
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
|
|
|
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
|
|
|
Multiple usages for variable. Not optimizing sub-constant (byte) main::i#2
|
|
|
|
Constant inlined fibs#2 = (const byte[15]) fibs#0
|
|
|
|
Constant inlined main::i#0 = (byte) 0
|
|
|
|
Succesful SSA optimization Pass2ConstantInlining
|
|
|
|
CONTROL FLOW GRAPH
|
|
|
|
@begin: scope:[] from
|
|
|
|
call main param-assignment
|
|
|
|
to:@end
|
|
|
|
main: scope:[main] from @begin
|
|
|
|
*((const byte[15]) fibs#0+(byte) 0) ← (byte) 0
|
|
|
|
*((const byte[15]) fibs#0+(byte) 1) ← (byte) 1
|
|
|
|
to:main::@1
|
|
|
|
main::@1: scope:[main] from main main::@1
|
|
|
|
(byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 )
|
|
|
|
(byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2
|
|
|
|
(byte~) main::$3 ← (const byte[15]) fibs#0+(byte) 1 *idx (byte) main::i#2
|
|
|
|
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
|
|
|
*((const byte[15]) fibs#0+(byte) 2 + (byte) main::i#2) ← (byte~) main::$4
|
|
|
|
(byte) main::i#1 ← ++ (byte) main::i#2
|
|
|
|
if((byte) main::i#1<(byte) 15) goto main::@1
|
|
|
|
to:main::@return
|
|
|
|
main::@return: scope:[main] from main::@1
|
|
|
|
return
|
|
|
|
to:@return
|
|
|
|
@end: scope:[] from @begin
|
|
|
|
|
2017-08-20 19:09:03 +00:00
|
|
|
FINAL SYMBOL TABLE
|
|
|
|
(label) @begin
|
|
|
|
(label) @end
|
|
|
|
(byte[15]) fibs
|
2017-10-15 15:53:18 +00:00
|
|
|
(const byte[15]) fibs#0 = (word) 4352
|
2017-08-20 19:09:03 +00:00
|
|
|
(void()) main()
|
|
|
|
(byte~) main::$1
|
|
|
|
(byte~) main::$3
|
|
|
|
(byte~) main::$4
|
|
|
|
(label) main::@1
|
|
|
|
(label) main::@return
|
|
|
|
(byte) main::i
|
|
|
|
(byte) main::i#1
|
|
|
|
(byte) main::i#2
|
|
|
|
|
2017-08-12 16:30:21 +00:00
|
|
|
Block Sequence Planned @begin @end main main::@1 main::@return
|
2017-08-12 00:55:20 +00:00
|
|
|
Added new block during phi lifting main::@3(between main::@1 and main::@1)
|
2017-08-12 16:30:21 +00:00
|
|
|
Block Sequence Planned @begin @end main main::@1 main::@return main::@3
|
2017-07-29 19:04:28 +00:00
|
|
|
CONTROL FLOW GRAPH - PHI LIFTED
|
2017-08-12 18:16:07 +00:00
|
|
|
@begin: scope:[] from
|
2017-08-12 00:55:20 +00:00
|
|
|
call main param-assignment
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@end
|
2017-08-12 18:16:07 +00:00
|
|
|
@end: scope:[] from @begin
|
|
|
|
main: scope:[main] from @begin
|
2017-10-15 15:53:18 +00:00
|
|
|
*((const byte[15]) fibs#0+(byte) 0) ← (byte) 0
|
|
|
|
*((const byte[15]) fibs#0+(byte) 1) ← (byte) 1
|
2017-08-12 00:55:20 +00:00
|
|
|
to:main::@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@1: scope:[main] from main main::@3
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte) main::i#2 ← phi( main/(byte) 0 main::@3/(byte~) main::i#3 )
|
2017-10-15 15:53:18 +00:00
|
|
|
(byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2
|
|
|
|
(byte~) main::$3 ← (const byte[15]) fibs#0+(byte) 1 *idx (byte) main::i#2
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3
|
2017-10-15 15:53:18 +00:00
|
|
|
*((const byte[15]) fibs#0+(byte) 2 + (byte) main::i#2) ← (byte~) main::$4
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte) main::i#1 ← ++ (byte) main::i#2
|
|
|
|
if((byte) main::i#1<(byte) 15) goto main::@3
|
|
|
|
to:main::@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@return: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
return
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@3: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
(byte~) main::i#3 ← (byte) main::i#1
|
|
|
|
to:main::@1
|
2017-07-29 19:04:28 +00:00
|
|
|
|
2017-09-06 16:59:53 +00:00
|
|
|
CALL GRAPH
|
|
|
|
Calls in [] to 0:main
|
|
|
|
|
|
|
|
Propagating live ranges...
|
2017-07-29 19:04:28 +00:00
|
|
|
Propagating live ranges...
|
|
|
|
Propagating live ranges...
|
2017-09-06 16:59:53 +00:00
|
|
|
CONTROL FLOW GRAPH - LIVE RANGES FOUND
|
2017-08-12 18:16:07 +00:00
|
|
|
@begin: scope:[] from
|
2017-08-12 00:55:20 +00:00
|
|
|
[0] call main param-assignment [ ]
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@end
|
2017-08-12 18:16:07 +00:00
|
|
|
@end: scope:[] from @begin
|
|
|
|
main: scope:[main] from @begin
|
2017-10-15 15:53:18 +00:00
|
|
|
[1] *((const byte[15]) fibs#0+(byte) 0) ← (byte) 0 [ ]
|
|
|
|
[2] *((const byte[15]) fibs#0+(byte) 1) ← (byte) 1 [ ]
|
2017-08-12 00:55:20 +00:00
|
|
|
to:main::@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@1: scope:[main] from main main::@3
|
2017-08-12 00:55:20 +00:00
|
|
|
[3] (byte) main::i#2 ← phi( main/(byte) 0 main::@3/(byte~) main::i#3 ) [ main::i#2 ]
|
2017-10-15 15:53:18 +00:00
|
|
|
[4] (byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ]
|
|
|
|
[5] (byte~) main::$3 ← (const byte[15]) fibs#0+(byte) 1 *idx (byte) main::i#2 [ main::i#2 main::$1 main::$3 ]
|
2017-08-12 00:55:20 +00:00
|
|
|
[6] (byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3 [ main::i#2 main::$4 ]
|
2017-10-15 15:53:18 +00:00
|
|
|
[7] *((const byte[15]) fibs#0+(byte) 2 + (byte) main::i#2) ← (byte~) main::$4 [ main::i#2 ]
|
2017-08-12 00:55:20 +00:00
|
|
|
[8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
|
|
|
[9] if((byte) main::i#1<(byte) 15) goto main::@3 [ main::i#1 ]
|
|
|
|
to:main::@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@return: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
[10] return [ ]
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@3: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
[11] (byte~) main::i#3 ← (byte) main::i#1 [ main::i#3 ]
|
|
|
|
to:main::@1
|
2017-07-29 19:04:28 +00:00
|
|
|
|
|
|
|
Created 1 initial phi equivalence classes
|
2017-08-12 00:55:20 +00:00
|
|
|
Coalesced [11] main::i#3 ← main::i#1
|
2017-07-29 19:04:28 +00:00
|
|
|
Coalesced down to 1 phi equivalence classes
|
2017-08-12 00:55:20 +00:00
|
|
|
Culled Empty Block (label) main::@3
|
2017-08-12 16:30:21 +00:00
|
|
|
Block Sequence Planned @begin @end main main::@1 main::@return
|
2017-07-29 19:04:28 +00:00
|
|
|
Propagating live ranges...
|
|
|
|
Propagating live ranges...
|
2017-09-06 16:59:53 +00:00
|
|
|
Propagating live ranges...
|
2017-07-29 19:04:28 +00:00
|
|
|
CONTROL FLOW GRAPH - PHI MEM COALESCED
|
2017-08-12 18:16:07 +00:00
|
|
|
@begin: scope:[] from
|
2017-08-12 00:55:20 +00:00
|
|
|
[0] call main param-assignment [ ]
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@end
|
2017-08-12 18:16:07 +00:00
|
|
|
@end: scope:[] from @begin
|
|
|
|
main: scope:[main] from @begin
|
2017-10-15 15:53:18 +00:00
|
|
|
[1] *((const byte[15]) fibs#0+(byte) 0) ← (byte) 0 [ ]
|
|
|
|
[2] *((const byte[15]) fibs#0+(byte) 1) ← (byte) 1 [ ]
|
2017-08-12 00:55:20 +00:00
|
|
|
to:main::@1
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@1: scope:[main] from main main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
[3] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 ) [ main::i#2 ]
|
2017-10-15 15:53:18 +00:00
|
|
|
[4] (byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ]
|
|
|
|
[5] (byte~) main::$3 ← (const byte[15]) fibs#0+(byte) 1 *idx (byte) main::i#2 [ main::i#2 main::$1 main::$3 ]
|
2017-08-12 00:55:20 +00:00
|
|
|
[6] (byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3 [ main::i#2 main::$4 ]
|
2017-10-15 15:53:18 +00:00
|
|
|
[7] *((const byte[15]) fibs#0+(byte) 2 + (byte) main::i#2) ← (byte~) main::$4 [ main::i#2 ]
|
2017-08-12 00:55:20 +00:00
|
|
|
[8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ]
|
|
|
|
[9] if((byte) main::i#1<(byte) 15) goto main::@1 [ main::i#1 ]
|
|
|
|
to:main::@return
|
2017-08-12 18:16:07 +00:00
|
|
|
main::@return: scope:[main] from main::@1
|
2017-08-12 00:55:20 +00:00
|
|
|
[10] return [ ]
|
2017-08-12 16:30:21 +00:00
|
|
|
to:@return
|
2017-07-29 19:04:28 +00:00
|
|
|
|
|
|
|
DOMINATORS
|
2017-08-12 16:30:21 +00:00
|
|
|
@begin dominated by @begin
|
|
|
|
@end dominated by @end @begin
|
|
|
|
main dominated by @begin main
|
|
|
|
main::@1 dominated by @begin main::@1 main
|
|
|
|
main::@return dominated by main::@return @begin main::@1 main
|
2017-07-29 19:04:28 +00:00
|
|
|
|
2017-08-12 00:55:20 +00:00
|
|
|
Found back edge: Loop head: main::@1 tails: main::@1 blocks: null
|
|
|
|
Populated: Loop head: main::@1 tails: main::@1 blocks: main::@1
|
2017-07-29 19:04:28 +00:00
|
|
|
NATURAL LOOPS
|
2017-08-12 00:55:20 +00:00
|
|
|
Loop head: main::@1 tails: main::@1 blocks: main::@1
|
2017-07-29 19:04:28 +00:00
|
|
|
|
2017-08-12 00:55:20 +00:00
|
|
|
Found 0 loops in scope []
|
|
|
|
Found 1 loops in scope [main]
|
|
|
|
Loop head: main::@1 tails: main::@1 blocks: main::@1
|
2017-07-29 19:04:28 +00:00
|
|
|
NATURAL LOOPS WITH DEPTH
|
2017-08-12 00:55:20 +00:00
|
|
|
Loop head: main::@1 tails: main::@1 blocks: main::@1 depth: 1
|
2017-07-29 19:04:28 +00:00
|
|
|
|
2017-08-01 18:38:55 +00:00
|
|
|
|
|
|
|
VARIABLE REGISTER WEIGHTS
|
|
|
|
(byte[15]) fibs
|
2017-08-12 00:55:20 +00:00
|
|
|
(void()) main()
|
|
|
|
(byte~) main::$1 11.0
|
|
|
|
(byte~) main::$3 22.0
|
|
|
|
(byte~) main::$4 22.0
|
|
|
|
(byte) main::i
|
|
|
|
(byte) main::i#1 16.5
|
|
|
|
(byte) main::i#2 11.0
|
2017-08-01 18:38:55 +00:00
|
|
|
|
2017-07-29 19:04:28 +00:00
|
|
|
Initial phi equivalence classes
|
2017-08-12 00:55:20 +00:00
|
|
|
[ main::i#2 main::i#1 ]
|
|
|
|
Added variable main::$1 to zero page equivalence class [ main::$1 ]
|
|
|
|
Added variable main::$3 to zero page equivalence class [ main::$3 ]
|
|
|
|
Added variable main::$4 to zero page equivalence class [ main::$4 ]
|
2017-07-29 19:04:28 +00:00
|
|
|
Complete equivalence classes
|
2017-08-12 00:55:20 +00:00
|
|
|
[ main::i#2 main::i#1 ]
|
|
|
|
[ main::$1 ]
|
|
|
|
[ main::$3 ]
|
|
|
|
[ main::$4 ]
|
2017-08-21 06:27:34 +00:00
|
|
|
Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ]
|
|
|
|
Allocated zp ZP_BYTE:3 [ main::$1 ]
|
|
|
|
Allocated zp ZP_BYTE:4 [ main::$3 ]
|
|
|
|
Allocated zp ZP_BYTE:5 [ main::$4 ]
|
2017-07-29 19:04:28 +00:00
|
|
|
INITIAL ASM
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG0 Global Constants & labels
|
|
|
|
.const fibs = $1100
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG1 @begin
|
2017-08-12 16:30:21 +00:00
|
|
|
bbegin:
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG2 [0] call main param-assignment [ ]
|
2017-08-12 00:55:20 +00:00
|
|
|
jsr main
|
2017-08-12 16:30:21 +00:00
|
|
|
jmp bend
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG3 @end
|
2017-08-12 16:30:21 +00:00
|
|
|
bend:
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG4 main
|
2017-08-12 16:30:21 +00:00
|
|
|
main: {
|
2017-09-06 16:59:53 +00:00
|
|
|
.label _1 = 3
|
|
|
|
.label _3 = 4
|
|
|
|
.label _4 = 5
|
2017-08-20 23:19:43 +00:00
|
|
|
.label i = 2
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG5 [1] *((const byte[15]) fibs#0+(byte) 0) ← (byte) 0 [ ] -- _star_cowo1=coby2
|
2017-08-12 16:30:21 +00:00
|
|
|
lda #$0
|
2017-10-15 15:53:18 +00:00
|
|
|
sta fibs+$0
|
|
|
|
//SEG6 [2] *((const byte[15]) fibs#0+(byte) 1) ← (byte) 1 [ ] -- _star_cowo1=coby2
|
2017-08-12 16:30:21 +00:00
|
|
|
lda #$1
|
2017-10-15 15:53:18 +00:00
|
|
|
sta fibs+$1
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG7 [3] phi from main to main::@1
|
2017-08-12 16:30:21 +00:00
|
|
|
b1_from_main:
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG8 [3] phi (byte) main::i#2 = (byte) 0 -- zpby1=coby1
|
2017-08-12 16:30:21 +00:00
|
|
|
lda #$0
|
2017-08-20 23:19:43 +00:00
|
|
|
sta i
|
2017-08-12 16:30:21 +00:00
|
|
|
jmp b1
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG9 [3] phi from main::@1 to main::@1
|
2017-08-12 16:30:21 +00:00
|
|
|
b1_from_b1:
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG10 [3] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy
|
2017-08-12 16:30:21 +00:00
|
|
|
jmp b1
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG11 main::@1
|
2017-08-12 16:30:21 +00:00
|
|
|
b1:
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG12 [4] (byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] -- zpby1=cowo1_staridx_zpby2
|
2017-08-20 23:19:43 +00:00
|
|
|
ldx i
|
2017-10-15 15:53:18 +00:00
|
|
|
lda fibs,x
|
2017-09-06 16:59:53 +00:00
|
|
|
sta _1
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG13 [5] (byte~) main::$3 ← (const byte[15]) fibs#0+(byte) 1 *idx (byte) main::i#2 [ main::i#2 main::$1 main::$3 ] -- zpby1=cowo1_staridx_zpby2
|
2017-08-20 23:19:43 +00:00
|
|
|
ldx i
|
2017-10-15 15:53:18 +00:00
|
|
|
lda fibs+$1,x
|
2017-09-06 16:59:53 +00:00
|
|
|
sta _3
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG14 [6] (byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3 [ main::i#2 main::$4 ] -- zpby1=zpby2_plus_zpby3
|
2017-09-06 16:59:53 +00:00
|
|
|
lda _1
|
2017-08-12 16:30:21 +00:00
|
|
|
clc
|
2017-09-06 16:59:53 +00:00
|
|
|
adc _3
|
|
|
|
sta _4
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG15 [7] *((const byte[15]) fibs#0+(byte) 2 + (byte) main::i#2) ← (byte~) main::$4 [ main::i#2 ] -- cowo1_staridx_zpby1=zpby2
|
2017-09-06 16:59:53 +00:00
|
|
|
lda _4
|
2017-08-20 23:19:43 +00:00
|
|
|
ldx i
|
2017-10-15 15:53:18 +00:00
|
|
|
sta fibs+$2,x
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG16 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- zpby1=_inc_zpby1
|
|
|
|
inc i
|
|
|
|
//SEG17 [9] if((byte) main::i#1<(byte) 15) goto main::@1 [ main::i#1 ] -- zpby1_lt_coby1_then_la1
|
|
|
|
lda i
|
2017-08-12 16:30:21 +00:00
|
|
|
cmp #$f
|
|
|
|
bcc b1_from_b1
|
|
|
|
jmp breturn
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG18 main::@return
|
2017-08-12 16:30:21 +00:00
|
|
|
breturn:
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG19 [10] return [ ]
|
2017-08-12 16:30:21 +00:00
|
|
|
rts
|
|
|
|
}
|
2017-08-12 00:55:20 +00:00
|
|
|
|
2017-10-15 15:53:18 +00:00
|
|
|
Statement [1] *((const byte[15]) fibs#0+(byte) 0) ← (byte) 0 [ ] always clobbers reg byte a
|
|
|
|
Statement [2] *((const byte[15]) fibs#0+(byte) 1) ← (byte) 1 [ ] always clobbers reg byte a
|
|
|
|
Statement [1] *((const byte[15]) fibs#0+(byte) 0) ← (byte) 0 [ ] always clobbers reg byte a
|
|
|
|
Statement [2] *((const byte[15]) fibs#0+(byte) 1) ← (byte) 1 [ ] always clobbers reg byte a
|
2017-08-21 06:27:34 +00:00
|
|
|
Equivalence Class zp ZP_BYTE:4 [ main::$3 ] has ALU potential.
|
2017-08-06 11:31:29 +00:00
|
|
|
REGISTER UPLIFT POTENTIAL REGISTERS
|
2017-08-21 06:27:34 +00:00
|
|
|
Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y ,
|
|
|
|
Potential registers zp ZP_BYTE:3 [ main::$1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y ,
|
|
|
|
Potential registers zp ZP_BYTE:4 [ main::$3 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , reg byte alu ,
|
|
|
|
Potential registers zp ZP_BYTE:5 [ main::$4 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y ,
|
2017-08-06 11:31:29 +00:00
|
|
|
|
2017-08-01 22:57:29 +00:00
|
|
|
REGISTER UPLIFT SCOPES
|
2017-08-21 06:27:34 +00:00
|
|
|
Uplift Scope [main] 27.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 22: zp ZP_BYTE:4 [ main::$3 ] 22: zp ZP_BYTE:5 [ main::$4 ] 11: zp ZP_BYTE:3 [ main::$1 ]
|
2017-08-12 00:55:20 +00:00
|
|
|
Uplift Scope []
|
2017-08-01 22:57:29 +00:00
|
|
|
|
2017-08-12 00:55:20 +00:00
|
|
|
Uplifting [main] best 362 combination reg byte x [ main::i#2 main::i#1 ] reg byte alu [ main::$3 ] reg byte a [ main::$4 ] reg byte a [ main::$1 ]
|
|
|
|
Uplifting [] best 362 combination
|
2017-08-06 15:00:10 +00:00
|
|
|
MISSING FRAGMENTS
|
|
|
|
zpby1=zpby2_plus_cowo1_staridx_zpby3
|
|
|
|
zpby1=zpby2_plus_cowo1_staridx_aby
|
|
|
|
zpby1=zpby2_plus_cowo1_staridx_xby
|
|
|
|
zpby1=zpby2_plus_cowo1_staridx_yby
|
|
|
|
aby=zpby1_plus_cowo1_staridx_zpby2
|
|
|
|
aby=zpby1_plus_cowo1_staridx_xby
|
|
|
|
aby=zpby1_plus_cowo1_staridx_yby
|
|
|
|
xby=zpby1_plus_cowo1_staridx_zpby2
|
|
|
|
xby=zpby1_plus_cowo1_staridx_aby
|
|
|
|
xby=zpby1_plus_cowo1_staridx_yby
|
|
|
|
yby=zpby1_plus_cowo1_staridx_zpby2
|
|
|
|
yby=zpby1_plus_cowo1_staridx_aby
|
|
|
|
yby=zpby1_plus_cowo1_staridx_xby
|
|
|
|
zpby1=aby_plus_cowo1_staridx_zpby2
|
|
|
|
aby=aby_plus_cowo1_staridx_zpby1
|
|
|
|
xby=aby_plus_cowo1_staridx_zpby1
|
|
|
|
yby=aby_plus_cowo1_staridx_zpby1
|
|
|
|
zpby1=xby_plus_cowo1_staridx_zpby2
|
|
|
|
zpby1=xby_plus_cowo1_staridx_aby
|
|
|
|
zpby1=xby_plus_cowo1_staridx_yby
|
|
|
|
aby=xby_plus_cowo1_staridx_zpby1
|
|
|
|
aby=xby_plus_cowo1_staridx_yby
|
|
|
|
xby=xby_plus_cowo1_staridx_zpby1
|
|
|
|
xby=xby_plus_cowo1_staridx_aby
|
|
|
|
xby=xby_plus_cowo1_staridx_yby
|
|
|
|
yby=xby_plus_cowo1_staridx_zpby1
|
|
|
|
yby=xby_plus_cowo1_staridx_aby
|
|
|
|
zpby1=yby_plus_cowo1_staridx_zpby2
|
|
|
|
zpby1=yby_plus_cowo1_staridx_aby
|
|
|
|
zpby1=yby_plus_cowo1_staridx_xby
|
|
|
|
aby=yby_plus_cowo1_staridx_zpby1
|
|
|
|
aby=yby_plus_cowo1_staridx_xby
|
|
|
|
xby=yby_plus_cowo1_staridx_zpby1
|
|
|
|
xby=yby_plus_cowo1_staridx_aby
|
|
|
|
yby=yby_plus_cowo1_staridx_zpby1
|
|
|
|
yby=yby_plus_cowo1_staridx_aby
|
|
|
|
yby=yby_plus_cowo1_staridx_xby
|
2017-08-12 16:30:21 +00:00
|
|
|
Removing instruction jmp bend
|
|
|
|
Removing instruction jmp b1
|
|
|
|
Removing instruction jmp breturn
|
2017-08-12 22:30:51 +00:00
|
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
2017-07-29 19:04:28 +00:00
|
|
|
ASSEMBLER
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG0 Global Constants & labels
|
|
|
|
.const fibs = $1100
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG1 @begin
|
2017-08-12 16:30:21 +00:00
|
|
|
bbegin:
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG2 [0] call main param-assignment [ ]
|
2017-08-12 00:55:20 +00:00
|
|
|
jsr main
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG3 @end
|
2017-08-12 16:30:21 +00:00
|
|
|
bend:
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG4 main
|
2017-08-12 16:30:21 +00:00
|
|
|
main: {
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG5 [1] *((const byte[15]) fibs#0+(byte) 0) ← (byte) 0 [ ] -- _star_cowo1=coby2
|
2017-08-12 16:30:21 +00:00
|
|
|
lda #$0
|
2017-10-15 15:53:18 +00:00
|
|
|
sta fibs+$0
|
|
|
|
//SEG6 [2] *((const byte[15]) fibs#0+(byte) 1) ← (byte) 1 [ ] -- _star_cowo1=coby2
|
2017-08-12 16:30:21 +00:00
|
|
|
lda #$1
|
2017-10-15 15:53:18 +00:00
|
|
|
sta fibs+$1
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG7 [3] phi from main to main::@1
|
2017-08-12 16:30:21 +00:00
|
|
|
b1_from_main:
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG8 [3] phi (byte) main::i#2 = (byte) 0 -- xby=coby1
|
2017-08-12 16:30:21 +00:00
|
|
|
ldx #$0
|
|
|
|
jmp b1
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG9 [3] phi from main::@1 to main::@1
|
2017-08-12 16:30:21 +00:00
|
|
|
b1_from_b1:
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG10 [3] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy
|
|
|
|
//SEG11 main::@1
|
2017-08-12 16:30:21 +00:00
|
|
|
b1:
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG12 [4] (byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] -- aby=cowo1_staridx_xby
|
|
|
|
lda fibs,x
|
|
|
|
//SEG13 [5] (byte~) main::$3 ← (const byte[15]) fibs#0+(byte) 1 *idx (byte) main::i#2 [ main::i#2 main::$1 main::$3 ]
|
|
|
|
// [5] main::$3 ← fibs#0+1 *idx main::i#2 // ALU
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG14 [6] (byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3 [ main::i#2 main::$4 ] -- aby=aby_plus_cowo1_staridx_xby
|
2017-08-12 16:30:21 +00:00
|
|
|
clc
|
2017-10-15 15:53:18 +00:00
|
|
|
adc fibs+$1,x
|
|
|
|
//SEG15 [7] *((const byte[15]) fibs#0+(byte) 2 + (byte) main::i#2) ← (byte~) main::$4 [ main::i#2 ] -- cowo1_staridx_xby=aby
|
|
|
|
sta fibs+$2,x
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG16 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
|
2017-08-12 16:30:21 +00:00
|
|
|
inx
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG17 [9] if((byte) main::i#1<(byte) 15) goto main::@1 [ main::i#1 ] -- xby_lt_coby1_then_la1
|
2017-08-12 16:30:21 +00:00
|
|
|
cpx #$f
|
|
|
|
bcc b1_from_b1
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG18 main::@return
|
2017-08-12 16:30:21 +00:00
|
|
|
breturn:
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG19 [10] return [ ]
|
2017-08-12 16:30:21 +00:00
|
|
|
rts
|
|
|
|
}
|
|
|
|
|
2017-08-12 19:27:36 +00:00
|
|
|
Replacing label b1_from_b1 with b1
|
|
|
|
Removing instruction b1_from_b1:
|
2017-08-12 22:30:51 +00:00
|
|
|
Succesful ASM optimization Pass5RedundantLabelElimination
|
2017-07-29 19:04:28 +00:00
|
|
|
ASSEMBLER
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG0 Global Constants & labels
|
|
|
|
.const fibs = $1100
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG1 @begin
|
2017-08-12 16:30:21 +00:00
|
|
|
bbegin:
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG2 [0] call main param-assignment [ ]
|
2017-08-12 00:55:20 +00:00
|
|
|
jsr main
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG3 @end
|
2017-08-12 16:30:21 +00:00
|
|
|
bend:
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG4 main
|
2017-08-12 16:30:21 +00:00
|
|
|
main: {
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG5 [1] *((const byte[15]) fibs#0+(byte) 0) ← (byte) 0 [ ] -- _star_cowo1=coby2
|
2017-08-12 16:30:21 +00:00
|
|
|
lda #$0
|
2017-10-15 15:53:18 +00:00
|
|
|
sta fibs+$0
|
|
|
|
//SEG6 [2] *((const byte[15]) fibs#0+(byte) 1) ← (byte) 1 [ ] -- _star_cowo1=coby2
|
2017-08-12 16:30:21 +00:00
|
|
|
lda #$1
|
2017-10-15 15:53:18 +00:00
|
|
|
sta fibs+$1
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG7 [3] phi from main to main::@1
|
2017-08-12 16:30:21 +00:00
|
|
|
b1_from_main:
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG8 [3] phi (byte) main::i#2 = (byte) 0 -- xby=coby1
|
2017-08-12 16:30:21 +00:00
|
|
|
ldx #$0
|
2017-08-12 19:27:36 +00:00
|
|
|
jmp b1
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG9 [3] phi from main::@1 to main::@1
|
|
|
|
//SEG10 [3] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy
|
|
|
|
//SEG11 main::@1
|
2017-08-12 16:30:21 +00:00
|
|
|
b1:
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG12 [4] (byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] -- aby=cowo1_staridx_xby
|
|
|
|
lda fibs,x
|
|
|
|
//SEG13 [5] (byte~) main::$3 ← (const byte[15]) fibs#0+(byte) 1 *idx (byte) main::i#2 [ main::i#2 main::$1 main::$3 ]
|
|
|
|
// [5] main::$3 ← fibs#0+1 *idx main::i#2 // ALU
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG14 [6] (byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3 [ main::i#2 main::$4 ] -- aby=aby_plus_cowo1_staridx_xby
|
2017-08-12 16:30:21 +00:00
|
|
|
clc
|
2017-10-15 15:53:18 +00:00
|
|
|
adc fibs+$1,x
|
|
|
|
//SEG15 [7] *((const byte[15]) fibs#0+(byte) 2 + (byte) main::i#2) ← (byte~) main::$4 [ main::i#2 ] -- cowo1_staridx_xby=aby
|
|
|
|
sta fibs+$2,x
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG16 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
|
2017-08-12 16:30:21 +00:00
|
|
|
inx
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG17 [9] if((byte) main::i#1<(byte) 15) goto main::@1 [ main::i#1 ] -- xby_lt_coby1_then_la1
|
2017-08-12 16:30:21 +00:00
|
|
|
cpx #$f
|
2017-08-12 19:27:36 +00:00
|
|
|
bcc b1
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG18 main::@return
|
2017-08-12 16:30:21 +00:00
|
|
|
breturn:
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG19 [10] return [ ]
|
2017-08-12 16:30:21 +00:00
|
|
|
rts
|
|
|
|
}
|
2017-07-29 19:04:28 +00:00
|
|
|
|
2017-08-12 19:27:36 +00:00
|
|
|
Removing instruction bbegin:
|
|
|
|
Removing instruction bend:
|
|
|
|
Removing instruction b1_from_main:
|
|
|
|
Removing instruction breturn:
|
2017-08-12 22:30:51 +00:00
|
|
|
Succesful ASM optimization Pass5UnusedLabelElimination
|
2017-08-12 19:27:36 +00:00
|
|
|
ASSEMBLER
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG0 Global Constants & labels
|
|
|
|
.const fibs = $1100
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG1 @begin
|
|
|
|
//SEG2 [0] call main param-assignment [ ]
|
2017-08-12 19:27:36 +00:00
|
|
|
jsr main
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG3 @end
|
|
|
|
//SEG4 main
|
2017-08-12 19:27:36 +00:00
|
|
|
main: {
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG5 [1] *((const byte[15]) fibs#0+(byte) 0) ← (byte) 0 [ ] -- _star_cowo1=coby2
|
2017-08-12 19:27:36 +00:00
|
|
|
lda #$0
|
2017-10-15 15:53:18 +00:00
|
|
|
sta fibs+$0
|
|
|
|
//SEG6 [2] *((const byte[15]) fibs#0+(byte) 1) ← (byte) 1 [ ] -- _star_cowo1=coby2
|
2017-08-12 19:27:36 +00:00
|
|
|
lda #$1
|
2017-10-15 15:53:18 +00:00
|
|
|
sta fibs+$1
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG7 [3] phi from main to main::@1
|
|
|
|
//SEG8 [3] phi (byte) main::i#2 = (byte) 0 -- xby=coby1
|
2017-08-12 19:27:36 +00:00
|
|
|
ldx #$0
|
|
|
|
jmp b1
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG9 [3] phi from main::@1 to main::@1
|
|
|
|
//SEG10 [3] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy
|
|
|
|
//SEG11 main::@1
|
2017-08-12 19:27:36 +00:00
|
|
|
b1:
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG12 [4] (byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] -- aby=cowo1_staridx_xby
|
|
|
|
lda fibs,x
|
|
|
|
//SEG13 [5] (byte~) main::$3 ← (const byte[15]) fibs#0+(byte) 1 *idx (byte) main::i#2 [ main::i#2 main::$1 main::$3 ]
|
|
|
|
// [5] main::$3 ← fibs#0+1 *idx main::i#2 // ALU
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG14 [6] (byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3 [ main::i#2 main::$4 ] -- aby=aby_plus_cowo1_staridx_xby
|
2017-08-12 19:27:36 +00:00
|
|
|
clc
|
2017-10-15 15:53:18 +00:00
|
|
|
adc fibs+$1,x
|
|
|
|
//SEG15 [7] *((const byte[15]) fibs#0+(byte) 2 + (byte) main::i#2) ← (byte~) main::$4 [ main::i#2 ] -- cowo1_staridx_xby=aby
|
|
|
|
sta fibs+$2,x
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG16 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
|
2017-08-12 19:27:36 +00:00
|
|
|
inx
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG17 [9] if((byte) main::i#1<(byte) 15) goto main::@1 [ main::i#1 ] -- xby_lt_coby1_then_la1
|
2017-08-12 19:27:36 +00:00
|
|
|
cpx #$f
|
|
|
|
bcc b1
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG18 main::@return
|
|
|
|
//SEG19 [10] return [ ]
|
2017-08-12 19:27:36 +00:00
|
|
|
rts
|
|
|
|
}
|
|
|
|
|
|
|
|
Removing instruction jmp b1
|
2017-08-12 22:30:51 +00:00
|
|
|
Succesful ASM optimization Pass5NextJumpElimination
|
2017-08-12 19:27:36 +00:00
|
|
|
ASSEMBLER
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG0 Global Constants & labels
|
|
|
|
.const fibs = $1100
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG1 @begin
|
|
|
|
//SEG2 [0] call main param-assignment [ ]
|
2017-08-12 19:27:36 +00:00
|
|
|
jsr main
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG3 @end
|
|
|
|
//SEG4 main
|
2017-08-12 19:27:36 +00:00
|
|
|
main: {
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG5 [1] *((const byte[15]) fibs#0+(byte) 0) ← (byte) 0 [ ] -- _star_cowo1=coby2
|
2017-08-12 19:27:36 +00:00
|
|
|
lda #$0
|
2017-10-15 15:53:18 +00:00
|
|
|
sta fibs+$0
|
|
|
|
//SEG6 [2] *((const byte[15]) fibs#0+(byte) 1) ← (byte) 1 [ ] -- _star_cowo1=coby2
|
2017-08-12 19:27:36 +00:00
|
|
|
lda #$1
|
2017-10-15 15:53:18 +00:00
|
|
|
sta fibs+$1
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG7 [3] phi from main to main::@1
|
|
|
|
//SEG8 [3] phi (byte) main::i#2 = (byte) 0 -- xby=coby1
|
2017-08-12 19:27:36 +00:00
|
|
|
ldx #$0
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG9 [3] phi from main::@1 to main::@1
|
|
|
|
//SEG10 [3] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy
|
|
|
|
//SEG11 main::@1
|
2017-08-12 19:27:36 +00:00
|
|
|
b1:
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG12 [4] (byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] -- aby=cowo1_staridx_xby
|
|
|
|
lda fibs,x
|
|
|
|
//SEG13 [5] (byte~) main::$3 ← (const byte[15]) fibs#0+(byte) 1 *idx (byte) main::i#2 [ main::i#2 main::$1 main::$3 ]
|
|
|
|
// [5] main::$3 ← fibs#0+1 *idx main::i#2 // ALU
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG14 [6] (byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3 [ main::i#2 main::$4 ] -- aby=aby_plus_cowo1_staridx_xby
|
2017-08-12 19:27:36 +00:00
|
|
|
clc
|
2017-10-15 15:53:18 +00:00
|
|
|
adc fibs+$1,x
|
|
|
|
//SEG15 [7] *((const byte[15]) fibs#0+(byte) 2 + (byte) main::i#2) ← (byte~) main::$4 [ main::i#2 ] -- cowo1_staridx_xby=aby
|
|
|
|
sta fibs+$2,x
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG16 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
|
2017-08-12 19:27:36 +00:00
|
|
|
inx
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG17 [9] if((byte) main::i#1<(byte) 15) goto main::@1 [ main::i#1 ] -- xby_lt_coby1_then_la1
|
2017-08-12 19:27:36 +00:00
|
|
|
cpx #$f
|
|
|
|
bcc b1
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG18 main::@return
|
|
|
|
//SEG19 [10] return [ ]
|
2017-08-12 19:27:36 +00:00
|
|
|
rts
|
|
|
|
}
|
|
|
|
|
2017-07-29 19:04:28 +00:00
|
|
|
FINAL SYMBOL TABLE
|
2017-08-12 16:30:21 +00:00
|
|
|
(label) @begin
|
|
|
|
(label) @end
|
2017-07-29 19:04:28 +00:00
|
|
|
(byte[15]) fibs
|
2017-10-15 15:53:18 +00:00
|
|
|
(const byte[15]) fibs#0 = (word) 4352
|
2017-08-12 00:55:20 +00:00
|
|
|
(void()) main()
|
|
|
|
(byte~) main::$1 reg byte a 11.0
|
|
|
|
(byte~) main::$3 reg byte alu 22.0
|
|
|
|
(byte~) main::$4 reg byte a 22.0
|
|
|
|
(label) main::@1
|
|
|
|
(label) main::@return
|
|
|
|
(byte) main::i
|
|
|
|
(byte) main::i#1 reg byte x 16.5
|
|
|
|
(byte) main::i#2 reg byte x 11.0
|
|
|
|
|
|
|
|
reg byte x [ main::i#2 main::i#1 ]
|
|
|
|
reg byte a [ main::$1 ]
|
|
|
|
reg byte alu [ main::$3 ]
|
|
|
|
reg byte a [ main::$4 ]
|
2017-07-29 19:04:28 +00:00
|
|
|
|
|
|
|
FINAL CODE
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG0 Global Constants & labels
|
|
|
|
.const fibs = $1100
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG1 @begin
|
|
|
|
//SEG2 [0] call main param-assignment [ ]
|
2017-08-12 00:55:20 +00:00
|
|
|
jsr main
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG3 @end
|
|
|
|
//SEG4 main
|
2017-08-12 16:30:21 +00:00
|
|
|
main: {
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG5 [1] *((const byte[15]) fibs#0+(byte) 0) ← (byte) 0 [ ] -- _star_cowo1=coby2
|
2017-08-12 16:30:21 +00:00
|
|
|
lda #$0
|
2017-10-15 15:53:18 +00:00
|
|
|
sta fibs+$0
|
|
|
|
//SEG6 [2] *((const byte[15]) fibs#0+(byte) 1) ← (byte) 1 [ ] -- _star_cowo1=coby2
|
2017-08-12 16:30:21 +00:00
|
|
|
lda #$1
|
2017-10-15 15:53:18 +00:00
|
|
|
sta fibs+$1
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG7 [3] phi from main to main::@1
|
|
|
|
//SEG8 [3] phi (byte) main::i#2 = (byte) 0 -- xby=coby1
|
2017-08-12 16:30:21 +00:00
|
|
|
ldx #$0
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG9 [3] phi from main::@1 to main::@1
|
|
|
|
//SEG10 [3] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy
|
|
|
|
//SEG11 main::@1
|
2017-08-12 16:30:21 +00:00
|
|
|
b1:
|
2017-10-15 15:53:18 +00:00
|
|
|
//SEG12 [4] (byte~) main::$1 ← (const byte[15]) fibs#0 *idx (byte) main::i#2 [ main::i#2 main::$1 ] -- aby=cowo1_staridx_xby
|
|
|
|
lda fibs,x
|
|
|
|
//SEG13 [5] (byte~) main::$3 ← (const byte[15]) fibs#0+(byte) 1 *idx (byte) main::i#2 [ main::i#2 main::$1 main::$3 ]
|
|
|
|
// [5] main::$3 ← fibs#0+1 *idx main::i#2 // ALU
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG14 [6] (byte~) main::$4 ← (byte~) main::$1 + (byte~) main::$3 [ main::i#2 main::$4 ] -- aby=aby_plus_cowo1_staridx_xby
|
2017-08-12 16:30:21 +00:00
|
|
|
clc
|
2017-10-15 15:53:18 +00:00
|
|
|
adc fibs+$1,x
|
|
|
|
//SEG15 [7] *((const byte[15]) fibs#0+(byte) 2 + (byte) main::i#2) ← (byte~) main::$4 [ main::i#2 ] -- cowo1_staridx_xby=aby
|
|
|
|
sta fibs+$2,x
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG16 [8] (byte) main::i#1 ← ++ (byte) main::i#2 [ main::i#1 ] -- xby=_inc_xby
|
2017-08-12 16:30:21 +00:00
|
|
|
inx
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG17 [9] if((byte) main::i#1<(byte) 15) goto main::@1 [ main::i#1 ] -- xby_lt_coby1_then_la1
|
2017-08-12 16:30:21 +00:00
|
|
|
cpx #$f
|
2017-08-12 19:27:36 +00:00
|
|
|
bcc b1
|
2017-08-20 23:19:43 +00:00
|
|
|
//SEG18 main::@return
|
|
|
|
//SEG19 [10] return [ ]
|
2017-08-12 16:30:21 +00:00
|
|
|
rts
|
|
|
|
}
|
2017-07-29 19:04:28 +00:00
|
|
|
|