1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-02-21 22:29:07 +00:00

Implemented new recursion check that performs much better on programs with many different branches.

This commit is contained in:
Jesper Gravgaard 2019-02-03 17:36:34 +01:00
parent 347a5d0331
commit dcd4e070ba
9 changed files with 8304 additions and 59 deletions

View File

@ -54,10 +54,6 @@ public class CallGraph {
return null;
}
public ScopeRef getFirstCallBlock() {
return ScopeRef.ROOT;
}
/**
* Get sub call blocks called from a specific call block.
*
@ -89,6 +85,47 @@ public class CallGraph {
return callingBlocks;
}
/**
* Get the closure of all procedures called from a specific scope.
* This includes the recursive closure of calls (ie. sub-calls and their sub-calls).
* @param scopeRef The scope (procedure/root) to examine
* @return All scopes called in the closure of calls
*/
public Collection<ScopeRef> getRecursiveCalls(ScopeRef scopeRef) {
ArrayList<ScopeRef> closure = new ArrayList<>();
CallBlock callBlock = getCallBlock(scopeRef);
if(callBlock!=null) {
for(CallBlock.Call call : callBlock.getCalls()) {
addRecursiveCalls(call.getProcedure(), closure);
}
}
return closure;
}
/**
* Get the closure of all procedures called from a specific scope.
* This includes the recursive closure of calls (ie. sub-calls and their sub-calls).
* @param scopeRef The scope (procedure/root) to examine
* @param found The scopes already found
*
* @return All scopes called in the closure of calls
*/
private void addRecursiveCalls(ScopeRef scopeRef, Collection<ScopeRef> found) {
if(found.contains(scopeRef)) {
// Recursion detected - stop here
return;
}
found.add(scopeRef);
CallBlock callBlock = getCallBlock(scopeRef);
if(callBlock!=null) {
for(CallBlock.Call call : callBlock.getCalls()) {
addRecursiveCalls(call.getProcedure(), found);
}
}
}
@Override
public String toString() {
StringBuilder out = new StringBuilder();
@ -126,6 +163,9 @@ public class CallGraph {
*/
private ScopeRef scopeLabel;
/**
* All direct calls from the scope.
*/
private List<Call> calls;
public CallBlock(ScopeRef scopeLabel) {

View File

@ -1,17 +1,12 @@
package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.model.CallGraph;
import dk.camelot64.kickc.model.CompileError;
import dk.camelot64.kickc.model.ControlFlowBlock;
import dk.camelot64.kickc.model.ControlFlowGraph;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.statements.Statement;
import dk.camelot64.kickc.model.statements.StatementCall;
import dk.camelot64.kickc.model.values.ProcedureRef;
import dk.camelot64.kickc.model.values.SymbolRef;
import dk.camelot64.kickc.model.symbols.Procedure;
import dk.camelot64.kickc.model.values.ScopeRef;
import java.util.Deque;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Collection;
/** Asserts that the program has no recursive calls */
public class Pass1AssertNoRecursion extends Pass1Base {
@ -22,53 +17,16 @@ public class Pass1AssertNoRecursion extends Pass1Base {
@Override
public boolean step() {
ControlFlowBlock firstBlock = getGraph().getFirstBlock();
Deque<ControlFlowBlock> path = new LinkedList<>();
assertNoRecursion(firstBlock, path);
CallGraph callGraph = getProgram().getCallGraph();
Collection<Procedure> procedures = getScope().getAllProcedures(true);
for(Procedure procedure : procedures) {
Collection<ScopeRef> recursiveCalls = callGraph.getRecursiveCalls(procedure.getRef());
if(recursiveCalls.contains(procedure.getRef())) {
throw new CompileError("ERROR! Recursion not allowed! Occurs in " + procedure.getRef());
}
}
return false;
}
/**
* Asserts that no methods perform recursive calls
* @param block The block to check
* @param path The call-path taken to the block
*/
private void assertNoRecursion(ControlFlowBlock block, Deque<ControlFlowBlock> path) {
// Detect recursion
if(path.contains(block)) {
StringBuffer msg = new StringBuffer();
Iterator<ControlFlowBlock> pathIt = path.descendingIterator();
while(pathIt.hasNext()) {
ControlFlowBlock pathBlock = pathIt.next();
msg.append(pathBlock.getLabel()).append(" > ");
}
msg.append(block.getLabel());
throw new CompileError("ERROR! Recursion not allowed! "+msg);
}
path.push(block);
// Follow all calls
for(Statement statement : block.getStatements()) {
if(statement instanceof StatementCall) {
ProcedureRef procedureRef = ((StatementCall) statement).getProcedure();
ControlFlowBlock procedureBlock = getGraph().getBlock(procedureRef.getLabelRef());
assertNoRecursion(procedureBlock, path);
}
}
// Follow successors
if(block.getConditionalSuccessor()!=null && !block.getConditionalSuccessor().isProcExit()) {
ControlFlowBlock conditionalSuccessor = getGraph().getConditionalSuccessor(block);
if(!path.contains(conditionalSuccessor)) {
assertNoRecursion(conditionalSuccessor, path);
}
}
if(block.getDefaultSuccessor()!=null && !block.getDefaultSuccessor().isProcExit()) {
ControlFlowBlock defaultSuccessor = getGraph().getDefaultSuccessor(block);
if(!path.contains(defaultSuccessor)) {
assertNoRecursion(defaultSuccessor, path);
}
}
path.pop();
}
}

View File

@ -34,7 +34,7 @@ public class Pass3LoopDepthAnalysis extends Pass2Base {
LabelRef label = entryPointBlock.getLabel();
ScopeRef scope;
if(label.getFullName().equals(LabelRef.BEGIN_BLOCK_NAME)) {
scope = callGraph.getFirstCallBlock();
scope = ScopeRef.ROOT;
} else {
scope = entryPointBlock.getScope();
}

View File

@ -44,6 +44,11 @@ public class TestPrograms {
AsmFragmentTemplateUsages.logUsages(log, false, false, false, false, false, false);
}
@Test
public void testNoRecursionHeavy() throws IOException, URISyntaxException {
compileAndCompare("no-recursion-heavy");
}
@Test
public void testScrollUp() throws IOException, URISyntaxException {
compileAndCompare("test-scroll-up");

View File

@ -0,0 +1,178 @@
byte ba = 0;
byte bb = 0;
byte bc = 0;
byte bd = 0;
byte be = 0;
void main() {
while(true) {
f0();
ba++;
}
}
void f0() {
if(ba==0) {
bb++;
fa();
}
if(ba==1) {
bb++;
fa();
}
if(ba==2) {
bb++;
fa();
}
if(ba==3) {
bb++;
fa();
}
if(ba==4) {
bb++;
fa();
}
if(ba==5) {
bb++;
fa();
}
if(ba==6) {
bb++;
fa();
}
if(ba==7) {
bb++;
fa();
}
if(ba==8) {
bb++;
fa();
}
if(ba==9) {
bb = 0;
fa();
}
}
void fa() {
if(bb==0) {
bc++;
fb();
}
if(bb==1) {
bc++;
fb();
}
if(bb==2) {
bc++;
fb();
}
if(bb==3) {
bc++;
fb();
}
if(bb==4) {
bc++;
fb();
}
if(bb==5) {
bc++;
fb();
}
if(bb==6) {
bc++;
fb();
}
if(bb==7) {
bc++;
fb();
}
if(bb==8) {
bc++;
fb();
}
if(bb==9) {
bc = 0;
fb();
}
}
void fb() {
if(bc==0) {
bd++;
fc();
}
if(bc==1) {
bd++;
fc();
}
if(bc==2) {
bd++;
fc();
}
if(bc==3) {
bd++;
fc();
}
if(bc==4) {
bd++;
fc();
}
if(bc==5) {
bd++;
fc();
}
if(bc==6) {
bd++;
fc();
}
if(bc==7) {
bd++;
fc();
}
if(bc==8) {
bd++;
fc();
}
if(bc==9) {
bd = 0;
fc();
}
}
void fc() {
if(bd==0) {
be++;
}
if(bd==1) {
be++;
}
if(bd==2) {
be++;
}
if(bd==3) {
be++;
}
if(bd==4) {
be++;
}
if(bd==5) {
be++;
}
if(bd==6) {
be++;
}
if(bd==7) {
be++;
}
if(bd==8) {
be++;
}
if(bd==9) {
be = 0;
}
}

View File

@ -0,0 +1,304 @@
.pc = $801 "Basic"
:BasicUpstart(main)
.pc = $80d "Program"
.label ba = 2
.label be = 6
.label bb = 3
.label bb_27 = 4
.label bc = 5
.label bb_101 = 4
.label bb_102 = 4
.label bb_103 = 4
.label bb_104 = 4
.label bb_105 = 4
.label bb_106 = 4
.label bb_107 = 4
.label bb_108 = 4
.label bb_109 = 4
main: {
lda #0
sta ba
sta be
tay
tax
sta bb
b2:
jsr f0
inc ba
jmp b2
}
f0: {
lda ba
cmp #0
bne b1
inc bb
lda bb
sta bb_101
jsr fa
b1:
lda ba
cmp #1
bne b2
inc bb
lda bb
sta bb_102
jsr fa
b2:
lda ba
cmp #2
bne b3
inc bb
lda bb
sta bb_103
jsr fa
b3:
lda ba
cmp #3
bne b4
inc bb
lda bb
sta bb_104
jsr fa
b4:
lda ba
cmp #4
bne b5
inc bb
lda bb
sta bb_105
jsr fa
b5:
lda ba
cmp #5
bne b6
inc bb
lda bb
sta bb_106
jsr fa
b6:
lda ba
cmp #6
bne b7
inc bb
lda bb
sta bb_107
jsr fa
b7:
lda ba
cmp #7
bne b8
inc bb
lda bb
sta bb_108
jsr fa
b8:
lda ba
cmp #8
bne b9
inc bb
lda bb
sta bb_109
jsr fa
b9:
lda ba
cmp #9
bne breturn
lda #0
sta bb_27
jsr fa
lda #0
sta bb
breturn:
rts
}
fa: {
lda bb_27
cmp #0
bne b1
inx
stx bc
jsr fb
b1:
lda bb_27
cmp #1
bne b2
inx
stx bc
jsr fb
b2:
lda bb_27
cmp #2
bne b3
inx
stx bc
jsr fb
b3:
lda bb_27
cmp #3
bne b4
inx
stx bc
jsr fb
b4:
lda bb_27
cmp #4
bne b5
inx
stx bc
jsr fb
b5:
lda bb_27
cmp #5
bne b6
inx
stx bc
jsr fb
b6:
lda bb_27
cmp #6
bne b7
inx
stx bc
jsr fb
b7:
lda bb_27
cmp #7
bne b8
inx
stx bc
jsr fb
b8:
lda bb_27
cmp #8
bne b9
inx
stx bc
jsr fb
b9:
lda bb_27
cmp #9
bne breturn
lda #0
sta bc
jsr fb
ldx #0
breturn:
rts
}
fb: {
lda bc
cmp #0
bne b1
iny
tya
jsr fc
b1:
lda bc
cmp #1
bne b2
iny
tya
jsr fc
b2:
lda bc
cmp #2
bne b3
iny
tya
jsr fc
b3:
lda bc
cmp #3
bne b4
iny
tya
jsr fc
b4:
lda bc
cmp #4
bne b5
iny
tya
jsr fc
b5:
lda bc
cmp #5
bne b6
iny
tya
jsr fc
b6:
lda bc
cmp #6
bne b7
iny
tya
jsr fc
b7:
lda bc
cmp #7
bne b8
iny
tya
jsr fc
b8:
lda bc
cmp #8
bne b9
iny
tya
jsr fc
b9:
lda bc
cmp #9
bne breturn
lda #0
jsr fc
ldy #0
breturn:
rts
}
fc: {
cmp #0
bne b1
inc be
b1:
cmp #1
bne b2
inc be
b2:
cmp #2
bne b3
inc be
b3:
cmp #3
bne b4
inc be
b4:
cmp #4
bne b5
inc be
b5:
cmp #5
bne b6
inc be
b6:
cmp #6
bne b7
inc be
b7:
cmp #7
bne b8
inc be
b8:
cmp #8
bne b9
inc be
b9:
cmp #9
bne breturn
lda #0
sta be
breturn:
rts
}

View File

@ -0,0 +1,444 @@
@begin: scope:[] from
[0] phi()
to:@5
@5: scope:[] from @begin
[1] phi()
[2] call main
to:@end
@end: scope:[] from @5
[3] phi()
main: scope:[main] from @5
[4] phi()
to:main::@1
main::@1: scope:[main] from main main::@7
[5] (byte) ba#17 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@7/(byte) ba#1 )
[5] (byte) be#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@7/(byte) be#13 )
[5] (byte) bd#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@7/(byte) bd#13 )
[5] (byte) bc#2 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@7/(byte) bc#13 )
[5] (byte) bb#16 ← phi( main/(byte/signed byte/word/signed word/dword/signed dword) 0 main::@7/(byte) bb#13 )
to:main::@2
main::@2: scope:[main] from main::@1
[6] phi()
[7] call f0
to:main::@7
main::@7: scope:[main] from main::@2
[8] (byte) ba#1 ← ++ (byte) ba#17
to:main::@1
f0: scope:[f0] from main::@2
[9] if((byte) ba#17!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto f0::@1
to:f0::@11
f0::@11: scope:[f0] from f0
[10] (byte) bb#3 ← ++ (byte) bb#16
[11] (byte~) bb#101 ← (byte) bb#3
[12] call fa
to:f0::@1
f0::@1: scope:[f0] from f0 f0::@11
[13] (byte) be#142 ← phi( f0/(byte) be#2 f0::@11/(byte) be#24 )
[13] (byte) bd#129 ← phi( f0/(byte) bd#2 f0::@11/(byte) bd#24 )
[13] (byte) bc#63 ← phi( f0/(byte) bc#2 f0::@11/(byte) bc#24 )
[13] (byte) bb#18 ← phi( f0/(byte) bb#16 f0::@11/(byte) bb#3 )
[14] if((byte) ba#17!=(byte/signed byte/word/signed word/dword/signed dword) 1) goto f0::@2
to:f0::@12
f0::@12: scope:[f0] from f0::@1
[15] (byte) bb#4 ← ++ (byte) bb#18
[16] (byte~) bb#102 ← (byte) bb#4
[17] call fa
to:f0::@2
f0::@2: scope:[f0] from f0::@1 f0::@12
[18] (byte) be#143 ← phi( f0::@1/(byte) be#142 f0::@12/(byte) be#24 )
[18] (byte) bd#130 ← phi( f0::@1/(byte) bd#129 f0::@12/(byte) bd#24 )
[18] (byte) bc#64 ← phi( f0::@1/(byte) bc#63 f0::@12/(byte) bc#24 )
[18] (byte) bb#19 ← phi( f0::@1/(byte) bb#18 f0::@12/(byte) bb#4 )
[19] if((byte) ba#17!=(byte/signed byte/word/signed word/dword/signed dword) 2) goto f0::@3
to:f0::@13
f0::@13: scope:[f0] from f0::@2
[20] (byte) bb#5 ← ++ (byte) bb#19
[21] (byte~) bb#103 ← (byte) bb#5
[22] call fa
to:f0::@3
f0::@3: scope:[f0] from f0::@13 f0::@2
[23] (byte) be#144 ← phi( f0::@2/(byte) be#143 f0::@13/(byte) be#24 )
[23] (byte) bd#131 ← phi( f0::@2/(byte) bd#130 f0::@13/(byte) bd#24 )
[23] (byte) bc#65 ← phi( f0::@2/(byte) bc#64 f0::@13/(byte) bc#24 )
[23] (byte) bb#20 ← phi( f0::@2/(byte) bb#19 f0::@13/(byte) bb#5 )
[24] if((byte) ba#17!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto f0::@4
to:f0::@14
f0::@14: scope:[f0] from f0::@3
[25] (byte) bb#6 ← ++ (byte) bb#20
[26] (byte~) bb#104 ← (byte) bb#6
[27] call fa
to:f0::@4
f0::@4: scope:[f0] from f0::@14 f0::@3
[28] (byte) be#100 ← phi( f0::@14/(byte) be#24 f0::@3/(byte) be#144 )
[28] (byte) bd#132 ← phi( f0::@14/(byte) bd#24 f0::@3/(byte) bd#131 )
[28] (byte) bc#66 ← phi( f0::@14/(byte) bc#24 f0::@3/(byte) bc#65 )
[28] (byte) bb#21 ← phi( f0::@14/(byte) bb#6 f0::@3/(byte) bb#20 )
[29] if((byte) ba#17!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto f0::@5
to:f0::@15
f0::@15: scope:[f0] from f0::@4
[30] (byte) bb#66 ← ++ (byte) bb#21
[31] (byte~) bb#105 ← (byte) bb#66
[32] call fa
to:f0::@5
f0::@5: scope:[f0] from f0::@15 f0::@4
[33] (byte) be#101 ← phi( f0::@15/(byte) be#24 f0::@4/(byte) be#100 )
[33] (byte) bd#133 ← phi( f0::@15/(byte) bd#24 f0::@4/(byte) bd#132 )
[33] (byte) bc#100 ← phi( f0::@15/(byte) bc#24 f0::@4/(byte) bc#66 )
[33] (byte) bb#22 ← phi( f0::@15/(byte) bb#66 f0::@4/(byte) bb#21 )
[34] if((byte) ba#17!=(byte/signed byte/word/signed word/dword/signed dword) 5) goto f0::@6
to:f0::@16
f0::@16: scope:[f0] from f0::@5
[35] (byte) bb#67 ← ++ (byte) bb#22
[36] (byte~) bb#106 ← (byte) bb#67
[37] call fa
to:f0::@6
f0::@6: scope:[f0] from f0::@16 f0::@5
[38] (byte) be#102 ← phi( f0::@16/(byte) be#24 f0::@5/(byte) be#101 )
[38] (byte) bd#134 ← phi( f0::@16/(byte) bd#24 f0::@5/(byte) bd#133 )
[38] (byte) bc#101 ← phi( f0::@16/(byte) bc#24 f0::@5/(byte) bc#100 )
[38] (byte) bb#23 ← phi( f0::@16/(byte) bb#67 f0::@5/(byte) bb#22 )
[39] if((byte) ba#17!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto f0::@7
to:f0::@17
f0::@17: scope:[f0] from f0::@6
[40] (byte) bb#68 ← ++ (byte) bb#23
[41] (byte~) bb#107 ← (byte) bb#68
[42] call fa
to:f0::@7
f0::@7: scope:[f0] from f0::@17 f0::@6
[43] (byte) be#103 ← phi( f0::@17/(byte) be#24 f0::@6/(byte) be#102 )
[43] (byte) bd#135 ← phi( f0::@17/(byte) bd#24 f0::@6/(byte) bd#134 )
[43] (byte) bc#102 ← phi( f0::@17/(byte) bc#24 f0::@6/(byte) bc#101 )
[43] (byte) bb#24 ← phi( f0::@17/(byte) bb#68 f0::@6/(byte) bb#23 )
[44] if((byte) ba#17!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto f0::@8
to:f0::@18
f0::@18: scope:[f0] from f0::@7
[45] (byte) bb#10 ← ++ (byte) bb#24
[46] (byte~) bb#108 ← (byte) bb#10
[47] call fa
to:f0::@8
f0::@8: scope:[f0] from f0::@18 f0::@7
[48] (byte) be#104 ← phi( f0::@18/(byte) be#24 f0::@7/(byte) be#103 )
[48] (byte) bd#136 ← phi( f0::@18/(byte) bd#24 f0::@7/(byte) bd#135 )
[48] (byte) bc#103 ← phi( f0::@18/(byte) bc#24 f0::@7/(byte) bc#102 )
[48] (byte) bb#25 ← phi( f0::@18/(byte) bb#10 f0::@7/(byte) bb#24 )
[49] if((byte) ba#17!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto f0::@9
to:f0::@19
f0::@19: scope:[f0] from f0::@8
[50] (byte) bb#11 ← ++ (byte) bb#25
[51] (byte~) bb#109 ← (byte) bb#11
[52] call fa
to:f0::@9
f0::@9: scope:[f0] from f0::@19 f0::@8
[53] (byte) be#105 ← phi( f0::@19/(byte) be#24 f0::@8/(byte) be#104 )
[53] (byte) bd#137 ← phi( f0::@19/(byte) bd#24 f0::@8/(byte) bd#136 )
[53] (byte) bc#104 ← phi( f0::@19/(byte) bc#24 f0::@8/(byte) bc#103 )
[53] (byte) bb#49 ← phi( f0::@19/(byte) bb#11 f0::@8/(byte) bb#25 )
[54] if((byte) ba#17!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto f0::@return
to:f0::@20
f0::@20: scope:[f0] from f0::@9
[55] phi()
[56] call fa
to:f0::@return
f0::@return: scope:[f0] from f0::@20 f0::@9
[57] (byte) be#13 ← phi( f0::@9/(byte) be#105 f0::@20/(byte) be#24 )
[57] (byte) bd#13 ← phi( f0::@9/(byte) bd#137 f0::@20/(byte) bd#24 )
[57] (byte) bc#13 ← phi( f0::@9/(byte) bc#104 f0::@20/(byte) bc#24 )
[57] (byte) bb#13 ← phi( f0::@9/(byte) bb#49 f0::@20/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[58] return
to:@return
fa: scope:[fa] from f0::@11 f0::@12 f0::@13 f0::@14 f0::@15 f0::@16 f0::@17 f0::@18 f0::@19 f0::@20
[59] (byte) be#107 ← phi( f0::@11/(byte) be#2 f0::@12/(byte) be#142 f0::@13/(byte) be#143 f0::@14/(byte) be#144 f0::@15/(byte) be#100 f0::@16/(byte) be#101 f0::@17/(byte) be#102 f0::@18/(byte) be#103 f0::@19/(byte) be#104 f0::@20/(byte) be#105 )
[59] (byte) bd#138 ← phi( f0::@11/(byte) bd#2 f0::@12/(byte) bd#129 f0::@13/(byte) bd#130 f0::@14/(byte) bd#131 f0::@15/(byte) bd#132 f0::@16/(byte) bd#133 f0::@17/(byte) bd#134 f0::@18/(byte) bd#135 f0::@19/(byte) bd#136 f0::@20/(byte) bd#137 )
[59] (byte) bc#39 ← phi( f0::@11/(byte) bc#2 f0::@12/(byte) bc#63 f0::@13/(byte) bc#64 f0::@14/(byte) bc#65 f0::@15/(byte) bc#66 f0::@16/(byte) bc#100 f0::@17/(byte) bc#101 f0::@18/(byte) bc#102 f0::@19/(byte) bc#103 f0::@20/(byte) bc#104 )
[59] (byte) bb#27 ← phi( f0::@11/(byte~) bb#101 f0::@12/(byte~) bb#102 f0::@13/(byte~) bb#103 f0::@14/(byte~) bb#104 f0::@15/(byte~) bb#105 f0::@16/(byte~) bb#106 f0::@17/(byte~) bb#107 f0::@18/(byte~) bb#108 f0::@19/(byte~) bb#109 f0::@20/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[60] if((byte) bb#27!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto fa::@1
to:fa::@11
fa::@11: scope:[fa] from fa
[61] (byte) bc#105 ← ++ (byte) bc#39
[62] (byte~) bc#174 ← (byte) bc#105
[63] call fb
to:fa::@1
fa::@1: scope:[fa] from fa fa::@11
[64] (byte) be#108 ← phi( fa/(byte) be#107 fa::@11/(byte) be#35 )
[64] (byte) bd#139 ← phi( fa/(byte) bd#138 fa::@11/(byte) bd#35 )
[64] (byte) bc#40 ← phi( fa/(byte) bc#39 fa::@11/(byte) bc#105 )
[65] if((byte) bb#27!=(byte/signed byte/word/signed word/dword/signed dword) 1) goto fa::@2
to:fa::@12
fa::@12: scope:[fa] from fa::@1
[66] (byte) bc#106 ← ++ (byte) bc#40
[67] (byte~) bc#175 ← (byte) bc#106
[68] call fb
to:fa::@2
fa::@2: scope:[fa] from fa::@1 fa::@12
[69] (byte) be#109 ← phi( fa::@1/(byte) be#108 fa::@12/(byte) be#35 )
[69] (byte) bd#140 ← phi( fa::@1/(byte) bd#139 fa::@12/(byte) bd#35 )
[69] (byte) bc#41 ← phi( fa::@1/(byte) bc#40 fa::@12/(byte) bc#106 )
[70] if((byte) bb#27!=(byte/signed byte/word/signed word/dword/signed dword) 2) goto fa::@3
to:fa::@13
fa::@13: scope:[fa] from fa::@2
[71] (byte) bc#107 ← ++ (byte) bc#41
[72] (byte~) bc#176 ← (byte) bc#107
[73] call fb
to:fa::@3
fa::@3: scope:[fa] from fa::@13 fa::@2
[74] (byte) be#110 ← phi( fa::@2/(byte) be#109 fa::@13/(byte) be#35 )
[74] (byte) bd#141 ← phi( fa::@2/(byte) bd#140 fa::@13/(byte) bd#35 )
[74] (byte) bc#42 ← phi( fa::@2/(byte) bc#41 fa::@13/(byte) bc#107 )
[75] if((byte) bb#27!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto fa::@4
to:fa::@14
fa::@14: scope:[fa] from fa::@3
[76] (byte) bc#108 ← ++ (byte) bc#42
[77] (byte~) bc#177 ← (byte) bc#108
[78] call fb
to:fa::@4
fa::@4: scope:[fa] from fa::@14 fa::@3
[79] (byte) be#111 ← phi( fa::@14/(byte) be#35 fa::@3/(byte) be#110 )
[79] (byte) bd#142 ← phi( fa::@14/(byte) bd#35 fa::@3/(byte) bd#141 )
[79] (byte) bc#43 ← phi( fa::@14/(byte) bc#108 fa::@3/(byte) bc#42 )
[80] if((byte) bb#27!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto fa::@5
to:fa::@15
fa::@15: scope:[fa] from fa::@4
[81] (byte) bc#109 ← ++ (byte) bc#43
[82] (byte~) bc#178 ← (byte) bc#109
[83] call fb
to:fa::@5
fa::@5: scope:[fa] from fa::@15 fa::@4
[84] (byte) be#112 ← phi( fa::@15/(byte) be#35 fa::@4/(byte) be#111 )
[84] (byte) bd#100 ← phi( fa::@15/(byte) bd#35 fa::@4/(byte) bd#142 )
[84] (byte) bc#44 ← phi( fa::@15/(byte) bc#109 fa::@4/(byte) bc#43 )
[85] if((byte) bb#27!=(byte/signed byte/word/signed word/dword/signed dword) 5) goto fa::@6
to:fa::@16
fa::@16: scope:[fa] from fa::@5
[86] (byte) bc#110 ← ++ (byte) bc#44
[87] (byte~) bc#179 ← (byte) bc#110
[88] call fb
to:fa::@6
fa::@6: scope:[fa] from fa::@16 fa::@5
[89] (byte) be#113 ← phi( fa::@16/(byte) be#35 fa::@5/(byte) be#112 )
[89] (byte) bd#101 ← phi( fa::@16/(byte) bd#35 fa::@5/(byte) bd#100 )
[89] (byte) bc#45 ← phi( fa::@16/(byte) bc#110 fa::@5/(byte) bc#44 )
[90] if((byte) bb#27!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto fa::@7
to:fa::@17
fa::@17: scope:[fa] from fa::@6
[91] (byte) bc#111 ← ++ (byte) bc#45
[92] (byte~) bc#180 ← (byte) bc#111
[93] call fb
to:fa::@7
fa::@7: scope:[fa] from fa::@17 fa::@6
[94] (byte) be#114 ← phi( fa::@17/(byte) be#35 fa::@6/(byte) be#113 )
[94] (byte) bd#102 ← phi( fa::@17/(byte) bd#35 fa::@6/(byte) bd#101 )
[94] (byte) bc#46 ← phi( fa::@17/(byte) bc#111 fa::@6/(byte) bc#45 )
[95] if((byte) bb#27!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto fa::@8
to:fa::@18
fa::@18: scope:[fa] from fa::@7
[96] (byte) bc#112 ← ++ (byte) bc#46
[97] (byte~) bc#181 ← (byte) bc#112
[98] call fb
to:fa::@8
fa::@8: scope:[fa] from fa::@18 fa::@7
[99] (byte) be#115 ← phi( fa::@18/(byte) be#35 fa::@7/(byte) be#114 )
[99] (byte) bd#103 ← phi( fa::@18/(byte) bd#35 fa::@7/(byte) bd#102 )
[99] (byte) bc#47 ← phi( fa::@18/(byte) bc#112 fa::@7/(byte) bc#46 )
[100] if((byte) bb#27!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto fa::@9
to:fa::@19
fa::@19: scope:[fa] from fa::@8
[101] (byte) bc#123 ← ++ (byte) bc#47
[102] (byte~) bc#182 ← (byte) bc#123
[103] call fb
to:fa::@9
fa::@9: scope:[fa] from fa::@19 fa::@8
[104] (byte) be#116 ← phi( fa::@19/(byte) be#35 fa::@8/(byte) be#115 )
[104] (byte) bd#104 ← phi( fa::@19/(byte) bd#35 fa::@8/(byte) bd#103 )
[104] (byte) bc#113 ← phi( fa::@19/(byte) bc#123 fa::@8/(byte) bc#47 )
[105] if((byte) bb#27!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto fa::@return
to:fa::@20
fa::@20: scope:[fa] from fa::@9
[106] phi()
[107] call fb
to:fa::@return
fa::@return: scope:[fa] from fa::@20 fa::@9
[108] (byte) be#24 ← phi( fa::@9/(byte) be#116 fa::@20/(byte) be#35 )
[108] (byte) bd#24 ← phi( fa::@9/(byte) bd#104 fa::@20/(byte) bd#35 )
[108] (byte) bc#24 ← phi( fa::@9/(byte) bc#113 fa::@20/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[109] return
to:@return
fb: scope:[fb] from fa::@11 fa::@12 fa::@13 fa::@14 fa::@15 fa::@16 fa::@17 fa::@18 fa::@19 fa::@20
[110] (byte) be#118 ← phi( fa::@11/(byte) be#107 fa::@12/(byte) be#108 fa::@13/(byte) be#109 fa::@14/(byte) be#110 fa::@15/(byte) be#111 fa::@16/(byte) be#112 fa::@17/(byte) be#113 fa::@18/(byte) be#114 fa::@19/(byte) be#115 fa::@20/(byte) be#116 )
[110] (byte) bd#106 ← phi( fa::@11/(byte) bd#138 fa::@12/(byte) bd#139 fa::@13/(byte) bd#140 fa::@14/(byte) bd#141 fa::@15/(byte) bd#142 fa::@16/(byte) bd#100 fa::@17/(byte) bd#101 fa::@18/(byte) bd#102 fa::@19/(byte) bd#103 fa::@20/(byte) bd#104 )
[110] (byte) bc#114 ← phi( fa::@11/(byte~) bc#174 fa::@12/(byte~) bc#175 fa::@13/(byte~) bc#176 fa::@14/(byte~) bc#177 fa::@15/(byte~) bc#178 fa::@16/(byte~) bc#179 fa::@17/(byte~) bc#180 fa::@18/(byte~) bc#181 fa::@19/(byte~) bc#182 fa::@20/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[111] if((byte) bc#114!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto fb::@1
to:fb::@11
fb::@11: scope:[fb] from fb
[112] (byte) bd#148 ← ++ (byte) bd#106
[113] (byte~) bd#238 ← (byte) bd#148
[114] call fc
to:fb::@1
fb::@1: scope:[fb] from fb fb::@11
[115] (byte) be#119 ← phi( fb/(byte) be#118 fb::@11/(byte) be#46 )
[115] (byte) bd#107 ← phi( fb/(byte) bd#106 fb::@11/(byte) bd#148 )
[116] if((byte) bc#114!=(byte/signed byte/word/signed word/dword/signed dword) 1) goto fb::@2
to:fb::@12
fb::@12: scope:[fb] from fb::@1
[117] (byte) bd#149 ← ++ (byte) bd#107
[118] (byte~) bd#239 ← (byte) bd#149
[119] call fc
to:fb::@2
fb::@2: scope:[fb] from fb::@1 fb::@12
[120] (byte) be#120 ← phi( fb::@1/(byte) be#119 fb::@12/(byte) be#46 )
[120] (byte) bd#108 ← phi( fb::@1/(byte) bd#107 fb::@12/(byte) bd#149 )
[121] if((byte) bc#114!=(byte/signed byte/word/signed word/dword/signed dword) 2) goto fb::@3
to:fb::@13
fb::@13: scope:[fb] from fb::@2
[122] (byte) bd#150 ← ++ (byte) bd#108
[123] (byte~) bd#240 ← (byte) bd#150
[124] call fc
to:fb::@3
fb::@3: scope:[fb] from fb::@13 fb::@2
[125] (byte) be#121 ← phi( fb::@2/(byte) be#120 fb::@13/(byte) be#46 )
[125] (byte) bd#109 ← phi( fb::@2/(byte) bd#108 fb::@13/(byte) bd#150 )
[126] if((byte) bc#114!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto fb::@4
to:fb::@14
fb::@14: scope:[fb] from fb::@3
[127] (byte) bd#151 ← ++ (byte) bd#109
[128] (byte~) bd#241 ← (byte) bd#151
[129] call fc
to:fb::@4
fb::@4: scope:[fb] from fb::@14 fb::@3
[130] (byte) be#122 ← phi( fb::@14/(byte) be#46 fb::@3/(byte) be#121 )
[130] (byte) bd#110 ← phi( fb::@14/(byte) bd#151 fb::@3/(byte) bd#109 )
[131] if((byte) bc#114!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto fb::@5
to:fb::@15
fb::@15: scope:[fb] from fb::@4
[132] (byte) bd#152 ← ++ (byte) bd#110
[133] (byte~) bd#242 ← (byte) bd#152
[134] call fc
to:fb::@5
fb::@5: scope:[fb] from fb::@15 fb::@4
[135] (byte) be#123 ← phi( fb::@15/(byte) be#46 fb::@4/(byte) be#122 )
[135] (byte) bd#111 ← phi( fb::@15/(byte) bd#152 fb::@4/(byte) bd#110 )
[136] if((byte) bc#114!=(byte/signed byte/word/signed word/dword/signed dword) 5) goto fb::@6
to:fb::@16
fb::@16: scope:[fb] from fb::@5
[137] (byte) bd#153 ← ++ (byte) bd#111
[138] (byte~) bd#243 ← (byte) bd#153
[139] call fc
to:fb::@6
fb::@6: scope:[fb] from fb::@16 fb::@5
[140] (byte) be#124 ← phi( fb::@16/(byte) be#46 fb::@5/(byte) be#123 )
[140] (byte) bd#112 ← phi( fb::@16/(byte) bd#153 fb::@5/(byte) bd#111 )
[141] if((byte) bc#114!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto fb::@7
to:fb::@17
fb::@17: scope:[fb] from fb::@6
[142] (byte) bd#154 ← ++ (byte) bd#112
[143] (byte~) bd#244 ← (byte) bd#154
[144] call fc
to:fb::@7
fb::@7: scope:[fb] from fb::@17 fb::@6
[145] (byte) be#125 ← phi( fb::@17/(byte) be#46 fb::@6/(byte) be#124 )
[145] (byte) bd#113 ← phi( fb::@17/(byte) bd#154 fb::@6/(byte) bd#112 )
[146] if((byte) bc#114!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto fb::@8
to:fb::@18
fb::@18: scope:[fb] from fb::@7
[147] (byte) bd#155 ← ++ (byte) bd#113
[148] (byte~) bd#245 ← (byte) bd#155
[149] call fc
to:fb::@8
fb::@8: scope:[fb] from fb::@18 fb::@7
[150] (byte) be#126 ← phi( fb::@18/(byte) be#46 fb::@7/(byte) be#125 )
[150] (byte) bd#114 ← phi( fb::@18/(byte) bd#155 fb::@7/(byte) bd#113 )
[151] if((byte) bc#114!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto fb::@9
to:fb::@19
fb::@19: scope:[fb] from fb::@8
[152] (byte) bd#157 ← ++ (byte) bd#114
[153] (byte~) bd#246 ← (byte) bd#157
[154] call fc
to:fb::@9
fb::@9: scope:[fb] from fb::@19 fb::@8
[155] (byte) be#127 ← phi( fb::@19/(byte) be#46 fb::@8/(byte) be#126 )
[155] (byte) bd#115 ← phi( fb::@19/(byte) bd#157 fb::@8/(byte) bd#114 )
[156] if((byte) bc#114!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto fb::@return
to:fb::@20
fb::@20: scope:[fb] from fb::@9
[157] phi()
[158] call fc
to:fb::@return
fb::@return: scope:[fb] from fb::@20 fb::@9
[159] (byte) be#35 ← phi( fb::@9/(byte) be#127 fb::@20/(byte) be#46 )
[159] (byte) bd#35 ← phi( fb::@9/(byte) bd#115 fb::@20/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[160] return
to:@return
fc: scope:[fc] from fb::@11 fb::@12 fb::@13 fb::@14 fb::@15 fb::@16 fb::@17 fb::@18 fb::@19 fb::@20
[161] (byte) be#129 ← phi( fb::@11/(byte) be#118 fb::@12/(byte) be#119 fb::@13/(byte) be#120 fb::@14/(byte) be#121 fb::@15/(byte) be#122 fb::@16/(byte) be#123 fb::@17/(byte) be#124 fb::@18/(byte) be#125 fb::@19/(byte) be#126 fb::@20/(byte) be#127 )
[161] (byte) bd#117 ← phi( fb::@11/(byte~) bd#238 fb::@12/(byte~) bd#239 fb::@13/(byte~) bd#240 fb::@14/(byte~) bd#241 fb::@15/(byte~) bd#242 fb::@16/(byte~) bd#243 fb::@17/(byte~) bd#244 fb::@18/(byte~) bd#245 fb::@19/(byte~) bd#246 fb::@20/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[162] if((byte) bd#117!=(byte/signed byte/word/signed word/dword/signed dword) 0) goto fc::@1
to:fc::@11
fc::@11: scope:[fc] from fc
[163] (byte) be#36 ← ++ (byte) be#129
to:fc::@1
fc::@1: scope:[fc] from fc fc::@11
[164] (byte) be#130 ← phi( fc/(byte) be#129 fc::@11/(byte) be#36 )
[165] if((byte) bd#117!=(byte/signed byte/word/signed word/dword/signed dword) 1) goto fc::@2
to:fc::@12
fc::@12: scope:[fc] from fc::@1
[166] (byte) be#37 ← ++ (byte) be#130
to:fc::@2
fc::@2: scope:[fc] from fc::@1 fc::@12
[167] (byte) be#131 ← phi( fc::@1/(byte) be#130 fc::@12/(byte) be#37 )
[168] if((byte) bd#117!=(byte/signed byte/word/signed word/dword/signed dword) 2) goto fc::@3
to:fc::@13
fc::@13: scope:[fc] from fc::@2
[169] (byte) be#38 ← ++ (byte) be#131
to:fc::@3
fc::@3: scope:[fc] from fc::@13 fc::@2
[170] (byte) be#132 ← phi( fc::@13/(byte) be#38 fc::@2/(byte) be#131 )
[171] if((byte) bd#117!=(byte/signed byte/word/signed word/dword/signed dword) 3) goto fc::@4
to:fc::@14
fc::@14: scope:[fc] from fc::@3
[172] (byte) be#39 ← ++ (byte) be#132
to:fc::@4
fc::@4: scope:[fc] from fc::@14 fc::@3
[173] (byte) be#133 ← phi( fc::@14/(byte) be#39 fc::@3/(byte) be#132 )
[174] if((byte) bd#117!=(byte/signed byte/word/signed word/dword/signed dword) 4) goto fc::@5
to:fc::@15
fc::@15: scope:[fc] from fc::@4
[175] (byte) be#40 ← ++ (byte) be#133
to:fc::@5
fc::@5: scope:[fc] from fc::@15 fc::@4
[176] (byte) be#134 ← phi( fc::@15/(byte) be#40 fc::@4/(byte) be#133 )
[177] if((byte) bd#117!=(byte/signed byte/word/signed word/dword/signed dword) 5) goto fc::@6
to:fc::@16
fc::@16: scope:[fc] from fc::@5
[178] (byte) be#41 ← ++ (byte) be#134
to:fc::@6
fc::@6: scope:[fc] from fc::@16 fc::@5
[179] (byte) be#135 ← phi( fc::@16/(byte) be#41 fc::@5/(byte) be#134 )
[180] if((byte) bd#117!=(byte/signed byte/word/signed word/dword/signed dword) 6) goto fc::@7
to:fc::@17
fc::@17: scope:[fc] from fc::@6
[181] (byte) be#42 ← ++ (byte) be#135
to:fc::@7
fc::@7: scope:[fc] from fc::@17 fc::@6
[182] (byte) be#136 ← phi( fc::@17/(byte) be#42 fc::@6/(byte) be#135 )
[183] if((byte) bd#117!=(byte/signed byte/word/signed word/dword/signed dword) 7) goto fc::@8
to:fc::@18
fc::@18: scope:[fc] from fc::@7
[184] (byte) be#43 ← ++ (byte) be#136
to:fc::@8
fc::@8: scope:[fc] from fc::@18 fc::@7
[185] (byte) be#137 ← phi( fc::@18/(byte) be#43 fc::@7/(byte) be#136 )
[186] if((byte) bd#117!=(byte/signed byte/word/signed word/dword/signed dword) 8) goto fc::@9
to:fc::@19
fc::@19: scope:[fc] from fc::@8
[187] (byte) be#44 ← ++ (byte) be#137
to:fc::@9
fc::@9: scope:[fc] from fc::@19 fc::@8
[188] (byte) be#138 ← phi( fc::@19/(byte) be#44 fc::@8/(byte) be#137 )
[189] if((byte) bd#117!=(byte/signed byte/word/signed word/dword/signed dword) 9) goto fc::@30
to:fc::@return
fc::@return: scope:[fc] from fc::@30 fc::@9
[190] (byte) be#46 ← phi( fc::@30/(byte) be#138 fc::@9/(byte/signed byte/word/signed word/dword/signed dword) 0 )
[191] return
to:@return
fc::@30: scope:[fc] from fc::@9
[192] phi()
to:fc::@return

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,283 @@
(label) @5
(label) @begin
(label) @end
(byte) ba
(byte) ba#1 ba zp ZP_BYTE:2 22.0
(byte) ba#17 ba zp ZP_BYTE:2 0.7924528301886792
(byte) bb
(byte) bb#10 bb zp ZP_BYTE:3 2.0
(byte~) bb#101 bb#101 zp ZP_BYTE:4 4.0
(byte~) bb#102 bb#102 zp ZP_BYTE:4 4.0
(byte~) bb#103 bb#103 zp ZP_BYTE:4 4.0
(byte~) bb#104 bb#104 zp ZP_BYTE:4 4.0
(byte~) bb#105 bb#105 zp ZP_BYTE:4 4.0
(byte~) bb#106 bb#106 zp ZP_BYTE:4 4.0
(byte~) bb#107 bb#107 zp ZP_BYTE:4 4.0
(byte~) bb#108 bb#108 zp ZP_BYTE:4 4.0
(byte~) bb#109 bb#109 zp ZP_BYTE:4 4.0
(byte) bb#11 bb zp ZP_BYTE:3 2.0
(byte) bb#13 bb zp ZP_BYTE:3 3.25
(byte) bb#16 bb zp ZP_BYTE:3 5.0
(byte) bb#18 bb zp ZP_BYTE:3 4.0
(byte) bb#19 bb zp ZP_BYTE:3 4.0
(byte) bb#20 bb zp ZP_BYTE:3 4.0
(byte) bb#21 bb zp ZP_BYTE:3 4.0
(byte) bb#22 bb zp ZP_BYTE:3 4.0
(byte) bb#23 bb zp ZP_BYTE:3 4.0
(byte) bb#24 bb zp ZP_BYTE:3 4.0
(byte) bb#25 bb zp ZP_BYTE:3 4.0
(byte) bb#27 bb#27 zp ZP_BYTE:4 0.8260869565217388
(byte) bb#3 bb zp ZP_BYTE:3 2.0
(byte) bb#4 bb zp ZP_BYTE:3 2.0
(byte) bb#49 bb zp ZP_BYTE:3 3.0
(byte) bb#5 bb zp ZP_BYTE:3 2.0
(byte) bb#6 bb zp ZP_BYTE:3 2.0
(byte) bb#66 bb zp ZP_BYTE:3 2.0
(byte) bb#67 bb zp ZP_BYTE:3 2.0
(byte) bb#68 bb zp ZP_BYTE:3 2.0
(byte) bc
(byte) bc#100 reg byte x 2.0
(byte) bc#101 reg byte x 2.0
(byte) bc#102 reg byte x 2.0
(byte) bc#103 reg byte x 2.0
(byte) bc#104 reg byte x 2.6666666666666665
(byte) bc#105 reg byte x 2.0
(byte) bc#106 reg byte x 2.0
(byte) bc#107 reg byte x 2.0
(byte) bc#108 reg byte x 2.0
(byte) bc#109 reg byte x 2.0
(byte) bc#110 reg byte x 2.0
(byte) bc#111 reg byte x 2.0
(byte) bc#112 reg byte x 2.0
(byte) bc#113 reg byte x 3.0
(byte) bc#114 bc zp ZP_BYTE:5 0.8260869565217388
(byte) bc#123 reg byte x 2.0
(byte) bc#13 reg byte x 3.75
(byte~) bc#174 bc zp ZP_BYTE:5 4.0
(byte~) bc#175 bc zp ZP_BYTE:5 4.0
(byte~) bc#176 bc zp ZP_BYTE:5 4.0
(byte~) bc#177 bc zp ZP_BYTE:5 4.0
(byte~) bc#178 bc zp ZP_BYTE:5 4.0
(byte~) bc#179 bc zp ZP_BYTE:5 4.0
(byte~) bc#180 bc zp ZP_BYTE:5 4.0
(byte~) bc#181 bc zp ZP_BYTE:5 4.0
(byte~) bc#182 bc zp ZP_BYTE:5 4.0
(byte) bc#2 reg byte x 3.0
(byte) bc#24 reg byte x 1.8333333333333335
(byte) bc#39 reg byte x 12.0
(byte) bc#40 reg byte x 4.0
(byte) bc#41 reg byte x 4.0
(byte) bc#42 reg byte x 4.0
(byte) bc#43 reg byte x 4.0
(byte) bc#44 reg byte x 4.0
(byte) bc#45 reg byte x 4.0
(byte) bc#46 reg byte x 4.0
(byte) bc#47 reg byte x 4.0
(byte) bc#63 reg byte x 2.0
(byte) bc#64 reg byte x 2.0
(byte) bc#65 reg byte x 2.0
(byte) bc#66 reg byte x 2.0
(byte) bd
(byte) bd#100 reg byte y 2.0
(byte) bd#101 reg byte y 2.0
(byte) bd#102 reg byte y 2.0
(byte) bd#103 reg byte y 2.0
(byte) bd#104 reg byte y 2.6666666666666665
(byte) bd#106 reg byte y 12.0
(byte) bd#107 reg byte y 4.0
(byte) bd#108 reg byte y 4.0
(byte) bd#109 reg byte y 4.0
(byte) bd#110 reg byte y 4.0
(byte) bd#111 reg byte y 4.0
(byte) bd#112 reg byte y 4.0
(byte) bd#113 reg byte y 4.0
(byte) bd#114 reg byte y 4.0
(byte) bd#115 reg byte y 3.0
(byte) bd#117 reg byte a 1.3571428571428568
(byte) bd#129 reg byte y 2.0
(byte) bd#13 reg byte y 3.75
(byte) bd#130 reg byte y 2.0
(byte) bd#131 reg byte y 2.0
(byte) bd#132 reg byte y 2.0
(byte) bd#133 reg byte y 2.0
(byte) bd#134 reg byte y 2.0
(byte) bd#135 reg byte y 2.0
(byte) bd#136 reg byte y 2.0
(byte) bd#137 reg byte y 2.6666666666666665
(byte) bd#138 reg byte y 6.0
(byte) bd#139 reg byte y 2.0
(byte) bd#140 reg byte y 2.0
(byte) bd#141 reg byte y 2.0
(byte) bd#142 reg byte y 2.0
(byte) bd#148 reg byte y 2.0
(byte) bd#149 reg byte y 2.0
(byte) bd#150 reg byte y 2.0
(byte) bd#151 reg byte y 2.0
(byte) bd#152 reg byte y 2.0
(byte) bd#153 reg byte y 2.0
(byte) bd#154 reg byte y 2.0
(byte) bd#155 reg byte y 2.0
(byte) bd#157 reg byte y 2.0
(byte) bd#2 reg byte y 3.0
(byte~) bd#238 reg byte a 4.0
(byte~) bd#239 reg byte a 4.0
(byte) bd#24 reg byte y 2.0
(byte~) bd#240 reg byte a 4.0
(byte~) bd#241 reg byte a 4.0
(byte~) bd#242 reg byte a 4.0
(byte~) bd#243 reg byte a 4.0
(byte~) bd#244 reg byte a 4.0
(byte~) bd#245 reg byte a 4.0
(byte~) bd#246 reg byte a 4.0
(byte) bd#35 reg byte y 1.8333333333333335
(byte) be
(byte) be#100 be zp ZP_BYTE:6 2.0
(byte) be#101 be zp ZP_BYTE:6 2.0
(byte) be#102 be zp ZP_BYTE:6 2.0
(byte) be#103 be zp ZP_BYTE:6 2.0
(byte) be#104 be zp ZP_BYTE:6 2.0
(byte) be#105 be zp ZP_BYTE:6 2.6666666666666665
(byte) be#107 be zp ZP_BYTE:6 6.0
(byte) be#108 be zp ZP_BYTE:6 2.0
(byte) be#109 be zp ZP_BYTE:6 2.0
(byte) be#110 be zp ZP_BYTE:6 2.0
(byte) be#111 be zp ZP_BYTE:6 2.0
(byte) be#112 be zp ZP_BYTE:6 2.0
(byte) be#113 be zp ZP_BYTE:6 2.0
(byte) be#114 be zp ZP_BYTE:6 2.0
(byte) be#115 be zp ZP_BYTE:6 2.0
(byte) be#116 be zp ZP_BYTE:6 2.6666666666666665
(byte) be#118 be zp ZP_BYTE:6 6.0
(byte) be#119 be zp ZP_BYTE:6 2.0
(byte) be#120 be zp ZP_BYTE:6 2.0
(byte) be#121 be zp ZP_BYTE:6 2.0
(byte) be#122 be zp ZP_BYTE:6 2.0
(byte) be#123 be zp ZP_BYTE:6 2.0
(byte) be#124 be zp ZP_BYTE:6 2.0
(byte) be#125 be zp ZP_BYTE:6 2.0
(byte) be#126 be zp ZP_BYTE:6 2.0
(byte) be#127 be zp ZP_BYTE:6 2.6666666666666665
(byte) be#129 be zp ZP_BYTE:6 12.0
(byte) be#13 be zp ZP_BYTE:6 3.75
(byte) be#130 be zp ZP_BYTE:6 4.0
(byte) be#131 be zp ZP_BYTE:6 4.0
(byte) be#132 be zp ZP_BYTE:6 4.0
(byte) be#133 be zp ZP_BYTE:6 4.0
(byte) be#134 be zp ZP_BYTE:6 4.0
(byte) be#135 be zp ZP_BYTE:6 4.0
(byte) be#136 be zp ZP_BYTE:6 4.0
(byte) be#137 be zp ZP_BYTE:6 4.0
(byte) be#138 be zp ZP_BYTE:6 2.0
(byte) be#142 be zp ZP_BYTE:6 2.0
(byte) be#143 be zp ZP_BYTE:6 2.0
(byte) be#144 be zp ZP_BYTE:6 2.0
(byte) be#2 be zp ZP_BYTE:6 3.0
(byte) be#24 be zp ZP_BYTE:6 2.0
(byte) be#35 be zp ZP_BYTE:6 2.0
(byte) be#36 be zp ZP_BYTE:6 4.0
(byte) be#37 be zp ZP_BYTE:6 4.0
(byte) be#38 be zp ZP_BYTE:6 4.0
(byte) be#39 be zp ZP_BYTE:6 4.0
(byte) be#40 be zp ZP_BYTE:6 4.0
(byte) be#41 be zp ZP_BYTE:6 4.0
(byte) be#42 be zp ZP_BYTE:6 4.0
(byte) be#43 be zp ZP_BYTE:6 4.0
(byte) be#44 be zp ZP_BYTE:6 4.0
(byte) be#46 be zp ZP_BYTE:6 1.8333333333333335
(void()) f0()
(label) f0::@1
(label) f0::@11
(label) f0::@12
(label) f0::@13
(label) f0::@14
(label) f0::@15
(label) f0::@16
(label) f0::@17
(label) f0::@18
(label) f0::@19
(label) f0::@2
(label) f0::@20
(label) f0::@3
(label) f0::@4
(label) f0::@5
(label) f0::@6
(label) f0::@7
(label) f0::@8
(label) f0::@9
(label) f0::@return
(void()) fa()
(label) fa::@1
(label) fa::@11
(label) fa::@12
(label) fa::@13
(label) fa::@14
(label) fa::@15
(label) fa::@16
(label) fa::@17
(label) fa::@18
(label) fa::@19
(label) fa::@2
(label) fa::@20
(label) fa::@3
(label) fa::@4
(label) fa::@5
(label) fa::@6
(label) fa::@7
(label) fa::@8
(label) fa::@9
(label) fa::@return
(void()) fb()
(label) fb::@1
(label) fb::@11
(label) fb::@12
(label) fb::@13
(label) fb::@14
(label) fb::@15
(label) fb::@16
(label) fb::@17
(label) fb::@18
(label) fb::@19
(label) fb::@2
(label) fb::@20
(label) fb::@3
(label) fb::@4
(label) fb::@5
(label) fb::@6
(label) fb::@7
(label) fb::@8
(label) fb::@9
(label) fb::@return
(void()) fc()
(label) fc::@1
(label) fc::@11
(label) fc::@12
(label) fc::@13
(label) fc::@14
(label) fc::@15
(label) fc::@16
(label) fc::@17
(label) fc::@18
(label) fc::@19
(label) fc::@2
(label) fc::@3
(label) fc::@30
(label) fc::@4
(label) fc::@5
(label) fc::@6
(label) fc::@7
(label) fc::@8
(label) fc::@9
(label) fc::@return
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@7
zp ZP_BYTE:2 [ ba#17 ba#1 ]
zp ZP_BYTE:3 [ bb#49 bb#11 bb#25 bb#10 bb#24 bb#68 bb#23 bb#67 bb#22 bb#66 bb#21 bb#6 bb#20 bb#19 bb#18 bb#16 bb#13 bb#3 bb#4 bb#5 ]
zp ZP_BYTE:4 [ bb#27 bb#101 bb#102 bb#103 bb#104 bb#105 bb#106 bb#107 bb#108 bb#109 ]
reg byte x [ bc#113 bc#123 bc#47 bc#112 bc#46 bc#111 bc#45 bc#110 bc#44 bc#109 bc#43 bc#108 bc#42 bc#41 bc#40 bc#39 bc#104 bc#103 bc#102 bc#101 bc#100 bc#66 bc#65 bc#64 bc#63 bc#2 bc#13 bc#24 bc#105 bc#106 bc#107 ]
zp ZP_BYTE:5 [ bc#114 bc#174 bc#175 bc#176 bc#177 bc#178 bc#179 bc#180 bc#181 bc#182 ]
reg byte y [ bd#115 bd#157 bd#114 bd#155 bd#113 bd#154 bd#112 bd#153 bd#111 bd#152 bd#110 bd#151 bd#109 bd#108 bd#107 bd#106 bd#104 bd#103 bd#102 bd#101 bd#100 bd#142 bd#141 bd#140 bd#139 bd#138 bd#137 bd#136 bd#135 bd#134 bd#133 bd#132 bd#131 bd#130 bd#129 bd#2 bd#13 bd#24 bd#35 bd#148 bd#149 bd#150 ]
reg byte a [ bd#117 bd#238 bd#239 bd#240 bd#241 bd#242 bd#243 bd#244 bd#245 bd#246 ]
zp ZP_BYTE:6 [ be#138 be#44 be#137 be#43 be#136 be#42 be#135 be#41 be#134 be#40 be#133 be#39 be#132 be#38 be#131 be#130 be#129 be#127 be#126 be#125 be#124 be#123 be#122 be#121 be#120 be#119 be#118 be#116 be#115 be#114 be#113 be#112 be#111 be#110 be#109 be#108 be#107 be#105 be#104 be#103 be#102 be#101 be#100 be#144 be#143 be#142 be#2 be#13 be#24 be#35 be#46 be#36 be#37 ]