1
0
mirror of https://gitlab.com/camelot/kickc.git synced 2025-04-11 20:37:40 +00:00

Clean-up of pass 1 log to avoid modifying log-files evey time stdlib is modified.

This commit is contained in:
jespergravgaard 2020-04-25 20:10:49 +02:00
parent 031cde10e9
commit 793a776b04
761 changed files with 40077 additions and 54117 deletions
src
main
test/ref
address-0.logaddress-1.logaddress-2.logaddress-3.logaddress-4.logaddress-of-0.logaddress-of-1.logaddress-of-2.logaddress-of-3.logarray-16bit-lookup.logarray-length-symbolic-min.logarray-length-symbolic.logarrays-init-kasm-0.logarrays-init-short.logarrays-init.logasm-mnemonic-names.logasm-uses-0.logassignment-chained.logassignment-compound.logbitmap-circle-2.cfgbitmap-circle-2.logbitmap-circle-2.symbitmap-circle.cfgbitmap-circle.logbitmap-circle.symbitmap-line-anim-1.logbitmap-line-anim-2.cfgbitmap-line-anim-2.logbitmap-line-anim-2.symbitmap-plot-0.logbitmap-plot-1.cfgbitmap-plot-1.logbitmap-plot-1.symbitmap-plot-2.cfgbitmap-plot-2.logbitmap-plot-2.symbitmap-plot-3.cfgbitmap-plot-3.logbitmap-plot-3.symbitmap-plotter.logbitwise-not.logbool-const.logbool-function.logbool-ifs-min.logbool-ifs.logbool-nullpointer-exception.logbool-pointer.logbool-vars.logbresenham.logbresenhamarr.logc-types.logc64dtv-8bppcharstretch.logc64dtv-8bppchunkystretch.logc64dtv-blitter-box.logc64dtv-blittermin.logc64dtv-color.cfgc64dtv-color.logc64dtv-gfxexplorer.cfgc64dtv-gfxexplorer.logc64dtv-gfxexplorer.symc64dtv-gfxmodes.cfgc64dtv-gfxmodes.logc64dtv-gfxmodes.symcall-parameter-autocast.logcallconstparam.logcast-deref.logcast-not-needed-2.logcast-not-needed-3.logcast-not-needed.logcast-precedence-problem.logcasting.logchargen.logchessboard.logcia-timer-cyclecount.logcia-timer-simple.logclobber-a-problem.logcoalesce-assignment.logcode-after-return-1.logcomma-decl-2.logcomma-decl-for.logcomma-decl.logcomma-expr-1.logcomma-expr-for.logcomparison-rewriting-pointer.logcomparison-rewriting.logcomplex-conditional-problem.log
complex

@ -268,7 +268,7 @@ public class Compiler {
new Pass1AddressOfHandling(program).execute();
new Pass1FixLValuesLoHi(program).execute();
new Pass1AssertNoLValueIntermediate(program).execute();
new PassNAddTypeConversionAssignment(program, false).execute();
new PassNAddTypeConversionAssignment(program, true).execute();
new Pass1AssertProcedureCallParameters(program).execute();
if(getLog().isVerbosePass1CreateSsa()) {
@ -285,9 +285,9 @@ public class Compiler {
new Pass1UnwindStructVariables(program).execute();
new Pass1UnwindStructValues(program).execute();
new PassNDeInlineCastValues(program).execute();
new PassNAddBooleanCasts(program).execute();
new PassNAddTypeConversionAssignment(program, false).execute();
new PassNDeInlineCastValues(program, true).execute();
new PassNAddBooleanCasts(program, true).execute();
new PassNAddTypeConversionAssignment(program, true).execute();
new Pass1EarlyConstantIdentification(program).execute();
new PassNAssertConstantModification(program).execute();
@ -311,7 +311,8 @@ public class Compiler {
new Pass1EliminateUncalledProcedures(program).execute();
new PassNEliminateUnusedVars(program, false).execute();
new Pass1ExtractInlineStrings(program).execute();
new PassNCullEmptyBlocks(program).execute();
new PassNCullEmptyBlocks(program, true).execute();
new PassNRenumberLabels(program, true).execute();
new Pass1UnrollConditionVariableSsa(program).step();
@ -368,7 +369,7 @@ public class Compiler {
optimizations.add(new PassNCastSimplification(program));
optimizations.add(new PassNFinalizeNumberTypeConversions(program));
optimizations.add(new PassNTypeInference(program));
optimizations.add(new PassNAddTypeConversionAssignment(program, true));
optimizations.add(new PassNAddTypeConversionAssignment(program, false));
optimizations.add(new PassNTypeIdSimplification(program));
optimizations.add(new PassNSizeOfSimplification(program));
optimizations.add(new PassNStatementIndices(program));
@ -395,7 +396,7 @@ public class Compiler {
optimizations.add(new PassNStatementIndices(program));
optimizations.add(new Pass2ConditionalJumpSimplification(program));
optimizations.add(new Pass2ConditionalAndOrRewriting(program));
optimizations.add(new PassNAddBooleanCasts(program));
optimizations.add(new PassNAddBooleanCasts(program, false));
optimizations.add(new PassNStructUnwoundPlaceholderRemoval(program));
optimizations.add(new PassNArrayElementAddressOfRewriting(program));
optimizations.add(new Pass2ConditionalJumpSequenceImprovement(program));
@ -589,8 +590,8 @@ public class Compiler {
// Phi mem coalesce removes as many variables introduced by phi lifting as possible - as long as their live ranges do not overlap
new Pass3PhiMemCoalesce(program).step();
new PassNCullEmptyBlocks(program).step();
new PassNRenumberLabels(program).execute();
new PassNCullEmptyBlocks(program, false).step();
new PassNRenumberLabels(program, false).execute();
new PassNBlockSequencePlanner(program).step();
new Pass3AddNopBeforeCallOns(program).generate();
new PassNStatementIndices(program).execute();

@ -45,12 +45,14 @@ public class Pass1EarlyConstantIdentification extends Pass1Base {
if(assignment instanceof StatementAssignment) {
StatementAssignment assign = (StatementAssignment) assignment;
if(assign.getrValue1() == null && assign.getOperator() == null && assign.getrValue2() instanceof ConstantValue) {
getLog().append("Identified constant variable " + variable.toString(getProgram()));
if(getLog().isVerboseParse())
getLog().append("Identified constant variable " + variable.toString(getProgram()));
ConstantValue constantValue = (ConstantValue) assign.getrValue2();
convertToConst(variable, constantValue, assignment.getComments(), aliases);
convertToConst(variable, constantValue, assignment.getComments(), aliases);
removeStmt.add(assign);
} else if(assign.getrValue1() == null && assign.getOperator() instanceof OperatorCastPtr && assign.getrValue2() instanceof ConstantValue) {
getLog().append("Identified constant variable " + variable.toString(getProgram()));
if(getLog().isVerboseParse())
getLog().append("Identified constant variable " + variable.toString(getProgram()));
ConstantValue constantValue = new ConstantCastValue(((OperatorCastPtr) assign.getOperator()).getToType(), (ConstantValue) assign.getrValue2());
convertToConst(variable, constantValue, assignment.getComments(), aliases);
removeStmt.add(assign);
@ -59,7 +61,8 @@ public class Pass1EarlyConstantIdentification extends Pass1Base {
} else if(varAssignment.type.equals(VarAssignments.VarAssignment.Type.INIT_VALUE)) {
if(!(variable.getType() instanceof SymbolTypeStruct)) {
// Only assignment is the initValue
getLog().append("Identified constant variable " + variable.toString(getProgram()));
if(getLog().isVerboseParse())
getLog().append("Identified constant variable " + variable.toString(getProgram()));
ConstantValue constantValue = variable.getInitValue();
convertToConst(variable, constantValue, variable.getComments(), aliases);
}
@ -99,6 +102,7 @@ public class Pass1EarlyConstantIdentification extends Pass1Base {
/**
* Type check and potentially add cast to the constant value
*
* @param variable
* @param constantValue
* @return

@ -55,7 +55,7 @@ public class Pass1PointerSizeofFix extends Pass1Base {
ConstantBinary binary = (ConstantBinary) programValue.get();
if(Operators.PLUS.equals(binary.getOperator()) || Operators.MINUS.equals(binary.getOperator())) {
SymbolTypePointer pointerType = getPointerType(binary.getLeft());
if(pointerType!=null && pointerType.getElementType().getSizeBytes() > 1) {
if(pointerType != null && pointerType.getElementType().getSizeBytes() > 1) {
getLog().append("Fixing constant pointer addition " + binary.toString(getProgram()));
ConstantRef sizeOfTargetType = SizeOfConstants.getSizeOfConstantVar(getProgram().getScope(), pointerType.getElementType());
binary.setRight(new ConstantBinary(binary.getRight(), Operators.MULTIPLY, sizeOfTargetType));
@ -67,7 +67,8 @@ public class Pass1PointerSizeofFix extends Pass1Base {
if(pointerType != null) {
if(pointerType.getElementType().getSizeBytes() > 1) {
// Array-indexing into a non-byte pointer - multiply by sizeof()
getLog().append("Fixing pointer array-indexing " + deref.toString(getProgram()));
if(getLog().isVerboseParse())
getLog().append("Fixing pointer array-indexing " + deref.toString(getProgram()));
SymbolVariableRef idx2VarRef = handled.getOrDefault(currentStmt, new LinkedHashMap<>()).get(deref.getIndex());
if(idx2VarRef == null) {
Variable idx2Var = getScope().getScope(currentBlock.getScope()).addVariableIntermediate();
@ -95,7 +96,7 @@ public class Pass1PointerSizeofFix extends Pass1Base {
* @param assignment The assignment statement
*/
public void fixPointerBinary(ControlFlowBlock block, ListIterator<Statement> stmtIt, StatementAssignment assignment) {
private void fixPointerBinary(ControlFlowBlock block, ListIterator<Statement> stmtIt, StatementAssignment assignment) {
SymbolTypePointer pointerType = getPointerType(assignment.getrValue1());
if(pointerType != null) {
if(SymbolType.VOID.equals(pointerType.getElementType())) {
@ -111,7 +112,8 @@ public class Pass1PointerSizeofFix extends Pass1Base {
if(symbolR2.getType() instanceof SymbolTypePointer) {
// RValue 2 is a pointer
isPointerPlusConst = false;
getLog().append("Fixing pointer addition " + assignment.toString(getProgram(), false));
if(getLog().isVerboseParse())
getLog().append("Fixing pointer addition " + assignment.toString(getProgram(), false));
LValue lValue = assignment.getlValue();
Variable tmpVar = getScope().getScope(block.getScope()).addVariableIntermediate();
tmpVar.setType(SymbolTypeInference.inferType(getScope(), assignment.getlValue()));
@ -124,7 +126,8 @@ public class Pass1PointerSizeofFix extends Pass1Base {
if(isPointerPlusConst) {
// Binary operation on a non-byte pointer - sizeof()-handling is probably needed!
// Adding to a pointer - multiply by sizeof()
getLog().append("Fixing pointer addition " + assignment.toString(getProgram(), false));
if(getLog().isVerboseParse())
getLog().append("Fixing pointer addition " + assignment.toString(getProgram(), false));
Variable tmpVar = getScope().getScope(block.getScope()).addVariableIntermediate();
tmpVar.setType(SymbolTypeInference.inferType(getScope(), assignment.getrValue2()));
stmtIt.remove();
@ -143,7 +146,7 @@ public class Pass1PointerSizeofFix extends Pass1Base {
*
* @param assignment The assignment statement
*/
public void fixPointerUnary(StatementAssignment assignment) {
private void fixPointerUnary(StatementAssignment assignment) {
// Found assignment with unary operator
SymbolTypePointer pointerType = getPointerType(assignment.getrValue2());
if(pointerType != null) {
@ -156,13 +159,15 @@ public class Pass1PointerSizeofFix extends Pass1Base {
// Unary operation on non-byte pointer type - sizeof()-handling is needed!
if(Operators.INCREMENT.equals(assignment.getOperator())) {
// Pointer increment - add sizeof(type) instead
getLog().append("Fixing pointer increment " + assignment.toString(getProgram(), false));
if(getLog().isVerboseParse())
getLog().append("Fixing pointer increment " + assignment.toString(getProgram(), false));
assignment.setrValue1(assignment.getrValue2());
assignment.setOperator(Operators.PLUS);
assignment.setrValue2(SizeOfConstants.getSizeOfConstantVar(getProgram().getScope(), pointerType.getElementType()));
} else if(Operators.DECREMENT.equals(assignment.getOperator())) {
// Pointer Decrement - add sizeof(type) instead
getLog().append("Fixing pointer decrement " + assignment.toString(getProgram(), false));
if(getLog().isVerboseParse())
getLog().append("Fixing pointer decrement " + assignment.toString(getProgram(), false));
assignment.setrValue1(assignment.getrValue2());
assignment.setOperator(Operators.MINUS);
assignment.setrValue2(SizeOfConstants.getSizeOfConstantVar(getProgram().getScope(), pointerType.getElementType()));
@ -174,6 +179,7 @@ public class Pass1PointerSizeofFix extends Pass1Base {
/**
* Examine the passed value to determine if it is a pointer.
* If it is a pointer return the type of the pointer
*
* @param pointer The potential pointer to examine
* @return The type of the pointer - if the value was a pointer. null if the value is not a pointer.
*/

@ -23,8 +23,11 @@ import java.util.ListIterator;
*/
public class PassNAddBooleanCasts extends Pass2SsaOptimization {
public PassNAddBooleanCasts(Program program) {
private boolean pass1;
public PassNAddBooleanCasts(Program program, boolean pass1) {
super(program);
this.pass1 = pass1;
}
@Override
@ -35,12 +38,13 @@ public class PassNAddBooleanCasts extends Pass2SsaOptimization {
Statement currentStmt = stmtIt.next();
if(currentStmt instanceof StatementConditionalJump) {
StatementConditionalJump conditionalJump = (StatementConditionalJump) currentStmt;
if(conditionalJump.getOperator()==null) {
if(conditionalJump.getOperator() == null) {
RValue rValue2 = conditionalJump.getrValue2();
SymbolType type = SymbolTypeInference.inferType(getScope(), rValue2);
if(SymbolType.isInteger(type) || type instanceof SymbolTypePointer) {
// Found integer condition - add boolean cast
getLog().append("Warning! Adding boolean cast to non-boolean condition "+rValue2.toString(getProgram()));
if(!pass1)
getLog().append("Warning! Adding boolean cast to non-boolean condition " + rValue2.toString(getProgram()));
Variable tmpVar = addBooleanCast(rValue2, type, currentStmt, stmtIt, currentBlock);
conditionalJump.setrValue2(tmpVar.getRef());
}
@ -54,10 +58,11 @@ public class PassNAddBooleanCasts extends Pass2SsaOptimization {
RValue operand = unaryExpression.getOperand();
SymbolType operandType = SymbolTypeInference.inferType(getScope(), operand);
if(SymbolType.isInteger(operandType) || operandType instanceof SymbolTypePointer) {
getLog().append("Warning! Adding boolean cast to non-boolean sub-expression "+operand.toString(getProgram()));
if(!pass1)
getLog().append("Warning! Adding boolean cast to non-boolean sub-expression " + operand.toString(getProgram()));
if(operand instanceof ConstantValue) {
unaryExpression.setOperand(new ConstantBinary(new ConstantInteger(0L, SymbolType.NUMBER), Operators.NEQ, (ConstantValue) operand));
} else {
} else {
SymbolType type = SymbolTypeInference.inferType(getScope(), operand);
Variable tmpVar = addBooleanCast(operand, type, currentStmt, stmtIt, currentBlock);
unaryExpression.setOperand(tmpVar.getRef());
@ -68,7 +73,7 @@ public class PassNAddBooleanCasts extends Pass2SsaOptimization {
return false;
}
public Variable addBooleanCast(RValue rValue, SymbolType rValueType, Statement currentStmt, ListIterator<Statement> stmtIt, ControlFlowBlock currentBlock) {
private Variable addBooleanCast(RValue rValue, SymbolType rValueType, Statement currentStmt, ListIterator<Statement> stmtIt, ControlFlowBlock currentBlock) {
Scope currentScope = getScope().getScope(currentBlock.getScope());
stmtIt.previous();
Variable tmpVar = currentScope.addVariableIntermediate();
@ -77,7 +82,7 @@ public class PassNAddBooleanCasts extends Pass2SsaOptimization {
ConstantValue nullValue;
if(rValueType instanceof SymbolTypePointer) {
nullValue = new ConstantCastValue(rValueType, new ConstantInteger(0L, SymbolType.WORD));
} else {
} else {
nullValue = new ConstantInteger(0L, SymbolType.NUMBER);
}
stmtIt.add(new StatementAssignment((LValue) tmpVar.getRef(), nullValue, Operators.NEQ, rValue, true, currentStmt.getSource(), Comment.NO_COMMENTS));

@ -17,11 +17,11 @@ import java.util.concurrent.atomic.AtomicBoolean;
*/
public class PassNAddTypeConversionAssignment extends Pass2SsaOptimization {
private boolean pass2;
private boolean pass1;
public PassNAddTypeConversionAssignment(Program program, boolean pass2) {
public PassNAddTypeConversionAssignment(Program program, boolean pass1) {
super(program);
this.pass2 = pass2;
this.pass1 = pass1;
}
@Override
@ -44,38 +44,38 @@ public class PassNAddTypeConversionAssignment extends Pass2SsaOptimization {
// Assigning a pointer from an unsigned word
if(programExpression instanceof ProgramExpressionBinary.ProgramExpressionBinaryAssignmentLValue || programExpression instanceof ProgramExpressionBinary.ProgramExpressionBinaryCallParameter) {
if((leftType instanceof SymbolTypePointer) && SymbolType.isInteger(rightType)) {
if(pass2 || getLog().isVerbosePass1CreateSsa())
if(!pass1 || getLog().isVerbosePass1CreateSsa())
getLog().append("Adding pointer type conversion cast (" + leftType + ") " + binary.getLeft().toString() + " in " + currentStmt.toString(getProgram(), false));
binary.addRightCast(leftType, stmtIt, currentBlock.getScope(), getScope());
modified.set(true);
} else if((leftType instanceof SymbolTypePointer) && rightType instanceof SymbolTypePointer && SymbolType.VOID.equals(((SymbolTypePointer) leftType).getElementType())) {
if(pass2 || getLog().isVerbosePass1CreateSsa())
if(!pass1 || getLog().isVerbosePass1CreateSsa())
getLog().append("Adding void pointer type conversion cast (" + leftType + ") " + binary.getRight().toString() + " in " + currentStmt.toString(getProgram(), false));
binary.addRightCast(leftType, stmtIt, currentBlock.getScope(), getScope());
modified.set(true);
} else if((leftType instanceof SymbolTypePointer) && rightType instanceof SymbolTypePointer && SymbolType.VOID.equals(((SymbolTypePointer) rightType).getElementType())) {
if(pass2 || getLog().isVerbosePass1CreateSsa())
if(!pass1 || getLog().isVerbosePass1CreateSsa())
getLog().append("Adding pointer type conversion cast to void pointer (" + leftType + ") " + binary.getRight().toString() + " in " + currentStmt.toString(getProgram(), false));
binary.addRightCast(leftType, stmtIt, currentBlock.getScope(), getScope());
modified.set(true);
} else if(SymbolType.WORD.equals(leftType) && isLiteralWordCandidate(right)) {
// Detect word literal constructor
SymbolType conversionType = SymbolType.WORD;
if(pass2 || getLog().isVerbosePass1CreateSsa())
if(!pass1 || getLog().isVerbosePass1CreateSsa())
getLog().append("Identified literal word (" + conversionType + ") " + binary.getRight().toString() + " in " + (currentStmt == null ? "" : currentStmt.toString(getProgram(), false)));
binary.addRightCast(conversionType, stmtIt, currentBlock == null ? null : currentBlock.getScope(), getScope());
modified.set(true);
} else if(leftType instanceof SymbolTypePointer && isLiteralWordCandidate(right)) {
// Detect word literal constructor
SymbolType conversionType = SymbolType.WORD;
if(pass2 || getLog().isVerbosePass1CreateSsa())
if(!pass1 || getLog().isVerbosePass1CreateSsa())
getLog().append("Identified literal word (" + conversionType + ") " + binary.getRight().toString() + " in " + (currentStmt == null ? "" : currentStmt.toString(getProgram(), false)));
binary.addRightCast(conversionType, stmtIt, currentBlock == null ? null : currentBlock.getScope(), getScope());
modified.set(true);
} else if(SymbolType.DWORD.equals(leftType) && isLiteralWordCandidate(right)) {
// Detect dword literal constructor
SymbolType conversionType = SymbolType.DWORD;
if(pass2 || getLog().isVerbosePass1CreateSsa())
if(!pass1 || getLog().isVerbosePass1CreateSsa())
getLog().append("Identified literal word (" + conversionType + ") " + binary.getRight().toString() + " in " + (currentStmt == null ? "" : currentStmt.toString(getProgram(), false)));
binary.addRightCast(conversionType, stmtIt, currentBlock == null ? null : currentBlock.getScope(), getScope());
modified.set(true);

@ -1,10 +1,12 @@
package dk.camelot64.kickc.passes;
import dk.camelot64.kickc.model.*;
import dk.camelot64.kickc.model.values.LabelRef;
import dk.camelot64.kickc.model.values.RValue;
import dk.camelot64.kickc.model.ControlFlowBlock;
import dk.camelot64.kickc.model.ControlFlowGraphBaseVisitor;
import dk.camelot64.kickc.model.Program;
import dk.camelot64.kickc.model.statements.StatementPhiBlock;
import dk.camelot64.kickc.model.symbols.Label;
import dk.camelot64.kickc.model.values.LabelRef;
import dk.camelot64.kickc.model.values.RValue;
import java.util.ArrayList;
import java.util.LinkedHashMap;
@ -14,8 +16,11 @@ import java.util.Map;
/** Pass that culls empty control flow blocks from the program */
public class PassNCullEmptyBlocks extends Pass2SsaOptimization {
public PassNCullEmptyBlocks(Program program) {
private boolean pass1;
public PassNCullEmptyBlocks(Program program, boolean pass1) {
super(program);
this.pass1 = pass1;
}
@Override
@ -94,7 +99,8 @@ public class PassNCullEmptyBlocks extends Pass2SsaOptimization {
LabelRef removeBlockLabelRef = removeBlock.getLabel();
Label removeBlockLabel = getScope().getLabel(removeBlockLabelRef);
removeBlockLabel.getScope().remove(removeBlockLabel);
getLog().append("Culled Empty Block " + removeBlockLabel.toString(getProgram()));
if(!pass1)
getLog().append("Culled Empty Block " + removeBlockLabel.toString(getProgram()));
}
remove.removeAll(dontRemove);
return remove.size() > 0;

@ -20,8 +20,11 @@ import java.util.ListIterator;
*/
public class PassNDeInlineCastValues extends Pass2SsaOptimization {
public PassNDeInlineCastValues(Program program) {
private boolean pass1;
public PassNDeInlineCastValues(Program program, boolean pass1) {
super(program);
this.pass1 = pass1;
}
@Override
@ -44,7 +47,8 @@ public class PassNDeInlineCastValues extends Pass2SsaOptimization {
private void deInlineCastValue(ProgramValue castProgramValue, ListIterator<Statement> stmtIt, ControlFlowBlock currentBlock, Statement currentStmt) {
final CastValue castValue = (CastValue) castProgramValue.get();
getLog().append("De-inlining cast "+castValue.toString());
if(!pass1)
getLog().append("De-inlining cast " + castValue.toString());
final Scope scope = getScope().getScope(currentBlock.getScope());
final Variable tmpVar = scope.addVariableIntermediate();
tmpVar.setType(castValue.getToType());

@ -18,8 +18,11 @@ import java.util.Map;
*/
public class PassNRenumberLabels extends Pass2SsaOptimization {
public PassNRenumberLabels(Program program) {
private boolean pass1;
public PassNRenumberLabels(Program program, boolean pass1) {
super(program);
this.pass1 = pass1;
}
@Override
@ -30,10 +33,10 @@ public class PassNRenumberLabels extends Pass2SsaOptimization {
renumberLabels(scope, renamed);
}
ProgramValueIterator.execute(getGraph(), (programValue, currentStmt, stmtIt, currentBlock) -> {
Value value = programValue.get();
if(value instanceof LabelRef) {
Value value = programValue.get();
if(value instanceof LabelRef) {
LabelRef newLabelRef = renamed.get(value);
if(newLabelRef!=null) {
if(newLabelRef != null) {
programValue.set(newLabelRef);
}
}
@ -56,7 +59,8 @@ public class PassNRenumberLabels extends Pass2SsaOptimization {
oldLabels.add(oldLabel);
newLabels.add(newLabel);
renamed.put((oldLabel).getRef(), newLabel.getRef());
getLog().append("Renumbering block "+oldLabel.getFullName()+" to "+newLabel.getFullName());
if(!pass1)
getLog().append("Renumbering block " + oldLabel.getFullName() + " to " + newLabel.getFullName());
}
}
}

@ -42,3 +42,6 @@ void ultoa(unsigned long value, char* buffer, enum RADIX radix);
// Returns the absolute value of int x.
int abs(int x);
// Returns the absolute value of long int x.
long labs(long x);

@ -256,3 +256,11 @@ inline int abs(int x) {
else
return x;
}
// Returns the absolute value of long int x.
inline long labs(long x) {
if(x<0)
return -x;
else
return x;
}

@ -1,7 +1,3 @@
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,7 +1,3 @@
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,7 +1,3 @@
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,7 +1,3 @@
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,10 +1,3 @@
Fixing pointer array-indexing *((word*) SCREEN + (byte) main::i)
Fixing pointer array-indexing *((word*) SCREEN + (byte) main::i)
Identified constant variable (word*) SCREEN
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,7 +1,4 @@
Setting inferred volatile on symbol affected by address-of (byte*) main::bp ← &(byte) main::b
Identified constant variable (byte*) main::SCREEN
Identified constant variable (byte*) main::bp
Culled Empty Block (label) main::@2
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,15 +1,13 @@
Setting inferred volatile on symbol affected by address-of (void~) main::$0 ← call setByte &(byte) main::b1 (byte) 'c'
Setting inferred volatile on symbol affected by address-of (void~) main::$1 ← call setByte &(byte) main::b2 (byte) 'm'
Setting inferred volatile on symbol affected by address-of (void~) main::$2 ← call setByte &(byte) main::b3 (byte) 'l'
Identified constant variable (byte*) main::SCREEN
Culled Empty Block (label) @1
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@2
to:@1
(void()) main()
main: scope:[main] from @2
main: scope:[main] from @1
(volatile byte) main::b1 ← (byte) 0
(volatile byte) main::b2 ← (byte) 0
(volatile byte) main::b3 ← (byte) 0
@ -45,16 +43,16 @@ setByte: scope:[setByte] from main main::@1 main::@2
setByte::@return: scope:[setByte] from setByte
return
to:@return
@2: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@3
@3: scope:[] from @2
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @3
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @1
(label) @2
(label) @3
(label) @begin
(label) @end
(void()) main()
@ -118,8 +116,8 @@ Consolidated array index constant in *(main::SCREEN+1)
Consolidated array index constant in *(main::SCREEN+2)
Successful SSA optimization Pass2ConstantAdditionElimination
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of main::@2
@ -129,8 +127,7 @@ Calls in [main] to setByte:8 setByte:10 setByte:12
Created 2 initial phi equivalence classes
Coalesced down to 2 phi equivalence classes
Culled Empty Block (label) @3
Renumbering block @2 to @1
Culled Empty Block (label) @2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,15 +1,12 @@
Setting inferred volatile on symbol affected by address-of (byte*) main::ptr ← &(byte) val
Identified constant variable (byte*) main::ptr
Culled Empty Block (label) @1
Culled Empty Block (label) @2
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(volatile byte) val ← (byte) 0
to:@3
to:@1
(void()) main()
main: scope:[main] from @3
main: scope:[main] from @1
(byte) main::idx#0 ← (byte) 0
*((const nomodify byte*) main::SCREEN1 + (byte) main::idx#0) ← (volatile byte) val
*((const nomodify byte*) main::SCREEN2 + (byte) main::idx#0) ← (byte) '.'
@ -66,16 +63,16 @@ setp: scope:[setp] from main::@1
setp::@return: scope:[setp] from setp
return
to:@return
@3: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@4
@4: scope:[] from @3
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @4
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @3
(label) @4
(label) @1
(label) @2
(label) @begin
(label) @end
(void()) main()
@ -216,8 +213,8 @@ Simplifying constant integer increment ++2
Simplifying constant integer increment ++3
Simplifying constant integer increment ++4
Successful SSA optimization Pass2ConstantSimplification
Adding NOP phi() at start of @3
Adding NOP phi() at start of @4
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
CALL GRAPH
Calls in [] to main:2
@ -225,8 +222,7 @@ Calls in [main] to setv:16 setp:19
Created 0 initial phi equivalence classes
Coalesced down to 0 phi equivalence classes
Culled Empty Block (label) @4
Renumbering block @3 to @1
Culled Empty Block (label) @2
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,7 +1,4 @@
Fixing constant pointer addition (const signed word*) VALS+(number) 1
Fixing pointer array-indexing *((const signed word*) VALS + (byte) main::i)
Fixing pointer array-indexing *((const nomodify signed word*) SCREEN + (byte) idx)
Culled Empty Block (label) main::@2
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -12,27 +9,27 @@ main: scope:[main] from @2
(byte) idx#15 ← phi( @2/(byte) idx#17 )
(signed word*) print::p#0 ← (const signed word*) VALS
call print
to:main::@3
main::@3: scope:[main] from main
to:main::@2
main::@2: scope:[main] from main
(byte) idx#8 ← phi( main/(byte) idx#6 )
(byte) idx#0 ← (byte) idx#8
(signed word*) print::p#1 ← (const signed word*) VALS+(number) 1*(const byte) SIZEOF_SIGNED_WORD
call print
to:main::@4
main::@4: scope:[main] from main::@3
(byte) idx#9 ← phi( main::@3/(byte) idx#6 )
to:main::@3
main::@3: scope:[main] from main::@2
(byte) idx#9 ← phi( main::@2/(byte) idx#6 )
(byte) idx#1 ← (byte) idx#9
(byte) main::i#0 ← (byte) 2
to:main::@1
main::@1: scope:[main] from main::@4 main::@5
(byte) idx#16 ← phi( main::@4/(byte) idx#1 main::@5/(byte) idx#2 )
(byte) main::i#2 ← phi( main::@4/(byte) main::i#0 main::@5/(byte) main::i#1 )
main::@1: scope:[main] from main::@3 main::@4
(byte) idx#16 ← phi( main::@3/(byte) idx#1 main::@4/(byte) idx#2 )
(byte) main::i#2 ← phi( main::@3/(byte) main::i#0 main::@4/(byte) main::i#1 )
(byte~) main::$5 ← (byte) main::i#2 * (const byte) SIZEOF_SIGNED_WORD
(signed word*~) main::$2 ← & *((const signed word*) VALS + (byte~) main::$5)
(signed word*) print::p#2 ← (signed word*~) main::$2
call print
to:main::@5
main::@5: scope:[main] from main::@1
to:main::@4
main::@4: scope:[main] from main::@1
(byte) main::i#3 ← phi( main::@1/(byte) main::i#2 )
(byte) idx#10 ← phi( main::@1/(byte) idx#6 )
(byte) idx#2 ← (byte) idx#10
@ -40,8 +37,8 @@ main::@5: scope:[main] from main::@1
(bool~) main::$4 ← (byte) main::i#1 != rangelast(2,3)
if((bool~) main::$4) goto main::@1
to:main::@return
main::@return: scope:[main] from main::@5
(byte) idx#11 ← phi( main::@5/(byte) idx#2 )
main::@return: scope:[main] from main::@4
(byte) idx#11 ← phi( main::@4/(byte) idx#2 )
(byte) idx#3 ← (byte) idx#11
return
to:@return
@ -50,9 +47,9 @@ main::@return: scope:[main] from main::@5
to:@2
(void()) print((signed word*) print::p)
print: scope:[print] from main main::@1 main::@3
(signed word*) print::p#3 ← phi( main/(signed word*) print::p#0 main::@1/(signed word*) print::p#2 main::@3/(signed word*) print::p#1 )
(byte) idx#12 ← phi( main/(byte) idx#15 main::@1/(byte) idx#16 main::@3/(byte) idx#0 )
print: scope:[print] from main main::@1 main::@2
(signed word*) print::p#3 ← phi( main/(signed word*) print::p#0 main::@1/(signed word*) print::p#2 main::@2/(signed word*) print::p#1 )
(byte) idx#12 ← phi( main/(byte) idx#15 main::@1/(byte) idx#16 main::@2/(byte) idx#0 )
(byte~) print::$0 ← (byte) idx#12 * (const byte) SIZEOF_SIGNED_WORD
*((const nomodify signed word*) SCREEN + (byte~) print::$0) ← *((signed word*) print::p#3)
(byte) idx#5 ← ++ (byte) idx#12
@ -105,9 +102,9 @@ SYMBOL TABLE SSA
(bool~) main::$4
(byte~) main::$5
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@return
(byte) main::i
(byte) main::i#0
@ -178,14 +175,14 @@ Constant inlined idx#17 = (byte) 0
Constant inlined print::p#1 = (const signed word*) VALS+(byte) 1*(const byte) SIZEOF_SIGNED_WORD
Constant inlined print::p#0 = (const signed word*) VALS
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@6(between main::@5 and main::@1)
Added new block during phi lifting main::@5(between main::@4 and main::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of main::@3
CALL GRAPH
Calls in [] to main:3
Calls in [main] to print:7 print:9 print:16
@ -198,11 +195,10 @@ Coalesced [20] main::i#4 ← main::i#1
Coalesced down to 3 phi equivalence classes
Culled Empty Block (label) @1
Culled Empty Block (label) @3
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@5
Renumbering block @2 to @1
Renumbering block main::@3 to main::@2
Renumbering block main::@5 to main::@3
Renumbering block main::@4 to main::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,25 +1,19 @@
Fixing pointer array-indexing *((word*) main::SCREEN + (byte) main::idx)
Fixing pointer array-indexing *((const word*) arr16 + (number~) getValue::$0)
Identified constant variable (word*) main::SCREEN
Culled Empty Block (label) main::@2
Culled Empty Block (label) @1
Culled Empty Block (label) getValue::@1
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@2
to:@1
(void()) main()
main: scope:[main] from @2
main: scope:[main] from @1
(byte) main::idx#0 ← (byte) 0
to:main::@1
main::@1: scope:[main] from main main::@3
(byte) main::idx#2 ← phi( main/(byte) main::idx#0 main::@3/(byte) main::idx#1 )
main::@1: scope:[main] from main main::@2
(byte) main::idx#2 ← phi( main/(byte) main::idx#0 main::@2/(byte) main::idx#1 )
(word) getValue::index#0 ← (byte) main::idx#2
call getValue
(word) getValue::return#0 ← (word) getValue::return#2
to:main::@3
main::@3: scope:[main] from main::@1
to:main::@2
main::@2: scope:[main] from main::@1
(byte) main::idx#3 ← phi( main::@1/(byte) main::idx#2 )
(word) getValue::return#3 ← phi( main::@1/(word) getValue::return#0 )
(word~) main::$0 ← (word) getValue::return#3
@ -29,7 +23,7 @@ main::@3: scope:[main] from main::@1
(bool~) main::$1 ← (byte) main::idx#1 != rangelast(0,$80)
if((bool~) main::$1) goto main::@1
to:main::@return
main::@return: scope:[main] from main::@3
main::@return: scope:[main] from main::@2
return
to:@return
@ -47,16 +41,16 @@ getValue::@return: scope:[getValue] from getValue
(word) getValue::return#2 ← (word) getValue::return#4
return
to:@return
@2: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@3
@3: scope:[] from @2
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @3
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @1
(label) @2
(label) @3
(label) @begin
(label) @end
(const byte) SIZEOF_WORD = (byte) 2
@ -81,7 +75,7 @@ SYMBOL TABLE SSA
(bool~) main::$1
(byte~) main::$2
(label) main::@1
(label) main::@3
(label) main::@2
(label) main::@return
(const word*) main::SCREEN = (word*)(number) $400
(byte) main::idx
@ -137,10 +131,10 @@ Constant inlined main::idx#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Eliminating unused constant (const byte) SIZEOF_WORD
Successful SSA optimization PassNEliminateUnusedVars
Added new block during phi lifting main::@4(between main::@3 and main::@1)
Added new block during phi lifting main::@3(between main::@2 and main::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
CALL GRAPH
@ -150,10 +144,8 @@ Calls in [main] to getValue:8
Created 1 initial phi equivalence classes
Coalesced [16] main::idx#4 ← main::idx#1
Coalesced down to 1 phi equivalence classes
Culled Empty Block (label) @3
Culled Empty Block (label) main::@4
Renumbering block @2 to @1
Renumbering block main::@3 to main::@2
Culled Empty Block (label) @2
Culled Empty Block (label) main::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,5 +1,3 @@
Identified constant variable (byte*) main::cur_item
Culled Empty Block (label) main::@2
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -61,7 +59,7 @@ Inlining constant with var siblings (const byte) main::sub#0
Constant inlined main::sub#0 = (byte) 0
Constant inlined main::cur_item = (const byte*) items
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@3(between main::@1 and main::@1)
Added new block during phi lifting main::@2(between main::@1 and main::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
@ -74,7 +72,7 @@ Created 1 initial phi equivalence classes
Coalesced [11] main::sub#3 ← main::sub#1
Coalesced down to 1 phi equivalence classes
Culled Empty Block (label) @2
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,4 +1,3 @@
Culled Empty Block (label) main::@4
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -132,8 +131,8 @@ Constant inlined main::sub#0 = (byte) 0
Constant inlined main::cur_item#0 = (const byte*) items
Constant inlined main::item#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@5(between main::@3 and main::@1)
Added new block during phi lifting main::@6(between main::@2 and main::@2)
Added new block during phi lifting main::@4(between main::@3 and main::@1)
Added new block during phi lifting main::@5(between main::@2 and main::@2)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
@ -148,8 +147,8 @@ Coalesced [18] main::cur_item#5 ← main::cur_item#1
Coalesced [19] main::sub#3 ← main::sub#1
Coalesced down to 3 phi equivalence classes
Culled Empty Block (label) @2
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,4 +1,3 @@
Identified constant variable (byte*) SCREEN
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,12 +1,3 @@
Warning! Adding boolean cast to non-boolean condition *((const byte*) msg1 + (byte) main::i)
Warning! Adding boolean cast to non-boolean condition *((const byte*) msg2 + (byte) main::i1)
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@10
Culled Empty Block (label) main::@9
Culled Empty Block (label) main::@11
Culled Empty Block (label) main::@12
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -28,18 +19,18 @@ main::@2: scope:[main] from main::@1
to:main::@1
main::@3: scope:[main] from main::@1
(byte) main::i1#0 ← (byte) 0
to:main::@7
main::@7: scope:[main] from main::@3 main::@8
(byte) main::i1#2 ← phi( main::@3/(byte) main::i1#0 main::@8/(byte) main::i1#1 )
to:main::@4
main::@4: scope:[main] from main::@3 main::@5
(byte) main::i1#2 ← phi( main::@3/(byte) main::i1#0 main::@5/(byte) main::i1#1 )
(bool~) main::$1 ← (number) 0 != *((const byte*) msg2 + (byte) main::i1#2)
if((bool~) main::$1) goto main::@8
if((bool~) main::$1) goto main::@5
to:main::@return
main::@8: scope:[main] from main::@7
(byte) main::i1#3 ← phi( main::@7/(byte) main::i1#2 )
main::@5: scope:[main] from main::@4
(byte) main::i1#3 ← phi( main::@4/(byte) main::i1#2 )
*((const nomodify byte*) SCREEN+(number) $28 + (byte) main::i1#3) ← *((const byte*) msg2 + (byte) main::i1#3)
(byte) main::i1#1 ← ++ (byte) main::i1#3
to:main::@7
main::@return: scope:[main] from main::@7
to:main::@4
main::@return: scope:[main] from main::@4
return
to:@return
@1: scope:[] from @begin
@ -61,8 +52,8 @@ SYMBOL TABLE SSA
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@7
(label) main::@8
(label) main::@4
(label) main::@5
(label) main::@return
(byte) main::i
(byte) main::i#0
@ -94,7 +85,7 @@ Alias main::i#2 = main::i#3
Alias main::i1#2 = main::i1#3
Successful SSA optimization Pass2AliasElimination
Simple Condition (bool~) main::$0 [3] if((byte) 0!=*((const byte*) msg1 + (byte) main::i#2)) goto main::@2
Simple Condition (bool~) main::$1 [9] if((byte) 0!=*((const byte*) msg2 + (byte) main::i1#2)) goto main::@8
Simple Condition (bool~) main::$1 [9] if((byte) 0!=*((const byte*) msg2 + (byte) main::i1#2)) goto main::@5
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte) main::i#0 = 0
Constant (const byte) main::i1#0 = 0
@ -119,8 +110,8 @@ Coalesced [17] main::i#4 ← main::i#1
Coalesced down to 2 phi equivalence classes
Culled Empty Block (label) @2
Culled Empty Block (label) main::@3
Renumbering block main::@7 to main::@3
Renumbering block main::@8 to main::@4
Renumbering block main::@4 to main::@3
Renumbering block main::@5 to main::@4
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,4 +1,3 @@
Identified constant variable (byte*) SCREEN
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,12 +1,10 @@
Identified constant variable (byte) main::jmp
Culled Empty Block (label) @1
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@2
to:@1
(void()) main()
main: scope:[main] from @2
main: scope:[main] from @1
*((const nomodify byte*) lda) ← (const byte) main::jmp
(byte) bne::jsr#0 ← (const byte) main::jmp
call bne
@ -26,16 +24,16 @@ bne: scope:[bne] from main
bne::@return: scope:[bne] from bne
return
to:@return
@2: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@3
@3: scope:[] from @2
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @3
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @1
(label) @2
(label) @3
(label) @begin
(label) @end
(void()) bne((byte) bne::jsr)
@ -65,8 +63,8 @@ Successful SSA optimization Pass2ConstantInlining
Consolidated array index constant in *(lda+1)
Successful SSA optimization Pass2ConstantAdditionElimination
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
CALL GRAPH
Calls in [] to main:2
@ -74,8 +72,7 @@ Calls in [main] to bne:6
Created 0 initial phi equivalence classes
Coalesced down to 0 phi equivalence classes
Culled Empty Block (label) @3
Renumbering block @2 to @1
Culled Empty Block (label) @2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,12 +1,11 @@
Resolved forward reference init to (void()) init()
Culled Empty Block (label) @1
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@2
to:@1
(void()) main()
main: scope:[main] from @2
main: scope:[main] from @1
asm { jsrinit }
to:main::@return
main::@return: scope:[main] from main
@ -20,16 +19,16 @@ init: scope:[init] from
init::@return: scope:[init] from init
return
to:@return
@2: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@3
@3: scope:[] from @2
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @3
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @1
(label) @2
(label) @3
(label) @begin
(label) @end
(const nomodify byte*) BGCOL = (byte*)(number) $d020
@ -48,16 +47,15 @@ Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
CALL GRAPH
Calls in [] to main:2
Created 0 initial phi equivalence classes
Coalesced down to 0 phi equivalence classes
Culled Empty Block (label) @3
Renumbering block @2 to @1
Culled Empty Block (label) @2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,4 +1,3 @@
Identified constant variable (byte*) main::screen
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,20 +1,13 @@
Identified constant variable (byte*) screen1
Identified constant variable (byte*) cols
Identified constant variable (byte) GREEN
Identified constant variable (byte) RED
Culled Empty Block (label) @1
Culled Empty Block (label) test::@2
Culled Empty Block (label) test::@4
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*~) $0 ← (const byte*) screen1 + (number) $28
(byte*) screen2#0 ← (byte*~) $0
to:@2
to:@1
(void()) main()
main: scope:[main] from @2
(byte*) screen2#2 ← phi( @2/(byte*) screen2#13 )
main: scope:[main] from @1
(byte*) screen2#2 ← phi( @1/(byte*) screen2#13 )
(byte) main::i#0 ← (byte) 0
(byte) main::a#0 ← (byte) 3
(byte) test::i#0 ← (byte) main::i#0
@ -138,30 +131,30 @@ test: scope:[test] from main main::@1 main::@10 main::@2 main::@3 main::@4 main
*((byte*) screen2#1 + (byte) test::i#11) ← *((const byte*) ref + (byte) test::i#11)
(bool~) test::$0 ← *((const byte*) ref + (byte) test::i#11) == (byte) test::a#11
if((bool~) test::$0) goto test::@1
to:test::@3
to:test::@2
test::@1: scope:[test] from test
(byte) test::i#12 ← phi( test/(byte) test::i#11 )
*((const byte*) cols + (byte) test::i#12) ← (const byte) GREEN
to:test::@return
test::@3: scope:[test] from test
test::@2: scope:[test] from test
(byte) test::i#13 ← phi( test/(byte) test::i#11 )
*((const byte*) cols + (byte) test::i#13) ← (const byte) RED
to:test::@return
test::@return: scope:[test] from test::@1 test::@3
test::@return: scope:[test] from test::@1 test::@2
return
to:@return
@2: scope:[] from @begin
@1: scope:[] from @begin
(byte*) screen2#13 ← phi( @begin/(byte*) screen2#0 )
call main
to:@3
@3: scope:[] from @2
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @3
@end: scope:[] from @2
SYMBOL TABLE SSA
(byte*~) $0
(label) @1
(label) @2
(label) @3
(label) @begin
(label) @end
(const byte) GREEN = (byte) 5
@ -246,7 +239,7 @@ SYMBOL TABLE SSA
(void()) test((byte) test::i , (byte) test::a)
(bool~) test::$0
(label) test::@1
(label) test::@3
(label) test::@2
(label) test::@return
(byte) test::a
(byte) test::a#0
@ -560,8 +553,8 @@ Successful SSA optimization Pass2ConstantSimplification
Simplifying constant integer increment ++9
Successful SSA optimization Pass2ConstantSimplification
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
@ -581,10 +574,8 @@ Calls in [main] to test:6 test:8 test:10 test:12 test:14 test:16 test:18 test:20
Created 2 initial phi equivalence classes
Coalesced down to 2 phi equivalence classes
Culled Empty Block (label) @3
Culled Empty Block (label) @2
Culled Empty Block (label) main::@11
Renumbering block @2 to @1
Renumbering block test::@3 to test::@2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -114,8 +114,8 @@ circle::@3: scope:[circle] from circle::@2
(void()) plot((signed word) plot::x , (signed word) plot::y)
plot: scope:[plot] from circle::@10 circle::@11 circle::@12 circle::@4 circle::@6 circle::@7 circle::@8 circle::@9
[57] (signed word) plot::y#8 ← phi( circle::@6/(signed word) plot::y#1 circle::@7/(signed word) plot::y#2 circle::@8/(signed word) plot::y#3 circle::@9/(signed word) plot::y#4 circle::@10/(signed word) plot::y#5 circle::@11/(signed word) plot::y#6 circle::@12/(signed word) plot::y#7 circle::@4/(signed word) plot::y#0 )
[57] (signed word) plot::x#8 ← phi( circle::@6/(signed word) plot::x#1 circle::@7/(signed word) plot::x#2 circle::@8/(signed word) plot::x#3 circle::@9/(signed word) plot::x#4 circle::@10/(signed word) plot::x#5 circle::@11/(signed word) plot::x#6 circle::@12/(signed word) plot::x#7 circle::@4/(signed word) plot::x#0 )
[57] (signed word) plot::y#8 ← phi( circle::@10/(signed word) plot::y#5 circle::@11/(signed word) plot::y#6 circle::@12/(signed word) plot::y#7 circle::@4/(signed word) plot::y#0 circle::@6/(signed word) plot::y#1 circle::@7/(signed word) plot::y#2 circle::@8/(signed word) plot::y#3 circle::@9/(signed word) plot::y#4 )
[57] (signed word) plot::x#8 ← phi( circle::@10/(signed word) plot::x#5 circle::@11/(signed word) plot::x#6 circle::@12/(signed word) plot::x#7 circle::@4/(signed word) plot::x#0 circle::@6/(signed word) plot::x#1 circle::@7/(signed word) plot::x#2 circle::@8/(signed word) plot::x#3 circle::@9/(signed word) plot::x#4 )
[58] if((signed word) plot::x#8<(signed byte) 0) goto plot::@return
to:plot::@4
plot::@4: scope:[plot] from plot

@ -1,74 +1,48 @@
De-inlining cast (word)toD018::screen
De-inlining cast (word)toSpritePtr::sprite
Identified constant variable (signed word) circle::x
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@8
Culled Empty Block (label) @5
Culled Empty Block (label) circle::@6
Culled Empty Block (label) circle::@3
Culled Empty Block (label) circle::@7
Culled Empty Block (label) circle::@9
Culled Empty Block (label) circle::@10
Culled Empty Block (label) @6
Culled Empty Block (label) plot::@2
Culled Empty Block (label) plot::@3
Culled Empty Block (label) @7
Culled Empty Block (label) fill::@4
Culled Empty Block (label) fill::@3
Culled Empty Block (label) fill::@5
Culled Empty Block (label) fill::@6
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@8
to:@1
(void()) main()
main: scope:[main] from @8
main: scope:[main] from @1
(byte*) fill::start#0 ← (const nomodify byte*) BITMAP
(signed word) fill::size#0 ← (number) $28*(number) $19*(number) 8
(byte) fill::val#0 ← (number) 0
call fill
to:main::@9
main::@9: scope:[main] from main
to:main::@4
main::@4: scope:[main] from main
(byte*) fill::start#1 ← (const nomodify byte*) SCREEN
(signed word) fill::size#1 ← (number) $28*(number) $19
(byte) fill::val#1 ← (number) $16
call fill
to:main::@10
main::@10: scope:[main] from main::@9
to:main::@5
main::@5: scope:[main] from main::@4
*((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLUE
*((const nomodify byte*) D011) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3
*((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) BITMAP&(number) $3fff/(number) $400
(signed word) main::i#0 ← (signed word) 1
to:main::@1
main::@1: scope:[main] from main::@10 main::@11
(signed word) main::i#2 ← phi( main::@10/(signed word) main::i#0 main::@11/(signed word) main::i#1 )
main::@1: scope:[main] from main::@5 main::@6
(signed word) main::i#2 ← phi( main::@5/(signed word) main::i#0 main::@6/(signed word) main::i#1 )
(bool~) main::$2 ← (signed word) main::i#2 < (number) $b4
if((bool~) main::$2) goto main::@2
to:main::@7
to:main::@3
main::@2: scope:[main] from main::@1
(signed word) main::i#3 ← phi( main::@1/(signed word) main::i#2 )
(signed word) circle::xc#0 ← (number) $a0
(signed word) circle::yc#0 ← (number) $64
(signed word) circle::r#0 ← (signed word) main::i#3
call circle
to:main::@11
main::@11: scope:[main] from main::@2
to:main::@6
main::@6: scope:[main] from main::@2
(signed word) main::i#4 ← phi( main::@2/(signed word) main::i#3 )
(signed word) main::i#1 ← (signed word) main::i#4 + (number) 5
to:main::@1
main::@7: scope:[main] from main::@1 main::@7
if(true) goto main::@7
main::@3: scope:[main] from main::@1 main::@3
if(true) goto main::@3
to:main::@return
main::@return: scope:[main] from main::@7
main::@return: scope:[main] from main::@3
return
to:@return
@ -83,12 +57,12 @@ circle: scope:[circle] from main::@2
(signed word) circle::p#0 ← (number~) circle::$1
(signed word) circle::x1#0 ← (signed word) 0
to:circle::@1
circle::@1: scope:[circle] from circle circle::@18
(signed word) circle::yc#12 ← phi( circle/(signed word) circle::yc#13 circle::@18/(signed word) circle::yc#14 )
(signed word) circle::xc#12 ← phi( circle/(signed word) circle::xc#13 circle::@18/(signed word) circle::xc#14 )
(signed word) circle::p#6 ← phi( circle/(signed word) circle::p#0 circle::@18/(signed word) circle::p#7 )
(signed word) circle::y#2 ← phi( circle/(signed word) circle::y#0 circle::@18/(signed word) circle::y#12 )
(signed word) circle::x1#2 ← phi( circle/(signed word) circle::x1#0 circle::@18/(signed word) circle::x1#1 )
circle::@1: scope:[circle] from circle circle::@13
(signed word) circle::yc#12 ← phi( circle/(signed word) circle::yc#13 circle::@13/(signed word) circle::yc#14 )
(signed word) circle::xc#12 ← phi( circle/(signed word) circle::xc#13 circle::@13/(signed word) circle::xc#14 )
(signed word) circle::p#6 ← phi( circle/(signed word) circle::p#0 circle::@13/(signed word) circle::p#7 )
(signed word) circle::y#2 ← phi( circle/(signed word) circle::y#0 circle::@13/(signed word) circle::y#12 )
(signed word) circle::x1#2 ← phi( circle/(signed word) circle::x1#0 circle::@13/(signed word) circle::x1#1 )
(bool~) circle::$2 ← (signed word) circle::x1#2 <= (signed word) circle::y#2
if((bool~) circle::$2) goto circle::@2
to:circle::@return
@ -99,9 +73,9 @@ circle::@2: scope:[circle] from circle::@1
(signed word) circle::x1#14 ← phi( circle::@1/(signed word) circle::x1#2 )
(signed word) circle::p#3 ← phi( circle::@1/(signed word) circle::p#6 )
(bool~) circle::$3 ← (signed word) circle::p#3 < (number) 0
if((bool~) circle::$3) goto circle::@4
to:circle::@8
circle::@4: scope:[circle] from circle::@2
if((bool~) circle::$3) goto circle::@3
to:circle::@5
circle::@3: scope:[circle] from circle::@2
(signed word) circle::y#14 ← phi( circle::@2/(signed word) circle::y#13 )
(signed word) circle::yc#9 ← phi( circle::@2/(signed word) circle::yc#11 )
(signed word) circle::xc#9 ← phi( circle::@2/(signed word) circle::xc#11 )
@ -111,8 +85,8 @@ circle::@4: scope:[circle] from circle::@2
(signed word~) circle::$10 ← (signed word) circle::p#4 + (signed word~) circle::$9
(number~) circle::$11 ← (signed word~) circle::$10 + (number) 6
(signed word) circle::p#1 ← (number~) circle::$11
to:circle::@5
circle::@8: scope:[circle] from circle::@2
to:circle::@4
circle::@5: scope:[circle] from circle::@2
(signed word) circle::yc#10 ← phi( circle::@2/(signed word) circle::yc#11 )
(signed word) circle::xc#10 ← phi( circle::@2/(signed word) circle::xc#11 )
(signed word) circle::p#5 ← phi( circle::@2/(signed word) circle::p#3 )
@ -125,109 +99,109 @@ circle::@8: scope:[circle] from circle::@2
(signed word~) circle::$7 ← (signed word) circle::p#5 + (signed word~) circle::$6
(number~) circle::$8 ← (signed word~) circle::$7 + (number) $a
(signed word) circle::p#2 ← (number~) circle::$8
to:circle::@5
circle::@5: scope:[circle] from circle::@4 circle::@8
(signed word) circle::p#15 ← phi( circle::@4/(signed word) circle::p#1 circle::@8/(signed word) circle::p#2 )
(signed word) circle::y#4 ← phi( circle::@4/(signed word) circle::y#14 circle::@8/(signed word) circle::y#1 )
(signed word) circle::yc#1 ← phi( circle::@4/(signed word) circle::yc#9 circle::@8/(signed word) circle::yc#10 )
(signed word) circle::x1#5 ← phi( circle::@4/(signed word) circle::x1#3 circle::@8/(signed word) circle::x1#4 )
(signed word) circle::xc#1 ← phi( circle::@4/(signed word) circle::xc#9 circle::@8/(signed word) circle::xc#10 )
to:circle::@4
circle::@4: scope:[circle] from circle::@3 circle::@5
(signed word) circle::p#15 ← phi( circle::@3/(signed word) circle::p#1 circle::@5/(signed word) circle::p#2 )
(signed word) circle::y#4 ← phi( circle::@3/(signed word) circle::y#14 circle::@5/(signed word) circle::y#1 )
(signed word) circle::yc#1 ← phi( circle::@3/(signed word) circle::yc#9 circle::@5/(signed word) circle::yc#10 )
(signed word) circle::x1#5 ← phi( circle::@3/(signed word) circle::x1#3 circle::@5/(signed word) circle::x1#4 )
(signed word) circle::xc#1 ← phi( circle::@3/(signed word) circle::xc#9 circle::@5/(signed word) circle::xc#10 )
(signed word~) circle::$12 ← (signed word) circle::xc#1 + (signed word) circle::x1#5
(signed word~) circle::$13 ← (signed word) circle::yc#1 - (signed word) circle::y#4
(signed word) plot::x#0 ← (signed word~) circle::$12
(signed word) plot::y#0 ← (signed word~) circle::$13
call plot
to:circle::@11
circle::@11: scope:[circle] from circle::@5
(signed word) circle::p#14 ← phi( circle::@5/(signed word) circle::p#15 )
(signed word) circle::y#5 ← phi( circle::@5/(signed word) circle::y#4 )
(signed word) circle::yc#2 ← phi( circle::@5/(signed word) circle::yc#1 )
(signed word) circle::x1#6 ← phi( circle::@5/(signed word) circle::x1#5 )
(signed word) circle::xc#2 ← phi( circle::@5/(signed word) circle::xc#1 )
to:circle::@6
circle::@6: scope:[circle] from circle::@4
(signed word) circle::p#14 ← phi( circle::@4/(signed word) circle::p#15 )
(signed word) circle::y#5 ← phi( circle::@4/(signed word) circle::y#4 )
(signed word) circle::yc#2 ← phi( circle::@4/(signed word) circle::yc#1 )
(signed word) circle::x1#6 ← phi( circle::@4/(signed word) circle::x1#5 )
(signed word) circle::xc#2 ← phi( circle::@4/(signed word) circle::xc#1 )
(signed word~) circle::$15 ← (signed word) circle::xc#2 - (signed word) circle::x1#6
(signed word~) circle::$16 ← (signed word) circle::yc#2 - (signed word) circle::y#5
(signed word) plot::x#1 ← (signed word~) circle::$15
(signed word) plot::y#1 ← (signed word~) circle::$16
call plot
to:circle::@12
circle::@12: scope:[circle] from circle::@11
(signed word) circle::p#13 ← phi( circle::@11/(signed word) circle::p#14 )
(signed word) circle::y#6 ← phi( circle::@11/(signed word) circle::y#5 )
(signed word) circle::yc#3 ← phi( circle::@11/(signed word) circle::yc#2 )
(signed word) circle::x1#7 ← phi( circle::@11/(signed word) circle::x1#6 )
(signed word) circle::xc#3 ← phi( circle::@11/(signed word) circle::xc#2 )
to:circle::@7
circle::@7: scope:[circle] from circle::@6
(signed word) circle::p#13 ← phi( circle::@6/(signed word) circle::p#14 )
(signed word) circle::y#6 ← phi( circle::@6/(signed word) circle::y#5 )
(signed word) circle::yc#3 ← phi( circle::@6/(signed word) circle::yc#2 )
(signed word) circle::x1#7 ← phi( circle::@6/(signed word) circle::x1#6 )
(signed word) circle::xc#3 ← phi( circle::@6/(signed word) circle::xc#2 )
(signed word~) circle::$18 ← (signed word) circle::xc#3 + (signed word) circle::x1#7
(signed word~) circle::$19 ← (signed word) circle::yc#3 + (signed word) circle::y#6
(signed word) plot::x#2 ← (signed word~) circle::$18
(signed word) plot::y#2 ← (signed word~) circle::$19
call plot
to:circle::@13
circle::@13: scope:[circle] from circle::@12
(signed word) circle::p#12 ← phi( circle::@12/(signed word) circle::p#13 )
(signed word) circle::y#7 ← phi( circle::@12/(signed word) circle::y#6 )
(signed word) circle::yc#4 ← phi( circle::@12/(signed word) circle::yc#3 )
(signed word) circle::x1#8 ← phi( circle::@12/(signed word) circle::x1#7 )
(signed word) circle::xc#4 ← phi( circle::@12/(signed word) circle::xc#3 )
to:circle::@8
circle::@8: scope:[circle] from circle::@7
(signed word) circle::p#12 ← phi( circle::@7/(signed word) circle::p#13 )
(signed word) circle::y#7 ← phi( circle::@7/(signed word) circle::y#6 )
(signed word) circle::yc#4 ← phi( circle::@7/(signed word) circle::yc#3 )
(signed word) circle::x1#8 ← phi( circle::@7/(signed word) circle::x1#7 )
(signed word) circle::xc#4 ← phi( circle::@7/(signed word) circle::xc#3 )
(signed word~) circle::$21 ← (signed word) circle::xc#4 - (signed word) circle::x1#8
(signed word~) circle::$22 ← (signed word) circle::yc#4 + (signed word) circle::y#7
(signed word) plot::x#3 ← (signed word~) circle::$21
(signed word) plot::y#3 ← (signed word~) circle::$22
call plot
to:circle::@14
circle::@14: scope:[circle] from circle::@13
(signed word) circle::p#11 ← phi( circle::@13/(signed word) circle::p#12 )
(signed word) circle::x1#9 ← phi( circle::@13/(signed word) circle::x1#8 )
(signed word) circle::yc#5 ← phi( circle::@13/(signed word) circle::yc#4 )
(signed word) circle::y#8 ← phi( circle::@13/(signed word) circle::y#7 )
(signed word) circle::xc#5 ← phi( circle::@13/(signed word) circle::xc#4 )
to:circle::@9
circle::@9: scope:[circle] from circle::@8
(signed word) circle::p#11 ← phi( circle::@8/(signed word) circle::p#12 )
(signed word) circle::x1#9 ← phi( circle::@8/(signed word) circle::x1#8 )
(signed word) circle::yc#5 ← phi( circle::@8/(signed word) circle::yc#4 )
(signed word) circle::y#8 ← phi( circle::@8/(signed word) circle::y#7 )
(signed word) circle::xc#5 ← phi( circle::@8/(signed word) circle::xc#4 )
(signed word~) circle::$24 ← (signed word) circle::xc#5 + (signed word) circle::y#8
(signed word~) circle::$25 ← (signed word) circle::yc#5 - (signed word) circle::x1#9
(signed word) plot::x#4 ← (signed word~) circle::$24
(signed word) plot::y#4 ← (signed word~) circle::$25
call plot
to:circle::@15
circle::@15: scope:[circle] from circle::@14
(signed word) circle::p#10 ← phi( circle::@14/(signed word) circle::p#11 )
(signed word) circle::x1#10 ← phi( circle::@14/(signed word) circle::x1#9 )
(signed word) circle::yc#6 ← phi( circle::@14/(signed word) circle::yc#5 )
(signed word) circle::y#9 ← phi( circle::@14/(signed word) circle::y#8 )
(signed word) circle::xc#6 ← phi( circle::@14/(signed word) circle::xc#5 )
to:circle::@10
circle::@10: scope:[circle] from circle::@9
(signed word) circle::p#10 ← phi( circle::@9/(signed word) circle::p#11 )
(signed word) circle::x1#10 ← phi( circle::@9/(signed word) circle::x1#9 )
(signed word) circle::yc#6 ← phi( circle::@9/(signed word) circle::yc#5 )
(signed word) circle::y#9 ← phi( circle::@9/(signed word) circle::y#8 )
(signed word) circle::xc#6 ← phi( circle::@9/(signed word) circle::xc#5 )
(signed word~) circle::$27 ← (signed word) circle::xc#6 - (signed word) circle::y#9
(signed word~) circle::$28 ← (signed word) circle::yc#6 - (signed word) circle::x1#10
(signed word) plot::x#5 ← (signed word~) circle::$27
(signed word) plot::y#5 ← (signed word~) circle::$28
call plot
to:circle::@16
circle::@16: scope:[circle] from circle::@15
(signed word) circle::p#9 ← phi( circle::@15/(signed word) circle::p#10 )
(signed word) circle::x1#11 ← phi( circle::@15/(signed word) circle::x1#10 )
(signed word) circle::yc#7 ← phi( circle::@15/(signed word) circle::yc#6 )
(signed word) circle::y#10 ← phi( circle::@15/(signed word) circle::y#9 )
(signed word) circle::xc#7 ← phi( circle::@15/(signed word) circle::xc#6 )
to:circle::@11
circle::@11: scope:[circle] from circle::@10
(signed word) circle::p#9 ← phi( circle::@10/(signed word) circle::p#10 )
(signed word) circle::x1#11 ← phi( circle::@10/(signed word) circle::x1#10 )
(signed word) circle::yc#7 ← phi( circle::@10/(signed word) circle::yc#6 )
(signed word) circle::y#10 ← phi( circle::@10/(signed word) circle::y#9 )
(signed word) circle::xc#7 ← phi( circle::@10/(signed word) circle::xc#6 )
(signed word~) circle::$30 ← (signed word) circle::xc#7 + (signed word) circle::y#10
(signed word~) circle::$31 ← (signed word) circle::yc#7 + (signed word) circle::x1#11
(signed word) plot::x#6 ← (signed word~) circle::$30
(signed word) plot::y#6 ← (signed word~) circle::$31
call plot
to:circle::@17
circle::@17: scope:[circle] from circle::@16
(signed word) circle::p#8 ← phi( circle::@16/(signed word) circle::p#9 )
(signed word) circle::x1#12 ← phi( circle::@16/(signed word) circle::x1#11 )
(signed word) circle::yc#8 ← phi( circle::@16/(signed word) circle::yc#7 )
(signed word) circle::y#11 ← phi( circle::@16/(signed word) circle::y#10 )
(signed word) circle::xc#8 ← phi( circle::@16/(signed word) circle::xc#7 )
to:circle::@12
circle::@12: scope:[circle] from circle::@11
(signed word) circle::p#8 ← phi( circle::@11/(signed word) circle::p#9 )
(signed word) circle::x1#12 ← phi( circle::@11/(signed word) circle::x1#11 )
(signed word) circle::yc#8 ← phi( circle::@11/(signed word) circle::yc#7 )
(signed word) circle::y#11 ← phi( circle::@11/(signed word) circle::y#10 )
(signed word) circle::xc#8 ← phi( circle::@11/(signed word) circle::xc#7 )
(signed word~) circle::$33 ← (signed word) circle::xc#8 - (signed word) circle::y#11
(signed word~) circle::$34 ← (signed word) circle::yc#8 + (signed word) circle::x1#12
(signed word) plot::x#7 ← (signed word~) circle::$33
(signed word) plot::y#7 ← (signed word~) circle::$34
call plot
to:circle::@18
circle::@18: scope:[circle] from circle::@17
(signed word) circle::yc#14 ← phi( circle::@17/(signed word) circle::yc#8 )
(signed word) circle::xc#14 ← phi( circle::@17/(signed word) circle::xc#8 )
(signed word) circle::p#7 ← phi( circle::@17/(signed word) circle::p#8 )
(signed word) circle::y#12 ← phi( circle::@17/(signed word) circle::y#11 )
(signed word) circle::x1#13 ← phi( circle::@17/(signed word) circle::x1#12 )
to:circle::@13
circle::@13: scope:[circle] from circle::@12
(signed word) circle::yc#14 ← phi( circle::@12/(signed word) circle::yc#8 )
(signed word) circle::xc#14 ← phi( circle::@12/(signed word) circle::xc#8 )
(signed word) circle::p#7 ← phi( circle::@12/(signed word) circle::p#8 )
(signed word) circle::y#12 ← phi( circle::@12/(signed word) circle::y#11 )
(signed word) circle::x1#13 ← phi( circle::@12/(signed word) circle::x1#12 )
(signed word) circle::x1#1 ← ++ (signed word) circle::x1#13
to:circle::@1
circle::@return: scope:[circle] from circle::@1
@ -235,9 +209,9 @@ circle::@return: scope:[circle] from circle::@1
to:@return
(void()) plot((signed word) plot::x , (signed word) plot::y)
plot: scope:[plot] from circle::@11 circle::@12 circle::@13 circle::@14 circle::@15 circle::@16 circle::@17 circle::@5
(signed word) plot::y#8 ← phi( circle::@11/(signed word) plot::y#1 circle::@12/(signed word) plot::y#2 circle::@13/(signed word) plot::y#3 circle::@14/(signed word) plot::y#4 circle::@15/(signed word) plot::y#5 circle::@16/(signed word) plot::y#6 circle::@17/(signed word) plot::y#7 circle::@5/(signed word) plot::y#0 )
(signed word) plot::x#8 ← phi( circle::@11/(signed word) plot::x#1 circle::@12/(signed word) plot::x#2 circle::@13/(signed word) plot::x#3 circle::@14/(signed word) plot::x#4 circle::@15/(signed word) plot::x#5 circle::@16/(signed word) plot::x#6 circle::@17/(signed word) plot::x#7 circle::@5/(signed word) plot::x#0 )
plot: scope:[plot] from circle::@10 circle::@11 circle::@12 circle::@4 circle::@6 circle::@7 circle::@8 circle::@9
(signed word) plot::y#8 ← phi( circle::@10/(signed word) plot::y#5 circle::@11/(signed word) plot::y#6 circle::@12/(signed word) plot::y#7 circle::@4/(signed word) plot::y#0 circle::@6/(signed word) plot::y#1 circle::@7/(signed word) plot::y#2 circle::@8/(signed word) plot::y#3 circle::@9/(signed word) plot::y#4 )
(signed word) plot::x#8 ← phi( circle::@10/(signed word) plot::x#5 circle::@11/(signed word) plot::x#6 circle::@12/(signed word) plot::x#7 circle::@4/(signed word) plot::x#0 circle::@6/(signed word) plot::x#1 circle::@7/(signed word) plot::x#2 circle::@8/(signed word) plot::x#3 circle::@9/(signed word) plot::x#4 )
(bool~) plot::$0 ← (signed word) plot::x#8 < (number) 0
(bool~) plot::$1 ← (signed word) plot::x#8 > (number) $13f
(bool~) plot::$2 ← (bool~) plot::$0 || (bool~) plot::$1
@ -269,10 +243,10 @@ plot::@return: scope:[plot] from plot plot::@1
to:@return
(void()) fill((byte*) fill::start , (signed word) fill::size , (byte) fill::val)
fill: scope:[fill] from main main::@9
(byte) fill::val#4 ← phi( main/(byte) fill::val#0 main::@9/(byte) fill::val#1 )
(signed word) fill::size#2 ← phi( main/(signed word) fill::size#0 main::@9/(signed word) fill::size#1 )
(byte*) fill::start#2 ← phi( main/(byte*) fill::start#0 main::@9/(byte*) fill::start#1 )
fill: scope:[fill] from main main::@4
(byte) fill::val#4 ← phi( main/(byte) fill::val#0 main::@4/(byte) fill::val#1 )
(signed word) fill::size#2 ← phi( main/(signed word) fill::size#0 main::@4/(signed word) fill::size#1 )
(byte*) fill::start#2 ← phi( main/(byte*) fill::start#0 main::@4/(byte*) fill::start#1 )
(byte*~) fill::$0 ← (byte*) fill::start#2 + (signed word) fill::size#2
(byte*) fill::end#0 ← (byte*~) fill::$0
(byte*) fill::addr#0 ← (byte*) fill::start#2
@ -294,16 +268,16 @@ fill::@2: scope:[fill] from fill::@1
fill::@return: scope:[fill] from fill::@1
return
to:@return
@8: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@9
@9: scope:[] from @8
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @9
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @8
(label) @9
(label) @1
(label) @2
(label) @begin
(label) @end
(const nomodify byte*) BITMAP = (byte*)(number) $2000
@ -346,18 +320,18 @@ SYMBOL TABLE SSA
(number~) circle::$8
(signed word~) circle::$9
(label) circle::@1
(label) circle::@10
(label) circle::@11
(label) circle::@12
(label) circle::@13
(label) circle::@14
(label) circle::@15
(label) circle::@16
(label) circle::@17
(label) circle::@18
(label) circle::@2
(label) circle::@3
(label) circle::@4
(label) circle::@5
(label) circle::@6
(label) circle::@7
(label) circle::@8
(label) circle::@9
(label) circle::@return
(signed word) circle::p
(signed word) circle::p#0
@ -475,11 +449,11 @@ SYMBOL TABLE SSA
(void()) main()
(bool~) main::$2
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@2
(label) main::@7
(label) main::@9
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@return
(signed word) main::i
(signed word) main::i#0
@ -708,7 +682,7 @@ Identical Phi Values (byte) fill::val#2 (byte) fill::val#4
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) main::$2 [14] if((signed word) main::i#2<(signed word) $b4) goto main::@2
Simple Condition (bool~) circle::$2 [28] if((signed word) circle::x1#10<=(signed word) circle::y#13) goto circle::@2
Simple Condition (bool~) circle::$3 [30] if((signed word) circle::p#3<(signed byte) 0) goto circle::@4
Simple Condition (bool~) circle::$3 [30] if((signed word) circle::p#3<(signed byte) 0) goto circle::@3
Simple Condition (bool~) fill::$1 [93] if((byte*) fill::addr#2!=(byte*) fill::end#0) goto fill::@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Rewriting ! if()-condition to reversed if() [74] (bool~) plot::$7 ← ! (bool~) plot::$6
@ -731,7 +705,7 @@ Constant (const signed word) circle::yc#0 = $64
Constant (const signed word) circle::x1#0 = 0
Constant (const byte*) plot::location#0 = BITMAP
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [20] if(true) goto main::@7
if() condition always true - replacing block destination [20] if(true) goto main::@3
Successful SSA optimization Pass2ConstantIfs
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
@ -770,12 +744,12 @@ Successful SSA optimization Pass2ConstantInlining
Alias plot::$12 = plot::$17
Successful SSA optimization Pass2AliasElimination
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @8
Adding NOP phi() at start of @9
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@9
Adding NOP phi() at start of main::@7
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of main::@3
CALL GRAPH
Calls in [] to main:2
Calls in [main] to fill:6 fill:8 circle:16
@ -787,22 +761,22 @@ Coalesced [21] circle::y#15 ← circle::r#0
Coalesced [22] circle::p#16 ← circle::p#0
Coalesced [32] circle::y#18 ← circle::y#1
Coalesced [33] circle::p#19 ← circle::p#2
Coalesced [37] plot::x#17 ← plot::x#0
Coalesced [38] plot::y#17 ← plot::y#0
Coalesced [42] plot::x#10 ← plot::x#1
Coalesced [43] plot::y#10 ← plot::y#1
Coalesced [47] plot::x#11 ← plot::x#2
Coalesced [48] plot::y#11 ← plot::y#2
Coalesced [52] plot::x#12 ← plot::x#3
Coalesced [53] plot::y#12 ← plot::y#3
Coalesced [57] plot::x#13 ← plot::x#4
Coalesced [58] plot::y#13 ← plot::y#4
Coalesced [62] plot::x#14 ← plot::x#5
Coalesced [63] plot::y#14 ← plot::y#5
Coalesced [67] plot::x#15 ← plot::x#6
Coalesced [68] plot::y#15 ← plot::y#6
Coalesced [72] plot::x#16 ← plot::x#7
Coalesced [73] plot::y#16 ← plot::y#7
Coalesced [37] plot::x#13 ← plot::x#0
Coalesced [38] plot::y#13 ← plot::y#0
Coalesced [42] plot::x#14 ← plot::x#1
Coalesced [43] plot::y#14 ← plot::y#1
Coalesced [47] plot::x#15 ← plot::x#2
Coalesced [48] plot::y#15 ← plot::y#2
Coalesced [52] plot::x#16 ← plot::x#3
Coalesced [53] plot::y#16 ← plot::y#3
Coalesced [57] plot::x#17 ← plot::x#4
Coalesced [58] plot::y#17 ← plot::y#4
Coalesced [62] plot::x#10 ← plot::x#5
Coalesced [63] plot::y#10 ← plot::y#5
Coalesced [67] plot::x#11 ← plot::x#6
Coalesced [68] plot::y#11 ← plot::y#6
Coalesced [72] plot::x#12 ← plot::x#7
Coalesced [73] plot::y#12 ← plot::y#7
Coalesced [76] circle::x1#15 ← circle::x1#1
Coalesced [77] circle::y#16 ← circle::y#10
Coalesced [78] circle::p#17 ← circle::p#10
@ -811,26 +785,7 @@ Coalesced [83] circle::p#18 ← circle::p#1
Coalesced [105] fill::addr#4 ← fill::addr#0
Coalesced [111] fill::addr#5 ← fill::addr#1
Coalesced down to 9 phi equivalence classes
Culled Empty Block (label) @9
Renumbering block @8 to @1
Renumbering block main::@7 to main::@3
Renumbering block main::@9 to main::@4
Renumbering block main::@10 to main::@5
Renumbering block main::@11 to main::@6
Renumbering block circle::@4 to circle::@3
Renumbering block circle::@5 to circle::@4
Renumbering block circle::@8 to circle::@5
Renumbering block circle::@11 to circle::@6
Renumbering block circle::@12 to circle::@7
Renumbering block circle::@13 to circle::@8
Renumbering block circle::@14 to circle::@9
Renumbering block circle::@15 to circle::@10
Renumbering block circle::@16 to circle::@11
Renumbering block circle::@17 to circle::@12
Renumbering block circle::@18 to circle::@13
Renumbering block plot::@4 to plot::@2
Renumbering block plot::@5 to plot::@3
Renumbering block plot::@6 to plot::@4
Culled Empty Block (label) @2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end
@ -955,8 +910,8 @@ circle::@3: scope:[circle] from circle::@2
(void()) plot((signed word) plot::x , (signed word) plot::y)
plot: scope:[plot] from circle::@10 circle::@11 circle::@12 circle::@4 circle::@6 circle::@7 circle::@8 circle::@9
[57] (signed word) plot::y#8 ← phi( circle::@6/(signed word) plot::y#1 circle::@7/(signed word) plot::y#2 circle::@8/(signed word) plot::y#3 circle::@9/(signed word) plot::y#4 circle::@10/(signed word) plot::y#5 circle::@11/(signed word) plot::y#6 circle::@12/(signed word) plot::y#7 circle::@4/(signed word) plot::y#0 )
[57] (signed word) plot::x#8 ← phi( circle::@6/(signed word) plot::x#1 circle::@7/(signed word) plot::x#2 circle::@8/(signed word) plot::x#3 circle::@9/(signed word) plot::x#4 circle::@10/(signed word) plot::x#5 circle::@11/(signed word) plot::x#6 circle::@12/(signed word) plot::x#7 circle::@4/(signed word) plot::x#0 )
[57] (signed word) plot::y#8 ← phi( circle::@10/(signed word) plot::y#5 circle::@11/(signed word) plot::y#6 circle::@12/(signed word) plot::y#7 circle::@4/(signed word) plot::y#0 circle::@6/(signed word) plot::y#1 circle::@7/(signed word) plot::y#2 circle::@8/(signed word) plot::y#3 circle::@9/(signed word) plot::y#4 )
[57] (signed word) plot::x#8 ← phi( circle::@10/(signed word) plot::x#5 circle::@11/(signed word) plot::x#6 circle::@12/(signed word) plot::x#7 circle::@4/(signed word) plot::x#0 circle::@6/(signed word) plot::x#1 circle::@7/(signed word) plot::x#2 circle::@8/(signed word) plot::x#3 circle::@9/(signed word) plot::x#4 )
[58] if((signed word) plot::x#8<(signed byte) 0) goto plot::@return
to:plot::@4
plot::@4: scope:[plot] from plot
@ -1088,8 +1043,8 @@ Initial phi equivalence classes
[ circle::x1#10 circle::x1#1 ]
[ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ]
[ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ]
[ plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ]
[ plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 ]
[ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
[ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ]
[ fill::size#2 ]
[ fill::val#4 ]
[ fill::addr#2 fill::addr#0 fill::addr#1 ]
@ -1117,8 +1072,8 @@ Complete equivalence classes
[ circle::x1#10 circle::x1#1 ]
[ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ]
[ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ]
[ plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ]
[ plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 ]
[ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
[ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ]
[ fill::size#2 ]
[ fill::val#4 ]
[ fill::addr#2 fill::addr#0 fill::addr#1 ]
@ -1145,8 +1100,8 @@ Allocated zp[2]:2 [ main::i#2 main::i#1 ]
Allocated zp[2]:4 [ circle::x1#10 circle::x1#1 ]
Allocated zp[2]:6 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ]
Allocated zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ]
Allocated zp[2]:10 [ plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ]
Allocated zp[2]:12 [ plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 ]
Allocated zp[2]:10 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
Allocated zp[2]:12 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ]
Allocated zp[2]:14 [ fill::size#2 ]
Allocated zp[1]:16 [ fill::val#4 ]
Allocated zp[2]:17 [ fill::addr#2 fill::addr#0 fill::addr#1 ]
@ -1984,8 +1939,8 @@ Potential registers zp[2]:2 [ main::i#2 main::i#1 ] : zp[2]:2 ,
Potential registers zp[2]:4 [ circle::x1#10 circle::x1#1 ] : zp[2]:4 ,
Potential registers zp[2]:6 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ] : zp[2]:6 ,
Potential registers zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ] : zp[2]:8 ,
Potential registers zp[2]:10 [ plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ] : zp[2]:10 ,
Potential registers zp[2]:12 [ plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 ] : zp[2]:12 ,
Potential registers zp[2]:10 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] : zp[2]:10 ,
Potential registers zp[2]:12 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] : zp[2]:12 ,
Potential registers zp[2]:14 [ fill::size#2 ] : zp[2]:14 ,
Potential registers zp[1]:16 [ fill::val#4 ] : zp[1]:16 , reg byte x ,
Potential registers zp[2]:17 [ fill::addr#2 fill::addr#0 fill::addr#1 ] : zp[2]:17 ,
@ -2010,13 +1965,13 @@ Potential registers zp[1]:50 [ plot::$14 ] : zp[1]:50 , reg byte a , reg byte x
Potential registers zp[2]:51 [ fill::end#0 ] : zp[2]:51 ,
REGISTER UPLIFT SCOPES
Uplift Scope [plot] 2,080,017.2: zp[2]:12 [ plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 ] 2,000,002: zp[2]:31 [ plot::$8 ] 2,000,002: zp[1]:35 [ plot::$9 ] 2,000,002: zp[1]:36 [ plot::$10 ] 2,000,002: zp[2]:41 [ plot::$15 ] 2,000,002: zp[2]:43 [ plot::$16 ] 2,000,002: zp[2]:45 [ plot::$12 ] 2,000,002: zp[1]:49 [ plot::$13 ] 2,000,002: zp[1]:50 [ plot::$14 ] 1,500,001.5: zp[2]:39 [ plot::$11 ] 1,120,008.8: zp[2]:10 [ plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ] 1,000,001: zp[2]:47 [ plot::location#3 ] 666,667.33: zp[2]:33 [ plot::location#1 ] 400,000.4: zp[2]:37 [ plot::location#2 ]
Uplift Scope [plot] 2,080,017.2: zp[2]:12 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] 2,000,002: zp[2]:31 [ plot::$8 ] 2,000,002: zp[1]:35 [ plot::$9 ] 2,000,002: zp[1]:36 [ plot::$10 ] 2,000,002: zp[2]:41 [ plot::$15 ] 2,000,002: zp[2]:43 [ plot::$16 ] 2,000,002: zp[2]:45 [ plot::$12 ] 2,000,002: zp[1]:49 [ plot::$13 ] 2,000,002: zp[1]:50 [ plot::$14 ] 1,500,001.5: zp[2]:39 [ plot::$11 ] 1,120,008.8: zp[2]:10 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] 1,000,001: zp[2]:47 [ plot::location#3 ] 666,667.33: zp[2]:33 [ plot::location#1 ] 400,000.4: zp[2]:37 [ plot::location#2 ]
Uplift Scope [circle] 470,831.01: zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ] 236,113.47: zp[2]:4 [ circle::x1#10 circle::x1#1 ] 200,002: zp[2]:21 [ circle::$5 ] 200,002: zp[2]:23 [ circle::$6 ] 200,002: zp[2]:25 [ circle::$7 ] 200,002: zp[2]:27 [ circle::$9 ] 200,002: zp[2]:29 [ circle::$10 ] 169,843.88: zp[2]:6 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ] 2,002: zp[2]:19 [ circle::$0 ]
Uplift Scope [fill] 3,471.33: zp[2]:17 [ fill::addr#2 fill::addr#0 fill::addr#1 ] 220.4: zp[2]:51 [ fill::end#0 ] 166.83: zp[1]:16 [ fill::val#4 ] 101: zp[2]:14 [ fill::size#2 ]
Uplift Scope [main] 303: zp[2]:2 [ main::i#2 main::i#1 ]
Uplift Scope []
Uplifting [plot] best 53688 combination zp[2]:12 [ plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 ] zp[2]:31 [ plot::$8 ] reg byte a [ plot::$9 ] reg byte a [ plot::$10 ] zp[2]:41 [ plot::$15 ] zp[2]:43 [ plot::$16 ] zp[2]:45 [ plot::$12 ] reg byte a [ plot::$13 ] reg byte a [ plot::$14 ] zp[2]:39 [ plot::$11 ] zp[2]:10 [ plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ] zp[2]:47 [ plot::location#3 ] zp[2]:33 [ plot::location#1 ] zp[2]:37 [ plot::location#2 ]
Uplifting [plot] best 53688 combination zp[2]:12 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] zp[2]:31 [ plot::$8 ] reg byte a [ plot::$9 ] reg byte a [ plot::$10 ] zp[2]:41 [ plot::$15 ] zp[2]:43 [ plot::$16 ] zp[2]:45 [ plot::$12 ] reg byte a [ plot::$13 ] reg byte a [ plot::$14 ] zp[2]:39 [ plot::$11 ] zp[2]:10 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] zp[2]:47 [ plot::location#3 ] zp[2]:33 [ plot::location#1 ] zp[2]:37 [ plot::location#2 ]
Limited combination testing to 100 combinations of 256 possible.
Uplifting [circle] best 53688 combination zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ] zp[2]:4 [ circle::x1#10 circle::x1#1 ] zp[2]:21 [ circle::$5 ] zp[2]:23 [ circle::$6 ] zp[2]:25 [ circle::$7 ] zp[2]:27 [ circle::$9 ] zp[2]:29 [ circle::$10 ] zp[2]:6 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ] zp[2]:19 [ circle::$0 ]
Uplifting [fill] best 53672 combination zp[2]:17 [ fill::addr#2 fill::addr#0 fill::addr#1 ] zp[2]:51 [ fill::end#0 ] reg byte x [ fill::val#4 ] zp[2]:14 [ fill::size#2 ]
@ -2025,7 +1980,7 @@ Uplifting [] best 53672 combination
Coalescing zero page register [ zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 ] ] with [ zp[2]:25 [ circle::$7 ] ] - score: 2
Coalescing zero page register [ zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$7 ] ] with [ zp[2]:29 [ circle::$10 ] ] - score: 2
Coalescing zero page register [ zp[2]:8 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 ] ] with [ zp[2]:19 [ circle::$0 ] ] - score: 1
Coalescing zero page register [ zp[2]:12 [ plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 ] ] with [ zp[2]:39 [ plot::$11 ] ] - score: 1
Coalescing zero page register [ zp[2]:12 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] ] with [ zp[2]:39 [ plot::$11 ] ] - score: 1
Coalescing zero page register [ zp[2]:14 [ fill::size#2 ] ] with [ zp[2]:51 [ fill::end#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:21 [ circle::$5 ] ] with [ zp[2]:23 [ circle::$6 ] ] - score: 1
Coalescing zero page register [ zp[2]:31 [ plot::$8 ] ] with [ zp[2]:33 [ plot::location#1 ] ] - score: 1
@ -2035,13 +1990,13 @@ Coalescing zero page register [ zp[2]:31 [ plot::$8 plot::location#1 ] ] with [
Coalescing zero page register [ zp[2]:41 [ plot::$15 plot::$16 ] ] with [ zp[2]:45 [ plot::$12 ] ] - score: 1
Coalescing zero page register [ zp[2]:14 [ fill::size#2 fill::end#0 ] ] with [ zp[2]:4 [ circle::x1#10 circle::x1#1 ] ]
Coalescing zero page register [ zp[2]:17 [ fill::addr#2 fill::addr#0 fill::addr#1 ] ] with [ zp[2]:6 [ circle::y#13 circle::r#0 circle::y#10 circle::y#1 ] ]
Coalescing zero page register [ zp[2]:21 [ circle::$5 circle::$6 ] ] with [ zp[2]:10 [ plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ] ]
Coalescing zero page register [ zp[2]:27 [ circle::$9 ] ] with [ zp[2]:12 [ plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::$11 ] ]
Coalescing zero page register [ zp[2]:21 [ circle::$5 circle::$6 ] ] with [ zp[2]:10 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] ]
Coalescing zero page register [ zp[2]:27 [ circle::$9 ] ] with [ zp[2]:12 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$11 ] ]
Allocated (was zp[2]:8) zp[2]:4 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 circle::$0 ]
Allocated (was zp[2]:14) zp[2]:6 [ fill::size#2 fill::end#0 circle::x1#10 circle::x1#1 ]
Allocated (was zp[2]:17) zp[2]:8 [ fill::addr#2 fill::addr#0 fill::addr#1 circle::y#13 circle::r#0 circle::y#10 circle::y#1 ]
Allocated (was zp[2]:21) zp[2]:10 [ circle::$5 circle::$6 plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ]
Allocated (was zp[2]:27) zp[2]:12 [ circle::$9 plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::$11 ]
Allocated (was zp[2]:21) zp[2]:10 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
Allocated (was zp[2]:27) zp[2]:12 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$11 ]
Allocated (was zp[2]:31) zp[2]:14 [ plot::$8 plot::location#1 plot::location#2 plot::location#3 ]
Allocated (was zp[2]:41) zp[2]:16 [ plot::$15 plot::$16 plot::$12 ]
@ -2935,8 +2890,8 @@ zp[2]:4 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$
zp[2]:6 [ fill::size#2 fill::end#0 circle::x1#10 circle::x1#1 ]
reg byte x [ fill::val#4 ]
zp[2]:8 [ fill::addr#2 fill::addr#0 fill::addr#1 circle::y#13 circle::r#0 circle::y#10 circle::y#1 ]
zp[2]:10 [ circle::$5 circle::$6 plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ]
zp[2]:12 [ circle::$9 plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::$11 ]
zp[2]:10 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
zp[2]:12 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$11 ]
zp[2]:14 [ plot::$8 plot::location#1 plot::location#2 plot::location#3 ]
reg byte a [ plot::$9 ]
reg byte a [ plot::$10 ]

@ -121,8 +121,8 @@ zp[2]:4 [ circle::p#3 circle::p#0 circle::p#10 circle::p#1 circle::p#2 circle::$
zp[2]:6 [ fill::size#2 fill::end#0 circle::x1#10 circle::x1#1 ]
reg byte x [ fill::val#4 ]
zp[2]:8 [ fill::addr#2 fill::addr#0 fill::addr#1 circle::y#13 circle::r#0 circle::y#10 circle::y#1 ]
zp[2]:10 [ circle::$5 circle::$6 plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ]
zp[2]:12 [ circle::$9 plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::$11 ]
zp[2]:10 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
zp[2]:12 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$11 ]
zp[2]:14 [ plot::$8 plot::location#1 plot::location#2 plot::location#3 ]
reg byte a [ plot::$9 ]
reg byte a [ plot::$10 ]

@ -103,8 +103,8 @@ circle::@3: scope:[circle] from circle::@2
(void()) plot((signed word) plot::x , (signed word) plot::y)
plot: scope:[plot] from circle::@10 circle::@11 circle::@12 circle::@4 circle::@6 circle::@7 circle::@8 circle::@9
[52] (signed word) plot::y#8 ← phi( circle::@6/(signed word) plot::y#1 circle::@7/(signed word) plot::y#2 circle::@8/(signed word) plot::y#3 circle::@9/(signed word) plot::y#4 circle::@10/(signed word) plot::y#5 circle::@11/(signed word) plot::y#6 circle::@12/(signed word) plot::y#7 circle::@4/(signed word) plot::y#0 )
[52] (signed word) plot::x#8 ← phi( circle::@6/(signed word) plot::x#1 circle::@7/(signed word) plot::x#2 circle::@8/(signed word) plot::x#3 circle::@9/(signed word) plot::x#4 circle::@10/(signed word) plot::x#5 circle::@11/(signed word) plot::x#6 circle::@12/(signed word) plot::x#7 circle::@4/(signed word) plot::x#0 )
[52] (signed word) plot::y#8 ← phi( circle::@10/(signed word) plot::y#5 circle::@11/(signed word) plot::y#6 circle::@12/(signed word) plot::y#7 circle::@4/(signed word) plot::y#0 circle::@6/(signed word) plot::y#1 circle::@7/(signed word) plot::y#2 circle::@8/(signed word) plot::y#3 circle::@9/(signed word) plot::y#4 )
[52] (signed word) plot::x#8 ← phi( circle::@10/(signed word) plot::x#5 circle::@11/(signed word) plot::x#6 circle::@12/(signed word) plot::x#7 circle::@4/(signed word) plot::x#0 circle::@6/(signed word) plot::x#1 circle::@7/(signed word) plot::x#2 circle::@8/(signed word) plot::x#3 circle::@9/(signed word) plot::x#4 )
[53] (signed word~) plot::$0 ← (signed word) plot::x#8 & (signed dword) $fff8
[54] (byte*) plot::location#1 ← (const nomodify byte*) BITMAP + (signed word~) plot::$0
[55] (byte~) plot::$1 ← < (signed word) plot::y#8

@ -1,43 +1,23 @@
De-inlining cast (word)toD018::screen
De-inlining cast (word)toSpritePtr::sprite
Identified constant variable (signed word) circle::x
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) main::@2
Culled Empty Block (label) @5
Culled Empty Block (label) circle::@6
Culled Empty Block (label) circle::@3
Culled Empty Block (label) circle::@7
Culled Empty Block (label) circle::@9
Culled Empty Block (label) circle::@10
Culled Empty Block (label) @6
Culled Empty Block (label) @7
Culled Empty Block (label) fill::@4
Culled Empty Block (label) fill::@3
Culled Empty Block (label) fill::@5
Culled Empty Block (label) fill::@6
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@8
to:@1
(void()) main()
main: scope:[main] from @8
main: scope:[main] from @1
(byte*) fill::start#0 ← (const nomodify byte*) BITMAP
(signed word) fill::size#0 ← (number) $28*(number) $19*(number) 8
(byte) fill::val#0 ← (number) 0
call fill
to:main::@3
main::@3: scope:[main] from main
to:main::@2
main::@2: scope:[main] from main
(byte*) fill::start#1 ← (const nomodify byte*) SCREEN
(signed word) fill::size#1 ← (number) $28*(number) $19
(byte) fill::val#1 ← (number) $16
call fill
to:main::@4
main::@4: scope:[main] from main::@3
to:main::@3
main::@3: scope:[main] from main::@2
*((const nomodify byte*) BORDERCOL) ← (const nomodify byte) BLUE
*((const nomodify byte*) D011) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3
*((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) SCREEN&(number) $3fff/(number) $40|(word)(const nomodify byte*) BITMAP&(number) $3fff/(number) $400
@ -45,10 +25,10 @@ main::@4: scope:[main] from main::@3
(signed word) circle::yc#0 ← (number) $64
(signed word) circle::r#0 ← (number) $32
call circle
to:main::@5
main::@5: scope:[main] from main::@4
to:main::@4
main::@4: scope:[main] from main::@3
to:main::@1
main::@1: scope:[main] from main::@1 main::@5
main::@1: scope:[main] from main::@1 main::@4
if(true) goto main::@1
to:main::@return
main::@return: scope:[main] from main::@1
@ -56,22 +36,22 @@ main::@return: scope:[main] from main::@1
to:@return
(void()) circle((signed word) circle::xc , (signed word) circle::yc , (signed word) circle::r)
circle: scope:[circle] from main::@4
(signed word) circle::yc#13 ← phi( main::@4/(signed word) circle::yc#0 )
(signed word) circle::xc#13 ← phi( main::@4/(signed word) circle::xc#0 )
(signed word) circle::r#1 ← phi( main::@4/(signed word) circle::r#0 )
circle: scope:[circle] from main::@3
(signed word) circle::yc#13 ← phi( main::@3/(signed word) circle::yc#0 )
(signed word) circle::xc#13 ← phi( main::@3/(signed word) circle::xc#0 )
(signed word) circle::r#1 ← phi( main::@3/(signed word) circle::r#0 )
(signed word) circle::y#0 ← (signed word) circle::r#1
(signed word~) circle::$0 ← (signed word) circle::r#1 << (number) 1
(number~) circle::$1 ← (number) 3 - (signed word~) circle::$0
(signed word) circle::p#0 ← (number~) circle::$1
(signed word) circle::x1#0 ← (signed word) 0
to:circle::@1
circle::@1: scope:[circle] from circle circle::@18
(signed word) circle::yc#12 ← phi( circle/(signed word) circle::yc#13 circle::@18/(signed word) circle::yc#14 )
(signed word) circle::xc#12 ← phi( circle/(signed word) circle::xc#13 circle::@18/(signed word) circle::xc#14 )
(signed word) circle::p#6 ← phi( circle/(signed word) circle::p#0 circle::@18/(signed word) circle::p#7 )
(signed word) circle::y#2 ← phi( circle/(signed word) circle::y#0 circle::@18/(signed word) circle::y#12 )
(signed word) circle::x1#2 ← phi( circle/(signed word) circle::x1#0 circle::@18/(signed word) circle::x1#1 )
circle::@1: scope:[circle] from circle circle::@13
(signed word) circle::yc#12 ← phi( circle/(signed word) circle::yc#13 circle::@13/(signed word) circle::yc#14 )
(signed word) circle::xc#12 ← phi( circle/(signed word) circle::xc#13 circle::@13/(signed word) circle::xc#14 )
(signed word) circle::p#6 ← phi( circle/(signed word) circle::p#0 circle::@13/(signed word) circle::p#7 )
(signed word) circle::y#2 ← phi( circle/(signed word) circle::y#0 circle::@13/(signed word) circle::y#12 )
(signed word) circle::x1#2 ← phi( circle/(signed word) circle::x1#0 circle::@13/(signed word) circle::x1#1 )
(bool~) circle::$2 ← (signed word) circle::x1#2 <= (signed word) circle::y#2
if((bool~) circle::$2) goto circle::@2
to:circle::@return
@ -82,9 +62,9 @@ circle::@2: scope:[circle] from circle::@1
(signed word) circle::x1#14 ← phi( circle::@1/(signed word) circle::x1#2 )
(signed word) circle::p#3 ← phi( circle::@1/(signed word) circle::p#6 )
(bool~) circle::$3 ← (signed word) circle::p#3 < (number) 0
if((bool~) circle::$3) goto circle::@4
to:circle::@8
circle::@4: scope:[circle] from circle::@2
if((bool~) circle::$3) goto circle::@3
to:circle::@5
circle::@3: scope:[circle] from circle::@2
(signed word) circle::y#14 ← phi( circle::@2/(signed word) circle::y#13 )
(signed word) circle::yc#9 ← phi( circle::@2/(signed word) circle::yc#11 )
(signed word) circle::xc#9 ← phi( circle::@2/(signed word) circle::xc#11 )
@ -94,8 +74,8 @@ circle::@4: scope:[circle] from circle::@2
(signed word~) circle::$10 ← (signed word) circle::p#4 + (signed word~) circle::$9
(number~) circle::$11 ← (signed word~) circle::$10 + (number) 6
(signed word) circle::p#1 ← (number~) circle::$11
to:circle::@5
circle::@8: scope:[circle] from circle::@2
to:circle::@4
circle::@5: scope:[circle] from circle::@2
(signed word) circle::yc#10 ← phi( circle::@2/(signed word) circle::yc#11 )
(signed word) circle::xc#10 ← phi( circle::@2/(signed word) circle::xc#11 )
(signed word) circle::p#5 ← phi( circle::@2/(signed word) circle::p#3 )
@ -108,109 +88,109 @@ circle::@8: scope:[circle] from circle::@2
(signed word~) circle::$7 ← (signed word) circle::p#5 + (signed word~) circle::$6
(number~) circle::$8 ← (signed word~) circle::$7 + (number) $a
(signed word) circle::p#2 ← (number~) circle::$8
to:circle::@5
circle::@5: scope:[circle] from circle::@4 circle::@8
(signed word) circle::p#15 ← phi( circle::@4/(signed word) circle::p#1 circle::@8/(signed word) circle::p#2 )
(signed word) circle::y#4 ← phi( circle::@4/(signed word) circle::y#14 circle::@8/(signed word) circle::y#1 )
(signed word) circle::yc#1 ← phi( circle::@4/(signed word) circle::yc#9 circle::@8/(signed word) circle::yc#10 )
(signed word) circle::x1#5 ← phi( circle::@4/(signed word) circle::x1#3 circle::@8/(signed word) circle::x1#4 )
(signed word) circle::xc#1 ← phi( circle::@4/(signed word) circle::xc#9 circle::@8/(signed word) circle::xc#10 )
to:circle::@4
circle::@4: scope:[circle] from circle::@3 circle::@5
(signed word) circle::p#15 ← phi( circle::@3/(signed word) circle::p#1 circle::@5/(signed word) circle::p#2 )
(signed word) circle::y#4 ← phi( circle::@3/(signed word) circle::y#14 circle::@5/(signed word) circle::y#1 )
(signed word) circle::yc#1 ← phi( circle::@3/(signed word) circle::yc#9 circle::@5/(signed word) circle::yc#10 )
(signed word) circle::x1#5 ← phi( circle::@3/(signed word) circle::x1#3 circle::@5/(signed word) circle::x1#4 )
(signed word) circle::xc#1 ← phi( circle::@3/(signed word) circle::xc#9 circle::@5/(signed word) circle::xc#10 )
(signed word~) circle::$12 ← (signed word) circle::xc#1 + (signed word) circle::x1#5
(signed word~) circle::$13 ← (signed word) circle::yc#1 - (signed word) circle::y#4
(signed word) plot::x#0 ← (signed word~) circle::$12
(signed word) plot::y#0 ← (signed word~) circle::$13
call plot
to:circle::@11
circle::@11: scope:[circle] from circle::@5
(signed word) circle::p#14 ← phi( circle::@5/(signed word) circle::p#15 )
(signed word) circle::y#5 ← phi( circle::@5/(signed word) circle::y#4 )
(signed word) circle::yc#2 ← phi( circle::@5/(signed word) circle::yc#1 )
(signed word) circle::x1#6 ← phi( circle::@5/(signed word) circle::x1#5 )
(signed word) circle::xc#2 ← phi( circle::@5/(signed word) circle::xc#1 )
to:circle::@6
circle::@6: scope:[circle] from circle::@4
(signed word) circle::p#14 ← phi( circle::@4/(signed word) circle::p#15 )
(signed word) circle::y#5 ← phi( circle::@4/(signed word) circle::y#4 )
(signed word) circle::yc#2 ← phi( circle::@4/(signed word) circle::yc#1 )
(signed word) circle::x1#6 ← phi( circle::@4/(signed word) circle::x1#5 )
(signed word) circle::xc#2 ← phi( circle::@4/(signed word) circle::xc#1 )
(signed word~) circle::$15 ← (signed word) circle::xc#2 - (signed word) circle::x1#6
(signed word~) circle::$16 ← (signed word) circle::yc#2 - (signed word) circle::y#5
(signed word) plot::x#1 ← (signed word~) circle::$15
(signed word) plot::y#1 ← (signed word~) circle::$16
call plot
to:circle::@12
circle::@12: scope:[circle] from circle::@11
(signed word) circle::p#13 ← phi( circle::@11/(signed word) circle::p#14 )
(signed word) circle::y#6 ← phi( circle::@11/(signed word) circle::y#5 )
(signed word) circle::yc#3 ← phi( circle::@11/(signed word) circle::yc#2 )
(signed word) circle::x1#7 ← phi( circle::@11/(signed word) circle::x1#6 )
(signed word) circle::xc#3 ← phi( circle::@11/(signed word) circle::xc#2 )
to:circle::@7
circle::@7: scope:[circle] from circle::@6
(signed word) circle::p#13 ← phi( circle::@6/(signed word) circle::p#14 )
(signed word) circle::y#6 ← phi( circle::@6/(signed word) circle::y#5 )
(signed word) circle::yc#3 ← phi( circle::@6/(signed word) circle::yc#2 )
(signed word) circle::x1#7 ← phi( circle::@6/(signed word) circle::x1#6 )
(signed word) circle::xc#3 ← phi( circle::@6/(signed word) circle::xc#2 )
(signed word~) circle::$18 ← (signed word) circle::xc#3 + (signed word) circle::x1#7
(signed word~) circle::$19 ← (signed word) circle::yc#3 + (signed word) circle::y#6
(signed word) plot::x#2 ← (signed word~) circle::$18
(signed word) plot::y#2 ← (signed word~) circle::$19
call plot
to:circle::@13
circle::@13: scope:[circle] from circle::@12
(signed word) circle::p#12 ← phi( circle::@12/(signed word) circle::p#13 )
(signed word) circle::y#7 ← phi( circle::@12/(signed word) circle::y#6 )
(signed word) circle::yc#4 ← phi( circle::@12/(signed word) circle::yc#3 )
(signed word) circle::x1#8 ← phi( circle::@12/(signed word) circle::x1#7 )
(signed word) circle::xc#4 ← phi( circle::@12/(signed word) circle::xc#3 )
to:circle::@8
circle::@8: scope:[circle] from circle::@7
(signed word) circle::p#12 ← phi( circle::@7/(signed word) circle::p#13 )
(signed word) circle::y#7 ← phi( circle::@7/(signed word) circle::y#6 )
(signed word) circle::yc#4 ← phi( circle::@7/(signed word) circle::yc#3 )
(signed word) circle::x1#8 ← phi( circle::@7/(signed word) circle::x1#7 )
(signed word) circle::xc#4 ← phi( circle::@7/(signed word) circle::xc#3 )
(signed word~) circle::$21 ← (signed word) circle::xc#4 - (signed word) circle::x1#8
(signed word~) circle::$22 ← (signed word) circle::yc#4 + (signed word) circle::y#7
(signed word) plot::x#3 ← (signed word~) circle::$21
(signed word) plot::y#3 ← (signed word~) circle::$22
call plot
to:circle::@14
circle::@14: scope:[circle] from circle::@13
(signed word) circle::p#11 ← phi( circle::@13/(signed word) circle::p#12 )
(signed word) circle::x1#9 ← phi( circle::@13/(signed word) circle::x1#8 )
(signed word) circle::yc#5 ← phi( circle::@13/(signed word) circle::yc#4 )
(signed word) circle::y#8 ← phi( circle::@13/(signed word) circle::y#7 )
(signed word) circle::xc#5 ← phi( circle::@13/(signed word) circle::xc#4 )
to:circle::@9
circle::@9: scope:[circle] from circle::@8
(signed word) circle::p#11 ← phi( circle::@8/(signed word) circle::p#12 )
(signed word) circle::x1#9 ← phi( circle::@8/(signed word) circle::x1#8 )
(signed word) circle::yc#5 ← phi( circle::@8/(signed word) circle::yc#4 )
(signed word) circle::y#8 ← phi( circle::@8/(signed word) circle::y#7 )
(signed word) circle::xc#5 ← phi( circle::@8/(signed word) circle::xc#4 )
(signed word~) circle::$24 ← (signed word) circle::xc#5 + (signed word) circle::y#8
(signed word~) circle::$25 ← (signed word) circle::yc#5 - (signed word) circle::x1#9
(signed word) plot::x#4 ← (signed word~) circle::$24
(signed word) plot::y#4 ← (signed word~) circle::$25
call plot
to:circle::@15
circle::@15: scope:[circle] from circle::@14
(signed word) circle::p#10 ← phi( circle::@14/(signed word) circle::p#11 )
(signed word) circle::x1#10 ← phi( circle::@14/(signed word) circle::x1#9 )
(signed word) circle::yc#6 ← phi( circle::@14/(signed word) circle::yc#5 )
(signed word) circle::y#9 ← phi( circle::@14/(signed word) circle::y#8 )
(signed word) circle::xc#6 ← phi( circle::@14/(signed word) circle::xc#5 )
to:circle::@10
circle::@10: scope:[circle] from circle::@9
(signed word) circle::p#10 ← phi( circle::@9/(signed word) circle::p#11 )
(signed word) circle::x1#10 ← phi( circle::@9/(signed word) circle::x1#9 )
(signed word) circle::yc#6 ← phi( circle::@9/(signed word) circle::yc#5 )
(signed word) circle::y#9 ← phi( circle::@9/(signed word) circle::y#8 )
(signed word) circle::xc#6 ← phi( circle::@9/(signed word) circle::xc#5 )
(signed word~) circle::$27 ← (signed word) circle::xc#6 - (signed word) circle::y#9
(signed word~) circle::$28 ← (signed word) circle::yc#6 - (signed word) circle::x1#10
(signed word) plot::x#5 ← (signed word~) circle::$27
(signed word) plot::y#5 ← (signed word~) circle::$28
call plot
to:circle::@16
circle::@16: scope:[circle] from circle::@15
(signed word) circle::p#9 ← phi( circle::@15/(signed word) circle::p#10 )
(signed word) circle::x1#11 ← phi( circle::@15/(signed word) circle::x1#10 )
(signed word) circle::yc#7 ← phi( circle::@15/(signed word) circle::yc#6 )
(signed word) circle::y#10 ← phi( circle::@15/(signed word) circle::y#9 )
(signed word) circle::xc#7 ← phi( circle::@15/(signed word) circle::xc#6 )
to:circle::@11
circle::@11: scope:[circle] from circle::@10
(signed word) circle::p#9 ← phi( circle::@10/(signed word) circle::p#10 )
(signed word) circle::x1#11 ← phi( circle::@10/(signed word) circle::x1#10 )
(signed word) circle::yc#7 ← phi( circle::@10/(signed word) circle::yc#6 )
(signed word) circle::y#10 ← phi( circle::@10/(signed word) circle::y#9 )
(signed word) circle::xc#7 ← phi( circle::@10/(signed word) circle::xc#6 )
(signed word~) circle::$30 ← (signed word) circle::xc#7 + (signed word) circle::y#10
(signed word~) circle::$31 ← (signed word) circle::yc#7 + (signed word) circle::x1#11
(signed word) plot::x#6 ← (signed word~) circle::$30
(signed word) plot::y#6 ← (signed word~) circle::$31
call plot
to:circle::@17
circle::@17: scope:[circle] from circle::@16
(signed word) circle::p#8 ← phi( circle::@16/(signed word) circle::p#9 )
(signed word) circle::x1#12 ← phi( circle::@16/(signed word) circle::x1#11 )
(signed word) circle::yc#8 ← phi( circle::@16/(signed word) circle::yc#7 )
(signed word) circle::y#11 ← phi( circle::@16/(signed word) circle::y#10 )
(signed word) circle::xc#8 ← phi( circle::@16/(signed word) circle::xc#7 )
to:circle::@12
circle::@12: scope:[circle] from circle::@11
(signed word) circle::p#8 ← phi( circle::@11/(signed word) circle::p#9 )
(signed word) circle::x1#12 ← phi( circle::@11/(signed word) circle::x1#11 )
(signed word) circle::yc#8 ← phi( circle::@11/(signed word) circle::yc#7 )
(signed word) circle::y#11 ← phi( circle::@11/(signed word) circle::y#10 )
(signed word) circle::xc#8 ← phi( circle::@11/(signed word) circle::xc#7 )
(signed word~) circle::$33 ← (signed word) circle::xc#8 - (signed word) circle::y#11
(signed word~) circle::$34 ← (signed word) circle::yc#8 + (signed word) circle::x1#12
(signed word) plot::x#7 ← (signed word~) circle::$33
(signed word) plot::y#7 ← (signed word~) circle::$34
call plot
to:circle::@18
circle::@18: scope:[circle] from circle::@17
(signed word) circle::yc#14 ← phi( circle::@17/(signed word) circle::yc#8 )
(signed word) circle::xc#14 ← phi( circle::@17/(signed word) circle::xc#8 )
(signed word) circle::p#7 ← phi( circle::@17/(signed word) circle::p#8 )
(signed word) circle::y#12 ← phi( circle::@17/(signed word) circle::y#11 )
(signed word) circle::x1#13 ← phi( circle::@17/(signed word) circle::x1#12 )
to:circle::@13
circle::@13: scope:[circle] from circle::@12
(signed word) circle::yc#14 ← phi( circle::@12/(signed word) circle::yc#8 )
(signed word) circle::xc#14 ← phi( circle::@12/(signed word) circle::xc#8 )
(signed word) circle::p#7 ← phi( circle::@12/(signed word) circle::p#8 )
(signed word) circle::y#12 ← phi( circle::@12/(signed word) circle::y#11 )
(signed word) circle::x1#13 ← phi( circle::@12/(signed word) circle::x1#12 )
(signed word) circle::x1#1 ← ++ (signed word) circle::x1#13
to:circle::@1
circle::@return: scope:[circle] from circle::@1
@ -218,9 +198,9 @@ circle::@return: scope:[circle] from circle::@1
to:@return
(void()) plot((signed word) plot::x , (signed word) plot::y)
plot: scope:[plot] from circle::@11 circle::@12 circle::@13 circle::@14 circle::@15 circle::@16 circle::@17 circle::@5
(signed word) plot::y#8 ← phi( circle::@11/(signed word) plot::y#1 circle::@12/(signed word) plot::y#2 circle::@13/(signed word) plot::y#3 circle::@14/(signed word) plot::y#4 circle::@15/(signed word) plot::y#5 circle::@16/(signed word) plot::y#6 circle::@17/(signed word) plot::y#7 circle::@5/(signed word) plot::y#0 )
(signed word) plot::x#8 ← phi( circle::@11/(signed word) plot::x#1 circle::@12/(signed word) plot::x#2 circle::@13/(signed word) plot::x#3 circle::@14/(signed word) plot::x#4 circle::@15/(signed word) plot::x#5 circle::@16/(signed word) plot::x#6 circle::@17/(signed word) plot::x#7 circle::@5/(signed word) plot::x#0 )
plot: scope:[plot] from circle::@10 circle::@11 circle::@12 circle::@4 circle::@6 circle::@7 circle::@8 circle::@9
(signed word) plot::y#8 ← phi( circle::@10/(signed word) plot::y#5 circle::@11/(signed word) plot::y#6 circle::@12/(signed word) plot::y#7 circle::@4/(signed word) plot::y#0 circle::@6/(signed word) plot::y#1 circle::@7/(signed word) plot::y#2 circle::@8/(signed word) plot::y#3 circle::@9/(signed word) plot::y#4 )
(signed word) plot::x#8 ← phi( circle::@10/(signed word) plot::x#5 circle::@11/(signed word) plot::x#6 circle::@12/(signed word) plot::x#7 circle::@4/(signed word) plot::x#0 circle::@6/(signed word) plot::x#1 circle::@7/(signed word) plot::x#2 circle::@8/(signed word) plot::x#3 circle::@9/(signed word) plot::x#4 )
(byte*) plot::location#0 ← (const nomodify byte*) BITMAP
(number~) plot::$0 ← (signed word) plot::x#8 & (number) $fff8
(byte*) plot::location#1 ← (byte*) plot::location#0 + (number~) plot::$0
@ -239,10 +219,10 @@ plot::@return: scope:[plot] from plot
to:@return
(void()) fill((byte*) fill::start , (signed word) fill::size , (byte) fill::val)
fill: scope:[fill] from main main::@3
(byte) fill::val#4 ← phi( main/(byte) fill::val#0 main::@3/(byte) fill::val#1 )
(signed word) fill::size#2 ← phi( main/(signed word) fill::size#0 main::@3/(signed word) fill::size#1 )
(byte*) fill::start#2 ← phi( main/(byte*) fill::start#0 main::@3/(byte*) fill::start#1 )
fill: scope:[fill] from main main::@2
(byte) fill::val#4 ← phi( main/(byte) fill::val#0 main::@2/(byte) fill::val#1 )
(signed word) fill::size#2 ← phi( main/(signed word) fill::size#0 main::@2/(signed word) fill::size#1 )
(byte*) fill::start#2 ← phi( main/(byte*) fill::start#0 main::@2/(byte*) fill::start#1 )
(byte*~) fill::$0 ← (byte*) fill::start#2 + (signed word) fill::size#2
(byte*) fill::end#0 ← (byte*~) fill::$0
(byte*) fill::addr#0 ← (byte*) fill::start#2
@ -264,16 +244,16 @@ fill::@2: scope:[fill] from fill::@1
fill::@return: scope:[fill] from fill::@1
return
to:@return
@8: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@9
@9: scope:[] from @8
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @9
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @8
(label) @9
(label) @1
(label) @2
(label) @begin
(label) @end
(const nomodify byte*) BITMAP = (byte*)(number) $2000
@ -316,18 +296,18 @@ SYMBOL TABLE SSA
(number~) circle::$8
(signed word~) circle::$9
(label) circle::@1
(label) circle::@10
(label) circle::@11
(label) circle::@12
(label) circle::@13
(label) circle::@14
(label) circle::@15
(label) circle::@16
(label) circle::@17
(label) circle::@18
(label) circle::@2
(label) circle::@3
(label) circle::@4
(label) circle::@5
(label) circle::@6
(label) circle::@7
(label) circle::@8
(label) circle::@9
(label) circle::@return
(signed word) circle::p
(signed word) circle::p#0
@ -444,9 +424,9 @@ SYMBOL TABLE SSA
(byte) fill::val#4
(void()) main()
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@return
(void()) plot((signed word) plot::x , (signed word) plot::y)
(number~) plot::$0
@ -640,7 +620,7 @@ Identical Phi Values (byte*) fill::end#1 (byte*) fill::end#0
Identical Phi Values (byte) fill::val#2 (byte) fill::val#4
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) circle::$2 [23] if((signed word) circle::x1#10<=(signed word) circle::y#13) goto circle::@2
Simple Condition (bool~) circle::$3 [25] if((signed word) circle::p#3<(signed byte) 0) goto circle::@4
Simple Condition (bool~) circle::$3 [25] if((signed word) circle::p#3<(signed byte) 0) goto circle::@3
Simple Condition (bool~) fill::$1 [79] if((byte*) fill::addr#2!=(byte*) fill::end#0) goto fill::@2
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [1] (signed word) fill::size#0 ← (snumber)(number) $28*(number) $19*(number) 8
@ -692,12 +672,12 @@ Successful SSA optimization Pass2ConstantInlining
Alias plot::$4 = plot::$9
Successful SSA optimization Pass2AliasElimination
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @8
Adding NOP phi() at start of @9
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of circle
CALL GRAPH
@ -708,22 +688,22 @@ Calls in [circle] to plot:32 plot:37 plot:42 plot:47 plot:52 plot:57 plot:62 plo
Created 11 initial phi equivalence classes
Coalesced [25] circle::y#17 ← circle::y#1
Coalesced [26] circle::p#18 ← circle::p#2
Coalesced [30] plot::x#16 ← plot::x#0
Coalesced [31] plot::y#16 ← plot::y#0
Coalesced [35] plot::x#9 ← plot::x#1
Coalesced [36] plot::y#9 ← plot::y#1
Coalesced [40] plot::x#10 ← plot::x#2
Coalesced [41] plot::y#10 ← plot::y#2
Coalesced [45] plot::x#11 ← plot::x#3
Coalesced [46] plot::y#11 ← plot::y#3
Coalesced [50] plot::x#12 ← plot::x#4
Coalesced [51] plot::y#12 ← plot::y#4
Coalesced [55] plot::x#13 ← plot::x#5
Coalesced [56] plot::y#13 ← plot::y#5
Coalesced [60] plot::x#14 ← plot::x#6
Coalesced [61] plot::y#14 ← plot::y#6
Coalesced [65] plot::x#15 ← plot::x#7
Coalesced [66] plot::y#15 ← plot::y#7
Coalesced [30] plot::x#12 ← plot::x#0
Coalesced [31] plot::y#12 ← plot::y#0
Coalesced [35] plot::x#13 ← plot::x#1
Coalesced [36] plot::y#13 ← plot::y#1
Coalesced [40] plot::x#14 ← plot::x#2
Coalesced [41] plot::y#14 ← plot::y#2
Coalesced [45] plot::x#15 ← plot::x#3
Coalesced [46] plot::y#15 ← plot::y#3
Coalesced [50] plot::x#16 ← plot::x#4
Coalesced [51] plot::y#16 ← plot::y#4
Coalesced [55] plot::x#9 ← plot::x#5
Coalesced [56] plot::y#9 ← plot::y#5
Coalesced [60] plot::x#10 ← plot::x#6
Coalesced [61] plot::y#10 ← plot::y#6
Coalesced [65] plot::x#11 ← plot::x#7
Coalesced [66] plot::y#11 ← plot::y#7
Coalesced [69] circle::x1#15 ← circle::x1#1
Coalesced [70] circle::y#15 ← circle::y#10
Coalesced [71] circle::p#16 ← circle::p#10
@ -732,22 +712,8 @@ Coalesced [76] circle::p#17 ← circle::p#1
Coalesced [94] fill::addr#4 ← fill::addr#0
Coalesced [100] fill::addr#5 ← fill::addr#1
Coalesced down to 8 phi equivalence classes
Culled Empty Block (label) @9
Culled Empty Block (label) main::@5
Renumbering block @8 to @1
Renumbering block main::@3 to main::@2
Renumbering block main::@4 to main::@3
Renumbering block circle::@4 to circle::@3
Renumbering block circle::@5 to circle::@4
Renumbering block circle::@8 to circle::@5
Renumbering block circle::@11 to circle::@6
Renumbering block circle::@12 to circle::@7
Renumbering block circle::@13 to circle::@8
Renumbering block circle::@14 to circle::@9
Renumbering block circle::@15 to circle::@10
Renumbering block circle::@16 to circle::@11
Renumbering block circle::@17 to circle::@12
Renumbering block circle::@18 to circle::@13
Culled Empty Block (label) @2
Culled Empty Block (label) main::@4
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end
@ -862,8 +828,8 @@ circle::@3: scope:[circle] from circle::@2
(void()) plot((signed word) plot::x , (signed word) plot::y)
plot: scope:[plot] from circle::@10 circle::@11 circle::@12 circle::@4 circle::@6 circle::@7 circle::@8 circle::@9
[52] (signed word) plot::y#8 ← phi( circle::@6/(signed word) plot::y#1 circle::@7/(signed word) plot::y#2 circle::@8/(signed word) plot::y#3 circle::@9/(signed word) plot::y#4 circle::@10/(signed word) plot::y#5 circle::@11/(signed word) plot::y#6 circle::@12/(signed word) plot::y#7 circle::@4/(signed word) plot::y#0 )
[52] (signed word) plot::x#8 ← phi( circle::@6/(signed word) plot::x#1 circle::@7/(signed word) plot::x#2 circle::@8/(signed word) plot::x#3 circle::@9/(signed word) plot::x#4 circle::@10/(signed word) plot::x#5 circle::@11/(signed word) plot::x#6 circle::@12/(signed word) plot::x#7 circle::@4/(signed word) plot::x#0 )
[52] (signed word) plot::y#8 ← phi( circle::@10/(signed word) plot::y#5 circle::@11/(signed word) plot::y#6 circle::@12/(signed word) plot::y#7 circle::@4/(signed word) plot::y#0 circle::@6/(signed word) plot::y#1 circle::@7/(signed word) plot::y#2 circle::@8/(signed word) plot::y#3 circle::@9/(signed word) plot::y#4 )
[52] (signed word) plot::x#8 ← phi( circle::@10/(signed word) plot::x#5 circle::@11/(signed word) plot::x#6 circle::@12/(signed word) plot::x#7 circle::@4/(signed word) plot::x#0 circle::@6/(signed word) plot::x#1 circle::@7/(signed word) plot::x#2 circle::@8/(signed word) plot::x#3 circle::@9/(signed word) plot::x#4 )
[53] (signed word~) plot::$0 ← (signed word) plot::x#8 & (signed dword) $fff8
[54] (byte*) plot::location#1 ← (const nomodify byte*) BITMAP + (signed word~) plot::$0
[55] (byte~) plot::$1 ← < (signed word) plot::y#8
@ -976,8 +942,8 @@ Initial phi equivalence classes
[ circle::x1#10 circle::x1#1 ]
[ circle::y#13 circle::y#10 circle::y#1 ]
[ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ]
[ plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ]
[ plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 ]
[ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
[ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ]
[ fill::size#2 ]
[ fill::val#4 ]
[ fill::addr#2 fill::addr#0 fill::addr#1 ]
@ -1003,8 +969,8 @@ Complete equivalence classes
[ circle::x1#10 circle::x1#1 ]
[ circle::y#13 circle::y#10 circle::y#1 ]
[ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ]
[ plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ]
[ plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 ]
[ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
[ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ]
[ fill::size#2 ]
[ fill::val#4 ]
[ fill::addr#2 fill::addr#0 fill::addr#1 ]
@ -1029,8 +995,8 @@ Complete equivalence classes
Allocated zp[2]:2 [ circle::x1#10 circle::x1#1 ]
Allocated zp[2]:4 [ circle::y#13 circle::y#10 circle::y#1 ]
Allocated zp[2]:6 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ]
Allocated zp[2]:8 [ plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ]
Allocated zp[2]:10 [ plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 ]
Allocated zp[2]:8 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
Allocated zp[2]:10 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ]
Allocated zp[2]:12 [ fill::size#2 ]
Allocated zp[1]:14 [ fill::val#4 ]
Allocated zp[2]:15 [ fill::addr#2 fill::addr#0 fill::addr#1 ]
@ -1766,8 +1732,8 @@ Statement [72] *((byte*) fill::addr#2) ← (byte) fill::val#4 [ fill::val#4 fill
Potential registers zp[2]:2 [ circle::x1#10 circle::x1#1 ] : zp[2]:2 ,
Potential registers zp[2]:4 [ circle::y#13 circle::y#10 circle::y#1 ] : zp[2]:4 ,
Potential registers zp[2]:6 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] : zp[2]:6 ,
Potential registers zp[2]:8 [ plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ] : zp[2]:8 ,
Potential registers zp[2]:10 [ plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 ] : zp[2]:10 ,
Potential registers zp[2]:8 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] : zp[2]:8 ,
Potential registers zp[2]:10 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] : zp[2]:10 ,
Potential registers zp[2]:12 [ fill::size#2 ] : zp[2]:12 ,
Potential registers zp[1]:14 [ fill::val#4 ] : zp[1]:14 , reg byte x ,
Potential registers zp[2]:15 [ fill::addr#2 fill::addr#0 fill::addr#1 ] : zp[2]:15 ,
@ -1791,13 +1757,13 @@ Potential registers zp[1]:46 [ plot::$6 ] : zp[1]:46 , reg byte a , reg byte x ,
Potential registers zp[2]:47 [ fill::end#0 ] : zp[2]:47 ,
REGISTER UPLIFT SCOPES
Uplift Scope [plot] 20,684.33: zp[2]:10 [ plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 ] 20,002: zp[2]:27 [ plot::$0 ] 20,002: zp[1]:31 [ plot::$1 ] 20,002: zp[1]:32 [ plot::$2 ] 20,002: zp[2]:37 [ plot::$7 ] 20,002: zp[2]:39 [ plot::$8 ] 20,002: zp[2]:41 [ plot::$4 ] 20,002: zp[1]:45 [ plot::$5 ] 20,002: zp[1]:46 [ plot::$6 ] 15,001.5: zp[2]:35 [ plot::$3 ] 10,554.36: zp[2]:8 [ plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ] 10,001: zp[2]:43 [ plot::location#3 ] 6,667.33: zp[2]:29 [ plot::location#1 ] 4,000.4: zp[2]:33 [ plot::location#2 ]
Uplift Scope [plot] 20,684.33: zp[2]:10 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] 20,002: zp[2]:27 [ plot::$0 ] 20,002: zp[1]:31 [ plot::$1 ] 20,002: zp[1]:32 [ plot::$2 ] 20,002: zp[2]:37 [ plot::$7 ] 20,002: zp[2]:39 [ plot::$8 ] 20,002: zp[2]:41 [ plot::$4 ] 20,002: zp[1]:45 [ plot::$5 ] 20,002: zp[1]:46 [ plot::$6 ] 15,001.5: zp[2]:35 [ plot::$3 ] 10,554.36: zp[2]:8 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] 10,001: zp[2]:43 [ plot::location#3 ] 6,667.33: zp[2]:29 [ plot::location#1 ] 4,000.4: zp[2]:33 [ plot::location#2 ]
Uplift Scope [circle] 4,691.5: zp[2]:6 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] 2,363.47: zp[2]:2 [ circle::x1#10 circle::x1#1 ] 2,002: zp[2]:17 [ circle::$5 ] 2,002: zp[2]:19 [ circle::$6 ] 2,002: zp[2]:21 [ circle::$7 ] 2,002: zp[2]:23 [ circle::$9 ] 2,002: zp[2]:25 [ circle::$10 ] 1,691.43: zp[2]:4 [ circle::y#13 circle::y#10 circle::y#1 ]
Uplift Scope [fill] 3,471.33: zp[2]:15 [ fill::addr#2 fill::addr#0 fill::addr#1 ] 220.4: zp[2]:47 [ fill::end#0 ] 166.83: zp[1]:14 [ fill::val#4 ] 101: zp[2]:12 [ fill::size#2 ]
Uplift Scope [main]
Uplift Scope []
Uplifting [plot] best 6419 combination zp[2]:10 [ plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 ] zp[2]:27 [ plot::$0 ] reg byte a [ plot::$1 ] reg byte a [ plot::$2 ] zp[2]:37 [ plot::$7 ] zp[2]:39 [ plot::$8 ] zp[2]:41 [ plot::$4 ] reg byte a [ plot::$5 ] reg byte a [ plot::$6 ] zp[2]:35 [ plot::$3 ] zp[2]:8 [ plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ] zp[2]:43 [ plot::location#3 ] zp[2]:29 [ plot::location#1 ] zp[2]:33 [ plot::location#2 ]
Uplifting [plot] best 6419 combination zp[2]:10 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] zp[2]:27 [ plot::$0 ] reg byte a [ plot::$1 ] reg byte a [ plot::$2 ] zp[2]:37 [ plot::$7 ] zp[2]:39 [ plot::$8 ] zp[2]:41 [ plot::$4 ] reg byte a [ plot::$5 ] reg byte a [ plot::$6 ] zp[2]:35 [ plot::$3 ] zp[2]:8 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] zp[2]:43 [ plot::location#3 ] zp[2]:29 [ plot::location#1 ] zp[2]:33 [ plot::location#2 ]
Limited combination testing to 100 combinations of 256 possible.
Uplifting [circle] best 6419 combination zp[2]:6 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] zp[2]:2 [ circle::x1#10 circle::x1#1 ] zp[2]:17 [ circle::$5 ] zp[2]:19 [ circle::$6 ] zp[2]:21 [ circle::$7 ] zp[2]:23 [ circle::$9 ] zp[2]:25 [ circle::$10 ] zp[2]:4 [ circle::y#13 circle::y#10 circle::y#1 ]
Uplifting [fill] best 6403 combination zp[2]:15 [ fill::addr#2 fill::addr#0 fill::addr#1 ] zp[2]:47 [ fill::end#0 ] reg byte x [ fill::val#4 ] zp[2]:12 [ fill::size#2 ]
@ -1805,7 +1771,7 @@ Uplifting [main] best 6403 combination
Uplifting [] best 6403 combination
Coalescing zero page register [ zp[2]:6 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 ] ] with [ zp[2]:21 [ circle::$7 ] ] - score: 2
Coalescing zero page register [ zp[2]:6 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 circle::$7 ] ] with [ zp[2]:25 [ circle::$10 ] ] - score: 2
Coalescing zero page register [ zp[2]:10 [ plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 ] ] with [ zp[2]:35 [ plot::$3 ] ] - score: 1
Coalescing zero page register [ zp[2]:10 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 ] ] with [ zp[2]:35 [ plot::$3 ] ] - score: 1
Coalescing zero page register [ zp[2]:12 [ fill::size#2 ] ] with [ zp[2]:47 [ fill::end#0 ] ] - score: 1
Coalescing zero page register [ zp[2]:17 [ circle::$5 ] ] with [ zp[2]:19 [ circle::$6 ] ] - score: 1
Coalescing zero page register [ zp[2]:27 [ plot::$0 ] ] with [ zp[2]:29 [ plot::location#1 ] ] - score: 1
@ -1815,13 +1781,13 @@ Coalescing zero page register [ zp[2]:27 [ plot::$0 plot::location#1 ] ] with [
Coalescing zero page register [ zp[2]:37 [ plot::$7 plot::$8 ] ] with [ zp[2]:41 [ plot::$4 ] ] - score: 1
Coalescing zero page register [ zp[2]:12 [ fill::size#2 fill::end#0 ] ] with [ zp[2]:2 [ circle::x1#10 circle::x1#1 ] ]
Coalescing zero page register [ zp[2]:15 [ fill::addr#2 fill::addr#0 fill::addr#1 ] ] with [ zp[2]:4 [ circle::y#13 circle::y#10 circle::y#1 ] ]
Coalescing zero page register [ zp[2]:17 [ circle::$5 circle::$6 ] ] with [ zp[2]:8 [ plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ] ]
Coalescing zero page register [ zp[2]:23 [ circle::$9 ] ] with [ zp[2]:10 [ plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::$3 ] ]
Coalescing zero page register [ zp[2]:17 [ circle::$5 circle::$6 ] ] with [ zp[2]:8 [ plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ] ]
Coalescing zero page register [ zp[2]:23 [ circle::$9 ] ] with [ zp[2]:10 [ plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$3 ] ]
Allocated (was zp[2]:6) zp[2]:2 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$10 ]
Allocated (was zp[2]:12) zp[2]:4 [ fill::size#2 fill::end#0 circle::x1#10 circle::x1#1 ]
Allocated (was zp[2]:15) zp[2]:6 [ fill::addr#2 fill::addr#0 fill::addr#1 circle::y#13 circle::y#10 circle::y#1 ]
Allocated (was zp[2]:17) zp[2]:8 [ circle::$5 circle::$6 plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ]
Allocated (was zp[2]:23) zp[2]:10 [ circle::$9 plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::$3 ]
Allocated (was zp[2]:17) zp[2]:8 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
Allocated (was zp[2]:23) zp[2]:10 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$3 ]
Allocated (was zp[2]:27) zp[2]:12 [ plot::$0 plot::location#1 plot::location#2 plot::location#3 ]
Allocated (was zp[2]:37) zp[2]:14 [ plot::$7 plot::$8 plot::$4 ]
@ -2605,8 +2571,8 @@ zp[2]:2 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$1
zp[2]:4 [ fill::size#2 fill::end#0 circle::x1#10 circle::x1#1 ]
reg byte x [ fill::val#4 ]
zp[2]:6 [ fill::addr#2 fill::addr#0 fill::addr#1 circle::y#13 circle::y#10 circle::y#1 ]
zp[2]:8 [ circle::$5 circle::$6 plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ]
zp[2]:10 [ circle::$9 plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::$3 ]
zp[2]:8 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
zp[2]:10 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$3 ]
zp[2]:12 [ plot::$0 plot::location#1 plot::location#2 plot::location#3 ]
reg byte a [ plot::$1 ]
reg byte a [ plot::$2 ]

@ -108,8 +108,8 @@ zp[2]:2 [ circle::p#3 circle::p#10 circle::p#1 circle::p#2 circle::$7 circle::$1
zp[2]:4 [ fill::size#2 fill::end#0 circle::x1#10 circle::x1#1 ]
reg byte x [ fill::val#4 ]
zp[2]:6 [ fill::addr#2 fill::addr#0 fill::addr#1 circle::y#13 circle::y#10 circle::y#1 ]
zp[2]:8 [ circle::$5 circle::$6 plot::x#8 plot::x#1 plot::x#2 plot::x#3 plot::x#4 plot::x#5 plot::x#6 plot::x#7 plot::x#0 ]
zp[2]:10 [ circle::$9 plot::y#8 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::$3 ]
zp[2]:8 [ circle::$5 circle::$6 plot::x#8 plot::x#5 plot::x#6 plot::x#7 plot::x#0 plot::x#1 plot::x#2 plot::x#3 plot::x#4 ]
zp[2]:10 [ circle::$9 plot::y#8 plot::y#5 plot::y#6 plot::y#7 plot::y#0 plot::y#1 plot::y#2 plot::y#3 plot::y#4 plot::$3 ]
zp[2]:12 [ plot::$0 plot::location#1 plot::location#2 plot::location#3 ]
reg byte a [ plot::$1 ]
reg byte a [ plot::$2 ]

File diff suppressed because it is too large Load Diff

@ -135,8 +135,8 @@ bitmap_line::@4: scope:[bitmap_line] from bitmap_line::@18
(void()) bitmap_plot((word) bitmap_plot::x , (byte) bitmap_plot::y)
bitmap_plot: scope:[bitmap_plot] from bitmap_line::@3 bitmap_line::@4 bitmap_line::@6 bitmap_line::@9
[66] (word) bitmap_plot::x#4 ← phi( bitmap_line::@9/(word) bitmap_plot::x#3 bitmap_line::@3/(word) bitmap_plot::x#2 bitmap_line::@4/(const word) bitmap_line::x1#0 bitmap_line::@6/(word) bitmap_plot::x#1 )
[66] (byte) bitmap_plot::y#4 ← phi( bitmap_line::@9/(byte) bitmap_plot::y#3 bitmap_line::@3/(byte) bitmap_plot::y#2 bitmap_line::@4/(byte) 0 bitmap_line::@6/(byte) bitmap_plot::y#1 )
[66] (word) bitmap_plot::x#4 ← phi( bitmap_line::@3/(word) bitmap_plot::x#2 bitmap_line::@4/(const word) bitmap_line::x1#0 bitmap_line::@6/(word) bitmap_plot::x#1 bitmap_line::@9/(word) bitmap_plot::x#3 )
[66] (byte) bitmap_plot::y#4 ← phi( bitmap_line::@3/(byte) bitmap_plot::y#2 bitmap_line::@4/(byte) 0 bitmap_line::@6/(byte) bitmap_plot::y#1 bitmap_line::@9/(byte) bitmap_plot::y#3 )
[67] (word) bitmap_plot::plotter#0 ← *((const to_nomodify byte*) bitmap_plot_yhi + (byte) bitmap_plot::y#4) w= *((const to_nomodify byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#4)
[68] (word~) bitmap_plot::$0 ← (word) bitmap_plot::x#4 & (word) $fff8
[69] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$0

File diff suppressed because it is too large Load Diff

@ -187,11 +187,11 @@
zp[2]:2 [ next#5 next#3 next#1 bitmap_line::x2#0 ]
zp[2]:4 [ bitmap_line::e1#3 bitmap_line::e1#6 bitmap_line::e1#0 bitmap_line::e1#2 bitmap_line::e1#1 ]
reg byte x [ bitmap_plot::y#4 bitmap_plot::y#3 bitmap_plot::y#2 bitmap_plot::y#1 ]
reg byte x [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#1 bitmap_plot::y#3 ]
zp[2]:6 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
zp[2]:8 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
zp[2]:10 [ memset::num#2 memset::end#0 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]
zp[2]:12 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#3 bitmap_plot::x#2 bitmap_plot::x#1 ]
zp[2]:12 [ memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#1 bitmap_plot::x#3 ]
reg byte x [ memset::c#4 ]
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]

@ -2,56 +2,12 @@ Resolved forward reference frame_cnt to (volatile byte) frame_cnt
Resolved forward reference frame_cnt to (volatile byte) frame_cnt
Resolved forward reference frame_cnt to (volatile byte) frame_cnt
Resolved forward reference irq to interrupt(HARDWARE_CLOBBER)(void()) irq()
De-inlining cast (word)toD018::screen
De-inlining cast (word)toSpritePtr::sprite
De-inlining cast (byte*)memcpy::source
De-inlining cast (word)memmove::destination
De-inlining cast (word)memmove::source
De-inlining cast (byte*)memmove::source
De-inlining cast (byte*)memmove::destination
De-inlining cast (byte*)memset::str
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) strupr::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) strlen::str)
Warning! Adding boolean cast to non-boolean condition (number~) abs_u16::$1
Warning! Adding boolean cast to non-boolean condition (number~) sgn_u16::$1
Warning! Adding boolean cast to non-boolean sub-expression (volatile byte) frame_cnt
Identified constant variable (byte*) BITMAP
Identified constant variable (byte*) SCREEN
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Inlined call (byte~) main::$2 ← call toD018 (const byte*) SCREEN (const byte*) BITMAP
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) @7
Culled Empty Block (label) memset::@7
Culled Empty Block (label) memset::@6
Culled Empty Block (label) memset::@8
Culled Empty Block (label) memset::@9
Culled Empty Block (label) memset::@3
Culled Empty Block (label) @8
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) bitmap_init::@8
Culled Empty Block (label) @12
Culled Empty Block (label) @13
Culled Empty Block (label) @14
Culled Empty Block (label) @15
Culled Empty Block (label) @16
Culled Empty Block (label) @17
Culled Empty Block (label) main::toD0181_@1
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::@10
Culled Empty Block (label) @19
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@11
to:@1
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
memset: scope:[memset] from bitmap_clear bitmap_clear::@1
@ -62,8 +18,8 @@ memset: scope:[memset] from bitmap_clear bitmap_clear::@1
(bool~) memset::$1 ← ! (bool~) memset::$0
if((bool~) memset::$1) goto memset::@1
to:memset::@2
memset::@1: scope:[memset] from memset memset::@4
(void*) memset::str#2 ← phi( memset/(void*) memset::str#4 memset::@4/(void*) memset::str#5 )
memset::@1: scope:[memset] from memset memset::@3
(void*) memset::str#2 ← phi( memset/(void*) memset::str#4 memset::@3/(void*) memset::str#5 )
(void*) memset::return#0 ← (void*) memset::str#2
to:memset::@return
memset::@2: scope:[memset] from memset
@ -74,32 +30,32 @@ memset::@2: scope:[memset] from memset
(byte*~) memset::$2 ← (byte*~) memset::$4 + (word) memset::num#3
(byte*) memset::end#0 ← (byte*~) memset::$2
(byte*) memset::dst#0 ← ((byte*)) (void*) memset::str#3
to:memset::@4
memset::@4: scope:[memset] from memset::@2 memset::@5
(byte) memset::c#3 ← phi( memset::@2/(byte) memset::c#4 memset::@5/(byte) memset::c#2 )
(void*) memset::str#5 ← phi( memset::@2/(void*) memset::str#3 memset::@5/(void*) memset::str#6 )
(byte*) memset::end#1 ← phi( memset::@2/(byte*) memset::end#0 memset::@5/(byte*) memset::end#2 )
(byte*) memset::dst#2 ← phi( memset::@2/(byte*) memset::dst#0 memset::@5/(byte*) memset::dst#1 )
to:memset::@3
memset::@3: scope:[memset] from memset::@2 memset::@4
(byte) memset::c#3 ← phi( memset::@2/(byte) memset::c#4 memset::@4/(byte) memset::c#2 )
(void*) memset::str#5 ← phi( memset::@2/(void*) memset::str#3 memset::@4/(void*) memset::str#6 )
(byte*) memset::end#1 ← phi( memset::@2/(byte*) memset::end#0 memset::@4/(byte*) memset::end#2 )
(byte*) memset::dst#2 ← phi( memset::@2/(byte*) memset::dst#0 memset::@4/(byte*) memset::dst#1 )
(bool~) memset::$3 ← (byte*) memset::dst#2 != (byte*) memset::end#1
if((bool~) memset::$3) goto memset::@5
if((bool~) memset::$3) goto memset::@4
to:memset::@1
memset::@5: scope:[memset] from memset::@4
(void*) memset::str#6 ← phi( memset::@4/(void*) memset::str#5 )
(byte*) memset::end#2 ← phi( memset::@4/(byte*) memset::end#1 )
(byte*) memset::dst#3 ← phi( memset::@4/(byte*) memset::dst#2 )
(byte) memset::c#2 ← phi( memset::@4/(byte) memset::c#3 )
memset::@4: scope:[memset] from memset::@3
(void*) memset::str#6 ← phi( memset::@3/(void*) memset::str#5 )
(byte*) memset::end#2 ← phi( memset::@3/(byte*) memset::end#1 )
(byte*) memset::dst#3 ← phi( memset::@3/(byte*) memset::dst#2 )
(byte) memset::c#2 ← phi( memset::@3/(byte) memset::c#3 )
*((byte*) memset::dst#3) ← (byte) memset::c#2
(byte*) memset::dst#1 ← ++ (byte*) memset::dst#3
to:memset::@4
to:memset::@3
memset::@return: scope:[memset] from memset::@1
(void*) memset::return#4 ← phi( memset::@1/(void*) memset::return#0 )
(void*) memset::return#1 ← (void*) memset::return#4
return
to:@return
@11: scope:[] from @begin
@1: scope:[] from @begin
(byte*) bitmap_screen#0 ← (byte*) 0
(byte*) bitmap_gfx#0 ← (byte*) 0
to:@18
to:@2
(void()) bitmap_init((byte*) bitmap_init::gfx , (byte*) bitmap_init::screen)
bitmap_init: scope:[bitmap_init] from main
@ -188,11 +144,11 @@ bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@6
to:@return
(void()) bitmap_clear((byte) bitmap_clear::bgcol , (byte) bitmap_clear::fgcol)
bitmap_clear: scope:[bitmap_clear] from main::@12
(byte*) bitmap_gfx#12 ← phi( main::@12/(byte*) bitmap_gfx#3 )
(byte*) bitmap_screen#7 ← phi( main::@12/(byte*) bitmap_screen#3 )
(byte) bitmap_clear::bgcol#1 ← phi( main::@12/(byte) bitmap_clear::bgcol#0 )
(byte) bitmap_clear::fgcol#1 ← phi( main::@12/(byte) bitmap_clear::fgcol#0 )
bitmap_clear: scope:[bitmap_clear] from main::@8
(byte*) bitmap_gfx#12 ← phi( main::@8/(byte*) bitmap_gfx#3 )
(byte*) bitmap_screen#7 ← phi( main::@8/(byte*) bitmap_screen#3 )
(byte) bitmap_clear::bgcol#1 ← phi( main::@8/(byte) bitmap_clear::bgcol#0 )
(byte) bitmap_clear::fgcol#1 ← phi( main::@8/(byte) bitmap_clear::fgcol#0 )
(number~) bitmap_clear::$0 ← (byte) bitmap_clear::fgcol#1 * (number) $10
(number~) bitmap_clear::$1 ← (number~) bitmap_clear::$0 + (byte) bitmap_clear::bgcol#1
(byte) bitmap_clear::col#0 ← (number~) bitmap_clear::$1
@ -231,14 +187,14 @@ bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot
to:@return
(void()) main()
main: scope:[main] from @20
(byte*) bitmap_screen#12 ← phi( @20/(byte*) bitmap_screen#14 )
(byte*) bitmap_gfx#13 ← phi( @20/(byte*) bitmap_gfx#15 )
main: scope:[main] from @3
(byte*) bitmap_screen#12 ← phi( @3/(byte*) bitmap_screen#14 )
(byte*) bitmap_gfx#13 ← phi( @3/(byte*) bitmap_gfx#15 )
(byte*) bitmap_init::gfx#0 ← (const byte*) BITMAP
(byte*) bitmap_init::screen#0 ← (const byte*) SCREEN
call bitmap_init
to:main::@12
main::@12: scope:[main] from main
to:main::@8
main::@8: scope:[main] from main
(byte*) bitmap_screen#8 ← phi( main/(byte*) bitmap_screen#2 )
(byte*) bitmap_gfx#8 ← phi( main/(byte*) bitmap_gfx#2 )
(byte*) bitmap_gfx#3 ← (byte*) bitmap_gfx#8
@ -246,19 +202,19 @@ main::@12: scope:[main] from main
(byte) bitmap_clear::bgcol#0 ← (const nomodify byte) BLACK
(byte) bitmap_clear::fgcol#0 ← (const nomodify byte) WHITE
call bitmap_clear
to:main::@13
main::@13: scope:[main] from main::@12
(byte*) bitmap_screen#32 ← phi( main::@12/(byte*) bitmap_screen#3 )
(byte*) bitmap_gfx#33 ← phi( main::@12/(byte*) bitmap_gfx#3 )
to:main::@9
main::@9: scope:[main] from main::@8
(byte*) bitmap_screen#32 ← phi( main::@8/(byte*) bitmap_screen#3 )
(byte*) bitmap_gfx#33 ← phi( main::@8/(byte*) bitmap_gfx#3 )
*((const nomodify byte*) D011) ← (const nomodify byte) VIC_BMM|(const nomodify byte) VIC_DEN|(const nomodify byte) VIC_RSEL|(number) 3
(byte*) main::toD0181_screen#0 ← (const byte*) SCREEN
(byte*) main::toD0181_gfx#0 ← (const byte*) BITMAP
to:main::toD0181
main::toD0181: scope:[main] from main::@13
(byte*) bitmap_screen#30 ← phi( main::@13/(byte*) bitmap_screen#32 )
(byte*) bitmap_gfx#31 ← phi( main::@13/(byte*) bitmap_gfx#33 )
(byte*) main::toD0181_gfx#1 ← phi( main::@13/(byte*) main::toD0181_gfx#0 )
(byte*) main::toD0181_screen#1 ← phi( main::@13/(byte*) main::toD0181_screen#0 )
main::toD0181: scope:[main] from main::@9
(byte*) bitmap_screen#30 ← phi( main::@9/(byte*) bitmap_screen#32 )
(byte*) bitmap_gfx#31 ← phi( main::@9/(byte*) bitmap_gfx#33 )
(byte*) main::toD0181_gfx#1 ← phi( main::@9/(byte*) main::toD0181_gfx#0 )
(byte*) main::toD0181_screen#1 ← phi( main::@9/(byte*) main::toD0181_screen#0 )
(word~) main::toD0181_$7 ← (word)(byte*) main::toD0181_screen#1
(number~) main::toD0181_$0 ← (word~) main::toD0181_$7 & (number) $3fff
(number~) main::toD0181_$1 ← (number~) main::toD0181_$0 * (number) 4
@ -274,30 +230,30 @@ main::toD0181_@return: scope:[main] from main::toD0181
(byte*) bitmap_gfx#26 ← phi( main::toD0181/(byte*) bitmap_gfx#31 )
(byte) main::toD0181_return#2 ← phi( main::toD0181/(byte) main::toD0181_return#0 )
(byte) main::toD0181_return#1 ← (byte) main::toD0181_return#2
to:main::@11
main::@11: scope:[main] from main::toD0181_@return
to:main::@7
main::@7: scope:[main] from main::toD0181_@return
(byte*) bitmap_screen#21 ← phi( main::toD0181_@return/(byte*) bitmap_screen#25 )
(byte*) bitmap_gfx#22 ← phi( main::toD0181_@return/(byte*) bitmap_gfx#26 )
(byte) main::toD0181_return#3 ← phi( main::toD0181_@return/(byte) main::toD0181_return#1 )
(byte~) main::$2 ← (byte) main::toD0181_return#3
*((const nomodify byte*) D018) ← (byte~) main::$2
call init_irq
to:main::@14
main::@14: scope:[main] from main::@11
(byte*) bitmap_screen#17 ← phi( main::@11/(byte*) bitmap_screen#21 )
(byte*) bitmap_gfx#18 ← phi( main::@11/(byte*) bitmap_gfx#22 )
to:main::@10
main::@10: scope:[main] from main::@7
(byte*) bitmap_screen#17 ← phi( main::@7/(byte*) bitmap_screen#21 )
(byte*) bitmap_gfx#18 ← phi( main::@7/(byte*) bitmap_gfx#22 )
(word) main::x#0 ← (word) 0
(byte) main::y#0 ← (byte) 0
(word) main::vx#0 ← (word) 1
(byte) main::vy#0 ← (byte) 1
to:main::@1
main::@1: scope:[main] from main::@14 main::@5
(byte) main::vy#6 ← phi( main::@14/(byte) main::vy#0 main::@5/(byte) main::vy#8 )
(word) main::vx#5 ← phi( main::@14/(word) main::vx#0 main::@5/(word) main::vx#6 )
(byte*) bitmap_screen#13 ← phi( main::@14/(byte*) bitmap_screen#17 main::@5/(byte*) bitmap_screen#18 )
(byte*) bitmap_gfx#14 ← phi( main::@14/(byte*) bitmap_gfx#18 main::@5/(byte*) bitmap_gfx#19 )
(byte) main::y#5 ← phi( main::@14/(byte) main::y#0 main::@5/(byte) main::y#7 )
(word) main::x#4 ← phi( main::@14/(word) main::x#0 main::@5/(word) main::x#5 )
main::@1: scope:[main] from main::@10 main::@4
(byte) main::vy#6 ← phi( main::@10/(byte) main::vy#0 main::@4/(byte) main::vy#8 )
(word) main::vx#5 ← phi( main::@10/(word) main::vx#0 main::@4/(word) main::vx#6 )
(byte*) bitmap_screen#13 ← phi( main::@10/(byte*) bitmap_screen#17 main::@4/(byte*) bitmap_screen#18 )
(byte*) bitmap_gfx#14 ← phi( main::@10/(byte*) bitmap_gfx#18 main::@4/(byte*) bitmap_gfx#19 )
(byte) main::y#5 ← phi( main::@10/(byte) main::y#0 main::@4/(byte) main::y#7 )
(word) main::x#4 ← phi( main::@10/(word) main::x#0 main::@4/(word) main::x#5 )
if(true) goto main::@2
to:main::@return
main::@2: scope:[main] from main::@1
@ -310,8 +266,8 @@ main::@2: scope:[main] from main::@1
(word) bitmap_plot::x#0 ← (word) main::x#2
(byte) bitmap_plot::y#0 ← (byte) main::y#2
call bitmap_plot
to:main::@15
main::@15: scope:[main] from main::@2
to:main::@11
main::@11: scope:[main] from main::@2
(byte*) bitmap_screen#26 ← phi( main::@2/(byte*) bitmap_screen#31 )
(byte*) bitmap_gfx#27 ← phi( main::@2/(byte*) bitmap_gfx#32 )
(byte) main::vy#2 ← phi( main::@2/(byte) main::vy#4 )
@ -324,50 +280,50 @@ main::@15: scope:[main] from main::@2
(bool~) main::$6 ← (word) main::x#1 == (number) 0
(bool~) main::$7 ← (bool~) main::$5 || (bool~) main::$6
(bool~) main::$8 ← ! (bool~) main::$7
if((bool~) main::$8) goto main::@4
to:main::@8
main::@4: scope:[main] from main::@15 main::@8
(word) main::vx#7 ← phi( main::@15/(word) main::vx#2 main::@8/(word) main::vx#1 )
(byte*) bitmap_screen#22 ← phi( main::@15/(byte*) bitmap_screen#26 main::@8/(byte*) bitmap_screen#27 )
(byte*) bitmap_gfx#23 ← phi( main::@15/(byte*) bitmap_gfx#27 main::@8/(byte*) bitmap_gfx#28 )
(word) main::x#6 ← phi( main::@15/(word) main::x#1 main::@8/(word) main::x#8 )
(byte) main::vy#5 ← phi( main::@15/(byte) main::vy#2 main::@8/(byte) main::vy#7 )
(byte) main::y#4 ← phi( main::@15/(byte) main::y#1 main::@8/(byte) main::y#6 )
if((bool~) main::$8) goto main::@3
to:main::@5
main::@3: scope:[main] from main::@11 main::@5
(word) main::vx#7 ← phi( main::@11/(word) main::vx#2 main::@5/(word) main::vx#1 )
(byte*) bitmap_screen#22 ← phi( main::@11/(byte*) bitmap_screen#26 main::@5/(byte*) bitmap_screen#27 )
(byte*) bitmap_gfx#23 ← phi( main::@11/(byte*) bitmap_gfx#27 main::@5/(byte*) bitmap_gfx#28 )
(word) main::x#6 ← phi( main::@11/(word) main::x#1 main::@5/(word) main::x#8 )
(byte) main::vy#5 ← phi( main::@11/(byte) main::vy#2 main::@5/(byte) main::vy#7 )
(byte) main::y#4 ← phi( main::@11/(byte) main::y#1 main::@5/(byte) main::y#6 )
(bool~) main::$10 ← (byte) main::y#4 == (number) $c7
(bool~) main::$11 ← (byte) main::y#4 == (number) 0
(bool~) main::$12 ← (bool~) main::$10 || (bool~) main::$11
(bool~) main::$13 ← ! (bool~) main::$12
if((bool~) main::$13) goto main::@5
to:main::@9
main::@8: scope:[main] from main::@15
(byte*) bitmap_screen#27 ← phi( main::@15/(byte*) bitmap_screen#26 )
(byte*) bitmap_gfx#28 ← phi( main::@15/(byte*) bitmap_gfx#27 )
(word) main::x#8 ← phi( main::@15/(word) main::x#1 )
(byte) main::vy#7 ← phi( main::@15/(byte) main::vy#2 )
(byte) main::y#6 ← phi( main::@15/(byte) main::y#1 )
(word) main::vx#3 ← phi( main::@15/(word) main::vx#2 )
if((bool~) main::$13) goto main::@4
to:main::@6
main::@5: scope:[main] from main::@11
(byte*) bitmap_screen#27 ← phi( main::@11/(byte*) bitmap_screen#26 )
(byte*) bitmap_gfx#28 ← phi( main::@11/(byte*) bitmap_gfx#27 )
(word) main::x#8 ← phi( main::@11/(word) main::x#1 )
(byte) main::vy#7 ← phi( main::@11/(byte) main::vy#2 )
(byte) main::y#6 ← phi( main::@11/(byte) main::y#1 )
(word) main::vx#3 ← phi( main::@11/(word) main::vx#2 )
(word~) main::$9 ← - (word) main::vx#3
(word) main::vx#1 ← (word~) main::$9
to:main::@4
main::@5: scope:[main] from main::@4 main::@9
(byte) main::vy#8 ← phi( main::@4/(byte) main::vy#5 main::@9/(byte) main::vy#1 )
(word) main::vx#6 ← phi( main::@4/(word) main::vx#7 main::@9/(word) main::vx#8 )
(byte*) bitmap_screen#18 ← phi( main::@4/(byte*) bitmap_screen#22 main::@9/(byte*) bitmap_screen#23 )
(byte*) bitmap_gfx#19 ← phi( main::@4/(byte*) bitmap_gfx#23 main::@9/(byte*) bitmap_gfx#24 )
(byte) main::y#7 ← phi( main::@4/(byte) main::y#4 main::@9/(byte) main::y#8 )
(word) main::x#5 ← phi( main::@4/(word) main::x#6 main::@9/(word) main::x#7 )
to:main::@3
main::@4: scope:[main] from main::@3 main::@6
(byte) main::vy#8 ← phi( main::@3/(byte) main::vy#5 main::@6/(byte) main::vy#1 )
(word) main::vx#6 ← phi( main::@3/(word) main::vx#7 main::@6/(word) main::vx#8 )
(byte*) bitmap_screen#18 ← phi( main::@3/(byte*) bitmap_screen#22 main::@6/(byte*) bitmap_screen#23 )
(byte*) bitmap_gfx#19 ← phi( main::@3/(byte*) bitmap_gfx#23 main::@6/(byte*) bitmap_gfx#24 )
(byte) main::y#7 ← phi( main::@3/(byte) main::y#4 main::@6/(byte) main::y#8 )
(word) main::x#5 ← phi( main::@3/(word) main::x#6 main::@6/(word) main::x#7 )
*((const byte*) plots_per_frame + (volatile byte) frame_cnt) ← ++ *((const byte*) plots_per_frame + (volatile byte) frame_cnt)
to:main::@1
main::@9: scope:[main] from main::@4
(word) main::vx#8 ← phi( main::@4/(word) main::vx#7 )
(byte*) bitmap_screen#23 ← phi( main::@4/(byte*) bitmap_screen#22 )
(byte*) bitmap_gfx#24 ← phi( main::@4/(byte*) bitmap_gfx#23 )
(byte) main::y#8 ← phi( main::@4/(byte) main::y#4 )
(word) main::x#7 ← phi( main::@4/(word) main::x#6 )
(byte) main::vy#3 ← phi( main::@4/(byte) main::vy#5 )
main::@6: scope:[main] from main::@3
(word) main::vx#8 ← phi( main::@3/(word) main::vx#7 )
(byte*) bitmap_screen#23 ← phi( main::@3/(byte*) bitmap_screen#22 )
(byte*) bitmap_gfx#24 ← phi( main::@3/(byte*) bitmap_gfx#23 )
(byte) main::y#8 ← phi( main::@3/(byte) main::y#4 )
(word) main::x#7 ← phi( main::@3/(word) main::x#6 )
(byte) main::vy#3 ← phi( main::@3/(byte) main::vy#5 )
(byte~) main::$14 ← - (byte) main::vy#3
(byte) main::vy#1 ← (byte~) main::$14
to:main::@5
to:main::@4
main::@return: scope:[main] from main::@1
(byte*) bitmap_screen#9 ← phi( main::@1/(byte*) bitmap_screen#13 )
(byte*) bitmap_gfx#9 ← phi( main::@1/(byte*) bitmap_gfx#14 )
@ -375,14 +331,14 @@ main::@return: scope:[main] from main::@1
(byte*) bitmap_screen#4 ← (byte*) bitmap_screen#9
return
to:@return
@18: scope:[] from @11
(byte*) bitmap_screen#19 ← phi( @11/(byte*) bitmap_screen#0 )
(byte*) bitmap_gfx#20 ← phi( @11/(byte*) bitmap_gfx#0 )
@2: scope:[] from @1
(byte*) bitmap_screen#19 ← phi( @1/(byte*) bitmap_screen#0 )
(byte*) bitmap_gfx#20 ← phi( @1/(byte*) bitmap_gfx#0 )
(volatile byte) frame_cnt ← (byte) 1
to:@20
to:@3
(void()) init_irq()
init_irq: scope:[init_irq] from main::@11
init_irq: scope:[init_irq] from main::@7
asm { sei }
*((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK
*((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO
@ -414,24 +370,24 @@ irq::@2: scope:[irq] from irq
irq::@return: scope:[irq] from irq::@1
return
to:@return
@20: scope:[] from @18
(byte*) bitmap_screen#14 ← phi( @18/(byte*) bitmap_screen#19 )
(byte*) bitmap_gfx#15 ← phi( @18/(byte*) bitmap_gfx#20 )
@3: scope:[] from @2
(byte*) bitmap_screen#14 ← phi( @2/(byte*) bitmap_screen#19 )
(byte*) bitmap_gfx#15 ← phi( @2/(byte*) bitmap_gfx#20 )
call main
to:@21
@21: scope:[] from @20
(byte*) bitmap_screen#10 ← phi( @20/(byte*) bitmap_screen#4 )
(byte*) bitmap_gfx#10 ← phi( @20/(byte*) bitmap_gfx#4 )
to:@4
@4: scope:[] from @3
(byte*) bitmap_screen#10 ← phi( @3/(byte*) bitmap_screen#4 )
(byte*) bitmap_gfx#10 ← phi( @3/(byte*) bitmap_gfx#4 )
(byte*) bitmap_gfx#5 ← (byte*) bitmap_gfx#10
(byte*) bitmap_screen#5 ← (byte*) bitmap_screen#10
to:@end
@end: scope:[] from @21
@end: scope:[] from @4
SYMBOL TABLE SSA
(label) @11
(label) @18
(label) @20
(label) @21
(label) @1
(label) @2
(label) @3
(label) @4
(label) @begin
(label) @end
(const nomodify byte*) BGCOL = (byte*)(number) $d021
@ -632,14 +588,14 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(bool~) main::$8
(word~) main::$9
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@13
(label) main::@14
(label) main::@15
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@return
@ -712,8 +668,8 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(byte*~) memset::$4
(label) memset::@1
(label) memset::@2
(label) memset::@3
(label) memset::@4
(label) memset::@5
(label) memset::@return
(byte) memset::c
(byte) memset::c#0
@ -974,7 +930,7 @@ Successful SSA optimization Pass2IdenticalPhiElimination
Identified duplicate assignment right side [49] (byte~) bitmap_init::$7 ← (byte) bitmap_init::y#2 & (byte) 7
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition (bool~) memset::$1 [2] if((word) memset::num#2<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$3 [9] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) memset::$3 [9] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@4
Simple Condition (bool~) bitmap_init::$1 [24] if((byte) bitmap_init::bits#1!=(byte) 0) goto bitmap_init::@2
Simple Condition (bool~) bitmap_init::$2 [28] if((byte) bitmap_init::x#1!=rangelast(0,$ff)) goto bitmap_init::@1
Simple Condition (bool~) bitmap_init::$9 [40] if((byte~) bitmap_init::$7!=(byte) 7) goto bitmap_init::@6
@ -1045,13 +1001,13 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias bitmap_init::$7 = bitmap_init::$3
Alias bitmap_clear::col#0 = bitmap_clear::$0
Successful SSA optimization Pass2AliasElimination
Simple Condition (bool~) main::$5 [62] if((word) main::x#1==(word) $13f) goto main::@8
Simple Condition (bool~) main::$10 [66] if((byte) main::y#1==(byte) $c7) goto main::@9
Simple Condition (bool~) main::$6 [89] if((word) main::x#1==(byte) 0) goto main::@8
Simple Condition (bool~) main::$11 [90] if((byte) main::y#1==(byte) 0) goto main::@9
Simple Condition (bool~) main::$5 [62] if((word) main::x#1==(word) $13f) goto main::@5
Simple Condition (bool~) main::$10 [66] if((byte) main::y#1==(byte) $c7) goto main::@6
Simple Condition (bool~) main::$6 [89] if((word) main::x#1==(byte) 0) goto main::@5
Simple Condition (bool~) main::$11 [90] if((byte) main::y#1==(byte) 0) goto main::@6
Successful SSA optimization Pass2ConditionalJumpSimplification
Negating conditional jump and destination [89] if((word) main::x#1!=(byte) 0) goto main::@4
Negating conditional jump and destination [90] if((byte) main::y#1!=(byte) 0) goto main::@5
Negating conditional jump and destination [89] if((word) main::x#1!=(byte) 0) goto main::@3
Negating conditional jump and destination [90] if((byte) main::y#1!=(byte) 0) goto main::@4
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Constant right-side identified [30] (byte) bitmap_clear::col#0 ← (const byte) bitmap_clear::fgcol#0 * (byte) $10
Constant right-side identified [45] (word~) main::toD0181_$0 ← (const word) main::toD0181_$7 & (word) $3fff
@ -1127,22 +1083,22 @@ Constant inlined memset::c#0 = (const byte) bitmap_clear::col#0
Constant inlined bitmap_init::x#0 = (byte) 0
Constant inlined memset::c#1 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting bitmap_init::@9(between bitmap_init::@2 and bitmap_init::@1)
Added new block during phi lifting bitmap_init::@10(between bitmap_init::@1 and bitmap_init::@2)
Added new block during phi lifting bitmap_init::@11(between bitmap_init::@6 and bitmap_init::@5)
Added new block during phi lifting bitmap_init::@12(between bitmap_init::@5 and bitmap_init::@6)
Added new block during phi lifting main::@18(between main::@16 and main::@4)
Added new block during phi lifting main::@19(between main::@17 and main::@5)
Added new block during phi lifting bitmap_init::@8(between bitmap_init::@2 and bitmap_init::@1)
Added new block during phi lifting bitmap_init::@9(between bitmap_init::@1 and bitmap_init::@2)
Added new block during phi lifting bitmap_init::@10(between bitmap_init::@6 and bitmap_init::@5)
Added new block during phi lifting bitmap_init::@11(between bitmap_init::@5 and bitmap_init::@6)
Added new block during phi lifting main::@14(between main::@12 and main::@3)
Added new block during phi lifting main::@15(between main::@13 and main::@4)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @11
Adding NOP phi() at start of @20
Adding NOP phi() at start of @21
Adding NOP phi() at start of @1
Adding NOP phi() at start of @3
Adding NOP phi() at start of @4
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@12
Adding NOP phi() at start of main::@8
Adding NOP phi() at start of main::toD0181
Adding NOP phi() at start of main::toD0181_@return
Adding NOP phi() at start of main::@14
Adding NOP phi() at start of main::@10
Adding NOP phi() at start of bitmap_clear
Adding NOP phi() at start of bitmap_clear::@1
Adding NOP phi() at start of bitmap_clear::@2
@ -1173,38 +1129,31 @@ Coalesced [100] bitmap_init::bits#5 ← bitmap_init::bits#4
Coalesced [101] bitmap_init::x#5 ← bitmap_init::x#1
Coalesced [102] bitmap_init::bits#6 ← bitmap_init::bits#1
Coalesced down to 12 phi equivalence classes
Culled Empty Block (label) @11
Culled Empty Block (label) @21
Culled Empty Block (label) @1
Culled Empty Block (label) @4
Culled Empty Block (label) main::toD0181_@return
Culled Empty Block (label) main::@10
Culled Empty Block (label) main::@15
Culled Empty Block (label) main::@14
Culled Empty Block (label) main::@19
Culled Empty Block (label) main::@18
Culled Empty Block (label) bitmap_clear::@2
Culled Empty Block (label) memset::@1
Culled Empty Block (label) bitmap_init::@3
Culled Empty Block (label) bitmap_init::@4
Culled Empty Block (label) bitmap_init::@10
Culled Empty Block (label) bitmap_init::@11
Culled Empty Block (label) bitmap_init::@12
Culled Empty Block (label) bitmap_init::@9
Renumbering block @18 to @1
Renumbering block @20 to @2
Culled Empty Block (label) bitmap_init::@8
Renumbering block @2 to @1
Renumbering block @3 to @2
Renumbering block memset::@2 to memset::@1
Renumbering block memset::@4 to memset::@2
Renumbering block memset::@5 to memset::@3
Renumbering block memset::@3 to memset::@2
Renumbering block memset::@4 to memset::@3
Renumbering block bitmap_init::@5 to bitmap_init::@3
Renumbering block bitmap_init::@6 to bitmap_init::@4
Renumbering block bitmap_init::@7 to bitmap_init::@5
Renumbering block bitmap_init::@10 to bitmap_init::@6
Renumbering block main::@4 to main::@3
Renumbering block main::@5 to main::@4
Renumbering block main::@8 to main::@5
Renumbering block main::@9 to main::@6
Renumbering block main::@11 to main::@7
Renumbering block main::@12 to main::@8
Renumbering block main::@13 to main::@9
Renumbering block main::@15 to main::@10
Renumbering block main::@16 to main::@11
Renumbering block main::@17 to main::@12
Renumbering block bitmap_init::@9 to bitmap_init::@6
Renumbering block main::@11 to main::@10
Renumbering block main::@12 to main::@11
Renumbering block main::@13 to main::@12
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end

@ -366,9 +366,9 @@ sin16s::@12: scope:[sin16s] from sin16s::@11
(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@2 sin16s::@7 sin16s::@8 sin16s::@9
[188] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 )
[188] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 )
[188] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 )
[188] (byte) mulu16_sel::select#5 ← phi( sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 sin16s::@9/(byte) 0 )
[188] (word) mulu16_sel::v2#5 ← phi( sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 sin16s::@9/(word) mulu16_sel::v2#3 )
[188] (word) mulu16_sel::v1#5 ← phi( sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 sin16s::@9/(word) mulu16_sel::v1#3 )
[189] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5
[190] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
[191] call mul16u

File diff suppressed because it is too large Load Diff

@ -376,7 +376,7 @@ zp[4]:12 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
reg byte y [ sin16s::isUpper#2 ]
zp[4]:16 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
reg byte x [ mulu16_sel::select#5 ]
zp[2]:20 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
zp[2]:20 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#5 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
zp[1]:22 [ frame_cnt ]
reg byte alu [ main::$7 ]
@ -385,7 +385,7 @@ reg byte alu [ main::$11 ]
zp[2]:25 [ main::y#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
reg byte a [ bitmap_plot::y#0 ]
zp[2]:27 [ bitmap_plot::plotter#0 bitmap_plot::plotter#1 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 memset::num#2 memset::end#0 mul16s::a#3 mul16s::a#0 mul16s::$12 sin16s::return#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::usinx#0 ]
zp[2]:29 [ bitmap_plot::$0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ]
zp[2]:29 [ bitmap_plot::$0 divr16u::quotient#3 divr16u::return#0 divr16u::quotient#1 divr16u::quotient#2 divr16u::return#2 divr16u::return#3 div32u16u::quotient_lo#0 memset::str#3 memset::dst#2 memset::dst#4 memset::dst#1 mul16u::b#2 mul16u::b#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#3 ]
reg byte x [ bitmap_plot::$1 ]
reg byte a [ mul16u::$1 ]
zp[1]:31 [ bitmap_init::$7 ]

@ -80,7 +80,7 @@ main::@16: scope:[main] from main::@14
[44] phi()
to:main::@3
main::@3: scope:[main] from main::@14 main::@16
[45] (word) main::idx_x#10 ← phi( main::@14/(byte) 0 main::@16/(word) main::idx_x#1 )
[45] (word) main::idx_x#10 ← phi( main::@16/(word) main::idx_x#1 main::@14/(byte) 0 )
[46] (word) main::idx_y#1 ← (word) main::idx_y#3 + (byte) main::r_add#10
[47] if((word) main::idx_y#1<(word) $200) goto main::@17
to:main::@4
@ -88,7 +88,7 @@ main::@17: scope:[main] from main::@3
[48] phi()
to:main::@4
main::@4: scope:[main] from main::@17 main::@3
[49] (word) main::idx_y#10 ← phi( main::@3/(byte) 0 main::@17/(word) main::idx_y#1 )
[49] (word) main::idx_y#10 ← phi( main::@17/(word) main::idx_y#1 main::@3/(byte) 0 )
[50] (signed word) main::r#1 ← (signed word) main::r#10 + (byte) main::r_add#10
[51] if((word) main::idx_x#10!=(byte) 0) goto main::@5
to:main::@15
@ -99,7 +99,7 @@ main::@6: scope:[main] from main::@15
[53] (byte) main::r_add#1 ← (byte) main::r_add#10 >> (byte) 1
to:main::@5
main::@5: scope:[main] from main::@15 main::@4 main::@6
[54] (byte) main::r_add#12 ← phi( main::@6/(byte) main::r_add#1 main::@4/(byte) main::r_add#10 )
[54] (byte) main::r_add#12 ← phi( main::@4/(byte) main::r_add#10 main::@6/(byte) main::r_add#1 )
[55] if((signed word) main::r#1>=(signed word)(number) $200*(number) $c+(number) $100) goto main::@7
to:main::@1
main::@7: scope:[main] from main::@5 main::@7
@ -120,8 +120,8 @@ bitmap_plot::@return: scope:[bitmap_plot] from bitmap_plot
(signed dword()) mul16s((signed word) mul16s::a , (signed word) mul16s::b)
mul16s: scope:[mul16s] from main::@12 main::@2 sin16s_gen2::@4
[63] (signed word) mul16s::b#3 ← phi( main::@2/(signed word) mul16s::b#1 main::@12/(signed word) mul16s::b#2 sin16s_gen2::@4/(const signed word) sin16s_gen2::ampl#0 )
[63] (signed word) mul16s::a#3 ← phi( main::@2/(signed word) mul16s::a#1 main::@12/(signed word) mul16s::a#2 sin16s_gen2::@4/(signed word) mul16s::a#0 )
[63] (signed word) mul16s::b#3 ← phi( main::@12/(signed word) mul16s::b#2 main::@2/(signed word) mul16s::b#1 sin16s_gen2::@4/(const signed word) sin16s_gen2::ampl#0 )
[63] (signed word) mul16s::a#3 ← phi( main::@12/(signed word) mul16s::a#2 main::@2/(signed word) mul16s::a#1 sin16s_gen2::@4/(signed word) mul16s::a#0 )
[64] (word) mul16u::a#1 ← (word)(signed word) mul16s::a#3
[65] (word) mul16u::b#0 ← (word)(signed word) mul16s::b#3
[66] call mul16u
@ -385,9 +385,9 @@ sin16s::@12: scope:[sin16s] from sin16s::@11
(word()) mulu16_sel((word) mulu16_sel::v1 , (word) mulu16_sel::v2 , (byte) mulu16_sel::select)
mulu16_sel: scope:[mulu16_sel] from sin16s::@10 sin16s::@2 sin16s::@7 sin16s::@8 sin16s::@9
[197] (byte) mulu16_sel::select#5 ← phi( sin16s::@9/(byte) 0 sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 )
[197] (word) mulu16_sel::v2#5 ← phi( sin16s::@9/(word) mulu16_sel::v2#3 sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 )
[197] (word) mulu16_sel::v1#5 ← phi( sin16s::@9/(word) mulu16_sel::v1#3 sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 )
[197] (byte) mulu16_sel::select#5 ← phi( sin16s::@10/(byte) 0 sin16s::@2/(byte) 0 sin16s::@7/(byte) 1 sin16s::@8/(byte) 1 sin16s::@9/(byte) 0 )
[197] (word) mulu16_sel::v2#5 ← phi( sin16s::@10/(word) mulu16_sel::v2#4 sin16s::@2/(word) mulu16_sel::v2#0 sin16s::@7/(word) mulu16_sel::v2#1 sin16s::@8/(word)(number) $10000/(number) 6 sin16s::@9/(word) mulu16_sel::v2#3 )
[197] (word) mulu16_sel::v1#5 ← phi( sin16s::@10/(word) mulu16_sel::v1#4 sin16s::@2/(word) mulu16_sel::v1#0 sin16s::@7/(word) mulu16_sel::v1#1 sin16s::@8/(word) mulu16_sel::v1#2 sin16s::@9/(word) mulu16_sel::v1#3 )
[198] (word) mul16u::a#2 ← (word) mulu16_sel::v1#5
[199] (word) mul16u::b#1 ← (word) mulu16_sel::v2#5
[200] call mul16u

File diff suppressed because it is too large Load Diff

@ -379,10 +379,10 @@ interrupt(HARDWARE_CLOBBER)(void()) irq()
(dword) sin16s_gen2::x#2 x zp[4]:17 250.25
zp[2]:2 [ main::idx_x#11 main::idx_x#10 main::idx_x#1 ]
zp[2]:4 [ main::r#10 main::r#1 mul16s::a#3 mul16s::a#1 mul16s::a#2 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s::usinx#0 ]
zp[2]:4 [ main::r#10 main::r#1 mul16s::a#3 mul16s::a#2 mul16s::a#1 mul16s::a#0 sin16s::return#1 sin16s::return#5 sin16s::sinx#1 sin16s::usinx#1 sin16s::return#0 sin16s::usinx#0 ]
zp[2]:6 [ main::idx_y#3 main::idx_y#10 main::idx_y#1 ]
zp[1]:8 [ main::r_add#10 main::r_add#12 main::r_add#1 ]
zp[2]:9 [ mul16s::b#3 mul16s::b#1 mul16s::b#2 main::cos_x#0 main::sin_y#0 main::$26 main::$30 main::$27 main::$31 ]
zp[2]:9 [ mul16s::b#3 mul16s::b#2 mul16s::b#1 main::cos_x#0 main::sin_y#0 main::$26 main::$30 main::$27 main::$31 ]
zp[4]:11 [ mul16s::m#4 mul16s::m#5 mul16s::m#1 mul16s::m#0 mul16s::m#2 mul16u::return#2 mul16s::return#0 mul16u::res#2 mul16u::res#6 mul16u::res#1 mul16u::return#3 mul16s::return#3 main::xpos#0 mul16s::return#4 main::ypos#0 mul16s::return#2 sin16s_gen2::$6 mulu16_sel::$0 mulu16_sel::$1 ]
reg byte x [ memset::c#4 ]
reg byte a [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
@ -393,11 +393,11 @@ zp[4]:17 [ sin16s_gen2::x#2 sin16s_gen2::x#1 ]
reg byte y [ sin16s::isUpper#2 ]
zp[4]:21 [ sin16s::x#6 sin16s::x#4 sin16s::x#0 sin16s::x#1 sin16s::x#2 mul16u::mb#2 mul16u::mb#0 mul16u::mb#1 ]
reg byte x [ mulu16_sel::select#5 ]
zp[2]:25 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#5 mulu16_sel::v1#3 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
zp[2]:25 [ divr16u::rem#5 divr16u::rem#10 divr16u::rem#4 divr16u::rem#11 divr16u::rem#6 divr16u::rem#0 divr16u::rem#1 divr16u::rem#2 rem16u#1 mulu16_sel::v1#5 mulu16_sel::v1#4 mulu16_sel::v1#0 mulu16_sel::v1#1 mulu16_sel::v1#2 mulu16_sel::v1#3 sin16s::x3#0 sin16s::x2#0 sin16s::x4#0 mulu16_sel::return#1 mulu16_sel::return#10 ]
reg byte x [ divr16u::i#2 divr16u::i#1 ]
zp[1]:27 [ frame_cnt ]
zp[2]:28 [ main::$28 main::$7 main::x#0 bitmap_plot::x#0 sin16s_gen2::sintab#2 sin16s_gen2::sintab#0 ]
zp[2]:30 [ main::$29 main::$11 main::y#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 memset::num#2 memset::end#0 mul16u::b#2 mul16u::b#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#3 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 ]
zp[2]:30 [ main::$29 main::$11 main::y#0 divr16u::dividend#3 divr16u::dividend#5 divr16u::dividend#0 memset::num#2 memset::end#0 mul16u::b#2 mul16u::b#0 mul16u::b#1 mulu16_sel::v2#5 mulu16_sel::v2#4 mulu16_sel::v2#0 mulu16_sel::v2#1 mulu16_sel::v2#3 ]
reg byte a [ bitmap_plot::y#0 ]
reg byte x [ bitmap_plot::$1 ]
reg byte a [ mul16u::$1 ]

@ -150,8 +150,8 @@ bitmap_line::@4: scope:[bitmap_line] from bitmap_line::@18
(void()) bitmap_plot((word) bitmap_plot::x , (byte) bitmap_plot::y)
bitmap_plot: scope:[bitmap_plot] from bitmap_line::@3 bitmap_line::@4 bitmap_line::@6 bitmap_line::@9
[74] (word) bitmap_plot::x#4 ← phi( bitmap_line::@9/(word) bitmap_plot::x#3 bitmap_line::@3/(word) bitmap_plot::x#2 bitmap_line::@4/(word) bitmap_plot::x#0 bitmap_line::@6/(word) bitmap_plot::x#1 )
[74] (byte) bitmap_plot::y#4 ← phi( bitmap_line::@9/(byte) bitmap_plot::y#3 bitmap_line::@3/(byte) bitmap_plot::y#2 bitmap_line::@4/(byte) bitmap_plot::y#0 bitmap_line::@6/(byte) bitmap_plot::y#1 )
[74] (word) bitmap_plot::x#4 ← phi( bitmap_line::@3/(word) bitmap_plot::x#2 bitmap_line::@4/(word) bitmap_plot::x#0 bitmap_line::@6/(word) bitmap_plot::x#1 bitmap_line::@9/(word) bitmap_plot::x#3 )
[74] (byte) bitmap_plot::y#4 ← phi( bitmap_line::@3/(byte) bitmap_plot::y#2 bitmap_line::@4/(byte) bitmap_plot::y#0 bitmap_line::@6/(byte) bitmap_plot::y#1 bitmap_line::@9/(byte) bitmap_plot::y#3 )
[75] (word) bitmap_plot::plotter#0 ← *((const to_nomodify byte*) bitmap_plot_yhi + (byte) bitmap_plot::y#4) w= *((const to_nomodify byte*) bitmap_plot_ylo + (byte) bitmap_plot::y#4)
[76] (word~) bitmap_plot::$0 ← (word) bitmap_plot::x#4 & (word) $fff8
[77] (byte*) bitmap_plot::plotter#1 ← (byte*)(word) bitmap_plot::plotter#0 + (word~) bitmap_plot::$0

File diff suppressed because it is too large Load Diff

@ -205,8 +205,8 @@
zp[1]:2 [ main::i#2 main::i#1 ]
zp[1]:3 [ main::a#2 main::a#1 ]
zp[2]:4 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#3 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 main::$13 ]
reg byte a [ bitmap_plot::y#4 bitmap_plot::y#3 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 ]
zp[2]:4 [ bitmap_line::x#7 bitmap_line::x#6 bitmap_line::x#15 bitmap_line::x#13 bitmap_line::x1#0 bitmap_line::x#12 bitmap_line::x#1 bitmap_plot::x#4 bitmap_plot::x#2 bitmap_plot::x#0 bitmap_plot::x#1 bitmap_plot::x#3 main::$13 ]
reg byte a [ bitmap_plot::y#4 bitmap_plot::y#2 bitmap_plot::y#0 bitmap_plot::y#1 bitmap_plot::y#3 ]
zp[2]:6 [ sgn_u16::return#4 sgn_u16::return#0 sgn_u16::return#1 bitmap_line::sy#0 ]
zp[2]:8 [ abs_u16::return#4 abs_u16::return#2 abs_u16::w#2 abs_u16::w#0 abs_u16::w#1 abs_u16::return#0 abs_u16::return#1 bitmap_line::dy#0 ]
zp[2]:10 [ memset::num#2 memset::end#0 bitmap_line::e#3 bitmap_line::e#0 bitmap_line::e#6 bitmap_line::e#1 bitmap_line::e#2 ]

@ -1,45 +1,10 @@
De-inlining cast (word)SCREEN
Identified constant variable (byte*) D011
Identified constant variable (byte) RST8
Identified constant variable (byte) ECM
Identified constant variable (byte) BMM
Identified constant variable (byte) DEN
Identified constant variable (byte) RSEL
Identified constant variable (byte*) RASTER
Identified constant variable (byte*) D016
Identified constant variable (byte) MCM
Identified constant variable (byte) CSEL
Identified constant variable (byte*) D018
Identified constant variable (byte*) BGCOL
Identified constant variable (byte*) FGCOL
Identified constant variable (byte*) COLS
Identified constant variable (byte*) SCREEN
Identified constant variable (byte) plots_cnt
Culled Empty Block (label) main::@1
Culled Empty Block (label) main::@4
Culled Empty Block (label) @1
Culled Empty Block (label) plots::@4
Culled Empty Block (label) plots::@3
Culled Empty Block (label) plots::@5
Culled Empty Block (label) plots::@6
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) init_plot_tables::@8
Culled Empty Block (label) @4
Culled Empty Block (label) init_screen::@4
Culled Empty Block (label) init_screen::@5
Culled Empty Block (label) init_screen::@6
Culled Empty Block (label) init_screen::@10
Culled Empty Block (label) init_screen::@9
Culled Empty Block (label) init_screen::@11
Culled Empty Block (label) init_screen::@12
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@5
to:@1
(void()) main()
main: scope:[main] from @5
main: scope:[main] from @1
*((const byte*) BGCOL) ← (number) 0
*((const byte*) FGCOL) ← (number) 0
(byte~) main::$0 ← (const byte) BMM | (const byte) DEN
@ -51,34 +16,34 @@ main: scope:[main] from @5
(number~) main::$4 ← (number~) main::$3 | (word)(const nomodify byte*) BITMAP/(number) $400
*((const byte*) D018) ← (byte)(number~) main::$4
call init_screen
to:main::@5
main::@5: scope:[main] from main
call init_plot_tables
to:main::@6
main::@6: scope:[main] from main::@5
to:main::@2
main::@2: scope:[main] from main::@2 main::@6 main::@7
(bool~) main::$7 ← *((const byte*) RASTER) != (number) $ff
if((bool~) main::$7) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@2
main::@3: scope:[main] from main
call init_plot_tables
to:main::@4
main::@4: scope:[main] from main::@3
to:main::@1
main::@1: scope:[main] from main::@1 main::@4 main::@5
(bool~) main::$7 ← *((const byte*) RASTER) != (number) $ff
if((bool~) main::$7) goto main::@1
to:main::@2
main::@2: scope:[main] from main::@1
*((const byte*) BGCOL) ← ++ *((const byte*) BGCOL)
call plots
to:main::@7
main::@7: scope:[main] from main::@3
to:main::@5
main::@5: scope:[main] from main::@2
*((const byte*) BGCOL) ← -- *((const byte*) BGCOL)
if(true) goto main::@2
if(true) goto main::@1
to:main::@return
main::@return: scope:[main] from main::@7
main::@return: scope:[main] from main::@5
return
to:@return
(void()) plots()
plots: scope:[plots] from main::@3
plots: scope:[plots] from main::@2
(byte) plots::i#0 ← (byte) 0
to:plots::@1
plots::@1: scope:[plots] from plots plots::@7
(byte) plots::i#2 ← phi( plots/(byte) plots::i#0 plots::@7/(byte) plots::i#1 )
plots::@1: scope:[plots] from plots plots::@3
(byte) plots::i#2 ← phi( plots/(byte) plots::i#0 plots::@3/(byte) plots::i#1 )
(bool~) plots::$0 ← (byte) plots::i#2 < (const byte) plots_cnt
if((bool~) plots::$0) goto plots::@2
to:plots::@return
@ -87,8 +52,8 @@ plots::@2: scope:[plots] from plots::@1
(byte) plot::x#0 ← *((const byte*) plots_x + (byte) plots::i#3)
(byte) plot::y#0 ← *((const byte*) plots_y + (byte) plots::i#3)
call plot
to:plots::@7
plots::@7: scope:[plots] from plots::@2
to:plots::@3
plots::@3: scope:[plots] from plots::@2
(byte) plots::i#4 ← phi( plots::@2/(byte) plots::i#3 )
(byte) plots::i#1 ← ++ (byte) plots::i#4
to:plots::@1
@ -120,7 +85,7 @@ plot::@return: scope:[plot] from plot
to:@return
(void()) init_plot_tables()
init_plot_tables: scope:[init_plot_tables] from main::@5
init_plot_tables: scope:[init_plot_tables] from main::@3
(byte) init_plot_tables::bits#0 ← (byte) $80
(byte) init_plot_tables::x#0 ← (byte) 0
to:init_plot_tables::@1
@ -199,31 +164,31 @@ init_screen::@2: scope:[init_screen] from init_screen::@1
to:init_screen::@1
init_screen::@3: scope:[init_screen] from init_screen::@1
(byte*) init_screen::c#0 ← (const byte*) SCREEN
to:init_screen::@7
init_screen::@7: scope:[init_screen] from init_screen::@3 init_screen::@8
(byte*) init_screen::c#2 ← phi( init_screen::@3/(byte*) init_screen::c#0 init_screen::@8/(byte*) init_screen::c#1 )
to:init_screen::@4
init_screen::@4: scope:[init_screen] from init_screen::@3 init_screen::@5
(byte*) init_screen::c#2 ← phi( init_screen::@3/(byte*) init_screen::c#0 init_screen::@5/(byte*) init_screen::c#1 )
(byte*~) init_screen::$1 ← (const byte*) SCREEN + (number) $400
(bool~) init_screen::$2 ← (byte*) init_screen::c#2 != (byte*~) init_screen::$1
if((bool~) init_screen::$2) goto init_screen::@8
if((bool~) init_screen::$2) goto init_screen::@5
to:init_screen::@return
init_screen::@8: scope:[init_screen] from init_screen::@7
(byte*) init_screen::c#3 ← phi( init_screen::@7/(byte*) init_screen::c#2 )
init_screen::@5: scope:[init_screen] from init_screen::@4
(byte*) init_screen::c#3 ← phi( init_screen::@4/(byte*) init_screen::c#2 )
*((byte*) init_screen::c#3) ← (number) $14
(byte*) init_screen::c#1 ← ++ (byte*) init_screen::c#3
to:init_screen::@7
init_screen::@return: scope:[init_screen] from init_screen::@7
to:init_screen::@4
init_screen::@return: scope:[init_screen] from init_screen::@4
return
to:@return
@5: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@6
@6: scope:[] from @5
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @6
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @5
(label) @6
(label) @1
(label) @2
(label) @begin
(label) @end
(const byte*) BGCOL = (byte*)(number) $d020
@ -290,8 +255,8 @@ SYMBOL TABLE SSA
(label) init_screen::@1
(label) init_screen::@2
(label) init_screen::@3
(label) init_screen::@7
(label) init_screen::@8
(label) init_screen::@4
(label) init_screen::@5
(label) init_screen::@return
(byte*) init_screen::b
(byte*) init_screen::b#0
@ -311,11 +276,11 @@ SYMBOL TABLE SSA
(number~) main::$3
(number~) main::$4
(bool~) main::$7
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@return
(void()) plot((byte) plot::x , (byte) plot::y)
(byte*~) plot::$4
@ -350,7 +315,7 @@ SYMBOL TABLE SSA
(bool~) plots::$0
(label) plots::@1
(label) plots::@2
(label) plots::@7
(label) plots::@3
(label) plots::@return
(byte) plots::i
(byte) plots::i#0
@ -471,14 +436,14 @@ Identical Phi Values (byte) plot::y#1 (byte) plot::y#0
Successful SSA optimization Pass2IdenticalPhiElimination
Identified duplicate assignment right side [73] (byte~) init_plot_tables::$9 ← (byte) init_plot_tables::y#2 & (byte) 7
Successful SSA optimization Pass2DuplicateRValueIdentification
Simple Condition (bool~) main::$7 [13] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@2
Simple Condition (bool~) main::$7 [13] if(*((const byte*) RASTER)!=(byte) $ff) goto main::@1
Simple Condition (bool~) plots::$0 [22] if((byte) plots::i#2<(const byte) plots_cnt) goto plots::@2
Simple Condition (bool~) init_plot_tables::$3 [52] if((byte) init_plot_tables::bits#1!=(byte) 0) goto init_plot_tables::@2
Simple Condition (bool~) init_plot_tables::$4 [56] if((byte) init_plot_tables::x#1!=rangelast(0,$ff)) goto init_plot_tables::@1
Simple Condition (bool~) init_plot_tables::$11 [69] if((byte~) init_plot_tables::$9!=(byte) 7) goto init_plot_tables::@6
Simple Condition (bool~) init_plot_tables::$13 [73] if((byte) init_plot_tables::y#1!=rangelast(0,$ff)) goto init_plot_tables::@5
Simple Condition (bool~) init_screen::$0 [79] if((byte*) init_screen::b#2!=(const nomodify byte*) BITMAP+(word) $2000) goto init_screen::@2
Simple Condition (bool~) init_screen::$2 [86] if((byte*) init_screen::c#2!=(byte*~) init_screen::$1) goto init_screen::@8
Simple Condition (bool~) init_screen::$2 [86] if((byte*) init_screen::c#2!=(byte*~) init_screen::$1) goto init_screen::@5
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant right-side identified [2] (byte~) main::$0 ← (const byte) BMM | (const byte) DEN
Constant right-side identified [6] (word~) main::$11 ← (word)(const byte*) SCREEN
@ -498,7 +463,7 @@ Constant (const byte*) init_screen::b#0 = BITMAP
Constant (const byte*) init_screen::c#0 = SCREEN
Constant (const byte*) init_screen::$1 = SCREEN+$400
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [17] if(true) goto main::@2
if() condition always true - replacing block destination [17] if(true) goto main::@1
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [54] init_plot_tables::x#1 ← ++ init_plot_tables::x#2 to ++
Resolved ranged comparison value [56] if(init_plot_tables::x#1!=rangelast(0,$ff)) goto init_plot_tables::@1 to (number) 0
@ -561,16 +526,16 @@ Constant inlined init_plot_tables::x#0 = (byte) 0
Constant inlined init_screen::c#0 = (const byte*) SCREEN
Constant inlined init_screen::b#0 = (const nomodify byte*) BITMAP
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting init_plot_tables::@9(between init_plot_tables::@2 and init_plot_tables::@1)
Added new block during phi lifting init_plot_tables::@10(between init_plot_tables::@1 and init_plot_tables::@2)
Added new block during phi lifting init_plot_tables::@11(between init_plot_tables::@6 and init_plot_tables::@5)
Added new block during phi lifting init_plot_tables::@12(between init_plot_tables::@5 and init_plot_tables::@6)
Added new block during phi lifting init_plot_tables::@8(between init_plot_tables::@2 and init_plot_tables::@1)
Added new block during phi lifting init_plot_tables::@9(between init_plot_tables::@1 and init_plot_tables::@2)
Added new block during phi lifting init_plot_tables::@10(between init_plot_tables::@6 and init_plot_tables::@5)
Added new block during phi lifting init_plot_tables::@11(between init_plot_tables::@5 and init_plot_tables::@6)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @5
Adding NOP phi() at start of @6
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of main::@6
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of main::@4
Adding NOP phi() at start of plots
Adding NOP phi() at start of init_plot_tables
Adding NOP phi() at start of init_plot_tables::@3
@ -594,26 +559,21 @@ Coalesced [70] init_plot_tables::bits#6 ← init_plot_tables::bits#1
Coalesced [80] init_screen::c#4 ← init_screen::c#1
Coalesced [83] init_screen::b#4 ← init_screen::b#1
Coalesced down to 7 phi equivalence classes
Culled Empty Block (label) @6
Culled Empty Block (label) main::@6
Culled Empty Block (label) @2
Culled Empty Block (label) main::@4
Culled Empty Block (label) init_plot_tables::@3
Culled Empty Block (label) init_plot_tables::@4
Culled Empty Block (label) init_plot_tables::@10
Culled Empty Block (label) init_plot_tables::@11
Culled Empty Block (label) init_plot_tables::@12
Culled Empty Block (label) init_plot_tables::@9
Culled Empty Block (label) init_plot_tables::@8
Culled Empty Block (label) init_screen::@3
Renumbering block @5 to @1
Renumbering block main::@2 to main::@1
Renumbering block main::@3 to main::@2
Renumbering block main::@5 to main::@3
Renumbering block main::@7 to main::@4
Renumbering block plots::@7 to plots::@3
Renumbering block main::@5 to main::@4
Renumbering block init_plot_tables::@5 to init_plot_tables::@3
Renumbering block init_plot_tables::@6 to init_plot_tables::@4
Renumbering block init_plot_tables::@7 to init_plot_tables::@5
Renumbering block init_plot_tables::@10 to init_plot_tables::@6
Renumbering block init_screen::@7 to init_screen::@3
Renumbering block init_screen::@8 to init_screen::@4
Renumbering block init_plot_tables::@9 to init_plot_tables::@6
Renumbering block init_screen::@4 to init_screen::@3
Renumbering block init_screen::@5 to init_screen::@4
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,5 +1,3 @@
Identified constant variable (byte*) main::SCREEN
Culled Empty Block (label) main::@2
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -61,7 +59,7 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions
Inlining constant with var siblings (const byte) main::c#0
Constant inlined main::c#0 = (byte) 1
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@3(between main::@1 and main::@1)
Added new block during phi lifting main::@2(between main::@1 and main::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
@ -73,7 +71,7 @@ Created 1 initial phi equivalence classes
Coalesced [12] main::c#3 ← main::c#1
Coalesced down to 1 phi equivalence classes
Culled Empty Block (label) @2
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,22 +1,10 @@
Identified constant variable (bool) bool_const_if::b
Identified constant variable (byte) bool_const_vars::a
Identified constant variable (byte) bool_const_inline::a
Culled Empty Block (label) @1
Culled Empty Block (label) bool_const_if::@2
Culled Empty Block (label) bool_const_if::@4
Culled Empty Block (label) @2
Culled Empty Block (label) bool_const_vars::@2
Culled Empty Block (label) bool_const_vars::@4
Culled Empty Block (label) @3
Culled Empty Block (label) bool_const_inline::@2
Culled Empty Block (label) bool_const_inline::@4
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@4
to:@1
(void()) main()
main: scope:[main] from @4
main: scope:[main] from @1
call bool_const_if
to:main::@1
main::@1: scope:[main] from main
@ -34,14 +22,14 @@ main::@return: scope:[main] from main::@3
(void()) bool_const_if()
bool_const_if: scope:[bool_const_if] from main
if((const bool) bool_const_if::b) goto bool_const_if::@1
to:bool_const_if::@3
to:bool_const_if::@2
bool_const_if::@1: scope:[bool_const_if] from bool_const_if
*((const nomodify byte*) SCREEN + (number) 0) ← (byte) 't'
to:bool_const_if::@return
bool_const_if::@3: scope:[bool_const_if] from bool_const_if
bool_const_if::@2: scope:[bool_const_if] from bool_const_if
*((const nomodify byte*) SCREEN + (number) 0) ← (byte) 'f'
to:bool_const_if::@return
bool_const_if::@return: scope:[bool_const_if] from bool_const_if::@1 bool_const_if::@3
bool_const_if::@return: scope:[bool_const_if] from bool_const_if::@1 bool_const_if::@2
return
to:@return
@ -61,14 +49,14 @@ bool_const_vars: scope:[bool_const_vars] from main::@1
(bool~) bool_const_vars::$9 ← (bool~) bool_const_vars::$8 || false
(bool) bool_const_vars::b#0 ← (bool~) bool_const_vars::$9
if((bool) bool_const_vars::b#0) goto bool_const_vars::@1
to:bool_const_vars::@3
to:bool_const_vars::@2
bool_const_vars::@1: scope:[bool_const_vars] from bool_const_vars
*((const nomodify byte*) SCREEN + (number) 1) ← (byte) 't'
to:bool_const_vars::@return
bool_const_vars::@3: scope:[bool_const_vars] from bool_const_vars
bool_const_vars::@2: scope:[bool_const_vars] from bool_const_vars
*((const nomodify byte*) SCREEN + (number) 1) ← (byte) 'f'
to:bool_const_vars::@return
bool_const_vars::@return: scope:[bool_const_vars] from bool_const_vars::@1 bool_const_vars::@3
bool_const_vars::@return: scope:[bool_const_vars] from bool_const_vars::@1 bool_const_vars::@2
return
to:@return
@ -83,32 +71,32 @@ bool_const_inline: scope:[bool_const_inline] from main::@2
(bool~) bool_const_inline::$6 ← ! (bool~) bool_const_inline::$5
(bool~) bool_const_inline::$7 ← (bool~) bool_const_inline::$4 || (bool~) bool_const_inline::$6
if((bool~) bool_const_inline::$7) goto bool_const_inline::@1
to:bool_const_inline::@3
to:bool_const_inline::@2
bool_const_inline::@1: scope:[bool_const_inline] from bool_const_inline
*((const nomodify byte*) SCREEN + (number) 2) ← (byte) 't'
to:bool_const_inline::@return
bool_const_inline::@3: scope:[bool_const_inline] from bool_const_inline
bool_const_inline::@2: scope:[bool_const_inline] from bool_const_inline
*((const nomodify byte*) SCREEN + (number) 2) ← (byte) 'f'
to:bool_const_inline::@return
bool_const_inline::@return: scope:[bool_const_inline] from bool_const_inline::@1 bool_const_inline::@3
bool_const_inline::@return: scope:[bool_const_inline] from bool_const_inline::@1 bool_const_inline::@2
return
to:@return
@4: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@5
@5: scope:[] from @4
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @5
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @4
(label) @5
(label) @1
(label) @2
(label) @begin
(label) @end
(const nomodify byte*) SCREEN = (byte*)(number) $400
(void()) bool_const_if()
(label) bool_const_if::@1
(label) bool_const_if::@3
(label) bool_const_if::@2
(label) bool_const_if::@return
(const bool) bool_const_if::b = true
(void()) bool_const_inline()
@ -121,7 +109,7 @@ SYMBOL TABLE SSA
(bool~) bool_const_inline::$6
(bool~) bool_const_inline::$7
(label) bool_const_inline::@1
(label) bool_const_inline::@3
(label) bool_const_inline::@2
(label) bool_const_inline::@return
(const byte) bool_const_inline::a = (byte) $17
(void()) bool_const_vars()
@ -136,7 +124,7 @@ SYMBOL TABLE SSA
(bool~) bool_const_vars::$8
(bool~) bool_const_vars::$9
(label) bool_const_vars::@1
(label) bool_const_vars::@3
(label) bool_const_vars::@2
(label) bool_const_vars::@return
(const byte) bool_const_vars::a = (byte) $e
(bool) bool_const_vars::b
@ -232,14 +220,14 @@ Constant (const bool) bool_const_inline::$2 = bool_const_inline::a==$f
Constant (const bool) bool_const_inline::$6 = $15>=bool_const_inline::a
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [4] if((const bool) bool_const_if::b) goto bool_const_if::@1
if() condition always false - eliminating [17] if((const bool) bool_const_vars::$0) goto bool_const_vars::@6
if() condition always false - eliminating [17] if((const bool) bool_const_vars::$0) goto bool_const_vars::@4
if() condition always true - replacing block destination [28] if((const bool) bool_const_inline::$0) goto bool_const_inline::@1
if() condition always false - eliminating if(false) goto bool_const_vars::@1
if() condition always true - replacing block destination if((const bool) bool_const_vars::$4) goto bool_const_vars::@5
if() condition always true - replacing block destination if((const bool) bool_const_vars::$2) goto bool_const_vars::@6
if() condition always true - replacing block destination if((const bool) bool_const_vars::$4) goto bool_const_vars::@3
if() condition always true - replacing block destination if((const bool) bool_const_vars::$2) goto bool_const_vars::@4
if() condition always false - eliminating if((const bool) bool_const_inline::$6) goto bool_const_inline::@1
if() condition always true - replacing block destination if((const bool) bool_const_inline::$1) goto bool_const_inline::@7
if() condition always true - replacing block destination if((const bool) bool_const_vars::$5) goto bool_const_vars::@5
if() condition always true - replacing block destination if((const bool) bool_const_inline::$1) goto bool_const_inline::@5
if() condition always true - replacing block destination if((const bool) bool_const_vars::$5) goto bool_const_vars::@3
if() condition always false - eliminating if((const bool) bool_const_inline::$2) goto bool_const_inline::@1
Successful SSA optimization Pass2ConstantIfs
Simplifying expression containing zero SCREEN in [5] *((const nomodify byte*) SCREEN + (byte) 0) ← (byte) 't'
@ -258,20 +246,20 @@ Successful SSA optimization PassNEliminateUnusedVars
Eliminating unused constant (const byte) bool_const_vars::a
Eliminating unused constant (const byte) bool_const_inline::a
Successful SSA optimization PassNEliminateUnusedVars
Removing unused block bool_const_if::@3
Removing unused block bool_const_if::@2
Removing unused block bool_const_vars::@1
Removing unused block bool_const_inline::@2
Removing unused block bool_const_inline::@3
Removing unused block bool_const_inline::@4
Removing unused block bool_const_vars::@6
Removing unused block bool_const_inline::@5
Removing unused block bool_const_inline::@6
Removing unused block bool_const_vars::@8
Removing unused block bool_const_inline::@7
Successful SSA optimization Pass2EliminateUnusedBlocks
Consolidated array index constant in *(SCREEN+1)
Consolidated array index constant in *(SCREEN+2)
Successful SSA optimization Pass2ConstantAdditionElimination
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @4
Adding NOP phi() at start of @5
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
@ -279,9 +267,9 @@ Adding NOP phi() at start of main::@2
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of bool_const_inline
Adding NOP phi() at start of bool_const_vars
Adding NOP phi() at start of bool_const_vars::@7
Adding NOP phi() at start of bool_const_vars::@6
Adding NOP phi() at start of bool_const_vars::@5
Adding NOP phi() at start of bool_const_vars::@4
Adding NOP phi() at start of bool_const_vars::@3
Adding NOP phi() at start of bool_const_if
CALL GRAPH
Calls in [] to main:2
@ -289,13 +277,12 @@ Calls in [main] to bool_const_if:6 bool_const_vars:8 bool_const_inline:10
Created 0 initial phi equivalence classes
Coalesced down to 0 phi equivalence classes
Culled Empty Block (label) @5
Culled Empty Block (label) @2
Culled Empty Block (label) main::@3
Culled Empty Block (label) bool_const_vars::@7
Culled Empty Block (label) bool_const_vars::@6
Culled Empty Block (label) bool_const_vars::@5
Renumbering block @4 to @1
Renumbering block bool_const_vars::@3 to bool_const_vars::@1
Culled Empty Block (label) bool_const_vars::@4
Culled Empty Block (label) bool_const_vars::@3
Renumbering block bool_const_vars::@2 to bool_const_vars::@1
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,15 +1,10 @@
Identified constant variable (byte*) main::screen
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Culled Empty Block (label) @1
Culled Empty Block (label) isSet::@1
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@2
to:@1
(void()) main()
main: scope:[main] from @2
main: scope:[main] from @1
(byte) main::i#0 ← (byte) 0
to:main::@1
main::@1: scope:[main] from main main::@3
@ -20,19 +15,19 @@ main::@1: scope:[main] from main main::@3
(bool) isSet::b#0 ← (bool~) main::$1
call isSet
(bool) isSet::return#0 ← (bool) isSet::return#2
to:main::@7
main::@7: scope:[main] from main::@1
to:main::@5
main::@5: scope:[main] from main::@1
(byte) main::i#6 ← phi( main::@1/(byte) main::i#2 )
(bool) isSet::return#3 ← phi( main::@1/(bool) isSet::return#0 )
(bool~) main::$2 ← (bool) isSet::return#3
if((bool~) main::$2) goto main::@2
to:main::@4
main::@2: scope:[main] from main::@7
(byte) main::i#3 ← phi( main::@7/(byte) main::i#6 )
main::@2: scope:[main] from main::@5
(byte) main::i#3 ← phi( main::@5/(byte) main::i#6 )
*((const byte*) main::screen + (byte) main::i#3) ← (byte) '*'
to:main::@3
main::@4: scope:[main] from main::@7
(byte) main::i#4 ← phi( main::@7/(byte) main::i#6 )
main::@4: scope:[main] from main::@5
(byte) main::i#4 ← phi( main::@5/(byte) main::i#6 )
*((const byte*) main::screen + (byte) main::i#4) ← (byte) ' '
to:main::@3
main::@3: scope:[main] from main::@2 main::@4
@ -59,16 +54,16 @@ isSet::@return: scope:[isSet] from isSet
(bool) isSet::return#2 ← (bool) isSet::return#4
return
to:@return
@2: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@3
@3: scope:[] from @2
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @3
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @1
(label) @2
(label) @3
(label) @begin
(label) @end
(bool()) isSet((byte) isSet::i , (bool) isSet::b)
@ -97,7 +92,7 @@ SYMBOL TABLE SSA
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@7
(label) main::@5
(label) main::@return
(byte) main::i
(byte) main::i#0
@ -154,10 +149,10 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions
Inlining constant with var siblings (const byte) main::i#0
Constant inlined main::i#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@8(between main::@3 and main::@1)
Added new block during phi lifting main::@6(between main::@3 and main::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
CALL GRAPH
@ -167,10 +162,8 @@ Calls in [main] to isSet:10
Created 1 initial phi equivalence classes
Coalesced [18] main::i#7 ← main::i#1
Coalesced down to 1 phi equivalence classes
Culled Empty Block (label) @3
Culled Empty Block (label) main::@8
Renumbering block @2 to @1
Renumbering block main::@7 to main::@5
Culled Empty Block (label) @2
Culled Empty Block (label) main::@6
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,4 +1,3 @@
Culled Empty Block (label) main::@4
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -95,7 +94,7 @@ Simplifying constant integer cast $15
Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) $15
Successful SSA optimization PassNFinalizeNumberTypeConversions
Simple Condition (bool~) main::$0 [4] if((byte) main::i#2<(byte) $a) goto main::@5
Simple Condition (bool~) main::$0 [4] if((byte) main::i#2<(byte) $a) goto main::@4
Simple Condition (bool~) main::$2 [10] if((byte~) main::$1==(byte) 0) goto main::@3
Successful SSA optimization Pass2ConditionalJumpSimplification
Negating conditional jump and destination [4] if((byte) main::i#2>=(byte) $a) goto main::@2
@ -104,7 +103,7 @@ Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Inlining constant with var siblings (const byte) main::i#0
Constant inlined main::i#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@6(between main::@2 and main::@1)
Added new block during phi lifting main::@5(between main::@2 and main::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
@ -117,8 +116,7 @@ Created 1 initial phi equivalence classes
Coalesced [14] main::i#5 ← main::i#1
Coalesced down to 1 phi equivalence classes
Culled Empty Block (label) @2
Culled Empty Block (label) main::@6
Renumbering block main::@5 to main::@4
Culled Empty Block (label) main::@5
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,22 +1,10 @@
Culled Empty Block (label) @1
Culled Empty Block (label) bool_and::@5
Culled Empty Block (label) bool_and::@6
Culled Empty Block (label) @2
Culled Empty Block (label) bool_or::@5
Culled Empty Block (label) bool_or::@6
Culled Empty Block (label) @3
Culled Empty Block (label) bool_not::@5
Culled Empty Block (label) bool_not::@6
Culled Empty Block (label) @4
Culled Empty Block (label) bool_complex::@5
Culled Empty Block (label) bool_complex::@6
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@5
to:@1
(void()) main()
main: scope:[main] from @5
main: scope:[main] from @1
call bool_and
to:main::@1
main::@1: scope:[main] from main
@ -160,16 +148,16 @@ bool_complex::@3: scope:[bool_complex] from bool_complex::@2 bool_complex::@4
bool_complex::@return: scope:[bool_complex] from bool_complex::@3
return
to:@return
@5: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@6
@6: scope:[] from @5
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @6
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @5
(label) @6
(label) @1
(label) @2
(label) @begin
(label) @end
(void()) bool_and()
@ -380,10 +368,10 @@ Finalized unsigned number type (byte) $15
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias bool_complex::$5 = bool_complex::$1
Successful SSA optimization Pass2AliasElimination
Simple Condition (bool~) bool_and::$0 [9] if((byte) bool_and::i#2<(byte) $a) goto bool_and::@7
Simple Condition (bool~) bool_and::$0 [9] if((byte) bool_and::i#2<(byte) $a) goto bool_and::@5
Simple Condition (bool~) bool_or::$0 [19] if((byte) bool_or::i#2<(byte) $a) goto bool_or::@2
Simple Condition (bool~) bool_not::$0 [29] if((byte) bool_not::i#2<(byte) $a) goto bool_not::@4
Simple Condition (bool~) bool_complex::$0 [41] if((byte) bool_complex::i#2<(byte) $a) goto bool_complex::@8
Simple Condition (bool~) bool_complex::$0 [41] if((byte) bool_complex::i#2<(byte) $a) goto bool_complex::@6
Simple Condition (bool~) bool_and::$2 [48] if((byte~) bool_and::$1==(byte) 0) goto bool_and::@2
Simple Condition (bool~) bool_or::$2 [49] if((byte~) bool_or::$1==(byte) 0) goto bool_or::@2
Simple Condition (bool~) bool_not::$2 [50] if((byte~) bool_not::$1==(byte) 0) goto bool_not::@4
@ -392,7 +380,7 @@ Simple Condition (bool~) bool_complex::$2 [52] if((byte~) bool_complex::$5==(byt
Simple Condition (bool~) bool_complex::$6 [53] if((byte~) bool_complex::$5==(byte) 0) goto bool_complex::@4
Successful SSA optimization Pass2ConditionalJumpSimplification
Negating conditional jump and destination [9] if((byte) bool_and::i#2>=(byte) $a) goto bool_and::@4
Negating conditional jump and destination [41] if((byte) bool_complex::i#2>=(byte) $a) goto bool_complex::@7
Negating conditional jump and destination [41] if((byte) bool_complex::i#2>=(byte) $a) goto bool_complex::@5
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Inlining constant with var siblings (const byte) bool_and::i#0
Inlining constant with var siblings (const byte) bool_or::i#0
@ -403,13 +391,13 @@ Constant inlined bool_or::i#0 = (byte) 0
Constant inlined bool_not::i#0 = (byte) 0
Constant inlined bool_and::i#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting bool_and::@8(between bool_and::@3 and bool_and::@1)
Added new block during phi lifting bool_or::@8(between bool_or::@3 and bool_or::@1)
Added new block during phi lifting bool_not::@8(between bool_not::@3 and bool_not::@1)
Added new block during phi lifting bool_complex::@10(between bool_complex::@3 and bool_complex::@1)
Added new block during phi lifting bool_and::@6(between bool_and::@3 and bool_and::@1)
Added new block during phi lifting bool_or::@6(between bool_or::@3 and bool_or::@1)
Added new block during phi lifting bool_not::@6(between bool_not::@3 and bool_not::@1)
Added new block during phi lifting bool_complex::@8(between bool_complex::@3 and bool_complex::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @5
Adding NOP phi() at start of @6
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
@ -430,19 +418,12 @@ Coalesced [37] bool_not::i#6 ← bool_not::i#1
Coalesced [48] bool_or::i#6 ← bool_or::i#1
Coalesced [59] bool_and::i#6 ← bool_and::i#1
Coalesced down to 4 phi equivalence classes
Culled Empty Block (label) @6
Culled Empty Block (label) @2
Culled Empty Block (label) main::@4
Culled Empty Block (label) bool_complex::@10
Culled Empty Block (label) bool_not::@8
Culled Empty Block (label) bool_or::@8
Culled Empty Block (label) bool_and::@8
Renumbering block @5 to @1
Renumbering block bool_and::@7 to bool_and::@5
Renumbering block bool_or::@7 to bool_or::@5
Renumbering block bool_not::@7 to bool_not::@5
Renumbering block bool_complex::@7 to bool_complex::@5
Renumbering block bool_complex::@8 to bool_complex::@6
Renumbering block bool_complex::@9 to bool_complex::@7
Culled Empty Block (label) bool_complex::@8
Culled Empty Block (label) bool_not::@6
Culled Empty Block (label) bool_or::@6
Culled Empty Block (label) bool_and::@6
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,12 +1,3 @@
Culled Empty Block (label) main::@2
Culled Empty Block (label) main::@11
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@12
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::@8
Culled Empty Block (label) main::@9
Culled Empty Block (label) main::@10
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -17,16 +8,16 @@ CONTROL FLOW GRAPH SSA
main: scope:[main] from @1
(bool) framedone#9 ← phi( @1/(bool) framedone#8 )
to:main::@1
main::@1: scope:[main] from main main::@6
(bool) framedone#7 ← phi( main/(bool) framedone#9 main::@6/(bool) framedone#1 )
if(true) goto main::@4
main::@1: scope:[main] from main main::@3
(bool) framedone#7 ← phi( main/(bool) framedone#9 main::@3/(bool) framedone#1 )
if(true) goto main::@2
to:main::@return
main::@4: scope:[main] from main::@1 main::@4
(bool) framedone#4 ← phi( main::@1/(bool) framedone#7 main::@4/(bool) framedone#4 )
main::@2: scope:[main] from main::@1 main::@2
(bool) framedone#4 ← phi( main::@1/(bool) framedone#7 main::@2/(bool) framedone#4 )
(bool~) main::$0 ← ! (bool) framedone#4
if((bool~) main::$0) goto main::@4
to:main::@6
main::@6: scope:[main] from main::@4
if((bool~) main::$0) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@2
(bool) framedone#1 ← false
to:main::@1
main::@return: scope:[main] from main::@1
@ -63,8 +54,8 @@ SYMBOL TABLE SSA
(void()) main()
(bool~) main::$0
(label) main::@1
(label) main::@4
(label) main::@6
(label) main::@2
(label) main::@3
(label) main::@return
Alias framedone#2 = framedone#5 framedone#7
@ -80,7 +71,7 @@ Successful SSA optimization Pass2ConditionalAndOrRewriting
Constant (const bool) framedone#0 = true
Constant (const bool) framedone#1 = false
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [3] if(true) goto main::@4
if() condition always true - replacing block destination [3] if(true) goto main::@2
Successful SSA optimization Pass2ConstantIfs
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
@ -94,15 +85,14 @@ Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@6
Adding NOP phi() at start of main::@3
CALL GRAPH
Calls in [] to main:2
Created 1 initial phi equivalence classes
Coalesced down to 1 phi equivalence classes
Culled Empty Block (label) @2
Culled Empty Block (label) main::@6
Renumbering block main::@4 to main::@2
Culled Empty Block (label) main::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,4 +1,3 @@
Culled Empty Block (label) main::@1
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -14,13 +13,13 @@ main: scope:[main] from @1
*((bool*) main::bscreen#1) ← true
(bool~) main::$1 ← ! *((bool*) main::bscreen#1)
if((bool~) main::$1) goto main::@return
to:main::@2
main::@2: scope:[main] from main
to:main::@1
main::@1: scope:[main] from main
(bool*) main::bscreen#3 ← phi( main/(bool*) main::bscreen#1 )
(bool*) main::bscreen#2 ← ++ (bool*) main::bscreen#3
*((bool*) main::bscreen#2) ← true
to:main::@return
main::@return: scope:[main] from main main::@2
main::@return: scope:[main] from main main::@1
return
to:@return
@1: scope:[] from @begin
@ -38,7 +37,7 @@ SYMBOL TABLE SSA
(void()) main()
(bool*~) main::$0
(bool~) main::$1
(label) main::@2
(label) main::@1
(label) main::@return
(bool*) main::bscreen
(bool*) main::bscreen#0
@ -96,7 +95,6 @@ Calls in [] to main:2
Created 0 initial phi equivalence classes
Coalesced down to 0 phi equivalence classes
Culled Empty Block (label) @2
Renumbering block main::@2 to main::@1
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,22 +1,10 @@
Culled Empty Block (label) @1
Culled Empty Block (label) bool_and::@5
Culled Empty Block (label) bool_and::@6
Culled Empty Block (label) @2
Culled Empty Block (label) bool_or::@5
Culled Empty Block (label) bool_or::@6
Culled Empty Block (label) @3
Culled Empty Block (label) bool_not::@5
Culled Empty Block (label) bool_not::@6
Culled Empty Block (label) @4
Culled Empty Block (label) bool_complex::@5
Culled Empty Block (label) bool_complex::@6
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@5
to:@1
(void()) main()
main: scope:[main] from @5
main: scope:[main] from @1
call bool_and
to:main::@1
main::@1: scope:[main] from main
@ -171,16 +159,16 @@ bool_complex::@3: scope:[bool_complex] from bool_complex::@2 bool_complex::@4
bool_complex::@return: scope:[bool_complex] from bool_complex::@3
return
to:@return
@5: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@6
@6: scope:[] from @5
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @6
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @5
(label) @6
(label) @1
(label) @2
(label) @begin
(label) @end
(void()) bool_and()
@ -415,7 +403,7 @@ Finalized unsigned number type (byte) $15
Finalized unsigned number type (byte) $15
Finalized unsigned number type (byte) $15
Successful SSA optimization PassNFinalizeNumberTypeConversions
Simple Condition (bool) bool_and::o1#0 [9] if((byte) bool_and::i#2<(byte) $a) goto bool_and::@7
Simple Condition (bool) bool_and::o1#0 [9] if((byte) bool_and::i#2<(byte) $a) goto bool_and::@5
Simple Condition (bool) bool_or::o1#0 [19] if((byte) bool_or::i#2<(byte) $a) goto bool_or::@2
Simple Condition (bool) bool_not::o1#0 [29] if((byte) bool_not::i#2<(byte) $a) goto bool_not::@4
Simple Condition (bool) bool_and::o2#0 [46] if((byte~) bool_and::$1==(byte) 0) goto bool_and::@2
@ -432,13 +420,13 @@ Constant inlined bool_or::i#0 = (byte) 0
Constant inlined bool_not::i#0 = (byte) 0
Constant inlined bool_and::i#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting bool_and::@8(between bool_and::@3 and bool_and::@1)
Added new block during phi lifting bool_or::@8(between bool_or::@3 and bool_or::@1)
Added new block during phi lifting bool_not::@8(between bool_not::@3 and bool_not::@1)
Added new block during phi lifting bool_complex::@10(between bool_complex::@3 and bool_complex::@1)
Added new block during phi lifting bool_and::@6(between bool_and::@3 and bool_and::@1)
Added new block during phi lifting bool_or::@6(between bool_or::@3 and bool_or::@1)
Added new block during phi lifting bool_not::@6(between bool_not::@3 and bool_not::@1)
Added new block during phi lifting bool_complex::@8(between bool_complex::@3 and bool_complex::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @5
Adding NOP phi() at start of @6
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
@ -459,19 +447,12 @@ Coalesced [39] bool_not::i#6 ← bool_not::i#1
Coalesced [50] bool_or::i#6 ← bool_or::i#1
Coalesced [61] bool_and::i#6 ← bool_and::i#1
Coalesced down to 4 phi equivalence classes
Culled Empty Block (label) @6
Culled Empty Block (label) @2
Culled Empty Block (label) main::@4
Culled Empty Block (label) bool_complex::@10
Culled Empty Block (label) bool_not::@8
Culled Empty Block (label) bool_or::@8
Culled Empty Block (label) bool_and::@8
Renumbering block @5 to @1
Renumbering block bool_and::@7 to bool_and::@5
Renumbering block bool_or::@7 to bool_or::@5
Renumbering block bool_not::@7 to bool_not::@5
Renumbering block bool_complex::@7 to bool_complex::@5
Renumbering block bool_complex::@8 to bool_complex::@6
Renumbering block bool_complex::@9 to bool_complex::@7
Culled Empty Block (label) bool_complex::@8
Culled Empty Block (label) bool_not::@6
Culled Empty Block (label) bool_or::@6
Culled Empty Block (label) bool_and::@6
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,9 +1,3 @@
Identified constant variable (byte) STAR
Identified constant variable (byte) main::x0
Identified constant variable (byte) main::y0
Identified constant variable (byte) main::x1
Identified constant variable (byte) main::y1
Culled Empty Block (label) main::@4
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -243,8 +237,8 @@ Constant inlined main::y#0 = (const byte) main::y0
Constant inlined main::$4 = (const byte*) SCREEN+(const byte) main::y0*(byte) $28
Constant inlined main::e#0 = (const byte) main::yd#0/(byte) 2
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@5(between main::@2 and main::@1)
Added new block during phi lifting main::@6(between main::@1 and main::@2)
Added new block during phi lifting main::@4(between main::@2 and main::@1)
Added new block during phi lifting main::@5(between main::@1 and main::@2)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
@ -266,8 +260,8 @@ Coalesced [26] main::e#7 ← main::e#1
Coalesced (already) [27] main::y#6 ← main::y#2
Coalesced down to 4 phi equivalence classes
Culled Empty Block (label) @2
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,9 +1,3 @@
Identified constant variable (byte) main::STAR
Identified constant variable (byte) main::x0
Identified constant variable (byte) main::y0
Identified constant variable (byte) main::x1
Identified constant variable (byte) main::y1
Culled Empty Block (label) main::@4
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -249,8 +243,8 @@ Constant inlined main::xd#0 = (const byte) main::x1
Constant inlined main::e#0 = (const byte) main::y1/(byte) 2
Constant inlined main::yd#0 = (const byte) main::y1
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@5(between main::@2 and main::@1)
Added new block during phi lifting main::@6(between main::@1 and main::@2)
Added new block during phi lifting main::@4(between main::@2 and main::@1)
Added new block during phi lifting main::@5(between main::@1 and main::@2)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
@ -272,8 +266,8 @@ Coalesced [27] main::e#7 ← main::e#1
Coalesced (already) [28] main::y#6 ← main::y#2
Coalesced down to 4 phi equivalence classes
Culled Empty Block (label) @2
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,102 +1,7 @@
Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6
Fixing pointer addition (word*~) bsearch16u::$13 ← (word*) bsearch16u::pivot + (number) 1
Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - (number) 1
Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit)
De-inlining cast (byte*)memcpy::source
De-inlining cast (word)memmove::destination
De-inlining cast (word)memmove::source
De-inlining cast (byte*)memmove::source
De-inlining cast (byte*)memmove::destination
De-inlining cast (byte*)memset::str
De-inlining cast (signed word)bsearch16u::key
De-inlining cast (signed word)*(bsearch16u::pivot)
De-inlining cast (byte)uctoa::value
De-inlining cast (byte)utoa::value
De-inlining cast (byte)ultoa::value
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) strupr::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) strlen::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Identified constant variable (byte) testChar::u
Identified constant variable (byte) testChar::n
Identified constant variable (signed byte) testChar::s
Identified constant variable (word) testShort::u
Identified constant variable (signed word) testShort::n
Identified constant variable (signed word) testShort::s
Identified constant variable (word) testInt::u
Identified constant variable (signed word) testInt::n
Identified constant variable (signed word) testInt::s
Identified constant variable (dword) testLong::u
Identified constant variable (signed dword) testLong::n
Identified constant variable (signed dword) testLong::s
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) memset::@7
Culled Empty Block (label) memset::@6
Culled Empty Block (label) memset::@8
Culled Empty Block (label) memset::@9
Culled Empty Block (label) memset::@3
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) @7
Culled Empty Block (label) @8
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Culled Empty Block (label) @13
Culled Empty Block (label) @14
Culled Empty Block (label) @15
Culled Empty Block (label) @16
Culled Empty Block (label) @17
Culled Empty Block (label) @19
Culled Empty Block (label) @20
Culled Empty Block (label) print_str::@4
Culled Empty Block (label) print_str::@3
Culled Empty Block (label) print_str::@5
Culled Empty Block (label) print_str::@6
Culled Empty Block (label) @21
Culled Empty Block (label) @22
Culled Empty Block (label) @23
Culled Empty Block (label) print_sint::@4
Culled Empty Block (label) @24
Culled Empty Block (label) print_schar::@4
Culled Empty Block (label) @25
Culled Empty Block (label) @26
Culled Empty Block (label) @27
Culled Empty Block (label) @28
Culled Empty Block (label) @29
Culled Empty Block (label) @30
Culled Empty Block (label) @31
Culled Empty Block (label) @32
Culled Empty Block (label) @33
Culled Empty Block (label) @34
Culled Empty Block (label) @35
Culled Empty Block (label) print_slong::@4
Culled Empty Block (label) @36
Culled Empty Block (label) @37
Culled Empty Block (label) @38
Culled Empty Block (label) @39
Culled Empty Block (label) @40
Culled Empty Block (label) @41
Culled Empty Block (label) @42
Culled Empty Block (label) @43
Culled Empty Block (label) @44
Culled Empty Block (label) @45
Culled Empty Block (label) @46
Culled Empty Block (label) @47
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@18
to:@1
(void*()) memset((void*) memset::str , (byte) memset::c , (word) memset::num)
memset: scope:[memset] from print_cls
@ -107,8 +12,8 @@ memset: scope:[memset] from print_cls
(bool~) memset::$1 ← ! (bool~) memset::$0
if((bool~) memset::$1) goto memset::@1
to:memset::@2
memset::@1: scope:[memset] from memset memset::@4
(void*) memset::str#1 ← phi( memset/(void*) memset::str#3 memset::@4/(void*) memset::str#4 )
memset::@1: scope:[memset] from memset memset::@3
(void*) memset::str#1 ← phi( memset/(void*) memset::str#3 memset::@3/(void*) memset::str#4 )
(void*) memset::return#0 ← (void*) memset::str#1
to:memset::@return
memset::@2: scope:[memset] from memset
@ -119,42 +24,42 @@ memset::@2: scope:[memset] from memset
(byte*~) memset::$2 ← (byte*~) memset::$4 + (word) memset::num#2
(byte*) memset::end#0 ← (byte*~) memset::$2
(byte*) memset::dst#0 ← ((byte*)) (void*) memset::str#2
to:memset::@4
memset::@4: scope:[memset] from memset::@2 memset::@5
(byte) memset::c#2 ← phi( memset::@2/(byte) memset::c#3 memset::@5/(byte) memset::c#1 )
(void*) memset::str#4 ← phi( memset::@2/(void*) memset::str#2 memset::@5/(void*) memset::str#5 )
(byte*) memset::end#1 ← phi( memset::@2/(byte*) memset::end#0 memset::@5/(byte*) memset::end#2 )
(byte*) memset::dst#2 ← phi( memset::@2/(byte*) memset::dst#0 memset::@5/(byte*) memset::dst#1 )
to:memset::@3
memset::@3: scope:[memset] from memset::@2 memset::@4
(byte) memset::c#2 ← phi( memset::@2/(byte) memset::c#3 memset::@4/(byte) memset::c#1 )
(void*) memset::str#4 ← phi( memset::@2/(void*) memset::str#2 memset::@4/(void*) memset::str#5 )
(byte*) memset::end#1 ← phi( memset::@2/(byte*) memset::end#0 memset::@4/(byte*) memset::end#2 )
(byte*) memset::dst#2 ← phi( memset::@2/(byte*) memset::dst#0 memset::@4/(byte*) memset::dst#1 )
(bool~) memset::$3 ← (byte*) memset::dst#2 != (byte*) memset::end#1
if((bool~) memset::$3) goto memset::@5
if((bool~) memset::$3) goto memset::@4
to:memset::@1
memset::@5: scope:[memset] from memset::@4
(void*) memset::str#5 ← phi( memset::@4/(void*) memset::str#4 )
(byte*) memset::end#2 ← phi( memset::@4/(byte*) memset::end#1 )
(byte*) memset::dst#3 ← phi( memset::@4/(byte*) memset::dst#2 )
(byte) memset::c#1 ← phi( memset::@4/(byte) memset::c#2 )
memset::@4: scope:[memset] from memset::@3
(void*) memset::str#5 ← phi( memset::@3/(void*) memset::str#4 )
(byte*) memset::end#2 ← phi( memset::@3/(byte*) memset::end#1 )
(byte*) memset::dst#3 ← phi( memset::@3/(byte*) memset::dst#2 )
(byte) memset::c#1 ← phi( memset::@3/(byte) memset::c#2 )
*((byte*) memset::dst#3) ← (byte) memset::c#1
(byte*) memset::dst#1 ← ++ (byte*) memset::dst#3
to:memset::@4
to:memset::@3
memset::@return: scope:[memset] from memset::@1
(void*) memset::return#3 ← phi( memset::@1/(void*) memset::return#0 )
(void*) memset::return#1 ← (void*) memset::return#3
return
to:@return
@18: scope:[] from @begin
@1: scope:[] from @begin
(byte*) print_screen#0 ← (byte*)(number) $400
(byte*) print_line_cursor#0 ← (byte*) print_screen#0
(byte*) print_char_cursor#0 ← (byte*) print_line_cursor#0
to:@48
to:@2
(void()) print_str((byte*) print_str::str)
print_str: scope:[print_str] from testChar testInt testLong testShort
(byte*) print_char_cursor#157 ← phi( testChar/(byte*) print_char_cursor#152 testInt/(byte*) print_char_cursor#154 testLong/(byte*) print_char_cursor#155 testShort/(byte*) print_char_cursor#153 )
(byte*) print_str::str#8 ← phi( testChar/(byte*) print_str::str#1 testInt/(byte*) print_str::str#3 testLong/(byte*) print_str::str#4 testShort/(byte*) print_str::str#2 )
to:print_str::@1
print_str::@1: scope:[print_str] from print_str print_str::@7
(byte*) print_char_cursor#137 ← phi( print_str/(byte*) print_char_cursor#157 print_str::@7/(byte*) print_char_cursor#1 )
(byte*) print_str::str#5 ← phi( print_str/(byte*) print_str::str#8 print_str::@7/(byte*) print_str::str#0 )
print_str::@1: scope:[print_str] from print_str print_str::@3
(byte*) print_char_cursor#137 ← phi( print_str/(byte*) print_char_cursor#157 print_str::@3/(byte*) print_char_cursor#1 )
(byte*) print_str::str#5 ← phi( print_str/(byte*) print_str::str#8 print_str::@3/(byte*) print_str::str#0 )
(bool~) print_str::$1 ← (number) 0 != *((byte*) print_str::str#5)
if((bool~) print_str::$1) goto print_str::@2
to:print_str::@return
@ -163,8 +68,8 @@ print_str::@2: scope:[print_str] from print_str::@1
(byte*) print_str::str#6 ← phi( print_str::@1/(byte*) print_str::str#5 )
(byte) print_char::ch#0 ← *((byte*) print_str::str#6)
call print_char
to:print_str::@7
print_str::@7: scope:[print_str] from print_str::@2
to:print_str::@3
print_str::@3: scope:[print_str] from print_str::@2
(byte*) print_str::str#7 ← phi( print_str::@2/(byte*) print_str::str#6 )
(byte*) print_char_cursor#69 ← phi( print_str::@2/(byte*) print_char_cursor#27 )
(byte*) print_char_cursor#1 ← (byte*) print_char_cursor#69
@ -213,8 +118,8 @@ print_sint::@1: scope:[print_sint] from print_sint
(byte*) print_char_cursor#139 ← phi( print_sint/(byte*) print_char_cursor#158 )
(byte) print_char::ch#1 ← (byte) '-'
call print_char
to:print_sint::@5
print_sint::@5: scope:[print_sint] from print_sint::@1
to:print_sint::@4
print_sint::@4: scope:[print_sint] from print_sint::@1
(signed word) print_sint::w#6 ← phi( print_sint::@1/(signed word) print_sint::w#8 )
(byte*) print_char_cursor#73 ← phi( print_sint::@1/(byte*) print_char_cursor#27 )
(byte*) print_char_cursor#5 ← (byte*) print_char_cursor#73
@ -226,24 +131,24 @@ print_sint::@3: scope:[print_sint] from print_sint
(byte*) print_char_cursor#140 ← phi( print_sint/(byte*) print_char_cursor#158 )
(byte) print_char::ch#2 ← (byte) ' '
call print_char
to:print_sint::@6
print_sint::@6: scope:[print_sint] from print_sint::@3
to:print_sint::@5
print_sint::@5: scope:[print_sint] from print_sint::@3
(signed word) print_sint::w#9 ← phi( print_sint::@3/(signed word) print_sint::w#10 )
(byte*) print_char_cursor#74 ← phi( print_sint::@3/(byte*) print_char_cursor#27 )
(byte*) print_char_cursor#6 ← (byte*) print_char_cursor#74
to:print_sint::@2
print_sint::@2: scope:[print_sint] from print_sint::@5 print_sint::@6
(byte*) print_char_cursor#141 ← phi( print_sint::@5/(byte*) print_char_cursor#5 print_sint::@6/(byte*) print_char_cursor#6 )
(signed word) print_sint::w#7 ← phi( print_sint::@5/(signed word) print_sint::w#0 print_sint::@6/(signed word) print_sint::w#9 )
print_sint::@2: scope:[print_sint] from print_sint::@4 print_sint::@5
(byte*) print_char_cursor#141 ← phi( print_sint::@4/(byte*) print_char_cursor#5 print_sint::@5/(byte*) print_char_cursor#6 )
(signed word) print_sint::w#7 ← phi( print_sint::@4/(signed word) print_sint::w#0 print_sint::@5/(signed word) print_sint::w#9 )
(word) print_uint::w#0 ← (word)(signed word) print_sint::w#7
call print_uint
to:print_sint::@7
print_sint::@7: scope:[print_sint] from print_sint::@2
to:print_sint::@6
print_sint::@6: scope:[print_sint] from print_sint::@2
(byte*) print_char_cursor#75 ← phi( print_sint::@2/(byte*) print_char_cursor#15 )
(byte*) print_char_cursor#7 ← (byte*) print_char_cursor#75
to:print_sint::@return
print_sint::@return: scope:[print_sint] from print_sint::@7
(byte*) print_char_cursor#76 ← phi( print_sint::@7/(byte*) print_char_cursor#7 )
print_sint::@return: scope:[print_sint] from print_sint::@6
(byte*) print_char_cursor#76 ← phi( print_sint::@6/(byte*) print_char_cursor#7 )
(byte*) print_char_cursor#8 ← (byte*) print_char_cursor#76
return
to:@return
@ -260,8 +165,8 @@ print_schar::@1: scope:[print_schar] from print_schar
(byte*) print_char_cursor#142 ← phi( print_schar/(byte*) print_char_cursor#159 )
(byte) print_char::ch#3 ← (byte) '-'
call print_char
to:print_schar::@5
print_schar::@5: scope:[print_schar] from print_schar::@1
to:print_schar::@4
print_schar::@4: scope:[print_schar] from print_schar::@1
(signed byte) print_schar::b#3 ← phi( print_schar::@1/(signed byte) print_schar::b#5 )
(byte*) print_char_cursor#77 ← phi( print_schar::@1/(byte*) print_char_cursor#27 )
(byte*) print_char_cursor#9 ← (byte*) print_char_cursor#77
@ -273,24 +178,24 @@ print_schar::@3: scope:[print_schar] from print_schar
(byte*) print_char_cursor#143 ← phi( print_schar/(byte*) print_char_cursor#159 )
(byte) print_char::ch#4 ← (byte) ' '
call print_char
to:print_schar::@6
print_schar::@6: scope:[print_schar] from print_schar::@3
to:print_schar::@5
print_schar::@5: scope:[print_schar] from print_schar::@3
(signed byte) print_schar::b#6 ← phi( print_schar::@3/(signed byte) print_schar::b#7 )
(byte*) print_char_cursor#78 ← phi( print_schar::@3/(byte*) print_char_cursor#27 )
(byte*) print_char_cursor#10 ← (byte*) print_char_cursor#78
to:print_schar::@2
print_schar::@2: scope:[print_schar] from print_schar::@5 print_schar::@6
(byte*) print_char_cursor#144 ← phi( print_schar::@5/(byte*) print_char_cursor#9 print_schar::@6/(byte*) print_char_cursor#10 )
(signed byte) print_schar::b#4 ← phi( print_schar::@5/(signed byte) print_schar::b#0 print_schar::@6/(signed byte) print_schar::b#6 )
print_schar::@2: scope:[print_schar] from print_schar::@4 print_schar::@5
(byte*) print_char_cursor#144 ← phi( print_schar::@4/(byte*) print_char_cursor#9 print_schar::@5/(byte*) print_char_cursor#10 )
(signed byte) print_schar::b#4 ← phi( print_schar::@4/(signed byte) print_schar::b#0 print_schar::@5/(signed byte) print_schar::b#6 )
(byte) print_uchar::b#0 ← (byte)(signed byte) print_schar::b#4
call print_uchar
to:print_schar::@7
print_schar::@7: scope:[print_schar] from print_schar::@2
to:print_schar::@6
print_schar::@6: scope:[print_schar] from print_schar::@2
(byte*) print_char_cursor#79 ← phi( print_schar::@2/(byte*) print_char_cursor#25 )
(byte*) print_char_cursor#11 ← (byte*) print_char_cursor#79
to:print_schar::@return
print_schar::@return: scope:[print_schar] from print_schar::@7
(byte*) print_char_cursor#80 ← phi( print_schar::@7/(byte*) print_char_cursor#11 )
print_schar::@return: scope:[print_schar] from print_schar::@6
(byte*) print_char_cursor#80 ← phi( print_schar::@6/(byte*) print_char_cursor#11 )
(byte*) print_char_cursor#12 ← (byte*) print_char_cursor#80
return
to:@return
@ -359,8 +264,8 @@ print_slong::@1: scope:[print_slong] from print_slong
(byte*) print_char_cursor#147 ← phi( print_slong/(byte*) print_char_cursor#160 )
(byte) print_char::ch#5 ← (byte) '-'
call print_char
to:print_slong::@5
print_slong::@5: scope:[print_slong] from print_slong::@1
to:print_slong::@4
print_slong::@4: scope:[print_slong] from print_slong::@1
(signed dword) print_slong::dw#4 ← phi( print_slong::@1/(signed dword) print_slong::dw#6 )
(byte*) print_char_cursor#87 ← phi( print_slong::@1/(byte*) print_char_cursor#27 )
(byte*) print_char_cursor#19 ← (byte*) print_char_cursor#87
@ -372,24 +277,24 @@ print_slong::@3: scope:[print_slong] from print_slong
(byte*) print_char_cursor#148 ← phi( print_slong/(byte*) print_char_cursor#160 )
(byte) print_char::ch#6 ← (byte) ' '
call print_char
to:print_slong::@6
print_slong::@6: scope:[print_slong] from print_slong::@3
to:print_slong::@5
print_slong::@5: scope:[print_slong] from print_slong::@3
(signed dword) print_slong::dw#7 ← phi( print_slong::@3/(signed dword) print_slong::dw#8 )
(byte*) print_char_cursor#88 ← phi( print_slong::@3/(byte*) print_char_cursor#27 )
(byte*) print_char_cursor#20 ← (byte*) print_char_cursor#88
to:print_slong::@2
print_slong::@2: scope:[print_slong] from print_slong::@5 print_slong::@6
(byte*) print_char_cursor#149 ← phi( print_slong::@5/(byte*) print_char_cursor#19 print_slong::@6/(byte*) print_char_cursor#20 )
(signed dword) print_slong::dw#5 ← phi( print_slong::@5/(signed dword) print_slong::dw#0 print_slong::@6/(signed dword) print_slong::dw#7 )
print_slong::@2: scope:[print_slong] from print_slong::@4 print_slong::@5
(byte*) print_char_cursor#149 ← phi( print_slong::@4/(byte*) print_char_cursor#19 print_slong::@5/(byte*) print_char_cursor#20 )
(signed dword) print_slong::dw#5 ← phi( print_slong::@4/(signed dword) print_slong::dw#0 print_slong::@5/(signed dword) print_slong::dw#7 )
(dword) print_ulong::dw#0 ← (dword)(signed dword) print_slong::dw#5
call print_ulong
to:print_slong::@7
print_slong::@7: scope:[print_slong] from print_slong::@2
to:print_slong::@6
print_slong::@6: scope:[print_slong] from print_slong::@2
(byte*) print_char_cursor#89 ← phi( print_slong::@2/(byte*) print_char_cursor#18 )
(byte*) print_char_cursor#21 ← (byte*) print_char_cursor#89
to:print_slong::@return
print_slong::@return: scope:[print_slong] from print_slong::@7
(byte*) print_char_cursor#90 ← phi( print_slong::@7/(byte*) print_char_cursor#21 )
print_slong::@return: scope:[print_slong] from print_slong::@6
(byte*) print_char_cursor#90 ← phi( print_slong::@6/(byte*) print_char_cursor#21 )
(byte*) print_char_cursor#22 ← (byte*) print_char_cursor#90
return
to:@return
@ -456,10 +361,10 @@ print_cls::@return: scope:[print_cls] from print_cls::@1
to:@return
(void()) main()
main: scope:[main] from @48
(byte*) print_char_cursor#151 ← phi( @48/(byte*) print_char_cursor#156 )
(byte*) print_line_cursor#40 ← phi( @48/(byte*) print_line_cursor#45 )
(byte*) print_screen#3 ← phi( @48/(byte*) print_screen#4 )
main: scope:[main] from @2
(byte*) print_char_cursor#151 ← phi( @2/(byte*) print_char_cursor#156 )
(byte*) print_line_cursor#40 ← phi( @2/(byte*) print_line_cursor#45 )
(byte*) print_screen#3 ← phi( @2/(byte*) print_screen#4 )
call print_cls
to:main::@1
main::@1: scope:[main] from main
@ -751,24 +656,24 @@ testLong::@return: scope:[testLong] from testLong::@7
(byte*) print_line_cursor#18 ← (byte*) print_line_cursor#37
return
to:@return
@48: scope:[] from @18
(byte*) print_screen#4 ← phi( @18/(byte*) print_screen#0 )
(byte*) print_char_cursor#156 ← phi( @18/(byte*) print_char_cursor#0 )
(byte*) print_line_cursor#45 ← phi( @18/(byte*) print_line_cursor#0 )
@2: scope:[] from @1
(byte*) print_screen#4 ← phi( @1/(byte*) print_screen#0 )
(byte*) print_char_cursor#156 ← phi( @1/(byte*) print_char_cursor#0 )
(byte*) print_line_cursor#45 ← phi( @1/(byte*) print_line_cursor#0 )
call main
to:@49
@49: scope:[] from @48
(byte*) print_char_cursor#135 ← phi( @48/(byte*) print_char_cursor#35 )
(byte*) print_line_cursor#38 ← phi( @48/(byte*) print_line_cursor#10 )
to:@3
@3: scope:[] from @2
(byte*) print_char_cursor#135 ← phi( @2/(byte*) print_char_cursor#35 )
(byte*) print_line_cursor#38 ← phi( @2/(byte*) print_line_cursor#10 )
(byte*) print_line_cursor#19 ← (byte*) print_line_cursor#38
(byte*) print_char_cursor#68 ← (byte*) print_char_cursor#135
to:@end
@end: scope:[] from @49
@end: scope:[] from @3
SYMBOL TABLE SSA
(label) @18
(label) @48
(label) @49
(label) @1
(label) @2
(label) @3
(label) @begin
(label) @end
(const byte) RADIX::BINARY = (number) 2
@ -790,8 +695,8 @@ SYMBOL TABLE SSA
(byte*~) memset::$4
(label) memset::@1
(label) memset::@2
(label) memset::@3
(label) memset::@4
(label) memset::@5
(label) memset::@return
(byte) memset::c
(byte) memset::c#0
@ -1094,9 +999,9 @@ SYMBOL TABLE SSA
(label) print_schar::@1
(label) print_schar::@2
(label) print_schar::@3
(label) print_schar::@4
(label) print_schar::@5
(label) print_schar::@6
(label) print_schar::@7
(label) print_schar::@return
(signed byte) print_schar::b
(signed byte) print_schar::b#0
@ -1119,9 +1024,9 @@ SYMBOL TABLE SSA
(label) print_sint::@1
(label) print_sint::@2
(label) print_sint::@3
(label) print_sint::@4
(label) print_sint::@5
(label) print_sint::@6
(label) print_sint::@7
(label) print_sint::@return
(signed word) print_sint::w
(signed word) print_sint::w#0
@ -1141,9 +1046,9 @@ SYMBOL TABLE SSA
(label) print_slong::@1
(label) print_slong::@2
(label) print_slong::@3
(label) print_slong::@4
(label) print_slong::@5
(label) print_slong::@6
(label) print_slong::@7
(label) print_slong::@return
(signed dword) print_slong::dw
(signed dword) print_slong::dw#0
@ -1159,7 +1064,7 @@ SYMBOL TABLE SSA
(bool~) print_str::$1
(label) print_str::@1
(label) print_str::@2
(label) print_str::@7
(label) print_str::@3
(label) print_str::@return
(byte*) print_str::str
(byte*) print_str::str#0
@ -1488,7 +1393,7 @@ Identical Phi Values (byte*) print_char_cursor#147 (byte*) print_char_cursor#26
Identical Phi Values (byte*) print_char_cursor#149 (byte*) print_char_cursor#26
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) memset::$1 [2] if((word) memset::num#0<=(byte) 0) goto memset::@1
Simple Condition (bool~) memset::$3 [9] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@5
Simple Condition (bool~) memset::$3 [9] if((byte*) memset::dst#2!=(byte*) memset::end#0) goto memset::@4
Simple Condition (bool~) print_str::$1 [17] if((byte) 0!=*((byte*) print_str::str#5)) goto print_str::@2
Simple Condition (bool~) print_ln::$1 [27] if((byte*) print_line_cursor#1<(byte*) print_char_cursor#26) goto print_ln::@1
Simple Condition (bool~) print_sint::$0 [31] if((signed word) print_sint::w#10<(signed byte) 0) goto print_sint::@1
@ -1543,8 +1448,8 @@ Successful SSA optimization PassNEliminateUnusedVars
Removing PHI-reference to removed block (print_schar::@3) in block print_char
Removing PHI-reference to removed block (print_schar::@3) in block print_char
Removing unused block print_schar::@3
Removing PHI-reference to removed block (print_schar::@6) in block print_schar::@2
Removing unused block print_schar::@6
Removing PHI-reference to removed block (print_schar::@5) in block print_schar::@2
Removing unused block print_schar::@5
Successful SSA optimization Pass2EliminateUnusedBlocks
Alias print_schar::b#0 = print_schar::b#4
Successful SSA optimization Pass2AliasElimination
@ -1626,9 +1531,9 @@ Constant inlined print_uint::w#3 = (const word) testShort::u
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting print_ln::@3(between print_ln::@1 and print_ln::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @18
Adding NOP phi() at start of @48
Adding NOP phi() at start of @49
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
@ -1640,14 +1545,14 @@ Adding NOP phi() at start of testLong::@3
Adding NOP phi() at start of testLong::@5
Adding NOP phi() at start of testLong::@7
Adding NOP phi() at start of print_ln::@2
Adding NOP phi() at start of print_slong::@7
Adding NOP phi() at start of print_slong::@6
Adding NOP phi() at start of print_ulong::@2
Adding NOP phi() at start of print_uint::@2
Adding NOP phi() at start of print_uchar::@2
Adding NOP phi() at start of testInt::@3
Adding NOP phi() at start of testInt::@5
Adding NOP phi() at start of testInt::@7
Adding NOP phi() at start of print_sint::@7
Adding NOP phi() at start of print_sint::@6
Adding NOP phi() at start of testShort::@3
Adding NOP phi() at start of testShort::@5
Adding NOP phi() at start of testShort::@7
@ -1656,8 +1561,8 @@ Adding NOP phi() at start of testChar::@5
Adding NOP phi() at start of testChar::@6
Adding NOP phi() at start of testChar::@7
Adding NOP phi() at start of print_schar
Adding NOP phi() at start of print_schar::@5
Adding NOP phi() at start of print_schar::@7
Adding NOP phi() at start of print_schar::@4
Adding NOP phi() at start of print_schar::@6
Adding NOP phi() at start of print_cls
Adding NOP phi() at start of print_cls::@1
Adding NOP phi() at start of memset
@ -1735,33 +1640,30 @@ Coalesced (already) [175] print_char_cursor#178 ← print_char_cursor#26
Coalesced (already) [178] print_char_cursor#173 ← print_char_cursor#26
Coalesced [194] memset::dst#4 ← memset::dst#1
Coalesced down to 10 phi equivalence classes
Culled Empty Block (label) @18
Culled Empty Block (label) @49
Culled Empty Block (label) @1
Culled Empty Block (label) @3
Culled Empty Block (label) main::@5
Culled Empty Block (label) testLong::@7
Culled Empty Block (label) print_ln::@2
Culled Empty Block (label) print_ln::@3
Culled Empty Block (label) print_slong::@5
Culled Empty Block (label) print_slong::@6
Culled Empty Block (label) print_slong::@7
Culled Empty Block (label) print_ulong::@2
Culled Empty Block (label) print_uint::@2
Culled Empty Block (label) print_uchar::@2
Culled Empty Block (label) testInt::@7
Culled Empty Block (label) print_sint::@5
Culled Empty Block (label) print_sint::@6
Culled Empty Block (label) print_sint::@7
Culled Empty Block (label) testShort::@7
Culled Empty Block (label) testChar::@7
Culled Empty Block (label) print_schar::@5
Culled Empty Block (label) print_schar::@7
Culled Empty Block (label) print_schar::@4
Culled Empty Block (label) print_schar::@6
Culled Empty Block (label) print_cls::@1
Culled Empty Block (label) memset::@2
Culled Empty Block (label) memset::@1
Renumbering block @48 to @1
Renumbering block memset::@4 to memset::@1
Renumbering block memset::@5 to memset::@2
Renumbering block print_str::@7 to print_str::@3
Renumbering block print_sint::@5 to print_sint::@4
Renumbering block print_slong::@5 to print_slong::@4
Renumbering block @2 to @1
Renumbering block memset::@3 to memset::@1
Renumbering block memset::@4 to memset::@2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,31 +1,8 @@
De-inlining cast (word)toD018::screen
De-inlining cast (word)toSpritePtr::sprite
Identified constant variable (byte*) DTV_BLITTER_ALU
Identified constant variable (byte*) dtvSetCpuBankSegment1::cpuBank
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) main::@2
Culled Empty Block (label) main::@15
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@16
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::@9
Culled Empty Block (label) main::@10
Culled Empty Block (label) main::@11
Culled Empty Block (label) main::@13
Culled Empty Block (label) main::@14
Culled Empty Block (label) @6
Culled Empty Block (label) @7
Culled Empty Block (label) gfx_init_screen0::@4
Culled Empty Block (label) @8
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@9
to:@1
(void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx)
dtvSetCpuBankSegment1: scope:[dtvSetCpuBankSegment1] from gfx_init_plane_charset8 gfx_init_plane_charset8::@8
@ -38,13 +15,13 @@ dtvSetCpuBankSegment1::@return: scope:[dtvSetCpuBankSegment1] from dtvSetCpuBan
to:@return
(void()) main()
main: scope:[main] from @9
main: scope:[main] from @1
asm { sei }
*((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK
*((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO
call gfx_init
to:main::@17
main::@17: scope:[main] from main
to:main::@7
main::@7: scope:[main] from main
*((const nomodify byte*) DTV_FEATURE) ← (const nomodify byte) DTV_FEATURE_ENABLE
*((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR|(const nomodify byte) DTV_LINEAR|(const nomodify byte) DTV_CHUNKY|(const nomodify byte) DTV_BADLINE_OFF
*((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_ECM|(const nomodify byte) VIC_RSEL|(number) 3
@ -66,31 +43,31 @@ main::@17: scope:[main] from main
*((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) SCREEN&(number) $3fff/(number) $40|>(word)(const nomodify byte*) SCREEN&(number) $3fff/(number) 4
(byte) main::j#0 ← (byte) 0
to:main::@1
main::@1: scope:[main] from main::@1 main::@17
(byte) main::j#2 ← phi( main::@1/(byte) main::j#1 main::@17/(byte) main::j#0 )
main::@1: scope:[main] from main::@1 main::@7
(byte) main::j#2 ← phi( main::@1/(byte) main::j#1 main::@7/(byte) main::j#0 )
*((const nomodify byte*) DTV_PALETTE + (byte) main::j#2) ← (byte) main::j#2
(byte) main::j#1 ← (byte) main::j#2 + rangenext(0,$f)
(bool~) main::$1 ← (byte) main::j#1 != rangelast(0,$f)
if((bool~) main::$1) goto main::@1
to:main::@3
main::@3: scope:[main] from main::@1 main::@12
if(true) goto main::@4
to:main::@2
main::@2: scope:[main] from main::@1 main::@6
if(true) goto main::@3
to:main::@return
main::@4: scope:[main] from main::@3
main::@3: scope:[main] from main::@2
asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize }
*((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_ECM|(const nomodify byte) VIC_RSEL|(number) 3
*((const nomodify byte*) BORDERCOL) ← (number) 0
(byte) main::rst#0 ← (byte) $42
to:main::@6
main::@6: scope:[main] from main::@4 main::@6
(byte) main::rst#2 ← phi( main::@4/(byte) main::rst#0 main::@6/(byte) main::rst#2 )
to:main::@4
main::@4: scope:[main] from main::@3 main::@4
(byte) main::rst#2 ← phi( main::@3/(byte) main::rst#0 main::@4/(byte) main::rst#2 )
(bool~) main::$2 ← *((const nomodify byte*) RASTER) != (byte) main::rst#2
if((bool~) main::$2) goto main::@6
to:main::@8
main::@8: scope:[main] from main::@6
if((bool~) main::$2) goto main::@4
to:main::@5
main::@5: scope:[main] from main::@4
asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
to:main::@12
main::@12: scope:[main] from main::@12 main::@8
to:main::@6
main::@6: scope:[main] from main::@5 main::@6
(byte) main::rst#1 ← *((const nomodify byte*) RASTER)
(number~) main::$3 ← (byte) main::rst#1 & (number) 7
(number~) main::$4 ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_ECM|(const nomodify byte) VIC_RSEL | (number~) main::$3
@ -99,9 +76,9 @@ main::@12: scope:[main] from main::@12 main::@8
*((const nomodify byte*) BORDERCOL) ← (number~) main::$5
asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
(bool~) main::$6 ← (byte) main::rst#1 != (number) $f2
if((bool~) main::$6) goto main::@12
to:main::@3
main::@return: scope:[main] from main::@3
if((bool~) main::$6) goto main::@6
to:main::@2
main::@return: scope:[main] from main::@2
return
to:@return
@ -256,16 +233,16 @@ gfx_init_plane_charset8::@10: scope:[gfx_init_plane_charset8] from gfx_init_pla
gfx_init_plane_charset8::@return: scope:[gfx_init_plane_charset8] from gfx_init_plane_charset8::@10
return
to:@return
@9: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@10
@10: scope:[] from @9
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @10
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @10
(label) @9
(label) @1
(label) @2
(label) @begin
(label) @end
(const nomodify byte*) BORDERCOL = (byte*)(number) $d020
@ -441,12 +418,12 @@ SYMBOL TABLE SSA
(number~) main::$5
(bool~) main::$6
(label) main::@1
(label) main::@12
(label) main::@17
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@8
(label) main::@7
(label) main::@return
(byte) main::j
(byte) main::j#0
@ -661,8 +638,8 @@ Successful SSA optimization Pass2IdenticalPhiElimination
Identical Phi Values (byte) gfx_init_plane_charset8::ch#7 (byte) gfx_init_plane_charset8::ch#8
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) main::$1 [32] if((byte) main::j#1!=rangelast(0,$f)) goto main::@1
Simple Condition (bool~) main::$2 [40] if(*((const nomodify byte*) RASTER)!=(byte) main::rst#0) goto main::@6
Simple Condition (bool~) main::$6 [50] if((byte) main::rst#1!=(byte) $f2) goto main::@12
Simple Condition (bool~) main::$2 [40] if(*((const nomodify byte*) RASTER)!=(byte) main::rst#0) goto main::@4
Simple Condition (bool~) main::$6 [50] if((byte) main::rst#1!=(byte) $f2) goto main::@6
Simple Condition (bool~) gfx_init_screen0::$4 [68] if((byte) gfx_init_screen0::cx#1!=rangelast(0,$27)) goto gfx_init_screen0::@2
Simple Condition (bool~) gfx_init_screen0::$5 [71] if((byte) gfx_init_screen0::cy#1!=rangelast(0,$18)) goto gfx_init_screen0::@1
Simple Condition (bool~) gfx_init_plane_charset8::$4 [92] if((byte~) gfx_init_plane_charset8::$2==(byte) 0) goto gfx_init_plane_charset8::@4
@ -687,7 +664,7 @@ Constant (const byte) dtvSetCpuBankSegment1::cpuBankIdx#1 = (byte)$4000/$4000
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0 = gfx_init_plane_charset8::gfxbCpuBank#0
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [33] if(true) goto main::@4
if() condition always true - replacing block destination [33] if(true) goto main::@3
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [30] main::j#1 ← ++ main::j#2 to ++
Resolved ranged comparison value [32] if(main::j#1!=rangelast(0,$f)) goto main::@1 to (number) $10
@ -765,17 +742,17 @@ Constant inlined gfx_init_plane_charset8::col#0 = (byte) 0
Constant inlined gfx_init_plane_charset8::ch#0 = (byte) 0
Constant inlined main::j#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@18(between main::@1 and main::@1)
Added new block during phi lifting gfx_init_screen0::@5(between gfx_init_screen0::@3 and gfx_init_screen0::@1)
Added new block during phi lifting gfx_init_screen0::@6(between gfx_init_screen0::@2 and gfx_init_screen0::@2)
Added new block during phi lifting main::@8(between main::@1 and main::@1)
Added new block during phi lifting gfx_init_screen0::@4(between gfx_init_screen0::@3 and gfx_init_screen0::@1)
Added new block during phi lifting gfx_init_screen0::@5(between gfx_init_screen0::@2 and gfx_init_screen0::@2)
Added new block during phi lifting gfx_init_plane_charset8::@11(between gfx_init_plane_charset8::@7 and gfx_init_plane_charset8::@1)
Added new block during phi lifting gfx_init_plane_charset8::@12(between gfx_init_plane_charset8::@6 and gfx_init_plane_charset8::@2)
Added new block during phi lifting gfx_init_plane_charset8::@13(between gfx_init_plane_charset8::@4 and gfx_init_plane_charset8::@3)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @9
Adding NOP phi() at start of @10
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of gfx_init
Adding NOP phi() at start of gfx_init::@1
Adding NOP phi() at start of gfx_init::@2
@ -815,22 +792,21 @@ Coalesced [117] gfx_init_screen0::ch#5 ← gfx_init_screen0::ch#1
Coalesced [118] gfx_init_screen0::cx#3 ← gfx_init_screen0::cx#1
Coalesced (already) [119] gfx_init_screen0::ch#7 ← gfx_init_screen0::ch#1
Coalesced down to 13 phi equivalence classes
Culled Empty Block (label) @10
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@18
Culled Empty Block (label) @2
Culled Empty Block (label) main::@2
Culled Empty Block (label) main::@8
Culled Empty Block (label) gfx_init::@2
Culled Empty Block (label) gfx_init_plane_charset8::@10
Culled Empty Block (label) gfx_init_plane_charset8::@11
Culled Empty Block (label) gfx_init_plane_charset8::@12
Culled Empty Block (label) gfx_init_plane_charset8::@13
Culled Empty Block (label) gfx_init_screen0::@4
Culled Empty Block (label) gfx_init_screen0::@5
Culled Empty Block (label) gfx_init_screen0::@6
Renumbering block @9 to @1
Renumbering block main::@4 to main::@2
Renumbering block main::@6 to main::@3
Renumbering block main::@8 to main::@4
Renumbering block main::@12 to main::@5
Renumbering block main::@17 to main::@6
Renumbering block main::@3 to main::@2
Renumbering block main::@4 to main::@3
Renumbering block main::@5 to main::@4
Renumbering block main::@6 to main::@5
Renumbering block main::@7 to main::@6
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,28 +1,8 @@
De-inlining cast (word)toD018::screen
De-inlining cast (word)toSpritePtr::sprite
Identified constant variable (byte*) DTV_BLITTER_ALU
Identified constant variable (byte*) dtvSetCpuBankSegment1::cpuBank
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) main::@2
Culled Empty Block (label) main::@15
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@16
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::@9
Culled Empty Block (label) main::@10
Culled Empty Block (label) main::@11
Culled Empty Block (label) main::@13
Culled Empty Block (label) main::@14
Culled Empty Block (label) @6
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@7
to:@1
(void()) dtvSetCpuBankSegment1((byte) dtvSetCpuBankSegment1::cpuBankIdx)
dtvSetCpuBankSegment1: scope:[dtvSetCpuBankSegment1] from gfx_init_chunky gfx_init_chunky::@4 gfx_init_chunky::@6
@ -35,13 +15,13 @@ dtvSetCpuBankSegment1::@return: scope:[dtvSetCpuBankSegment1] from dtvSetCpuBan
to:@return
(void()) main()
main: scope:[main] from @7
main: scope:[main] from @1
asm { sei }
*((const nomodify byte*) PROCPORT_DDR) ← (const nomodify byte) PROCPORT_DDR_MEMORY_MASK
*((const nomodify byte*) PROCPORT) ← (const nomodify byte) PROCPORT_RAM_IO
call gfx_init_chunky
to:main::@17
main::@17: scope:[main] from main
to:main::@7
main::@7: scope:[main] from main
*((const nomodify byte*) DTV_FEATURE) ← (const nomodify byte) DTV_FEATURE_ENABLE
*((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR|(const nomodify byte) DTV_LINEAR|(const nomodify byte) DTV_COLORRAM_OFF|(const nomodify byte) DTV_CHUNKY|(const nomodify byte) DTV_BADLINE_OFF
*((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_ECM|(const nomodify byte) VIC_RSEL|(number) 3
@ -57,31 +37,31 @@ main::@17: scope:[main] from main
*((const nomodify byte*) VIC_MEMORY) ← (byte)(word)(const nomodify byte*) CHUNKY&(number) $3fff/(number) $40|>(word)(const nomodify byte*) CHUNKY&(number) $3fff/(number) 4
(byte) main::j#0 ← (byte) 0
to:main::@1
main::@1: scope:[main] from main::@1 main::@17
(byte) main::j#2 ← phi( main::@1/(byte) main::j#1 main::@17/(byte) main::j#0 )
main::@1: scope:[main] from main::@1 main::@7
(byte) main::j#2 ← phi( main::@1/(byte) main::j#1 main::@7/(byte) main::j#0 )
*((const nomodify byte*) DTV_PALETTE + (byte) main::j#2) ← (byte) main::j#2
(byte) main::j#1 ← (byte) main::j#2 + rangenext(0,$f)
(bool~) main::$1 ← (byte) main::j#1 != rangelast(0,$f)
if((bool~) main::$1) goto main::@1
to:main::@3
main::@3: scope:[main] from main::@1 main::@12
if(true) goto main::@4
to:main::@2
main::@2: scope:[main] from main::@1 main::@6
if(true) goto main::@3
to:main::@return
main::@4: scope:[main] from main::@3
main::@3: scope:[main] from main::@2
asm { ldx#$ff rff: cpxRASTER bnerff stabilize: nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop cpxRASTER beqeat+0 eat: inx cpx#$08 bnestabilize }
*((const nomodify byte*) VIC_CONTROL) ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_ECM|(const nomodify byte) VIC_RSEL|(number) 3
*((const nomodify byte*) BORDERCOL) ← (number) 0
(byte) main::rst#0 ← (byte) $42
to:main::@6
main::@6: scope:[main] from main::@4 main::@6
(byte) main::rst#2 ← phi( main::@4/(byte) main::rst#0 main::@6/(byte) main::rst#2 )
to:main::@4
main::@4: scope:[main] from main::@3 main::@4
(byte) main::rst#2 ← phi( main::@3/(byte) main::rst#0 main::@4/(byte) main::rst#2 )
(bool~) main::$2 ← *((const nomodify byte*) RASTER) != (byte) main::rst#2
if((bool~) main::$2) goto main::@6
to:main::@8
main::@8: scope:[main] from main::@6
if((bool~) main::$2) goto main::@4
to:main::@5
main::@5: scope:[main] from main::@4
asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
to:main::@12
main::@12: scope:[main] from main::@12 main::@8
to:main::@6
main::@6: scope:[main] from main::@5 main::@6
(byte) main::rst#1 ← *((const nomodify byte*) RASTER)
(number~) main::$3 ← (byte) main::rst#1 & (number) 7
(number~) main::$4 ← (const nomodify byte) VIC_DEN|(const nomodify byte) VIC_ECM|(const nomodify byte) VIC_RSEL | (number~) main::$3
@ -90,9 +70,9 @@ main::@12: scope:[main] from main::@12 main::@8
*((const nomodify byte*) BORDERCOL) ← (number~) main::$5
asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
(bool~) main::$6 ← (byte) main::rst#1 != (number) $f2
if((bool~) main::$6) goto main::@12
to:main::@3
main::@return: scope:[main] from main::@3
if((bool~) main::$6) goto main::@6
to:main::@2
main::@return: scope:[main] from main::@2
return
to:@return
@ -167,16 +147,16 @@ gfx_init_chunky::@9: scope:[gfx_init_chunky] from gfx_init_chunky::@6
gfx_init_chunky::@return: scope:[gfx_init_chunky] from gfx_init_chunky::@9
return
to:@return
@7: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@8
@8: scope:[] from @7
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @8
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @7
(label) @8
(label) @1
(label) @2
(label) @begin
(label) @end
(const nomodify byte*) BORDERCOL = (byte*)(number) $d020
@ -280,12 +260,12 @@ SYMBOL TABLE SSA
(number~) main::$5
(bool~) main::$6
(label) main::@1
(label) main::@12
(label) main::@17
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@8
(label) main::@7
(label) main::@return
(byte) main::j
(byte) main::j#0
@ -424,8 +404,8 @@ Identical Phi Values (byte) main::rst#2 (byte) main::rst#0
Identical Phi Values (byte) gfx_init_chunky::y#2 (byte) gfx_init_chunky::y#6
Successful SSA optimization Pass2IdenticalPhiElimination
Simple Condition (bool~) main::$1 [26] if((byte) main::j#1!=rangelast(0,$f)) goto main::@1
Simple Condition (bool~) main::$2 [34] if(*((const nomodify byte*) RASTER)!=(byte) main::rst#0) goto main::@6
Simple Condition (bool~) main::$6 [44] if((byte) main::rst#1!=(byte) $f2) goto main::@12
Simple Condition (bool~) main::$2 [34] if(*((const nomodify byte*) RASTER)!=(byte) main::rst#0) goto main::@4
Simple Condition (bool~) main::$6 [44] if((byte) main::rst#1!=(byte) $f2) goto main::@6
Simple Condition (bool~) gfx_init_chunky::$3 [56] if((byte*) gfx_init_chunky::gfxb#3!=(word) $8000) goto gfx_init_chunky::@3
Simple Condition (bool~) gfx_init_chunky::$6 [64] if((word) gfx_init_chunky::x#1!=rangelast(0,$13f)) goto gfx_init_chunky::@2
Simple Condition (bool~) gfx_init_chunky::$7 [71] if((byte) gfx_init_chunky::y#1!=rangelast(0,$32)) goto gfx_init_chunky::@1
@ -441,7 +421,7 @@ Constant (const byte) dtvSetCpuBankSegment1::cpuBankIdx#2 = (byte)$4000/$4000
Successful SSA optimization Pass2ConstantIdentification
Constant (const byte) dtvSetCpuBankSegment1::cpuBankIdx#0 = gfx_init_chunky::gfxbCpuBank#0
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [27] if(true) goto main::@4
if() condition always true - replacing block destination [27] if(true) goto main::@3
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [24] main::j#1 ← ++ main::j#2 to ++
Resolved ranged comparison value [26] if(main::j#1!=rangelast(0,$f)) goto main::@1 to (number) $10
@ -493,15 +473,15 @@ Constant inlined gfx_init_chunky::gfxb#2 = (byte*) 16384
Constant inlined gfx_init_chunky::gfxb#0 = (byte*) 16384
Constant inlined gfx_init_chunky::gfxbCpuBank#0 = (byte)(const nomodify byte*) CHUNKY/(word) $4000
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@18(between main::@1 and main::@1)
Added new block during phi lifting main::@8(between main::@1 and main::@1)
Added new block during phi lifting gfx_init_chunky::@10(between gfx_init_chunky::@5 and gfx_init_chunky::@1)
Added new block during phi lifting gfx_init_chunky::@11(between gfx_init_chunky::@3 and gfx_init_chunky::@2)
Added new block during phi lifting gfx_init_chunky::@12(between gfx_init_chunky::@2 and gfx_init_chunky::@3)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @7
Adding NOP phi() at start of @8
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of gfx_init_chunky
Adding NOP phi() at start of gfx_init_chunky::@7
Adding NOP phi() at start of gfx_init_chunky::@6
@ -526,20 +506,19 @@ Coalesced (already) [72] gfx_init_chunky::gfxbCpuBank#12 ← gfx_init_chunky::gf
Coalesced [73] gfx_init_chunky::gfxb#10 ← gfx_init_chunky::gfxb#3
Coalesced (already) [74] gfx_init_chunky::gfxbCpuBank#13 ← gfx_init_chunky::gfxbCpuBank#4
Coalesced down to 6 phi equivalence classes
Culled Empty Block (label) @8
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@18
Culled Empty Block (label) @2
Culled Empty Block (label) main::@2
Culled Empty Block (label) main::@8
Culled Empty Block (label) gfx_init_chunky::@7
Culled Empty Block (label) gfx_init_chunky::@9
Culled Empty Block (label) gfx_init_chunky::@10
Culled Empty Block (label) gfx_init_chunky::@11
Culled Empty Block (label) gfx_init_chunky::@12
Renumbering block @7 to @1
Renumbering block main::@4 to main::@2
Renumbering block main::@6 to main::@3
Renumbering block main::@8 to main::@4
Renumbering block main::@12 to main::@5
Renumbering block main::@17 to main::@6
Renumbering block main::@3 to main::@2
Renumbering block main::@4 to main::@3
Renumbering block main::@5 to main::@4
Renumbering block main::@6 to main::@5
Renumbering block main::@7 to main::@6
Renumbering block gfx_init_chunky::@8 to gfx_init_chunky::@7
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1

@ -1,21 +1,11 @@
De-inlining cast (word)toD018::screen
De-inlining cast (word)toSpritePtr::sprite
Identified constant variable (byte*) DTV_BLITTER_ALU
Identified constant variable (byte*) dtvSetCpuBankSegment1::cpuBank
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) main::@2
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@6
to:@1
(void()) main()
main: scope:[main] from @6
main: scope:[main] from @1
*((const nomodify byte*) DTV_FEATURE) ← (const nomodify byte) DTV_FEATURE_ENABLE
*((const nomodify byte*) DTV_BLITTER_CONTROL2) ← (const nomodify byte) DTV_BLIT_CLEAR_IRQ
*((const nomodify byte*) DTV_BLITTER_SRCA_LO) ← <(const to_nomodify byte*) SRCA
@ -57,16 +47,16 @@ main::@1: scope:[main] from main main::@1
main::@return: scope:[main] from main::@1
return
to:@return
@6: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@7
@7: scope:[] from @6
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @7
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @6
(label) @7
(label) @1
(label) @2
(label) @begin
(label) @end
(const byte*) DTV_BLITTER_ALU = (byte*)(number) $d33e
@ -231,16 +221,15 @@ Simplifying constant evaluating to zero >(word) $13 in [24] *((const nomodify by
Simplifying constant evaluating to zero >(byte) $14*(word) $a in [27] *((const nomodify byte*) DTV_BLITTER_LEN_HI) ← >(byte) $14*(word) $a
Successful SSA optimization PassNSimplifyConstantZero
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @6
Adding NOP phi() at start of @7
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
CALL GRAPH
Calls in [] to main:2
Created 0 initial phi equivalence classes
Coalesced down to 0 phi equivalence classes
Culled Empty Block (label) @7
Renumbering block @6 to @1
Culled Empty Block (label) @2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,22 +1,11 @@
De-inlining cast (word)toD018::screen
De-inlining cast (word)toSpritePtr::sprite
Identified constant variable (byte*) DTV_BLITTER_ALU
Identified constant variable (byte*) dtvSetCpuBankSegment1::cpuBank
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) main::@1
Culled Empty Block (label) main::@4
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@6
to:@1
(void()) main()
main: scope:[main] from @6
main: scope:[main] from @1
*((const nomodify byte*) DTV_FEATURE) ← (const nomodify byte) DTV_FEATURE_ENABLE
*((const nomodify byte*) DTV_BLITTER_CONTROL2) ← (const nomodify byte) DTV_BLIT_CLEAR_IRQ
*((const nomodify byte*) DTV_BLITTER_SRCA_LO) ← <(const to_nomodify byte*) SRCA
@ -50,33 +39,33 @@ main: scope:[main] from @6
*((const nomodify byte*) DTV_BLITTER_CONTROL) ← (const nomodify byte) DTV_BLIT_FORCE_START|(const nomodify byte) DTV_BLIT_SRCA_FWD|(const nomodify byte) DTV_BLIT_SRCB_FWD|(const nomodify byte) DTV_BLIT_DEST_FWD
*((const nomodify byte*) DTV_BLITTER_CONTROL2) ← (const nomodify byte) DTV_BLIT_DEST_CONT
(byte) main::r#0 ← (byte) 0
to:main::@2
main::@2: scope:[main] from main main::@2 main::@3
(byte) main::r#3 ← phi( main/(byte) main::r#0 main::@2/(byte) main::r#3 main::@3/(byte) main::r#1 )
to:main::@1
main::@1: scope:[main] from main main::@1 main::@2
(byte) main::r#3 ← phi( main/(byte) main::r#0 main::@1/(byte) main::r#3 main::@2/(byte) main::r#1 )
(byte~) main::$0 ← *((const nomodify byte*) DTV_BLITTER_CONTROL2) & (const nomodify byte) DTV_BLIT_STATUS_BUSY
(bool~) main::$1 ← (byte~) main::$0 != (number) 0
if((bool~) main::$1) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@2
(byte) main::r#2 ← phi( main::@2/(byte) main::r#3 )
if((bool~) main::$1) goto main::@1
to:main::@2
main::@2: scope:[main] from main::@1
(byte) main::r#2 ← phi( main::@1/(byte) main::r#3 )
*((const nomodify byte*) DTV_BLITTER_CONTROL) ← (const nomodify byte) DTV_BLIT_FORCE_START|(const nomodify byte) DTV_BLIT_SRCA_FWD|(const nomodify byte) DTV_BLIT_SRCB_FWD|(const nomodify byte) DTV_BLIT_DEST_FWD
(byte) main::r#1 ← (byte) main::r#2 + rangenext(0,7)
(bool~) main::$2 ← (byte) main::r#1 != rangelast(0,7)
if((bool~) main::$2) goto main::@2
if((bool~) main::$2) goto main::@1
to:main::@return
main::@return: scope:[main] from main::@3
main::@return: scope:[main] from main::@2
return
to:@return
@6: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@7
@7: scope:[] from @6
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @7
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @6
(label) @7
(label) @1
(label) @2
(label) @begin
(label) @end
(const byte*) DTV_BLITTER_ALU = (byte*)(number) $d33e
@ -128,8 +117,8 @@ SYMBOL TABLE SSA
(byte~) main::$0
(bool~) main::$1
(bool~) main::$2
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@return
(byte) main::r
(byte) main::r#0
@ -230,19 +219,19 @@ Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Alias main::r#2 = main::r#3
Successful SSA optimization Pass2AliasElimination
Simple Condition (bool~) main::$1 [36] if((byte~) main::$0!=(byte) 0) goto main::@2
Simple Condition (bool~) main::$2 [40] if((byte) main::r#1!=rangelast(0,7)) goto main::@2
Simple Condition (bool~) main::$1 [36] if((byte~) main::$0!=(byte) 0) goto main::@1
Simple Condition (bool~) main::$2 [40] if((byte) main::r#1!=rangelast(0,7)) goto main::@1
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte) main::r#0 = 0
Successful SSA optimization Pass2ConstantIdentification
Resolved ranged next value [38] main::r#1 ← ++ main::r#2 to ++
Resolved ranged comparison value [40] if(main::r#1!=rangelast(0,7)) goto main::@2 to (number) 8
Resolved ranged comparison value [40] if(main::r#1!=rangelast(0,7)) goto main::@1 to (number) 8
Simplifying constant evaluating to zero <(word) $100 in [7] *((const nomodify byte*) DTV_BLITTER_SRCA_LIN_LO) ← <(word) $100
Simplifying constant evaluating to zero <(word) $100 in [15] *((const nomodify byte*) DTV_BLITTER_SRCB_LIN_LO) ← <(word) $100
Simplifying constant evaluating to zero <(const nomodify byte*) SCREEN in [18] *((const nomodify byte*) DTV_BLITTER_DEST_LO) ← <(const nomodify byte*) SCREEN
Simplifying constant evaluating to zero <(word) $100 in [23] *((const nomodify byte*) DTV_BLITTER_DEST_LIN_LO) ← <(word) $100
Successful SSA optimization PassNSimplifyConstantZero
Adding number conversion cast (unumber) 8 in if((byte) main::r#1!=(number) 8) goto main::@2
Adding number conversion cast (unumber) 8 in if((byte) main::r#1!=(number) 8) goto main::@1
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast 8
Successful SSA optimization PassNCastSimplification
@ -251,11 +240,11 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions
Inlining constant with var siblings (const byte) main::r#0
Constant inlined main::r#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@5(between main::@2 and main::@2)
Added new block during phi lifting main::@6(between main::@3 and main::@2)
Added new block during phi lifting main::@3(between main::@1 and main::@1)
Added new block during phi lifting main::@4(between main::@2 and main::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @6
Adding NOP phi() at start of @7
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
CALL GRAPH
Calls in [] to main:2
@ -264,12 +253,9 @@ Created 1 initial phi equivalence classes
Coalesced [44] main::r#5 ← main::r#1
Coalesced (already) [45] main::r#4 ← main::r#2
Coalesced down to 1 phi equivalence classes
Culled Empty Block (label) @7
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@5
Renumbering block @6 to @1
Renumbering block main::@2 to main::@1
Renumbering block main::@3 to main::@2
Culled Empty Block (label) @2
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -21,7 +21,7 @@ main::@2: scope:[main] from main::@1
[8] *((const nomodify byte*) BGCOL) ← (byte) 0
to:main::@3
main::@3: scope:[main] from main::@2 main::@3
[9] (byte) main::r#2 ← phi( main::@3/(byte) main::r#1 main::@2/(byte) $31 )
[9] (byte) main::r#2 ← phi( main::@2/(byte) $31 main::@3/(byte) main::r#1 )
asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
[11] *((const nomodify byte*) BGCOL) ← ++ *((const nomodify byte*) BGCOL)
[12] (byte) main::r#1 ← ++ (byte) main::r#2

@ -1,77 +1,58 @@
De-inlining cast (word)toD018::screen
De-inlining cast (word)toSpritePtr::sprite
Identified constant variable (byte*) DTV_BLITTER_ALU
Identified constant variable (byte*) dtvSetCpuBankSegment1::cpuBank
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) @5
Culled Empty Block (label) main::@2
Culled Empty Block (label) main::@15
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@16
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::@8
Culled Empty Block (label) main::@9
Culled Empty Block (label) main::@13
Culled Empty Block (label) main::@14
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@6
to:@1
(void()) main()
main: scope:[main] from @6
main: scope:[main] from @1
asm { sei }
*((const nomodify byte*) DTV_FEATURE) ← (const nomodify byte) DTV_FEATURE_ENABLE
*((const nomodify byte*) DTV_CONTROL) ← (const nomodify byte) DTV_HIGHCOLOR|(const nomodify byte) DTV_BORDER_OFF|(const nomodify byte) DTV_BADLINE_OFF
to:main::@1
main::@1: scope:[main] from main main::@12
if(true) goto main::@4
main::@1: scope:[main] from main main::@6
if(true) goto main::@2
to:main::@return
main::@4: scope:[main] from main::@1 main::@4
main::@2: scope:[main] from main::@1 main::@2
(bool~) main::$0 ← *((const nomodify byte*) RASTER) != (number) $40
if((bool~) main::$0) goto main::@4
to:main::@6
main::@6: scope:[main] from main::@4
if((bool~) main::$0) goto main::@2
to:main::@3
main::@3: scope:[main] from main::@2
*((const nomodify byte*) BGCOL) ← (number) 0
(byte) main::r#0 ← (byte) $31
to:main::@10
main::@10: scope:[main] from main::@10 main::@6
(byte) main::r#2 ← phi( main::@10/(byte) main::r#1 main::@6/(byte) main::r#0 )
to:main::@4
main::@4: scope:[main] from main::@3 main::@4
(byte) main::r#2 ← phi( main::@3/(byte) main::r#0 main::@4/(byte) main::r#1 )
asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
*((const nomodify byte*) BGCOL) ← ++ *((const nomodify byte*) BGCOL)
(byte) main::r#1 ← (byte) main::r#2 + rangenext($31,$ff)
(bool~) main::$2 ← (byte) main::r#1 != rangelast($31,$ff)
if((bool~) main::$2) goto main::@10
to:main::@11
main::@11: scope:[main] from main::@10
if((bool~) main::$2) goto main::@4
to:main::@5
main::@5: scope:[main] from main::@4
(byte) main::c#0 ← (byte) 0
to:main::@12
main::@12: scope:[main] from main::@11 main::@12
(byte) main::c#2 ← phi( main::@11/(byte) main::c#0 main::@12/(byte) main::c#1 )
to:main::@6
main::@6: scope:[main] from main::@5 main::@6
(byte) main::c#2 ← phi( main::@5/(byte) main::c#0 main::@6/(byte) main::c#1 )
*((const nomodify byte*) DTV_PALETTE + (byte) main::c#2) ← *((const byte*) main::palette + (byte) main::c#2)
*((const byte*) main::palette + (byte) main::c#2) ← ++ *((const byte*) main::palette + (byte) main::c#2)
(byte) main::c#1 ← (byte) main::c#2 + rangenext(0,$f)
(bool~) main::$4 ← (byte) main::c#1 != rangelast(0,$f)
if((bool~) main::$4) goto main::@12
if((bool~) main::$4) goto main::@6
to:main::@1
main::@return: scope:[main] from main::@1
return
to:@return
@6: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@7
@7: scope:[] from @6
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @7
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @6
(label) @7
(label) @1
(label) @2
(label) @begin
(label) @end
(const nomodify byte*) BGCOL = (byte*)(number) $d021
@ -88,10 +69,10 @@ SYMBOL TABLE SSA
(bool~) main::$2
(bool~) main::$4
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@return
(byte) main::c
@ -120,23 +101,23 @@ Successful SSA optimization PassNCastSimplification
Finalized unsigned number type (byte) $40
Finalized unsigned number type (byte) 0
Successful SSA optimization PassNFinalizeNumberTypeConversions
Simple Condition (bool~) main::$0 [5] if(*((const nomodify byte*) RASTER)!=(byte) $40) goto main::@4
Simple Condition (bool~) main::$2 [13] if((byte) main::r#1!=rangelast($31,$ff)) goto main::@10
Simple Condition (bool~) main::$4 [20] if((byte) main::c#1!=rangelast(0,$f)) goto main::@12
Simple Condition (bool~) main::$0 [5] if(*((const nomodify byte*) RASTER)!=(byte) $40) goto main::@2
Simple Condition (bool~) main::$2 [13] if((byte) main::r#1!=rangelast($31,$ff)) goto main::@4
Simple Condition (bool~) main::$4 [20] if((byte) main::c#1!=rangelast(0,$f)) goto main::@6
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte) main::r#0 = $31
Constant (const byte) main::c#0 = 0
Successful SSA optimization Pass2ConstantIdentification
if() condition always true - replacing block destination [3] if(true) goto main::@4
if() condition always true - replacing block destination [3] if(true) goto main::@2
Successful SSA optimization Pass2ConstantIfs
Resolved ranged next value [11] main::r#1 ← ++ main::r#2 to ++
Resolved ranged comparison value [13] if(main::r#1!=rangelast($31,$ff)) goto main::@10 to (number) 0
Resolved ranged comparison value [13] if(main::r#1!=rangelast($31,$ff)) goto main::@4 to (number) 0
Resolved ranged next value [18] main::c#1 ← ++ main::c#2 to ++
Resolved ranged comparison value [20] if(main::c#1!=rangelast(0,$f)) goto main::@12 to (number) $10
Resolved ranged comparison value [20] if(main::c#1!=rangelast(0,$f)) goto main::@6 to (number) $10
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Adding number conversion cast (unumber) 0 in if((byte) main::r#1!=(number) 0) goto main::@10
Adding number conversion cast (unumber) $10 in if((byte) main::c#1!=(number) $10) goto main::@12
Adding number conversion cast (unumber) 0 in if((byte) main::r#1!=(number) 0) goto main::@4
Adding number conversion cast (unumber) $10 in if((byte) main::c#1!=(number) $10) goto main::@6
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast 0
Simplifying constant integer cast $10
@ -149,14 +130,14 @@ Inlining constant with var siblings (const byte) main::c#0
Constant inlined main::r#0 = (byte) $31
Constant inlined main::c#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@17(between main::@10 and main::@10)
Added new block during phi lifting main::@18(between main::@12 and main::@12)
Added new block during phi lifting main::@7(between main::@4 and main::@4)
Added new block during phi lifting main::@8(between main::@6 and main::@6)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @6
Adding NOP phi() at start of @7
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of main::@11
Adding NOP phi() at start of main::@5
CALL GRAPH
Calls in [] to main:2
@ -164,16 +145,15 @@ Created 2 initial phi equivalence classes
Coalesced [22] main::c#3 ← main::c#1
Coalesced [23] main::r#3 ← main::r#1
Coalesced down to 2 phi equivalence classes
Culled Empty Block (label) @7
Culled Empty Block (label) @2
Culled Empty Block (label) main::@1
Culled Empty Block (label) main::@11
Culled Empty Block (label) main::@18
Culled Empty Block (label) main::@17
Renumbering block @6 to @1
Renumbering block main::@4 to main::@1
Renumbering block main::@6 to main::@2
Renumbering block main::@10 to main::@3
Renumbering block main::@12 to main::@4
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@8
Culled Empty Block (label) main::@7
Renumbering block main::@2 to main::@1
Renumbering block main::@3 to main::@2
Renumbering block main::@4 to main::@3
Renumbering block main::@6 to main::@4
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end
@ -202,7 +182,7 @@ main::@2: scope:[main] from main::@1
[8] *((const nomodify byte*) BGCOL) ← (byte) 0
to:main::@3
main::@3: scope:[main] from main::@2 main::@3
[9] (byte) main::r#2 ← phi( main::@3/(byte) main::r#1 main::@2/(byte) $31 )
[9] (byte) main::r#2 ← phi( main::@2/(byte) $31 main::@3/(byte) main::r#1 )
asm { nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop nop }
[11] *((const nomodify byte*) BGCOL) ← ++ *((const nomodify byte*) BGCOL)
[12] (byte) main::r#1 ← ++ (byte) main::r#2

@ -21,9 +21,9 @@ main::@3: scope:[main] from main
[10] call gfx_init
to:main::@1
main::@1: scope:[main] from main::@3 main::@4
[11] (byte) form_field_idx#1 ← phi( main::@4/(byte) form_field_idx#18 main::@3/(byte) 0 )
[11] (byte) keyboard_events_size#27 ← phi( main::@4/(byte) keyboard_events_size#24 main::@3/(byte) 0 )
[11] (signed byte) form_cursor_count#1 ← phi( main::@4/(signed byte) form_cursor_count#16 main::@3/(const nomodify signed byte) FORM_CURSOR_BLINK/(signed byte) 2 )
[11] (byte) form_field_idx#1 ← phi( main::@3/(byte) 0 main::@4/(byte) form_field_idx#18 )
[11] (byte) keyboard_events_size#27 ← phi( main::@3/(byte) 0 main::@4/(byte) keyboard_events_size#24 )
[11] (signed byte) form_cursor_count#1 ← phi( main::@3/(const nomodify signed byte) FORM_CURSOR_BLINK/(signed byte) 2 main::@4/(signed byte) form_cursor_count#16 )
to:main::@2
main::@2: scope:[main] from main::@1
[12] phi()
@ -373,7 +373,7 @@ keyboard_event_scan::@11: scope:[keyboard_event_scan] from keyboard_event_scan:
(byte()) keyboard_event_pressed((byte) keyboard_event_pressed::keycode)
keyboard_event_pressed: scope:[keyboard_event_pressed] from keyboard_event_scan::@1 keyboard_event_scan::@17 keyboard_event_scan::@2 keyboard_event_scan::@3
[211] (byte) keyboard_event_pressed::keycode#4 ← phi( keyboard_event_scan::@1/(const nomodify byte) KEY_RSHIFT keyboard_event_scan::@2/(const nomodify byte) KEY_CTRL keyboard_event_scan::@17/(const nomodify byte) KEY_LSHIFT keyboard_event_scan::@3/(const nomodify byte) KEY_COMMODORE )
[211] (byte) keyboard_event_pressed::keycode#4 ← phi( keyboard_event_scan::@1/(const nomodify byte) KEY_RSHIFT keyboard_event_scan::@17/(const nomodify byte) KEY_LSHIFT keyboard_event_scan::@2/(const nomodify byte) KEY_CTRL keyboard_event_scan::@3/(const nomodify byte) KEY_COMMODORE )
[212] (byte~) keyboard_event_pressed::$0 ← (byte) keyboard_event_pressed::keycode#4 >> (byte) 3
[213] (byte) keyboard_event_pressed::row_bits#0 ← *((const byte*) keyboard_scan_values + (byte~) keyboard_event_pressed::$0)
[214] (byte~) keyboard_event_pressed::$1 ← (byte) keyboard_event_pressed::keycode#4 & (byte) 7
@ -480,7 +480,7 @@ get_plane::@1: scope:[get_plane] from get_plane::@14
[249] phi()
to:get_plane::@return
get_plane::@return: scope:[get_plane] from get_plane get_plane::@1 get_plane::@10 get_plane::@11 get_plane::@12 get_plane::@13 get_plane::@14 get_plane::@2 get_plane::@3 get_plane::@4 get_plane::@5 get_plane::@6 get_plane::@7 get_plane::@8 get_plane::@9
[250] (dword) get_plane::return#14 ← phi( get_plane/(dword)(const nomodify byte*) VIC_SCREEN0 get_plane::@10/(const nomodify dword) PLANE_HORISONTAL2 get_plane::@11/(const nomodify dword) PLANE_VERTICAL2 get_plane::@12/(const nomodify dword) PLANE_CHARSET8 get_plane::@13/(const nomodify dword) PLANE_BLANK get_plane::@2/(dword)(const nomodify byte*) VIC_SCREEN1 get_plane::@1/(dword)(const nomodify byte*) VIC_SCREEN0 get_plane::@3/(dword)(const nomodify byte*) VIC_SCREEN2 get_plane::@4/(dword)(const nomodify byte*) VIC_SCREEN3 get_plane::@14/(const nomodify dword) PLANE_FULL get_plane::@5/(dword)(const nomodify byte*) VIC_BITMAP get_plane::@6/(dword)(const nomodify byte*) VIC_CHARSET_ROM get_plane::@7/(const nomodify dword) PLANE_8BPP_CHUNKY get_plane::@8/(const nomodify dword) PLANE_HORISONTAL get_plane::@9/(const nomodify dword) PLANE_VERTICAL )
[250] (dword) get_plane::return#14 ← phi( get_plane/(dword)(const nomodify byte*) VIC_SCREEN0 get_plane::@10/(const nomodify dword) PLANE_HORISONTAL2 get_plane::@11/(const nomodify dword) PLANE_VERTICAL2 get_plane::@12/(const nomodify dword) PLANE_CHARSET8 get_plane::@13/(const nomodify dword) PLANE_BLANK get_plane::@1/(dword)(const nomodify byte*) VIC_SCREEN0 get_plane::@2/(dword)(const nomodify byte*) VIC_SCREEN1 get_plane::@14/(const nomodify dword) PLANE_FULL get_plane::@3/(dword)(const nomodify byte*) VIC_SCREEN2 get_plane::@4/(dword)(const nomodify byte*) VIC_SCREEN3 get_plane::@5/(dword)(const nomodify byte*) VIC_BITMAP get_plane::@6/(dword)(const nomodify byte*) VIC_CHARSET_ROM get_plane::@7/(const nomodify dword) PLANE_8BPP_CHUNKY get_plane::@8/(const nomodify dword) PLANE_HORISONTAL get_plane::@9/(const nomodify dword) PLANE_VERTICAL )
[251] return
to:@return
@ -547,10 +547,10 @@ form_mode::@2: scope:[form_mode] from form_mode::@1
[288] (byte) form_mode::preset_current#0 ← *((const byte*) form_fields_val)
to:form_mode::@3
form_mode::@3: scope:[form_mode] from form_mode::@19 form_mode::@2 form_mode::@6
[289] (byte) form_mode::preset_current#6 ← phi( form_mode::@6/(byte) form_mode::preset_current#6 form_mode::@2/(byte) form_mode::preset_current#0 form_mode::@19/(byte) form_mode::preset_current#1 )
[289] (byte) form_field_idx#28 ← phi( form_mode::@6/(byte) form_field_idx#18 form_mode::@2/(byte) form_field_idx#1 form_mode::@19/(byte) form_field_idx#18 )
[289] (byte) keyboard_events_size#47 ← phi( form_mode::@6/(byte) keyboard_events_size#24 form_mode::@2/(byte) keyboard_events_size#27 form_mode::@19/(byte) keyboard_events_size#24 )
[289] (signed byte) form_cursor_count#21 ← phi( form_mode::@6/(signed byte) form_cursor_count#16 form_mode::@2/(signed byte) form_cursor_count#1 form_mode::@19/(signed byte) form_cursor_count#16 )
[289] (byte) form_mode::preset_current#6 ← phi( form_mode::@2/(byte) form_mode::preset_current#0 form_mode::@19/(byte) form_mode::preset_current#1 form_mode::@6/(byte) form_mode::preset_current#6 )
[289] (byte) form_field_idx#28 ← phi( form_mode::@2/(byte) form_field_idx#1 form_mode::@19/(byte) form_field_idx#18 form_mode::@6/(byte) form_field_idx#18 )
[289] (byte) keyboard_events_size#47 ← phi( form_mode::@2/(byte) keyboard_events_size#27 form_mode::@19/(byte) keyboard_events_size#24 form_mode::@6/(byte) keyboard_events_size#24 )
[289] (signed byte) form_cursor_count#21 ← phi( form_mode::@2/(signed byte) form_cursor_count#1 form_mode::@19/(signed byte) form_cursor_count#16 form_mode::@6/(signed byte) form_cursor_count#16 )
to:form_mode::@4
form_mode::@4: scope:[form_mode] from form_mode::@3 form_mode::@4
[290] if(*((const nomodify byte*) RASTER)!=(byte) $ff) goto form_mode::@4
@ -622,7 +622,7 @@ render_preset_name::@1: scope:[render_preset_name] from render_preset_name::@12
[316] phi()
to:render_preset_name::@2
render_preset_name::@2: scope:[render_preset_name] from render_preset_name render_preset_name::@1 render_preset_name::@10 render_preset_name::@11 render_preset_name::@12 render_preset_name::@3 render_preset_name::@4 render_preset_name::@5 render_preset_name::@6 render_preset_name::@7 render_preset_name::@8 render_preset_name::@9
[317] (byte*) render_preset_name::name#13 ← phi( render_preset_name/(const byte*) render_preset_name::name#1 render_preset_name::@11/(const byte*) render_preset_name::name#10 render_preset_name::@1/(const byte*) render_preset_name::name#11 render_preset_name::@3/(const byte*) render_preset_name::name#2 render_preset_name::@4/(const byte*) render_preset_name::name#3 render_preset_name::@12/(const byte*) render_preset_name::name#1 render_preset_name::@5/(const byte*) render_preset_name::name#4 render_preset_name::@6/(const byte*) render_preset_name::name#5 render_preset_name::@7/(const byte*) render_preset_name::name#6 render_preset_name::@8/(const byte*) render_preset_name::name#7 render_preset_name::@9/(const byte*) render_preset_name::name#8 render_preset_name::@10/(const byte*) render_preset_name::name#9 )
[317] (byte*) render_preset_name::name#13 ← phi( render_preset_name/(const byte*) render_preset_name::name#1 render_preset_name::@11/(const byte*) render_preset_name::name#10 render_preset_name::@1/(const byte*) render_preset_name::name#11 render_preset_name::@3/(const byte*) render_preset_name::name#2 render_preset_name::@12/(const byte*) render_preset_name::name#1 render_preset_name::@4/(const byte*) render_preset_name::name#3 render_preset_name::@5/(const byte*) render_preset_name::name#4 render_preset_name::@6/(const byte*) render_preset_name::name#5 render_preset_name::@7/(const byte*) render_preset_name::name#6 render_preset_name::@8/(const byte*) render_preset_name::name#7 render_preset_name::@9/(const byte*) render_preset_name::name#8 render_preset_name::@10/(const byte*) render_preset_name::name#9 )
[318] (byte*) print_str_at::str#1 ← (byte*) render_preset_name::name#13
[319] call print_str_at
to:render_preset_name::@return
@ -718,7 +718,7 @@ apply_preset::@1: scope:[apply_preset] from apply_preset::@12
[353] phi()
to:apply_preset::@2
apply_preset::@2: scope:[apply_preset] from apply_preset apply_preset::@1 apply_preset::@10 apply_preset::@11 apply_preset::@12 apply_preset::@3 apply_preset::@4 apply_preset::@5 apply_preset::@6 apply_preset::@7 apply_preset::@8 apply_preset::@9
[354] (byte*) apply_preset::preset#15 ← phi( apply_preset/(const byte*) preset_stdchar apply_preset::@11/(const byte*) preset_sixsfred2 apply_preset::@1/(const byte*) preset_8bpppixelcell apply_preset::@3/(const byte*) preset_ecmchar apply_preset::@4/(const byte*) preset_stdbm apply_preset::@12/(const byte*) preset_stdchar apply_preset::@5/(const byte*) preset_mcbm apply_preset::@6/(const byte*) preset_hi_stdchar apply_preset::@7/(const byte*) preset_hi_ecmchar apply_preset::@8/(const byte*) preset_twoplane apply_preset::@9/(const byte*) preset_chunky apply_preset::@10/(const byte*) preset_sixsfred )
[354] (byte*) apply_preset::preset#15 ← phi( apply_preset/(const byte*) preset_stdchar apply_preset::@11/(const byte*) preset_sixsfred2 apply_preset::@1/(const byte*) preset_8bpppixelcell apply_preset::@3/(const byte*) preset_ecmchar apply_preset::@12/(const byte*) preset_stdchar apply_preset::@4/(const byte*) preset_stdbm apply_preset::@5/(const byte*) preset_mcbm apply_preset::@6/(const byte*) preset_hi_stdchar apply_preset::@7/(const byte*) preset_hi_ecmchar apply_preset::@8/(const byte*) preset_twoplane apply_preset::@9/(const byte*) preset_chunky apply_preset::@10/(const byte*) preset_sixsfred )
to:apply_preset::@13
apply_preset::@13: scope:[apply_preset] from apply_preset::@14 apply_preset::@2
[355] (byte) apply_preset::i#2 ← phi( apply_preset::@2/(byte) 0 apply_preset::@14/(byte) apply_preset::i#1 )
@ -852,7 +852,7 @@ form_set_screen::@return: scope:[form_set_screen] from form_set_screen::@1
(void()) print_str_lines((byte*) print_str_lines::str)
print_str_lines: scope:[print_str_lines] from form_mode::@12 form_mode::@9
[415] (byte*) print_str_lines::str#5 ← phi( form_mode::@9/(const byte*) FORM_COLS form_mode::@12/(const byte*) FORM_TEXT )
[415] (byte*) print_str_lines::str#5 ← phi( form_mode::@12/(const byte*) FORM_TEXT form_mode::@9/(const byte*) FORM_COLS )
[416] (byte*) print_char_cursor#72 ← (byte*) print_set_screen::screen#2
to:print_str_lines::@1
print_str_lines::@1: scope:[print_str_lines] from print_str_lines print_str_lines::@6
@ -876,7 +876,7 @@ print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2
[425] call print_char
to:print_str_lines::@3
print_str_lines::@3: scope:[print_str_lines] from print_str_lines::@2 print_str_lines::@4
[426] (byte*) print_char_cursor#42 ← phi( print_str_lines::@4/(byte*) print_char_cursor#28 print_str_lines::@2/(byte*) print_char_cursor#41 )
[426] (byte*) print_char_cursor#42 ← phi( print_str_lines::@2/(byte*) print_char_cursor#41 print_str_lines::@4/(byte*) print_char_cursor#28 )
[427] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2
to:print_str_lines::@5
print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3
@ -1416,11 +1416,11 @@ bitmap_line::@13: scope:[bitmap_line] from bitmap_line::@11
(void()) bitmap_line_xdyi((byte) bitmap_line_xdyi::x , (byte) bitmap_line_xdyi::y , (byte) bitmap_line_xdyi::x1 , (byte) bitmap_line_xdyi::xd , (byte) bitmap_line_xdyi::yd)
bitmap_line_xdyi: scope:[bitmap_line_xdyi] from bitmap_line::@13 bitmap_line::@8
[683] (byte) bitmap_line_xdyi::x1#6 ← phi( bitmap_line::@8/(byte) bitmap_line_xdyi::x1#0 bitmap_line::@13/(byte) bitmap_line_xdyi::x1#1 )
[683] (byte) bitmap_line_xdyi::xd#5 ← phi( bitmap_line::@8/(byte) bitmap_line_xdyi::xd#0 bitmap_line::@13/(byte) bitmap_line_xdyi::xd#1 )
[683] (byte) bitmap_line_xdyi::y#5 ← phi( bitmap_line::@8/(byte) bitmap_line_xdyi::y#0 bitmap_line::@13/(byte) bitmap_line_xdyi::y#1 )
[683] (byte) bitmap_line_xdyi::x#6 ← phi( bitmap_line::@8/(byte) bitmap_line_xdyi::x#0 bitmap_line::@13/(byte) bitmap_line_xdyi::x#1 )
[683] (byte) bitmap_line_xdyi::yd#2 ← phi( bitmap_line::@8/(byte) bitmap_line_xdyi::yd#0 bitmap_line::@13/(byte) bitmap_line_xdyi::yd#1 )
[683] (byte) bitmap_line_xdyi::x1#6 ← phi( bitmap_line::@13/(byte) bitmap_line_xdyi::x1#1 bitmap_line::@8/(byte) bitmap_line_xdyi::x1#0 )
[683] (byte) bitmap_line_xdyi::xd#5 ← phi( bitmap_line::@13/(byte) bitmap_line_xdyi::xd#1 bitmap_line::@8/(byte) bitmap_line_xdyi::xd#0 )
[683] (byte) bitmap_line_xdyi::y#5 ← phi( bitmap_line::@13/(byte) bitmap_line_xdyi::y#1 bitmap_line::@8/(byte) bitmap_line_xdyi::y#0 )
[683] (byte) bitmap_line_xdyi::x#6 ← phi( bitmap_line::@13/(byte) bitmap_line_xdyi::x#1 bitmap_line::@8/(byte) bitmap_line_xdyi::x#0 )
[683] (byte) bitmap_line_xdyi::yd#2 ← phi( bitmap_line::@13/(byte) bitmap_line_xdyi::yd#1 bitmap_line::@8/(byte) bitmap_line_xdyi::yd#0 )
[684] (byte) bitmap_line_xdyi::e#0 ← (byte) bitmap_line_xdyi::yd#2 >> (byte) 1
to:bitmap_line_xdyi::@1
bitmap_line_xdyi::@1: scope:[bitmap_line_xdyi] from bitmap_line_xdyi bitmap_line_xdyi::@2
@ -1502,11 +1502,11 @@ bitmap_line_ydxi::@return: scope:[bitmap_line_ydxi] from bitmap_line_ydxi::@2
(void()) bitmap_line_xdyd((byte) bitmap_line_xdyd::x , (byte) bitmap_line_xdyd::y , (byte) bitmap_line_xdyd::x1 , (byte) bitmap_line_xdyd::xd , (byte) bitmap_line_xdyd::yd)
bitmap_line_xdyd: scope:[bitmap_line_xdyd] from bitmap_line::@12 bitmap_line::@9
[720] (byte) bitmap_line_xdyd::x1#6 ← phi( bitmap_line::@9/(byte) bitmap_line_xdyd::x1#0 bitmap_line::@12/(byte) bitmap_line_xdyd::x1#1 )
[720] (byte) bitmap_line_xdyd::xd#5 ← phi( bitmap_line::@9/(byte) bitmap_line_xdyd::xd#0 bitmap_line::@12/(byte) bitmap_line_xdyd::xd#1 )
[720] (byte) bitmap_line_xdyd::y#5 ← phi( bitmap_line::@9/(byte) bitmap_line_xdyd::y#0 bitmap_line::@12/(byte) bitmap_line_xdyd::y#1 )
[720] (byte) bitmap_line_xdyd::x#6 ← phi( bitmap_line::@9/(byte) bitmap_line_xdyd::x#0 bitmap_line::@12/(byte) bitmap_line_xdyd::x#1 )
[720] (byte) bitmap_line_xdyd::yd#2 ← phi( bitmap_line::@9/(byte) bitmap_line_xdyd::yd#0 bitmap_line::@12/(byte) bitmap_line_xdyd::yd#1 )
[720] (byte) bitmap_line_xdyd::x1#6 ← phi( bitmap_line::@12/(byte) bitmap_line_xdyd::x1#1 bitmap_line::@9/(byte) bitmap_line_xdyd::x1#0 )
[720] (byte) bitmap_line_xdyd::xd#5 ← phi( bitmap_line::@12/(byte) bitmap_line_xdyd::xd#1 bitmap_line::@9/(byte) bitmap_line_xdyd::xd#0 )
[720] (byte) bitmap_line_xdyd::y#5 ← phi( bitmap_line::@12/(byte) bitmap_line_xdyd::y#1 bitmap_line::@9/(byte) bitmap_line_xdyd::y#0 )
[720] (byte) bitmap_line_xdyd::x#6 ← phi( bitmap_line::@12/(byte) bitmap_line_xdyd::x#1 bitmap_line::@9/(byte) bitmap_line_xdyd::x#0 )
[720] (byte) bitmap_line_xdyd::yd#2 ← phi( bitmap_line::@12/(byte) bitmap_line_xdyd::yd#1 bitmap_line::@9/(byte) bitmap_line_xdyd::yd#0 )
[721] (byte) bitmap_line_xdyd::e#0 ← (byte) bitmap_line_xdyd::yd#2 >> (byte) 1
to:bitmap_line_xdyd::@1
bitmap_line_xdyd::@1: scope:[bitmap_line_xdyd] from bitmap_line_xdyd bitmap_line_xdyd::@2

File diff suppressed because one or more lines are too long

@ -1272,23 +1272,23 @@ reg byte x [ gfx_init_plane_horisontal::ax#2 gfx_init_plane_horisontal::ax#1 ]
reg byte x [ gfx_init_plane_charset8::cp#2 gfx_init_plane_charset8::cp#1 ]
reg byte a [ gfx_init_plane_charset8::c#2 gfx_init_plane_charset8::c#3 ]
reg byte x [ gfx_init_plane_8bppchunky::gfxbCpuBank#4 gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::gfxbCpuBank#8 gfx_init_plane_8bppchunky::gfxbCpuBank#2 ]
reg byte x [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ]
reg byte x [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ]
reg byte y [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ]
reg byte x [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ]
reg byte x [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ]
zp[1]:13 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 gfx_mode::cy#4 gfx_mode::cy#1 ]
reg byte x [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ]
zp[1]:13 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#2 gfx_init_plane_horisontal::ay#4 gfx_init_plane_horisontal::ay#1 gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::by#1 form_mode::preset_current#6 form_mode::preset_current#0 form_mode::preset_current#1 gfx_mode::cy#4 gfx_mode::cy#1 ]
reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
reg byte x [ bitmap_init::y#2 bitmap_init::y#1 ]
reg byte x [ gfx_init_charset::l#2 gfx_init_charset::l#1 ]
zp[1]:14 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 gfx_init_plane_fill::fill#6 keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
zp[1]:14 [ gfx_init_screen4::cy#4 gfx_init_screen4::cy#1 bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#1 bitmap_line_xdyd::yd#0 bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 gfx_init_plane_8bppchunky::y#6 gfx_init_plane_8bppchunky::y#1 gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::ch#1 gfx_init_plane_fill::fill#6 keyboard_event_scan::row#2 keyboard_event_scan::row#1 ]
reg byte x [ gfx_init_screen4::cx#2 gfx_init_screen4::cx#1 ]
zp[1]:15 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 keyboard_event_pressed::keycode#4 ]
zp[1]:15 [ gfx_init_screen3::cy#4 gfx_init_screen3::cy#1 bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#2 bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#1 bitmap_line_xdyi::yd#0 gfx_init_plane_charset8::bits#2 gfx_init_plane_charset8::bits#0 gfx_init_plane_charset8::bits#1 gfx_init_plane_horisontal2::ay#4 gfx_init_plane_horisontal2::ay#1 keyboard_event_pressed::keycode#4 ]
reg byte x [ gfx_init_screen3::cx#2 gfx_init_screen3::cx#1 ]
reg byte x [ gfx_init_screen2::cx#2 gfx_init_screen2::cx#1 ]
zp[2]:16 [ gfx_init_screen2::ch#2 gfx_init_screen2::ch#3 gfx_init_screen2::ch#1 gfx_init_screen3::ch#2 gfx_init_screen3::ch#3 gfx_init_screen3::ch#1 gfx_init_screen4::ch#2 gfx_init_screen4::ch#3 gfx_init_screen4::ch#1 gfx_init_charset::charset#2 gfx_init_charset::charset#3 gfx_init_charset::charset#1 bitmap_clear::bitmap#2 bitmap_clear::bitmap#3 bitmap_clear::bitmap#5 bitmap_clear::bitmap#1 bitmap_clear::bitmap#0 gfx_init_plane_8bppchunky::gfxb#4 gfx_init_plane_8bppchunky::gfxb#3 gfx_init_plane_8bppchunky::gfxb#5 gfx_init_plane_8bppchunky::gfxb#1 gfx_init_plane_charset8::chargen#2 gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::chargen#1 gfx_init_plane_horisontal::gfxa#3 gfx_init_plane_horisontal::gfxa#6 gfx_init_plane_horisontal::gfxa#7 gfx_init_plane_horisontal::gfxa#1 gfx_init_plane_horisontal::gfxa#2 gfx_init_plane_vertical::gfxb#2 gfx_init_plane_vertical::gfxb#3 gfx_init_plane_vertical::gfxb#1 gfx_init_plane_horisontal2::gfxa#2 gfx_init_plane_horisontal2::gfxa#3 gfx_init_plane_horisontal2::gfxa#1 gfx_init_plane_fill::gfxb#2 gfx_init_plane_fill::gfxb#3 gfx_init_plane_fill::gfxb#1 gfx_init_plane_fill::gfxb#6 gfx_init_plane_fill::gfxb#0 gfx_init_plane_fill::$4 gfx_init_plane_fill::$5 memset::dst#2 memset::dst#4 memset::dst#1 memset::str#0 print_str_lines::str#4 print_str_lines::str#3 print_str_lines::str#5 print_str_lines::str#0 form_set_screen::line#2 form_set_screen::line#1 render_preset_name::name#13 print_str_at::str#2 print_str_at::str#1 print_str_at::str#0 gfx_mode::vic_colors#2 gfx_mode::vic_colors#3 gfx_mode::vic_colors#1 gfx_mode::vic_colors#0 get_vic_screen::return#11 get_vic_screen::return#5 get_vic_screen::return#10 gfx_mode::$82 gfx_mode::$47 gfx_mode::$48 ]
zp[1]:18 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 bitmap_line::xd#2 bitmap_line::xd#1 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
zp[1]:18 [ gfx_init_screen1::cy#4 gfx_init_screen1::cy#1 gfx_init_screen2::cy#4 gfx_init_screen2::cy#1 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#1 bitmap_line_xdyi::xd#0 bitmap_line::xd#2 bitmap_line::xd#1 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#1 bitmap_line_xdyd::xd#0 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 gfx_init_plane_charset8::col#2 gfx_init_plane_charset8::col#5 gfx_init_plane_charset8::col#6 gfx_init_plane_charset8::col#1 ]
reg byte x [ gfx_init_screen1::cx#2 gfx_init_screen1::cx#1 ]
reg byte x [ gfx_init_screen0::cx#2 gfx_init_screen0::cx#1 ]
reg byte a [ gfx_mode::$18 ]
@ -1347,7 +1347,7 @@ reg byte a [ form_mode::$11 ]
reg byte a [ apply_preset::idx#0 ]
reg byte y [ form_field_ptr::y#0 ]
zp[2]:20 [ form_field_ptr::line#0 gfx_mode::$24 gfx_init_screen0::ch#2 gfx_init_screen0::ch#3 gfx_init_screen0::ch#1 gfx_init_screen1::ch#2 gfx_init_screen1::ch#3 gfx_init_screen1::ch#1 gfx_init_charset::chargen#2 gfx_init_charset::chargen#3 gfx_init_charset::chargen#1 bitmap_init::yoffs#2 bitmap_init::yoffs#4 bitmap_init::yoffs#1 gfx_init_plane_8bppchunky::x#2 gfx_init_plane_8bppchunky::x#1 gfx_init_plane_charset8::gfxa#2 gfx_init_plane_charset8::gfxa#5 gfx_init_plane_charset8::gfxa#6 gfx_init_plane_charset8::gfxa#1 ]
zp[1]:22 [ form_field_ptr::x#0 keyboard_event_scan::row_scan#0 bitmap_clear::y#4 bitmap_clear::y#1 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 bitmap_line::x0#0 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ]
zp[1]:22 [ form_field_ptr::x#0 keyboard_event_scan::row_scan#0 bitmap_clear::y#4 bitmap_clear::y#1 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#1 bitmap_line_xdyi::x1#0 bitmap_line::x0#0 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#1 bitmap_line_xdyd::x1#0 bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 ]
reg byte a [ form_control::$12 ]
reg byte a [ keyboard_event_get::return#4 ]
reg byte a [ form_control::key_event#0 ]

@ -404,7 +404,7 @@ mode_ctrl::@18: scope:[mode_ctrl] from mode_ctrl::@11
(byte()) keyboard_key_pressed((byte) keyboard_key_pressed::key)
keyboard_key_pressed: scope:[keyboard_key_pressed] from menu::@10 menu::@11 menu::@12 menu::@13 menu::@14 menu::@15 menu::@16 menu::@5 menu::@6 menu::@7 menu::@8 menu::@9 mode_ctrl::@10 mode_ctrl::@3 mode_ctrl::@4 mode_ctrl::@5 mode_ctrl::@6 mode_ctrl::@7 mode_ctrl::@8 mode_ctrl::@9
[211] (byte) keyboard_key_pressed::key#20 ← phi( menu::@5/(const nomodify byte) KEY_1 menu::@6/(const nomodify byte) KEY_2 menu::@7/(const nomodify byte) KEY_3 menu::@8/(const nomodify byte) KEY_4 menu::@9/(const nomodify byte) KEY_6 menu::@10/(const nomodify byte) KEY_7 menu::@11/(const nomodify byte) KEY_8 menu::@12/(const nomodify byte) KEY_A menu::@13/(const nomodify byte) KEY_B menu::@14/(const nomodify byte) KEY_C menu::@15/(const nomodify byte) KEY_D menu::@16/(const nomodify byte) KEY_E mode_ctrl::@4/(const nomodify byte) KEY_L mode_ctrl::@5/(const nomodify byte) KEY_H mode_ctrl::@6/(const nomodify byte) KEY_O mode_ctrl::@7/(const nomodify byte) KEY_B mode_ctrl::@8/(const nomodify byte) KEY_U mode_ctrl::@9/(const nomodify byte) KEY_C mode_ctrl::@10/(const nomodify byte) KEY_0 mode_ctrl::@3/(const nomodify byte) KEY_SPACE )
[211] (byte) keyboard_key_pressed::key#20 ← phi( menu::@8/(const nomodify byte) KEY_4 menu::@9/(const nomodify byte) KEY_6 menu::@10/(const nomodify byte) KEY_7 menu::@11/(const nomodify byte) KEY_8 menu::@12/(const nomodify byte) KEY_A menu::@13/(const nomodify byte) KEY_B menu::@14/(const nomodify byte) KEY_C menu::@15/(const nomodify byte) KEY_D menu::@16/(const nomodify byte) KEY_E menu::@5/(const nomodify byte) KEY_1 menu::@6/(const nomodify byte) KEY_2 menu::@7/(const nomodify byte) KEY_3 mode_ctrl::@10/(const nomodify byte) KEY_0 mode_ctrl::@3/(const nomodify byte) KEY_SPACE mode_ctrl::@4/(const nomodify byte) KEY_L mode_ctrl::@5/(const nomodify byte) KEY_H mode_ctrl::@6/(const nomodify byte) KEY_O mode_ctrl::@7/(const nomodify byte) KEY_B mode_ctrl::@8/(const nomodify byte) KEY_U mode_ctrl::@9/(const nomodify byte) KEY_C )
[212] (byte) keyboard_key_pressed::colidx#0 ← (byte) keyboard_key_pressed::key#20 & (byte) 7
[213] (byte) keyboard_key_pressed::rowidx#0 ← (byte) keyboard_key_pressed::key#20 >> (byte) 3
[214] (byte) keyboard_matrix_read::rowid#0 ← (byte) keyboard_key_pressed::rowidx#0
@ -1154,11 +1154,11 @@ bitmap_line::@13: scope:[bitmap_line] from bitmap_line::@11
(void()) bitmap_line_xdyi((byte) bitmap_line_xdyi::x , (byte) bitmap_line_xdyi::y , (byte) bitmap_line_xdyi::x1 , (byte) bitmap_line_xdyi::xd , (byte) bitmap_line_xdyi::yd)
bitmap_line_xdyi: scope:[bitmap_line_xdyi] from bitmap_line::@13 bitmap_line::@8
[654] (byte) bitmap_line_xdyi::x1#6 ← phi( bitmap_line::@8/(byte) bitmap_line_xdyi::x1#0 bitmap_line::@13/(byte) bitmap_line_xdyi::x1#1 )
[654] (byte) bitmap_line_xdyi::xd#5 ← phi( bitmap_line::@8/(byte) bitmap_line_xdyi::xd#0 bitmap_line::@13/(byte) bitmap_line_xdyi::xd#1 )
[654] (byte) bitmap_line_xdyi::y#5 ← phi( bitmap_line::@8/(byte) bitmap_line_xdyi::y#0 bitmap_line::@13/(byte) bitmap_line_xdyi::y#1 )
[654] (byte) bitmap_line_xdyi::x#6 ← phi( bitmap_line::@8/(byte) bitmap_line_xdyi::x#0 bitmap_line::@13/(byte) bitmap_line_xdyi::x#1 )
[654] (byte) bitmap_line_xdyi::yd#2 ← phi( bitmap_line::@8/(byte) bitmap_line_xdyi::yd#0 bitmap_line::@13/(byte) bitmap_line_xdyi::yd#1 )
[654] (byte) bitmap_line_xdyi::x1#6 ← phi( bitmap_line::@13/(byte) bitmap_line_xdyi::x1#1 bitmap_line::@8/(byte) bitmap_line_xdyi::x1#0 )
[654] (byte) bitmap_line_xdyi::xd#5 ← phi( bitmap_line::@13/(byte) bitmap_line_xdyi::xd#1 bitmap_line::@8/(byte) bitmap_line_xdyi::xd#0 )
[654] (byte) bitmap_line_xdyi::y#5 ← phi( bitmap_line::@13/(byte) bitmap_line_xdyi::y#1 bitmap_line::@8/(byte) bitmap_line_xdyi::y#0 )
[654] (byte) bitmap_line_xdyi::x#6 ← phi( bitmap_line::@13/(byte) bitmap_line_xdyi::x#1 bitmap_line::@8/(byte) bitmap_line_xdyi::x#0 )
[654] (byte) bitmap_line_xdyi::yd#2 ← phi( bitmap_line::@13/(byte) bitmap_line_xdyi::yd#1 bitmap_line::@8/(byte) bitmap_line_xdyi::yd#0 )
[655] (byte) bitmap_line_xdyi::e#0 ← (byte) bitmap_line_xdyi::yd#2 >> (byte) 1
to:bitmap_line_xdyi::@1
bitmap_line_xdyi::@1: scope:[bitmap_line_xdyi] from bitmap_line_xdyi bitmap_line_xdyi::@2
@ -1240,11 +1240,11 @@ bitmap_line_ydxi::@return: scope:[bitmap_line_ydxi] from bitmap_line_ydxi::@2
(void()) bitmap_line_xdyd((byte) bitmap_line_xdyd::x , (byte) bitmap_line_xdyd::y , (byte) bitmap_line_xdyd::x1 , (byte) bitmap_line_xdyd::xd , (byte) bitmap_line_xdyd::yd)
bitmap_line_xdyd: scope:[bitmap_line_xdyd] from bitmap_line::@12 bitmap_line::@9
[691] (byte) bitmap_line_xdyd::x1#6 ← phi( bitmap_line::@9/(byte) bitmap_line_xdyd::x1#0 bitmap_line::@12/(byte) bitmap_line_xdyd::x1#1 )
[691] (byte) bitmap_line_xdyd::xd#5 ← phi( bitmap_line::@9/(byte) bitmap_line_xdyd::xd#0 bitmap_line::@12/(byte) bitmap_line_xdyd::xd#1 )
[691] (byte) bitmap_line_xdyd::y#5 ← phi( bitmap_line::@9/(byte) bitmap_line_xdyd::y#0 bitmap_line::@12/(byte) bitmap_line_xdyd::y#1 )
[691] (byte) bitmap_line_xdyd::x#6 ← phi( bitmap_line::@9/(byte) bitmap_line_xdyd::x#0 bitmap_line::@12/(byte) bitmap_line_xdyd::x#1 )
[691] (byte) bitmap_line_xdyd::yd#2 ← phi( bitmap_line::@9/(byte) bitmap_line_xdyd::yd#0 bitmap_line::@12/(byte) bitmap_line_xdyd::yd#1 )
[691] (byte) bitmap_line_xdyd::x1#6 ← phi( bitmap_line::@12/(byte) bitmap_line_xdyd::x1#1 bitmap_line::@9/(byte) bitmap_line_xdyd::x1#0 )
[691] (byte) bitmap_line_xdyd::xd#5 ← phi( bitmap_line::@12/(byte) bitmap_line_xdyd::xd#1 bitmap_line::@9/(byte) bitmap_line_xdyd::xd#0 )
[691] (byte) bitmap_line_xdyd::y#5 ← phi( bitmap_line::@12/(byte) bitmap_line_xdyd::y#1 bitmap_line::@9/(byte) bitmap_line_xdyd::y#0 )
[691] (byte) bitmap_line_xdyd::x#6 ← phi( bitmap_line::@12/(byte) bitmap_line_xdyd::x#1 bitmap_line::@9/(byte) bitmap_line_xdyd::x#0 )
[691] (byte) bitmap_line_xdyd::yd#2 ← phi( bitmap_line::@12/(byte) bitmap_line_xdyd::yd#1 bitmap_line::@9/(byte) bitmap_line_xdyd::yd#0 )
[692] (byte) bitmap_line_xdyd::e#0 ← (byte) bitmap_line_xdyd::yd#2 >> (byte) 1
to:bitmap_line_xdyd::@1
bitmap_line_xdyd::@1: scope:[bitmap_line_xdyd] from bitmap_line_xdyd bitmap_line_xdyd::@2
@ -1578,7 +1578,7 @@ print_str_lines::@4: scope:[print_str_lines] from print_str_lines::@2
[873] call print_char
to:print_str_lines::@3
print_str_lines::@3: scope:[print_str_lines] from print_str_lines::@2 print_str_lines::@4
[874] (byte*) print_char_cursor#36 ← phi( print_str_lines::@4/(byte*) print_char_cursor#25 print_str_lines::@2/(byte*) print_char_cursor#35 )
[874] (byte*) print_char_cursor#36 ← phi( print_str_lines::@2/(byte*) print_char_cursor#35 print_str_lines::@4/(byte*) print_char_cursor#25 )
[875] if((byte) 0!=(byte) print_str_lines::ch#0) goto print_str_lines::@2
to:print_str_lines::@5
print_str_lines::@5: scope:[print_str_lines] from print_str_lines::@3

File diff suppressed because one or more lines are too long

@ -1107,12 +1107,12 @@ reg byte x [ mode_hicolstdchar::i#2 mode_hicolstdchar::i#1 ]
reg byte x [ mode_hicolstdchar::cx#2 mode_hicolstdchar::cx#1 ]
reg byte x [ mode_stdbitmap::i#2 mode_stdbitmap::i#1 ]
reg byte x [ mode_stdbitmap::cx#2 mode_stdbitmap::cx#1 ]
reg byte x [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ]
reg byte x [ bitmap_line_xdyi::y#3 bitmap_line_xdyi::y#5 bitmap_line_xdyi::y#1 bitmap_line_xdyi::y#0 bitmap_line_xdyi::y#6 bitmap_line_xdyi::y#2 ]
reg byte y [ bitmap_plot::x#4 bitmap_plot::x#1 bitmap_plot::x#0 bitmap_plot::x#3 bitmap_plot::x#2 ]
reg byte x [ bitmap_plot::y#4 bitmap_plot::y#1 bitmap_plot::y#0 bitmap_plot::y#3 bitmap_plot::y#2 ]
reg byte x [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ]
zp[1]:2 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#0 bitmap_line_xdyi::yd#1 mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ]
zp[1]:3 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#2 mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 mode_twoplanebitmap::ay#5 mode_twoplanebitmap::ay#1 mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 mode_ctrl::ctrl#14 mode_ctrl::ctrl#22 mode_ctrl::ctrl#6 mode_ctrl::ctrl#13 mode_ctrl::ctrl#5 mode_ctrl::ctrl#12 mode_ctrl::ctrl#4 mode_ctrl::ctrl#11 mode_ctrl::ctrl#3 mode_ctrl::ctrl#10 mode_ctrl::ctrl#2 mode_ctrl::ctrl#17 mode_ctrl::ctrl#1 mode_ctrl::ctrl#0 ]
reg byte x [ bitmap_line_xdyd::y#3 bitmap_line_xdyd::y#5 bitmap_line_xdyd::y#1 bitmap_line_xdyd::y#0 bitmap_line_xdyd::y#6 bitmap_line_xdyd::y#2 ]
zp[1]:2 [ bitmap_line_ydxd::yd#5 bitmap_line_ydxd::yd#0 bitmap_line_ydxd::yd#1 bitmap_line_xdyd::x#3 bitmap_line_xdyd::x#6 bitmap_line_xdyd::x#1 bitmap_line_xdyd::x#0 bitmap_line_xdyd::x#2 bitmap_line_ydxi::yd#5 bitmap_line_ydxi::yd#1 bitmap_line_ydxi::yd#0 bitmap_line_xdyi::yd#2 bitmap_line_xdyi::yd#1 bitmap_line_xdyi::yd#0 mode_sixsfred2::cy#4 mode_sixsfred2::cy#1 mode_twoplanebitmap::cy#4 mode_twoplanebitmap::cy#1 mode_8bpppixelcell::ay#4 mode_8bpppixelcell::ay#1 mode_8bppchunkybmm::y#6 mode_8bppchunkybmm::y#1 ]
zp[1]:3 [ bitmap_line_ydxd::y#2 bitmap_line_ydxd::y#7 bitmap_line_ydxd::y#0 bitmap_line_ydxd::y#1 bitmap_line_ydxd::y#3 bitmap_line_xdyd::e#3 bitmap_line_xdyd::e#0 bitmap_line_xdyd::e#6 bitmap_line_xdyd::e#2 bitmap_line_xdyd::e#1 bitmap_line_ydxi::y#3 bitmap_line_ydxi::y#6 bitmap_line_ydxi::y#1 bitmap_line_ydxi::y#0 bitmap_line_ydxi::y#2 bitmap_line_xdyi::x#3 bitmap_line_xdyi::x#6 bitmap_line_xdyi::x#1 bitmap_line_xdyi::x#0 bitmap_line_xdyi::x#2 mode_sixsfred2::ay#4 mode_sixsfred2::ay#1 mode_twoplanebitmap::ay#5 mode_twoplanebitmap::ay#1 mode_8bpppixelcell::ch#8 mode_8bpppixelcell::ch#1 mode_ctrl::ctrl#14 mode_ctrl::ctrl#22 mode_ctrl::ctrl#6 mode_ctrl::ctrl#13 mode_ctrl::ctrl#5 mode_ctrl::ctrl#12 mode_ctrl::ctrl#4 mode_ctrl::ctrl#11 mode_ctrl::ctrl#3 mode_ctrl::ctrl#10 mode_ctrl::ctrl#2 mode_ctrl::ctrl#17 mode_ctrl::ctrl#1 mode_ctrl::ctrl#0 ]
reg byte x [ bitmap_clear::x#2 bitmap_clear::x#1 ]
reg byte x [ bitmap_init::x#2 bitmap_init::x#1 ]
reg byte y [ bitmap_init::bits#3 bitmap_init::bits#4 bitmap_init::bits#1 ]
@ -1192,7 +1192,7 @@ reg byte a [ mode_sixsfred2::$5 ]
reg byte a [ mode_sixsfred2::$8 ]
reg byte a [ mode_sixsfred2::row#0 ]
reg byte a [ mode_hicolmcchar::$2 ]
zp[1]:11 [ mode_hicolmcchar::$3 mode_sixsfred2::$3 bitmap_clear::y#4 bitmap_clear::y#1 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#0 bitmap_line_xdyi::xd#1 bitmap_line::xd#2 bitmap_line::xd#1 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#0 bitmap_line_xdyd::xd#1 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ]
zp[1]:11 [ mode_hicolmcchar::$3 mode_sixsfred2::$3 bitmap_clear::y#4 bitmap_clear::y#1 bitmap_line_xdyi::xd#5 bitmap_line_xdyi::xd#1 bitmap_line_xdyi::xd#0 bitmap_line::xd#2 bitmap_line::xd#1 bitmap_line_ydxi::xd#2 bitmap_line_ydxi::xd#1 bitmap_line_ydxi::xd#0 bitmap_line_xdyd::xd#5 bitmap_line_xdyd::xd#1 bitmap_line_xdyd::xd#0 bitmap_line_ydxd::xd#2 bitmap_line_ydxd::xd#0 bitmap_line_ydxd::xd#1 ]
reg byte a [ mode_hicolmcchar::$4 ]
reg byte a [ mode_hicolmcchar::v#0 ]
reg byte a [ mode_hicolecmchar::$2 ]
@ -1225,7 +1225,7 @@ reg byte a [ bitmap_init::$9 ]
reg byte a [ mode_mcchar::$2 ]
reg byte a [ mode_mcchar::$3 ]
reg byte a [ mode_mcchar::$4 ]
zp[1]:17 [ mode_mcchar::$5 mode_stdbitmap::col2#0 mode_ecmchar::cy#4 mode_ecmchar::cy#1 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#0 bitmap_line_xdyi::x1#1 bitmap_line::x0#0 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#0 bitmap_line_xdyd::x1#1 bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 mode_sixsfred::ay#4 mode_sixsfred::ay#1 mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#1 mode_8bpppixelcell::bits#0 ]
zp[1]:17 [ mode_mcchar::$5 mode_stdbitmap::col2#0 mode_ecmchar::cy#4 mode_ecmchar::cy#1 bitmap_line_xdyi::x1#6 bitmap_line_xdyi::x1#1 bitmap_line_xdyi::x1#0 bitmap_line::x0#0 bitmap_line_xdyd::x1#6 bitmap_line_xdyd::x1#1 bitmap_line_xdyd::x1#0 bitmap_line_ydxd::x#3 bitmap_line_ydxd::x#5 bitmap_line_ydxd::x#0 bitmap_line_ydxd::x#1 bitmap_line_ydxd::x#6 bitmap_line_ydxd::x#2 mode_hicolecmchar::cy#4 mode_hicolecmchar::cy#1 mode_hicolmcchar::cy#4 mode_hicolmcchar::cy#1 mode_sixsfred::ay#4 mode_sixsfred::ay#1 mode_8bpppixelcell::bits#2 mode_8bpppixelcell::bits#1 mode_8bpppixelcell::bits#0 ]
reg byte a [ mode_mcchar::$6 ]
reg byte a [ mode_mcchar::$7 ]
reg byte a [ mode_ecmchar::$2 ]
@ -1237,7 +1237,7 @@ reg byte a [ mode_ecmchar::$7 ]
reg byte a [ mode_stdchar::$2 ]
reg byte a [ mode_stdchar::$3 ]
reg byte a [ mode_stdchar::$4 ]
zp[1]:19 [ mode_stdchar::$5 mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 mode_sixsfred::by#4 mode_sixsfred::by#1 mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 keyboard_key_pressed::colidx#0 bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#0 bitmap_line_xdyd::yd#1 bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ]
zp[1]:19 [ mode_stdchar::$5 mode_stdbitmap::cy#4 mode_stdbitmap::cy#1 mode_hicolstdchar::cy#4 mode_hicolstdchar::cy#1 mode_sixsfred::by#4 mode_sixsfred::by#1 mode_8bpppixelcell::col#2 mode_8bpppixelcell::col#5 mode_8bpppixelcell::col#7 mode_8bpppixelcell::col#1 keyboard_key_pressed::colidx#0 bitmap_line_ydxd::e#3 bitmap_line_ydxd::e#0 bitmap_line_ydxd::e#6 bitmap_line_ydxd::e#2 bitmap_line_ydxd::e#1 bitmap_line_xdyd::yd#2 bitmap_line_xdyd::yd#1 bitmap_line_xdyd::yd#0 bitmap_line_ydxi::e#3 bitmap_line_ydxi::e#0 bitmap_line_ydxi::e#6 bitmap_line_ydxi::e#2 bitmap_line_ydxi::e#1 ]
reg byte a [ mode_stdchar::$6 ]
reg byte a [ mode_stdchar::$7 ]
reg byte a [ print_str_lines::ch#0 ]

@ -1,5 +1,3 @@
Fixing pointer array-indexing *((const nomodify word*) SCREEN + (byte) idx)
Identified constant variable (word) main::w
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,17 +1,12 @@
Culled Empty Block (label) @1
Culled Empty Block (label) line::@4
Culled Empty Block (label) line::@3
Culled Empty Block (label) line::@5
Culled Empty Block (label) line::@6
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte*) screen#0 ← (byte*)(number) $400
to:@2
to:@1
(void()) main()
main: scope:[main] from @2
(byte*) screen#13 ← phi( @2/(byte*) screen#15 )
main: scope:[main] from @1
(byte*) screen#13 ← phi( @1/(byte*) screen#15 )
(byte) line::x0#0 ← (number) 1
(byte) line::x1#0 ← (number) 2
call line
@ -60,19 +55,19 @@ line::@return: scope:[line] from line::@1
(byte*) screen#5 ← (byte*) screen#11
return
to:@return
@2: scope:[] from @begin
@1: scope:[] from @begin
(byte*) screen#15 ← phi( @begin/(byte*) screen#0 )
call main
to:@3
@3: scope:[] from @2
(byte*) screen#12 ← phi( @2/(byte*) screen#3 )
to:@2
@2: scope:[] from @1
(byte*) screen#12 ← phi( @1/(byte*) screen#3 )
(byte*) screen#6 ← (byte*) screen#12
to:@end
@end: scope:[] from @3
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @1
(label) @2
(label) @3
(label) @begin
(label) @end
(void()) line((byte) line::x0 , (byte) line::x1)
@ -174,8 +169,8 @@ Constant inlined line::x1#0 = (byte) 2
Constant inlined line::x0#1 = (byte) 3
Successful SSA optimization Pass2ConstantInlining
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@2
@ -190,9 +185,8 @@ Coalesced (already) [13] screen#18 ← screen#16
Coalesced [20] line::x#5 ← line::x#1
Coalesced [21] screen#19 ← screen#4
Coalesced down to 3 phi equivalence classes
Culled Empty Block (label) @3
Culled Empty Block (label) @2
Culled Empty Block (label) main::@2
Renumbering block @2 to @1
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,5 +1,3 @@
Identified constant variable (byte*) main::SCREEN
Culled Empty Block (label) main::@2
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -59,7 +57,7 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions
Inlining constant with var siblings (const byte) main::i#0
Constant inlined main::i#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@3(between main::@1 and main::@1)
Added new block during phi lifting main::@2(between main::@1 and main::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
@ -72,7 +70,7 @@ Created 1 initial phi equivalence classes
Coalesced [11] main::i#3 ← main::i#1
Coalesced down to 1 phi equivalence classes
Culled Empty Block (label) @2
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,17 +1,12 @@
Fixing pointer array-indexing *((const byte**) screens + (byte) getScreen::id)
Inlined call (byte*~) main::$0 ← call getScreen (number) 0
Inlined call (byte*~) main::$1 ← call spritePtr (byte*) main::screen
Culled Empty Block (label) main::getScreen1_@1
Culled Empty Block (label) main::spritePtr1_@1
Culled Empty Block (label) @1
Culled Empty Block (label) @2
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@3
to:@1
(void()) main()
main: scope:[main] from @3
main: scope:[main] from @1
(byte*) main::screen#0 ← (byte*) 0
(byte) main::getScreen1_id#0 ← (number) 0
to:main::getScreen1
@ -47,16 +42,16 @@ main::@2: scope:[main] from main::spritePtr1_@return
main::@return: scope:[main] from main::@2
return
to:@return
@3: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@4
@4: scope:[] from @3
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @4
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @3
(label) @4
(label) @1
(label) @2
(label) @begin
(label) @end
(const byte) SIZEOF_POINTER = (byte) 2
@ -133,8 +128,8 @@ Eliminating unused constant (const byte) main::getScreen1_$0
Eliminating unused constant (const byte) SIZEOF_POINTER
Successful SSA optimization PassNEliminateUnusedVars
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @3
Adding NOP phi() at start of @4
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::getScreen1_@return
@ -145,11 +140,10 @@ Calls in [] to main:2
Created 0 initial phi equivalence classes
Coalesced down to 0 phi equivalence classes
Culled Empty Block (label) @4
Culled Empty Block (label) @2
Culled Empty Block (label) main::getScreen1_@return
Culled Empty Block (label) main::@1
Culled Empty Block (label) main::spritePtr1_@return
Renumbering block @3 to @1
Renumbering block main::@2 to main::@1
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1

@ -1,18 +1,12 @@
Fixing pointer array-indexing *((const byte**) screens + (byte) getScreen::id)
Identified constant variable (byte*) main::DSP
Inlined call (byte*~) main::$0 ← call getScreen (number) 0
Inlined call (byte~) main::$1 ← call spritePtr (byte*~) main::$0
Culled Empty Block (label) main::getScreen1_@1
Culled Empty Block (label) main::spritePtr1_@1
Culled Empty Block (label) @1
Culled Empty Block (label) @2
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@3
to:@1
(void()) main()
main: scope:[main] from @3
main: scope:[main] from @1
(byte) main::getScreen1_id#0 ← (number) 0
to:main::getScreen1
main::getScreen1: scope:[main] from main
@ -46,16 +40,16 @@ main::@2: scope:[main] from main::spritePtr1_@return
main::@return: scope:[main] from main::@2
return
to:@return
@3: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@4
@4: scope:[] from @3
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @4
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @3
(label) @4
(label) @1
(label) @2
(label) @begin
(label) @end
(const byte) SIZEOF_POINTER = (byte) 2
@ -129,8 +123,8 @@ Eliminating unused constant (const byte) main::getScreen1_$0
Eliminating unused constant (const byte) SIZEOF_POINTER
Successful SSA optimization PassNEliminateUnusedVars
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @3
Adding NOP phi() at start of @4
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::getScreen1_@return
@ -141,11 +135,10 @@ Calls in [] to main:2
Created 0 initial phi equivalence classes
Coalesced down to 0 phi equivalence classes
Culled Empty Block (label) @4
Culled Empty Block (label) @2
Culled Empty Block (label) main::getScreen1_@return
Culled Empty Block (label) main::@1
Culled Empty Block (label) main::spritePtr1_@return
Renumbering block @3 to @1
Renumbering block main::@2 to main::@1
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1

@ -1,5 +1,3 @@
Identified constant variable (byte*) sprite
Identified constant variable (byte*) SCREEN
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,10 +1,3 @@
De-inlining cast (byte)main::$1
Identified constant variable (byte*) main::SCREEN
Identified constant variable (byte) main::min
Identified constant variable (byte) main::max
Identified constant variable (byte*) main::BGCOL
Culled Empty Block (label) main::@2
Culled Empty Block (label) main::@4
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -27,14 +20,14 @@ main: scope:[main] from @1
*((const byte*) main::SCREEN + (number) 1) ← (byte) main::midb#0
(bool~) main::$6 ← *((const byte*) main::SCREEN + (number) 0) == *((const byte*) main::SCREEN + (number) 1)
if((bool~) main::$6) goto main::@1
to:main::@3
to:main::@2
main::@1: scope:[main] from main
*((const byte*) main::BGCOL) ← (number) 5
to:main::@return
main::@3: scope:[main] from main
main::@2: scope:[main] from main
*((const byte*) main::BGCOL) ← (number) 2
to:main::@return
main::@return: scope:[main] from main::@1 main::@3
main::@return: scope:[main] from main::@1 main::@2
return
to:@return
@1: scope:[] from @begin
@ -59,7 +52,7 @@ SYMBOL TABLE SSA
(bool~) main::$6
(byte~) main::$7
(label) main::@1
(label) main::@3
(label) main::@2
(label) main::@return
(const byte*) main::BGCOL = (byte*)(number) $d021
(const byte*) main::SCREEN = (byte*)(number) $400
@ -163,7 +156,6 @@ Calls in [] to main:2
Created 0 initial phi equivalence classes
Coalesced down to 0 phi equivalence classes
Culled Empty Block (label) @2
Renumbering block main::@3 to main::@2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,8 +1,3 @@
Identified constant variable (byte*) SCREEN
Identified constant variable (word) w::w1
Identified constant variable (word) w::w2
Culled Empty Block (label) @1
Culled Empty Block (label) w::@2
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -12,13 +7,13 @@ CONTROL FLOW GRAPH SSA
(byte*) SCREEN3#0 ← (byte*~) $1
(byte*~) $2 ← (const byte*) SCREEN + (number) $28*(number) 9
(byte*) SCREEN4#0 ← (byte*~) $2
to:@2
to:@1
(void()) main()
main: scope:[main] from @2
(byte*) SCREEN4#5 ← phi( @2/(byte*) SCREEN4#6 )
(byte*) SCREEN3#5 ← phi( @2/(byte*) SCREEN3#6 )
(byte*) SCREEN2#2 ← phi( @2/(byte*) SCREEN2#3 )
main: scope:[main] from @1
(byte*) SCREEN4#5 ← phi( @1/(byte*) SCREEN4#6 )
(byte*) SCREEN3#5 ← phi( @1/(byte*) SCREEN3#6 )
(byte*) SCREEN2#2 ← phi( @1/(byte*) SCREEN2#3 )
(byte) main::b#0 ← (byte) 0
to:main::@1
main::@1: scope:[main] from main main::@1
@ -70,22 +65,22 @@ w::@1: scope:[w] from w w::@1
w::@return: scope:[w] from w::@1
return
to:@return
@2: scope:[] from @begin
@1: scope:[] from @begin
(byte*) SCREEN4#6 ← phi( @begin/(byte*) SCREEN4#0 )
(byte*) SCREEN3#6 ← phi( @begin/(byte*) SCREEN3#0 )
(byte*) SCREEN2#3 ← phi( @begin/(byte*) SCREEN2#0 )
call main
to:@3
@3: scope:[] from @2
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @3
@end: scope:[] from @2
SYMBOL TABLE SSA
(byte*~) $0
(byte*~) $1
(byte*~) $2
(label) @1
(label) @2
(label) @3
(label) @begin
(label) @end
(const byte*) SCREEN = (byte*)(number) $400
@ -215,10 +210,10 @@ Constant inlined w::$0 = (const word) w::w1-(const word) w::w2
Constant inlined main::b#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@4(between main::@1 and main::@1)
Added new block during phi lifting w::@3(between w::@1 and w::@1)
Added new block during phi lifting w::@2(between w::@1 and w::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@2
@ -232,11 +227,10 @@ Created 2 initial phi equivalence classes
Coalesced [17] main::b#3 ← main::b#1
Coalesced [26] w::i#3 ← w::i#1
Coalesced down to 2 phi equivalence classes
Culled Empty Block (label) @3
Culled Empty Block (label) @2
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@4
Culled Empty Block (label) w::@3
Renumbering block @2 to @1
Culled Empty Block (label) w::@2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,6 +1,3 @@
Identified constant variable (byte*) PROCPORT
Identified constant variable (byte*) CHARGEN
Identified constant variable (byte*) SCREEN
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,4 +1,3 @@
Culled Empty Block (label) main::@4
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -174,8 +173,8 @@ Constant inlined main::color#0 = (byte) 1
Constant inlined main::row#0 = (byte) 0
Constant inlined main::column#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@5(between main::@3 and main::@1)
Added new block during phi lifting main::@6(between main::@2 and main::@2)
Added new block during phi lifting main::@4(between main::@3 and main::@1)
Added new block during phi lifting main::@5(between main::@2 and main::@2)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
@ -194,8 +193,8 @@ Coalesced [24] main::column#3 ← main::column#1
Coalesced [25] main::color#8 ← main::color#1
Coalesced down to 5 phi equivalence classes
Culled Empty Block (label) @2
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,92 +1,11 @@
Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6
Fixing pointer addition (word*~) bsearch16u::$13 ← (word*) bsearch16u::pivot + (number) 1
Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - (number) 1
Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit)
De-inlining cast (word)toD018::screen
De-inlining cast (word)toSpritePtr::sprite
De-inlining cast (byte*)memcpy::source
De-inlining cast (word)memmove::destination
De-inlining cast (word)memmove::source
De-inlining cast (byte*)memmove::source
De-inlining cast (byte*)memmove::destination
De-inlining cast (byte*)memset::str
De-inlining cast (signed word)bsearch16u::key
De-inlining cast (signed word)*(bsearch16u::pivot)
De-inlining cast (byte)uctoa::value
De-inlining cast (byte)utoa::value
De-inlining cast (byte)ultoa::value
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) strupr::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) strlen::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) clock::@1
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) @7
Culled Empty Block (label) @8
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Culled Empty Block (label) @13
Culled Empty Block (label) @14
Culled Empty Block (label) @15
Culled Empty Block (label) @16
Culled Empty Block (label) @17
Culled Empty Block (label) @18
Culled Empty Block (label) @19
Culled Empty Block (label) @20
Culled Empty Block (label) @21
Culled Empty Block (label) @22
Culled Empty Block (label) @23
Culled Empty Block (label) @24
Culled Empty Block (label) @25
Culled Empty Block (label) @26
Culled Empty Block (label) @27
Culled Empty Block (label) @28
Culled Empty Block (label) @29
Culled Empty Block (label) @30
Culled Empty Block (label) @31
Culled Empty Block (label) @32
Culled Empty Block (label) @33
Culled Empty Block (label) @34
Culled Empty Block (label) @35
Culled Empty Block (label) @36
Culled Empty Block (label) @37
Culled Empty Block (label) @38
Culled Empty Block (label) @39
Culled Empty Block (label) @40
Culled Empty Block (label) @41
Culled Empty Block (label) @42
Culled Empty Block (label) @43
Culled Empty Block (label) @44
Culled Empty Block (label) @45
Culled Empty Block (label) @46
Culled Empty Block (label) @47
Culled Empty Block (label) @48
Culled Empty Block (label) @49
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@50
to:@1
(dword()) clock()
clock: scope:[clock] from main::@7
clock: scope:[clock] from main::@3
(number~) clock::$0 ← (number) $ffffffff - *((const nomodify dword*) CIA2_TIMER_AB)
(dword) clock::return#0 ← (number~) clock::$0
to:clock::@return
@ -133,9 +52,9 @@ print_uint_at::@return: scope:[print_uint_at] from print_uint_at::@2
to:@return
(void()) print_ulong_at((dword) print_ulong_at::dw , (byte*) print_ulong_at::at)
print_ulong_at: scope:[print_ulong_at] from main::@8
(byte*) print_ulong_at::at#1 ← phi( main::@8/(byte*) print_ulong_at::at#0 )
(dword) print_ulong_at::dw#1 ← phi( main::@8/(dword) print_ulong_at::dw#0 )
print_ulong_at: scope:[print_ulong_at] from main::@4
(byte*) print_ulong_at::at#1 ← phi( main::@4/(byte*) print_ulong_at::at#0 )
(dword) print_ulong_at::dw#1 ← phi( main::@4/(dword) print_ulong_at::dw#0 )
(word~) print_ulong_at::$0 ← > (dword) print_ulong_at::dw#1
(word) print_uint_at::w#0 ← (word~) print_ulong_at::$0
(byte*) print_uint_at::at#0 ← (byte*) print_ulong_at::at#1
@ -191,43 +110,43 @@ print_char_at::@return: scope:[print_char_at] from print_char_at
to:@return
(void()) main()
main: scope:[main] from @50
main: scope:[main] from @1
to:main::@1
main::@1: scope:[main] from main main::@9
main::@1: scope:[main] from main main::@5
if(true) goto main::@2
to:main::@return
main::@2: scope:[main] from main::@1
call clock_start
to:main::@7
main::@7: scope:[main] from main::@2
to:main::@3
main::@3: scope:[main] from main::@2
asm { nop }
call clock
(dword) clock::return#2 ← (dword) clock::return#1
to:main::@8
main::@8: scope:[main] from main::@7
(dword) clock::return#4 ← phi( main::@7/(dword) clock::return#2 )
to:main::@4
main::@4: scope:[main] from main::@3
(dword) clock::return#4 ← phi( main::@3/(dword) clock::return#2 )
(dword~) main::$1 ← (dword) clock::return#4
(dword~) main::$2 ← (dword~) main::$1 - (const nomodify dword) CLOCKS_PER_INIT
(dword) main::cyclecount#0 ← (dword~) main::$2
(dword) print_ulong_at::dw#0 ← (dword) main::cyclecount#0
(byte*) print_ulong_at::at#0 ← (const nomodify byte*) SCREEN
call print_ulong_at
to:main::@9
main::@9: scope:[main] from main::@8
to:main::@5
main::@5: scope:[main] from main::@4
to:main::@1
main::@return: scope:[main] from main::@1
return
to:@return
@50: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@51
@51: scope:[] from @50
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @51
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @50
(label) @51
(label) @1
(label) @2
(label) @begin
(label) @end
(const nomodify dword*) CIA2_TIMER_AB = (dword*)(number) $dd04
@ -260,9 +179,9 @@ SYMBOL TABLE SSA
(dword~) main::$2
(label) main::@1
(label) main::@2
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@return
(dword) main::cyclecount
(dword) main::cyclecount#0
@ -413,13 +332,13 @@ Constant inlined print_uint_at::at#1 = (const nomodify byte*) SCREEN+(byte) 4
Constant inlined print_uint_at::at#0 = (const nomodify byte*) SCREEN
Successful SSA optimization Pass2ConstantInlining
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @50
Adding NOP phi() at start of @51
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of main::@9
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of print_ulong_at::@2
Adding NOP phi() at start of print_uint_at::@2
Adding NOP phi() at start of print_uchar_at::@2
@ -442,16 +361,15 @@ Coalesced [43] print_char_at::at#3 ← print_char_at::at#0
Coalesced [48] print_char_at::ch#4 ← print_char_at::ch#1
Coalesced [49] print_char_at::at#4 ← print_char_at::at#1
Coalesced down to 6 phi equivalence classes
Culled Empty Block (label) @51
Culled Empty Block (label) @2
Culled Empty Block (label) main::@1
Culled Empty Block (label) main::@9
Culled Empty Block (label) main::@5
Culled Empty Block (label) print_ulong_at::@2
Culled Empty Block (label) print_uint_at::@2
Culled Empty Block (label) print_uchar_at::@2
Renumbering block @50 to @1
Renumbering block main::@2 to main::@1
Renumbering block main::@7 to main::@2
Renumbering block main::@8 to main::@3
Renumbering block main::@3 to main::@2
Renumbering block main::@4 to main::@3
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,89 +1,8 @@
Fixing pointer addition (word*~) bsearch16u::$7 ← (word*) bsearch16u::items + (byte~) bsearch16u::$6
Fixing pointer addition (word*~) bsearch16u::$13 ← (word*) bsearch16u::pivot + (number) 1
Fixing pointer addition (word*~) bsearch16u::$1 ← (word*) bsearch16u::items - (number) 1
Fixing pointer array-indexing *((word*) utoa::digit_values + (byte) utoa::digit)
Fixing pointer array-indexing *((dword*) ultoa::digit_values + (byte) ultoa::digit)
De-inlining cast (word)toD018::screen
De-inlining cast (word)toSpritePtr::sprite
De-inlining cast (byte*)memcpy::source
De-inlining cast (word)memmove::destination
De-inlining cast (word)memmove::source
De-inlining cast (byte*)memmove::source
De-inlining cast (byte*)memmove::destination
De-inlining cast (byte*)memset::str
De-inlining cast (signed word)bsearch16u::key
De-inlining cast (signed word)*(bsearch16u::pivot)
De-inlining cast (byte)uctoa::value
De-inlining cast (byte)utoa::value
De-inlining cast (byte)ultoa::value
Warning! Adding boolean cast to non-boolean condition *((byte*) strcpy::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) strupr::src)
Warning! Adding boolean cast to non-boolean condition *((byte*) strlen::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_lines::str)
Warning! Adding boolean cast to non-boolean condition (byte) print_str_lines::ch
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str::str)
Warning! Adding boolean cast to non-boolean condition *((byte*) print_str_at::str)
Warning! Adding boolean cast to non-boolean sub-expression (byte) print_str_lines::ch
Identified constant variable (byte*) HEAP_TOP
Inlined call (byte~) vicSelectGfxBank::$0 ← call toDd00 (byte*) vicSelectGfxBank::gfx
Culled Empty Block (label) @1
Culled Empty Block (label) @2
Culled Empty Block (label) @3
Culled Empty Block (label) @4
Culled Empty Block (label) clock::@1
Culled Empty Block (label) @5
Culled Empty Block (label) @6
Culled Empty Block (label) @7
Culled Empty Block (label) @8
Culled Empty Block (label) @9
Culled Empty Block (label) @10
Culled Empty Block (label) @11
Culled Empty Block (label) @12
Culled Empty Block (label) @13
Culled Empty Block (label) @14
Culled Empty Block (label) @15
Culled Empty Block (label) @16
Culled Empty Block (label) @17
Culled Empty Block (label) @18
Culled Empty Block (label) @19
Culled Empty Block (label) @20
Culled Empty Block (label) @21
Culled Empty Block (label) @22
Culled Empty Block (label) @23
Culled Empty Block (label) @24
Culled Empty Block (label) @25
Culled Empty Block (label) @26
Culled Empty Block (label) @27
Culled Empty Block (label) @28
Culled Empty Block (label) @29
Culled Empty Block (label) @30
Culled Empty Block (label) @31
Culled Empty Block (label) @32
Culled Empty Block (label) @33
Culled Empty Block (label) @34
Culled Empty Block (label) @35
Culled Empty Block (label) @36
Culled Empty Block (label) @37
Culled Empty Block (label) @38
Culled Empty Block (label) @39
Culled Empty Block (label) @40
Culled Empty Block (label) @41
Culled Empty Block (label) @42
Culled Empty Block (label) @43
Culled Empty Block (label) @44
Culled Empty Block (label) @45
Culled Empty Block (label) @46
Culled Empty Block (label) @47
Culled Empty Block (label) @48
Culled Empty Block (label) @49
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@50
to:@1
(dword()) clock()
clock: scope:[clock] from main::@2
@ -133,9 +52,9 @@ print_uint_at::@return: scope:[print_uint_at] from print_uint_at::@2
to:@return
(void()) print_ulong_at((dword) print_ulong_at::dw , (byte*) print_ulong_at::at)
print_ulong_at: scope:[print_ulong_at] from main::@8
(byte*) print_ulong_at::at#1 ← phi( main::@8/(byte*) print_ulong_at::at#0 )
(dword) print_ulong_at::dw#1 ← phi( main::@8/(dword) print_ulong_at::dw#0 )
print_ulong_at: scope:[print_ulong_at] from main::@4
(byte*) print_ulong_at::at#1 ← phi( main::@4/(byte*) print_ulong_at::at#0 )
(dword) print_ulong_at::dw#1 ← phi( main::@4/(dword) print_ulong_at::dw#0 )
(word~) print_ulong_at::$0 ← > (dword) print_ulong_at::dw#1
(word) print_uint_at::w#0 ← (word~) print_ulong_at::$0
(byte*) print_uint_at::at#0 ← (byte*) print_ulong_at::at#1
@ -191,40 +110,40 @@ print_char_at::@return: scope:[print_char_at] from print_char_at
to:@return
(void()) main()
main: scope:[main] from @50
main: scope:[main] from @1
call clock_start
to:main::@7
main::@7: scope:[main] from main
to:main::@3
main::@3: scope:[main] from main
to:main::@1
main::@1: scope:[main] from main::@7 main::@9
main::@1: scope:[main] from main::@3 main::@5
if(true) goto main::@2
to:main::@return
main::@2: scope:[main] from main::@1
call clock
(dword) clock::return#2 ← (dword) clock::return#1
to:main::@8
main::@8: scope:[main] from main::@2
to:main::@4
main::@4: scope:[main] from main::@2
(dword) clock::return#4 ← phi( main::@2/(dword) clock::return#2 )
(dword~) main::$1 ← (dword) clock::return#4
(dword) print_ulong_at::dw#0 ← (dword~) main::$1
(byte*) print_ulong_at::at#0 ← (const nomodify byte*) SCREEN
call print_ulong_at
to:main::@9
main::@9: scope:[main] from main::@8
to:main::@5
main::@5: scope:[main] from main::@4
to:main::@1
main::@return: scope:[main] from main::@1
return
to:@return
@50: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@51
@51: scope:[] from @50
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @51
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @50
(label) @51
(label) @1
(label) @2
(label) @begin
(label) @end
(const nomodify dword*) CIA2_TIMER_AB = (dword*)(number) $dd04
@ -255,9 +174,9 @@ SYMBOL TABLE SSA
(dword~) main::$1
(label) main::@1
(label) main::@2
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@return
(void()) print_char_at((byte) print_char_at::ch , (byte*) print_char_at::at)
(label) print_char_at::@return
@ -406,14 +325,14 @@ Constant inlined print_uint_at::at#1 = (const nomodify byte*) SCREEN+(byte) 4
Constant inlined print_uint_at::at#0 = (const nomodify byte*) SCREEN
Successful SSA optimization Pass2ConstantInlining
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @50
Adding NOP phi() at start of @51
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@7
Adding NOP phi() at start of main::@3
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of main::@2
Adding NOP phi() at start of main::@9
Adding NOP phi() at start of main::@5
Adding NOP phi() at start of print_ulong_at::@2
Adding NOP phi() at start of print_uint_at::@2
Adding NOP phi() at start of print_uchar_at::@2
@ -436,16 +355,15 @@ Coalesced [41] print_char_at::at#3 ← print_char_at::at#0
Coalesced [46] print_char_at::ch#4 ← print_char_at::ch#1
Coalesced [47] print_char_at::at#4 ← print_char_at::at#1
Coalesced down to 6 phi equivalence classes
Culled Empty Block (label) @51
Culled Empty Block (label) main::@7
Culled Empty Block (label) @2
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@1
Culled Empty Block (label) main::@9
Culled Empty Block (label) main::@5
Culled Empty Block (label) print_ulong_at::@2
Culled Empty Block (label) print_uint_at::@2
Culled Empty Block (label) print_uchar_at::@2
Renumbering block @50 to @1
Renumbering block main::@2 to main::@1
Renumbering block main::@8 to main::@2
Renumbering block main::@4 to main::@2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,8 +1,4 @@
Resolved forward reference irq to interrupt(HARDWARE_CLOBBER)(void()) irq()
Identified constant variable (byte*) BORDERCOL
Identified constant variable (byte*) RASTER
Identified constant variable (byte) DARK_GREY
Identified constant variable (byte) BLACK
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,4 +1,3 @@
Culled Empty Block (label) main::@4
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -130,8 +129,8 @@ Constant inlined main::a#0 = (byte) 0
Constant inlined main::idx#0 = (byte) 0
Constant inlined main::b#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@5(between main::@3 and main::@1)
Added new block during phi lifting main::@6(between main::@2 and main::@2)
Added new block during phi lifting main::@4(between main::@3 and main::@1)
Added new block during phi lifting main::@5(between main::@2 and main::@2)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
@ -148,8 +147,8 @@ Coalesced [21] main::d#1 ← main::b#1
Coalesced (already) [22] main::idx#7 ← main::idx#1
Coalesced down to 3 phi equivalence classes
Culled Empty Block (label) @2
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,13 +1,12 @@
Culled Empty Block (label) @1
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
(byte) b#0 ← (byte) 0
to:@2
to:@1
(void()) main()
main: scope:[main] from @2
(byte) b#6 ← phi( @2/(byte) b#12 )
main: scope:[main] from @1
(byte) b#6 ← phi( @1/(byte) b#12 )
*((const nomodify byte*) SCREEN + (number) 0) ← (byte) b#6
to:main::@return
main::@return: scope:[main] from main main::@2
@ -35,19 +34,19 @@ bb::@return: scope:[bb] from bb
(byte) b#4 ← (byte) b#10
return
to:@return
@2: scope:[] from @begin
@1: scope:[] from @begin
(byte) b#12 ← phi( @begin/(byte) b#0 )
call main
to:@3
@3: scope:[] from @2
(byte) b#11 ← phi( @2/(byte) b#1 )
to:@2
@2: scope:[] from @1
(byte) b#11 ← phi( @1/(byte) b#1 )
(byte) b#5 ← (byte) b#11
to:@end
@end: scope:[] from @3
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @1
(label) @2
(label) @3
(label) @begin
(label) @end
(const nomodify byte*) SCREEN = (byte*)(number) $400
@ -109,16 +108,15 @@ Removing unused procedure block bb
Removing unused procedure block bb::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @3
Adding NOP phi() at start of @end
CALL GRAPH
Calls in [] to main:2
Created 0 initial phi equivalence classes
Coalesced down to 0 phi equivalence classes
Culled Empty Block (label) @3
Renumbering block @2 to @1
Culled Empty Block (label) @2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,5 +1,3 @@
Identified constant variable (byte) main::b
Identified constant variable (byte) main::d
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,7 +1,3 @@
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,4 +1,3 @@
Identified constant variable (byte) main::b
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,4 +1,3 @@
Identified constant variable (byte) main::b
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,7 +1,3 @@
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
CONTROL FLOW GRAPH SSA
@begin: scope:[] from

@ -1,10 +1,3 @@
Culled Empty Block (label) main::@4
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@10
Culled Empty Block (label) main::@9
Culled Empty Block (label) main::@11
Culled Empty Block (label) main::@12
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -26,18 +19,18 @@ main::@2: scope:[main] from main::@1
to:main::@1
main::@3: scope:[main] from main::@1
(byte*) main::cc#0 ← (const nomodify byte*) main::cols+(number) $3e7
to:main::@7
main::@7: scope:[main] from main::@3 main::@8
(byte*) main::cc#2 ← phi( main::@3/(byte*) main::cc#0 main::@8/(byte*) main::cc#1 )
to:main::@4
main::@4: scope:[main] from main::@3 main::@5
(byte*) main::cc#2 ← phi( main::@3/(byte*) main::cc#0 main::@5/(byte*) main::cc#1 )
(bool~) main::$1 ← (byte*) main::cc#2 > (const nomodify byte*) main::cols-(number) 1
if((bool~) main::$1) goto main::@8
if((bool~) main::$1) goto main::@5
to:main::@return
main::@8: scope:[main] from main::@7
(byte*) main::cc#3 ← phi( main::@7/(byte*) main::cc#2 )
main::@5: scope:[main] from main::@4
(byte*) main::cc#3 ← phi( main::@4/(byte*) main::cc#2 )
*((byte*) main::cc#3) ← (number) 2
(byte*) main::cc#1 ← -- (byte*) main::cc#3
to:main::@7
main::@return: scope:[main] from main::@7
to:main::@4
main::@return: scope:[main] from main::@4
return
to:@return
@1: scope:[] from @begin
@ -58,8 +51,8 @@ SYMBOL TABLE SSA
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@7
(label) main::@8
(label) main::@4
(label) main::@5
(label) main::@return
(byte*) main::cc
(byte*) main::cc#0
@ -97,7 +90,7 @@ Alias main::sc#2 = main::sc#3
Alias main::cc#2 = main::cc#3
Successful SSA optimization Pass2AliasElimination
Simple Condition (bool~) main::$0 [3] if((byte*) main::sc#2<=(const nomodify byte*) main::screen+(word) $3e7) goto main::@2
Simple Condition (bool~) main::$1 [9] if((byte*) main::cc#2>(const nomodify byte*) main::cols-(byte) 1) goto main::@8
Simple Condition (bool~) main::$1 [9] if((byte*) main::cc#2>(const nomodify byte*) main::cols-(byte) 1) goto main::@5
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) main::sc#0 = main::screen
Constant (const byte*) main::cc#0 = main::cols+$3e7
@ -122,8 +115,8 @@ Coalesced [17] main::sc#4 ← main::sc#1
Coalesced down to 2 phi equivalence classes
Culled Empty Block (label) @2
Culled Empty Block (label) main::@3
Renumbering block main::@7 to main::@3
Renumbering block main::@8 to main::@4
Renumbering block main::@4 to main::@3
Renumbering block main::@5 to main::@4
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,10 +1,3 @@
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::@8
Culled Empty Block (label) main::@17
Culled Empty Block (label) main::@11
Culled Empty Block (label) main::@18
Culled Empty Block (label) main::@24
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -37,82 +30,82 @@ main::@4: scope:[main] from main::@3
main::@5: scope:[main] from main::@3
(byte*) main::screen#0 ← (const nomodify byte*) main::SCREEN
(byte) main::i1#0 ← (byte) 0
to:main::@9
main::@9: scope:[main] from main::@16 main::@5
(byte*) main::screen#8 ← phi( main::@16/(byte*) main::screen#13 main::@5/(byte*) main::screen#0 )
(byte) main::i1#2 ← phi( main::@16/(byte) main::i1#1 main::@5/(byte) main::i1#0 )
to:main::@6
main::@6: scope:[main] from main::@12 main::@5
(byte*) main::screen#8 ← phi( main::@12/(byte*) main::screen#13 main::@5/(byte*) main::screen#0 )
(byte) main::i1#2 ← phi( main::@12/(byte) main::i1#1 main::@5/(byte) main::i1#0 )
(bool~) main::$2 ← (byte) main::i1#2 <= (number) 9
if((bool~) main::$2) goto main::@10
if((bool~) main::$2) goto main::@7
to:main::@return
main::@10: scope:[main] from main::@9
(byte) main::i1#3 ← phi( main::@9/(byte) main::i1#2 )
(byte*) main::screen#2 ← phi( main::@9/(byte*) main::screen#8 )
main::@7: scope:[main] from main::@6
(byte) main::i1#3 ← phi( main::@6/(byte) main::i1#2 )
(byte*) main::screen#2 ← phi( main::@6/(byte*) main::screen#8 )
(byte*) main::screen#1 ← (byte*) main::screen#2 + (number) $28
(byte~) main::$3 ← (byte) '0' + (byte) main::i1#3
*((byte*) main::screen#1 + (number) 0) ← (byte~) main::$3
(bool~) main::$4 ← (byte) main::i1#3 < (number) 5
(bool~) main::$5 ← ! (bool~) main::$4
if((bool~) main::$5) goto main::@12
to:main::@19
main::@12: scope:[main] from main::@10 main::@19
(byte*) main::screen#9 ← phi( main::@10/(byte*) main::screen#1 main::@19/(byte*) main::screen#3 )
(byte) main::i1#4 ← phi( main::@10/(byte) main::i1#3 main::@19/(byte) main::i1#9 )
if((bool~) main::$5) goto main::@8
to:main::@13
main::@8: scope:[main] from main::@13 main::@7
(byte*) main::screen#9 ← phi( main::@13/(byte*) main::screen#3 main::@7/(byte*) main::screen#1 )
(byte) main::i1#4 ← phi( main::@13/(byte) main::i1#9 main::@7/(byte) main::i1#3 )
(bool~) main::$6 ← (byte) main::i1#4 <= (number) 5
(bool~) main::$7 ← ! (bool~) main::$6
if((bool~) main::$7) goto main::@13
to:main::@20
main::@19: scope:[main] from main::@10
(byte) main::i1#9 ← phi( main::@10/(byte) main::i1#3 )
(byte*) main::screen#3 ← phi( main::@10/(byte*) main::screen#1 )
if((bool~) main::$7) goto main::@9
to:main::@14
main::@13: scope:[main] from main::@7
(byte) main::i1#9 ← phi( main::@7/(byte) main::i1#3 )
(byte*) main::screen#3 ← phi( main::@7/(byte*) main::screen#1 )
*((byte*) main::screen#3 + (number) 2) ← (byte) '+'
to:main::@12
main::@13: scope:[main] from main::@12 main::@20
(byte*) main::screen#10 ← phi( main::@12/(byte*) main::screen#9 main::@20/(byte*) main::screen#4 )
(byte) main::i1#5 ← phi( main::@12/(byte) main::i1#4 main::@20/(byte) main::i1#10 )
to:main::@8
main::@9: scope:[main] from main::@14 main::@8
(byte*) main::screen#10 ← phi( main::@14/(byte*) main::screen#4 main::@8/(byte*) main::screen#9 )
(byte) main::i1#5 ← phi( main::@14/(byte) main::i1#10 main::@8/(byte) main::i1#4 )
(bool~) main::$8 ← (byte) main::i1#5 == (number) 5
(bool~) main::$9 ← ! (bool~) main::$8
if((bool~) main::$9) goto main::@14
to:main::@21
main::@20: scope:[main] from main::@12
(byte) main::i1#10 ← phi( main::@12/(byte) main::i1#4 )
(byte*) main::screen#4 ← phi( main::@12/(byte*) main::screen#9 )
if((bool~) main::$9) goto main::@10
to:main::@15
main::@14: scope:[main] from main::@8
(byte) main::i1#10 ← phi( main::@8/(byte) main::i1#4 )
(byte*) main::screen#4 ← phi( main::@8/(byte*) main::screen#9 )
*((byte*) main::screen#4 + (number) 5) ← (byte) '+'
to:main::@13
main::@14: scope:[main] from main::@13 main::@21
(byte*) main::screen#11 ← phi( main::@13/(byte*) main::screen#10 main::@21/(byte*) main::screen#5 )
(byte) main::i1#6 ← phi( main::@13/(byte) main::i1#5 main::@21/(byte) main::i1#11 )
to:main::@9
main::@10: scope:[main] from main::@15 main::@9
(byte*) main::screen#11 ← phi( main::@15/(byte*) main::screen#5 main::@9/(byte*) main::screen#10 )
(byte) main::i1#6 ← phi( main::@15/(byte) main::i1#11 main::@9/(byte) main::i1#5 )
(bool~) main::$10 ← (byte) main::i1#6 >= (number) 5
(bool~) main::$11 ← ! (bool~) main::$10
if((bool~) main::$11) goto main::@15
to:main::@22
main::@21: scope:[main] from main::@13
(byte) main::i1#11 ← phi( main::@13/(byte) main::i1#5 )
(byte*) main::screen#5 ← phi( main::@13/(byte*) main::screen#10 )
if((bool~) main::$11) goto main::@11
to:main::@16
main::@15: scope:[main] from main::@9
(byte) main::i1#11 ← phi( main::@9/(byte) main::i1#5 )
(byte*) main::screen#5 ← phi( main::@9/(byte*) main::screen#10 )
*((byte*) main::screen#5 + (number) 8) ← (byte) '+'
to:main::@14
main::@15: scope:[main] from main::@14 main::@22
(byte*) main::screen#12 ← phi( main::@14/(byte*) main::screen#11 main::@22/(byte*) main::screen#6 )
(byte) main::i1#7 ← phi( main::@14/(byte) main::i1#6 main::@22/(byte) main::i1#12 )
to:main::@10
main::@11: scope:[main] from main::@10 main::@16
(byte*) main::screen#12 ← phi( main::@10/(byte*) main::screen#11 main::@16/(byte*) main::screen#6 )
(byte) main::i1#7 ← phi( main::@10/(byte) main::i1#6 main::@16/(byte) main::i1#12 )
(bool~) main::$12 ← (byte) main::i1#7 > (number) 5
(bool~) main::$13 ← ! (bool~) main::$12
if((bool~) main::$13) goto main::@16
to:main::@23
main::@22: scope:[main] from main::@14
(byte) main::i1#12 ← phi( main::@14/(byte) main::i1#6 )
(byte*) main::screen#6 ← phi( main::@14/(byte*) main::screen#11 )
if((bool~) main::$13) goto main::@12
to:main::@17
main::@16: scope:[main] from main::@10
(byte) main::i1#12 ← phi( main::@10/(byte) main::i1#6 )
(byte*) main::screen#6 ← phi( main::@10/(byte*) main::screen#11 )
*((byte*) main::screen#6 + (number) $b) ← (byte) '+'
to:main::@15
main::@16: scope:[main] from main::@15 main::@23
(byte*) main::screen#13 ← phi( main::@15/(byte*) main::screen#12 main::@23/(byte*) main::screen#7 )
(byte) main::i1#8 ← phi( main::@15/(byte) main::i1#7 main::@23/(byte) main::i1#13 )
to:main::@11
main::@12: scope:[main] from main::@11 main::@17
(byte*) main::screen#13 ← phi( main::@11/(byte*) main::screen#12 main::@17/(byte*) main::screen#7 )
(byte) main::i1#8 ← phi( main::@11/(byte) main::i1#7 main::@17/(byte) main::i1#13 )
(byte) main::i1#1 ← ++ (byte) main::i1#8
to:main::@9
main::@23: scope:[main] from main::@15
(byte) main::i1#13 ← phi( main::@15/(byte) main::i1#7 )
(byte*) main::screen#7 ← phi( main::@15/(byte*) main::screen#12 )
to:main::@6
main::@17: scope:[main] from main::@11
(byte) main::i1#13 ← phi( main::@11/(byte) main::i1#7 )
(byte*) main::screen#7 ← phi( main::@11/(byte*) main::screen#12 )
*((byte*) main::screen#7 + (number) $e) ← (byte) '+'
to:main::@16
main::@return: scope:[main] from main::@9
to:main::@12
main::@return: scope:[main] from main::@6
return
to:@return
@1: scope:[] from @begin
@ -144,20 +137,20 @@ SYMBOL TABLE SSA
(bool~) main::$9
(label) main::@1
(label) main::@10
(label) main::@11
(label) main::@12
(label) main::@13
(label) main::@14
(label) main::@15
(label) main::@16
(label) main::@19
(label) main::@17
(label) main::@2
(label) main::@20
(label) main::@21
(label) main::@22
(label) main::@23
(label) main::@3
(label) main::@4
(label) main::@5
(label) main::@6
(label) main::@7
(label) main::@8
(label) main::@9
(label) main::@return
(const nomodify byte*) main::SCREEN = (byte*)(number) $400
@ -275,12 +268,12 @@ Alias main::screen#1 = main::screen#4 main::screen#10 main::screen#11 main::scre
Successful SSA optimization Pass2AliasElimination
Simple Condition (bool~) main::$0 [5] if((byte*) main::sc#1!=rangelast(main::SCREEN,main::SCREEN+$3e8)) goto main::@1
Simple Condition (bool~) main::$1 [9] if(*((const byte*) main::header + (byte) main::i#2)!=(byte) 0) goto main::@4
Simple Condition (bool~) main::$2 [16] if((byte) main::i1#10<=(byte) 9) goto main::@10
Simple Condition (bool~) main::$5 [21] if((byte) main::i1#10>=(byte) 5) goto main::@12
Simple Condition (bool~) main::$7 [23] if((byte) main::i1#10>(byte) 5) goto main::@13
Simple Condition (bool~) main::$9 [26] if((byte) main::i1#10!=(byte) 5) goto main::@14
Simple Condition (bool~) main::$11 [29] if((byte) main::i1#10<(byte) 5) goto main::@15
Simple Condition (bool~) main::$13 [32] if((byte) main::i1#10<=(byte) 5) goto main::@16
Simple Condition (bool~) main::$2 [16] if((byte) main::i1#10<=(byte) 9) goto main::@7
Simple Condition (bool~) main::$5 [21] if((byte) main::i1#10>=(byte) 5) goto main::@8
Simple Condition (bool~) main::$7 [23] if((byte) main::i1#10>(byte) 5) goto main::@9
Simple Condition (bool~) main::$9 [26] if((byte) main::i1#10!=(byte) 5) goto main::@10
Simple Condition (bool~) main::$11 [29] if((byte) main::i1#10<(byte) 5) goto main::@11
Simple Condition (bool~) main::$13 [32] if((byte) main::i1#10<=(byte) 5) goto main::@12
Successful SSA optimization Pass2ConditionalJumpSimplification
Constant (const byte*) main::sc#0 = main::SCREEN
Constant (const byte) main::i#0 = 0
@ -289,18 +282,18 @@ Constant (const byte) main::i1#0 = 0
Successful SSA optimization Pass2ConstantIdentification
Resolved ranged next value [3] main::sc#1 ← ++ main::sc#2 to ++
Resolved ranged comparison value [5] if(main::sc#1!=rangelast(main::SCREEN,main::SCREEN+$3e8)) goto main::@1 to (byte*)(const nomodify byte*) main::SCREEN+(word) $3e8+(number) 1
Rewriting conditional comparison [16] if((byte) main::i1#10<=(byte) 9) goto main::@10
Rewriting conditional comparison [23] if((byte) main::i1#10>(byte) 5) goto main::@13
Rewriting conditional comparison [32] if((byte) main::i1#10<=(byte) 5) goto main::@16
Rewriting conditional comparison [16] if((byte) main::i1#10<=(byte) 9) goto main::@7
Rewriting conditional comparison [23] if((byte) main::i1#10>(byte) 5) goto main::@9
Rewriting conditional comparison [32] if((byte) main::i1#10<=(byte) 5) goto main::@12
Simplifying expression containing zero main::screen#1 in [19] *((byte*) main::screen#1 + (byte) 0) ← (byte~) main::$3
Successful SSA optimization PassNSimplifyExpressionWithZero
Adding number conversion cast (unumber) 1 in if((byte*) main::sc#1!=(byte*)(const nomodify byte*) main::SCREEN+(word) $3e8+(number) 1) goto main::@1
Adding number conversion cast (unumber) 9+1 in if((byte) main::i1#10<(byte) 9+(number) 1) goto main::@10
Adding number conversion cast (unumber) 1 in if((byte) main::i1#10<(unumber)(byte) 9+(number) 1) goto main::@10
Adding number conversion cast (unumber) 5+1 in if((byte) main::i1#10>=(byte) 5+(number) 1) goto main::@13
Adding number conversion cast (unumber) 1 in if((byte) main::i1#10>=(unumber)(byte) 5+(number) 1) goto main::@13
Adding number conversion cast (unumber) 5+1 in if((byte) main::i1#10<(byte) 5+(number) 1) goto main::@16
Adding number conversion cast (unumber) 1 in if((byte) main::i1#10<(unumber)(byte) 5+(number) 1) goto main::@16
Adding number conversion cast (unumber) 9+1 in if((byte) main::i1#10<(byte) 9+(number) 1) goto main::@7
Adding number conversion cast (unumber) 1 in if((byte) main::i1#10<(unumber)(byte) 9+(number) 1) goto main::@7
Adding number conversion cast (unumber) 5+1 in if((byte) main::i1#10>=(byte) 5+(number) 1) goto main::@9
Adding number conversion cast (unumber) 1 in if((byte) main::i1#10>=(unumber)(byte) 5+(number) 1) goto main::@9
Adding number conversion cast (unumber) 5+1 in if((byte) main::i1#10<(byte) 5+(number) 1) goto main::@12
Adding number conversion cast (unumber) 1 in if((byte) main::i1#10<(unumber)(byte) 5+(number) 1) goto main::@12
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast (const nomodify byte*) main::SCREEN+(word) $3e8+(unumber)(number) 1
Simplifying constant integer cast 1
@ -325,7 +318,7 @@ Constant inlined main::i#0 = (byte) 0
Constant inlined main::i1#0 = (byte) 0
Constant inlined main::sc#0 = (const nomodify byte*) main::SCREEN
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@25(between main::@1 and main::@1)
Added new block during phi lifting main::@18(between main::@1 and main::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
@ -345,21 +338,21 @@ Coalesced down to 4 phi equivalence classes
Culled Empty Block (label) @2
Culled Empty Block (label) main::@2
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@25
Culled Empty Block (label) main::@18
Renumbering block main::@3 to main::@2
Renumbering block main::@4 to main::@3
Renumbering block main::@9 to main::@4
Renumbering block main::@10 to main::@5
Renumbering block main::@12 to main::@6
Renumbering block main::@13 to main::@7
Renumbering block main::@14 to main::@8
Renumbering block main::@15 to main::@9
Renumbering block main::@16 to main::@10
Renumbering block main::@19 to main::@11
Renumbering block main::@20 to main::@12
Renumbering block main::@21 to main::@13
Renumbering block main::@22 to main::@14
Renumbering block main::@23 to main::@15
Renumbering block main::@6 to main::@4
Renumbering block main::@7 to main::@5
Renumbering block main::@8 to main::@6
Renumbering block main::@9 to main::@7
Renumbering block main::@10 to main::@8
Renumbering block main::@11 to main::@9
Renumbering block main::@12 to main::@10
Renumbering block main::@13 to main::@11
Renumbering block main::@14 to main::@12
Renumbering block main::@15 to main::@13
Renumbering block main::@16 to main::@14
Renumbering block main::@17 to main::@15
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,7 +1,3 @@
Culled Empty Block (label) main::@5
Culled Empty Block (label) main::@3
Culled Empty Block (label) main::@6
Culled Empty Block (label) main::@8
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
@ -10,7 +6,7 @@ CONTROL FLOW GRAPH SSA
(void()) main()
main: scope:[main] from @1
to:main::@1
main::@1: scope:[main] from main main::@4
main::@1: scope:[main] from main main::@3
if(true) goto main::@2
to:main::@return
main::@2: scope:[main] from main::@1
@ -19,15 +15,15 @@ main::@2: scope:[main] from main::@1
(bool~) main::$1 ← (byte) main::key#0 < (number) $40
(bool~) main::$2 ← (bool~) main::$0 || (bool~) main::$1
(bool~) main::$3 ← ! (bool~) main::$2
if((bool~) main::$3) goto main::@4
to:main::@7
main::@4: scope:[main] from main::@2 main::@7
(byte) main::key#2 ← phi( main::@2/(byte) main::key#0 main::@7/(byte) main::key#1 )
if((bool~) main::$3) goto main::@3
to:main::@4
main::@3: scope:[main] from main::@2 main::@4
(byte) main::key#2 ← phi( main::@2/(byte) main::key#0 main::@4/(byte) main::key#1 )
*((const nomodify byte*) SCREEN) ← (byte) main::key#2
to:main::@1
main::@7: scope:[main] from main::@2
main::@4: scope:[main] from main::@2
(byte) main::key#1 ← (number) 0
to:main::@4
to:main::@3
main::@return: scope:[main] from main::@1
return
to:@return
@ -52,8 +48,8 @@ SYMBOL TABLE SSA
(bool~) main::$3
(label) main::@1
(label) main::@2
(label) main::@3
(label) main::@4
(label) main::@7
(label) main::@return
(byte) main::key
(byte) main::key#0
@ -85,14 +81,14 @@ if() condition always true - replacing block destination [0] if(true) goto main:
Successful SSA optimization Pass2ConstantIfs
Removing unused block main::@return
Successful SSA optimization Pass2EliminateUnusedBlocks
Simple Condition (bool~) main::$0 [3] if((byte) main::key#0>(byte) $20) goto main::@7
Simple Condition (bool~) main::$1 [7] if((byte) main::key#0<(byte) $40) goto main::@7
Simple Condition (bool~) main::$0 [3] if((byte) main::key#0>(byte) $20) goto main::@4
Simple Condition (bool~) main::$1 [7] if((byte) main::key#0<(byte) $40) goto main::@4
Successful SSA optimization Pass2ConditionalJumpSimplification
Negating conditional jump and destination [7] if((byte) main::key#0>=(byte) $40) goto main::@4
Negating conditional jump and destination [7] if((byte) main::key#0>=(byte) $40) goto main::@3
Successful SSA optimization Pass2ConditionalJumpSequenceImprovement
Rewriting conditional comparison [3] if((byte) main::key#0>(byte) $20) goto main::@7
Adding number conversion cast (unumber) $20+1 in if((byte) main::key#0>=(byte) $20+(number) 1) goto main::@7
Adding number conversion cast (unumber) 1 in if((byte) main::key#0>=(unumber)(byte) $20+(number) 1) goto main::@7
Rewriting conditional comparison [3] if((byte) main::key#0>(byte) $20) goto main::@4
Adding number conversion cast (unumber) $20+1 in if((byte) main::key#0>=(byte) $20+(number) 1) goto main::@4
Adding number conversion cast (unumber) 1 in if((byte) main::key#0>=(unumber)(byte) $20+(number) 1) goto main::@4
Successful SSA optimization PassNAddNumberTypeConversions
Simplifying constant integer cast (byte) $20+(unumber)(number) 1
Simplifying constant integer cast 1
@ -102,14 +98,14 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions
Inlining constant with var siblings (const byte) main::key#1
Constant inlined main::key#1 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting main::@10(between main::@9 and main::@4)
Added new block during phi lifting main::@6(between main::@5 and main::@3)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of main
Adding NOP phi() at start of main::@1
Adding NOP phi() at start of main::@7
Adding NOP phi() at start of main::@4
CALL GRAPH
Calls in [] to main:2
@ -118,11 +114,11 @@ Coalesced [13] main::key#3 ← main::key#0
Coalesced down to 1 phi equivalence classes
Culled Empty Block (label) @2
Culled Empty Block (label) main::@1
Culled Empty Block (label) main::@7
Culled Empty Block (label) main::@4
Renumbering block main::@2 to main::@1
Renumbering block main::@4 to main::@2
Renumbering block main::@9 to main::@3
Renumbering block main::@10 to main::@4
Renumbering block main::@3 to main::@2
Renumbering block main::@5 to main::@3
Renumbering block main::@6 to main::@4
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -1,11 +1,8 @@
Loading link script "ataritempest.ld"
Culled Empty Block (label) entryPoint::@2
Culled Empty Block (label) @1
Culled Empty Block (label) @2
CONTROL FLOW GRAPH SSA
@begin: scope:[] from
to:@3
to:@1
(void()) entryPoint()
entryPoint: scope:[entryPoint] from
@ -31,22 +28,22 @@ nmiHandler::@return: scope:[nmiHandler] from nmiHandler
to:@return
(void()) main()
main: scope:[main] from @3
main: scope:[main] from @1
*((const nomodify byte*) BGCOL) ← ++ *((const nomodify byte*) BGCOL)
to:main::@return
main::@return: scope:[main] from main
return
to:@return
@3: scope:[] from @begin
@1: scope:[] from @begin
call main
to:@4
@4: scope:[] from @3
to:@2
@2: scope:[] from @1
to:@end
@end: scope:[] from @4
@end: scope:[] from @2
SYMBOL TABLE SSA
(label) @3
(label) @4
(label) @1
(label) @2
(label) @begin
(label) @end
(const nomodify byte*) BGCOL = (byte*)(number) $c01a
@ -83,10 +80,10 @@ Successful SSA optimization PassNFinalizeNumberTypeConversions
Inlining constant with var siblings (const byte) entryPoint::i#0
Constant inlined entryPoint::i#0 = (byte) 0
Successful SSA optimization Pass2ConstantInlining
Added new block during phi lifting entryPoint::@3(between entryPoint::@1 and entryPoint::@1)
Added new block during phi lifting entryPoint::@2(between entryPoint::@1 and entryPoint::@1)
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @3
Adding NOP phi() at start of @4
Adding NOP phi() at start of @1
Adding NOP phi() at start of @2
Adding NOP phi() at start of @end
Adding NOP phi() at start of entryPoint
CALL GRAPH
@ -95,9 +92,8 @@ Calls in [] to main:2
Created 1 initial phi equivalence classes
Coalesced [15] entryPoint::i#3 ← entryPoint::i#1
Coalesced down to 1 phi equivalence classes
Culled Empty Block (label) @4
Culled Empty Block (label) entryPoint::@3
Renumbering block @3 to @1
Culled Empty Block (label) @2
Culled Empty Block (label) entryPoint::@2
Adding NOP phi() at start of @begin
Adding NOP phi() at start of @1
Adding NOP phi() at start of @end

@ -377,7 +377,7 @@ atan2_16::@9: scope:[atan2_16] from atan2_16::@7
[205] (word) atan2_16::angle#5 ← - (word) atan2_16::angle#11
to:atan2_16::@8
atan2_16::@8: scope:[atan2_16] from atan2_16::@7 atan2_16::@9
[206] (word) atan2_16::return#0 ← phi( atan2_16::@9/(word) atan2_16::angle#5 atan2_16::@7/(word) atan2_16::angle#11 )
[206] (word) atan2_16::return#0 ← phi( atan2_16::@7/(word) atan2_16::angle#11 atan2_16::@9/(word) atan2_16::angle#5 )
to:atan2_16::@return
atan2_16::@return: scope:[atan2_16] from atan2_16::@8
[207] return

File diff suppressed because it is too large Load Diff

@ -505,7 +505,7 @@ zp[2]:19 [ startProcessing::$33 atan2_16::yi#3 atan2_16::yi#8 atan2_16::yi#0 ata
zp[2]:21 [ startProcessing::colPtr#0 atan2_16::xi#3 atan2_16::xi#8 atan2_16::xi#0 atan2_16::xi#13 atan2_16::$7 atan2_16::xi#1 atan2_16::xi#2 ]
zp[1]:23 [ startProcessing::spriteCol#0 init_angle_screen::x#2 init_angle_screen::x#1 getCharToProcess::closest_x#7 getCharToProcess::closest_x#9 getCharToProcess::return_x#1 getCharToProcess::return_x#7 ]
reg byte a [ startProcessing::ch#0 ]
zp[2]:24 [ startProcessing::$26 startProcessing::$8 startProcessing::$9 startProcessing::spriteX#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#5 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$7 ]
zp[2]:24 [ startProcessing::$26 startProcessing::$8 startProcessing::$9 startProcessing::spriteX#0 atan2_16::angle#6 atan2_16::angle#12 atan2_16::angle#13 atan2_16::angle#2 atan2_16::angle#3 atan2_16::return#0 atan2_16::angle#11 atan2_16::angle#1 atan2_16::angle#4 atan2_16::angle#5 atan2_16::return#2 init_angle_screen::angle_w#0 init_angle_screen::$7 ]
zp[2]:26 [ startProcessing::$27 startProcessing::$11 startProcessing::$12 startProcessing::spriteY#0 atan2_16::yd#5 atan2_16::yd#3 atan2_16::yd#10 atan2_16::yd#1 atan2_16::yd#2 ]
zp[1]:28 [ startProcessing::spritePtr#0 init_angle_screen::xb#2 init_angle_screen::xb#1 getCharToProcess::closest_y#7 getCharToProcess::closest_y#9 getCharToProcess::return_y#1 getCharToProcess::return_y#7 ]
reg byte y [ startProcessing::$15 ]

Some files were not shown because too many files have changed in this diff Show More