1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2024-09-08 17:54:40 +00:00

Implemented register uplift combination search. This yields near optimal register allocation - but at a calculation cost at O(4^N) where N is the number of live range equivalence classes in a scope.

This commit is contained in:
jespergravgaard 2017-08-02 00:57:29 +02:00
parent 14c8ec13bf
commit b9831c9445
80 changed files with 19418 additions and 1688 deletions

View File

@ -1,13 +1,13 @@
package dk.camelot64.kickc;
import dk.camelot64.kickc.asm.AsmFragment;
import dk.camelot64.kickc.icl.*;
import dk.camelot64.kickc.parser.KickCLexer;
import dk.camelot64.kickc.parser.KickCParser;
import dk.camelot64.kickc.passes.*;
import org.antlr.v4.runtime.*;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
/**
* Perform KickC compilation and optimizations
@ -103,7 +103,7 @@ public class Compiler {
program.getLog().append(program.getScope().getSymbolTableContents(program ,Variable.class));
new Pass3ZeroPageAllocation(program).allocate();
new Pass3RegistersFinalize(program).allocate();
new Pass3RegistersFinalize(program).allocate(false);
// Initial Code generation
new Pass3CodeGeneration(program).generate();
@ -111,14 +111,70 @@ public class Compiler {
program.getLog().append("INITIAL ASM");
program.getLog().append(program.getAsm().toString());
// Register allocation optimization
new Pass3RegisterUplifting(program).uplift();
program.getLog().append("REGISTER UPLIFTING");
program.getLog().append(program.getScope().getSymbolTableContents(program, Variable.class));
new Pass3AssertNoCpuClobber(program).check();
// Find register uplift scopes
new Pass3RegisterUpliftScopeAnalysis(program).findScopes();
program.getLog().append("REGISTER UPLIFT SCOPES");
program.getLog().append(program.getRegisterUpliftProgram().toString((program.getVariableRegisterWeights())));
// Test uplift combinations to find the best one.
Set<String> unknownFragments = new LinkedHashSet<>();
for (RegisterUpliftScope upliftScope : program.getRegisterUpliftProgram().getRegisterUpliftScopes()) {
int bestScore = Integer.MAX_VALUE;
RegisterUpliftScope.Combination bestCombination = null;
Iterator<RegisterUpliftScope.Combination> combinationIterator = upliftScope.geCombinationIterator();
while (combinationIterator.hasNext()) {
RegisterUpliftScope.Combination combination = combinationIterator.next();
// Reset register allocation to original zero page allocation
new Pass3RegistersFinalize(program).allocate(false);
// Apply the uplift combination
combination.allocate(program.getAllocation());
// Generate ASM
try {
new Pass3CodeGeneration(program).generate();
} catch (AsmFragment.UnknownFragmentException e) {
unknownFragments.add(e.getFragmentSignature());
StringBuilder msg = new StringBuilder();
msg.append("Uplift attempt [" + upliftScope.getScopeRef() + "] ");
msg.append("missing fragment "+e.getFragmentSignature());
program.getLog().append(msg.toString());
continue;
}
// If no clobber - Find value of the resulting allocation
boolean hasClobberProblem = new Pass3AssertNoCpuClobber(program).hasClobberProblem(false);
int combinationScore = program.getAsm().getBytes();
StringBuilder msg = new StringBuilder();
msg.append("Uplift attempt [" + upliftScope.getScopeRef() + "] ");
if(hasClobberProblem) {
msg.append("clobber");
} else {
msg.append(combinationScore);
}
msg.append(" allocation: ").append(combination.toString());
program.getLog().append(msg.toString());
if(!hasClobberProblem) {
if(combinationScore<bestScore) {
bestScore = combinationScore;
bestCombination = combination;
}
}
}
// Save the best combination in the equivalence class
bestCombination.store(program.getLiveRangeEquivalenceClassSet());
program.getLog().append("Uplifting ["+upliftScope.getScopeRef()+"] best "+bestScore+" combination "+bestCombination.toString());
}
if(unknownFragments.size()>0) {
program.getLog().append("MISSING FRAGMENTS");
for (String unknownFragment : unknownFragments) {
program.getLog().append(" "+unknownFragment);
}
}
// Final register coalesce and code generation
new Pass3ZeroPageCoalesce(program).allocate();
new Pass3RegistersFinalize(program).allocate(true);
new Pass3CodeGeneration(program).generate();
new Pass3AssertNoCpuClobber(program).check();

View File

@ -347,7 +347,7 @@ public class AsmFragment {
ClassLoader classLoader = this.getClass().getClassLoader();
final URL fragmentResource = classLoader.getResource("dk/camelot64/kickc/asm/fragment/" + signature + ".asm");
if (fragmentResource == null) {
throw new RuntimeException("Fragment not found " + signature+".asm");
throw new UnknownFragmentException(signature);
}
try {
@ -465,6 +465,9 @@ public class AsmFragment {
String mnemonic = instructionCtx.MNEMONIC().getSymbol().getText();
String parameter = (String) this.visit(exprCtx);
AsmInstructionType type = AsmInstuctionSet.getInstructionType(mnemonic, addressingMode, parameter);
if(type==null) {
throw new RuntimeException("Error in "+signature+".asm line "+ctx.getStart().getLine()+" - Instruction type unknown "+mnemonic+" "+addressingMode+" "+parameter);
}
return new AsmInstruction(type, parameter);
}
@ -500,4 +503,17 @@ public class AsmFragment {
}
public static class UnknownFragmentException extends RuntimeException {
private String fragmentSignature;
public UnknownFragmentException(String signature) {
super("Fragment not found " + signature+".asm");
this.fragmentSignature = signature;
}
public String getFragmentSignature() {
return fragmentSignature;
}
}
}

View File

@ -106,7 +106,10 @@ public class AsmSegment {
AsmClobber clobber = new AsmClobber();
for (AsmLine line : lines) {
if (line instanceof AsmInstruction) {
clobber.add(((AsmInstruction) line).getType().getClobber());
AsmInstruction asmInstruction = (AsmInstruction) line;
AsmInstructionType asmInstructionType = asmInstruction.getType();
AsmClobber asmClobber = asmInstructionType.getClobber();
clobber.add(asmClobber);
}
}
return clobber;

View File

@ -0,0 +1,3 @@
stx $ff
clc
adc $ff

View File

@ -0,0 +1,3 @@
sty $ff
clc
adc $ff

View File

@ -0,0 +1 @@
lda {cowo1},y

View File

@ -0,0 +1,3 @@
tya
clc
adc #{coby1}

View File

@ -0,0 +1,3 @@
tax
lda #{coby2}
sta {cowo1},x

View File

@ -0,0 +1,3 @@
tay
txa
sta {cowo1},y

View File

@ -0,0 +1,3 @@
tax
tya
sta {cowo1},x

View File

@ -0,0 +1,2 @@
lda #{coby2}
sta {cowo1},x

View File

@ -0,0 +1,2 @@
tya
sta {cowo1},x

View File

@ -0,0 +1,2 @@
lda #{coby2}
sta {cowo1},y

View File

@ -0,0 +1,2 @@
txa
sta {cowo1},y

View File

@ -0,0 +1,2 @@
tya
sta {cowo1},y

View File

@ -0,0 +1 @@
ldx {cowo1}

View File

@ -0,0 +1,3 @@
clc
adc #{coby1}
tax

View File

@ -0,0 +1,3 @@
tax
lda {cowo1},x
tax

View File

@ -0,0 +1 @@
ldx {cowo1},y

View File

@ -0,0 +1,4 @@
stx $ff
clc
adc $ff
tax

View File

@ -0,0 +1,3 @@
txa
asl
tax

View File

@ -0,0 +1,5 @@
sty $ff
txa
clc
adc $ff
tax

View File

@ -0,0 +1,4 @@
tya
clc
adc #{coby1}
tax

View File

@ -0,0 +1,4 @@
lda {zpby1}
clc
adc #{coby1}
tax

View File

@ -0,0 +1,4 @@
cpx #{coby1}
beq !+
bcs {la1}
!:

View File

@ -0,0 +1 @@
ldy {cowo1}

View File

@ -0,0 +1,3 @@
clc
adc #{coby1}
tay

View File

@ -0,0 +1,3 @@
tay
lda {cowo1},y
tay

View File

@ -0,0 +1 @@
ldy {cowo1},x

View File

@ -0,0 +1,4 @@
txa
clc
adc #{coby1}
tay

View File

@ -0,0 +1,4 @@
sty $ff
clc
adc $ff
tay

View File

@ -0,0 +1,5 @@
stx $ff
tya
clc
adc $ff
tay

View File

@ -0,0 +1,3 @@
tya
asl
tay

View File

@ -0,0 +1,4 @@
lda {zpby1}
clc
adc #{coby1}
tay

View File

@ -0,0 +1,4 @@
cpy #{coby1}
beq !+
bcs {la1}
!:

View File

@ -0,0 +1,4 @@
txa
clc
adc {zpby1}
sta {zpby1}

View File

@ -0,0 +1,4 @@
tya
clc
adc {zpby1}
sta {zpby1}

View File

@ -89,8 +89,12 @@ public class LiveRangeEquivalenceClass {
@Override
public String toString() {
return toString(true);
}
public String toString(boolean includeRegister) {
StringBuilder s = new StringBuilder();
if(register!=null) {
if(includeRegister && register!=null) {
s.append(register.toString()).append(" ");
}
s.append("[ ");

View File

@ -53,6 +53,11 @@ public class Procedure extends Scope {
return new Label(getFullName(), getScope(), false);
}
@Override
public LabelRef getScopeLabelRef() {
return getLabel().getRef();
}
public SymbolType getReturnType() {
return returnType;
}

View File

@ -33,6 +33,7 @@ public class Program {
private LiveRangeEquivalenceClassSet liveRangeEquivalenceClassSet;
/** The register weight of all variables describing how much the variable would theoretically gain from being in a register */
private VariableRegisterWeights variableRegisterWeights;
private RegisterUpliftProgram registerUpliftProgram;
@JsonCreator
public Program(
@ -129,6 +130,14 @@ public class Program {
return variableRegisterWeights;
}
public void setRegisterUpliftProgram(RegisterUpliftProgram registerUpliftProgram) {
this.registerUpliftProgram = registerUpliftProgram;
}
public RegisterUpliftProgram getRegisterUpliftProgram() {
return registerUpliftProgram;
}
public CompileLog getLog() {
return log;
}

View File

@ -48,6 +48,11 @@ public class ProgramScope extends Scope {
return out.toString();
}
@Override
public LabelRef getScopeLabelRef() {
return new LabelRef("");
}
@Override
public String toString(Program program) {
return "program";

View File

@ -0,0 +1,39 @@
package dk.camelot64.kickc.icl;
import java.util.ArrayList;
import java.util.Collection;
/**
* Information about register uplift at the program level
*/
public class RegisterUpliftProgram {
private Collection<RegisterUpliftScope> registerUpliftScopes;
public RegisterUpliftProgram() {
this.registerUpliftScopes = new ArrayList<>();
}
public Collection<RegisterUpliftScope> getRegisterUpliftScopes() {
return registerUpliftScopes;
}
public RegisterUpliftScope addRegisterUpliftScope(LabelRef scopeRef) {
RegisterUpliftScope registerUpliftScope = new RegisterUpliftScope(scopeRef);
registerUpliftScopes.add(registerUpliftScope);
return registerUpliftScope;
}
public String toString(VariableRegisterWeights variableRegisterWeights) {
StringBuilder out = new StringBuilder();
for (RegisterUpliftScope upliftScope : registerUpliftScopes) {
out.append(upliftScope.toString(variableRegisterWeights)).append("\n");
}
return out.toString();
}
@Override
public String toString() {
return toString(null);
}
}

View File

@ -0,0 +1,193 @@
package dk.camelot64.kickc.icl;
import com.ibm.icu.text.NumberFormat;
import java.util.*;
/**
* Register Uplift information for a single scope.
*/
public class RegisterUpliftScope {
/**
* The scope.
*/
private LabelRef scopeRef;
/**
* Live Range Equivalence Classes in the scope sorted by total variable register weight.
*/
private List<LiveRangeEquivalenceClass> equivalenceClasses;
public RegisterUpliftScope(LabelRef scopeRef) {
this.scopeRef = scopeRef;
this.equivalenceClasses = new ArrayList<>();
}
public void setEquivalenceClasses(List<LiveRangeEquivalenceClass> equivalenceClasses) {
this.equivalenceClasses = equivalenceClasses;
}
public LabelRef getScopeRef() {
return scopeRef;
}
public Collection<LiveRangeEquivalenceClass> getEquivalenceClasses() {
return equivalenceClasses;
}
public String toString(VariableRegisterWeights weights) {
StringBuilder out = new StringBuilder();
out.append("Uplift Scope [" + scopeRef.toString() + "] ");
for (LiveRangeEquivalenceClass equivalenceClass : equivalenceClasses) {
if (weights != null) {
NumberFormat fmt = NumberFormat.getInstance(Locale.ENGLISH);
fmt.setMaximumFractionDigits(2);
out.append(fmt.format(weights.getTotalWeight(equivalenceClass)) + ": ");
}
out.append(equivalenceClass.toString() + " ");
}
return out.toString();
}
@Override
public String toString() {
return toString(null);
}
public Iterator<Combination> geCombinationIterator() {
return new CombinationIterator(scopeRef, equivalenceClasses);
}
/**
* A combination of register/ZP assignments for the equivalence classes of the scope.
*/
public static class Combination {
/**
* The scope.
*/
private LabelRef scopeRef;
/**
* The registers allocated to each equivalence class.
*/
private Map<LiveRangeEquivalenceClass, RegisterAllocation.Register> allocation;
public Combination(LabelRef scopeRef) {
this.scopeRef = scopeRef;
this.allocation = new LinkedHashMap<>();
}
void setRegister(LiveRangeEquivalenceClass equivalenceClass, RegisterAllocation.Register register) {
allocation.put(equivalenceClass, register);
}
/**
* Allocate the registers of the combination into the programs register allocation
*/
public void allocate(RegisterAllocation registerAllocation) {
for (LiveRangeEquivalenceClass equivalenceClass : allocation.keySet()) {
RegisterAllocation.Register register = allocation.get(equivalenceClass);
for (VariableRef variable : equivalenceClass.getVariables()) {
registerAllocation.setRegister(variable, register);
}
}
}
/**
* Store the best combination in the equivalence classes.
*/
public void store(LiveRangeEquivalenceClassSet equivalenceClassSet) {
for (LiveRangeEquivalenceClass equivalenceClass : allocation.keySet()) {
VariableRef variable = equivalenceClass.getVariables().get(0);
LiveRangeEquivalenceClass globalEquivalenceClass = equivalenceClassSet.getEquivalenceClass(variable);
RegisterAllocation.Register register = allocation.get(equivalenceClass);
globalEquivalenceClass.setRegister(register);
}
}
@Override
public String toString() {
StringBuilder out = new StringBuilder();
for (LiveRangeEquivalenceClass equivalenceClass : allocation.keySet()) {
RegisterAllocation.Register register = allocation.get(equivalenceClass);
out.append(register.toString()).append(" ").append(equivalenceClass.toString(false)).append(" ");
}
return out.toString();
}
}
private static class CombinationIterator implements Iterator<Combination> {
/**
* The scope we are creating combinations for.
*/
private LabelRef scopeRef;
/**
* The equivalence classes to create register combinations for.
*/
private List<LiveRangeEquivalenceClass> equivalenceClasses;
/**
* The ID of the next iteration. Combinations are created from the index by using modulo.
*/
private int nextIterationId;
public CombinationIterator(LabelRef scopeRef, List<LiveRangeEquivalenceClass> equivalenceClasses) {
this.scopeRef = scopeRef;
this.equivalenceClasses = equivalenceClasses;
this.nextIterationId = 0;
}
@Override
public boolean hasNext() {
return nextIterationId < getNumIterations();
}
private int getNumIterations() {
int numIterations = 1;
for (LiveRangeEquivalenceClass equivalenceClass : equivalenceClasses) {
RegisterAllocation.Register defaultReegister = equivalenceClass.getRegister();
if (defaultReegister.getType().equals(RegisterAllocation.RegisterType.ZP_BYTE)) {
numIterations = numIterations << 2;
}
}
return numIterations;
}
@Override
public Combination next() {
Combination combination = new Combination(scopeRef);
int combinationIdRest = nextIterationId;
for (LiveRangeEquivalenceClass equivalenceClass : equivalenceClasses) {
RegisterAllocation.Register defaultReegister = equivalenceClass.getRegister();
if (defaultReegister.getType().equals(RegisterAllocation.RegisterType.ZP_BYTE)) {
int registerIdx = (combinationIdRest % 4);
List<RegisterAllocation.Register> potentialRegisters =
Arrays.asList(
defaultReegister,
RegisterAllocation.getRegisterA(),
RegisterAllocation.getRegisterX(),
RegisterAllocation.getRegisterY());
RegisterAllocation.Register register = potentialRegisters.get(registerIdx);
combination.setRegister(equivalenceClass, register);
combinationIdRest = combinationIdRest >> 2;
} else {
combination.setRegister(equivalenceClass, defaultReegister);
}
}
nextIterationId++;
return combination;
}
@Override
public void remove() {
throw new RuntimeException("Not supported");
}
}
}

View File

@ -69,6 +69,11 @@ public abstract class Scope implements Symbol {
return symbol.getLocalName();
}
/**
* Get the label ref representing the scope itself
* @return The label reference
*/
public abstract LabelRef getScopeLabelRef();
@Override
@JsonIgnore
@ -166,6 +171,27 @@ public abstract class Scope implements Symbol {
return vars;
}
/**
* Get all scopes contained in the scope. This does not include this scope itself.
* @param includeSubScopes Include sub-scopes og sub-scopes
* @return The scopes
*/
@JsonIgnore
public Collection<Scope> getAllScopes(boolean includeSubScopes) {
Collection<Scope> scopes = new ArrayList<>();
for (Symbol symbol : symbols.values()) {
if (symbol instanceof Scope) {
scopes.add((Scope) symbol);
if(includeSubScopes) {
Scope subScope = (Scope) symbol;
scopes.addAll(subScope.getAllScopes(true));
}
}
}
return scopes;
}
public Label addLabel(String name) {
Label symbol = new Label(name, this, false);
add(symbol);

View File

@ -1,6 +1,7 @@
package dk.camelot64.kickc.icl;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
/**
@ -33,4 +34,15 @@ public class VariableRegisterWeights {
public Double getWeight(VariableRef variable) {
return registerWeights.get(variable);
}
public double getTotalWeight(LiveRangeEquivalenceClass equivalenceClass) {
double totalWeight = 0.0;
List<VariableRef> vars = equivalenceClass.getVariables();
for (VariableRef var : vars) {
Double varWeight = getWeight(var);
totalWeight += varWeight;
}
return totalWeight;
}
}

View File

@ -0,0 +1,47 @@
package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.icl.*;
import java.util.*;
/*** Find the variable equivalence classes to attempt to uplift in each scope */
public class Pass3RegisterUpliftScopeAnalysis extends Pass2Base {
public Pass3RegisterUpliftScopeAnalysis(Program program) {
super(program);
}
/*** Find the variable equivalence classes to attempt to uplift in each scope */
public void findScopes() {
LiveRangeEquivalenceClassSet equivalenceClassSet = getProgram().getLiveRangeEquivalenceClassSet();
final VariableRegisterWeights registerWeights = getProgram().getVariableRegisterWeights();
RegisterUpliftProgram registerUpliftProgram = new RegisterUpliftProgram();
Collection<Scope> allScopes = getProgram().getScope().getAllScopes(true);
allScopes.add(getSymbols());
for (Scope scope : allScopes) {
LabelRef scopeLabel = scope.getScopeLabelRef();
RegisterUpliftScope registerUpliftScope = registerUpliftProgram.addRegisterUpliftScope(scopeLabel);
// Find live range equivalence classes for the scope
List<LiveRangeEquivalenceClass> equivalenceClasses = new ArrayList<>();
for (LiveRangeEquivalenceClass equivalenceClass : equivalenceClassSet.getEquivalenceClasses()) {
VariableRef variableRef = equivalenceClass.getVariables().get(0);
if (variableRef.getScopeNames().equals(scopeLabel.getFullName())) {
equivalenceClasses.add(equivalenceClass);
}
}
Collections.sort(equivalenceClasses, new Comparator<LiveRangeEquivalenceClass>() {
@Override
public int compare(LiveRangeEquivalenceClass o1, LiveRangeEquivalenceClass o2) {
return Double.compare(registerWeights.getTotalWeight(o2), registerWeights.getTotalWeight(o1));
}
});
registerUpliftScope.setEquivalenceClasses(equivalenceClasses);
}
getProgram().setRegisterUpliftProgram(registerUpliftProgram);
}
}

View File

@ -6,15 +6,13 @@ import java.util.Arrays;
import java.util.List;
/*** Uplift one variable into the A register - and check if the program still works */
public class Pass3RegisterUplifting extends Pass2Base {
public class Pass3RegisterUpliftTest extends Pass2Base {
public Pass3RegisterUplifting(Program program) {
public Pass3RegisterUpliftTest(Program program) {
super(program);
}
/**
* Uplift one variable
*/
/** Uplift variables to registers */
public void uplift() {
VariableRegisterWeights variableRegisterWeights = getProgram().getVariableRegisterWeights();
LiveRangeEquivalenceClassSet equivalenceClassSet = getProgram().getLiveRangeEquivalenceClassSet();

View File

@ -12,9 +12,11 @@ public class Pass3RegistersFinalize extends Pass2Base {
super(program);
}
public void allocate() {
public void allocate(boolean reallocZp) {
LiveRangeEquivalenceClassSet liveRangeEquivalenceClassSet = getProgram().getLiveRangeEquivalenceClassSet();
reallocateZp(liveRangeEquivalenceClassSet);
if(reallocZp) {
reallocateZp(liveRangeEquivalenceClassSet);
}
RegisterAllocation allocation = liveRangeEquivalenceClassSet.createRegisterAllocation();
getProgram().setAllocation(allocation);
}

View File

@ -15,7 +15,6 @@ public class Pass3ZeroPageCoalesce extends Pass2Base {
public void allocate() {
LiveRangeEquivalenceClassSet liveRangeEquivalenceClassSet = getProgram().getLiveRangeEquivalenceClassSet();
boolean change;
do {
change = coalesce(liveRangeEquivalenceClassSet);

View File

@ -1,10 +1,8 @@
BBEGIN:
B1_from_BBEGIN:
lda #0
sta 6
lda #12
sta 5
lda #0
ldx #12
sta 4
lda #<1024
sta 2
@ -20,13 +18,12 @@ B1:
bne !+
inc 2+1
!:
lda 5
txa
clc
adc #24
sta 5
lda #39
cmp 5
bcc B2
tax
cpx #39
bcs B2
B3_from_B1:
B3:
lda 4
@ -34,7 +31,7 @@ B3:
bcc B1_from_B3
BEND:
B2:
inc 6
inc 5
lda 2
clc
adc #40
@ -42,9 +39,9 @@ B2:
bcc !+
inc 2+1
!:
lda 5
txa
sec
sbc #39
sta 5
tax
B3_from_B2:
jmp B3

View File

@ -1171,42 +1171,75 @@ B3_from_B2:
//SEG31 [6] phi (byte*) cursor#5 = (byte*) cursor#2 -- register_copy
jmp B3
Uplifting max weight 55.0 live range equivalence class zp byte:5 [ e#3 e#5 e#1 e#2 ]
Uplift to reg byte a resulted in clobber.
Uplift to reg byte x succesfull.
Uplift to reg byte y resulted in clobber.
REGISTER UPLIFTING
(byte[1000]) SCREEN
(byte) STAR
(byte*) cursor
(byte*) cursor#1 zp ptr byte:2 8.25
(byte*) cursor#2 zp ptr byte:2 11.0
(byte*) cursor#3 zp ptr byte:2 11.0
(byte*) cursor#5 zp ptr byte:2 16.5
(byte) e
(byte) e#1 zp byte:5 11.0
(byte) e#2 zp byte:5 22.0
(byte) e#3 zp byte:5 5.5
(byte) e#5 zp byte:5 16.5
(byte) x
(byte) x#1 zp byte:4 3.666666666666667
(byte) x#2 zp byte:4 11.0
(byte) x0
(byte) x1
(byte) xd
(byte) y
(byte) y#1 zp byte:6 7.333333333333333
(byte) y#2 zp byte:6 5.5
(byte) y#4 zp byte:6 16.5
(byte) y0
(byte) y1
(byte) yd
zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ]
zp byte:4 [ x#2 x#1 ]
zp byte:5 [ e#3 e#5 e#1 e#2 ]
zp byte:6 [ y#2 y#4 y#1 ]
REGISTER UPLIFT SCOPES
Uplift Scope [] 55: zp byte:5 [ e#3 e#5 e#1 e#2 ] 46.75: zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] 29.33: zp byte:6 [ y#2 y#4 y#1 ] 14.67: zp byte:4 [ x#2 x#1 ]
Uplift attempt [] 91 allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Uplift attempt [] 83 allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Uplift attempt [] 88 allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte a [ x#2 x#1 ]
Uplift attempt [] 86 allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte x [ x#2 x#1 ]
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte a [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte x [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
Uplift attempt [] clobber allocation: zp byte:5 [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte a [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
Uplift attempt [] clobber allocation: reg byte y [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] reg byte y [ y#2 y#4 y#1 ] reg byte y [ x#2 x#1 ]
Uplifting [] best 83 combination reg byte x [ e#3 e#5 e#1 e#2 ] zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ] zp byte:6 [ y#2 y#4 y#1 ] zp byte:4 [ x#2 x#1 ]
Re-allocated ZP register from zp byte:6 to zp byte:5
Removing instruction jmp B1
Removing instruction jmp B3
Removing instruction jmp BEND
@ -1218,10 +1251,9 @@ BBEGIN:
B1_from_BBEGIN:
//SEG2 [0] phi (byte) y#2 = (byte) 0 -- zpby1=coby1
lda #0
sta 6
//SEG3 [0] phi (byte) e#3 = (byte) 12 -- zpby1=coby1
lda #12
sta 5
//SEG3 [0] phi (byte) e#3 = (byte) 12 -- xby=coby1
ldx #12
//SEG4 [0] phi (byte) x#2 = (byte) 0 -- zpby1=coby1
lda #0
sta 4
@ -1250,15 +1282,14 @@ B1:
bne !+
inc 2+1
!:
//SEG15 [4] (byte) e#1 ← (byte) e#3 + (byte) 24 [ x#1 e#1 cursor#1 y#2 ] -- zpby1=zpby1_plus_coby1
lda 5
//SEG15 [4] (byte) e#1 ← (byte) e#3 + (byte) 24 [ x#1 e#1 cursor#1 y#2 ] -- xby=xby_plus_coby1
txa
clc
adc #24
sta 5
//SEG16 [5] if((byte) 39<(byte) e#1) goto @2 [ x#1 e#1 cursor#1 y#2 ] -- coby1_lt_zpby1_then_la1
lda #39
cmp 5
bcc B2
tax
//SEG16 [5] if((byte) 39<(byte) e#1) goto @2 [ x#1 e#1 cursor#1 y#2 ] -- coby1_lt_xby_then_la1
cpx #39
bcs B2
//SEG17 [6] phi from @1 to @3
B3_from_B1:
//SEG18 [6] phi (byte) y#4 = (byte) y#2 -- register_copy
@ -1275,7 +1306,7 @@ BEND:
//SEG24 @2
B2:
//SEG25 [8] (byte) y#1 ← (byte) y#2 + (byte) 1 [ x#1 e#1 cursor#1 y#1 ] -- zpby1=zpby1_plus_1
inc 6
inc 5
//SEG26 [9] (byte*) cursor#2 ← (byte*) cursor#1 + (byte) 40 [ x#1 e#1 cursor#2 y#1 ] -- zpptrby1=zpptrby1_plus_coby1
lda 2
clc
@ -1284,11 +1315,95 @@ B2:
bcc !+
inc 2+1
!:
//SEG27 [10] (byte) e#2 ← (byte) e#1 - (byte) 39 [ x#1 cursor#2 e#2 y#1 ] -- zpby1=zpby1_minus_coby1
lda 5
//SEG27 [10] (byte) e#2 ← (byte) e#1 - (byte) 39 [ x#1 cursor#2 e#2 y#1 ] -- xby=xby_minus_coby1
txa
sec
sbc #39
tax
//SEG28 [6] phi from @2 to @3
B3_from_B2:
//SEG29 [6] phi (byte) y#4 = (byte) y#1 -- register_copy
//SEG30 [6] phi (byte) e#5 = (byte) e#2 -- register_copy
//SEG31 [6] phi (byte*) cursor#5 = (byte*) cursor#2 -- register_copy
jmp B3
Removing instruction lda #0
Succesful ASM optimization Pass5UnnecesaryLoadElimination
ASSEMBLER
//SEG0 @BEGIN
BBEGIN:
//SEG1 [0] phi from @BEGIN to @1
B1_from_BBEGIN:
//SEG2 [0] phi (byte) y#2 = (byte) 0 -- zpby1=coby1
lda #0
sta 5
//SEG3 [0] phi (byte) e#3 = (byte) 12 -- xby=coby1
ldx #12
//SEG4 [0] phi (byte) x#2 = (byte) 0 -- zpby1=coby1
sta 4
//SEG5 [0] phi (byte*) cursor#3 = (word) 1024 -- zpptrby1=cowo1
lda #<1024
sta 2
lda #>1024
sta 2+1
jmp B1
//SEG6 [0] phi from @3 to @1
B1_from_B3:
//SEG7 [0] phi (byte) y#2 = (byte) y#4 -- register_copy
//SEG8 [0] phi (byte) e#3 = (byte) e#5 -- register_copy
//SEG9 [0] phi (byte) x#2 = (byte) x#1 -- register_copy
//SEG10 [0] phi (byte*) cursor#3 = (byte*) cursor#5 -- register_copy
//SEG11 @1
B1:
//SEG12 [1] *((byte*) cursor#3) ← (byte) 81 [ cursor#3 x#2 e#3 y#2 ] -- _star_zpptrby1=coby1
ldy #0
lda #81
sta (2),y
//SEG13 [2] (byte) x#1 ← (byte) x#2 + (byte) 1 [ x#1 cursor#3 e#3 y#2 ] -- zpby1=zpby1_plus_1
inc 4
//SEG14 [3] (byte*) cursor#1 ← (byte*) cursor#3 + (byte) 1 [ x#1 e#3 cursor#1 y#2 ] -- zpptrby1=zpptrby1_plus_1
inc 2
bne !+
inc 2+1
!:
//SEG15 [4] (byte) e#1 ← (byte) e#3 + (byte) 24 [ x#1 e#1 cursor#1 y#2 ] -- xby=xby_plus_coby1
txa
clc
adc #24
tax
//SEG16 [5] if((byte) 39<(byte) e#1) goto @2 [ x#1 e#1 cursor#1 y#2 ] -- coby1_lt_xby_then_la1
cpx #39
bcs B2
//SEG17 [6] phi from @1 to @3
B3_from_B1:
//SEG18 [6] phi (byte) y#4 = (byte) y#2 -- register_copy
//SEG19 [6] phi (byte) e#5 = (byte) e#1 -- register_copy
//SEG20 [6] phi (byte*) cursor#5 = (byte*) cursor#1 -- register_copy
//SEG21 @3
B3:
//SEG22 [7] if((byte) x#1<(byte) 40) goto @1 [ cursor#5 x#1 e#5 y#4 ] -- zpby1_lt_coby1_then_la1
lda 4
cmp #40
bcc B1_from_B3
//SEG23 @END
BEND:
//SEG24 @2
B2:
//SEG25 [8] (byte) y#1 ← (byte) y#2 + (byte) 1 [ x#1 e#1 cursor#1 y#1 ] -- zpby1=zpby1_plus_1
inc 5
//SEG26 [9] (byte*) cursor#2 ← (byte*) cursor#1 + (byte) 40 [ x#1 e#1 cursor#2 y#1 ] -- zpptrby1=zpptrby1_plus_coby1
lda 2
clc
adc #40
sta 2
bcc !+
inc 2+1
!:
//SEG27 [10] (byte) e#2 ← (byte) e#1 - (byte) 39 [ x#1 cursor#2 e#2 y#1 ] -- xby=xby_minus_coby1
txa
sec
sbc #39
tax
//SEG28 [6] phi from @2 to @3
B3_from_B2:
//SEG29 [6] phi (byte) y#4 = (byte) y#1 -- register_copy
@ -1305,12 +1420,10 @@ BBEGIN:
B1_from_BBEGIN:
//SEG2 [0] phi (byte) y#2 = (byte) 0 -- zpby1=coby1
lda #0
sta 6
//SEG3 [0] phi (byte) e#3 = (byte) 12 -- zpby1=coby1
lda #12
sta 5
//SEG3 [0] phi (byte) e#3 = (byte) 12 -- xby=coby1
ldx #12
//SEG4 [0] phi (byte) x#2 = (byte) 0 -- zpby1=coby1
lda #0
sta 4
//SEG5 [0] phi (byte*) cursor#3 = (word) 1024 -- zpptrby1=cowo1
lda #<1024
@ -1336,15 +1449,14 @@ B1:
bne !+
inc 2+1
!:
//SEG15 [4] (byte) e#1 ← (byte) e#3 + (byte) 24 [ x#1 e#1 cursor#1 y#2 ] -- zpby1=zpby1_plus_coby1
lda 5
//SEG15 [4] (byte) e#1 ← (byte) e#3 + (byte) 24 [ x#1 e#1 cursor#1 y#2 ] -- xby=xby_plus_coby1
txa
clc
adc #24
sta 5
//SEG16 [5] if((byte) 39<(byte) e#1) goto @2 [ x#1 e#1 cursor#1 y#2 ] -- coby1_lt_zpby1_then_la1
lda #39
cmp 5
bcc B2
tax
//SEG16 [5] if((byte) 39<(byte) e#1) goto @2 [ x#1 e#1 cursor#1 y#2 ] -- coby1_lt_xby_then_la1
cpx #39
bcs B2
//SEG17 [6] phi from @1 to @3
B3_from_B1:
//SEG18 [6] phi (byte) y#4 = (byte) y#2 -- register_copy
@ -1361,7 +1473,7 @@ BEND:
//SEG24 @2
B2:
//SEG25 [8] (byte) y#1 ← (byte) y#2 + (byte) 1 [ x#1 e#1 cursor#1 y#1 ] -- zpby1=zpby1_plus_1
inc 6
inc 5
//SEG26 [9] (byte*) cursor#2 ← (byte*) cursor#1 + (byte) 40 [ x#1 e#1 cursor#2 y#1 ] -- zpptrby1=zpptrby1_plus_coby1
lda 2
clc
@ -1370,11 +1482,11 @@ B2:
bcc !+
inc 2+1
!:
//SEG27 [10] (byte) e#2 ← (byte) e#1 - (byte) 39 [ x#1 cursor#2 e#2 y#1 ] -- zpby1=zpby1_minus_coby1
lda 5
//SEG27 [10] (byte) e#2 ← (byte) e#1 - (byte) 39 [ x#1 cursor#2 e#2 y#1 ] -- xby=xby_minus_coby1
txa
sec
sbc #39
sta 5
tax
//SEG28 [6] phi from @2 to @3
B3_from_B2:
//SEG29 [6] phi (byte) y#4 = (byte) y#1 -- register_copy
@ -1396,10 +1508,10 @@ FINAL SYMBOL TABLE
(byte*) cursor#3 zp ptr byte:2 11.0
(byte*) cursor#5 zp ptr byte:2 16.5
(byte) e
(byte) e#1 zp byte:5 11.0
(byte) e#2 zp byte:5 22.0
(byte) e#3 zp byte:5 5.5
(byte) e#5 zp byte:5 16.5
(byte) e#1 reg byte x 11.0
(byte) e#2 reg byte x 22.0
(byte) e#3 reg byte x 5.5
(byte) e#5 reg byte x 16.5
(byte) x
(byte) x#1 zp byte:4 3.666666666666667
(byte) x#2 zp byte:4 11.0
@ -1407,17 +1519,17 @@ FINAL SYMBOL TABLE
(byte) x1
(byte) xd
(byte) y
(byte) y#1 zp byte:6 7.333333333333333
(byte) y#2 zp byte:6 5.5
(byte) y#4 zp byte:6 16.5
(byte) y#1 zp byte:5 7.333333333333333
(byte) y#2 zp byte:5 5.5
(byte) y#4 zp byte:5 16.5
(byte) y0
(byte) y1
(byte) yd
zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ]
zp byte:4 [ x#2 x#1 ]
zp byte:5 [ e#3 e#5 e#1 e#2 ]
zp byte:6 [ y#2 y#4 y#1 ]
reg byte x [ e#3 e#5 e#1 e#2 ]
zp byte:5 [ y#2 y#4 y#1 ]
FINAL CODE
//SEG0 @BEGIN
@ -1426,12 +1538,10 @@ BBEGIN:
B1_from_BBEGIN:
//SEG2 [0] phi (byte) y#2 = (byte) 0 -- zpby1=coby1
lda #0
sta 6
//SEG3 [0] phi (byte) e#3 = (byte) 12 -- zpby1=coby1
lda #12
sta 5
//SEG3 [0] phi (byte) e#3 = (byte) 12 -- xby=coby1
ldx #12
//SEG4 [0] phi (byte) x#2 = (byte) 0 -- zpby1=coby1
lda #0
sta 4
//SEG5 [0] phi (byte*) cursor#3 = (word) 1024 -- zpptrby1=cowo1
lda #<1024
@ -1457,15 +1567,14 @@ B1:
bne !+
inc 2+1
!:
//SEG15 [4] (byte) e#1 ← (byte) e#3 + (byte) 24 [ x#1 e#1 cursor#1 y#2 ] -- zpby1=zpby1_plus_coby1
lda 5
//SEG15 [4] (byte) e#1 ← (byte) e#3 + (byte) 24 [ x#1 e#1 cursor#1 y#2 ] -- xby=xby_plus_coby1
txa
clc
adc #24
sta 5
//SEG16 [5] if((byte) 39<(byte) e#1) goto @2 [ x#1 e#1 cursor#1 y#2 ] -- coby1_lt_zpby1_then_la1
lda #39
cmp 5
bcc B2
tax
//SEG16 [5] if((byte) 39<(byte) e#1) goto @2 [ x#1 e#1 cursor#1 y#2 ] -- coby1_lt_xby_then_la1
cpx #39
bcs B2
//SEG17 [6] phi from @1 to @3
B3_from_B1:
//SEG18 [6] phi (byte) y#4 = (byte) y#2 -- register_copy
@ -1482,7 +1591,7 @@ BEND:
//SEG24 @2
B2:
//SEG25 [8] (byte) y#1 ← (byte) y#2 + (byte) 1 [ x#1 e#1 cursor#1 y#1 ] -- zpby1=zpby1_plus_1
inc 6
inc 5
//SEG26 [9] (byte*) cursor#2 ← (byte*) cursor#1 + (byte) 40 [ x#1 e#1 cursor#2 y#1 ] -- zpptrby1=zpptrby1_plus_coby1
lda 2
clc
@ -1491,11 +1600,11 @@ B2:
bcc !+
inc 2+1
!:
//SEG27 [10] (byte) e#2 ← (byte) e#1 - (byte) 39 [ x#1 cursor#2 e#2 y#1 ] -- zpby1=zpby1_minus_coby1
lda 5
//SEG27 [10] (byte) e#2 ← (byte) e#1 - (byte) 39 [ x#1 cursor#2 e#2 y#1 ] -- xby=xby_minus_coby1
txa
sec
sbc #39
sta 5
tax
//SEG28 [6] phi from @2 to @3
B3_from_B2:
//SEG29 [6] phi (byte) y#4 = (byte) y#1 -- register_copy

View File

@ -11,10 +11,10 @@
(byte*) cursor#3 zp ptr byte:2 11.0
(byte*) cursor#5 zp ptr byte:2 16.5
(byte) e
(byte) e#1 zp byte:5 11.0
(byte) e#2 zp byte:5 22.0
(byte) e#3 zp byte:5 5.5
(byte) e#5 zp byte:5 16.5
(byte) e#1 reg byte x 11.0
(byte) e#2 reg byte x 22.0
(byte) e#3 reg byte x 5.5
(byte) e#5 reg byte x 16.5
(byte) x
(byte) x#1 zp byte:4 3.666666666666667
(byte) x#2 zp byte:4 11.0
@ -22,14 +22,14 @@
(byte) x1
(byte) xd
(byte) y
(byte) y#1 zp byte:6 7.333333333333333
(byte) y#2 zp byte:6 5.5
(byte) y#4 zp byte:6 16.5
(byte) y#1 zp byte:5 7.333333333333333
(byte) y#2 zp byte:5 5.5
(byte) y#4 zp byte:5 16.5
(byte) y0
(byte) y1
(byte) yd
zp ptr byte:2 [ cursor#3 cursor#5 cursor#1 cursor#2 ]
zp byte:4 [ x#2 x#1 ]
zp byte:5 [ e#3 e#5 e#1 e#2 ]
zp byte:6 [ y#2 y#4 y#1 ]
reg byte x [ e#3 e#5 e#1 e#2 ]
zp byte:5 [ y#2 y#4 y#1 ]

View File

@ -4,25 +4,16 @@ BBEGIN:
lda #1
sta 4353
B1_from_BBEGIN:
lda #0
sta 2
ldx #0
B1_from_B1:
B1:
ldx 2
lda 4352,x
sta 3
ldx 2
sta 2
lda 4353,x
sta 4
lda 3
clc
adc 4
sta 5
lda 5
ldx 2
adc 2
sta 4354,x
inc 2
lda 2
cmp #15
inx
cpx #15
bcc B1_from_B1
BEND:

View File

@ -487,25 +487,311 @@ B1:
//SEG14 @END
BEND:
Uplifting max weight 27.5 live range equivalence class zp byte:2 [ i#2 i#1 ]
Uplift to reg byte a resulted in clobber.
Uplift to reg byte x succesfull.
Uplift to reg byte y succesfull.
REGISTER UPLIFTING
(byte~) $1 zp byte:3 11.0
(byte~) $3 zp byte:4 22.0
(byte~) $4 zp byte:5 22.0
(byte[15]) fibs
(byte) i
(byte) i#1 zp byte:2 16.5
(byte) i#2 zp byte:2 11.0
REGISTER UPLIFT SCOPES
Uplift Scope [] 27.5: zp byte:2 [ i#2 i#1 ] 22: zp byte:4 [ $3 ] 22: zp byte:5 [ $4 ] 11: zp byte:3 [ $1 ]
zp byte:2 [ i#2 i#1 ]
zp byte:3 [ $1 ]
zp byte:4 [ $3 ]
zp byte:5 [ $4 ]
Coalescing zero page register [ zp byte:3 [ $1 ] ] with [ zp byte:5 [ $4 ] ]
Uplift attempt [] 59 allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] 48 allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] 51 allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] missing fragment zpby1=zpby2_plus_aby
Uplift attempt [] missing fragment zpby1=zpby2_plus_aby
Uplift attempt [] missing fragment zpby1=zpby2_plus_aby
Uplift attempt [] missing fragment zpby1=zpby2_plus_aby
Uplift attempt [] missing fragment zpby1=zpby2_plus_xby
Uplift attempt [] missing fragment zpby1=zpby2_plus_xby
Uplift attempt [] missing fragment zpby1=zpby2_plus_xby
Uplift attempt [] missing fragment zpby1=zpby2_plus_xby
Uplift attempt [] missing fragment zpby1=zpby2_plus_yby
Uplift attempt [] missing fragment zpby1=zpby2_plus_yby
Uplift attempt [] missing fragment zpby1=zpby2_plus_yby
Uplift attempt [] missing fragment zpby1=zpby2_plus_yby
Uplift attempt [] 55 allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] 44 allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] 47 allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] 51 allocation: zp byte:2 [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] 40 allocation: reg byte x [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] 43 allocation: reg byte y [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] missing fragment aby=zpby1_plus_xby
Uplift attempt [] missing fragment aby=zpby1_plus_xby
Uplift attempt [] missing fragment aby=zpby1_plus_xby
Uplift attempt [] missing fragment aby=zpby1_plus_xby
Uplift attempt [] missing fragment aby=zpby1_plus_yby
Uplift attempt [] missing fragment aby=zpby1_plus_yby
Uplift attempt [] missing fragment aby=zpby1_plus_yby
Uplift attempt [] missing fragment aby=zpby1_plus_yby
Uplift attempt [] 57 allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte x [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte x [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte x [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] 49 allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte x [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] missing fragment xby=zpby1_plus_aby
Uplift attempt [] missing fragment xby=zpby1_plus_aby
Uplift attempt [] missing fragment xby=zpby1_plus_aby
Uplift attempt [] missing fragment xby=zpby1_plus_aby
Uplift attempt [] missing fragment xby=zpby1_plus_xby
Uplift attempt [] missing fragment xby=zpby1_plus_xby
Uplift attempt [] missing fragment xby=zpby1_plus_xby
Uplift attempt [] missing fragment xby=zpby1_plus_xby
Uplift attempt [] missing fragment xby=zpby1_plus_yby
Uplift attempt [] missing fragment xby=zpby1_plus_yby
Uplift attempt [] missing fragment xby=zpby1_plus_yby
Uplift attempt [] missing fragment xby=zpby1_plus_yby
Uplift attempt [] 58 allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte y [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte y [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] 46 allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte y [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte y [ $4 ] zp byte:3 [ $1 ]
Uplift attempt [] missing fragment yby=zpby1_plus_aby
Uplift attempt [] missing fragment yby=zpby1_plus_aby
Uplift attempt [] missing fragment yby=zpby1_plus_aby
Uplift attempt [] missing fragment yby=zpby1_plus_aby
Uplift attempt [] missing fragment yby=zpby1_plus_xby
Uplift attempt [] missing fragment yby=zpby1_plus_xby
Uplift attempt [] missing fragment yby=zpby1_plus_xby
Uplift attempt [] missing fragment yby=zpby1_plus_xby
Uplift attempt [] missing fragment yby=zpby1_plus_yby
Uplift attempt [] missing fragment yby=zpby1_plus_yby
Uplift attempt [] missing fragment yby=zpby1_plus_yby
Uplift attempt [] missing fragment yby=zpby1_plus_yby
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] reg byte a [ $3 ] zp byte:5 [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte a [ $3 ] zp byte:5 [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte a [ $3 ] zp byte:5 [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte a [ $3 ] zp byte:5 [ $4 ] reg byte a [ $1 ]
Uplift attempt [] missing fragment zpby1=aby_plus_xby
Uplift attempt [] missing fragment zpby1=aby_plus_xby
Uplift attempt [] missing fragment zpby1=aby_plus_xby
Uplift attempt [] missing fragment zpby1=aby_plus_xby
Uplift attempt [] missing fragment zpby1=aby_plus_yby
Uplift attempt [] missing fragment zpby1=aby_plus_yby
Uplift attempt [] missing fragment zpby1=aby_plus_yby
Uplift attempt [] missing fragment zpby1=aby_plus_yby
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] reg byte x [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte x [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte x [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
Uplift attempt [] 43 allocation: reg byte y [ i#2 i#1 ] reg byte x [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] reg byte y [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte y [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
Uplift attempt [] 40 allocation: reg byte x [ i#2 i#1 ] reg byte y [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte y [ $3 ] reg byte a [ $4 ] reg byte a [ $1 ]
Uplift attempt [] missing fragment xby=aby_plus_zpby1
Uplift attempt [] missing fragment xby=aby_plus_zpby1
Uplift attempt [] missing fragment xby=aby_plus_zpby1
Uplift attempt [] missing fragment xby=aby_plus_zpby1
Uplift attempt [] missing fragment xby=aby_plus_aby
Uplift attempt [] missing fragment xby=aby_plus_aby
Uplift attempt [] missing fragment xby=aby_plus_aby
Uplift attempt [] missing fragment xby=aby_plus_aby
Uplift attempt [] missing fragment xby=aby_plus_xby
Uplift attempt [] missing fragment xby=aby_plus_xby
Uplift attempt [] missing fragment xby=aby_plus_xby
Uplift attempt [] missing fragment xby=aby_plus_xby
Uplift attempt [] missing fragment xby=aby_plus_yby
Uplift attempt [] missing fragment xby=aby_plus_yby
Uplift attempt [] missing fragment xby=aby_plus_yby
Uplift attempt [] missing fragment xby=aby_plus_yby
Uplift attempt [] missing fragment yby=aby_plus_zpby1
Uplift attempt [] missing fragment yby=aby_plus_zpby1
Uplift attempt [] missing fragment yby=aby_plus_zpby1
Uplift attempt [] missing fragment yby=aby_plus_zpby1
Uplift attempt [] missing fragment yby=aby_plus_aby
Uplift attempt [] missing fragment yby=aby_plus_aby
Uplift attempt [] missing fragment yby=aby_plus_aby
Uplift attempt [] missing fragment yby=aby_plus_aby
Uplift attempt [] missing fragment yby=aby_plus_xby
Uplift attempt [] missing fragment yby=aby_plus_xby
Uplift attempt [] missing fragment yby=aby_plus_xby
Uplift attempt [] missing fragment yby=aby_plus_xby
Uplift attempt [] missing fragment yby=aby_plus_yby
Uplift attempt [] missing fragment yby=aby_plus_yby
Uplift attempt [] missing fragment yby=aby_plus_yby
Uplift attempt [] missing fragment yby=aby_plus_yby
Uplift attempt [] missing fragment zpby1=xby_plus_zpby2
Uplift attempt [] missing fragment zpby1=xby_plus_zpby2
Uplift attempt [] missing fragment zpby1=xby_plus_zpby2
Uplift attempt [] missing fragment zpby1=xby_plus_zpby2
Uplift attempt [] missing fragment zpby1=xby_plus_aby
Uplift attempt [] missing fragment zpby1=xby_plus_aby
Uplift attempt [] missing fragment zpby1=xby_plus_aby
Uplift attempt [] missing fragment zpby1=xby_plus_aby
Uplift attempt [] missing fragment zpby1=xby_plus_xby
Uplift attempt [] missing fragment zpby1=xby_plus_xby
Uplift attempt [] missing fragment zpby1=xby_plus_xby
Uplift attempt [] missing fragment zpby1=xby_plus_xby
Uplift attempt [] missing fragment zpby1=xby_plus_yby
Uplift attempt [] missing fragment zpby1=xby_plus_yby
Uplift attempt [] missing fragment zpby1=xby_plus_yby
Uplift attempt [] missing fragment zpby1=xby_plus_yby
Uplift attempt [] missing fragment aby=xby_plus_zpby1
Uplift attempt [] missing fragment aby=xby_plus_zpby1
Uplift attempt [] missing fragment aby=xby_plus_zpby1
Uplift attempt [] missing fragment aby=xby_plus_zpby1
Uplift attempt [] missing fragment aby=xby_plus_aby
Uplift attempt [] missing fragment aby=xby_plus_aby
Uplift attempt [] missing fragment aby=xby_plus_aby
Uplift attempt [] missing fragment aby=xby_plus_aby
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] reg byte x [ $3 ] reg byte a [ $4 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte x [ $3 ] reg byte a [ $4 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte x [ $3 ] reg byte a [ $4 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte x [ $3 ] reg byte a [ $4 ] reg byte x [ $1 ]
Uplift attempt [] missing fragment aby=xby_plus_yby
Uplift attempt [] missing fragment aby=xby_plus_yby
Uplift attempt [] missing fragment aby=xby_plus_yby
Uplift attempt [] missing fragment aby=xby_plus_yby
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
Uplift attempt [] 46 allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] reg byte a [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte a [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte a [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
Uplift attempt [] 45 allocation: reg byte y [ i#2 i#1 ] reg byte a [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] reg byte x [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte x [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte x [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte x [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
Uplift attempt [] 57 allocation: zp byte:2 [ i#2 i#1 ] reg byte y [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte y [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte y [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte y [ $3 ] reg byte x [ $4 ] reg byte x [ $1 ]
Uplift attempt [] missing fragment yby=xby_plus_zpby1
Uplift attempt [] missing fragment yby=xby_plus_zpby1
Uplift attempt [] missing fragment yby=xby_plus_zpby1
Uplift attempt [] missing fragment yby=xby_plus_zpby1
Uplift attempt [] missing fragment yby=xby_plus_aby
Uplift attempt [] missing fragment yby=xby_plus_aby
Uplift attempt [] missing fragment yby=xby_plus_aby
Uplift attempt [] missing fragment yby=xby_plus_aby
Uplift attempt [] missing fragment yby=xby_plus_xby
Uplift attempt [] missing fragment yby=xby_plus_xby
Uplift attempt [] missing fragment yby=xby_plus_xby
Uplift attempt [] missing fragment yby=xby_plus_xby
Uplift attempt [] missing fragment yby=xby_plus_yby
Uplift attempt [] missing fragment yby=xby_plus_yby
Uplift attempt [] missing fragment yby=xby_plus_yby
Uplift attempt [] missing fragment yby=xby_plus_yby
Uplift attempt [] 58 allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] reg byte y [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] reg byte y [ $1 ]
Uplift attempt [] 45 allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] reg byte y [ $1 ]
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] zp byte:5 [ $4 ] reg byte y [ $1 ]
Uplift attempt [] missing fragment zpby1=yby_plus_aby
Uplift attempt [] missing fragment zpby1=yby_plus_aby
Uplift attempt [] missing fragment zpby1=yby_plus_aby
Uplift attempt [] missing fragment zpby1=yby_plus_aby
Uplift attempt [] missing fragment zpby1=yby_plus_xby
Uplift attempt [] missing fragment zpby1=yby_plus_xby
Uplift attempt [] missing fragment zpby1=yby_plus_xby
Uplift attempt [] missing fragment zpby1=yby_plus_xby
Uplift attempt [] missing fragment zpby1=yby_plus_yby
Uplift attempt [] missing fragment zpby1=yby_plus_yby
Uplift attempt [] missing fragment zpby1=yby_plus_yby
Uplift attempt [] missing fragment zpby1=yby_plus_yby
Uplift attempt [] missing fragment aby=yby_plus_zpby1
Uplift attempt [] missing fragment aby=yby_plus_zpby1
Uplift attempt [] missing fragment aby=yby_plus_zpby1
Uplift attempt [] missing fragment aby=yby_plus_zpby1
Uplift attempt [] missing fragment aby=yby_plus_aby
Uplift attempt [] missing fragment aby=yby_plus_aby
Uplift attempt [] missing fragment aby=yby_plus_aby
Uplift attempt [] missing fragment aby=yby_plus_aby
Uplift attempt [] missing fragment aby=yby_plus_xby
Uplift attempt [] missing fragment aby=yby_plus_xby
Uplift attempt [] missing fragment aby=yby_plus_xby
Uplift attempt [] missing fragment aby=yby_plus_xby
Uplift attempt [] missing fragment aby=yby_plus_yby
Uplift attempt [] missing fragment aby=yby_plus_yby
Uplift attempt [] missing fragment aby=yby_plus_yby
Uplift attempt [] missing fragment aby=yby_plus_yby
Uplift attempt [] missing fragment xby=yby_plus_zpby1
Uplift attempt [] missing fragment xby=yby_plus_zpby1
Uplift attempt [] missing fragment xby=yby_plus_zpby1
Uplift attempt [] missing fragment xby=yby_plus_zpby1
Uplift attempt [] missing fragment xby=yby_plus_aby
Uplift attempt [] missing fragment xby=yby_plus_aby
Uplift attempt [] missing fragment xby=yby_plus_aby
Uplift attempt [] missing fragment xby=yby_plus_aby
Uplift attempt [] missing fragment xby=yby_plus_xby
Uplift attempt [] missing fragment xby=yby_plus_xby
Uplift attempt [] missing fragment xby=yby_plus_xby
Uplift attempt [] missing fragment xby=yby_plus_xby
Uplift attempt [] missing fragment xby=yby_plus_yby
Uplift attempt [] missing fragment xby=yby_plus_yby
Uplift attempt [] missing fragment xby=yby_plus_yby
Uplift attempt [] missing fragment xby=yby_plus_yby
Uplift attempt [] 57 allocation: zp byte:2 [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
Uplift attempt [] 43 allocation: reg byte x [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] zp byte:4 [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
Uplift attempt [] 56 allocation: zp byte:2 [ i#2 i#1 ] reg byte a [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte a [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
Uplift attempt [] 42 allocation: reg byte x [ i#2 i#1 ] reg byte a [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte a [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
Uplift attempt [] 58 allocation: zp byte:2 [ i#2 i#1 ] reg byte x [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte x [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte x [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte x [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
Uplift attempt [] clobber allocation: zp byte:2 [ i#2 i#1 ] reg byte y [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte y [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte y [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte y [ $3 ] reg byte y [ $4 ] reg byte y [ $1 ]
Uplifting [] best 40 combination reg byte x [ i#2 i#1 ] reg byte a [ $3 ] reg byte a [ $4 ] zp byte:3 [ $1 ]
MISSING FRAGMENTS
zpby1=zpby2_plus_aby
zpby1=zpby2_plus_xby
zpby1=zpby2_plus_yby
aby=zpby1_plus_xby
aby=zpby1_plus_yby
xby=zpby1_plus_aby
xby=zpby1_plus_xby
xby=zpby1_plus_yby
yby=zpby1_plus_aby
yby=zpby1_plus_xby
yby=zpby1_plus_yby
zpby1=aby_plus_xby
zpby1=aby_plus_yby
xby=aby_plus_zpby1
xby=aby_plus_aby
xby=aby_plus_xby
xby=aby_plus_yby
yby=aby_plus_zpby1
yby=aby_plus_aby
yby=aby_plus_xby
yby=aby_plus_yby
zpby1=xby_plus_zpby2
zpby1=xby_plus_aby
zpby1=xby_plus_xby
zpby1=xby_plus_yby
aby=xby_plus_zpby1
aby=xby_plus_aby
aby=xby_plus_yby
yby=xby_plus_zpby1
yby=xby_plus_aby
yby=xby_plus_xby
yby=xby_plus_yby
zpby1=yby_plus_aby
zpby1=yby_plus_xby
zpby1=yby_plus_yby
aby=yby_plus_zpby1
aby=yby_plus_aby
aby=yby_plus_xby
aby=yby_plus_yby
xby=yby_plus_zpby1
xby=yby_plus_aby
xby=yby_plus_xby
xby=yby_plus_yby
Re-allocated ZP register from zp byte:3 to zp byte:2
Removing instruction jmp B1
Removing instruction jmp BEND
Succesful ASM optimization Pass5NextJumpElimination
@ -520,37 +806,28 @@ BBEGIN:
sta 4353
//SEG3 [2] phi from @BEGIN to @1
B1_from_BBEGIN:
//SEG4 [2] phi (byte) i#2 = (byte) 0 -- zpby1=coby1
lda #0
sta 2
//SEG4 [2] phi (byte) i#2 = (byte) 0 -- xby=coby1
ldx #0
jmp B1
//SEG5 [2] phi from @1 to @1
B1_from_B1:
//SEG6 [2] phi (byte) i#2 = (byte) i#1 -- register_copy
//SEG7 @1
B1:
//SEG8 [3] (byte~) $1 ← (word) 4352 *idx (byte) i#2 [ i#2 $1 ] -- zpby1=cowo1_staridx_zpby2
ldx 2
//SEG8 [3] (byte~) $1 ← (word) 4352 *idx (byte) i#2 [ i#2 $1 ] -- zpby1=cowo1_staridx_xby
lda 4352,x
sta 3
//SEG9 [4] (byte~) $3 ← (word) 4353 *idx (byte) i#2 [ i#2 $1 $3 ] -- zpby1=cowo1_staridx_zpby2
ldx 2
sta 2
//SEG9 [4] (byte~) $3 ← (word) 4353 *idx (byte) i#2 [ i#2 $1 $3 ] -- aby=cowo1_staridx_xby
lda 4353,x
sta 4
//SEG10 [5] (byte~) $4 ← (byte~) $1 + (byte~) $3 [ i#2 $4 ] -- zpby1=zpby2_plus_zpby3
lda 3
//SEG10 [5] (byte~) $4 ← (byte~) $1 + (byte~) $3 [ i#2 $4 ] -- aby=zpby1_plus_aby
clc
adc 4
sta 5
//SEG11 [6] *((word) 4354 + (byte) i#2) ← (byte~) $4 [ i#2 ] -- cowo1_staridx_zpby1=zpby2
lda 5
ldx 2
adc 2
//SEG11 [6] *((word) 4354 + (byte) i#2) ← (byte~) $4 [ i#2 ] -- cowo1_staridx_xby=aby
sta 4354,x
//SEG12 [7] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- zpby1=zpby1_plus_1
inc 2
//SEG13 [8] if((byte) i#1<(byte) 15) goto @1 [ i#1 ] -- zpby1_lt_coby1_then_la1
lda 2
cmp #15
//SEG12 [7] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- xby=xby_plus_1
inx
//SEG13 [8] if((byte) i#1<(byte) 15) goto @1 [ i#1 ] -- xby_lt_coby1_then_la1
cpx #15
bcc B1_from_B1
//SEG14 @END
BEND:
@ -568,55 +845,47 @@ BBEGIN:
sta 4353
//SEG3 [2] phi from @BEGIN to @1
B1_from_BBEGIN:
//SEG4 [2] phi (byte) i#2 = (byte) 0 -- zpby1=coby1
lda #0
sta 2
//SEG4 [2] phi (byte) i#2 = (byte) 0 -- xby=coby1
ldx #0
//SEG5 [2] phi from @1 to @1
B1_from_B1:
//SEG6 [2] phi (byte) i#2 = (byte) i#1 -- register_copy
//SEG7 @1
B1:
//SEG8 [3] (byte~) $1 ← (word) 4352 *idx (byte) i#2 [ i#2 $1 ] -- zpby1=cowo1_staridx_zpby2
ldx 2
//SEG8 [3] (byte~) $1 ← (word) 4352 *idx (byte) i#2 [ i#2 $1 ] -- zpby1=cowo1_staridx_xby
lda 4352,x
sta 3
//SEG9 [4] (byte~) $3 ← (word) 4353 *idx (byte) i#2 [ i#2 $1 $3 ] -- zpby1=cowo1_staridx_zpby2
ldx 2
sta 2
//SEG9 [4] (byte~) $3 ← (word) 4353 *idx (byte) i#2 [ i#2 $1 $3 ] -- aby=cowo1_staridx_xby
lda 4353,x
sta 4
//SEG10 [5] (byte~) $4 ← (byte~) $1 + (byte~) $3 [ i#2 $4 ] -- zpby1=zpby2_plus_zpby3
lda 3
//SEG10 [5] (byte~) $4 ← (byte~) $1 + (byte~) $3 [ i#2 $4 ] -- aby=zpby1_plus_aby
clc
adc 4
sta 5
//SEG11 [6] *((word) 4354 + (byte) i#2) ← (byte~) $4 [ i#2 ] -- cowo1_staridx_zpby1=zpby2
lda 5
ldx 2
adc 2
//SEG11 [6] *((word) 4354 + (byte) i#2) ← (byte~) $4 [ i#2 ] -- cowo1_staridx_xby=aby
sta 4354,x
//SEG12 [7] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- zpby1=zpby1_plus_1
inc 2
//SEG13 [8] if((byte) i#1<(byte) 15) goto @1 [ i#1 ] -- zpby1_lt_coby1_then_la1
lda 2
cmp #15
//SEG12 [7] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- xby=xby_plus_1
inx
//SEG13 [8] if((byte) i#1<(byte) 15) goto @1 [ i#1 ] -- xby_lt_coby1_then_la1
cpx #15
bcc B1_from_B1
//SEG14 @END
BEND:
FINAL SYMBOL TABLE
(byte~) $1 zp byte:3 11.0
(byte~) $3 zp byte:4 22.0
(byte~) $4 zp byte:5 22.0
(byte~) $1 zp byte:2 11.0
(byte~) $3 reg byte a 22.0
(byte~) $4 reg byte a 22.0
(label) @1
(label) @BEGIN
(label) @END
(byte[15]) fibs
(byte) i
(byte) i#1 zp byte:2 16.5
(byte) i#2 zp byte:2 11.0
(byte) i#1 reg byte x 16.5
(byte) i#2 reg byte x 11.0
zp byte:2 [ i#2 i#1 ]
zp byte:3 [ $1 $4 ]
zp byte:4 [ $3 ]
reg byte x [ i#2 i#1 ]
zp byte:2 [ $1 ]
reg byte a [ $3 ]
reg byte a [ $4 ]
FINAL CODE
//SEG0 @BEGIN
@ -629,36 +898,27 @@ BBEGIN:
sta 4353
//SEG3 [2] phi from @BEGIN to @1
B1_from_BBEGIN:
//SEG4 [2] phi (byte) i#2 = (byte) 0 -- zpby1=coby1
lda #0
sta 2
//SEG4 [2] phi (byte) i#2 = (byte) 0 -- xby=coby1
ldx #0
//SEG5 [2] phi from @1 to @1
B1_from_B1:
//SEG6 [2] phi (byte) i#2 = (byte) i#1 -- register_copy
//SEG7 @1
B1:
//SEG8 [3] (byte~) $1 ← (word) 4352 *idx (byte) i#2 [ i#2 $1 ] -- zpby1=cowo1_staridx_zpby2
ldx 2
//SEG8 [3] (byte~) $1 ← (word) 4352 *idx (byte) i#2 [ i#2 $1 ] -- zpby1=cowo1_staridx_xby
lda 4352,x
sta 3
//SEG9 [4] (byte~) $3 ← (word) 4353 *idx (byte) i#2 [ i#2 $1 $3 ] -- zpby1=cowo1_staridx_zpby2
ldx 2
sta 2
//SEG9 [4] (byte~) $3 ← (word) 4353 *idx (byte) i#2 [ i#2 $1 $3 ] -- aby=cowo1_staridx_xby
lda 4353,x
sta 4
//SEG10 [5] (byte~) $4 ← (byte~) $1 + (byte~) $3 [ i#2 $4 ] -- zpby1=zpby2_plus_zpby3
lda 3
//SEG10 [5] (byte~) $4 ← (byte~) $1 + (byte~) $3 [ i#2 $4 ] -- aby=zpby1_plus_aby
clc
adc 4
sta 5
//SEG11 [6] *((word) 4354 + (byte) i#2) ← (byte~) $4 [ i#2 ] -- cowo1_staridx_zpby1=zpby2
lda 5
ldx 2
adc 2
//SEG11 [6] *((word) 4354 + (byte) i#2) ← (byte~) $4 [ i#2 ] -- cowo1_staridx_xby=aby
sta 4354,x
//SEG12 [7] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- zpby1=zpby1_plus_1
inc 2
//SEG13 [8] if((byte) i#1<(byte) 15) goto @1 [ i#1 ] -- zpby1_lt_coby1_then_la1
lda 2
cmp #15
//SEG12 [7] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- xby=xby_plus_1
inx
//SEG13 [8] if((byte) i#1<(byte) 15) goto @1 [ i#1 ] -- xby_lt_coby1_then_la1
cpx #15
bcc B1_from_B1
//SEG14 @END
BEND:

View File

@ -1,14 +1,15 @@
(byte~) $1 zp byte:3 11.0
(byte~) $3 zp byte:4 22.0
(byte~) $4 zp byte:5 22.0
(byte~) $1 zp byte:2 11.0
(byte~) $3 reg byte a 22.0
(byte~) $4 reg byte a 22.0
(label) @1
(label) @BEGIN
(label) @END
(byte[15]) fibs
(byte) i
(byte) i#1 zp byte:2 16.5
(byte) i#2 zp byte:2 11.0
(byte) i#1 reg byte x 16.5
(byte) i#2 reg byte x 11.0
zp byte:2 [ i#2 i#1 ]
zp byte:3 [ $1 $4 ]
zp byte:4 [ $3 ]
reg byte x [ i#2 i#1 ]
zp byte:2 [ $1 ]
reg byte a [ $3 ]
reg byte a [ $4 ]

View File

@ -4,29 +4,23 @@ BEND:
main:
jsr prepare
main__B3_from_main:
lda #25
sta 2
ldx #25
jmp main__B3
main__B3_from_B11:
lda #25
sta 2
ldx #25
main__B3_from_B3:
main__B3_from_B6:
main__B3:
lda 53266
sta 14
lda 14
cmp #254
bne main__B3_from_B3
main__B4:
lda 53266
sta 15
lda 15
cmp #255
bne main__B4
main__B6:
dec 2
lda 2
dex
cpx #0
bne main__B3_from_B6
main__B7:
jsr flip
@ -39,105 +33,85 @@ main__Breturn:
plot:
plot__B1_from_plot:
lda #16
sta 5
sta 4
lda #<1236
sta 3
sta 2
lda #>1236
sta 3+1
lda #0
sta 6
sta 2+1
ldx #0
plot__B1_from_B3:
plot__B1:
plot__B2_from_B1:
lda #0
sta 7
ldy #0
plot__B2_from_B2:
plot__B2:
ldx 6
lda 4096,x
sta 16
lda 16
ldy 7
sta (3),y
inc 6
inc 7
lda 7
cmp #16
sta (2),y
inx
iny
cpy #16
bcc plot__B2_from_B2
plot__B3:
lda 3
lda 2
clc
adc #40
sta 3
sta 2
bcc !+
inc 3+1
inc 2+1
!:
dec 5
lda 5
dec 4
lda 4
bne plot__B1_from_B3
plot__Breturn:
rts
flip:
flip__B1_from_flip:
lda #16
sta 8
lda #15
sta 10
lda #0
sta 9
sta 4
ldy #15
ldx #0
flip__B1_from_B4:
flip__B1:
flip__B2_from_B1:
lda #16
sta 11
sta 5
flip__B2_from_B2:
flip__B2:
ldx 9
lda 4096,x
sta 17
lda 17
ldx 10
sta 4352,x
inc 9
lda 10
sta 4352,y
inx
tya
clc
adc #16
sta 10
dec 11
lda 11
tay
dec 5
lda 5
bne flip__B2_from_B2
flip__B4:
dec 10
dec 8
lda 8
dey
dec 4
lda 4
bne flip__B1_from_B4
flip__B3_from_B4:
lda #0
sta 12
ldx #0
flip__B3_from_B3:
flip__B3:
ldx 12
lda 4352,x
sta 18
lda 18
ldx 12
sta 4096,x
inc 12
lda 12
inx
cpx #0
bne flip__B3_from_B3
flip__Breturn:
rts
prepare:
prepare__B1_from_prepare:
lda #0
sta 13
ldx #0
prepare__B1_from_B1:
prepare__B1:
ldx 13
txa
sta 4096,x
inc 13
lda 13
inx
cpx #0
bne prepare__B1_from_B1
prepare__Breturn:
rts

File diff suppressed because it is too large Load Diff

View File

@ -5,34 +5,34 @@
(byte[256]) buffer1
(byte[256]) buffer2
(void()) flip()
(byte~) flip::$0 zp byte:17 2002.0
(byte~) flip::$4 zp byte:18 202.0
(byte~) flip::$0 reg byte a 2002.0
(byte~) flip::$4 reg byte a 202.0
(label) flip::@1
(label) flip::@2
(label) flip::@3
(label) flip::@4
(label) flip::@return
(byte) flip::c
(byte) flip::c#1 zp byte:11 1501.5
(byte) flip::c#2 zp byte:11 400.4
(byte) flip::c#1 zp byte:5 1501.5
(byte) flip::c#2 zp byte:5 400.4
(byte) flip::dstIdx
(byte) flip::dstIdx#1 zp byte:10 701.0
(byte) flip::dstIdx#2 zp byte:10 67.33333333333333
(byte) flip::dstIdx#3 zp byte:10 776.0
(byte) flip::dstIdx#5 zp byte:10 202.0
(byte) flip::dstIdx#1 reg byte y 701.0
(byte) flip::dstIdx#2 reg byte y 67.33333333333333
(byte) flip::dstIdx#3 reg byte y 776.0
(byte) flip::dstIdx#5 reg byte y 202.0
(byte) flip::i
(byte) flip::i#1 zp byte:12 151.5
(byte) flip::i#2 zp byte:12 134.66666666666666
(byte) flip::i#1 reg byte x 151.5
(byte) flip::i#2 reg byte x 134.66666666666666
(byte) flip::r
(byte) flip::r#1 zp byte:8 151.5
(byte) flip::r#2 zp byte:8 22.444444444444443
(byte) flip::r#1 zp byte:4 151.5
(byte) flip::r#2 zp byte:4 22.444444444444443
(byte) flip::srcIdx
(byte) flip::srcIdx#1 zp byte:9 300.42857142857144
(byte) flip::srcIdx#2 zp byte:9 1034.6666666666667
(byte) flip::srcIdx#3 zp byte:9 202.0
(byte) flip::srcIdx#1 reg byte x 300.42857142857144
(byte) flip::srcIdx#2 reg byte x 1034.6666666666667
(byte) flip::srcIdx#3 reg byte x 202.0
(void()) main()
(byte~) main::$1 zp byte:14 2002.0
(byte~) main::$3 zp byte:15 2002.0
(byte~) main::$1 reg byte a 2002.0
(byte~) main::$3 reg byte a 2002.0
(label) main::@10
(label) main::@11
(label) main::@3
@ -41,37 +41,46 @@
(label) main::@7
(label) main::@return
(byte) main::c
(byte) main::c#1 zp byte:2 151.5
(byte) main::c#2 zp byte:2 40.4
(byte) main::c#1 reg byte x 151.5
(byte) main::c#2 reg byte x 40.4
(void()) plot()
(byte~) plot::$3 zp byte:16 2002.0
(byte~) plot::$3 reg byte a 2002.0
(label) plot::@1
(label) plot::@2
(label) plot::@3
(label) plot::@return
(byte) plot::i
(byte) plot::i#1 zp byte:6 350.5
(byte) plot::i#2 zp byte:6 1034.6666666666667
(byte) plot::i#3 zp byte:6 202.0
(byte) plot::i#1 reg byte x 350.5
(byte) plot::i#2 reg byte x 1034.6666666666667
(byte) plot::i#3 reg byte x 202.0
(byte*) plot::line
(byte*) plot::line#1 zp ptr byte:3 67.33333333333333
(byte*) plot::line#2 zp ptr byte:3 171.85714285714283
(byte*) plot::line#1 zp ptr byte:2 67.33333333333333
(byte*) plot::line#2 zp ptr byte:2 171.85714285714283
(byte) plot::x
(byte) plot::x#1 zp byte:7 1501.5
(byte) plot::x#2 zp byte:7 750.75
(byte) plot::x#1 reg byte y 1501.5
(byte) plot::x#2 reg byte y 750.75
(byte) plot::y
(byte) plot::y#1 zp byte:5 151.5
(byte) plot::y#2 zp byte:5 25.25
(byte) plot::y#1 zp byte:4 151.5
(byte) plot::y#2 zp byte:4 25.25
(void()) prepare()
(label) prepare::@1
(label) prepare::@return
(byte) prepare::i
(byte) prepare::i#1 zp byte:13 16.5
(byte) prepare::i#2 zp byte:13 22.0
(byte) prepare::i#1 reg byte x 16.5
(byte) prepare::i#2 reg byte x 22.0
zp byte:2 [ main::c#2 main::c#1 plot::y#2 plot::y#1 flip::r#2 flip::r#1 flip::i#2 flip::i#1 prepare::i#2 prepare::i#1 ]
zp ptr byte:3 [ plot::line#2 plot::line#1 ]
zp byte:6 [ plot::i#2 plot::i#3 plot::i#1 flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 main::$1 main::$3 flip::$4 ]
zp byte:7 [ plot::x#2 plot::x#1 flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ]
zp byte:11 [ flip::c#2 flip::c#1 plot::$3 ]
zp byte:17 [ flip::$0 ]
reg byte x [ main::c#2 main::c#1 ]
zp ptr byte:2 [ plot::line#2 plot::line#1 ]
zp byte:4 [ plot::y#2 plot::y#1 flip::r#2 flip::r#1 ]
reg byte x [ plot::i#2 plot::i#3 plot::i#1 ]
reg byte y [ plot::x#2 plot::x#1 ]
reg byte x [ flip::srcIdx#2 flip::srcIdx#3 flip::srcIdx#1 ]
reg byte y [ flip::dstIdx#3 flip::dstIdx#5 flip::dstIdx#2 flip::dstIdx#1 ]
zp byte:5 [ flip::c#2 flip::c#1 ]
reg byte x [ flip::i#2 flip::i#1 ]
reg byte x [ prepare::i#2 prepare::i#1 ]
reg byte a [ main::$1 ]
reg byte a [ main::$3 ]
reg byte a [ plot::$3 ]
reg byte a [ flip::$0 ]
reg byte a [ flip::$4 ]

View File

@ -1,26 +1,22 @@
BBEGIN:
B1_from_BBEGIN:
lda #0
sta 3
lda #10
sta 2
ldx #10
B1_from_B3:
B1:
lda 2
cmp #5
cpx #5
beq !+
bcs B2
!:
B3_from_B1:
B3:
dec 2
lda 2
dex
cpx #0
bne B1_from_B3
BEND:
B2:
lda 3
stx 255
clc
adc 2
sta 3
adc 255
B3_from_B2:
jmp B3

View File

@ -429,22 +429,26 @@ B3_from_B2:
//SEG18 [2] phi (byte) s#4 = (byte) s#1 -- register_copy
jmp B3
Uplifting max weight 49.5 live range equivalence class zp byte:3 [ s#2 s#4 s#1 ]
Uplift to reg byte a resulted in clobber.
Uplift to reg byte x succesfull.
Uplift to reg byte y succesfull.
REGISTER UPLIFTING
(byte) i
(byte) i#1 zp byte:2 16.5
(byte) i#2 zp byte:2 11.0
(byte) s
(byte) s#1 zp byte:3 22.0
(byte) s#2 zp byte:3 16.5
(byte) s#4 zp byte:3 11.0
zp byte:2 [ i#2 i#1 ]
zp byte:3 [ s#2 s#4 s#1 ]
REGISTER UPLIFT SCOPES
Uplift Scope [] 49.5: zp byte:3 [ s#2 s#4 s#1 ] 27.5: zp byte:2 [ i#2 i#1 ]
Uplift attempt [] 44 allocation: zp byte:3 [ s#2 s#4 s#1 ] zp byte:2 [ i#2 i#1 ]
Uplift attempt [] clobber allocation: reg byte a [ s#2 s#4 s#1 ] zp byte:2 [ i#2 i#1 ]
Uplift attempt [] 40 allocation: reg byte x [ s#2 s#4 s#1 ] zp byte:2 [ i#2 i#1 ]
Uplift attempt [] 40 allocation: reg byte y [ s#2 s#4 s#1 ] zp byte:2 [ i#2 i#1 ]
Uplift attempt [] clobber allocation: zp byte:3 [ s#2 s#4 s#1 ] reg byte a [ i#2 i#1 ]
Uplift attempt [] clobber allocation: reg byte a [ s#2 s#4 s#1 ] reg byte a [ i#2 i#1 ]
Uplift attempt [] clobber allocation: reg byte x [ s#2 s#4 s#1 ] reg byte a [ i#2 i#1 ]
Uplift attempt [] clobber allocation: reg byte y [ s#2 s#4 s#1 ] reg byte a [ i#2 i#1 ]
Uplift attempt [] 38 allocation: zp byte:3 [ s#2 s#4 s#1 ] reg byte x [ i#2 i#1 ]
Uplift attempt [] 35 allocation: reg byte a [ s#2 s#4 s#1 ] reg byte x [ i#2 i#1 ]
Uplift attempt [] clobber allocation: reg byte x [ s#2 s#4 s#1 ] reg byte x [ i#2 i#1 ]
Uplift attempt [] 37 allocation: reg byte y [ s#2 s#4 s#1 ] reg byte x [ i#2 i#1 ]
Uplift attempt [] 38 allocation: zp byte:3 [ s#2 s#4 s#1 ] reg byte y [ i#2 i#1 ]
Uplift attempt [] 35 allocation: reg byte a [ s#2 s#4 s#1 ] reg byte y [ i#2 i#1 ]
Uplift attempt [] 37 allocation: reg byte x [ s#2 s#4 s#1 ] reg byte y [ i#2 i#1 ]
Uplift attempt [] clobber allocation: reg byte y [ s#2 s#4 s#1 ] reg byte y [ i#2 i#1 ]
Uplifting [] best 35 combination reg byte a [ s#2 s#4 s#1 ] reg byte x [ i#2 i#1 ]
Removing instruction jmp B1
Removing instruction jmp B3
Removing instruction jmp BEND
@ -454,12 +458,10 @@ ASSEMBLER
BBEGIN:
//SEG1 [0] phi from @BEGIN to @1
B1_from_BBEGIN:
//SEG2 [0] phi (byte) s#2 = (byte) 0 -- zpby1=coby1
//SEG2 [0] phi (byte) s#2 = (byte) 0 -- aby=coby1
lda #0
sta 3
//SEG3 [0] phi (byte) i#2 = (byte) 10 -- zpby1=coby1
lda #10
sta 2
//SEG3 [0] phi (byte) i#2 = (byte) 10 -- xby=coby1
ldx #10
jmp B1
//SEG4 [0] phi from @3 to @1
B1_from_B3:
@ -467,9 +469,8 @@ B1_from_B3:
//SEG6 [0] phi (byte) i#2 = (byte) i#1 -- register_copy
//SEG7 @1
B1:
//SEG8 [1] if((byte) i#2>(byte) 5) goto @2 [ i#2 s#2 ] -- zpby1_gt_coby1_then_la1
lda 2
cmp #5
//SEG8 [1] if((byte) i#2>(byte) 5) goto @2 [ i#2 s#2 ] -- xby_gt_coby1_then_la1
cpx #5
beq !+
bcs B2
!:
@ -478,20 +479,19 @@ B3_from_B1:
//SEG10 [2] phi (byte) s#4 = (byte) s#2 -- register_copy
//SEG11 @3
B3:
//SEG12 [3] (byte) i#1 ← -- (byte) i#2 [ i#1 s#4 ] -- zpby1=_dec_zpby1
dec 2
//SEG13 [4] if((byte) i#1>(byte) 0) goto @1 [ i#1 s#4 ] -- zpby1_gt_0_then_la1
lda 2
//SEG12 [3] (byte) i#1 ← -- (byte) i#2 [ i#1 s#4 ] -- xby=_dec_xby
dex
//SEG13 [4] if((byte) i#1>(byte) 0) goto @1 [ i#1 s#4 ] -- xby_gt_0_then_la1
cpx #0
bne B1_from_B3
//SEG14 @END
BEND:
//SEG15 @2
B2:
//SEG16 [5] (byte) s#1 ← (byte) s#2 + (byte) i#2 [ i#2 s#1 ] -- zpby1=zpby1_plus_zpby2
lda 3
//SEG16 [5] (byte) s#1 ← (byte) s#2 + (byte) i#2 [ i#2 s#1 ] -- aby=aby_plus_xby
stx 255
clc
adc 2
sta 3
adc 255
//SEG17 [2] phi from @2 to @3
B3_from_B2:
//SEG18 [2] phi (byte) s#4 = (byte) s#1 -- register_copy
@ -504,21 +504,18 @@ ASSEMBLER
BBEGIN:
//SEG1 [0] phi from @BEGIN to @1
B1_from_BBEGIN:
//SEG2 [0] phi (byte) s#2 = (byte) 0 -- zpby1=coby1
//SEG2 [0] phi (byte) s#2 = (byte) 0 -- aby=coby1
lda #0
sta 3
//SEG3 [0] phi (byte) i#2 = (byte) 10 -- zpby1=coby1
lda #10
sta 2
//SEG3 [0] phi (byte) i#2 = (byte) 10 -- xby=coby1
ldx #10
//SEG4 [0] phi from @3 to @1
B1_from_B3:
//SEG5 [0] phi (byte) s#2 = (byte) s#4 -- register_copy
//SEG6 [0] phi (byte) i#2 = (byte) i#1 -- register_copy
//SEG7 @1
B1:
//SEG8 [1] if((byte) i#2>(byte) 5) goto @2 [ i#2 s#2 ] -- zpby1_gt_coby1_then_la1
lda 2
cmp #5
//SEG8 [1] if((byte) i#2>(byte) 5) goto @2 [ i#2 s#2 ] -- xby_gt_coby1_then_la1
cpx #5
beq !+
bcs B2
!:
@ -527,20 +524,19 @@ B3_from_B1:
//SEG10 [2] phi (byte) s#4 = (byte) s#2 -- register_copy
//SEG11 @3
B3:
//SEG12 [3] (byte) i#1 ← -- (byte) i#2 [ i#1 s#4 ] -- zpby1=_dec_zpby1
dec 2
//SEG13 [4] if((byte) i#1>(byte) 0) goto @1 [ i#1 s#4 ] -- zpby1_gt_0_then_la1
lda 2
//SEG12 [3] (byte) i#1 ← -- (byte) i#2 [ i#1 s#4 ] -- xby=_dec_xby
dex
//SEG13 [4] if((byte) i#1>(byte) 0) goto @1 [ i#1 s#4 ] -- xby_gt_0_then_la1
cpx #0
bne B1_from_B3
//SEG14 @END
BEND:
//SEG15 @2
B2:
//SEG16 [5] (byte) s#1 ← (byte) s#2 + (byte) i#2 [ i#2 s#1 ] -- zpby1=zpby1_plus_zpby2
lda 3
//SEG16 [5] (byte) s#1 ← (byte) s#2 + (byte) i#2 [ i#2 s#1 ] -- aby=aby_plus_xby
stx 255
clc
adc 2
sta 3
adc 255
//SEG17 [2] phi from @2 to @3
B3_from_B2:
//SEG18 [2] phi (byte) s#4 = (byte) s#1 -- register_copy
@ -553,36 +549,33 @@ FINAL SYMBOL TABLE
(label) @BEGIN
(label) @END
(byte) i
(byte) i#1 zp byte:2 16.5
(byte) i#2 zp byte:2 11.0
(byte) i#1 reg byte x 16.5
(byte) i#2 reg byte x 11.0
(byte) s
(byte) s#1 zp byte:3 22.0
(byte) s#2 zp byte:3 16.5
(byte) s#4 zp byte:3 11.0
(byte) s#1 reg byte a 22.0
(byte) s#2 reg byte a 16.5
(byte) s#4 reg byte a 11.0
zp byte:2 [ i#2 i#1 ]
zp byte:3 [ s#2 s#4 s#1 ]
reg byte x [ i#2 i#1 ]
reg byte a [ s#2 s#4 s#1 ]
FINAL CODE
//SEG0 @BEGIN
BBEGIN:
//SEG1 [0] phi from @BEGIN to @1
B1_from_BBEGIN:
//SEG2 [0] phi (byte) s#2 = (byte) 0 -- zpby1=coby1
//SEG2 [0] phi (byte) s#2 = (byte) 0 -- aby=coby1
lda #0
sta 3
//SEG3 [0] phi (byte) i#2 = (byte) 10 -- zpby1=coby1
lda #10
sta 2
//SEG3 [0] phi (byte) i#2 = (byte) 10 -- xby=coby1
ldx #10
//SEG4 [0] phi from @3 to @1
B1_from_B3:
//SEG5 [0] phi (byte) s#2 = (byte) s#4 -- register_copy
//SEG6 [0] phi (byte) i#2 = (byte) i#1 -- register_copy
//SEG7 @1
B1:
//SEG8 [1] if((byte) i#2>(byte) 5) goto @2 [ i#2 s#2 ] -- zpby1_gt_coby1_then_la1
lda 2
cmp #5
//SEG8 [1] if((byte) i#2>(byte) 5) goto @2 [ i#2 s#2 ] -- xby_gt_coby1_then_la1
cpx #5
beq !+
bcs B2
!:
@ -591,20 +584,19 @@ B3_from_B1:
//SEG10 [2] phi (byte) s#4 = (byte) s#2 -- register_copy
//SEG11 @3
B3:
//SEG12 [3] (byte) i#1 ← -- (byte) i#2 [ i#1 s#4 ] -- zpby1=_dec_zpby1
dec 2
//SEG13 [4] if((byte) i#1>(byte) 0) goto @1 [ i#1 s#4 ] -- zpby1_gt_0_then_la1
lda 2
//SEG12 [3] (byte) i#1 ← -- (byte) i#2 [ i#1 s#4 ] -- xby=_dec_xby
dex
//SEG13 [4] if((byte) i#1>(byte) 0) goto @1 [ i#1 s#4 ] -- xby_gt_0_then_la1
cpx #0
bne B1_from_B3
//SEG14 @END
BEND:
//SEG15 @2
B2:
//SEG16 [5] (byte) s#1 ← (byte) s#2 + (byte) i#2 [ i#2 s#1 ] -- zpby1=zpby1_plus_zpby2
lda 3
//SEG16 [5] (byte) s#1 ← (byte) s#2 + (byte) i#2 [ i#2 s#1 ] -- aby=aby_plus_xby
stx 255
clc
adc 2
sta 3
adc 255
//SEG17 [2] phi from @2 to @3
B3_from_B2:
//SEG18 [2] phi (byte) s#4 = (byte) s#1 -- register_copy

View File

@ -4,12 +4,12 @@
(label) @BEGIN
(label) @END
(byte) i
(byte) i#1 zp byte:2 16.5
(byte) i#2 zp byte:2 11.0
(byte) i#1 reg byte x 16.5
(byte) i#2 reg byte x 11.0
(byte) s
(byte) s#1 zp byte:3 22.0
(byte) s#2 zp byte:3 16.5
(byte) s#4 zp byte:3 11.0
(byte) s#1 reg byte a 22.0
(byte) s#2 reg byte a 16.5
(byte) s#4 reg byte a 11.0
zp byte:2 [ i#2 i#1 ]
zp byte:3 [ s#2 s#4 s#1 ]
reg byte x [ i#2 i#1 ]
reg byte a [ s#2 s#4 s#1 ]

View File

@ -3,27 +3,24 @@ BBEGIN:
BEND:
main:
main__B1_from_main:
lda #100
sta 2
ldx #100
main__B1_from_B3:
main__B1:
jsr nest
main__B3:
dec 2
lda 2
dex
cpx #0
bne main__B1_from_B3
main__Breturn:
rts
nest:
nest__B1_from_nest:
lda #100
sta 3
ldy #100
nest__B1_from_B1:
nest__B1:
lda 3
sta 1024
dec 3
lda 3
sty 1024
dey
cpy #0
bne nest__B1_from_B1
nest__Breturn:
rts

View File

@ -793,24 +793,23 @@ nest__Breturn:
//SEG25 [10] return [ main::i#2 ]
rts
Uplifting max weight 303.0 live range equivalence class zp byte:3 [ nest::j#2 nest::j#1 ]
Uplift to reg byte a succesfull.
Uplift to reg byte x succesfull.
Uplift to reg byte y succesfull.
REGISTER UPLIFTING
(byte*) SCREEN
(void()) main()
(byte) main::i
(byte) main::i#1 zp byte:2 16.5
(byte) main::i#2 zp byte:2 3.142857142857143
(void()) nest()
(byte) nest::j
(byte) nest::j#1 zp byte:3 151.5
(byte) nest::j#2 zp byte:3 151.5
zp byte:2 [ main::i#2 main::i#1 ]
zp byte:3 [ nest::j#2 nest::j#1 ]
REGISTER UPLIFT SCOPES
Uplift Scope [main] 19.64: zp byte:2 [ main::i#2 main::i#1 ]
Uplift Scope [nest] 303: zp byte:3 [ nest::j#2 nest::j#1 ]
Uplift Scope []
Uplift attempt [main] 57 allocation: zp byte:2 [ main::i#2 main::i#1 ]
Uplift attempt [main] clobber allocation: reg byte a [ main::i#2 main::i#1 ]
Uplift attempt [main] 54 allocation: reg byte x [ main::i#2 main::i#1 ]
Uplift attempt [main] 54 allocation: reg byte y [ main::i#2 main::i#1 ]
Uplifting [main] best 54 combination reg byte x [ main::i#2 main::i#1 ]
Uplift attempt [nest] 54 allocation: zp byte:3 [ nest::j#2 nest::j#1 ]
Uplift attempt [nest] 51 allocation: reg byte a [ nest::j#2 nest::j#1 ]
Uplift attempt [nest] clobber allocation: reg byte x [ nest::j#2 nest::j#1 ]
Uplift attempt [nest] 49 allocation: reg byte y [ nest::j#2 nest::j#1 ]
Uplifting [nest] best 49 combination reg byte y [ nest::j#2 nest::j#1 ]
Uplift attempt [] 49 allocation:
Uplifting [] best 49 combination
Removing instruction jmp BEND
Removing instruction jmp main__B1
Removing instruction jmp main__B3
@ -829,9 +828,8 @@ BEND:
main:
//SEG4 [1] phi from main to main::@1
main__B1_from_main:
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 2
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- xby=coby1
ldx #100
jmp main__B1
//SEG6 [1] phi from main::@3 to main::@1
main__B1_from_B3:
@ -842,10 +840,10 @@ main__B1:
jsr nest
//SEG10 main::@3
main__B3:
//SEG11 [3] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- zpby1=_dec_zpby1
dec 2
//SEG12 [4] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- zpby1_gt_0_then_la1
lda 2
//SEG11 [3] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- xby=_dec_xby
dex
//SEG12 [4] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- xby_gt_0_then_la1
cpx #0
bne main__B1_from_B3
//SEG13 main::@return
main__Breturn:
@ -855,22 +853,20 @@ main__Breturn:
nest:
//SEG16 [6] phi from nest to nest::@1
nest__B1_from_nest:
//SEG17 [6] phi (byte) nest::j#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 3
//SEG17 [6] phi (byte) nest::j#2 = (byte) 100 -- yby=coby1
ldy #100
jmp nest__B1
//SEG18 [6] phi from nest::@1 to nest::@1
nest__B1_from_B1:
//SEG19 [6] phi (byte) nest::j#2 = (byte) nest::j#1 -- register_copy
//SEG20 nest::@1
nest__B1:
//SEG21 [7] *((word) 1024) ← (byte) nest::j#2 [ main::i#2 nest::j#2 ] -- _star_cowo1=zpby1
lda 3
sta 1024
//SEG22 [8] (byte) nest::j#1 ← -- (byte) nest::j#2 [ main::i#2 nest::j#1 ] -- zpby1=_dec_zpby1
dec 3
//SEG23 [9] if((byte) nest::j#1>(byte) 0) goto nest::@1 [ main::i#2 nest::j#1 ] -- zpby1_gt_0_then_la1
lda 3
//SEG21 [7] *((word) 1024) ← (byte) nest::j#2 [ main::i#2 nest::j#2 ] -- _star_cowo1=yby
sty 1024
//SEG22 [8] (byte) nest::j#1 ← -- (byte) nest::j#2 [ main::i#2 nest::j#1 ] -- yby=_dec_yby
dey
//SEG23 [9] if((byte) nest::j#1>(byte) 0) goto nest::@1 [ main::i#2 nest::j#1 ] -- yby_gt_0_then_la1
cpy #0
bne nest__B1_from_B1
//SEG24 nest::@return
nest__Breturn:
@ -891,9 +887,8 @@ BEND:
main:
//SEG4 [1] phi from main to main::@1
main__B1_from_main:
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 2
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- xby=coby1
ldx #100
//SEG6 [1] phi from main::@3 to main::@1
main__B1_from_B3:
//SEG7 [1] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy
@ -903,10 +898,10 @@ main__B1:
jsr nest
//SEG10 main::@3
main__B3:
//SEG11 [3] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- zpby1=_dec_zpby1
dec 2
//SEG12 [4] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- zpby1_gt_0_then_la1
lda 2
//SEG11 [3] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- xby=_dec_xby
dex
//SEG12 [4] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- xby_gt_0_then_la1
cpx #0
bne main__B1_from_B3
//SEG13 main::@return
main__Breturn:
@ -916,21 +911,19 @@ main__Breturn:
nest:
//SEG16 [6] phi from nest to nest::@1
nest__B1_from_nest:
//SEG17 [6] phi (byte) nest::j#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 3
//SEG17 [6] phi (byte) nest::j#2 = (byte) 100 -- yby=coby1
ldy #100
//SEG18 [6] phi from nest::@1 to nest::@1
nest__B1_from_B1:
//SEG19 [6] phi (byte) nest::j#2 = (byte) nest::j#1 -- register_copy
//SEG20 nest::@1
nest__B1:
//SEG21 [7] *((word) 1024) ← (byte) nest::j#2 [ main::i#2 nest::j#2 ] -- _star_cowo1=zpby1
lda 3
sta 1024
//SEG22 [8] (byte) nest::j#1 ← -- (byte) nest::j#2 [ main::i#2 nest::j#1 ] -- zpby1=_dec_zpby1
dec 3
//SEG23 [9] if((byte) nest::j#1>(byte) 0) goto nest::@1 [ main::i#2 nest::j#1 ] -- zpby1_gt_0_then_la1
lda 3
//SEG21 [7] *((word) 1024) ← (byte) nest::j#2 [ main::i#2 nest::j#2 ] -- _star_cowo1=yby
sty 1024
//SEG22 [8] (byte) nest::j#1 ← -- (byte) nest::j#2 [ main::i#2 nest::j#1 ] -- yby=_dec_yby
dey
//SEG23 [9] if((byte) nest::j#1>(byte) 0) goto nest::@1 [ main::i#2 nest::j#1 ] -- yby_gt_0_then_la1
cpy #0
bne nest__B1_from_B1
//SEG24 nest::@return
nest__Breturn:
@ -946,17 +939,17 @@ FINAL SYMBOL TABLE
(label) main::@3
(label) main::@return
(byte) main::i
(byte) main::i#1 zp byte:2 16.5
(byte) main::i#2 zp byte:2 3.142857142857143
(byte) main::i#1 reg byte x 16.5
(byte) main::i#2 reg byte x 3.142857142857143
(void()) nest()
(label) nest::@1
(label) nest::@return
(byte) nest::j
(byte) nest::j#1 zp byte:3 151.5
(byte) nest::j#2 zp byte:3 151.5
(byte) nest::j#1 reg byte y 151.5
(byte) nest::j#2 reg byte y 151.5
zp byte:2 [ main::i#2 main::i#1 ]
zp byte:3 [ nest::j#2 nest::j#1 ]
reg byte x [ main::i#2 main::i#1 ]
reg byte y [ nest::j#2 nest::j#1 ]
FINAL CODE
//SEG0 @BEGIN
@ -969,9 +962,8 @@ BEND:
main:
//SEG4 [1] phi from main to main::@1
main__B1_from_main:
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 2
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- xby=coby1
ldx #100
//SEG6 [1] phi from main::@3 to main::@1
main__B1_from_B3:
//SEG7 [1] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy
@ -981,10 +973,10 @@ main__B1:
jsr nest
//SEG10 main::@3
main__B3:
//SEG11 [3] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- zpby1=_dec_zpby1
dec 2
//SEG12 [4] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- zpby1_gt_0_then_la1
lda 2
//SEG11 [3] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- xby=_dec_xby
dex
//SEG12 [4] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- xby_gt_0_then_la1
cpx #0
bne main__B1_from_B3
//SEG13 main::@return
main__Breturn:
@ -994,21 +986,19 @@ main__Breturn:
nest:
//SEG16 [6] phi from nest to nest::@1
nest__B1_from_nest:
//SEG17 [6] phi (byte) nest::j#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 3
//SEG17 [6] phi (byte) nest::j#2 = (byte) 100 -- yby=coby1
ldy #100
//SEG18 [6] phi from nest::@1 to nest::@1
nest__B1_from_B1:
//SEG19 [6] phi (byte) nest::j#2 = (byte) nest::j#1 -- register_copy
//SEG20 nest::@1
nest__B1:
//SEG21 [7] *((word) 1024) ← (byte) nest::j#2 [ main::i#2 nest::j#2 ] -- _star_cowo1=zpby1
lda 3
sta 1024
//SEG22 [8] (byte) nest::j#1 ← -- (byte) nest::j#2 [ main::i#2 nest::j#1 ] -- zpby1=_dec_zpby1
dec 3
//SEG23 [9] if((byte) nest::j#1>(byte) 0) goto nest::@1 [ main::i#2 nest::j#1 ] -- zpby1_gt_0_then_la1
lda 3
//SEG21 [7] *((word) 1024) ← (byte) nest::j#2 [ main::i#2 nest::j#2 ] -- _star_cowo1=yby
sty 1024
//SEG22 [8] (byte) nest::j#1 ← -- (byte) nest::j#2 [ main::i#2 nest::j#1 ] -- yby=_dec_yby
dey
//SEG23 [9] if((byte) nest::j#1>(byte) 0) goto nest::@1 [ main::i#2 nest::j#1 ] -- yby_gt_0_then_la1
cpy #0
bne nest__B1_from_B1
//SEG24 nest::@return
nest__Breturn:

View File

@ -6,14 +6,14 @@
(label) main::@3
(label) main::@return
(byte) main::i
(byte) main::i#1 zp byte:2 16.5
(byte) main::i#2 zp byte:2 3.142857142857143
(byte) main::i#1 reg byte x 16.5
(byte) main::i#2 reg byte x 3.142857142857143
(void()) nest()
(label) nest::@1
(label) nest::@return
(byte) nest::j
(byte) nest::j#1 zp byte:3 151.5
(byte) nest::j#2 zp byte:3 151.5
(byte) nest::j#1 reg byte y 151.5
(byte) nest::j#2 reg byte y 151.5
zp byte:2 [ main::i#2 main::i#1 ]
zp byte:3 [ nest::j#2 nest::j#1 ]
reg byte x [ main::i#2 main::i#1 ]
reg byte y [ nest::j#2 nest::j#1 ]

View File

@ -3,67 +3,64 @@ BBEGIN:
BEND:
main:
main__B1_from_main:
lda #100
sta 2
ldx #100
main__B1_from_B3:
main__B1:
main__B2_from_B1:
lda #100
sta 3
ldy #100
main__B2_from_B5:
main__B2:
jsr nest1
main__B5:
dec 3
lda 3
dey
cpy #0
bne main__B2_from_B5
main__B3:
dec 2
lda 2
dex
cpx #0
bne main__B1_from_B3
main__Breturn:
rts
nest1:
nest1__B1_from_nest1:
lda #100
sta 4
sta 2
nest1__B1_from_B3:
nest1__B1:
nest1__B2_from_B1:
lda #100
sta 5
sta 3
nest1__B2_from_B5:
nest1__B2:
jsr nest2
nest1__B5:
dec 5
lda 5
dec 3
lda 3
bne nest1__B2_from_B5
nest1__B3:
dec 4
lda 4
dec 2
lda 2
bne nest1__B1_from_B3
nest1__Breturn:
rts
nest2:
nest2__B1_from_nest2:
lda #100
sta 6
sta 4
nest2__B1_from_B3:
nest2__B1:
nest2__B2_from_B1:
lda #100
sta 7
nest2__B2_from_B2:
nest2__B2:
lda 7
sta 1024
dec 7
lda 7
sec
sbc #1
cmp #0
bne nest2__B2_from_B2
nest2__B3:
dec 6
lda 6
dec 4
lda 4
bne nest2__B1_from_B3
nest2__Breturn:
rts

View File

@ -1989,41 +1989,68 @@ nest2__Breturn:
//SEG61 [24] return [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 ]
rts
Uplifting max weight 3000003.0 live range equivalence class zp byte:7 [ nest2::j#2 nest2::j#1 ]
Uplift to reg byte a succesfull.
Uplift to reg byte x succesfull.
Uplift to reg byte y succesfull.
REGISTER UPLIFTING
(byte*) SCREEN
(void()) main()
(byte) main::i
(byte) main::i#1 zp byte:2 16.5
(byte) main::i#2 zp byte:2 1.0476190476190477
(byte) main::j
(byte) main::j#1 zp byte:3 151.5
(byte) main::j#2 zp byte:3 11.222222222222221
(void()) nest1()
(byte) nest1::i
(byte) nest1::i#1 zp byte:4 1501.5
(byte) nest1::i#2 zp byte:4 154.0
(byte) nest1::j
(byte) nest1::j#1 zp byte:5 15001.5
(byte) nest1::j#2 zp byte:5 2000.2
(void()) nest2()
(byte) nest2::i
(byte) nest2::i#1 zp byte:6 150001.5
(byte) nest2::i#2 zp byte:6 40000.4
(byte) nest2::j
(byte) nest2::j#1 zp byte:7 1500001.5
(byte) nest2::j#2 zp byte:7 1500001.5
zp byte:2 [ main::i#2 main::i#1 ]
zp byte:3 [ main::j#2 main::j#1 ]
zp byte:4 [ nest1::i#2 nest1::i#1 ]
zp byte:5 [ nest1::j#2 nest1::j#1 ]
zp byte:6 [ nest2::i#2 nest2::i#1 ]
zp byte:7 [ nest2::j#2 nest2::j#1 ]
REGISTER UPLIFT SCOPES
Uplift Scope [main] 162.72: zp byte:3 [ main::j#2 main::j#1 ] 17.55: zp byte:2 [ main::i#2 main::i#1 ]
Uplift Scope [nest1] 17,001.7: zp byte:5 [ nest1::j#2 nest1::j#1 ] 1,655.5: zp byte:4 [ nest1::i#2 nest1::i#1 ]
Uplift Scope [nest2] 3,000,003: zp byte:7 [ nest2::j#2 nest2::j#1 ] 190,001.9: zp byte:6 [ nest2::i#2 nest2::i#1 ]
Uplift Scope []
Uplift attempt [main] 140 allocation: zp byte:3 [ main::j#2 main::j#1 ] zp byte:2 [ main::i#2 main::i#1 ]
Uplift attempt [main] clobber allocation: reg byte a [ main::j#2 main::j#1 ] zp byte:2 [ main::i#2 main::i#1 ]
Uplift attempt [main] 137 allocation: reg byte x [ main::j#2 main::j#1 ] zp byte:2 [ main::i#2 main::i#1 ]
Uplift attempt [main] 137 allocation: reg byte y [ main::j#2 main::j#1 ] zp byte:2 [ main::i#2 main::i#1 ]
Uplift attempt [main] clobber allocation: zp byte:3 [ main::j#2 main::j#1 ] reg byte a [ main::i#2 main::i#1 ]
Uplift attempt [main] clobber allocation: reg byte a [ main::j#2 main::j#1 ] reg byte a [ main::i#2 main::i#1 ]
Uplift attempt [main] clobber allocation: reg byte x [ main::j#2 main::j#1 ] reg byte a [ main::i#2 main::i#1 ]
Uplift attempt [main] clobber allocation: reg byte y [ main::j#2 main::j#1 ] reg byte a [ main::i#2 main::i#1 ]
Uplift attempt [main] 137 allocation: zp byte:3 [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ]
Uplift attempt [main] clobber allocation: reg byte a [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ]
Uplift attempt [main] clobber allocation: reg byte x [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ]
Uplift attempt [main] 134 allocation: reg byte y [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ]
Uplift attempt [main] 137 allocation: zp byte:3 [ main::j#2 main::j#1 ] reg byte y [ main::i#2 main::i#1 ]
Uplift attempt [main] clobber allocation: reg byte a [ main::j#2 main::j#1 ] reg byte y [ main::i#2 main::i#1 ]
Uplift attempt [main] 134 allocation: reg byte x [ main::j#2 main::j#1 ] reg byte y [ main::i#2 main::i#1 ]
Uplift attempt [main] clobber allocation: reg byte y [ main::j#2 main::j#1 ] reg byte y [ main::i#2 main::i#1 ]
Uplifting [main] best 134 combination reg byte y [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ]
Uplift attempt [nest1] 134 allocation: zp byte:5 [ nest1::j#2 nest1::j#1 ] zp byte:4 [ nest1::i#2 nest1::i#1 ]
Uplift attempt [nest1] clobber allocation: reg byte a [ nest1::j#2 nest1::j#1 ] zp byte:4 [ nest1::i#2 nest1::i#1 ]
Uplift attempt [nest1] clobber allocation: reg byte x [ nest1::j#2 nest1::j#1 ] zp byte:4 [ nest1::i#2 nest1::i#1 ]
Uplift attempt [nest1] clobber allocation: reg byte y [ nest1::j#2 nest1::j#1 ] zp byte:4 [ nest1::i#2 nest1::i#1 ]
Uplift attempt [nest1] clobber allocation: zp byte:5 [ nest1::j#2 nest1::j#1 ] reg byte a [ nest1::i#2 nest1::i#1 ]
Uplift attempt [nest1] clobber allocation: reg byte a [ nest1::j#2 nest1::j#1 ] reg byte a [ nest1::i#2 nest1::i#1 ]
Uplift attempt [nest1] clobber allocation: reg byte x [ nest1::j#2 nest1::j#1 ] reg byte a [ nest1::i#2 nest1::i#1 ]
Uplift attempt [nest1] clobber allocation: reg byte y [ nest1::j#2 nest1::j#1 ] reg byte a [ nest1::i#2 nest1::i#1 ]
Uplift attempt [nest1] clobber allocation: zp byte:5 [ nest1::j#2 nest1::j#1 ] reg byte x [ nest1::i#2 nest1::i#1 ]
Uplift attempt [nest1] clobber allocation: reg byte a [ nest1::j#2 nest1::j#1 ] reg byte x [ nest1::i#2 nest1::i#1 ]
Uplift attempt [nest1] clobber allocation: reg byte x [ nest1::j#2 nest1::j#1 ] reg byte x [ nest1::i#2 nest1::i#1 ]
Uplift attempt [nest1] clobber allocation: reg byte y [ nest1::j#2 nest1::j#1 ] reg byte x [ nest1::i#2 nest1::i#1 ]
Uplift attempt [nest1] clobber allocation: zp byte:5 [ nest1::j#2 nest1::j#1 ] reg byte y [ nest1::i#2 nest1::i#1 ]
Uplift attempt [nest1] clobber allocation: reg byte a [ nest1::j#2 nest1::j#1 ] reg byte y [ nest1::i#2 nest1::i#1 ]
Uplift attempt [nest1] clobber allocation: reg byte x [ nest1::j#2 nest1::j#1 ] reg byte y [ nest1::i#2 nest1::i#1 ]
Uplift attempt [nest1] clobber allocation: reg byte y [ nest1::j#2 nest1::j#1 ] reg byte y [ nest1::i#2 nest1::i#1 ]
Uplifting [nest1] best 134 combination zp byte:5 [ nest1::j#2 nest1::j#1 ] zp byte:4 [ nest1::i#2 nest1::i#1 ]
Uplift attempt [nest2] 134 allocation: zp byte:7 [ nest2::j#2 nest2::j#1 ] zp byte:6 [ nest2::i#2 nest2::i#1 ]
Uplift attempt [nest2] 131 allocation: reg byte a [ nest2::j#2 nest2::j#1 ] zp byte:6 [ nest2::i#2 nest2::i#1 ]
Uplift attempt [nest2] clobber allocation: reg byte x [ nest2::j#2 nest2::j#1 ] zp byte:6 [ nest2::i#2 nest2::i#1 ]
Uplift attempt [nest2] clobber allocation: reg byte y [ nest2::j#2 nest2::j#1 ] zp byte:6 [ nest2::i#2 nest2::i#1 ]
Uplift attempt [nest2] clobber allocation: zp byte:7 [ nest2::j#2 nest2::j#1 ] reg byte a [ nest2::i#2 nest2::i#1 ]
Uplift attempt [nest2] clobber allocation: reg byte a [ nest2::j#2 nest2::j#1 ] reg byte a [ nest2::i#2 nest2::i#1 ]
Uplift attempt [nest2] clobber allocation: reg byte x [ nest2::j#2 nest2::j#1 ] reg byte a [ nest2::i#2 nest2::i#1 ]
Uplift attempt [nest2] clobber allocation: reg byte y [ nest2::j#2 nest2::j#1 ] reg byte a [ nest2::i#2 nest2::i#1 ]
Uplift attempt [nest2] clobber allocation: zp byte:7 [ nest2::j#2 nest2::j#1 ] reg byte x [ nest2::i#2 nest2::i#1 ]
Uplift attempt [nest2] clobber allocation: reg byte a [ nest2::j#2 nest2::j#1 ] reg byte x [ nest2::i#2 nest2::i#1 ]
Uplift attempt [nest2] clobber allocation: reg byte x [ nest2::j#2 nest2::j#1 ] reg byte x [ nest2::i#2 nest2::i#1 ]
Uplift attempt [nest2] clobber allocation: reg byte y [ nest2::j#2 nest2::j#1 ] reg byte x [ nest2::i#2 nest2::i#1 ]
Uplift attempt [nest2] clobber allocation: zp byte:7 [ nest2::j#2 nest2::j#1 ] reg byte y [ nest2::i#2 nest2::i#1 ]
Uplift attempt [nest2] clobber allocation: reg byte a [ nest2::j#2 nest2::j#1 ] reg byte y [ nest2::i#2 nest2::i#1 ]
Uplift attempt [nest2] clobber allocation: reg byte x [ nest2::j#2 nest2::j#1 ] reg byte y [ nest2::i#2 nest2::i#1 ]
Uplift attempt [nest2] clobber allocation: reg byte y [ nest2::j#2 nest2::j#1 ] reg byte y [ nest2::i#2 nest2::i#1 ]
Uplifting [nest2] best 131 combination reg byte a [ nest2::j#2 nest2::j#1 ] zp byte:6 [ nest2::i#2 nest2::i#1 ]
Uplift attempt [] 131 allocation:
Uplifting [] best 131 combination
Re-allocated ZP register from zp byte:4 to zp byte:2
Re-allocated ZP register from zp byte:5 to zp byte:3
Re-allocated ZP register from zp byte:6 to zp byte:4
Removing instruction jmp BEND
Removing instruction jmp main__B1
Removing instruction jmp main__B2
@ -2051,9 +2078,8 @@ BEND:
main:
//SEG4 [1] phi from main to main::@1
main__B1_from_main:
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 2
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- xby=coby1
ldx #100
jmp main__B1
//SEG6 [1] phi from main::@3 to main::@1
main__B1_from_B3:
@ -2062,9 +2088,8 @@ main__B1_from_B3:
main__B1:
//SEG9 [2] phi from main::@1 to main::@2
main__B2_from_B1:
//SEG10 [2] phi (byte) main::j#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 3
//SEG10 [2] phi (byte) main::j#2 = (byte) 100 -- yby=coby1
ldy #100
jmp main__B2
//SEG11 [2] phi from main::@5 to main::@2
main__B2_from_B5:
@ -2075,17 +2100,17 @@ main__B2:
jsr nest1
//SEG15 main::@5
main__B5:
//SEG16 [4] (byte) main::j#1 ← -- (byte) main::j#2 [ main::j#1 main::i#2 ] -- zpby1=_dec_zpby1
dec 3
//SEG17 [5] if((byte) main::j#1>(byte) 0) goto main::@2 [ main::j#1 main::i#2 ] -- zpby1_gt_0_then_la1
lda 3
//SEG16 [4] (byte) main::j#1 ← -- (byte) main::j#2 [ main::j#1 main::i#2 ] -- yby=_dec_yby
dey
//SEG17 [5] if((byte) main::j#1>(byte) 0) goto main::@2 [ main::j#1 main::i#2 ] -- yby_gt_0_then_la1
cpy #0
bne main__B2_from_B5
//SEG18 main::@3
main__B3:
//SEG19 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- zpby1=_dec_zpby1
dec 2
//SEG20 [7] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- zpby1_gt_0_then_la1
lda 2
//SEG19 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- xby=_dec_xby
dex
//SEG20 [7] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- xby_gt_0_then_la1
cpx #0
bne main__B1_from_B3
//SEG21 main::@return
main__Breturn:
@ -2097,7 +2122,7 @@ nest1:
nest1__B1_from_nest1:
//SEG25 [9] phi (byte) nest1::i#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 4
sta 2
jmp nest1__B1
//SEG26 [9] phi from nest1::@3 to nest1::@1
nest1__B1_from_B3:
@ -2108,7 +2133,7 @@ nest1__B1:
nest1__B2_from_B1:
//SEG30 [10] phi (byte) nest1::j#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 5
sta 3
jmp nest1__B2
//SEG31 [10] phi from nest1::@5 to nest1::@2
nest1__B2_from_B5:
@ -2120,16 +2145,16 @@ nest1__B2:
//SEG35 nest1::@5
nest1__B5:
//SEG36 [12] (byte) nest1::j#1 ← -- (byte) nest1::j#2 [ main::j#2 main::i#2 nest1::j#1 nest1::i#2 ] -- zpby1=_dec_zpby1
dec 5
dec 3
//SEG37 [13] if((byte) nest1::j#1>(byte) 0) goto nest1::@2 [ main::j#2 main::i#2 nest1::j#1 nest1::i#2 ] -- zpby1_gt_0_then_la1
lda 5
lda 3
bne nest1__B2_from_B5
//SEG38 nest1::@3
nest1__B3:
//SEG39 [14] (byte) nest1::i#1 ← -- (byte) nest1::i#2 [ main::j#2 main::i#2 nest1::i#1 ] -- zpby1=_dec_zpby1
dec 4
dec 2
//SEG40 [15] if((byte) nest1::i#1>(byte) 0) goto nest1::@1 [ main::j#2 main::i#2 nest1::i#1 ] -- zpby1_gt_0_then_la1
lda 4
lda 2
bne nest1__B1_from_B3
//SEG41 nest1::@return
nest1__Breturn:
@ -2141,7 +2166,7 @@ nest2:
nest2__B1_from_nest2:
//SEG45 [17] phi (byte) nest2::i#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 6
sta 4
jmp nest2__B1
//SEG46 [17] phi from nest2::@3 to nest2::@1
nest2__B1_from_B3:
@ -2150,29 +2175,28 @@ nest2__B1_from_B3:
nest2__B1:
//SEG49 [18] phi from nest2::@1 to nest2::@2
nest2__B2_from_B1:
//SEG50 [18] phi (byte) nest2::j#2 = (byte) 100 -- zpby1=coby1
//SEG50 [18] phi (byte) nest2::j#2 = (byte) 100 -- aby=coby1
lda #100
sta 7
jmp nest2__B2
//SEG51 [18] phi from nest2::@2 to nest2::@2
nest2__B2_from_B2:
//SEG52 [18] phi (byte) nest2::j#2 = (byte) nest2::j#1 -- register_copy
//SEG53 nest2::@2
nest2__B2:
//SEG54 [19] *((word) 1024) ← (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#2 nest2::i#2 ] -- _star_cowo1=zpby1
lda 7
//SEG54 [19] *((word) 1024) ← (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#2 nest2::i#2 ] -- _star_cowo1=aby
sta 1024
//SEG55 [20] (byte) nest2::j#1 ← -- (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- zpby1=_dec_zpby1
dec 7
//SEG56 [21] if((byte) nest2::j#1>(byte) 0) goto nest2::@2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- zpby1_gt_0_then_la1
lda 7
//SEG55 [20] (byte) nest2::j#1 ← -- (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- aby=_dec_aby
sec
sbc #1
//SEG56 [21] if((byte) nest2::j#1>(byte) 0) goto nest2::@2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- aby_gt_0_then_la1
cmp #0
bne nest2__B2_from_B2
//SEG57 nest2::@3
nest2__B3:
//SEG58 [22] (byte) nest2::i#1 ← -- (byte) nest2::i#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::i#1 ] -- zpby1=_dec_zpby1
dec 6
dec 4
//SEG59 [23] if((byte) nest2::i#1>(byte) 0) goto nest2::@1 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::i#1 ] -- zpby1_gt_0_then_la1
lda 6
lda 4
bne nest2__B1_from_B3
//SEG60 nest2::@return
nest2__Breturn:
@ -2197,9 +2221,8 @@ BEND:
main:
//SEG4 [1] phi from main to main::@1
main__B1_from_main:
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 2
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- xby=coby1
ldx #100
//SEG6 [1] phi from main::@3 to main::@1
main__B1_from_B3:
//SEG7 [1] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy
@ -2207,9 +2230,8 @@ main__B1_from_B3:
main__B1:
//SEG9 [2] phi from main::@1 to main::@2
main__B2_from_B1:
//SEG10 [2] phi (byte) main::j#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 3
//SEG10 [2] phi (byte) main::j#2 = (byte) 100 -- yby=coby1
ldy #100
//SEG11 [2] phi from main::@5 to main::@2
main__B2_from_B5:
//SEG12 [2] phi (byte) main::j#2 = (byte) main::j#1 -- register_copy
@ -2219,17 +2241,17 @@ main__B2:
jsr nest1
//SEG15 main::@5
main__B5:
//SEG16 [4] (byte) main::j#1 ← -- (byte) main::j#2 [ main::j#1 main::i#2 ] -- zpby1=_dec_zpby1
dec 3
//SEG17 [5] if((byte) main::j#1>(byte) 0) goto main::@2 [ main::j#1 main::i#2 ] -- zpby1_gt_0_then_la1
lda 3
//SEG16 [4] (byte) main::j#1 ← -- (byte) main::j#2 [ main::j#1 main::i#2 ] -- yby=_dec_yby
dey
//SEG17 [5] if((byte) main::j#1>(byte) 0) goto main::@2 [ main::j#1 main::i#2 ] -- yby_gt_0_then_la1
cpy #0
bne main__B2_from_B5
//SEG18 main::@3
main__B3:
//SEG19 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- zpby1=_dec_zpby1
dec 2
//SEG20 [7] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- zpby1_gt_0_then_la1
lda 2
//SEG19 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- xby=_dec_xby
dex
//SEG20 [7] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- xby_gt_0_then_la1
cpx #0
bne main__B1_from_B3
//SEG21 main::@return
main__Breturn:
@ -2241,7 +2263,7 @@ nest1:
nest1__B1_from_nest1:
//SEG25 [9] phi (byte) nest1::i#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 4
sta 2
//SEG26 [9] phi from nest1::@3 to nest1::@1
nest1__B1_from_B3:
//SEG27 [9] phi (byte) nest1::i#2 = (byte) nest1::i#1 -- register_copy
@ -2251,7 +2273,7 @@ nest1__B1:
nest1__B2_from_B1:
//SEG30 [10] phi (byte) nest1::j#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 5
sta 3
//SEG31 [10] phi from nest1::@5 to nest1::@2
nest1__B2_from_B5:
//SEG32 [10] phi (byte) nest1::j#2 = (byte) nest1::j#1 -- register_copy
@ -2262,16 +2284,16 @@ nest1__B2:
//SEG35 nest1::@5
nest1__B5:
//SEG36 [12] (byte) nest1::j#1 ← -- (byte) nest1::j#2 [ main::j#2 main::i#2 nest1::j#1 nest1::i#2 ] -- zpby1=_dec_zpby1
dec 5
dec 3
//SEG37 [13] if((byte) nest1::j#1>(byte) 0) goto nest1::@2 [ main::j#2 main::i#2 nest1::j#1 nest1::i#2 ] -- zpby1_gt_0_then_la1
lda 5
lda 3
bne nest1__B2_from_B5
//SEG38 nest1::@3
nest1__B3:
//SEG39 [14] (byte) nest1::i#1 ← -- (byte) nest1::i#2 [ main::j#2 main::i#2 nest1::i#1 ] -- zpby1=_dec_zpby1
dec 4
dec 2
//SEG40 [15] if((byte) nest1::i#1>(byte) 0) goto nest1::@1 [ main::j#2 main::i#2 nest1::i#1 ] -- zpby1_gt_0_then_la1
lda 4
lda 2
bne nest1__B1_from_B3
//SEG41 nest1::@return
nest1__Breturn:
@ -2283,7 +2305,7 @@ nest2:
nest2__B1_from_nest2:
//SEG45 [17] phi (byte) nest2::i#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 6
sta 4
//SEG46 [17] phi from nest2::@3 to nest2::@1
nest2__B1_from_B3:
//SEG47 [17] phi (byte) nest2::i#2 = (byte) nest2::i#1 -- register_copy
@ -2291,28 +2313,27 @@ nest2__B1_from_B3:
nest2__B1:
//SEG49 [18] phi from nest2::@1 to nest2::@2
nest2__B2_from_B1:
//SEG50 [18] phi (byte) nest2::j#2 = (byte) 100 -- zpby1=coby1
//SEG50 [18] phi (byte) nest2::j#2 = (byte) 100 -- aby=coby1
lda #100
sta 7
//SEG51 [18] phi from nest2::@2 to nest2::@2
nest2__B2_from_B2:
//SEG52 [18] phi (byte) nest2::j#2 = (byte) nest2::j#1 -- register_copy
//SEG53 nest2::@2
nest2__B2:
//SEG54 [19] *((word) 1024) ← (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#2 nest2::i#2 ] -- _star_cowo1=zpby1
lda 7
//SEG54 [19] *((word) 1024) ← (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#2 nest2::i#2 ] -- _star_cowo1=aby
sta 1024
//SEG55 [20] (byte) nest2::j#1 ← -- (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- zpby1=_dec_zpby1
dec 7
//SEG56 [21] if((byte) nest2::j#1>(byte) 0) goto nest2::@2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- zpby1_gt_0_then_la1
lda 7
//SEG55 [20] (byte) nest2::j#1 ← -- (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- aby=_dec_aby
sec
sbc #1
//SEG56 [21] if((byte) nest2::j#1>(byte) 0) goto nest2::@2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- aby_gt_0_then_la1
cmp #0
bne nest2__B2_from_B2
//SEG57 nest2::@3
nest2__B3:
//SEG58 [22] (byte) nest2::i#1 ← -- (byte) nest2::i#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::i#1 ] -- zpby1=_dec_zpby1
dec 6
dec 4
//SEG59 [23] if((byte) nest2::i#1>(byte) 0) goto nest2::@1 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::i#1 ] -- zpby1_gt_0_then_la1
lda 6
lda 4
bne nest2__B1_from_B3
//SEG60 nest2::@return
nest2__Breturn:
@ -2330,11 +2351,11 @@ FINAL SYMBOL TABLE
(label) main::@5
(label) main::@return
(byte) main::i
(byte) main::i#1 zp byte:2 16.5
(byte) main::i#2 zp byte:2 1.0476190476190477
(byte) main::i#1 reg byte x 16.5
(byte) main::i#2 reg byte x 1.0476190476190477
(byte) main::j
(byte) main::j#1 zp byte:3 151.5
(byte) main::j#2 zp byte:3 11.222222222222221
(byte) main::j#1 reg byte y 151.5
(byte) main::j#2 reg byte y 11.222222222222221
(void()) nest1()
(label) nest1::@1
(label) nest1::@2
@ -2342,29 +2363,29 @@ FINAL SYMBOL TABLE
(label) nest1::@5
(label) nest1::@return
(byte) nest1::i
(byte) nest1::i#1 zp byte:4 1501.5
(byte) nest1::i#2 zp byte:4 154.0
(byte) nest1::i#1 zp byte:2 1501.5
(byte) nest1::i#2 zp byte:2 154.0
(byte) nest1::j
(byte) nest1::j#1 zp byte:5 15001.5
(byte) nest1::j#2 zp byte:5 2000.2
(byte) nest1::j#1 zp byte:3 15001.5
(byte) nest1::j#2 zp byte:3 2000.2
(void()) nest2()
(label) nest2::@1
(label) nest2::@2
(label) nest2::@3
(label) nest2::@return
(byte) nest2::i
(byte) nest2::i#1 zp byte:6 150001.5
(byte) nest2::i#2 zp byte:6 40000.4
(byte) nest2::i#1 zp byte:4 150001.5
(byte) nest2::i#2 zp byte:4 40000.4
(byte) nest2::j
(byte) nest2::j#1 zp byte:7 1500001.5
(byte) nest2::j#2 zp byte:7 1500001.5
(byte) nest2::j#1 reg byte a 1500001.5
(byte) nest2::j#2 reg byte a 1500001.5
zp byte:2 [ main::i#2 main::i#1 ]
zp byte:3 [ main::j#2 main::j#1 ]
zp byte:4 [ nest1::i#2 nest1::i#1 ]
zp byte:5 [ nest1::j#2 nest1::j#1 ]
zp byte:6 [ nest2::i#2 nest2::i#1 ]
zp byte:7 [ nest2::j#2 nest2::j#1 ]
reg byte x [ main::i#2 main::i#1 ]
reg byte y [ main::j#2 main::j#1 ]
zp byte:2 [ nest1::i#2 nest1::i#1 ]
zp byte:3 [ nest1::j#2 nest1::j#1 ]
zp byte:4 [ nest2::i#2 nest2::i#1 ]
reg byte a [ nest2::j#2 nest2::j#1 ]
FINAL CODE
//SEG0 @BEGIN
@ -2377,9 +2398,8 @@ BEND:
main:
//SEG4 [1] phi from main to main::@1
main__B1_from_main:
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 2
//SEG5 [1] phi (byte) main::i#2 = (byte) 100 -- xby=coby1
ldx #100
//SEG6 [1] phi from main::@3 to main::@1
main__B1_from_B3:
//SEG7 [1] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy
@ -2387,9 +2407,8 @@ main__B1_from_B3:
main__B1:
//SEG9 [2] phi from main::@1 to main::@2
main__B2_from_B1:
//SEG10 [2] phi (byte) main::j#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 3
//SEG10 [2] phi (byte) main::j#2 = (byte) 100 -- yby=coby1
ldy #100
//SEG11 [2] phi from main::@5 to main::@2
main__B2_from_B5:
//SEG12 [2] phi (byte) main::j#2 = (byte) main::j#1 -- register_copy
@ -2399,17 +2418,17 @@ main__B2:
jsr nest1
//SEG15 main::@5
main__B5:
//SEG16 [4] (byte) main::j#1 ← -- (byte) main::j#2 [ main::j#1 main::i#2 ] -- zpby1=_dec_zpby1
dec 3
//SEG17 [5] if((byte) main::j#1>(byte) 0) goto main::@2 [ main::j#1 main::i#2 ] -- zpby1_gt_0_then_la1
lda 3
//SEG16 [4] (byte) main::j#1 ← -- (byte) main::j#2 [ main::j#1 main::i#2 ] -- yby=_dec_yby
dey
//SEG17 [5] if((byte) main::j#1>(byte) 0) goto main::@2 [ main::j#1 main::i#2 ] -- yby_gt_0_then_la1
cpy #0
bne main__B2_from_B5
//SEG18 main::@3
main__B3:
//SEG19 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- zpby1=_dec_zpby1
dec 2
//SEG20 [7] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- zpby1_gt_0_then_la1
lda 2
//SEG19 [6] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 ] -- xby=_dec_xby
dex
//SEG20 [7] if((byte) main::i#1>(byte) 0) goto main::@1 [ main::i#1 ] -- xby_gt_0_then_la1
cpx #0
bne main__B1_from_B3
//SEG21 main::@return
main__Breturn:
@ -2421,7 +2440,7 @@ nest1:
nest1__B1_from_nest1:
//SEG25 [9] phi (byte) nest1::i#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 4
sta 2
//SEG26 [9] phi from nest1::@3 to nest1::@1
nest1__B1_from_B3:
//SEG27 [9] phi (byte) nest1::i#2 = (byte) nest1::i#1 -- register_copy
@ -2431,7 +2450,7 @@ nest1__B1:
nest1__B2_from_B1:
//SEG30 [10] phi (byte) nest1::j#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 5
sta 3
//SEG31 [10] phi from nest1::@5 to nest1::@2
nest1__B2_from_B5:
//SEG32 [10] phi (byte) nest1::j#2 = (byte) nest1::j#1 -- register_copy
@ -2442,16 +2461,16 @@ nest1__B2:
//SEG35 nest1::@5
nest1__B5:
//SEG36 [12] (byte) nest1::j#1 ← -- (byte) nest1::j#2 [ main::j#2 main::i#2 nest1::j#1 nest1::i#2 ] -- zpby1=_dec_zpby1
dec 5
dec 3
//SEG37 [13] if((byte) nest1::j#1>(byte) 0) goto nest1::@2 [ main::j#2 main::i#2 nest1::j#1 nest1::i#2 ] -- zpby1_gt_0_then_la1
lda 5
lda 3
bne nest1__B2_from_B5
//SEG38 nest1::@3
nest1__B3:
//SEG39 [14] (byte) nest1::i#1 ← -- (byte) nest1::i#2 [ main::j#2 main::i#2 nest1::i#1 ] -- zpby1=_dec_zpby1
dec 4
dec 2
//SEG40 [15] if((byte) nest1::i#1>(byte) 0) goto nest1::@1 [ main::j#2 main::i#2 nest1::i#1 ] -- zpby1_gt_0_then_la1
lda 4
lda 2
bne nest1__B1_from_B3
//SEG41 nest1::@return
nest1__Breturn:
@ -2463,7 +2482,7 @@ nest2:
nest2__B1_from_nest2:
//SEG45 [17] phi (byte) nest2::i#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 6
sta 4
//SEG46 [17] phi from nest2::@3 to nest2::@1
nest2__B1_from_B3:
//SEG47 [17] phi (byte) nest2::i#2 = (byte) nest2::i#1 -- register_copy
@ -2471,28 +2490,27 @@ nest2__B1_from_B3:
nest2__B1:
//SEG49 [18] phi from nest2::@1 to nest2::@2
nest2__B2_from_B1:
//SEG50 [18] phi (byte) nest2::j#2 = (byte) 100 -- zpby1=coby1
//SEG50 [18] phi (byte) nest2::j#2 = (byte) 100 -- aby=coby1
lda #100
sta 7
//SEG51 [18] phi from nest2::@2 to nest2::@2
nest2__B2_from_B2:
//SEG52 [18] phi (byte) nest2::j#2 = (byte) nest2::j#1 -- register_copy
//SEG53 nest2::@2
nest2__B2:
//SEG54 [19] *((word) 1024) ← (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#2 nest2::i#2 ] -- _star_cowo1=zpby1
lda 7
//SEG54 [19] *((word) 1024) ← (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#2 nest2::i#2 ] -- _star_cowo1=aby
sta 1024
//SEG55 [20] (byte) nest2::j#1 ← -- (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- zpby1=_dec_zpby1
dec 7
//SEG56 [21] if((byte) nest2::j#1>(byte) 0) goto nest2::@2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- zpby1_gt_0_then_la1
lda 7
//SEG55 [20] (byte) nest2::j#1 ← -- (byte) nest2::j#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- aby=_dec_aby
sec
sbc #1
//SEG56 [21] if((byte) nest2::j#1>(byte) 0) goto nest2::@2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::j#1 nest2::i#2 ] -- aby_gt_0_then_la1
cmp #0
bne nest2__B2_from_B2
//SEG57 nest2::@3
nest2__B3:
//SEG58 [22] (byte) nest2::i#1 ← -- (byte) nest2::i#2 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::i#1 ] -- zpby1=_dec_zpby1
dec 6
dec 4
//SEG59 [23] if((byte) nest2::i#1>(byte) 0) goto nest2::@1 [ main::j#2 main::i#2 nest1::j#2 nest1::i#2 nest2::i#1 ] -- zpby1_gt_0_then_la1
lda 6
lda 4
bne nest2__B1_from_B3
//SEG60 nest2::@return
nest2__Breturn:

View File

@ -8,11 +8,11 @@
(label) main::@5
(label) main::@return
(byte) main::i
(byte) main::i#1 zp byte:2 16.5
(byte) main::i#2 zp byte:2 1.0476190476190477
(byte) main::i#1 reg byte x 16.5
(byte) main::i#2 reg byte x 1.0476190476190477
(byte) main::j
(byte) main::j#1 zp byte:3 151.5
(byte) main::j#2 zp byte:3 11.222222222222221
(byte) main::j#1 reg byte y 151.5
(byte) main::j#2 reg byte y 11.222222222222221
(void()) nest1()
(label) nest1::@1
(label) nest1::@2
@ -20,26 +20,26 @@
(label) nest1::@5
(label) nest1::@return
(byte) nest1::i
(byte) nest1::i#1 zp byte:4 1501.5
(byte) nest1::i#2 zp byte:4 154.0
(byte) nest1::i#1 zp byte:2 1501.5
(byte) nest1::i#2 zp byte:2 154.0
(byte) nest1::j
(byte) nest1::j#1 zp byte:5 15001.5
(byte) nest1::j#2 zp byte:5 2000.2
(byte) nest1::j#1 zp byte:3 15001.5
(byte) nest1::j#2 zp byte:3 2000.2
(void()) nest2()
(label) nest2::@1
(label) nest2::@2
(label) nest2::@3
(label) nest2::@return
(byte) nest2::i
(byte) nest2::i#1 zp byte:6 150001.5
(byte) nest2::i#2 zp byte:6 40000.4
(byte) nest2::i#1 zp byte:4 150001.5
(byte) nest2::i#2 zp byte:4 40000.4
(byte) nest2::j
(byte) nest2::j#1 zp byte:7 1500001.5
(byte) nest2::j#2 zp byte:7 1500001.5
(byte) nest2::j#1 reg byte a 1500001.5
(byte) nest2::j#2 reg byte a 1500001.5
zp byte:2 [ main::i#2 main::i#1 ]
zp byte:3 [ main::j#2 main::j#1 ]
zp byte:4 [ nest1::i#2 nest1::i#1 ]
zp byte:5 [ nest1::j#2 nest1::j#1 ]
zp byte:6 [ nest2::i#2 nest2::i#1 ]
zp byte:7 [ nest2::j#2 nest2::j#1 ]
reg byte x [ main::i#2 main::i#1 ]
reg byte y [ main::j#2 main::j#1 ]
zp byte:2 [ nest1::i#2 nest1::i#1 ]
zp byte:3 [ nest1::j#2 nest1::j#1 ]
zp byte:4 [ nest2::i#2 nest2::i#1 ]
reg byte a [ nest2::j#2 nest2::j#1 ]

View File

@ -3,27 +3,24 @@ BBEGIN:
BEND:
main:
main__B1_from_main:
lda #0
sta 3
lda #100
sta 2
ldy #0
ldx #100
main__B1:
dec 2
lda 2
dex
cpx #0
bne main__B2
main__Breturn:
rts
main__B2:
lda 2
cmp #50
cpx #50
beq !+
bcs main__B4
!:
main__B5:
dec 3
dey
main__B1_from_B5:
jmp main__B1
main__B4:
inc 3
iny
main__B1_from_B4:
jmp main__B1

View File

@ -591,23 +591,29 @@ main__B1_from_B4:
//SEG23 [1] phi (byte) main::i#2 = (byte) main::i#1 -- register_copy
jmp main__B1
Uplifting max weight 55.0 live range equivalence class zp byte:3 [ main::s#3 main::s#1 main::s#2 ]
Uplift to reg byte a resulted in clobber.
Uplift to reg byte x succesfull.
Uplift to reg byte y succesfull.
REGISTER UPLIFTING
(void()) main()
(byte) main::i
(byte) main::i#1 zp byte:2 11.0
(byte) main::i#2 zp byte:2 33.0
(byte) main::s
(byte) main::s#1 zp byte:3 22.0
(byte) main::s#2 zp byte:3 22.0
(byte) main::s#3 zp byte:3 11.0
zp byte:2 [ main::i#2 main::i#1 ]
zp byte:3 [ main::s#3 main::s#1 main::s#2 ]
REGISTER UPLIFT SCOPES
Uplift Scope [main] 55: zp byte:3 [ main::s#3 main::s#1 main::s#2 ] 44: zp byte:2 [ main::i#2 main::i#1 ]
Uplift Scope []
Uplift attempt [main] 48 allocation: zp byte:3 [ main::s#3 main::s#1 main::s#2 ] zp byte:2 [ main::i#2 main::i#1 ]
Uplift attempt [main] clobber allocation: reg byte a [ main::s#3 main::s#1 main::s#2 ] zp byte:2 [ main::i#2 main::i#1 ]
Uplift attempt [main] 44 allocation: reg byte x [ main::s#3 main::s#1 main::s#2 ] zp byte:2 [ main::i#2 main::i#1 ]
Uplift attempt [main] 44 allocation: reg byte y [ main::s#3 main::s#1 main::s#2 ] zp byte:2 [ main::i#2 main::i#1 ]
Uplift attempt [main] 45 allocation: zp byte:3 [ main::s#3 main::s#1 main::s#2 ] reg byte a [ main::i#2 main::i#1 ]
Uplift attempt [main] clobber allocation: reg byte a [ main::s#3 main::s#1 main::s#2 ] reg byte a [ main::i#2 main::i#1 ]
Uplift attempt [main] 41 allocation: reg byte x [ main::s#3 main::s#1 main::s#2 ] reg byte a [ main::i#2 main::i#1 ]
Uplift attempt [main] 41 allocation: reg byte y [ main::s#3 main::s#1 main::s#2 ] reg byte a [ main::i#2 main::i#1 ]
Uplift attempt [main] 43 allocation: zp byte:3 [ main::s#3 main::s#1 main::s#2 ] reg byte x [ main::i#2 main::i#1 ]
Uplift attempt [main] 43 allocation: reg byte a [ main::s#3 main::s#1 main::s#2 ] reg byte x [ main::i#2 main::i#1 ]
Uplift attempt [main] clobber allocation: reg byte x [ main::s#3 main::s#1 main::s#2 ] reg byte x [ main::i#2 main::i#1 ]
Uplift attempt [main] 39 allocation: reg byte y [ main::s#3 main::s#1 main::s#2 ] reg byte x [ main::i#2 main::i#1 ]
Uplift attempt [main] 43 allocation: zp byte:3 [ main::s#3 main::s#1 main::s#2 ] reg byte y [ main::i#2 main::i#1 ]
Uplift attempt [main] 43 allocation: reg byte a [ main::s#3 main::s#1 main::s#2 ] reg byte y [ main::i#2 main::i#1 ]
Uplift attempt [main] 39 allocation: reg byte x [ main::s#3 main::s#1 main::s#2 ] reg byte y [ main::i#2 main::i#1 ]
Uplift attempt [main] clobber allocation: reg byte y [ main::s#3 main::s#1 main::s#2 ] reg byte y [ main::i#2 main::i#1 ]
Uplifting [main] best 39 combination reg byte y [ main::s#3 main::s#1 main::s#2 ] reg byte x [ main::i#2 main::i#1 ]
Uplift attempt [] 39 allocation:
Uplifting [] best 39 combination
Removing instruction jmp BEND
Removing instruction jmp main__B1
Removing instruction jmp main__Breturn
@ -624,18 +630,16 @@ BEND:
main:
//SEG4 [1] phi from main to main::@1
main__B1_from_main:
//SEG5 [1] phi (byte) main::s#3 = (byte) 0 -- zpby1=coby1
lda #0
sta 3
//SEG6 [1] phi (byte) main::i#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 2
//SEG5 [1] phi (byte) main::s#3 = (byte) 0 -- yby=coby1
ldy #0
//SEG6 [1] phi (byte) main::i#2 = (byte) 100 -- xby=coby1
ldx #100
//SEG7 main::@1
main__B1:
//SEG8 [2] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 main::s#3 ] -- zpby1=_dec_zpby1
dec 2
//SEG9 [3] if((byte) main::i#1>(byte) 0) goto main::@2 [ main::i#1 main::s#3 ] -- zpby1_gt_0_then_la1
lda 2
//SEG8 [2] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 main::s#3 ] -- xby=_dec_xby
dex
//SEG9 [3] if((byte) main::i#1>(byte) 0) goto main::@2 [ main::i#1 main::s#3 ] -- xby_gt_0_then_la1
cpx #0
bne main__B2
//SEG10 main::@return
main__Breturn:
@ -643,16 +647,15 @@ main__Breturn:
rts
//SEG12 main::@2
main__B2:
//SEG13 [5] if((byte) main::i#1>(byte) 50) goto main::@4 [ main::i#1 main::s#3 ] -- zpby1_gt_coby1_then_la1
lda 2
cmp #50
//SEG13 [5] if((byte) main::i#1>(byte) 50) goto main::@4 [ main::i#1 main::s#3 ] -- xby_gt_coby1_then_la1
cpx #50
beq !+
bcs main__B4
!:
//SEG14 main::@5
main__B5:
//SEG15 [6] (byte) main::s#2 ← -- (byte) main::s#3 [ main::i#1 main::s#2 ] -- zpby1=_dec_zpby1
dec 3
//SEG15 [6] (byte) main::s#2 ← -- (byte) main::s#3 [ main::i#1 main::s#2 ] -- yby=_dec_yby
dey
//SEG16 [1] phi from main::@5 to main::@1
main__B1_from_B5:
//SEG17 [1] phi (byte) main::s#3 = (byte) main::s#2 -- register_copy
@ -660,8 +663,8 @@ main__B1_from_B5:
jmp main__B1
//SEG19 main::@4
main__B4:
//SEG20 [7] (byte) main::s#1 ← ++ (byte) main::s#3 [ main::i#1 main::s#1 ] -- zpby1=_inc_zpby1
inc 3
//SEG20 [7] (byte) main::s#1 ← ++ (byte) main::s#3 [ main::i#1 main::s#1 ] -- yby=_inc_yby
iny
//SEG21 [1] phi from main::@4 to main::@1
main__B1_from_B4:
//SEG22 [1] phi (byte) main::s#3 = (byte) main::s#1 -- register_copy
@ -678,15 +681,15 @@ FINAL SYMBOL TABLE
(label) main::@5
(label) main::@return
(byte) main::i
(byte) main::i#1 zp byte:2 11.0
(byte) main::i#2 zp byte:2 33.0
(byte) main::i#1 reg byte x 11.0
(byte) main::i#2 reg byte x 33.0
(byte) main::s
(byte) main::s#1 zp byte:3 22.0
(byte) main::s#2 zp byte:3 22.0
(byte) main::s#3 zp byte:3 11.0
(byte) main::s#1 reg byte y 22.0
(byte) main::s#2 reg byte y 22.0
(byte) main::s#3 reg byte y 11.0
zp byte:2 [ main::i#2 main::i#1 ]
zp byte:3 [ main::s#3 main::s#1 main::s#2 ]
reg byte x [ main::i#2 main::i#1 ]
reg byte y [ main::s#3 main::s#1 main::s#2 ]
FINAL CODE
//SEG0 @BEGIN
@ -699,18 +702,16 @@ BEND:
main:
//SEG4 [1] phi from main to main::@1
main__B1_from_main:
//SEG5 [1] phi (byte) main::s#3 = (byte) 0 -- zpby1=coby1
lda #0
sta 3
//SEG6 [1] phi (byte) main::i#2 = (byte) 100 -- zpby1=coby1
lda #100
sta 2
//SEG5 [1] phi (byte) main::s#3 = (byte) 0 -- yby=coby1
ldy #0
//SEG6 [1] phi (byte) main::i#2 = (byte) 100 -- xby=coby1
ldx #100
//SEG7 main::@1
main__B1:
//SEG8 [2] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 main::s#3 ] -- zpby1=_dec_zpby1
dec 2
//SEG9 [3] if((byte) main::i#1>(byte) 0) goto main::@2 [ main::i#1 main::s#3 ] -- zpby1_gt_0_then_la1
lda 2
//SEG8 [2] (byte) main::i#1 ← -- (byte) main::i#2 [ main::i#1 main::s#3 ] -- xby=_dec_xby
dex
//SEG9 [3] if((byte) main::i#1>(byte) 0) goto main::@2 [ main::i#1 main::s#3 ] -- xby_gt_0_then_la1
cpx #0
bne main__B2
//SEG10 main::@return
main__Breturn:
@ -718,16 +719,15 @@ main__Breturn:
rts
//SEG12 main::@2
main__B2:
//SEG13 [5] if((byte) main::i#1>(byte) 50) goto main::@4 [ main::i#1 main::s#3 ] -- zpby1_gt_coby1_then_la1
lda 2
cmp #50
//SEG13 [5] if((byte) main::i#1>(byte) 50) goto main::@4 [ main::i#1 main::s#3 ] -- xby_gt_coby1_then_la1
cpx #50
beq !+
bcs main__B4
!:
//SEG14 main::@5
main__B5:
//SEG15 [6] (byte) main::s#2 ← -- (byte) main::s#3 [ main::i#1 main::s#2 ] -- zpby1=_dec_zpby1
dec 3
//SEG15 [6] (byte) main::s#2 ← -- (byte) main::s#3 [ main::i#1 main::s#2 ] -- yby=_dec_yby
dey
//SEG16 [1] phi from main::@5 to main::@1
main__B1_from_B5:
//SEG17 [1] phi (byte) main::s#3 = (byte) main::s#2 -- register_copy
@ -735,8 +735,8 @@ main__B1_from_B5:
jmp main__B1
//SEG19 main::@4
main__B4:
//SEG20 [7] (byte) main::s#1 ← ++ (byte) main::s#3 [ main::i#1 main::s#1 ] -- zpby1=_inc_zpby1
inc 3
//SEG20 [7] (byte) main::s#1 ← ++ (byte) main::s#3 [ main::i#1 main::s#1 ] -- yby=_inc_yby
iny
//SEG21 [1] phi from main::@4 to main::@1
main__B1_from_B4:
//SEG22 [1] phi (byte) main::s#3 = (byte) main::s#1 -- register_copy

View File

@ -7,12 +7,12 @@
(label) main::@5
(label) main::@return
(byte) main::i
(byte) main::i#1 zp byte:2 11.0
(byte) main::i#2 zp byte:2 33.0
(byte) main::i#1 reg byte x 11.0
(byte) main::i#2 reg byte x 33.0
(byte) main::s
(byte) main::s#1 zp byte:3 22.0
(byte) main::s#2 zp byte:3 22.0
(byte) main::s#3 zp byte:3 11.0
(byte) main::s#1 reg byte y 22.0
(byte) main::s#2 reg byte y 22.0
(byte) main::s#3 reg byte y 11.0
zp byte:2 [ main::i#2 main::i#1 ]
zp byte:3 [ main::s#3 main::s#1 main::s#2 ]
reg byte x [ main::i#2 main::i#1 ]
reg byte y [ main::s#3 main::s#1 main::s#2 ]

View File

@ -1,18 +1,13 @@
BBEGIN:
B1_from_BBEGIN:
lda #5
sta 2
ldx #5
B1_from_B1:
B1:
lda 2
txa
clc
adc #4
sta 3
lda 3
ldx 2
sta 4352,x
inc 2
lda 2
cmp #10
inx
cpx #10
bcc B1_from_B1
BEND:

View File

@ -340,20 +340,26 @@ B1:
//SEG10 @END
BEND:
Uplifting max weight 31.166666666666664 live range equivalence class zp byte:2 [ i#2 i#1 ]
Uplift to reg byte a resulted in clobber.
Uplift to reg byte x succesfull.
Uplift to reg byte y succesfull.
REGISTER UPLIFTING
(byte~) $1 zp byte:3 22.0
(byte) i
(byte) i#1 zp byte:2 16.5
(byte) i#2 zp byte:2 14.666666666666666
(byte[16]) p
zp byte:2 [ i#2 i#1 ]
zp byte:3 [ $1 ]
REGISTER UPLIFT SCOPES
Uplift Scope [] 31.17: zp byte:2 [ i#2 i#1 ] 22: zp byte:3 [ $1 ]
Uplift attempt [] 35 allocation: zp byte:2 [ i#2 i#1 ] zp byte:3 [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] zp byte:3 [ $1 ]
Uplift attempt [] 27 allocation: reg byte x [ i#2 i#1 ] zp byte:3 [ $1 ]
Uplift attempt [] 28 allocation: reg byte y [ i#2 i#1 ] zp byte:3 [ $1 ]
Uplift attempt [] 31 allocation: zp byte:2 [ i#2 i#1 ] reg byte a [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte a [ $1 ]
Uplift attempt [] 23 allocation: reg byte x [ i#2 i#1 ] reg byte a [ $1 ]
Uplift attempt [] 24 allocation: reg byte y [ i#2 i#1 ] reg byte a [ $1 ]
Uplift attempt [] 33 allocation: zp byte:2 [ i#2 i#1 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte x [ $1 ]
Uplift attempt [] clobber allocation: reg byte x [ i#2 i#1 ] reg byte x [ $1 ]
Uplift attempt [] 26 allocation: reg byte y [ i#2 i#1 ] reg byte x [ $1 ]
Uplift attempt [] 34 allocation: zp byte:2 [ i#2 i#1 ] reg byte y [ $1 ]
Uplift attempt [] clobber allocation: reg byte a [ i#2 i#1 ] reg byte y [ $1 ]
Uplift attempt [] 25 allocation: reg byte x [ i#2 i#1 ] reg byte y [ $1 ]
Uplift attempt [] clobber allocation: reg byte y [ i#2 i#1 ] reg byte y [ $1 ]
Uplifting [] best 23 combination reg byte x [ i#2 i#1 ] reg byte a [ $1 ]
Removing instruction jmp B1
Removing instruction jmp BEND
Succesful ASM optimization Pass5NextJumpElimination
@ -362,29 +368,24 @@ ASSEMBLER
BBEGIN:
//SEG1 [0] phi from @BEGIN to @1
B1_from_BBEGIN:
//SEG2 [0] phi (byte) i#2 = (byte) 5 -- zpby1=coby1
lda #5
sta 2
//SEG2 [0] phi (byte) i#2 = (byte) 5 -- xby=coby1
ldx #5
jmp B1
//SEG3 [0] phi from @1 to @1
B1_from_B1:
//SEG4 [0] phi (byte) i#2 = (byte) i#1 -- register_copy
//SEG5 @1
B1:
//SEG6 [1] (byte~) $1 ← (byte) i#2 + (byte) 4 [ i#2 $1 ] -- zpby1=zpby2_plus_coby1
lda 2
//SEG6 [1] (byte~) $1 ← (byte) i#2 + (byte) 4 [ i#2 $1 ] -- aby=xby_plus_coby1
txa
clc
adc #4
sta 3
//SEG7 [2] *((word) 4352 + (byte) i#2) ← (byte~) $1 [ i#2 ] -- cowo1_staridx_zpby1=zpby2
lda 3
ldx 2
//SEG7 [2] *((word) 4352 + (byte) i#2) ← (byte~) $1 [ i#2 ] -- cowo1_staridx_xby=aby
sta 4352,x
//SEG8 [3] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- zpby1=zpby1_plus_1
inc 2
//SEG9 [4] if((byte) i#1<(byte) 10) goto @1 [ i#1 ] -- zpby1_lt_coby1_then_la1
lda 2
cmp #10
//SEG8 [3] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- xby=xby_plus_1
inx
//SEG9 [4] if((byte) i#1<(byte) 10) goto @1 [ i#1 ] -- xby_lt_coby1_then_la1
cpx #10
bcc B1_from_B1
//SEG10 @END
BEND:
@ -396,72 +397,62 @@ ASSEMBLER
BBEGIN:
//SEG1 [0] phi from @BEGIN to @1
B1_from_BBEGIN:
//SEG2 [0] phi (byte) i#2 = (byte) 5 -- zpby1=coby1
lda #5
sta 2
//SEG2 [0] phi (byte) i#2 = (byte) 5 -- xby=coby1
ldx #5
//SEG3 [0] phi from @1 to @1
B1_from_B1:
//SEG4 [0] phi (byte) i#2 = (byte) i#1 -- register_copy
//SEG5 @1
B1:
//SEG6 [1] (byte~) $1 ← (byte) i#2 + (byte) 4 [ i#2 $1 ] -- zpby1=zpby2_plus_coby1
lda 2
//SEG6 [1] (byte~) $1 ← (byte) i#2 + (byte) 4 [ i#2 $1 ] -- aby=xby_plus_coby1
txa
clc
adc #4
sta 3
//SEG7 [2] *((word) 4352 + (byte) i#2) ← (byte~) $1 [ i#2 ] -- cowo1_staridx_zpby1=zpby2
lda 3
ldx 2
//SEG7 [2] *((word) 4352 + (byte) i#2) ← (byte~) $1 [ i#2 ] -- cowo1_staridx_xby=aby
sta 4352,x
//SEG8 [3] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- zpby1=zpby1_plus_1
inc 2
//SEG9 [4] if((byte) i#1<(byte) 10) goto @1 [ i#1 ] -- zpby1_lt_coby1_then_la1
lda 2
cmp #10
//SEG8 [3] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- xby=xby_plus_1
inx
//SEG9 [4] if((byte) i#1<(byte) 10) goto @1 [ i#1 ] -- xby_lt_coby1_then_la1
cpx #10
bcc B1_from_B1
//SEG10 @END
BEND:
FINAL SYMBOL TABLE
(byte~) $1 zp byte:3 22.0
(byte~) $1 reg byte a 22.0
(label) @1
(label) @BEGIN
(label) @END
(byte) i
(byte) i#1 zp byte:2 16.5
(byte) i#2 zp byte:2 14.666666666666666
(byte) i#1 reg byte x 16.5
(byte) i#2 reg byte x 14.666666666666666
(byte[16]) p
zp byte:2 [ i#2 i#1 ]
zp byte:3 [ $1 ]
reg byte x [ i#2 i#1 ]
reg byte a [ $1 ]
FINAL CODE
//SEG0 @BEGIN
BBEGIN:
//SEG1 [0] phi from @BEGIN to @1
B1_from_BBEGIN:
//SEG2 [0] phi (byte) i#2 = (byte) 5 -- zpby1=coby1
lda #5
sta 2
//SEG2 [0] phi (byte) i#2 = (byte) 5 -- xby=coby1
ldx #5
//SEG3 [0] phi from @1 to @1
B1_from_B1:
//SEG4 [0] phi (byte) i#2 = (byte) i#1 -- register_copy
//SEG5 @1
B1:
//SEG6 [1] (byte~) $1 ← (byte) i#2 + (byte) 4 [ i#2 $1 ] -- zpby1=zpby2_plus_coby1
lda 2
//SEG6 [1] (byte~) $1 ← (byte) i#2 + (byte) 4 [ i#2 $1 ] -- aby=xby_plus_coby1
txa
clc
adc #4
sta 3
//SEG7 [2] *((word) 4352 + (byte) i#2) ← (byte~) $1 [ i#2 ] -- cowo1_staridx_zpby1=zpby2
lda 3
ldx 2
//SEG7 [2] *((word) 4352 + (byte) i#2) ← (byte~) $1 [ i#2 ] -- cowo1_staridx_xby=aby
sta 4352,x
//SEG8 [3] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- zpby1=zpby1_plus_1
inc 2
//SEG9 [4] if((byte) i#1<(byte) 10) goto @1 [ i#1 ] -- zpby1_lt_coby1_then_la1
lda 2
cmp #10
//SEG8 [3] (byte) i#1 ← (byte) i#2 + (byte) 1 [ i#1 ] -- xby=xby_plus_1
inx
//SEG9 [4] if((byte) i#1<(byte) 10) goto @1 [ i#1 ] -- xby_lt_coby1_then_la1
cpx #10
bcc B1_from_B1
//SEG10 @END
BEND:

View File

@ -1,11 +1,11 @@
(byte~) $1 zp byte:3 22.0
(byte~) $1 reg byte a 22.0
(label) @1
(label) @BEGIN
(label) @END
(byte) i
(byte) i#1 zp byte:2 16.5
(byte) i#2 zp byte:2 14.666666666666666
(byte) i#1 reg byte x 16.5
(byte) i#2 reg byte x 14.666666666666666
(byte[16]) p
zp byte:2 [ i#2 i#1 ]
zp byte:3 [ $1 ]
reg byte x [ i#2 i#1 ]
reg byte a [ $1 ]

View File

@ -14,72 +14,61 @@ main__Breturn:
lvaluevar:
lvaluevar__B1_from_lvaluevar:
lda #<1024
sta 3
lda #>1024
sta 3+1
lda #2
sta 2
lda #>1024
sta 2+1
ldx #2
lvaluevar__B1:
lda 2
cmp #10
cpx #10
bcc lvaluevar__B2
lvaluevar__Breturn:
rts
lvaluevar__B2:
ldy #0
lda #4
sta (3),y
inc 3
bne !+
inc 3+1
!:
sta (2),y
inc 2
bne !+
inc 2+1
!:
inx
lvaluevar__B1_from_B2:
jmp lvaluevar__B1
rvaluevar:
rvaluevar__B1_from_rvaluevar:
lda #<1024
sta 6
sta 2
lda #>1024
sta 6+1
lda #2
sta 5
sta 2+1
ldx #2
rvaluevar__B1:
lda 5
cmp #10
cpx #10
bcc rvaluevar__B2
rvaluevar__Breturn:
rts
rvaluevar__B2:
ldy #0
lda (6),y
sta 10
inc 6
lda (2),y
inc 2
bne !+
inc 6+1
inc 2+1
!:
inc 5
inx
rvaluevar__B1_from_B2:
jmp rvaluevar__B1
rvalue:
lda 1024
sta 11
lda 1025
sta 12
rvalue__B1_from_rvalue:
lda #2
sta 8
ldx #2
rvalue__B1:
lda 8
cmp #10
cpx #10
bcc rvalue__B2
rvalue__Breturn:
rts
rvalue__B2:
ldx 8
lda 1024,x
sta 13
inc 8
inx
rvalue__B1_from_B2:
jmp rvalue__B1
lvalue:
@ -88,18 +77,15 @@ lvalue:
lda #2
sta 1025
lvalue__B1_from_lvalue:
lda #2
sta 9
ldx #2
lvalue__B1:
lda 9
cmp #10
cpx #10
bcc lvalue__B2
lvalue__Breturn:
rts
lvalue__B2:
lda #3
ldx 9
sta 1024,x
inc 9
inx
lvalue__B1_from_B2:
jmp lvalue__B1

View File

@ -2066,63 +2066,304 @@ lvalue__B1_from_B2:
//SEG70 [27] phi (byte) lvalue::i#2 = (byte) lvalue::i#1 -- register_copy
jmp lvalue__B1
Uplifting max weight Infinity live range equivalence class zp byte:10 [ rvaluevar::b#0 ]
Uplift to reg byte a succesfull.
Uplift to reg byte x succesfull.
Uplift to reg byte y succesfull.
REGISTER UPLIFTING
(void()) lvalue()
(byte[1024]) lvalue::SCREEN
(byte) lvalue::i
(byte) lvalue::i#1 zp byte:9 22.0
(byte) lvalue::i#2 zp byte:9 14.666666666666666
(void()) lvaluevar()
(byte) lvaluevar::b
(byte) lvaluevar::i
(byte) lvaluevar::i#1 zp byte:2 22.0
(byte) lvaluevar::i#2 zp byte:2 8.25
(byte*) lvaluevar::screen
(byte*) lvaluevar::screen#1 zp ptr byte:3 11.0
(byte*) lvaluevar::screen#2 zp ptr byte:3 11.0
(void()) main()
(void()) rvalue()
(byte[1024]) rvalue::SCREEN
(byte) rvalue::b
(byte) rvalue::b#0 zp byte:11 Infinity
(byte) rvalue::b#1 zp byte:12 Infinity
(byte) rvalue::b#2 zp byte:13 Infinity
(byte) rvalue::i
(byte) rvalue::i#1 zp byte:8 22.0
(byte) rvalue::i#2 zp byte:8 14.666666666666666
(void()) rvaluevar()
(byte) rvaluevar::b
(byte) rvaluevar::b#0 zp byte:10 Infinity
(byte) rvaluevar::i
(byte) rvaluevar::i#1 zp byte:5 22.0
(byte) rvaluevar::i#2 zp byte:5 8.25
(byte*) rvaluevar::screen
(byte*) rvaluevar::screen#1 zp ptr byte:6 11.0
(byte*) rvaluevar::screen#2 zp ptr byte:6 11.0
REGISTER UPLIFT SCOPES
Uplift Scope [main]
Uplift Scope [lvalue] 36.67: zp byte:9 [ lvalue::i#2 lvalue::i#1 ]
Uplift Scope [rvalue] ∞: zp byte:11 [ rvalue::b#0 ] ∞: zp byte:12 [ rvalue::b#1 ] ∞: zp byte:13 [ rvalue::b#2 ] 36.67: zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift Scope [lvaluevar] 30.25: zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 ] 22: zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
Uplift Scope [rvaluevar] ∞: zp byte:10 [ rvaluevar::b#0 ] 30.25: zp byte:5 [ rvaluevar::i#2 rvaluevar::i#1 ] 22: zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift Scope []
zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 ]
zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
zp byte:5 [ rvaluevar::i#2 rvaluevar::i#1 ]
zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
zp byte:9 [ lvalue::i#2 lvalue::i#1 ]
zp byte:10 [ rvaluevar::b#0 ]
zp byte:11 [ rvalue::b#0 ]
zp byte:12 [ rvalue::b#1 ]
zp byte:13 [ rvalue::b#2 ]
Coalescing zero page register [ zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 ] ] with [ zp byte:5 [ rvaluevar::i#2 rvaluevar::i#1 ] ]
Coalescing zero page register [ zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 rvaluevar::i#2 rvaluevar::i#1 ] ] with [ zp byte:8 [ rvalue::i#2 rvalue::i#1 ] ]
Coalescing zero page register [ zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 rvaluevar::i#2 rvaluevar::i#1 rvalue::i#2 rvalue::i#1 ] ] with [ zp byte:9 [ lvalue::i#2 lvalue::i#1 ] ]
Coalescing zero page register [ zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 rvaluevar::i#2 rvaluevar::i#1 rvalue::i#2 rvalue::i#1 lvalue::i#2 lvalue::i#1 ] ] with [ zp byte:10 [ rvaluevar::b#0 ] ]
Coalescing zero page register [ zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 rvaluevar::i#2 rvaluevar::i#1 rvalue::i#2 rvalue::i#1 lvalue::i#2 lvalue::i#1 rvaluevar::b#0 ] ] with [ zp byte:11 [ rvalue::b#0 ] ]
Coalescing zero page register [ zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 rvaluevar::i#2 rvaluevar::i#1 rvalue::i#2 rvalue::i#1 lvalue::i#2 lvalue::i#1 rvaluevar::b#0 rvalue::b#0 ] ] with [ zp byte:12 [ rvalue::b#1 ] ]
Coalescing zero page register [ zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 rvaluevar::i#2 rvaluevar::i#1 rvalue::i#2 rvalue::i#1 lvalue::i#2 lvalue::i#1 rvaluevar::b#0 rvalue::b#0 rvalue::b#1 ] ] with [ zp byte:13 [ rvalue::b#2 ] ]
Uplift attempt [main] 197 allocation:
Uplifting [main] best 197 combination
Uplift attempt [lvalue] 197 allocation: zp byte:9 [ lvalue::i#2 lvalue::i#1 ]
Uplift attempt [lvalue] clobber allocation: reg byte a [ lvalue::i#2 lvalue::i#1 ]
Uplift attempt [lvalue] 190 allocation: reg byte x [ lvalue::i#2 lvalue::i#1 ]
Uplift attempt [lvalue] 191 allocation: reg byte y [ lvalue::i#2 lvalue::i#1 ]
Uplifting [lvalue] best 190 combination reg byte x [ lvalue::i#2 lvalue::i#1 ]
Uplift attempt [rvalue] 190 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 188 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 188 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 188 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 188 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 188 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 188 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 188 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 184 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 184 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 184 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 184 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 184 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 184 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 184 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 184 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 184 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 189 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 187 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 187 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 187 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 187 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 185 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 185 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 185 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 187 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 185 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 185 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 185 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 187 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 185 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 185 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 185 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 190 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 188 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 188 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 188 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 188 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 188 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 188 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 186 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] zp byte:8 [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte a [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 183 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 181 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 181 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 181 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 181 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 181 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 181 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 181 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 181 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 179 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 177 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 184 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 182 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 182 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 182 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 182 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 182 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 182 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] zp byte:13 [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 182 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 182 allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 180 allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] 178 allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte x [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] zp byte:12 [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte x [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: zp byte:11 [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte a [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte x [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [rvalue] clobber allocation: reg byte y [ rvalue::b#0 ] reg byte y [ rvalue::b#1 ] reg byte y [ rvalue::b#2 ] reg byte y [ rvalue::i#2 rvalue::i#1 ]
Uplifting [rvalue] best 177 combination reg byte a [ rvalue::b#0 ] reg byte a [ rvalue::b#1 ] reg byte a [ rvalue::b#2 ] reg byte x [ rvalue::i#2 rvalue::i#1 ]
Uplift attempt [lvaluevar] 177 allocation: zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 ] zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
Uplift attempt [lvaluevar] clobber allocation: reg byte a [ lvaluevar::i#2 lvaluevar::i#1 ] zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
Uplift attempt [lvaluevar] 172 allocation: reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
Uplift attempt [lvaluevar] clobber allocation: reg byte y [ lvaluevar::i#2 lvaluevar::i#1 ] zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
Uplifting [lvaluevar] best 172 combination reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ] zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ]
Uplift attempt [rvaluevar] 172 allocation: zp byte:10 [ rvaluevar::b#0 ] zp byte:5 [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift attempt [rvaluevar] 170 allocation: reg byte a [ rvaluevar::b#0 ] zp byte:5 [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift attempt [rvaluevar] 171 allocation: reg byte x [ rvaluevar::b#0 ] zp byte:5 [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift attempt [rvaluevar] 171 allocation: reg byte y [ rvaluevar::b#0 ] zp byte:5 [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift attempt [rvaluevar] clobber allocation: zp byte:10 [ rvaluevar::b#0 ] reg byte a [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift attempt [rvaluevar] clobber allocation: reg byte a [ rvaluevar::b#0 ] reg byte a [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift attempt [rvaluevar] clobber allocation: reg byte x [ rvaluevar::b#0 ] reg byte a [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift attempt [rvaluevar] clobber allocation: reg byte y [ rvaluevar::b#0 ] reg byte a [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift attempt [rvaluevar] 167 allocation: zp byte:10 [ rvaluevar::b#0 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift attempt [rvaluevar] 165 allocation: reg byte a [ rvaluevar::b#0 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift attempt [rvaluevar] clobber allocation: reg byte x [ rvaluevar::b#0 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift attempt [rvaluevar] 166 allocation: reg byte y [ rvaluevar::b#0 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift attempt [rvaluevar] clobber allocation: zp byte:10 [ rvaluevar::b#0 ] reg byte y [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift attempt [rvaluevar] clobber allocation: reg byte a [ rvaluevar::b#0 ] reg byte y [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift attempt [rvaluevar] clobber allocation: reg byte x [ rvaluevar::b#0 ] reg byte y [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift attempt [rvaluevar] clobber allocation: reg byte y [ rvaluevar::b#0 ] reg byte y [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplifting [rvaluevar] best 165 combination reg byte a [ rvaluevar::b#0 ] reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ] zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ]
Uplift attempt [] 165 allocation:
Uplifting [] best 165 combination
Coalescing zero page register [ zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 ] ] with [ zp ptr byte:6 [ rvaluevar::screen#2 rvaluevar::screen#1 ] ]
Re-allocated ZP register from zp ptr byte:3 to zp ptr byte:2
Removing instruction jmp BEND
Removing instruction jmp main__B1
Removing instruction jmp main__B2
@ -2170,17 +2411,15 @@ lvaluevar:
lvaluevar__B1_from_lvaluevar:
//SEG15 [6] phi (byte*) lvaluevar::screen#2 = (word) 1024 -- zpptrby1=cowo1
lda #<1024
sta 3
lda #>1024
sta 3+1
//SEG16 [6] phi (byte) lvaluevar::i#2 = (byte) 2 -- zpby1=coby1
lda #2
sta 2
lda #>1024
sta 2+1
//SEG16 [6] phi (byte) lvaluevar::i#2 = (byte) 2 -- xby=coby1
ldx #2
//SEG17 lvaluevar::@1
lvaluevar__B1:
//SEG18 [7] if((byte) lvaluevar::i#2<(byte) 10) goto lvaluevar::@2 [ lvaluevar::i#2 lvaluevar::screen#2 ] -- zpby1_lt_coby1_then_la1
lda 2
cmp #10
//SEG18 [7] if((byte) lvaluevar::i#2<(byte) 10) goto lvaluevar::@2 [ lvaluevar::i#2 lvaluevar::screen#2 ] -- xby_lt_coby1_then_la1
cpx #10
bcc lvaluevar__B2
//SEG19 lvaluevar::@return
lvaluevar__Breturn:
@ -2191,14 +2430,14 @@ lvaluevar__B2:
//SEG22 [9] *((byte*) lvaluevar::screen#2) ← (byte) 4 [ lvaluevar::i#2 lvaluevar::screen#2 ] -- _star_zpptrby1=coby1
ldy #0
lda #4
sta (3),y
sta (2),y
//SEG23 [10] (byte*) lvaluevar::screen#1 ← ++ (byte*) lvaluevar::screen#2 [ lvaluevar::screen#1 lvaluevar::i#2 ] -- zpptrby1=_inc_zpptrby1
inc 3
bne !+
inc 3+1
!:
//SEG24 [11] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#2 [ lvaluevar::i#1 lvaluevar::screen#1 ] -- zpby1=_inc_zpby1
inc 2
bne !+
inc 2+1
!:
//SEG24 [11] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#2 [ lvaluevar::i#1 lvaluevar::screen#1 ] -- xby=_inc_xby
inx
//SEG25 [6] phi from lvaluevar::@2 to lvaluevar::@1
lvaluevar__B1_from_B2:
//SEG26 [6] phi (byte*) lvaluevar::screen#2 = (byte*) lvaluevar::screen#1 -- register_copy
@ -2210,17 +2449,15 @@ rvaluevar:
rvaluevar__B1_from_rvaluevar:
//SEG30 [12] phi (byte*) rvaluevar::screen#2 = (word) 1024 -- zpptrby1=cowo1
lda #<1024
sta 6
sta 2
lda #>1024
sta 6+1
//SEG31 [12] phi (byte) rvaluevar::i#2 = (byte) 2 -- zpby1=coby1
lda #2
sta 5
sta 2+1
//SEG31 [12] phi (byte) rvaluevar::i#2 = (byte) 2 -- xby=coby1
ldx #2
//SEG32 rvaluevar::@1
rvaluevar__B1:
//SEG33 [13] if((byte) rvaluevar::i#2<(byte) 10) goto rvaluevar::@2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- zpby1_lt_coby1_then_la1
lda 5
cmp #10
//SEG33 [13] if((byte) rvaluevar::i#2<(byte) 10) goto rvaluevar::@2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- xby_lt_coby1_then_la1
cpx #10
bcc rvaluevar__B2
//SEG34 rvaluevar::@return
rvaluevar__Breturn:
@ -2228,17 +2465,16 @@ rvaluevar__Breturn:
rts
//SEG36 rvaluevar::@2
rvaluevar__B2:
//SEG37 [15] (byte) rvaluevar::b#0 ← * (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- zpby1=_star_zpptrby1
//SEG37 [15] (byte) rvaluevar::b#0 ← * (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- aby=_star_zpptrby1
ldy #0
lda (6),y
sta 10
lda (2),y
//SEG38 [16] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 [ rvaluevar::screen#1 rvaluevar::i#2 ] -- zpptrby1=_inc_zpptrby1
inc 6
inc 2
bne !+
inc 6+1
inc 2+1
!:
//SEG39 [17] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 rvaluevar::screen#1 ] -- zpby1=_inc_zpby1
inc 5
//SEG39 [17] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 rvaluevar::screen#1 ] -- xby=_inc_xby
inx
//SEG40 [12] phi from rvaluevar::@2 to rvaluevar::@1
rvaluevar__B1_from_B2:
//SEG41 [12] phi (byte*) rvaluevar::screen#2 = (byte*) rvaluevar::screen#1 -- register_copy
@ -2246,22 +2482,18 @@ rvaluevar__B1_from_B2:
jmp rvaluevar__B1
//SEG43 rvalue
rvalue:
//SEG44 [18] (byte) rvalue::b#0 ← * (word) 1024 [ ] -- zpby1=_star_cowo1
//SEG44 [18] (byte) rvalue::b#0 ← * (word) 1024 [ ] -- aby=_star_cowo1
lda 1024
sta 11
//SEG45 [19] (byte) rvalue::b#1 ← * (word) 1025 [ ] -- zpby1=_star_cowo1
//SEG45 [19] (byte) rvalue::b#1 ← * (word) 1025 [ ] -- aby=_star_cowo1
lda 1025
sta 12
//SEG46 [20] phi from rvalue to rvalue::@1
rvalue__B1_from_rvalue:
//SEG47 [20] phi (byte) rvalue::i#2 = (byte) 2 -- zpby1=coby1
lda #2
sta 8
//SEG47 [20] phi (byte) rvalue::i#2 = (byte) 2 -- xby=coby1
ldx #2
//SEG48 rvalue::@1
rvalue__B1:
//SEG49 [21] if((byte) rvalue::i#2<(byte) 10) goto rvalue::@2 [ rvalue::i#2 ] -- zpby1_lt_coby1_then_la1
lda 8
cmp #10
//SEG49 [21] if((byte) rvalue::i#2<(byte) 10) goto rvalue::@2 [ rvalue::i#2 ] -- xby_lt_coby1_then_la1
cpx #10
bcc rvalue__B2
//SEG50 rvalue::@return
rvalue__Breturn:
@ -2269,12 +2501,10 @@ rvalue__Breturn:
rts
//SEG52 rvalue::@2
rvalue__B2:
//SEG53 [23] (byte) rvalue::b#2 ← (word) 1024 *idx (byte) rvalue::i#2 [ rvalue::i#2 ] -- zpby1=cowo1_staridx_zpby2
ldx 8
//SEG53 [23] (byte) rvalue::b#2 ← (word) 1024 *idx (byte) rvalue::i#2 [ rvalue::i#2 ] -- aby=cowo1_staridx_xby
lda 1024,x
sta 13
//SEG54 [24] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] -- zpby1=_inc_zpby1
inc 8
//SEG54 [24] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] -- xby=_inc_xby
inx
//SEG55 [20] phi from rvalue::@2 to rvalue::@1
rvalue__B1_from_B2:
//SEG56 [20] phi (byte) rvalue::i#2 = (byte) rvalue::i#1 -- register_copy
@ -2289,14 +2519,12 @@ lvalue:
sta 1025
//SEG60 [27] phi from lvalue to lvalue::@1
lvalue__B1_from_lvalue:
//SEG61 [27] phi (byte) lvalue::i#2 = (byte) 2 -- zpby1=coby1
lda #2
sta 9
//SEG61 [27] phi (byte) lvalue::i#2 = (byte) 2 -- xby=coby1
ldx #2
//SEG62 lvalue::@1
lvalue__B1:
//SEG63 [28] if((byte) lvalue::i#2<(byte) 10) goto lvalue::@2 [ lvalue::i#2 ] -- zpby1_lt_coby1_then_la1
lda 9
cmp #10
//SEG63 [28] if((byte) lvalue::i#2<(byte) 10) goto lvalue::@2 [ lvalue::i#2 ] -- xby_lt_coby1_then_la1
cpx #10
bcc lvalue__B2
//SEG64 lvalue::@return
lvalue__Breturn:
@ -2304,12 +2532,11 @@ lvalue__Breturn:
rts
//SEG66 lvalue::@2
lvalue__B2:
//SEG67 [30] *((word) 1024 + (byte) lvalue::i#2) ← (byte) 3 [ lvalue::i#2 ] -- cowo1_staridx_zpby1=coby2
//SEG67 [30] *((word) 1024 + (byte) lvalue::i#2) ← (byte) 3 [ lvalue::i#2 ] -- cowo1_staridx_xby=coby2
lda #3
ldx 9
sta 1024,x
//SEG68 [31] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] -- zpby1=_inc_zpby1
inc 9
//SEG68 [31] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] -- xby=_inc_xby
inx
//SEG69 [27] phi from lvalue::@2 to lvalue::@1
lvalue__B1_from_B2:
//SEG70 [27] phi (byte) lvalue::i#2 = (byte) lvalue::i#1 -- register_copy
@ -2324,19 +2551,19 @@ FINAL SYMBOL TABLE
(label) lvalue::@return
(byte[1024]) lvalue::SCREEN
(byte) lvalue::i
(byte) lvalue::i#1 zp byte:9 22.0
(byte) lvalue::i#2 zp byte:9 14.666666666666666
(byte) lvalue::i#1 reg byte x 22.0
(byte) lvalue::i#2 reg byte x 14.666666666666666
(void()) lvaluevar()
(label) lvaluevar::@1
(label) lvaluevar::@2
(label) lvaluevar::@return
(byte) lvaluevar::b
(byte) lvaluevar::i
(byte) lvaluevar::i#1 zp byte:2 22.0
(byte) lvaluevar::i#2 zp byte:2 8.25
(byte) lvaluevar::i#1 reg byte x 22.0
(byte) lvaluevar::i#2 reg byte x 8.25
(byte*) lvaluevar::screen
(byte*) lvaluevar::screen#1 zp ptr byte:3 11.0
(byte*) lvaluevar::screen#2 zp ptr byte:3 11.0
(byte*) lvaluevar::screen#1 zp ptr byte:2 11.0
(byte*) lvaluevar::screen#2 zp ptr byte:2 11.0
(void()) main()
(label) main::@1
(label) main::@2
@ -2348,27 +2575,34 @@ FINAL SYMBOL TABLE
(label) rvalue::@return
(byte[1024]) rvalue::SCREEN
(byte) rvalue::b
(byte) rvalue::b#0 zp byte:11 Infinity
(byte) rvalue::b#1 zp byte:12 Infinity
(byte) rvalue::b#2 zp byte:13 Infinity
(byte) rvalue::b#0 reg byte a Infinity
(byte) rvalue::b#1 reg byte a Infinity
(byte) rvalue::b#2 reg byte a Infinity
(byte) rvalue::i
(byte) rvalue::i#1 zp byte:8 22.0
(byte) rvalue::i#2 zp byte:8 14.666666666666666
(byte) rvalue::i#1 reg byte x 22.0
(byte) rvalue::i#2 reg byte x 14.666666666666666
(void()) rvaluevar()
(label) rvaluevar::@1
(label) rvaluevar::@2
(label) rvaluevar::@return
(byte) rvaluevar::b
(byte) rvaluevar::b#0 zp byte:10 Infinity
(byte) rvaluevar::b#0 reg byte a Infinity
(byte) rvaluevar::i
(byte) rvaluevar::i#1 zp byte:5 22.0
(byte) rvaluevar::i#2 zp byte:5 8.25
(byte) rvaluevar::i#1 reg byte x 22.0
(byte) rvaluevar::i#2 reg byte x 8.25
(byte*) rvaluevar::screen
(byte*) rvaluevar::screen#1 zp ptr byte:6 11.0
(byte*) rvaluevar::screen#2 zp ptr byte:6 11.0
(byte*) rvaluevar::screen#1 zp ptr byte:2 11.0
(byte*) rvaluevar::screen#2 zp ptr byte:2 11.0
zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 rvaluevar::i#2 rvaluevar::i#1 rvalue::i#2 rvalue::i#1 lvalue::i#2 lvalue::i#1 rvaluevar::b#0 rvalue::b#0 rvalue::b#1 rvalue::b#2 ]
zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ]
reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ]
zp ptr byte:2 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ]
reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ]
reg byte x [ rvalue::i#2 rvalue::i#1 ]
reg byte x [ lvalue::i#2 lvalue::i#1 ]
reg byte a [ rvaluevar::b#0 ]
reg byte a [ rvalue::b#0 ]
reg byte a [ rvalue::b#1 ]
reg byte a [ rvalue::b#2 ]
FINAL CODE
//SEG0 @BEGIN
@ -2403,17 +2637,15 @@ lvaluevar:
lvaluevar__B1_from_lvaluevar:
//SEG15 [6] phi (byte*) lvaluevar::screen#2 = (word) 1024 -- zpptrby1=cowo1
lda #<1024
sta 3
lda #>1024
sta 3+1
//SEG16 [6] phi (byte) lvaluevar::i#2 = (byte) 2 -- zpby1=coby1
lda #2
sta 2
lda #>1024
sta 2+1
//SEG16 [6] phi (byte) lvaluevar::i#2 = (byte) 2 -- xby=coby1
ldx #2
//SEG17 lvaluevar::@1
lvaluevar__B1:
//SEG18 [7] if((byte) lvaluevar::i#2<(byte) 10) goto lvaluevar::@2 [ lvaluevar::i#2 lvaluevar::screen#2 ] -- zpby1_lt_coby1_then_la1
lda 2
cmp #10
//SEG18 [7] if((byte) lvaluevar::i#2<(byte) 10) goto lvaluevar::@2 [ lvaluevar::i#2 lvaluevar::screen#2 ] -- xby_lt_coby1_then_la1
cpx #10
bcc lvaluevar__B2
//SEG19 lvaluevar::@return
lvaluevar__Breturn:
@ -2424,14 +2656,14 @@ lvaluevar__B2:
//SEG22 [9] *((byte*) lvaluevar::screen#2) ← (byte) 4 [ lvaluevar::i#2 lvaluevar::screen#2 ] -- _star_zpptrby1=coby1
ldy #0
lda #4
sta (3),y
sta (2),y
//SEG23 [10] (byte*) lvaluevar::screen#1 ← ++ (byte*) lvaluevar::screen#2 [ lvaluevar::screen#1 lvaluevar::i#2 ] -- zpptrby1=_inc_zpptrby1
inc 3
bne !+
inc 3+1
!:
//SEG24 [11] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#2 [ lvaluevar::i#1 lvaluevar::screen#1 ] -- zpby1=_inc_zpby1
inc 2
bne !+
inc 2+1
!:
//SEG24 [11] (byte) lvaluevar::i#1 ← ++ (byte) lvaluevar::i#2 [ lvaluevar::i#1 lvaluevar::screen#1 ] -- xby=_inc_xby
inx
//SEG25 [6] phi from lvaluevar::@2 to lvaluevar::@1
lvaluevar__B1_from_B2:
//SEG26 [6] phi (byte*) lvaluevar::screen#2 = (byte*) lvaluevar::screen#1 -- register_copy
@ -2443,17 +2675,15 @@ rvaluevar:
rvaluevar__B1_from_rvaluevar:
//SEG30 [12] phi (byte*) rvaluevar::screen#2 = (word) 1024 -- zpptrby1=cowo1
lda #<1024
sta 6
sta 2
lda #>1024
sta 6+1
//SEG31 [12] phi (byte) rvaluevar::i#2 = (byte) 2 -- zpby1=coby1
lda #2
sta 5
sta 2+1
//SEG31 [12] phi (byte) rvaluevar::i#2 = (byte) 2 -- xby=coby1
ldx #2
//SEG32 rvaluevar::@1
rvaluevar__B1:
//SEG33 [13] if((byte) rvaluevar::i#2<(byte) 10) goto rvaluevar::@2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- zpby1_lt_coby1_then_la1
lda 5
cmp #10
//SEG33 [13] if((byte) rvaluevar::i#2<(byte) 10) goto rvaluevar::@2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- xby_lt_coby1_then_la1
cpx #10
bcc rvaluevar__B2
//SEG34 rvaluevar::@return
rvaluevar__Breturn:
@ -2461,17 +2691,16 @@ rvaluevar__Breturn:
rts
//SEG36 rvaluevar::@2
rvaluevar__B2:
//SEG37 [15] (byte) rvaluevar::b#0 ← * (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- zpby1=_star_zpptrby1
//SEG37 [15] (byte) rvaluevar::b#0 ← * (byte*) rvaluevar::screen#2 [ rvaluevar::i#2 rvaluevar::screen#2 ] -- aby=_star_zpptrby1
ldy #0
lda (6),y
sta 10
lda (2),y
//SEG38 [16] (byte*) rvaluevar::screen#1 ← ++ (byte*) rvaluevar::screen#2 [ rvaluevar::screen#1 rvaluevar::i#2 ] -- zpptrby1=_inc_zpptrby1
inc 6
inc 2
bne !+
inc 6+1
inc 2+1
!:
//SEG39 [17] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 rvaluevar::screen#1 ] -- zpby1=_inc_zpby1
inc 5
//SEG39 [17] (byte) rvaluevar::i#1 ← ++ (byte) rvaluevar::i#2 [ rvaluevar::i#1 rvaluevar::screen#1 ] -- xby=_inc_xby
inx
//SEG40 [12] phi from rvaluevar::@2 to rvaluevar::@1
rvaluevar__B1_from_B2:
//SEG41 [12] phi (byte*) rvaluevar::screen#2 = (byte*) rvaluevar::screen#1 -- register_copy
@ -2479,22 +2708,18 @@ rvaluevar__B1_from_B2:
jmp rvaluevar__B1
//SEG43 rvalue
rvalue:
//SEG44 [18] (byte) rvalue::b#0 ← * (word) 1024 [ ] -- zpby1=_star_cowo1
//SEG44 [18] (byte) rvalue::b#0 ← * (word) 1024 [ ] -- aby=_star_cowo1
lda 1024
sta 11
//SEG45 [19] (byte) rvalue::b#1 ← * (word) 1025 [ ] -- zpby1=_star_cowo1
//SEG45 [19] (byte) rvalue::b#1 ← * (word) 1025 [ ] -- aby=_star_cowo1
lda 1025
sta 12
//SEG46 [20] phi from rvalue to rvalue::@1
rvalue__B1_from_rvalue:
//SEG47 [20] phi (byte) rvalue::i#2 = (byte) 2 -- zpby1=coby1
lda #2
sta 8
//SEG47 [20] phi (byte) rvalue::i#2 = (byte) 2 -- xby=coby1
ldx #2
//SEG48 rvalue::@1
rvalue__B1:
//SEG49 [21] if((byte) rvalue::i#2<(byte) 10) goto rvalue::@2 [ rvalue::i#2 ] -- zpby1_lt_coby1_then_la1
lda 8
cmp #10
//SEG49 [21] if((byte) rvalue::i#2<(byte) 10) goto rvalue::@2 [ rvalue::i#2 ] -- xby_lt_coby1_then_la1
cpx #10
bcc rvalue__B2
//SEG50 rvalue::@return
rvalue__Breturn:
@ -2502,12 +2727,10 @@ rvalue__Breturn:
rts
//SEG52 rvalue::@2
rvalue__B2:
//SEG53 [23] (byte) rvalue::b#2 ← (word) 1024 *idx (byte) rvalue::i#2 [ rvalue::i#2 ] -- zpby1=cowo1_staridx_zpby2
ldx 8
//SEG53 [23] (byte) rvalue::b#2 ← (word) 1024 *idx (byte) rvalue::i#2 [ rvalue::i#2 ] -- aby=cowo1_staridx_xby
lda 1024,x
sta 13
//SEG54 [24] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] -- zpby1=_inc_zpby1
inc 8
//SEG54 [24] (byte) rvalue::i#1 ← ++ (byte) rvalue::i#2 [ rvalue::i#1 ] -- xby=_inc_xby
inx
//SEG55 [20] phi from rvalue::@2 to rvalue::@1
rvalue__B1_from_B2:
//SEG56 [20] phi (byte) rvalue::i#2 = (byte) rvalue::i#1 -- register_copy
@ -2522,14 +2745,12 @@ lvalue:
sta 1025
//SEG60 [27] phi from lvalue to lvalue::@1
lvalue__B1_from_lvalue:
//SEG61 [27] phi (byte) lvalue::i#2 = (byte) 2 -- zpby1=coby1
lda #2
sta 9
//SEG61 [27] phi (byte) lvalue::i#2 = (byte) 2 -- xby=coby1
ldx #2
//SEG62 lvalue::@1
lvalue__B1:
//SEG63 [28] if((byte) lvalue::i#2<(byte) 10) goto lvalue::@2 [ lvalue::i#2 ] -- zpby1_lt_coby1_then_la1
lda 9
cmp #10
//SEG63 [28] if((byte) lvalue::i#2<(byte) 10) goto lvalue::@2 [ lvalue::i#2 ] -- xby_lt_coby1_then_la1
cpx #10
bcc lvalue__B2
//SEG64 lvalue::@return
lvalue__Breturn:
@ -2537,12 +2758,11 @@ lvalue__Breturn:
rts
//SEG66 lvalue::@2
lvalue__B2:
//SEG67 [30] *((word) 1024 + (byte) lvalue::i#2) ← (byte) 3 [ lvalue::i#2 ] -- cowo1_staridx_zpby1=coby2
//SEG67 [30] *((word) 1024 + (byte) lvalue::i#2) ← (byte) 3 [ lvalue::i#2 ] -- cowo1_staridx_xby=coby2
lda #3
ldx 9
sta 1024,x
//SEG68 [31] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] -- zpby1=_inc_zpby1
inc 9
//SEG68 [31] (byte) lvalue::i#1 ← ++ (byte) lvalue::i#2 [ lvalue::i#1 ] -- xby=_inc_xby
inx
//SEG69 [27] phi from lvalue::@2 to lvalue::@1
lvalue__B1_from_B2:
//SEG70 [27] phi (byte) lvalue::i#2 = (byte) lvalue::i#1 -- register_copy

View File

@ -6,19 +6,19 @@
(label) lvalue::@return
(byte[1024]) lvalue::SCREEN
(byte) lvalue::i
(byte) lvalue::i#1 zp byte:9 22.0
(byte) lvalue::i#2 zp byte:9 14.666666666666666
(byte) lvalue::i#1 reg byte x 22.0
(byte) lvalue::i#2 reg byte x 14.666666666666666
(void()) lvaluevar()
(label) lvaluevar::@1
(label) lvaluevar::@2
(label) lvaluevar::@return
(byte) lvaluevar::b
(byte) lvaluevar::i
(byte) lvaluevar::i#1 zp byte:2 22.0
(byte) lvaluevar::i#2 zp byte:2 8.25
(byte) lvaluevar::i#1 reg byte x 22.0
(byte) lvaluevar::i#2 reg byte x 8.25
(byte*) lvaluevar::screen
(byte*) lvaluevar::screen#1 zp ptr byte:3 11.0
(byte*) lvaluevar::screen#2 zp ptr byte:3 11.0
(byte*) lvaluevar::screen#1 zp ptr byte:2 11.0
(byte*) lvaluevar::screen#2 zp ptr byte:2 11.0
(void()) main()
(label) main::@1
(label) main::@2
@ -30,24 +30,31 @@
(label) rvalue::@return
(byte[1024]) rvalue::SCREEN
(byte) rvalue::b
(byte) rvalue::b#0 zp byte:11 Infinity
(byte) rvalue::b#1 zp byte:12 Infinity
(byte) rvalue::b#2 zp byte:13 Infinity
(byte) rvalue::b#0 reg byte a Infinity
(byte) rvalue::b#1 reg byte a Infinity
(byte) rvalue::b#2 reg byte a Infinity
(byte) rvalue::i
(byte) rvalue::i#1 zp byte:8 22.0
(byte) rvalue::i#2 zp byte:8 14.666666666666666
(byte) rvalue::i#1 reg byte x 22.0
(byte) rvalue::i#2 reg byte x 14.666666666666666
(void()) rvaluevar()
(label) rvaluevar::@1
(label) rvaluevar::@2
(label) rvaluevar::@return
(byte) rvaluevar::b
(byte) rvaluevar::b#0 zp byte:10 Infinity
(byte) rvaluevar::b#0 reg byte a Infinity
(byte) rvaluevar::i
(byte) rvaluevar::i#1 zp byte:5 22.0
(byte) rvaluevar::i#2 zp byte:5 8.25
(byte) rvaluevar::i#1 reg byte x 22.0
(byte) rvaluevar::i#2 reg byte x 8.25
(byte*) rvaluevar::screen
(byte*) rvaluevar::screen#1 zp ptr byte:6 11.0
(byte*) rvaluevar::screen#2 zp ptr byte:6 11.0
(byte*) rvaluevar::screen#1 zp ptr byte:2 11.0
(byte*) rvaluevar::screen#2 zp ptr byte:2 11.0
zp byte:2 [ lvaluevar::i#2 lvaluevar::i#1 rvaluevar::i#2 rvaluevar::i#1 rvalue::i#2 rvalue::i#1 lvalue::i#2 lvalue::i#1 rvaluevar::b#0 rvalue::b#0 rvalue::b#1 rvalue::b#2 ]
zp ptr byte:3 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ]
reg byte x [ lvaluevar::i#2 lvaluevar::i#1 ]
zp ptr byte:2 [ lvaluevar::screen#2 lvaluevar::screen#1 rvaluevar::screen#2 rvaluevar::screen#1 ]
reg byte x [ rvaluevar::i#2 rvaluevar::i#1 ]
reg byte x [ rvalue::i#2 rvalue::i#1 ]
reg byte x [ lvalue::i#2 lvalue::i#1 ]
reg byte a [ rvaluevar::b#0 ]
reg byte a [ rvalue::b#0 ]
reg byte a [ rvalue::b#1 ]
reg byte a [ rvalue::b#2 ]

View File

@ -1,31 +1,19 @@
BBEGIN:
sum_from_BBEGIN:
lda #2
sta 3
lda #1
sta 2
jsr sum
B2:
lda 7
sta 4
sta 2
sum_from_B2:
lda #13
sta 3
lda #9
sta 2
jsr sum
B3:
lda 7
sta 5
lda 4
clc
adc 5
sta 6
adc 2
BEND:
sum:
lda 2
clc
adc 3
sta 7
asl
sum__Breturn:
rts

View File

@ -442,35 +442,187 @@ sum__Breturn:
//SEG18 [7] return [ sum::return#0 s1#0 ]
rts
Uplifting max weight Infinity live range equivalence class zp byte:6 [ s3#0 ]
Uplift to reg byte a succesfull.
Uplift to reg byte x succesfull.
Uplift to reg byte y succesfull.
REGISTER UPLIFTING
(byte) s1
(byte) s1#0 zp byte:4 0.5714285714285714
(byte) s2
(byte) s2#0 zp byte:5 4.0
(byte) s3
(byte) s3#0 zp byte:6 Infinity
(byte()) sum((byte) sum::a , (byte) sum::b)
(byte) sum::a
(byte) sum::a#2 zp byte:2 2.0
(byte) sum::b
(byte) sum::b#2 zp byte:3 2.0
(byte) sum::return
(byte) sum::return#0 zp byte:7 1.2000000000000002
REGISTER UPLIFT SCOPES
Uplift Scope [sum] 2: zp byte:2 [ sum::a#2 ] 2: zp byte:3 [ sum::b#2 ] 1.2: zp byte:7 [ sum::return#0 ]
Uplift Scope [] ∞: zp byte:6 [ s3#0 ] 4: zp byte:5 [ s2#0 ] 0.57: zp byte:4 [ s1#0 ]
zp byte:2 [ sum::a#2 ]
zp byte:3 [ sum::b#2 ]
zp byte:4 [ s1#0 ]
zp byte:5 [ s2#0 ]
zp byte:6 [ s3#0 ]
zp byte:7 [ sum::return#0 ]
Coalescing zero page register [ zp byte:2 [ sum::a#2 ] ] with [ zp byte:5 [ s2#0 ] ]
Coalescing zero page register [ zp byte:2 [ sum::a#2 s2#0 ] ] with [ zp byte:6 [ s3#0 ] ]
Coalescing zero page register [ zp byte:2 [ sum::a#2 s2#0 s3#0 ] ] with [ zp byte:7 [ sum::return#0 ] ]
Uplift attempt [sum] 57 allocation: zp byte:2 [ sum::a#2 ] zp byte:3 [ sum::b#2 ] zp byte:7 [ sum::return#0 ]
Uplift attempt [sum] 51 allocation: reg byte a [ sum::a#2 ] zp byte:3 [ sum::b#2 ] zp byte:7 [ sum::return#0 ]
Uplift attempt [sum] missing fragment zpby1=xby_plus_zpby2
Uplift attempt [sum] 52 allocation: reg byte y [ sum::a#2 ] zp byte:3 [ sum::b#2 ] zp byte:7 [ sum::return#0 ]
Uplift attempt [sum] missing fragment zpby1=zpby2_plus_aby
Uplift attempt [sum] 45 allocation: reg byte a [ sum::a#2 ] reg byte a [ sum::b#2 ] zp byte:7 [ sum::return#0 ]
Uplift attempt [sum] missing fragment zpby1=xby_plus_aby
Uplift attempt [sum] missing fragment zpby1=yby_plus_aby
Uplift attempt [sum] missing fragment zpby1=zpby2_plus_xby
Uplift attempt [sum] missing fragment zpby1=aby_plus_xby
Uplift attempt [sum] missing fragment zpby1=xby_plus_xby
Uplift attempt [sum] missing fragment zpby1=yby_plus_xby
Uplift attempt [sum] missing fragment zpby1=zpby2_plus_yby
Uplift attempt [sum] missing fragment zpby1=aby_plus_yby
Uplift attempt [sum] missing fragment zpby1=xby_plus_yby
Uplift attempt [sum] missing fragment zpby1=yby_plus_yby
Uplift attempt [sum] 51 allocation: zp byte:2 [ sum::a#2 ] zp byte:3 [ sum::b#2 ] reg byte a [ sum::return#0 ]
Uplift attempt [sum] 45 allocation: reg byte a [ sum::a#2 ] zp byte:3 [ sum::b#2 ] reg byte a [ sum::return#0 ]
Uplift attempt [sum] missing fragment aby=xby_plus_zpby1
Uplift attempt [sum] missing fragment aby=yby_plus_zpby1
Uplift attempt [sum] 45 allocation: zp byte:2 [ sum::a#2 ] reg byte a [ sum::b#2 ] reg byte a [ sum::return#0 ]
Uplift attempt [sum] 39 allocation: reg byte a [ sum::a#2 ] reg byte a [ sum::b#2 ] reg byte a [ sum::return#0 ]
Uplift attempt [sum] missing fragment aby=xby_plus_aby
Uplift attempt [sum] missing fragment aby=yby_plus_aby
Uplift attempt [sum] missing fragment aby=zpby1_plus_xby
Uplift attempt [sum] 43 allocation: reg byte a [ sum::a#2 ] reg byte x [ sum::b#2 ] reg byte a [ sum::return#0 ]
Uplift attempt [sum] 40 allocation: reg byte x [ sum::a#2 ] reg byte x [ sum::b#2 ] reg byte a [ sum::return#0 ]
Uplift attempt [sum] missing fragment aby=yby_plus_xby
Uplift attempt [sum] missing fragment aby=zpby1_plus_yby
Uplift attempt [sum] 43 allocation: reg byte a [ sum::a#2 ] reg byte y [ sum::b#2 ] reg byte a [ sum::return#0 ]
Uplift attempt [sum] missing fragment aby=xby_plus_yby
Uplift attempt [sum] missing fragment aby=yby_plus_yby
Uplift attempt [sum] 52 allocation: zp byte:2 [ sum::a#2 ] zp byte:3 [ sum::b#2 ] reg byte x [ sum::return#0 ]
Uplift attempt [sum] missing fragment xby=aby_plus_zpby1
Uplift attempt [sum] 47 allocation: reg byte x [ sum::a#2 ] zp byte:3 [ sum::b#2 ] reg byte x [ sum::return#0 ]
Uplift attempt [sum] missing fragment xby=yby_plus_zpby1
Uplift attempt [sum] missing fragment xby=zpby1_plus_aby
Uplift attempt [sum] missing fragment xby=aby_plus_aby
Uplift attempt [sum] 44 allocation: reg byte x [ sum::a#2 ] reg byte a [ sum::b#2 ] reg byte x [ sum::return#0 ]
Uplift attempt [sum] missing fragment xby=yby_plus_aby
Uplift attempt [sum] missing fragment xby=zpby1_plus_xby
Uplift attempt [sum] missing fragment xby=aby_plus_xby
Uplift attempt [sum] 41 allocation: reg byte x [ sum::a#2 ] reg byte x [ sum::b#2 ] reg byte x [ sum::return#0 ]
Uplift attempt [sum] missing fragment xby=yby_plus_xby
Uplift attempt [sum] missing fragment xby=zpby1_plus_yby
Uplift attempt [sum] missing fragment xby=aby_plus_yby
Uplift attempt [sum] 45 allocation: reg byte x [ sum::a#2 ] reg byte y [ sum::b#2 ] reg byte x [ sum::return#0 ]
Uplift attempt [sum] missing fragment xby=yby_plus_yby
Uplift attempt [sum] 52 allocation: zp byte:2 [ sum::a#2 ] zp byte:3 [ sum::b#2 ] reg byte y [ sum::return#0 ]
Uplift attempt [sum] missing fragment yby=aby_plus_zpby1
Uplift attempt [sum] missing fragment yby=xby_plus_zpby1
Uplift attempt [sum] 47 allocation: reg byte y [ sum::a#2 ] zp byte:3 [ sum::b#2 ] reg byte y [ sum::return#0 ]
Uplift attempt [sum] missing fragment yby=zpby1_plus_aby
Uplift attempt [sum] missing fragment yby=aby_plus_aby
Uplift attempt [sum] missing fragment yby=xby_plus_aby
Uplift attempt [sum] 44 allocation: reg byte y [ sum::a#2 ] reg byte a [ sum::b#2 ] reg byte y [ sum::return#0 ]
Uplift attempt [sum] missing fragment yby=zpby1_plus_xby
Uplift attempt [sum] missing fragment yby=aby_plus_xby
Uplift attempt [sum] missing fragment yby=xby_plus_xby
Uplift attempt [sum] 45 allocation: reg byte y [ sum::a#2 ] reg byte x [ sum::b#2 ] reg byte y [ sum::return#0 ]
Uplift attempt [sum] missing fragment yby=zpby1_plus_yby
Uplift attempt [sum] missing fragment yby=aby_plus_yby
Uplift attempt [sum] missing fragment yby=xby_plus_yby
Uplift attempt [sum] 41 allocation: reg byte y [ sum::a#2 ] reg byte y [ sum::b#2 ] reg byte y [ sum::return#0 ]
Uplifting [sum] best 39 combination reg byte a [ sum::a#2 ] reg byte a [ sum::b#2 ] reg byte a [ sum::return#0 ]
Uplift attempt [] 39 allocation: zp byte:6 [ s3#0 ] zp byte:5 [ s2#0 ] zp byte:4 [ s1#0 ]
Uplift attempt [] 37 allocation: reg byte a [ s3#0 ] zp byte:5 [ s2#0 ] zp byte:4 [ s1#0 ]
Uplift attempt [] 38 allocation: reg byte x [ s3#0 ] zp byte:5 [ s2#0 ] zp byte:4 [ s1#0 ]
Uplift attempt [] 38 allocation: reg byte y [ s3#0 ] zp byte:5 [ s2#0 ] zp byte:4 [ s1#0 ]
Uplift attempt [] missing fragment zpby1=zpby2_plus_aby
Uplift attempt [] 33 allocation: reg byte a [ s3#0 ] reg byte a [ s2#0 ] zp byte:4 [ s1#0 ]
Uplift attempt [] missing fragment xby=zpby1_plus_aby
Uplift attempt [] missing fragment yby=zpby1_plus_aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] clobber allocation: zp byte:6 [ s3#0 ] zp byte:5 [ s2#0 ] reg byte a [ s1#0 ]
Uplift attempt [] clobber allocation: reg byte a [ s3#0 ] zp byte:5 [ s2#0 ] reg byte a [ s1#0 ]
Uplift attempt [] missing fragment xby=aby_plus_zpby1
Uplift attempt [] missing fragment yby=aby_plus_zpby1
Uplift attempt [] clobber allocation: zp byte:6 [ s3#0 ] reg byte a [ s2#0 ] reg byte a [ s1#0 ]
Uplift attempt [] clobber allocation: reg byte a [ s3#0 ] reg byte a [ s2#0 ] reg byte a [ s1#0 ]
Uplift attempt [] missing fragment xby=aby_plus_aby
Uplift attempt [] missing fragment yby=aby_plus_aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment xby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplift attempt [] missing fragment yby=aby
Uplifting [] best 33 combination reg byte a [ s3#0 ] reg byte a [ s2#0 ] zp byte:4 [ s1#0 ]
MISSING FRAGMENTS
zpby1=xby_plus_zpby2
zpby1=zpby2_plus_aby
zpby1=xby_plus_aby
zpby1=yby_plus_aby
zpby1=zpby2_plus_xby
zpby1=aby_plus_xby
zpby1=xby_plus_xby
zpby1=yby_plus_xby
zpby1=zpby2_plus_yby
zpby1=aby_plus_yby
zpby1=xby_plus_yby
zpby1=yby_plus_yby
aby=xby_plus_zpby1
aby=yby_plus_zpby1
aby=xby_plus_aby
aby=yby_plus_aby
aby=zpby1_plus_xby
aby=yby_plus_xby
aby=zpby1_plus_yby
aby=xby_plus_yby
aby=yby_plus_yby
xby=aby_plus_zpby1
xby=yby_plus_zpby1
xby=zpby1_plus_aby
xby=aby_plus_aby
xby=yby_plus_aby
xby=zpby1_plus_xby
xby=aby_plus_xby
xby=yby_plus_xby
xby=zpby1_plus_yby
xby=aby_plus_yby
xby=yby_plus_yby
yby=aby_plus_zpby1
yby=xby_plus_zpby1
yby=zpby1_plus_aby
yby=aby_plus_aby
yby=xby_plus_aby
yby=zpby1_plus_xby
yby=aby_plus_xby
yby=xby_plus_xby
yby=zpby1_plus_yby
yby=aby_plus_yby
yby=xby_plus_yby
xby=aby
yby=aby
Re-allocated ZP register from zp byte:4 to zp byte:2
Removing instruction jmp B2
Removing instruction jmp B3
Removing instruction jmp BEND
@ -482,47 +634,36 @@ BBEGIN:
//SEG1 [0] call sum param-assignment [ sum::return#0 s1#0 ]
//SEG2 [5] phi from @BEGIN to sum
sum_from_BBEGIN:
//SEG3 [5] phi (byte) sum::b#2 = (byte) 2 -- zpby1=coby1
//SEG3 [5] phi (byte) sum::b#2 = (byte) 2 -- aby=coby1
lda #2
sta 3
//SEG4 [5] phi (byte) sum::a#2 = (byte) 1 -- zpby1=coby1
//SEG4 [5] phi (byte) sum::a#2 = (byte) 1 -- aby=coby1
lda #1
sta 2
jsr sum
//SEG5 @2
B2:
//SEG6 [1] (byte) s1#0 ← (byte) sum::return#0 [ sum::return#0 s1#0 ] -- zpby1=zpby2
lda 7
sta 4
//SEG6 [1] (byte) s1#0 ← (byte) sum::return#0 [ sum::return#0 s1#0 ] -- zpby1=aby
sta 2
//SEG7 [2] call sum param-assignment [ sum::return#0 s1#0 ]
//SEG8 [5] phi from @2 to sum
sum_from_B2:
//SEG9 [5] phi (byte) sum::b#2 = (byte) 13 -- zpby1=coby1
//SEG9 [5] phi (byte) sum::b#2 = (byte) 13 -- aby=coby1
lda #13
sta 3
//SEG10 [5] phi (byte) sum::a#2 = (byte) 9 -- zpby1=coby1
//SEG10 [5] phi (byte) sum::a#2 = (byte) 9 -- aby=coby1
lda #9
sta 2
jsr sum
//SEG11 @3
B3:
//SEG12 [3] (byte) s2#0 ← (byte) sum::return#0 [ s1#0 s2#0 ] -- zpby1=zpby2
lda 7
sta 5
//SEG13 [4] (byte) s3#0 ← (byte) s1#0 + (byte) s2#0 [ ] -- zpby1=zpby2_plus_zpby3
lda 4
//SEG12 [3] (byte) s2#0 ← (byte) sum::return#0 [ s1#0 s2#0 ]
// (byte) s2#0 = (byte) sum::return#0 // register copy reg byte a
//SEG13 [4] (byte) s3#0 ← (byte) s1#0 + (byte) s2#0 [ ] -- aby=zpby1_plus_aby
clc
adc 5
sta 6
adc 2
//SEG14 @END
BEND:
//SEG15 sum
sum:
//SEG16 [6] (byte) sum::return#0 ← (byte) sum::a#2 + (byte) sum::b#2 [ sum::return#0 s1#0 ] -- zpby1=zpby2_plus_zpby3
lda 2
clc
adc 3
sta 7
//SEG16 [6] (byte) sum::return#0 ← (byte) sum::a#2 + (byte) sum::b#2 [ sum::return#0 s1#0 ] -- aby=aby_plus_aby
asl
//SEG17 sum::@return
sum__Breturn:
//SEG18 [7] return [ sum::return#0 s1#0 ]
@ -534,23 +675,26 @@ FINAL SYMBOL TABLE
(label) @BEGIN
(label) @END
(byte) s1
(byte) s1#0 zp byte:4 0.5714285714285714
(byte) s1#0 zp byte:2 0.5714285714285714
(byte) s2
(byte) s2#0 zp byte:5 4.0
(byte) s2#0 reg byte a 4.0
(byte) s3
(byte) s3#0 zp byte:6 Infinity
(byte) s3#0 reg byte a Infinity
(byte()) sum((byte) sum::a , (byte) sum::b)
(label) sum::@return
(byte) sum::a
(byte) sum::a#2 zp byte:2 2.0
(byte) sum::a#2 reg byte a 2.0
(byte) sum::b
(byte) sum::b#2 zp byte:3 2.0
(byte) sum::b#2 reg byte a 2.0
(byte) sum::return
(byte) sum::return#0 zp byte:7 1.2000000000000002
(byte) sum::return#0 reg byte a 1.2000000000000002
zp byte:2 [ sum::a#2 s2#0 s3#0 sum::return#0 ]
zp byte:3 [ sum::b#2 ]
zp byte:4 [ s1#0 ]
reg byte a [ sum::a#2 ]
reg byte a [ sum::b#2 ]
zp byte:2 [ s1#0 ]
reg byte a [ s2#0 ]
reg byte a [ s3#0 ]
reg byte a [ sum::return#0 ]
FINAL CODE
//SEG0 @BEGIN
@ -558,47 +702,36 @@ BBEGIN:
//SEG1 [0] call sum param-assignment [ sum::return#0 s1#0 ]
//SEG2 [5] phi from @BEGIN to sum
sum_from_BBEGIN:
//SEG3 [5] phi (byte) sum::b#2 = (byte) 2 -- zpby1=coby1
//SEG3 [5] phi (byte) sum::b#2 = (byte) 2 -- aby=coby1
lda #2
sta 3
//SEG4 [5] phi (byte) sum::a#2 = (byte) 1 -- zpby1=coby1
//SEG4 [5] phi (byte) sum::a#2 = (byte) 1 -- aby=coby1
lda #1
sta 2
jsr sum
//SEG5 @2
B2:
//SEG6 [1] (byte) s1#0 ← (byte) sum::return#0 [ sum::return#0 s1#0 ] -- zpby1=zpby2
lda 7
sta 4
//SEG6 [1] (byte) s1#0 ← (byte) sum::return#0 [ sum::return#0 s1#0 ] -- zpby1=aby
sta 2
//SEG7 [2] call sum param-assignment [ sum::return#0 s1#0 ]
//SEG8 [5] phi from @2 to sum
sum_from_B2:
//SEG9 [5] phi (byte) sum::b#2 = (byte) 13 -- zpby1=coby1
//SEG9 [5] phi (byte) sum::b#2 = (byte) 13 -- aby=coby1
lda #13
sta 3
//SEG10 [5] phi (byte) sum::a#2 = (byte) 9 -- zpby1=coby1
//SEG10 [5] phi (byte) sum::a#2 = (byte) 9 -- aby=coby1
lda #9
sta 2
jsr sum
//SEG11 @3
B3:
//SEG12 [3] (byte) s2#0 ← (byte) sum::return#0 [ s1#0 s2#0 ] -- zpby1=zpby2
lda 7
sta 5
//SEG13 [4] (byte) s3#0 ← (byte) s1#0 + (byte) s2#0 [ ] -- zpby1=zpby2_plus_zpby3
lda 4
//SEG12 [3] (byte) s2#0 ← (byte) sum::return#0 [ s1#0 s2#0 ]
// (byte) s2#0 = (byte) sum::return#0 // register copy reg byte a
//SEG13 [4] (byte) s3#0 ← (byte) s1#0 + (byte) s2#0 [ ] -- aby=zpby1_plus_aby
clc
adc 5
sta 6
adc 2
//SEG14 @END
BEND:
//SEG15 sum
sum:
//SEG16 [6] (byte) sum::return#0 ← (byte) sum::a#2 + (byte) sum::b#2 [ sum::return#0 s1#0 ] -- zpby1=zpby2_plus_zpby3
lda 2
clc
adc 3
sta 7
//SEG16 [6] (byte) sum::return#0 ← (byte) sum::a#2 + (byte) sum::b#2 [ sum::return#0 s1#0 ] -- aby=aby_plus_aby
asl
//SEG17 sum::@return
sum__Breturn:
//SEG18 [7] return [ sum::return#0 s1#0 ]

View File

@ -3,20 +3,23 @@
(label) @BEGIN
(label) @END
(byte) s1
(byte) s1#0 zp byte:4 0.5714285714285714
(byte) s1#0 zp byte:2 0.5714285714285714
(byte) s2
(byte) s2#0 zp byte:5 4.0
(byte) s2#0 reg byte a 4.0
(byte) s3
(byte) s3#0 zp byte:6 Infinity
(byte) s3#0 reg byte a Infinity
(byte()) sum((byte) sum::a , (byte) sum::b)
(label) sum::@return
(byte) sum::a
(byte) sum::a#2 zp byte:2 2.0
(byte) sum::a#2 reg byte a 2.0
(byte) sum::b
(byte) sum::b#2 zp byte:3 2.0
(byte) sum::b#2 reg byte a 2.0
(byte) sum::return
(byte) sum::return#0 zp byte:7 1.2000000000000002
(byte) sum::return#0 reg byte a 1.2000000000000002
zp byte:2 [ sum::a#2 s2#0 s3#0 sum::return#0 ]
zp byte:3 [ sum::b#2 ]
zp byte:4 [ s1#0 ]
reg byte a [ sum::a#2 ]
reg byte a [ sum::b#2 ]
zp byte:2 [ s1#0 ]
reg byte a [ s2#0 ]
reg byte a [ s3#0 ]
reg byte a [ sum::return#0 ]

View File

@ -225,11 +225,14 @@ main__Breturn:
//SEG6 [2] return [ ]
rts
REGISTER UPLIFTING
(byte*) SCREEN
(void()) main()
REGISTER UPLIFT SCOPES
Uplift Scope [main]
Uplift Scope []
Uplift attempt [main] 15 allocation:
Uplifting [main] best 15 combination
Uplift attempt [] 15 allocation:
Uplifting [] best 15 combination
Removing instruction jmp BEND
Removing instruction jmp main__Breturn
Succesful ASM optimization Pass5NextJumpElimination