diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index 5fe885020..e30156bdf 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -173,6 +173,7 @@ public class Compiler { new Pass1FixLValuesLoHi(program).execute(); new Pass1AssertNoLValueIntermediate(program).execute(); new Pass1PointerSizeofFix(program).execute(); + new PassNAddBooleanCasts(program).execute(); new PassNAddTypeConversionAssignment(program).execute(); new Pass1EarlyConstantIdentification(program).execute(); new PassNStatementIndices(program).step(); @@ -260,6 +261,8 @@ public class Compiler { optimizations.add(new Pass2DuplicateRValueIdentification(program)); optimizations.add(new Pass2ConditionalJumpSimplification(program)); optimizations.add(new Pass2ConditionalAndOrRewriting(program)); + optimizations.add(new PassNAddBooleanCasts(program)); + optimizations.add(new Pass2ConditionalJumpSequenceImprovement(program)); optimizations.add(new Pass2ConstantRValueConsolidation(program)); optimizations.add(new Pass2ConstantIdentification(program)); @@ -268,6 +271,7 @@ public class Compiler { optimizations.add(new Pass2ConstantIfs(program)); optimizations.add(new Pass2ConstantStringConsolidation(program)); optimizations.add(new Pass2RangeResolving(program)); + //optimizations.add(new Pass2BooleanizeConditions(program)); optimizations.add(new Pass2ComparisonOptimization(program)); optimizations.add(new Pass2InlineDerefIdx(program)); optimizations.add(new Pass2DeInlineWordDerefIdx(program)); diff --git a/src/main/java/dk/camelot64/kickc/model/iterator/ProgramExpressionIterator.java b/src/main/java/dk/camelot64/kickc/model/iterator/ProgramExpressionIterator.java index 4411ffd80..799ee7a0a 100644 --- a/src/main/java/dk/camelot64/kickc/model/iterator/ProgramExpressionIterator.java +++ b/src/main/java/dk/camelot64/kickc/model/iterator/ProgramExpressionIterator.java @@ -18,7 +18,7 @@ import java.util.ListIterator; public class ProgramExpressionIterator { /** - * Execute a handler on all values in the entire program (both in the control flow graph and the symbol table.) + * Execute a handler on all expressions (unary or binary) in the entire program (both in the control flow graph and the symbol table.) * * @param program The program * @param handler The handler to execute diff --git a/src/main/java/dk/camelot64/kickc/model/iterator/ProgramExpressionUnary.java b/src/main/java/dk/camelot64/kickc/model/iterator/ProgramExpressionUnary.java index 5b0fe07d9..2b5fa1024 100644 --- a/src/main/java/dk/camelot64/kickc/model/iterator/ProgramExpressionUnary.java +++ b/src/main/java/dk/camelot64/kickc/model/iterator/ProgramExpressionUnary.java @@ -24,6 +24,12 @@ public interface ProgramExpressionUnary extends ProgramExpression { */ RValue getOperand(); + /** + * Set the operand of the unary expression. + * @param rValue The new operand + */ + void setOperand(RValue rValue); + /** Unary expression assignment rvalue. */ class ProgramExpressionUnaryAssignmentRValue implements ProgramExpressionUnary { private final StatementAssignment assignment; @@ -42,6 +48,11 @@ public interface ProgramExpressionUnary extends ProgramExpression { return assignment.getrValue2(); } + @Override + public void setOperand(RValue rValue) { + assignment.setrValue2(rValue); + } + @Override public void set(Value value) { assignment.setrValue2((RValue) value); @@ -73,6 +84,11 @@ public interface ProgramExpressionUnary extends ProgramExpression { return getConstantUnary().getOperand(); } + @Override + public void setOperand(RValue rValue) { + getConstantUnary().setOperand((ConstantValue) rValue); + } + @Override public void set(Value value) { programValue.set(value); @@ -104,6 +120,11 @@ public interface ProgramExpressionUnary extends ProgramExpression { return getConstantUnary().getValue(); } + @Override + public void setOperand(RValue rValue) { + getConstantUnary().setValue((ConstantValue) rValue); + } + @Override public void set(Value value) { programValue.set(value); @@ -135,6 +156,11 @@ public interface ProgramExpressionUnary extends ProgramExpression { return getConstantUnary().getValue(); } + @Override + public void setOperand(RValue rValue) { + getConstantUnary().setValue(rValue); + } + @Override public void set(Value value) { programValue.set(value); diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastBool.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastBool.java index f0b17f0f6..df028d528 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastBool.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorCastBool.java @@ -3,6 +3,7 @@ package dk.camelot64.kickc.model.operators; import dk.camelot64.kickc.model.CompileError; import dk.camelot64.kickc.model.symbols.ProgramScope; import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.values.ConstantBool; import dk.camelot64.kickc.model.values.ConstantInteger; import dk.camelot64.kickc.model.values.ConstantLiteral; import dk.camelot64.kickc.model.values.ConstantPointer; @@ -17,9 +18,9 @@ public class OperatorCastBool extends OperatorCast { @Override public ConstantLiteral calculateLiteral(ConstantLiteral value, ProgramScope scope) { if(value instanceof ConstantInteger) { - return new ConstantInteger(0x1 & ((ConstantInteger) value).getValue()); + return new ConstantBool(((ConstantInteger) value).getInteger()!=0L); } else if(value instanceof ConstantPointer) { - return new ConstantInteger(0x1 & ((ConstantPointer) value).getLocation()); + return new ConstantBool(((ConstantPointer) value).getLocation()!=0L); } throw new CompileError("Calculation not implemented " + getOperator() + " " + value ); } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorLogicNot.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorLogicNot.java index 990cab0f1..fa843c29e 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorLogicNot.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorLogicNot.java @@ -23,7 +23,7 @@ public class OperatorLogicNot extends OperatorUnary { @Override public SymbolType inferType(SymbolType operandType) { - return operandType; + return SymbolType.BOOLEAN; } } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index 643957eea..ef04864be 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -947,8 +947,8 @@ public class Pass0GenerateStatementSequence extends KickCBaseVisitor { RValue rangeLastValue = (RValue) visit(rangeLastCtx); RValue rangeFirstValue = (RValue) visit(rangeFirstCtx); if(varType != null) { - if(rangeFirstValue instanceof ConstantInteger) ((ConstantInteger) rangeFirstValue).setType(SymbolType.NUMBER); - if(rangeLastValue instanceof ConstantInteger) ((ConstantInteger) rangeLastValue).setType(SymbolType.NUMBER); + if(rangeFirstValue instanceof ConstantInteger) ((ConstantInteger) rangeFirstValue).setType(varType); + if(rangeLastValue instanceof ConstantInteger) ((ConstantInteger) rangeLastValue).setType(varType); } Statement stmtInit = new StatementAssignment(lValue.getRef(), rangeFirstValue, new StatementSource(ctx), Comment.NO_COMMENTS); sequence.addStatement(stmtInit); diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2ComparisonOptimization.java b/src/main/java/dk/camelot64/kickc/passes/Pass2ComparisonOptimization.java index 0354d3104..fa66fa286 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass2ComparisonOptimization.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass2ComparisonOptimization.java @@ -39,7 +39,7 @@ public class Pass2ComparisonOptimization extends Pass2SsaOptimization { if(statement instanceof StatementConditionalJump) { StatementConditionalJump conditionalJump = (StatementConditionalJump) statement; Operator operator = conditionalJump.getOperator(); - if(conditionalJump.getrValue2() instanceof ConstantValue) { + if(operator!=null && conditionalJump.getrValue2() instanceof ConstantValue) { SymbolType valueType = SymbolTypeInference.inferType(getScope(), conditionalJump.getrValue1()); ConstantValue constantValue = (ConstantValue) conditionalJump.getrValue2(); ConstantLiteral constantLiteral = null; diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2ConditionalJumpSimplification.java b/src/main/java/dk/camelot64/kickc/passes/Pass2ConditionalJumpSimplification.java index 92a3b7a2a..630634998 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass2ConditionalJumpSimplification.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass2ConditionalJumpSimplification.java @@ -1,12 +1,13 @@ package dk.camelot64.kickc.passes; -import dk.camelot64.kickc.model.*; -import dk.camelot64.kickc.model.values.LValue; -import dk.camelot64.kickc.model.values.RValue; -import dk.camelot64.kickc.model.values.VariableRef; +import dk.camelot64.kickc.model.ControlFlowBlock; +import dk.camelot64.kickc.model.Program; import dk.camelot64.kickc.model.statements.Statement; import dk.camelot64.kickc.model.statements.StatementAssignment; import dk.camelot64.kickc.model.statements.StatementConditionalJump; +import dk.camelot64.kickc.model.values.LValue; +import dk.camelot64.kickc.model.values.RValue; +import dk.camelot64.kickc.model.values.VariableRef; import java.util.ArrayList; import java.util.List; @@ -35,42 +36,41 @@ public class Pass2ConditionalJumpSimplification extends Pass2SsaOptimization { final List simpleConditionVars = new ArrayList<>(); - ControlFlowGraphBaseVisitor visitor = new ControlFlowGraphBaseVisitor() { - @Override - public Void visitConditionalJump(StatementConditionalJump conditionalJump) { - if(conditionalJump.getrValue1() == null && conditionalJump.getOperator() == null) { - RValue conditionRValue = conditionalJump.getrValue2(); - if(conditionRValue instanceof VariableRef && usages.get(conditionRValue).size() == 1) { - VariableRef conditionVar = (VariableRef) conditionRValue; - StatementAssignment conditionAssignment = assignments.get(conditionVar); - if(conditionAssignment!=null && conditionAssignment.getOperator() != null) { - switch(conditionAssignment.getOperator().getOperator()) { - case "==": - case "<>": - case "!=": - case "<": - case ">": - case "<=": - case "=<": - case ">=": - case "=>": - conditionalJump.setrValue1(conditionAssignment.getrValue1()); - conditionalJump.setOperator(conditionAssignment.getOperator()); - conditionalJump.setrValue2(conditionAssignment.getrValue2()); - simpleConditionVars.add(conditionVar); - getLog().append("Simple Condition " + conditionVar.toString(getProgram()) + " " + conditionalJump.toString(getProgram(), false)); - break; - default: + for(ControlFlowBlock block : getGraph().getAllBlocks()) { + for(Statement statement : block.getStatements()) { + if(statement instanceof StatementConditionalJump) { + StatementConditionalJump conditionalJump = (StatementConditionalJump) statement; + if(conditionalJump.getrValue1() == null && conditionalJump.getOperator() == null) { + RValue conditionRValue = conditionalJump.getrValue2(); + if(conditionRValue instanceof VariableRef && usages.get(conditionRValue).size() == 1) { + VariableRef conditionVar = (VariableRef) conditionRValue; + StatementAssignment conditionAssignment = assignments.get(conditionVar); + if(conditionAssignment != null && conditionAssignment.getOperator() != null) { + switch(conditionAssignment.getOperator().getOperator()) { + case "==": + case "<>": + case "!=": + case "<": + case ">": + case "<=": + case "=<": + case ">=": + case "=>": + conditionalJump.setrValue1(conditionAssignment.getrValue1()); + conditionalJump.setOperator(conditionAssignment.getOperator()); + conditionalJump.setrValue2(conditionAssignment.getrValue2()); + simpleConditionVars.add(conditionVar); + getLog().append("Simple Condition " + conditionVar.toString(getProgram()) + " " + conditionalJump.toString(getProgram(), false)); + break; + default: + } } } } } - return null; } - }; - visitor.visitGraph(getGraph()); + } return simpleConditionVars; } - } diff --git a/src/main/java/dk/camelot64/kickc/passes/PassNAddBooleanCasts.java b/src/main/java/dk/camelot64/kickc/passes/PassNAddBooleanCasts.java new file mode 100644 index 000000000..9fba8e5ec --- /dev/null +++ b/src/main/java/dk/camelot64/kickc/passes/PassNAddBooleanCasts.java @@ -0,0 +1,79 @@ +package dk.camelot64.kickc.passes; + +import dk.camelot64.kickc.model.Comment; +import dk.camelot64.kickc.model.ControlFlowBlock; +import dk.camelot64.kickc.model.Program; +import dk.camelot64.kickc.model.iterator.ProgramExpressionIterator; +import dk.camelot64.kickc.model.iterator.ProgramExpressionUnary; +import dk.camelot64.kickc.model.operators.Operators; +import dk.camelot64.kickc.model.statements.Statement; +import dk.camelot64.kickc.model.statements.StatementAssignment; +import dk.camelot64.kickc.model.statements.StatementConditionalJump; +import dk.camelot64.kickc.model.symbols.Scope; +import dk.camelot64.kickc.model.symbols.VariableIntermediate; +import dk.camelot64.kickc.model.types.SymbolType; +import dk.camelot64.kickc.model.types.SymbolTypeInference; +import dk.camelot64.kickc.model.types.SymbolTypePointer; +import dk.camelot64.kickc.model.values.ConstantInteger; +import dk.camelot64.kickc.model.values.RValue; + +import java.util.ListIterator; + +/** + * Add a cast to boolean everywhere an integer/pointer is used where a boolean is expected. + */ +public class PassNAddBooleanCasts extends Pass2SsaOptimization { + + public PassNAddBooleanCasts(Program program) { + super(program); + } + + @Override + public boolean step() { + for(ControlFlowBlock currentBlock : getGraph().getAllBlocks()) { + ListIterator stmtIt = currentBlock.getStatements().listIterator(); + while(stmtIt.hasNext()) { + Statement currentStmt = stmtIt.next(); + if(currentStmt instanceof StatementConditionalJump) { + StatementConditionalJump conditionalJump = (StatementConditionalJump) currentStmt; + 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())); + VariableIntermediate tmpVar = addBooleanCast(rValue2, currentStmt, stmtIt, currentBlock); + conditionalJump.setrValue2(tmpVar.getRef()); + } + } + } + } + } + ProgramExpressionIterator.execute(getProgram(), (programExpression, currentStmt, stmtIt, currentBlock) -> { + if(Operators.LOGIC_NOT.equals(programExpression.getOperator())) { + ProgramExpressionUnary unaryExpression = (ProgramExpressionUnary) programExpression; + 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())); + VariableIntermediate tmpVar = addBooleanCast(operand, currentStmt, stmtIt, currentBlock); + unaryExpression.setOperand(tmpVar.getRef()); + } + } + }); + return false; + } + + public VariableIntermediate addBooleanCast(RValue rValue, Statement currentStmt, ListIterator stmtIt, ControlFlowBlock currentBlock) { + Scope currentScope = getScope().getScope(currentBlock.getScope()); + stmtIt.previous(); + VariableIntermediate tmpVar = currentScope.addVariableIntermediate(); + tmpVar.setTypeInferred(SymbolType.BOOLEAN); + // Go straight to xxx!=0 instead of casting to bool + stmtIt.add(new StatementAssignment(tmpVar.getRef(), new ConstantInteger(0L, SymbolType.NUMBER), Operators.NEQ, rValue, currentStmt.getSource(), Comment.NO_COMMENTS)); + stmtIt.next(); + return tmpVar; + } + + +} diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 3bddc0420..771981474 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -36,6 +36,31 @@ public class TestPrograms { } + @Test + public void testConditionInteger4() throws IOException, URISyntaxException { + compileAndCompare("condition-integer-4"); + } + + @Test + public void testConditionInteger3() throws IOException, URISyntaxException { + compileAndCompare("condition-integer-3"); + } + + @Test + public void testConditionInteger2() throws IOException, URISyntaxException { + compileAndCompare("condition-integer-2"); + } + + @Test + public void testConditionInteger1() throws IOException, URISyntaxException { + compileAndCompare("condition-integer-1"); + } + + @Test + public void testConditionInteger0() throws IOException, URISyntaxException { + compileAndCompare("condition-integer-0"); + } + @Test public void testStringUnknownEncoding() throws IOException, URISyntaxException { assertError("string-encoding-unknown", "Unknown string encoding"); @@ -2025,7 +2050,7 @@ public class TestPrograms { @Test public void testConditionTypeMismatch() throws IOException, URISyntaxException { - assertError("condition-type-mismatch", "Type mismatch non-boolean condition"); + compileAndCompare("condition-type-mismatch"); } @BeforeClass diff --git a/src/test/kc/condition-integer-0.kc b/src/test/kc/condition-integer-0.kc new file mode 100644 index 000000000..09f9451cc --- /dev/null +++ b/src/test/kc/condition-integer-0.kc @@ -0,0 +1,23 @@ +// Tests using integer conditions in if() +// This should produce '+ ++ ++' at the top of the screen + +const byte* SCREEN = 0x0400; + +void main() { + byte idx = 0; + // Hardcoded 0 + if(0) { SCREEN[idx++] = '0'; } + // Hardcoded non-0 + if(999) SCREEN[idx++] = '+'; + SCREEN[idx++] = ' '; + // loop byte + for( byte i:0..2) { + if(i) SCREEN[idx++] = '+'; + } + SCREEN[idx++] = ' '; + // loop word + for( word i:0..2) { + if(i) SCREEN[idx++] = '+'; + } + +} \ No newline at end of file diff --git a/src/test/kc/condition-integer-1.kc b/src/test/kc/condition-integer-1.kc new file mode 100644 index 000000000..77129ba64 --- /dev/null +++ b/src/test/kc/condition-integer-1.kc @@ -0,0 +1,23 @@ +// Tests using integer conditions in if() +// This should produce '0 0 0' at the top of the screen + +const byte* SCREEN = 0x0400; + +void main() { + byte idx = 0; + // Hardcoded 0 + if(!0) SCREEN[idx++] = '0'; + // Hardcoded non-0 + if(!999) SCREEN[idx++] = '+'; + SCREEN[idx++] = ' '; + // loop byte + for( byte i:0..2) { + if(!i) SCREEN[idx++] = '0'; + } + SCREEN[idx++] = ' '; + // loop word + for( word i:0..2) { + if(!i) SCREEN[idx++] = '0'; + } + +} \ No newline at end of file diff --git a/src/test/kc/condition-integer-2.kc b/src/test/kc/condition-integer-2.kc new file mode 100644 index 000000000..de66ac330 --- /dev/null +++ b/src/test/kc/condition-integer-2.kc @@ -0,0 +1,25 @@ +// Tests using integer conditions in while() / for() / do..while +// This should produce 'ba ba ba' at the top of the screen + +const byte* SCREEN = 0x0400; +byte idx = 0; + +void main() { + // for() + for( byte i=2;i;i--) { + SCREEN[idx++] = i; + } + SCREEN[idx++] = ' '; + // while() + byte j=3; + while( j-- ) { + SCREEN[idx++] = j; + } + SCREEN[idx++] = ' '; + // do...while() + byte k = 2; + do { + SCREEN[idx++] = k; + } while(k--); + +} \ No newline at end of file diff --git a/src/test/kc/condition-integer-3.kc b/src/test/kc/condition-integer-3.kc new file mode 100644 index 000000000..b09ad24fc --- /dev/null +++ b/src/test/kc/condition-integer-3.kc @@ -0,0 +1,12 @@ +// Tests using integer conditions in ternary operator +// This should produce '++0++' at the top of the screen + +const byte* SCREEN = 0x0400; + +void main() { + byte idx = 0; + for( signed byte i: -2..2) { + byte j = i?'+':'0'; + SCREEN[idx++] = j; + } +} \ No newline at end of file diff --git a/src/test/kc/condition-integer-4.kc b/src/test/kc/condition-integer-4.kc new file mode 100644 index 000000000..6f67ed742 --- /dev/null +++ b/src/test/kc/condition-integer-4.kc @@ -0,0 +1,19 @@ +// Tests using integer conditions in && and || operator +// This should produce '01010101', '00110011', '00010001', '01110111' at the top of the screen + +const byte* SCREEN = 0x0400; + +void main() { + byte idx = 0; + for( byte i:0..7) { + if(i&1) + (SCREEN+40*0)[idx] = '+'; + if(i&2) + (SCREEN+40*1)[idx] = '+'; + if(i&1 && i&2) + (SCREEN+40*2)[idx] = '+'; + if(i&1 || i&2) + (SCREEN+40*3)[idx] = '+'; + idx++; + } +} \ No newline at end of file diff --git a/src/test/ref/array-length-symbolic-min.log b/src/test/ref/array-length-symbolic-min.log index 45d5c45dc..ceaa57daf 100644 --- a/src/test/ref/array-length-symbolic-min.log +++ b/src/test/ref/array-length-symbolic-min.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::cur_item#0 ← (byte[SZ#0]) items#0 - (byte) main::sub#0 ← (number) 0 + (byte) main::sub#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte*) main::cur_item#1 ← phi( main/(byte*) main::cur_item#0 main::@1/(byte*) main::cur_item#1 ) @@ -50,16 +50,12 @@ SYMBOL TABLE SSA (byte) main::sub#2 Adding number conversion cast (unumber) $f in (byte) SZ#0 ← (number) $f -Adding number conversion cast (unumber) 0 in (byte) main::sub#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) SZ#0 ← (unumber)(number) $f -Inlining cast (byte) main::sub#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast $f -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Self Phi Eliminated (byte*) main::cur_item#1 Successful SSA optimization Pass2SelfPhiElimination diff --git a/src/test/ref/array-length-symbolic.log b/src/test/ref/array-length-symbolic.log index 1b375fe8b..fc02b1f2b 100644 --- a/src/test/ref/array-length-symbolic.log +++ b/src/test/ref/array-length-symbolic.log @@ -12,13 +12,13 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @1 (byte*) main::cur_item#0 ← (byte[$0]) items#0 (number~) main::$0 ← (byte) ITEM_COUNT#0 - (number) 1 - (byte) main::item#0 ← (number) 0 + (byte) main::item#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte*) main::cur_item#4 ← phi( main/(byte*) main::cur_item#0 main::@3/(byte*) main::cur_item#1 ) (byte) main::item#4 ← phi( main/(byte) main::item#0 main::@3/(byte) main::item#1 ) (number~) main::$1 ← (byte) ITEM_SIZE#0 - (number) 1 - (byte) main::sub#0 ← (number) 0 + (byte) main::sub#0 ← (byte) 0 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte*) main::cur_item#2 ← phi( main::@1/(byte*) main::cur_item#4 main::@2/(byte*) main::cur_item#2 ) @@ -93,10 +93,8 @@ Adding number conversion cast (unumber) 3 in (byte) ITEM_COUNT#0 ← (number) 3 Adding number conversion cast (unumber) 5 in (byte) ITEM_SIZE#0 ← (number) 5 Adding number conversion cast (unumber) 1 in (number~) main::$0 ← (byte) ITEM_COUNT#0 - (number) 1 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) ITEM_COUNT#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) main::item#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) main::$1 ← (byte) ITEM_SIZE#0 - (number) 1 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (byte) ITEM_SIZE#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) main::sub#0 ← (number) 0 Adding number conversion cast (unumber) $10 in (number~) main::$2 ← (byte) main::item#2 * (number) $10 Adding number conversion cast (unumber) main::$2 in (number~) main::$2 ← (byte) main::item#2 * (unumber)(number) $10 Adding number conversion cast (unumber) main::$3 in (number~) main::$3 ← (unumber~) main::$2 | (byte) main::sub#2 @@ -105,8 +103,6 @@ Adding number conversion cast (byte) to elements in (byte[$0]) items#0 ← { (by Successful SSA optimization PassNAddArrayNumberTypeConversions Inlining cast (byte) ITEM_COUNT#0 ← (unumber)(number) 3 Inlining cast (byte) ITEM_SIZE#0 ← (unumber)(number) 5 -Inlining cast (byte) main::item#0 ← (unumber)(number) 0 -Inlining cast (byte) main::sub#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 3 Simplifying constant integer cast 5 @@ -126,17 +122,13 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast $10 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $10 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$0 ← (byte) ITEM_COUNT#0 - (byte) 1 diff --git a/src/test/ref/bitmap-plotter.log b/src/test/ref/bitmap-plotter.log index f7f5b6ffd..0bb7034a2 100644 --- a/src/test/ref/bitmap-plotter.log +++ b/src/test/ref/bitmap-plotter.log @@ -135,7 +135,7 @@ plot::@return: scope:[plot] from plot to:@return init_plot_tables: scope:[init_plot_tables] from main::@5 (byte) init_plot_tables::bits#0 ← (number) $80 - (byte) init_plot_tables::x#0 ← (number) 0 + (byte) init_plot_tables::x#0 ← (byte) 0 to:init_plot_tables::@1 init_plot_tables::@1: scope:[init_plot_tables] from init_plot_tables init_plot_tables::@2 (byte) init_plot_tables::bits#3 ← phi( init_plot_tables/(byte) init_plot_tables::bits#0 init_plot_tables::@2/(byte) init_plot_tables::bits#4 ) @@ -164,7 +164,7 @@ init_plot_tables::@3: scope:[init_plot_tables] from init_plot_tables::@1 to:init_plot_tables::@2 init_plot_tables::@4: scope:[init_plot_tables] from init_plot_tables::@2 (byte*) init_plot_tables::yoffs#0 ← ((byte*)) (number) 0 - (byte) init_plot_tables::y#0 ← (number) 0 + (byte) init_plot_tables::y#0 ← (byte) 0 to:init_plot_tables::@5 init_plot_tables::@5: scope:[init_plot_tables] from init_plot_tables::@4 init_plot_tables::@6 (byte*) init_plot_tables::yoffs#2 ← phi( init_plot_tables::@4/(byte*) init_plot_tables::yoffs#0 init_plot_tables::@6/(byte*) init_plot_tables::yoffs#4 ) @@ -407,14 +407,12 @@ Adding number conversion cast (unumber) 8 in (byte) plots_cnt#0 ← (number) 8 Adding number conversion cast (unumber) 0 in (byte) plots::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (word) plot::plotter_y#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (byte) init_plot_tables::bits#0 ← (number) $80 -Adding number conversion cast (unumber) 0 in (byte) init_plot_tables::x#0 ← (number) 0 Adding number conversion cast (unumber) $f8 in (number~) init_plot_tables::$0 ← (byte) init_plot_tables::x#2 & (number) $f8 Adding number conversion cast (unumber) init_plot_tables::$0 in (number~) init_plot_tables::$0 ← (byte) init_plot_tables::x#2 & (unumber)(number) $f8 Adding number conversion cast (unumber) 2 in (number~) init_plot_tables::$2 ← (byte) init_plot_tables::bits#3 / (number) 2 Adding number conversion cast (unumber) init_plot_tables::$2 in (number~) init_plot_tables::$2 ← (byte) init_plot_tables::bits#3 / (unumber)(number) 2 Adding number conversion cast (unumber) 0 in (bool~) init_plot_tables::$3 ← (byte) init_plot_tables::bits#1 == (number) 0 Adding number conversion cast (unumber) $80 in (byte) init_plot_tables::bits#2 ← (number) $80 -Adding number conversion cast (unumber) 0 in (byte) init_plot_tables::y#0 ← (number) 0 Adding number conversion cast (unumber) 7 in (number~) init_plot_tables::$6 ← (byte) init_plot_tables::y#2 & (number) 7 Adding number conversion cast (unumber) init_plot_tables::$6 in (number~) init_plot_tables::$6 ← (byte) init_plot_tables::y#2 & (unumber)(number) 7 Adding number conversion cast (unumber) init_plot_tables::$8 in (number~) init_plot_tables::$8 ← (unumber~) init_plot_tables::$6 | (byte~) init_plot_tables::$7 @@ -450,10 +448,8 @@ Inlining cast (byte) plots::i#0 ← (unumber)(number) 0 Inlining cast (byte*) plot::plotter_x#0 ← (byte*)(number) 0 Inlining cast (word) plot::plotter_y#0 ← (unumber)(number) 0 Inlining cast (byte) init_plot_tables::bits#0 ← (unumber)(number) $80 -Inlining cast (byte) init_plot_tables::x#0 ← (unumber)(number) 0 Inlining cast (byte) init_plot_tables::bits#2 ← (unumber)(number) $80 Inlining cast (byte*) init_plot_tables::yoffs#0 ← (byte*)(number) 0 -Inlining cast (byte) init_plot_tables::y#0 ← (unumber)(number) 0 Inlining cast (unumber~) init_plot_tables::$16 ← (unumber)(number~) init_plot_tables::$13 Inlining cast *((byte*) init_screen::b#2) ← (unumber)(number) 0 Inlining cast *((byte*) init_screen::c#2) ← (unumber)(number) $14 @@ -495,13 +491,11 @@ Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 0 Simplifying constant integer cast 0 Simplifying constant integer cast $80 -Simplifying constant integer cast 0 Simplifying constant integer cast $f8 Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant pointer cast (byte*) 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 7 Simplifying constant integer cast 7 Simplifying constant integer cast 7 @@ -523,12 +517,10 @@ Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f8 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 7 diff --git a/src/test/ref/bitwise-not.log b/src/test/ref/bitwise-not.log index e44ba5f17..0a4bc8058 100644 --- a/src/test/ref/bitwise-not.log +++ b/src/test/ref/bitwise-not.log @@ -9,7 +9,7 @@ main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 (byte~) main::$0 ← ~ (byte) 1 *((byte*) main::SCREEN#0) ← (byte~) main::$0 - (byte) main::c#0 ← (number) 1 + (byte) main::c#0 ← (byte) 1 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::c#2 ← phi( main/(byte) main::c#0 main::@1/(byte) main::c#1 ) @@ -47,16 +47,10 @@ SYMBOL TABLE SSA (byte) main::c#1 (byte) main::c#2 -Adding number conversion cast (unumber) 1 in (byte) main::c#0 ← (number) 1 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::c#0 ← (unumber)(number) 1 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 1 -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$2 [9] if((byte) main::c#1!=rangelast(1,$1a)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant right-side identified [1] (byte~) main::$0 ← ~ (byte) 1 diff --git a/src/test/ref/bool-function.log b/src/test/ref/bool-function.log index a5918e8a0..a8627f6cb 100644 --- a/src/test/ref/bool-function.log +++ b/src/test/ref/bool-function.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA to:@2 main: scope:[main] from @2 (byte*) main::screen#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@3/(byte) main::i#1 ) @@ -108,7 +108,6 @@ SYMBOL TABLE SSA (byte*) main::screen (byte*) main::screen#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) main::$0 ← (byte) main::i#2 & (number) 1 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::i#2 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) main::$1 ← (unumber~) main::$0 == (number) 0 @@ -117,16 +116,13 @@ Adding number conversion cast (unumber) isSet::$0 in (number~) isSet::$0 ← (by Adding number conversion cast (unumber) 0 in (bool~) isSet::$1 ← (unumber~) isSet::$0 != (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 diff --git a/src/test/ref/bool-ifs.log b/src/test/ref/bool-ifs.log index be05abb0e..bd52c1ade 100644 --- a/src/test/ref/bool-ifs.log +++ b/src/test/ref/bool-ifs.log @@ -37,7 +37,7 @@ main::@return: scope:[main] from main::@4 to:@return bool_and: scope:[bool_and] from main (byte*) bool_and::screen#0 ← ((byte*)) (number) $400 - (byte) bool_and::i#0 ← (number) 0 + (byte) bool_and::i#0 ← (byte) 0 to:bool_and::@1 bool_and::@1: scope:[bool_and] from bool_and bool_and::@3 (byte) bool_and::i#2 ← phi( bool_and/(byte) bool_and::i#0 bool_and::@3/(byte) bool_and::i#1 ) @@ -66,7 +66,7 @@ bool_and::@return: scope:[bool_and] from bool_and::@3 to:@return bool_or: scope:[bool_or] from main::@1 (byte*) bool_or::screen#0 ← ((byte*)) (number) $428 - (byte) bool_or::i#0 ← (number) 0 + (byte) bool_or::i#0 ← (byte) 0 to:bool_or::@1 bool_or::@1: scope:[bool_or] from bool_or bool_or::@3 (byte) bool_or::i#2 ← phi( bool_or/(byte) bool_or::i#0 bool_or::@3/(byte) bool_or::i#1 ) @@ -95,7 +95,7 @@ bool_or::@return: scope:[bool_or] from bool_or::@3 to:@return bool_not: scope:[bool_not] from main::@2 (byte*) bool_not::screen#0 ← ((byte*)) (number) $450 - (byte) bool_not::i#0 ← (number) 0 + (byte) bool_not::i#0 ← (byte) 0 to:bool_not::@1 bool_not::@1: scope:[bool_not] from bool_not bool_not::@3 (byte) bool_not::i#2 ← phi( bool_not/(byte) bool_not::i#0 bool_not::@3/(byte) bool_not::i#1 ) @@ -125,7 +125,7 @@ bool_not::@return: scope:[bool_not] from bool_not::@3 to:@return bool_complex: scope:[bool_complex] from main::@3 (byte*) bool_complex::screen#0 ← ((byte*)) (number) $478 - (byte) bool_complex::i#0 ← (number) 0 + (byte) bool_complex::i#0 ← (byte) 0 to:bool_complex::@1 bool_complex::@1: scope:[bool_complex] from bool_complex bool_complex::@3 (byte) bool_complex::i#2 ← phi( bool_complex/(byte) bool_complex::i#0 bool_complex::@3/(byte) bool_complex::i#1 ) @@ -264,22 +264,18 @@ SYMBOL TABLE SSA (label) main::@4 (label) main::@return -Adding number conversion cast (unumber) 0 in (byte) bool_and::i#0 ← (number) 0 Adding number conversion cast (unumber) $a in (bool~) bool_and::$0 ← (byte) bool_and::i#2 < (number) $a Adding number conversion cast (unumber) 1 in (number~) bool_and::$1 ← (byte) bool_and::i#2 & (number) 1 Adding number conversion cast (unumber) bool_and::$1 in (number~) bool_and::$1 ← (byte) bool_and::i#2 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) bool_and::$2 ← (unumber~) bool_and::$1 == (number) 0 -Adding number conversion cast (unumber) 0 in (byte) bool_or::i#0 ← (number) 0 Adding number conversion cast (unumber) $a in (bool~) bool_or::$0 ← (byte) bool_or::i#2 < (number) $a Adding number conversion cast (unumber) 1 in (number~) bool_or::$1 ← (byte) bool_or::i#2 & (number) 1 Adding number conversion cast (unumber) bool_or::$1 in (number~) bool_or::$1 ← (byte) bool_or::i#2 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) bool_or::$2 ← (unumber~) bool_or::$1 == (number) 0 -Adding number conversion cast (unumber) 0 in (byte) bool_not::i#0 ← (number) 0 Adding number conversion cast (unumber) $a in (bool~) bool_not::$0 ← (byte) bool_not::i#2 < (number) $a Adding number conversion cast (unumber) 1 in (number~) bool_not::$1 ← (byte) bool_not::i#2 & (number) 1 Adding number conversion cast (unumber) bool_not::$1 in (number~) bool_not::$1 ← (byte) bool_not::i#2 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) bool_not::$2 ← (unumber~) bool_not::$1 == (number) 0 -Adding number conversion cast (unumber) 0 in (byte) bool_complex::i#0 ← (number) 0 Adding number conversion cast (unumber) $a in (bool~) bool_complex::$0 ← (byte) bool_complex::i#2 < (number) $a Adding number conversion cast (unumber) 1 in (number~) bool_complex::$1 ← (byte) bool_complex::i#2 & (number) 1 Adding number conversion cast (unumber) bool_complex::$1 in (number~) bool_complex::$1 ← (byte) bool_complex::i#2 & (unumber)(number) 1 @@ -290,31 +286,23 @@ Adding number conversion cast (unumber) bool_complex::$5 in (number~) bool_compl Adding number conversion cast (unumber) 0 in (bool~) bool_complex::$6 ← (unumber~) bool_complex::$5 == (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) bool_and::screen#0 ← (byte*)(number) $400 -Inlining cast (byte) bool_and::i#0 ← (unumber)(number) 0 Inlining cast (byte*) bool_or::screen#0 ← (byte*)(number) $428 -Inlining cast (byte) bool_or::i#0 ← (unumber)(number) 0 Inlining cast (byte*) bool_not::screen#0 ← (byte*)(number) $450 -Inlining cast (byte) bool_not::i#0 ← (unumber)(number) 0 Inlining cast (byte*) bool_complex::screen#0 ← (byte*)(number) $478 -Inlining cast (byte) bool_complex::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1064 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1104 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1144 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Simplifying constant integer cast 1 Simplifying constant integer cast 0 @@ -322,19 +310,15 @@ Simplifying constant integer cast $a Simplifying constant integer cast 1 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) $a +Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $a -Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/bool-vars.log b/src/test/ref/bool-vars.log index 480622a96..0dd937a86 100644 --- a/src/test/ref/bool-vars.log +++ b/src/test/ref/bool-vars.log @@ -37,7 +37,7 @@ main::@return: scope:[main] from main::@4 to:@return bool_and: scope:[bool_and] from main (byte*) bool_and::screen#0 ← ((byte*)) (number) $400 - (byte) bool_and::i#0 ← (number) 0 + (byte) bool_and::i#0 ← (byte) 0 to:bool_and::@1 bool_and::@1: scope:[bool_and] from bool_and bool_and::@3 (byte) bool_and::i#2 ← phi( bool_and/(byte) bool_and::i#0 bool_and::@3/(byte) bool_and::i#1 ) @@ -69,7 +69,7 @@ bool_and::@return: scope:[bool_and] from bool_and::@3 to:@return bool_or: scope:[bool_or] from main::@1 (byte*) bool_or::screen#0 ← ((byte*)) (number) $428 - (byte) bool_or::i#0 ← (number) 0 + (byte) bool_or::i#0 ← (byte) 0 to:bool_or::@1 bool_or::@1: scope:[bool_or] from bool_or bool_or::@3 (byte) bool_or::i#2 ← phi( bool_or/(byte) bool_or::i#0 bool_or::@3/(byte) bool_or::i#1 ) @@ -101,7 +101,7 @@ bool_or::@return: scope:[bool_or] from bool_or::@3 to:@return bool_not: scope:[bool_not] from main::@2 (byte*) bool_not::screen#0 ← ((byte*)) (number) $450 - (byte) bool_not::i#0 ← (number) 0 + (byte) bool_not::i#0 ← (byte) 0 to:bool_not::@1 bool_not::@1: scope:[bool_not] from bool_not bool_not::@3 (byte) bool_not::i#2 ← phi( bool_not/(byte) bool_not::i#0 bool_not::@3/(byte) bool_not::i#1 ) @@ -134,7 +134,7 @@ bool_not::@return: scope:[bool_not] from bool_not::@3 to:@return bool_complex: scope:[bool_complex] from main::@3 (byte*) bool_complex::screen#0 ← ((byte*)) (number) $478 - (byte) bool_complex::i#0 ← (number) 0 + (byte) bool_complex::i#0 ← (byte) 0 to:bool_complex::@1 bool_complex::@1: scope:[bool_complex] from bool_complex bool_complex::@3 (byte) bool_complex::i#2 ← phi( bool_complex/(byte) bool_complex::i#0 bool_complex::@3/(byte) bool_complex::i#1 ) @@ -300,70 +300,54 @@ SYMBOL TABLE SSA (label) main::@4 (label) main::@return -Adding number conversion cast (unumber) 0 in (byte) bool_and::i#0 ← (number) 0 Adding number conversion cast (unumber) $a in (bool~) bool_and::$0 ← (byte) bool_and::i#2 < (number) $a Adding number conversion cast (unumber) 1 in (number~) bool_and::$1 ← (byte) bool_and::i#2 & (number) 1 Adding number conversion cast (unumber) bool_and::$1 in (number~) bool_and::$1 ← (byte) bool_and::i#2 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) bool_and::$2 ← (unumber~) bool_and::$1 == (number) 0 -Adding number conversion cast (unumber) 0 in (byte) bool_or::i#0 ← (number) 0 Adding number conversion cast (unumber) $a in (bool~) bool_or::$0 ← (byte) bool_or::i#2 < (number) $a Adding number conversion cast (unumber) 1 in (number~) bool_or::$1 ← (byte) bool_or::i#2 & (number) 1 Adding number conversion cast (unumber) bool_or::$1 in (number~) bool_or::$1 ← (byte) bool_or::i#2 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) bool_or::$2 ← (unumber~) bool_or::$1 == (number) 0 -Adding number conversion cast (unumber) 0 in (byte) bool_not::i#0 ← (number) 0 Adding number conversion cast (unumber) $a in (bool~) bool_not::$0 ← (byte) bool_not::i#2 < (number) $a Adding number conversion cast (unumber) 1 in (number~) bool_not::$1 ← (byte) bool_not::i#2 & (number) 1 Adding number conversion cast (unumber) bool_not::$1 in (number~) bool_not::$1 ← (byte) bool_not::i#2 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) bool_not::$2 ← (unumber~) bool_not::$1 == (number) 0 -Adding number conversion cast (unumber) 0 in (byte) bool_complex::i#0 ← (number) 0 Adding number conversion cast (unumber) $a in (bool~) bool_complex::$0 ← (byte) bool_complex::i#2 < (number) $a Adding number conversion cast (unumber) 1 in (number~) bool_complex::$1 ← (byte) bool_complex::i#2 & (number) 1 Adding number conversion cast (unumber) bool_complex::$1 in (number~) bool_complex::$1 ← (byte) bool_complex::i#2 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) bool_complex::$2 ← (unumber~) bool_complex::$1 == (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) bool_and::screen#0 ← (byte*)(number) $400 -Inlining cast (byte) bool_and::i#0 ← (unumber)(number) 0 Inlining cast (byte*) bool_or::screen#0 ← (byte*)(number) $428 -Inlining cast (byte) bool_or::i#0 ← (unumber)(number) 0 Inlining cast (byte*) bool_not::screen#0 ← (byte*)(number) $450 -Inlining cast (byte) bool_not::i#0 ← (unumber)(number) 0 Inlining cast (byte*) bool_complex::screen#0 ← (byte*)(number) $478 -Inlining cast (byte) bool_complex::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1064 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1104 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1144 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Simplifying constant integer cast 1 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) $a +Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $a -Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/c64dtv-8bppcharstretch.log b/src/test/ref/c64dtv-8bppcharstretch.log index 8b0940e40..996d8a772 100644 --- a/src/test/ref/c64dtv-8bppcharstretch.log +++ b/src/test/ref/c64dtv-8bppcharstretch.log @@ -223,7 +223,7 @@ main::@17: scope:[main] from main (number~) main::$23 ← (number~) main::$22 / (number) 4 (number~) main::$24 ← (byte~) main::$19 | (number~) main::$23 *((byte*) VIC_MEMORY#0) ← (number~) main::$24 - (byte) main::j#0 ← (number) 0 + (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 ) @@ -281,12 +281,12 @@ gfx_init::@return: scope:[gfx_init] from gfx_init::@2 to:@return gfx_init_screen0: scope:[gfx_init_screen0] from gfx_init (byte*) gfx_init_screen0::ch#0 ← (byte*) SCREEN#0 - (byte) gfx_init_screen0::cy#0 ← (number) 0 + (byte) gfx_init_screen0::cy#0 ← (byte) 0 to:gfx_init_screen0::@1 gfx_init_screen0::@1: scope:[gfx_init_screen0] from gfx_init_screen0 gfx_init_screen0::@3 (byte*) gfx_init_screen0::ch#3 ← phi( gfx_init_screen0/(byte*) gfx_init_screen0::ch#0 gfx_init_screen0::@3/(byte*) gfx_init_screen0::ch#4 ) (byte) gfx_init_screen0::cy#4 ← phi( gfx_init_screen0/(byte) gfx_init_screen0::cy#0 gfx_init_screen0::@3/(byte) gfx_init_screen0::cy#1 ) - (byte) gfx_init_screen0::cx#0 ← (number) 0 + (byte) gfx_init_screen0::cx#0 ← (byte) 0 to:gfx_init_screen0::@2 gfx_init_screen0::@2: scope:[gfx_init_screen0] from gfx_init_screen0::@1 gfx_init_screen0::@2 (byte*) gfx_init_screen0::ch#2 ← phi( gfx_init_screen0::@1/(byte*) gfx_init_screen0::ch#3 gfx_init_screen0::@2/(byte*) gfx_init_screen0::ch#1 ) @@ -330,14 +330,14 @@ gfx_init_plane_charset8::@9: scope:[gfx_init_plane_charset8] from gfx_init_plan (byte*) gfx_init_plane_charset8::chargen#0 ← (byte*~) gfx_init_plane_charset8::$6 *((byte*) PROCPORT#0) ← (byte) PROCPORT_RAM_CHARROM#0 (byte) gfx_init_plane_charset8::col#0 ← (number) 0 - (byte) gfx_init_plane_charset8::ch#0 ← (number) 0 + (byte) gfx_init_plane_charset8::ch#0 ← (byte) 0 to:gfx_init_plane_charset8::@1 gfx_init_plane_charset8::@1: scope:[gfx_init_plane_charset8] from gfx_init_plane_charset8::@7 gfx_init_plane_charset8::@9 (byte) gfx_init_plane_charset8::ch#8 ← phi( gfx_init_plane_charset8::@7/(byte) gfx_init_plane_charset8::ch#1 gfx_init_plane_charset8::@9/(byte) gfx_init_plane_charset8::ch#0 ) (byte) gfx_init_plane_charset8::col#6 ← phi( gfx_init_plane_charset8::@7/(byte) gfx_init_plane_charset8::col#8 gfx_init_plane_charset8::@9/(byte) gfx_init_plane_charset8::col#0 ) (byte*) gfx_init_plane_charset8::gfxa#6 ← phi( gfx_init_plane_charset8::@7/(byte*) gfx_init_plane_charset8::gfxa#8 gfx_init_plane_charset8::@9/(byte*) gfx_init_plane_charset8::gfxa#0 ) (byte*) gfx_init_plane_charset8::chargen#3 ← phi( gfx_init_plane_charset8::@7/(byte*) gfx_init_plane_charset8::chargen#5 gfx_init_plane_charset8::@9/(byte*) gfx_init_plane_charset8::chargen#0 ) - (byte) gfx_init_plane_charset8::cr#0 ← (number) 0 + (byte) gfx_init_plane_charset8::cr#0 ← (byte) 0 to:gfx_init_plane_charset8::@2 gfx_init_plane_charset8::@2: scope:[gfx_init_plane_charset8] from gfx_init_plane_charset8::@1 gfx_init_plane_charset8::@6 (byte) gfx_init_plane_charset8::ch#7 ← phi( gfx_init_plane_charset8::@1/(byte) gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::@6/(byte) gfx_init_plane_charset8::ch#3 ) @@ -347,7 +347,7 @@ gfx_init_plane_charset8::@2: scope:[gfx_init_plane_charset8] from gfx_init_plan (byte*) gfx_init_plane_charset8::chargen#2 ← phi( gfx_init_plane_charset8::@1/(byte*) gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::@6/(byte*) gfx_init_plane_charset8::chargen#4 ) (byte) gfx_init_plane_charset8::bits#0 ← *((byte*) gfx_init_plane_charset8::chargen#2) (byte*) gfx_init_plane_charset8::chargen#1 ← ++ (byte*) gfx_init_plane_charset8::chargen#2 - (byte) gfx_init_plane_charset8::cp#0 ← (number) 0 + (byte) gfx_init_plane_charset8::cp#0 ← (byte) 0 to:gfx_init_plane_charset8::@3 gfx_init_plane_charset8::@3: scope:[gfx_init_plane_charset8] from gfx_init_plane_charset8::@2 gfx_init_plane_charset8::@4 (byte) gfx_init_plane_charset8::ch#5 ← phi( gfx_init_plane_charset8::@2/(byte) gfx_init_plane_charset8::ch#7 gfx_init_plane_charset8::@4/(byte) gfx_init_plane_charset8::ch#4 ) @@ -741,7 +741,6 @@ Adding number conversion cast (unumber) main::$22 in (number~) main::$22 ← > ( Adding number conversion cast (unumber) 4 in (number~) main::$23 ← (unumber~) main::$22 / (number) 4 Adding number conversion cast (unumber) main::$23 in (number~) main::$23 ← (unumber~) main::$22 / (unumber)(number) 4 Adding number conversion cast (unumber) main::$24 in (number~) main::$24 ← (byte~) main::$19 | (unumber~) main::$23 -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 Adding number conversion cast (unumber) 3 in (number~) main::$28 ← (byte~) main::$27 | (number) 3 Adding number conversion cast (unumber) main::$28 in (number~) main::$28 ← (byte~) main::$27 | (unumber)(number) 3 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 @@ -752,8 +751,6 @@ Adding number conversion cast (unumber) main::$33 in (number~) main::$33 ← (by Adding number conversion cast (unumber) $10 in (number~) main::$34 ← (byte) main::rst#1 * (number) $10 Adding number conversion cast (unumber) main::$34 in (number~) main::$34 ← (byte) main::rst#1 * (unumber)(number) $10 Adding number conversion cast (unumber) $f2 in (bool~) main::$35 ← (byte) main::rst#1 != (number) $f2 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_screen0::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_screen0::cx#0 ← (number) 0 Adding number conversion cast (unumber) $f in (number~) gfx_init_screen0::$0 ← (byte) gfx_init_screen0::cy#2 & (number) $f Adding number conversion cast (unumber) gfx_init_screen0::$0 in (number~) gfx_init_screen0::$0 ← (byte) gfx_init_screen0::cy#2 & (unumber)(number) $f Adding number conversion cast (unumber) $10 in (number~) gfx_init_screen0::$1 ← (unumber~) gfx_init_screen0::$0 * (number) $10 @@ -768,9 +765,6 @@ Adding number conversion cast (unumber) $4000 in (number~) gfx_init_plane_charse Adding number conversion cast (unumber) gfx_init_plane_charset8::$5 in (number~) gfx_init_plane_charset8::$5 ← (unumber)(number) $4000 + (unumber~) gfx_init_plane_charset8::$4 Adding number conversion cast (unumber) 1 in (byte*~) gfx_init_plane_charset8::$6 ← (byte*) CHARGEN#0 + (number) 1 Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_charset8::col#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_charset8::ch#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_charset8::cr#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_charset8::cp#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_charset8::c#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (number~) gfx_init_plane_charset8::$10 ← (byte) gfx_init_plane_charset8::bits#2 & (number) $80 Adding number conversion cast (unumber) gfx_init_plane_charset8::$10 in (number~) gfx_init_plane_charset8::$10 ← (byte) gfx_init_plane_charset8::bits#2 & (unumber)(number) $80 @@ -833,18 +827,12 @@ Inlining cast (byte~) main::$14 ← (byte)(unumber~) main::$13 Inlining cast (word~) main::$16 ← (word)(byte*) SCREEN#0 Inlining cast (byte~) main::$19 ← (byte)(unumber~) main::$18 Inlining cast (word~) main::$20 ← (word)(byte*) SCREEN#0 -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 Inlining cast (byte) main::rst#0 ← (unumber)(number) $42 -Inlining cast (byte) gfx_init_screen0::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_screen0::cx#0 ← (unumber)(number) 0 Inlining cast (byte~) gfx_init_plane_charset8::$1 ← (byte)(byte*~) gfx_init_plane_charset8::$0 Inlining cast (word~) gfx_init_plane_charset8::$3 ← (word)(byte*) CHARSET8#0 Inlining cast (byte*) gfx_init_plane_charset8::gfxa#0 ← (byte*)(unumber~) gfx_init_plane_charset8::$5 Inlining cast (byte) gfx_init_plane_charset8::col#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_plane_charset8::ch#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_plane_charset8::cr#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_plane_charset8::cp#0 ← (unumber)(number) 0 Inlining cast (byte) gfx_init_plane_charset8::c#0 ← (unumber)(number) 0 Inlining cast (byte~) gfx_init_plane_charset8::$8 ← (byte)(number~) gfx_init_plane_charset8::$7 Successful SSA optimization Pass2InlineCast @@ -905,15 +893,12 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast $40 Simplifying constant integer cast $3fff Simplifying constant integer cast 4 -Simplifying constant integer cast 0 Simplifying constant integer cast 3 Simplifying constant integer cast 0 Simplifying constant integer cast $42 Simplifying constant integer cast 7 Simplifying constant integer cast $10 Simplifying constant integer cast $f2 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast $10 Simplifying constant integer cast $f @@ -923,9 +908,6 @@ Simplifying constant integer cast $4000 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -959,15 +941,12 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) $40 Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $42 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $f2 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $f @@ -977,9 +956,6 @@ Finalized unsigned number type (word) $4000 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 diff --git a/src/test/ref/c64dtv-8bppchunkystretch.asm b/src/test/ref/c64dtv-8bppchunkystretch.asm index 5d6615f06..350dbd2a5 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.asm +++ b/src/test/ref/c64dtv-8bppchunkystretch.asm @@ -205,7 +205,7 @@ gfx_init_chunky: { lda #>$4000 sta gfxb+1 b1: - lda #0 + lda #<0 sta x sta x+1 b2: diff --git a/src/test/ref/c64dtv-8bppchunkystretch.cfg b/src/test/ref/c64dtv-8bppchunkystretch.cfg index ca159b649..9b42f8f04 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.cfg +++ b/src/test/ref/c64dtv-8bppchunkystretch.cfg @@ -66,7 +66,7 @@ gfx_init_chunky::@1: scope:[gfx_init_chunky] from gfx_init_chunky gfx_init_chun to:gfx_init_chunky::@2 gfx_init_chunky::@2: scope:[gfx_init_chunky] from gfx_init_chunky::@1 gfx_init_chunky::@3 [41] (byte) gfx_init_chunky::gfxbCpuBank#4 ← phi( gfx_init_chunky::@1/(byte) gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::@3/(byte) gfx_init_chunky::gfxbCpuBank#8 ) - [41] (word) gfx_init_chunky::x#2 ← phi( gfx_init_chunky::@1/(byte) 0 gfx_init_chunky::@3/(word) gfx_init_chunky::x#1 ) + [41] (word) gfx_init_chunky::x#2 ← phi( gfx_init_chunky::@1/(word) 0 gfx_init_chunky::@3/(word) gfx_init_chunky::x#1 ) [41] (byte*) gfx_init_chunky::gfxb#3 ← phi( gfx_init_chunky::@1/(byte*) gfx_init_chunky::gfxb#5 gfx_init_chunky::@3/(byte*) gfx_init_chunky::gfxb#1 ) [42] if((byte*) gfx_init_chunky::gfxb#3!=(word) $8000) goto gfx_init_chunky::@3 to:gfx_init_chunky::@4 diff --git a/src/test/ref/c64dtv-8bppchunkystretch.log b/src/test/ref/c64dtv-8bppchunkystretch.log index c51d4aa04..fef6a8168 100644 --- a/src/test/ref/c64dtv-8bppchunkystretch.log +++ b/src/test/ref/c64dtv-8bppchunkystretch.log @@ -205,7 +205,7 @@ main::@17: scope:[main] from main (number~) main::$22 ← (number~) main::$21 / (number) 4 (number~) main::$23 ← (byte~) main::$18 | (number~) main::$22 *((byte*) VIC_MEMORY#0) ← (number~) main::$23 - (byte) main::j#0 ← (number) 0 + (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 ) @@ -261,13 +261,13 @@ gfx_init_chunky::@7: scope:[gfx_init_chunky] from gfx_init_chunky (byte) gfx_init_chunky::gfxbCpuBank#3 ← phi( gfx_init_chunky/(byte) gfx_init_chunky::gfxbCpuBank#0 ) (byte) gfx_init_chunky::gfxbCpuBank#1 ← ++ (byte) gfx_init_chunky::gfxbCpuBank#3 (byte*) gfx_init_chunky::gfxb#0 ← ((byte*)) (number) $4000 - (byte) gfx_init_chunky::y#0 ← (number) 0 + (byte) gfx_init_chunky::y#0 ← (byte) 0 to:gfx_init_chunky::@1 gfx_init_chunky::@1: scope:[gfx_init_chunky] from gfx_init_chunky::@5 gfx_init_chunky::@7 (byte) gfx_init_chunky::gfxbCpuBank#7 ← phi( gfx_init_chunky::@5/(byte) gfx_init_chunky::gfxbCpuBank#9 gfx_init_chunky::@7/(byte) gfx_init_chunky::gfxbCpuBank#1 ) (byte) gfx_init_chunky::y#6 ← phi( gfx_init_chunky::@5/(byte) gfx_init_chunky::y#1 gfx_init_chunky::@7/(byte) gfx_init_chunky::y#0 ) (byte*) gfx_init_chunky::gfxb#5 ← phi( gfx_init_chunky::@5/(byte*) gfx_init_chunky::gfxb#6 gfx_init_chunky::@7/(byte*) gfx_init_chunky::gfxb#0 ) - (word) gfx_init_chunky::x#0 ← (number) 0 + (word) gfx_init_chunky::x#0 ← (word) 0 to:gfx_init_chunky::@2 gfx_init_chunky::@2: scope:[gfx_init_chunky] from gfx_init_chunky::@1 gfx_init_chunky::@3 (byte) gfx_init_chunky::gfxbCpuBank#6 ← phi( gfx_init_chunky::@1/(byte) gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::@3/(byte) gfx_init_chunky::gfxbCpuBank#8 ) @@ -556,7 +556,6 @@ Adding number conversion cast (unumber) main::$21 in (number~) main::$21 ← > ( Adding number conversion cast (unumber) 4 in (number~) main::$22 ← (unumber~) main::$21 / (number) 4 Adding number conversion cast (unumber) main::$22 in (number~) main::$22 ← (unumber~) main::$21 / (unumber)(number) 4 Adding number conversion cast (unumber) main::$23 in (number~) main::$23 ← (byte~) main::$18 | (unumber~) main::$22 -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 Adding number conversion cast (unumber) 3 in (number~) main::$27 ← (byte~) main::$26 | (number) 3 Adding number conversion cast (unumber) main::$27 in (number~) main::$27 ← (byte~) main::$26 | (unumber)(number) 3 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 @@ -568,8 +567,6 @@ Adding number conversion cast (unumber) $10 in (number~) main::$33 ← (byte) ma Adding number conversion cast (unumber) main::$33 in (number~) main::$33 ← (byte) main::rst#1 * (unumber)(number) $10 Adding number conversion cast (unumber) $f2 in (bool~) main::$34 ← (byte) main::rst#1 != (number) $f2 Adding number conversion cast (unumber) $4000 in (byte*~) gfx_init_chunky::$0 ← (byte*) CHUNKY#0 / (number) $4000 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_chunky::y#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) gfx_init_chunky::x#0 ← (number) 0 Adding number conversion cast (unumber) $8000 in (bool~) gfx_init_chunky::$6 ← (byte*) gfx_init_chunky::gfxb#3 == (number) $8000 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) PROCPORT_DDR#0 ← (byte*)(number) 0 @@ -615,13 +612,10 @@ Inlining cast (byte~) main::$13 ← (byte)(unumber~) main::$12 Inlining cast (word~) main::$15 ← (word)(byte*) CHUNKY#0 Inlining cast (byte~) main::$18 ← (byte)(unumber~) main::$17 Inlining cast (word~) main::$19 ← (word)(byte*) CHUNKY#0 -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 Inlining cast (byte) main::rst#0 ← (unumber)(number) $42 Inlining cast (byte~) gfx_init_chunky::$1 ← (byte)(byte*~) gfx_init_chunky::$0 Inlining cast (byte*) gfx_init_chunky::gfxb#0 ← (byte*)(number) $4000 -Inlining cast (byte) gfx_init_chunky::y#0 ← (unumber)(number) 0 -Inlining cast (word) gfx_init_chunky::x#0 ← (unumber)(number) 0 Inlining cast (byte~) gfx_init_chunky::$10 ← (byte)(word~) gfx_init_chunky::$9 Inlining cast (byte*) gfx_init_chunky::gfxb#2 ← (byte*)(number) $4000 Inlining cast (byte~) gfx_init_chunky::$4 ← (byte)(number~) gfx_init_chunky::$3 @@ -671,7 +665,6 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast $40 Simplifying constant integer cast $3fff Simplifying constant integer cast 4 -Simplifying constant integer cast 0 Simplifying constant integer cast 3 Simplifying constant integer cast 0 Simplifying constant integer cast $42 @@ -680,8 +673,6 @@ Simplifying constant integer cast $10 Simplifying constant integer cast $f2 Simplifying constant integer cast $4000 Simplifying constant pointer cast (byte*) 16384 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $8000 Simplifying constant pointer cast (byte*) 16384 Successful SSA optimization PassNCastSimplification @@ -710,7 +701,6 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) $40 Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $42 @@ -718,8 +708,6 @@ Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $f2 Finalized unsigned number type (word) $4000 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $8000 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$7 ← (byte~) main::$6 | (byte) 3 @@ -948,7 +936,7 @@ Constant inlined main::$12 = (word)(const byte*) CHUNKY#0/(word) $4000 Constant inlined main::$13 = (byte)(word)(const byte*) CHUNKY#0/(word) $4000 Constant inlined main::$14 = (byte) 3^(byte)(word)(const byte*) CHUNKY#0/(word) $4000 Constant inlined gfx_init_chunky::y#0 = (byte) 0 -Constant inlined gfx_init_chunky::x#0 = (byte) 0 +Constant inlined gfx_init_chunky::x#0 = (word) 0 Constant inlined main::$30 = (const byte) VIC_DEN#0|(const byte) VIC_ECM#0|(const byte) VIC_RSEL#0 Constant inlined main::$10 = >(const byte*) CHUNKY#0 Constant inlined main::$11 = (word)(const byte*) CHUNKY#0 @@ -1102,7 +1090,7 @@ gfx_init_chunky::@1: scope:[gfx_init_chunky] from gfx_init_chunky gfx_init_chun to:gfx_init_chunky::@2 gfx_init_chunky::@2: scope:[gfx_init_chunky] from gfx_init_chunky::@1 gfx_init_chunky::@3 [41] (byte) gfx_init_chunky::gfxbCpuBank#4 ← phi( gfx_init_chunky::@1/(byte) gfx_init_chunky::gfxbCpuBank#7 gfx_init_chunky::@3/(byte) gfx_init_chunky::gfxbCpuBank#8 ) - [41] (word) gfx_init_chunky::x#2 ← phi( gfx_init_chunky::@1/(byte) 0 gfx_init_chunky::@3/(word) gfx_init_chunky::x#1 ) + [41] (word) gfx_init_chunky::x#2 ← phi( gfx_init_chunky::@1/(word) 0 gfx_init_chunky::@3/(word) gfx_init_chunky::x#1 ) [41] (byte*) gfx_init_chunky::gfxb#3 ← phi( gfx_init_chunky::@1/(byte*) gfx_init_chunky::gfxb#5 gfx_init_chunky::@3/(byte*) gfx_init_chunky::gfxb#1 ) [42] if((byte*) gfx_init_chunky::gfxb#3!=(word) $8000) goto gfx_init_chunky::@3 to:gfx_init_chunky::@4 @@ -1575,10 +1563,10 @@ gfx_init_chunky: { //SEG67 [41] phi from gfx_init_chunky::@1 to gfx_init_chunky::@2 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2] b2_from_b1: //SEG68 [41] phi (byte) gfx_init_chunky::gfxbCpuBank#4 = (byte) gfx_init_chunky::gfxbCpuBank#7 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#0] -- register_copy - //SEG69 [41] phi (word) gfx_init_chunky::x#2 = (byte) 0 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#1] -- vwuz1=vbuc1 - lda #0 + //SEG69 [41] phi (word) gfx_init_chunky::x#2 = (word) 0 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#1] -- vwuz1=vwuc1 + lda #<0 sta x - lda #0 + lda #>0 sta x+1 //SEG70 [41] phi (byte*) gfx_init_chunky::gfxb#3 = (byte*) gfx_init_chunky::gfxb#5 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#2] -- register_copy jmp b2 @@ -2109,10 +2097,10 @@ gfx_init_chunky: { //SEG67 [41] phi from gfx_init_chunky::@1 to gfx_init_chunky::@2 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2] b2_from_b1: //SEG68 [41] phi (byte) gfx_init_chunky::gfxbCpuBank#4 = (byte) gfx_init_chunky::gfxbCpuBank#7 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#0] -- register_copy - //SEG69 [41] phi (word) gfx_init_chunky::x#2 = (byte) 0 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#1] -- vwuz1=vbuc1 - lda #0 + //SEG69 [41] phi (word) gfx_init_chunky::x#2 = (word) 0 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#1] -- vwuz1=vwuc1 + lda #<0 sta x - lda #0 + lda #>0 sta x+1 //SEG70 [41] phi (byte*) gfx_init_chunky::gfxb#3 = (byte*) gfx_init_chunky::gfxb#5 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#2] -- register_copy jmp b2 @@ -2259,7 +2247,7 @@ Removing instruction jmp breturn Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination Removing instruction lda #0 -Removing instruction lda #0 +Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b1 with b1 Replacing label b3_from_b2 with b3 @@ -2718,8 +2706,8 @@ gfx_init_chunky: { b1: //SEG67 [41] phi from gfx_init_chunky::@1 to gfx_init_chunky::@2 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2] //SEG68 [41] phi (byte) gfx_init_chunky::gfxbCpuBank#4 = (byte) gfx_init_chunky::gfxbCpuBank#7 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#0] -- register_copy - //SEG69 [41] phi (word) gfx_init_chunky::x#2 = (byte) 0 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#1] -- vwuz1=vbuc1 - lda #0 + //SEG69 [41] phi (word) gfx_init_chunky::x#2 = (word) 0 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#1] -- vwuz1=vwuc1 + lda #<0 sta x sta x+1 //SEG70 [41] phi (byte*) gfx_init_chunky::gfxb#3 = (byte*) gfx_init_chunky::gfxb#5 [phi:gfx_init_chunky::@1->gfx_init_chunky::@2#2] -- register_copy diff --git a/src/test/ref/c64dtv-blittermin.log b/src/test/ref/c64dtv-blittermin.log index de6f815af..68698f39a 100644 --- a/src/test/ref/c64dtv-blittermin.log +++ b/src/test/ref/c64dtv-blittermin.log @@ -203,7 +203,7 @@ main: scope:[main] from @6 (byte~) main::$14 ← (byte~) main::$13 | (byte) DTV_BLIT_DEST_FWD#0 *((byte*) DTV_BLITTER_CONTROL#0) ← (byte~) main::$14 *((byte*) DTV_BLITTER_CONTROL2#0) ← (byte) DTV_BLIT_DEST_CONT#0 - (byte) main::r#0 ← (number) 0 + (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 ) @@ -383,7 +383,6 @@ Adding number conversion cast (unumber) 0 in *((byte*) DTV_BLITTER_DEST_MOD_LO#0 Adding number conversion cast (unumber) 0 in *((byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (number) 0 Adding number conversion cast (unumber) $10 in *((byte*) DTV_BLITTER_DEST_STEP#0) ← (number) $10 Adding number conversion cast (unumber) 0 in *((byte*) DTV_BLITTER_LEN_HI#0) ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::r#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$16 ← (byte~) main::$15 != (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (byte) to elements in (byte[]) SRCB#0 ← { (byte)(number) $80 } @@ -444,7 +443,6 @@ Inlining cast *((byte*) DTV_BLITTER_DEST_MOD_LO#0) ← (unumber)(number) 0 Inlining cast *((byte*) DTV_BLITTER_DEST_MOD_HI#0) ← (unumber)(number) 0 Inlining cast *((byte*) DTV_BLITTER_DEST_STEP#0) ← (unumber)(number) $10 Inlining cast *((byte*) DTV_BLITTER_LEN_HI#0) ← (unumber)(number) 0 -Inlining cast (byte) main::r#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53311 Simplifying constant integer cast 1 @@ -504,7 +502,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $10 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 @@ -531,7 +528,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::r#2 = (byte) main::r#3 Successful SSA optimization Pass2AliasElimination diff --git a/src/test/ref/c64dtv-color.log b/src/test/ref/c64dtv-color.log index ae65a8266..4a3e46d50 100644 --- a/src/test/ref/c64dtv-color.log +++ b/src/test/ref/c64dtv-color.log @@ -142,7 +142,7 @@ main::@4: scope:[main] from main::@1 main::@4 to:main::@6 main::@6: scope:[main] from main::@4 *((byte*) BGCOL#0) ← (number) 0 - (byte) main::r#0 ← (number) $31 + (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 ) @@ -153,7 +153,7 @@ main::@10: scope:[main] from main::@10 main::@6 if((bool~) main::$3) goto main::@10 to:main::@11 main::@11: scope:[main] from main::@10 - (byte) main::c#0 ← (number) 0 + (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 ) @@ -227,8 +227,6 @@ Adding number conversion cast (unumber) 4 in (byte) DTV_HIGHCOLOR#0 ← (number) Adding number conversion cast (unumber) $20 in (byte) DTV_BADLINE_OFF#0 ← (number) $20 Adding number conversion cast (unumber) $40 in (bool~) main::$2 ← *((byte*) RASTER#0) != (number) $40 Adding number conversion cast (unumber) 0 in *((byte*) BGCOL#0) ← (number) 0 -Adding number conversion cast (unumber) $31 in (byte) main::r#0 ← (number) $31 -Adding number conversion cast (unumber) 0 in (byte) main::c#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (byte) to elements in (byte[$10]) main::palette#0 ← { (byte)(number) 0, (byte)(number) 1, (byte)(number) 2, (byte)(number) 3, (byte)(number) 4, (byte)(number) 5, (byte)(number) 6, (byte)(number) 7, (byte)(number) 8, (byte)(number) 9, (byte)(number) $a, (byte)(number) $b, (byte)(number) $c, (byte)(number) $d, (byte)(number) $e, (byte)(number) $f } Successful SSA optimization PassNAddArrayNumberTypeConversions @@ -242,8 +240,6 @@ Inlining cast (byte) DTV_HIGHCOLOR#0 ← (unumber)(number) 4 Inlining cast (byte) DTV_BADLINE_OFF#0 ← (unumber)(number) $20 Inlining cast (byte*) DTV_PALETTE#0 ← (byte*)(number) $d200 Inlining cast *((byte*) BGCOL#0) ← (unumber)(number) 0 -Inlining cast (byte) main::r#0 ← (unumber)(number) $31 -Inlining cast (byte) main::c#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 53281 @@ -272,8 +268,6 @@ Simplifying constant integer cast $e Simplifying constant integer cast $f Simplifying constant integer cast $40 Simplifying constant integer cast 0 -Simplifying constant integer cast $31 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 @@ -281,8 +275,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $20 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $31 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$2 [17] if(*((byte*) RASTER#0)!=(byte) $40) goto main::@4 Simple Condition (bool~) main::$3 [25] if((byte) main::r#1!=rangelast($31,$ff)) goto main::@10 diff --git a/src/test/ref/c64dtv-gfxexplorer.asm b/src/test/ref/c64dtv-gfxexplorer.asm index 0e846747e..4b830cab8 100644 --- a/src/test/ref/c64dtv-gfxexplorer.asm +++ b/src/test/ref/c64dtv-gfxexplorer.asm @@ -1848,7 +1848,7 @@ gfx_init_plane_8bppchunky: { lda #>$4000 sta gfxb+1 b1: - lda #0 + lda #<0 sta x sta x+1 b2: diff --git a/src/test/ref/c64dtv-gfxexplorer.cfg b/src/test/ref/c64dtv-gfxexplorer.cfg index 3c14deb4c..647d04507 100644 --- a/src/test/ref/c64dtv-gfxexplorer.cfg +++ b/src/test/ref/c64dtv-gfxexplorer.cfg @@ -1164,7 +1164,7 @@ gfx_init_plane_8bppchunky::@1: scope:[gfx_init_plane_8bppchunky] from gfx_init_ to:gfx_init_plane_8bppchunky::@2 gfx_init_plane_8bppchunky::@2: scope:[gfx_init_plane_8bppchunky] from gfx_init_plane_8bppchunky::@1 gfx_init_plane_8bppchunky::@3 [581] (byte) gfx_init_plane_8bppchunky::gfxbCpuBank#4 ← phi( gfx_init_plane_8bppchunky::@1/(byte) gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::@3/(byte) gfx_init_plane_8bppchunky::gfxbCpuBank#8 ) - [581] (word) gfx_init_plane_8bppchunky::x#2 ← phi( gfx_init_plane_8bppchunky::@1/(byte) 0 gfx_init_plane_8bppchunky::@3/(word) gfx_init_plane_8bppchunky::x#1 ) + [581] (word) gfx_init_plane_8bppchunky::x#2 ← phi( gfx_init_plane_8bppchunky::@1/(word) 0 gfx_init_plane_8bppchunky::@3/(word) gfx_init_plane_8bppchunky::x#1 ) [581] (byte*) gfx_init_plane_8bppchunky::gfxb#3 ← phi( gfx_init_plane_8bppchunky::@1/(byte*) gfx_init_plane_8bppchunky::gfxb#5 gfx_init_plane_8bppchunky::@3/(byte*) gfx_init_plane_8bppchunky::gfxb#1 ) [582] if((byte*) gfx_init_plane_8bppchunky::gfxb#3!=(word) $8000) goto gfx_init_plane_8bppchunky::@3 to:gfx_init_plane_8bppchunky::@4 diff --git a/src/test/ref/c64dtv-gfxexplorer.log b/src/test/ref/c64dtv-gfxexplorer.log index 792becdc0..e3c5a58d6 100644 --- a/src/test/ref/c64dtv-gfxexplorer.log +++ b/src/test/ref/c64dtv-gfxexplorer.log @@ -647,7 +647,7 @@ keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matri keyboard_event_scan: scope:[keyboard_event_scan] from form_control::@3 gfx_mode::@36 (byte) keyboard_events_size#99 ← phi( form_control::@3/(byte) keyboard_events_size#48 gfx_mode::@36/(byte) keyboard_events_size#44 ) (byte) keyboard_event_scan::keycode#0 ← (number) 0 - (byte) keyboard_event_scan::row#0 ← (number) 0 + (byte) keyboard_event_scan::row#0 ← (byte) 0 to:keyboard_event_scan::@8 keyboard_event_scan::@8: scope:[keyboard_event_scan] from keyboard_event_scan keyboard_event_scan::@10 (byte) keyboard_events_size#90 ← phi( keyboard_event_scan/(byte) keyboard_events_size#99 keyboard_event_scan::@10/(byte) keyboard_events_size#100 ) @@ -672,7 +672,7 @@ keyboard_event_scan::@9: scope:[keyboard_event_scan] from keyboard_event_scan:: (byte) keyboard_event_scan::keycode#12 ← phi( keyboard_event_scan::@25/(byte) keyboard_event_scan::keycode#7 ) (byte) keyboard_event_scan::row#9 ← phi( keyboard_event_scan::@25/(byte) keyboard_event_scan::row#3 ) (byte) keyboard_event_scan::row_scan#5 ← phi( keyboard_event_scan::@25/(byte) keyboard_event_scan::row_scan#0 ) - (byte) keyboard_event_scan::col#0 ← (number) 0 + (byte) keyboard_event_scan::col#0 ← (byte) 0 to:keyboard_event_scan::@11 keyboard_event_scan::@21: scope:[keyboard_event_scan] from keyboard_event_scan::@25 (byte) keyboard_events_size#109 ← phi( keyboard_event_scan::@25/(byte) keyboard_events_size#77 ) @@ -903,7 +903,7 @@ keyboard_event_get::@return: scope:[keyboard_event_get] from keyboard_event_get bitmap_init: scope:[bitmap_init] from gfx_init_vic_bitmap (byte*) bitmap_init::bitmap#2 ← phi( gfx_init_vic_bitmap/(byte*) bitmap_init::bitmap#0 ) (byte) bitmap_init::bits#0 ← (number) $80 - (byte) bitmap_init::x#0 ← (number) 0 + (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) bitmap_init::bits#0 bitmap_init::@2/(byte) bitmap_init::bits#4 ) @@ -935,7 +935,7 @@ bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@1 to:bitmap_init::@2 bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@2 (byte*) bitmap_init::yoffs#0 ← ((byte*)) (number) 0 - (byte) bitmap_init::y#0 ← (number) 0 + (byte) bitmap_init::y#0 ← (byte) 0 to:bitmap_init::@5 bitmap_init::@5: scope:[bitmap_init] from bitmap_init::@4 bitmap_init::@6 (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@4/(byte*) bitmap_init::yoffs#0 bitmap_init::@6/(byte*) bitmap_init::yoffs#4 ) @@ -971,12 +971,12 @@ bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@6 bitmap_clear: scope:[bitmap_clear] from gfx_init_vic_bitmap::@3 (byte*~) bitmap_clear::$0 ← ((byte*)) { *((byte[$100]) bitmap_plot_xhi#0 + (number) 0), *((byte[$100]) bitmap_plot_xlo#0 + (number) 0) } (byte*) bitmap_clear::bitmap#0 ← (byte*~) bitmap_clear::$0 - (byte) bitmap_clear::y#0 ← (number) 0 + (byte) bitmap_clear::y#0 ← (byte) 0 to:bitmap_clear::@1 bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear bitmap_clear::@3 (byte) bitmap_clear::y#4 ← phi( bitmap_clear/(byte) bitmap_clear::y#0 bitmap_clear::@3/(byte) bitmap_clear::y#1 ) (byte*) bitmap_clear::bitmap#3 ← phi( bitmap_clear/(byte*) bitmap_clear::bitmap#0 bitmap_clear::@3/(byte*) bitmap_clear::bitmap#4 ) - (byte) bitmap_clear::x#0 ← (number) 0 + (byte) bitmap_clear::x#0 ← (byte) 0 to:bitmap_clear::@2 bitmap_clear::@2: scope:[bitmap_clear] from bitmap_clear::@1 bitmap_clear::@2 (byte) bitmap_clear::y#3 ← phi( bitmap_clear::@1/(byte) bitmap_clear::y#4 bitmap_clear::@2/(byte) bitmap_clear::y#3 ) @@ -2340,7 +2340,7 @@ gfx_mode::@50: scope:[gfx_mode] from gfx_mode::@49 (byte*~) gfx_mode::$63 ← (byte*) get_vic_screen::return#11 (byte*) gfx_mode::vic_colors#0 ← (byte*~) gfx_mode::$63 (byte*) gfx_mode::col#0 ← (byte*) COLS#0 - (byte) gfx_mode::cy#0 ← (number) 0 + (byte) gfx_mode::cy#0 ← (byte) 0 to:gfx_mode::@21 gfx_mode::@20: scope:[gfx_mode] from gfx_mode::@8 (byte) keyboard_modifiers#112 ← phi( gfx_mode::@8/(byte) keyboard_modifiers#113 ) @@ -2355,7 +2355,7 @@ gfx_mode::@21: scope:[gfx_mode] from gfx_mode::@23 gfx_mode::@50 (byte) gfx_mode::cy#4 ← phi( gfx_mode::@23/(byte) gfx_mode::cy#1 gfx_mode::@50/(byte) gfx_mode::cy#0 ) (byte*) gfx_mode::col#3 ← phi( gfx_mode::@23/(byte*) gfx_mode::col#4 gfx_mode::@50/(byte*) gfx_mode::col#0 ) (byte*) gfx_mode::vic_colors#3 ← phi( gfx_mode::@23/(byte*) gfx_mode::vic_colors#4 gfx_mode::@50/(byte*) gfx_mode::vic_colors#0 ) - (byte) gfx_mode::cx#0 ← (number) 0 + (byte) gfx_mode::cx#0 ← (byte) 0 to:gfx_mode::@22 gfx_mode::@22: scope:[gfx_mode] from gfx_mode::@21 gfx_mode::@22 (byte) keyboard_modifiers#96 ← phi( gfx_mode::@21/(byte) keyboard_modifiers#98 gfx_mode::@22/(byte) keyboard_modifiers#96 ) @@ -2403,12 +2403,12 @@ gfx_mode::@24: scope:[gfx_mode] from gfx_mode::@23 gfx_mode::@10: scope:[gfx_mode] from gfx_mode::@24 (byte) keyboard_modifiers#78 ← phi( gfx_mode::@24/(byte) keyboard_modifiers#85 ) (byte) keyboard_events_size#82 ← phi( gfx_mode::@24/(byte) keyboard_events_size#94 ) - (byte) gfx_mode::i#0 ← (number) 0 + (byte) gfx_mode::i#0 ← (byte) 0 to:gfx_mode::@29 gfx_mode::@25: scope:[gfx_mode] from gfx_mode::@24 (byte) keyboard_modifiers#77 ← phi( gfx_mode::@24/(byte) keyboard_modifiers#85 ) (byte) keyboard_events_size#81 ← phi( gfx_mode::@24/(byte) keyboard_events_size#94 ) - (byte) gfx_mode::j#0 ← (number) 0 + (byte) gfx_mode::j#0 ← (byte) 0 to:gfx_mode::@26 gfx_mode::@26: scope:[gfx_mode] from gfx_mode::@25 gfx_mode::@26 (byte) keyboard_modifiers#57 ← phi( gfx_mode::@25/(byte) keyboard_modifiers#77 gfx_mode::@26/(byte) keyboard_modifiers#57 ) @@ -2524,13 +2524,13 @@ gfx_init_charset: scope:[gfx_init_charset] from gfx_init::@5 *((byte*) PROCPORT#0) ← (number) $32 (byte*) gfx_init_charset::chargen#0 ← (byte*) CHARGEN#0 (byte*) gfx_init_charset::charset#0 ← (byte*) VIC_CHARSET_ROM#0 - (byte) gfx_init_charset::c#0 ← (number) 0 + (byte) gfx_init_charset::c#0 ← (byte) 0 to:gfx_init_charset::@1 gfx_init_charset::@1: scope:[gfx_init_charset] from gfx_init_charset gfx_init_charset::@3 (byte) gfx_init_charset::c#4 ← phi( gfx_init_charset/(byte) gfx_init_charset::c#0 gfx_init_charset::@3/(byte) gfx_init_charset::c#1 ) (byte*) gfx_init_charset::charset#3 ← phi( gfx_init_charset/(byte*) gfx_init_charset::charset#0 gfx_init_charset::@3/(byte*) gfx_init_charset::charset#4 ) (byte*) gfx_init_charset::chargen#3 ← phi( gfx_init_charset/(byte*) gfx_init_charset::chargen#0 gfx_init_charset::@3/(byte*) gfx_init_charset::chargen#4 ) - (byte) gfx_init_charset::l#0 ← (number) 0 + (byte) gfx_init_charset::l#0 ← (byte) 0 to:gfx_init_charset::@2 gfx_init_charset::@2: scope:[gfx_init_charset] from gfx_init_charset::@1 gfx_init_charset::@2 (byte) gfx_init_charset::c#3 ← phi( gfx_init_charset::@1/(byte) gfx_init_charset::c#4 gfx_init_charset::@2/(byte) gfx_init_charset::c#3 ) @@ -2560,12 +2560,12 @@ gfx_init_charset::@return: scope:[gfx_init_charset] from gfx_init_charset::@4 to:@return gfx_init_screen0: scope:[gfx_init_screen0] from gfx_init (byte*) gfx_init_screen0::ch#0 ← (byte*) VIC_SCREEN0#0 - (byte) gfx_init_screen0::cy#0 ← (number) 0 + (byte) gfx_init_screen0::cy#0 ← (byte) 0 to:gfx_init_screen0::@1 gfx_init_screen0::@1: scope:[gfx_init_screen0] from gfx_init_screen0 gfx_init_screen0::@3 (byte*) gfx_init_screen0::ch#3 ← phi( gfx_init_screen0/(byte*) gfx_init_screen0::ch#0 gfx_init_screen0::@3/(byte*) gfx_init_screen0::ch#4 ) (byte) gfx_init_screen0::cy#4 ← phi( gfx_init_screen0/(byte) gfx_init_screen0::cy#0 gfx_init_screen0::@3/(byte) gfx_init_screen0::cy#1 ) - (byte) gfx_init_screen0::cx#0 ← (number) 0 + (byte) gfx_init_screen0::cx#0 ← (byte) 0 to:gfx_init_screen0::@2 gfx_init_screen0::@2: scope:[gfx_init_screen0] from gfx_init_screen0::@1 gfx_init_screen0::@2 (byte*) gfx_init_screen0::ch#2 ← phi( gfx_init_screen0::@1/(byte*) gfx_init_screen0::ch#3 gfx_init_screen0::@2/(byte*) gfx_init_screen0::ch#1 ) @@ -2593,12 +2593,12 @@ gfx_init_screen0::@return: scope:[gfx_init_screen0] from gfx_init_screen0::@3 to:@return gfx_init_screen1: scope:[gfx_init_screen1] from gfx_init::@1 (byte*) gfx_init_screen1::ch#0 ← (byte*) VIC_SCREEN1#0 - (byte) gfx_init_screen1::cy#0 ← (number) 0 + (byte) gfx_init_screen1::cy#0 ← (byte) 0 to:gfx_init_screen1::@1 gfx_init_screen1::@1: scope:[gfx_init_screen1] from gfx_init_screen1 gfx_init_screen1::@3 (byte*) gfx_init_screen1::ch#3 ← phi( gfx_init_screen1/(byte*) gfx_init_screen1::ch#0 gfx_init_screen1::@3/(byte*) gfx_init_screen1::ch#4 ) (byte) gfx_init_screen1::cy#4 ← phi( gfx_init_screen1/(byte) gfx_init_screen1::cy#0 gfx_init_screen1::@3/(byte) gfx_init_screen1::cy#1 ) - (byte) gfx_init_screen1::cx#0 ← (number) 0 + (byte) gfx_init_screen1::cx#0 ← (byte) 0 to:gfx_init_screen1::@2 gfx_init_screen1::@2: scope:[gfx_init_screen1] from gfx_init_screen1::@1 gfx_init_screen1::@2 (byte*) gfx_init_screen1::ch#2 ← phi( gfx_init_screen1::@1/(byte*) gfx_init_screen1::ch#3 gfx_init_screen1::@2/(byte*) gfx_init_screen1::ch#1 ) @@ -2624,12 +2624,12 @@ gfx_init_screen1::@return: scope:[gfx_init_screen1] from gfx_init_screen1::@3 to:@return gfx_init_screen2: scope:[gfx_init_screen2] from gfx_init::@2 (byte*) gfx_init_screen2::ch#0 ← (byte*) VIC_SCREEN2#0 - (byte) gfx_init_screen2::cy#0 ← (number) 0 + (byte) gfx_init_screen2::cy#0 ← (byte) 0 to:gfx_init_screen2::@1 gfx_init_screen2::@1: scope:[gfx_init_screen2] from gfx_init_screen2 gfx_init_screen2::@3 (byte*) gfx_init_screen2::ch#3 ← phi( gfx_init_screen2/(byte*) gfx_init_screen2::ch#0 gfx_init_screen2::@3/(byte*) gfx_init_screen2::ch#4 ) (byte) gfx_init_screen2::cy#4 ← phi( gfx_init_screen2/(byte) gfx_init_screen2::cy#0 gfx_init_screen2::@3/(byte) gfx_init_screen2::cy#1 ) - (byte) gfx_init_screen2::cx#0 ← (number) 0 + (byte) gfx_init_screen2::cx#0 ← (byte) 0 to:gfx_init_screen2::@2 gfx_init_screen2::@2: scope:[gfx_init_screen2] from gfx_init_screen2::@1 gfx_init_screen2::@2 (byte*) gfx_init_screen2::ch#2 ← phi( gfx_init_screen2::@1/(byte*) gfx_init_screen2::ch#3 gfx_init_screen2::@2/(byte*) gfx_init_screen2::ch#1 ) @@ -2660,12 +2660,12 @@ gfx_init_screen2::@return: scope:[gfx_init_screen2] from gfx_init_screen2::@3 to:@return gfx_init_screen3: scope:[gfx_init_screen3] from gfx_init::@3 (byte*) gfx_init_screen3::ch#0 ← (byte*) VIC_SCREEN3#0 - (byte) gfx_init_screen3::cy#0 ← (number) 0 + (byte) gfx_init_screen3::cy#0 ← (byte) 0 to:gfx_init_screen3::@1 gfx_init_screen3::@1: scope:[gfx_init_screen3] from gfx_init_screen3 gfx_init_screen3::@3 (byte*) gfx_init_screen3::ch#3 ← phi( gfx_init_screen3/(byte*) gfx_init_screen3::ch#0 gfx_init_screen3::@3/(byte*) gfx_init_screen3::ch#4 ) (byte) gfx_init_screen3::cy#4 ← phi( gfx_init_screen3/(byte) gfx_init_screen3::cy#0 gfx_init_screen3::@3/(byte) gfx_init_screen3::cy#1 ) - (byte) gfx_init_screen3::cx#0 ← (number) 0 + (byte) gfx_init_screen3::cx#0 ← (byte) 0 to:gfx_init_screen3::@2 gfx_init_screen3::@2: scope:[gfx_init_screen3] from gfx_init_screen3::@1 gfx_init_screen3::@2 (byte*) gfx_init_screen3::ch#2 ← phi( gfx_init_screen3::@1/(byte*) gfx_init_screen3::ch#3 gfx_init_screen3::@2/(byte*) gfx_init_screen3::ch#1 ) @@ -2693,12 +2693,12 @@ gfx_init_screen3::@return: scope:[gfx_init_screen3] from gfx_init_screen3::@3 to:@return gfx_init_screen4: scope:[gfx_init_screen4] from gfx_init::@4 (byte*) gfx_init_screen4::ch#0 ← (byte*) VIC_SCREEN4#0 - (byte) gfx_init_screen4::cy#0 ← (number) 0 + (byte) gfx_init_screen4::cy#0 ← (byte) 0 to:gfx_init_screen4::@1 gfx_init_screen4::@1: scope:[gfx_init_screen4] from gfx_init_screen4 gfx_init_screen4::@3 (byte) gfx_init_screen4::cy#4 ← phi( gfx_init_screen4/(byte) gfx_init_screen4::cy#0 gfx_init_screen4::@3/(byte) gfx_init_screen4::cy#1 ) (byte*) gfx_init_screen4::ch#3 ← phi( gfx_init_screen4/(byte*) gfx_init_screen4::ch#0 gfx_init_screen4::@3/(byte*) gfx_init_screen4::ch#4 ) - (byte) gfx_init_screen4::cx#0 ← (number) 0 + (byte) gfx_init_screen4::cx#0 ← (byte) 0 to:gfx_init_screen4::@2 gfx_init_screen4::@2: scope:[gfx_init_screen4] from gfx_init_screen4::@1 gfx_init_screen4::@2 (byte) gfx_init_screen4::cy#3 ← phi( gfx_init_screen4::@1/(byte) gfx_init_screen4::cy#4 gfx_init_screen4::@2/(byte) gfx_init_screen4::cy#3 ) @@ -2763,13 +2763,13 @@ gfx_init_plane_8bppchunky::@7: scope:[gfx_init_plane_8bppchunky] from gfx_init_ (byte) gfx_init_plane_8bppchunky::gfxbCpuBank#3 ← phi( gfx_init_plane_8bppchunky/(byte) gfx_init_plane_8bppchunky::gfxbCpuBank#0 ) (byte) gfx_init_plane_8bppchunky::gfxbCpuBank#1 ← ++ (byte) gfx_init_plane_8bppchunky::gfxbCpuBank#3 (byte*) gfx_init_plane_8bppchunky::gfxb#0 ← ((byte*)) (number) $4000 - (byte) gfx_init_plane_8bppchunky::y#0 ← (number) 0 + (byte) gfx_init_plane_8bppchunky::y#0 ← (byte) 0 to:gfx_init_plane_8bppchunky::@1 gfx_init_plane_8bppchunky::@1: scope:[gfx_init_plane_8bppchunky] from gfx_init_plane_8bppchunky::@5 gfx_init_plane_8bppchunky::@7 (byte) gfx_init_plane_8bppchunky::gfxbCpuBank#7 ← phi( gfx_init_plane_8bppchunky::@5/(byte) gfx_init_plane_8bppchunky::gfxbCpuBank#9 gfx_init_plane_8bppchunky::@7/(byte) gfx_init_plane_8bppchunky::gfxbCpuBank#1 ) (byte) gfx_init_plane_8bppchunky::y#6 ← phi( gfx_init_plane_8bppchunky::@5/(byte) gfx_init_plane_8bppchunky::y#1 gfx_init_plane_8bppchunky::@7/(byte) gfx_init_plane_8bppchunky::y#0 ) (byte*) gfx_init_plane_8bppchunky::gfxb#5 ← phi( gfx_init_plane_8bppchunky::@5/(byte*) gfx_init_plane_8bppchunky::gfxb#6 gfx_init_plane_8bppchunky::@7/(byte*) gfx_init_plane_8bppchunky::gfxb#0 ) - (word) gfx_init_plane_8bppchunky::x#0 ← (number) 0 + (word) gfx_init_plane_8bppchunky::x#0 ← (word) 0 to:gfx_init_plane_8bppchunky::@2 gfx_init_plane_8bppchunky::@2: scope:[gfx_init_plane_8bppchunky] from gfx_init_plane_8bppchunky::@1 gfx_init_plane_8bppchunky::@3 (byte) gfx_init_plane_8bppchunky::gfxbCpuBank#6 ← phi( gfx_init_plane_8bppchunky::@1/(byte) gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::@3/(byte) gfx_init_plane_8bppchunky::gfxbCpuBank#8 ) @@ -2840,12 +2840,12 @@ gfx_init_plane_horisontal::@9: scope:[gfx_init_plane_horisontal] from gfx_init_ (number~) gfx_init_plane_horisontal::$3 ← (dword) PLANE_HORISONTAL#0 & (number) $3fff (number~) gfx_init_plane_horisontal::$4 ← (number) $4000 + (number~) gfx_init_plane_horisontal::$3 (byte*) gfx_init_plane_horisontal::gfxa#0 ← ((byte*)) (number~) gfx_init_plane_horisontal::$4 - (byte) gfx_init_plane_horisontal::ay#0 ← (number) 0 + (byte) gfx_init_plane_horisontal::ay#0 ← (byte) 0 to:gfx_init_plane_horisontal::@1 gfx_init_plane_horisontal::@1: scope:[gfx_init_plane_horisontal] from gfx_init_plane_horisontal::@7 gfx_init_plane_horisontal::@9 (byte*) gfx_init_plane_horisontal::gfxa#6 ← phi( gfx_init_plane_horisontal::@7/(byte*) gfx_init_plane_horisontal::gfxa#8 gfx_init_plane_horisontal::@9/(byte*) gfx_init_plane_horisontal::gfxa#0 ) (byte) gfx_init_plane_horisontal::ay#4 ← phi( gfx_init_plane_horisontal::@7/(byte) gfx_init_plane_horisontal::ay#1 gfx_init_plane_horisontal::@9/(byte) gfx_init_plane_horisontal::ay#0 ) - (byte) gfx_init_plane_horisontal::ax#0 ← (number) 0 + (byte) gfx_init_plane_horisontal::ax#0 ← (byte) 0 to:gfx_init_plane_horisontal::@2 gfx_init_plane_horisontal::@2: scope:[gfx_init_plane_horisontal] from gfx_init_plane_horisontal::@1 gfx_init_plane_horisontal::@4 (byte) gfx_init_plane_horisontal::ax#5 ← phi( gfx_init_plane_horisontal::@1/(byte) gfx_init_plane_horisontal::ax#0 gfx_init_plane_horisontal::@4/(byte) gfx_init_plane_horisontal::ax#1 ) @@ -2909,12 +2909,12 @@ gfx_init_plane_horisontal2::@5: scope:[gfx_init_plane_horisontal2] from gfx_ini (number~) gfx_init_plane_horisontal2::$4 ← (number) $4000 + (number~) gfx_init_plane_horisontal2::$3 (byte*) gfx_init_plane_horisontal2::gfxa#0 ← ((byte*)) (number~) gfx_init_plane_horisontal2::$4 (byte[]) gfx_init_plane_horisontal2::row_bitmask#0 ← { (number) 0, (number) $55, (number) $aa, (number) $ff } - (byte) gfx_init_plane_horisontal2::ay#0 ← (number) 0 + (byte) gfx_init_plane_horisontal2::ay#0 ← (byte) 0 to:gfx_init_plane_horisontal2::@1 gfx_init_plane_horisontal2::@1: scope:[gfx_init_plane_horisontal2] from gfx_init_plane_horisontal2::@3 gfx_init_plane_horisontal2::@5 (byte*) gfx_init_plane_horisontal2::gfxa#3 ← phi( gfx_init_plane_horisontal2::@3/(byte*) gfx_init_plane_horisontal2::gfxa#4 gfx_init_plane_horisontal2::@5/(byte*) gfx_init_plane_horisontal2::gfxa#0 ) (byte) gfx_init_plane_horisontal2::ay#4 ← phi( gfx_init_plane_horisontal2::@3/(byte) gfx_init_plane_horisontal2::ay#1 gfx_init_plane_horisontal2::@5/(byte) gfx_init_plane_horisontal2::ay#0 ) - (byte) gfx_init_plane_horisontal2::ax#0 ← (number) 0 + (byte) gfx_init_plane_horisontal2::ax#0 ← (byte) 0 to:gfx_init_plane_horisontal2::@2 gfx_init_plane_horisontal2::@2: scope:[gfx_init_plane_horisontal2] from gfx_init_plane_horisontal2::@1 gfx_init_plane_horisontal2::@2 (byte) gfx_init_plane_horisontal2::ax#2 ← phi( gfx_init_plane_horisontal2::@1/(byte) gfx_init_plane_horisontal2::ax#0 gfx_init_plane_horisontal2::@2/(byte) gfx_init_plane_horisontal2::ax#1 ) @@ -2960,12 +2960,12 @@ gfx_init_plane_vertical::@5: scope:[gfx_init_plane_vertical] from gfx_init_plan (number~) gfx_init_plane_vertical::$3 ← (dword) PLANE_VERTICAL#0 & (number) $3fff (number~) gfx_init_plane_vertical::$4 ← (number) $4000 + (number~) gfx_init_plane_vertical::$3 (byte*) gfx_init_plane_vertical::gfxb#0 ← ((byte*)) (number~) gfx_init_plane_vertical::$4 - (byte) gfx_init_plane_vertical::by#0 ← (number) 0 + (byte) gfx_init_plane_vertical::by#0 ← (byte) 0 to:gfx_init_plane_vertical::@1 gfx_init_plane_vertical::@1: scope:[gfx_init_plane_vertical] from gfx_init_plane_vertical::@3 gfx_init_plane_vertical::@5 (byte) gfx_init_plane_vertical::by#4 ← phi( gfx_init_plane_vertical::@3/(byte) gfx_init_plane_vertical::by#1 gfx_init_plane_vertical::@5/(byte) gfx_init_plane_vertical::by#0 ) (byte*) gfx_init_plane_vertical::gfxb#3 ← phi( gfx_init_plane_vertical::@3/(byte*) gfx_init_plane_vertical::gfxb#4 gfx_init_plane_vertical::@5/(byte*) gfx_init_plane_vertical::gfxb#0 ) - (byte) gfx_init_plane_vertical::bx#0 ← (number) 0 + (byte) gfx_init_plane_vertical::bx#0 ← (byte) 0 to:gfx_init_plane_vertical::@2 gfx_init_plane_vertical::@2: scope:[gfx_init_plane_vertical] from gfx_init_plane_vertical::@1 gfx_init_plane_vertical::@2 (byte) gfx_init_plane_vertical::by#3 ← phi( gfx_init_plane_vertical::@1/(byte) gfx_init_plane_vertical::by#4 gfx_init_plane_vertical::@2/(byte) gfx_init_plane_vertical::by#3 ) @@ -3011,14 +3011,14 @@ gfx_init_plane_charset8::@9: scope:[gfx_init_plane_charset8] from gfx_init_plan (byte*) gfx_init_plane_charset8::chargen#0 ← (byte*) CHARGEN#0 *((byte*) PROCPORT#0) ← (byte) PROCPORT_RAM_CHARROM#0 (byte) gfx_init_plane_charset8::col#0 ← (number) 0 - (byte) gfx_init_plane_charset8::ch#0 ← (number) 0 + (byte) gfx_init_plane_charset8::ch#0 ← (byte) 0 to:gfx_init_plane_charset8::@1 gfx_init_plane_charset8::@1: scope:[gfx_init_plane_charset8] from gfx_init_plane_charset8::@7 gfx_init_plane_charset8::@9 (byte) gfx_init_plane_charset8::ch#8 ← phi( gfx_init_plane_charset8::@7/(byte) gfx_init_plane_charset8::ch#1 gfx_init_plane_charset8::@9/(byte) gfx_init_plane_charset8::ch#0 ) (byte) gfx_init_plane_charset8::col#6 ← phi( gfx_init_plane_charset8::@7/(byte) gfx_init_plane_charset8::col#8 gfx_init_plane_charset8::@9/(byte) gfx_init_plane_charset8::col#0 ) (byte*) gfx_init_plane_charset8::gfxa#6 ← phi( gfx_init_plane_charset8::@7/(byte*) gfx_init_plane_charset8::gfxa#8 gfx_init_plane_charset8::@9/(byte*) gfx_init_plane_charset8::gfxa#0 ) (byte*) gfx_init_plane_charset8::chargen#3 ← phi( gfx_init_plane_charset8::@7/(byte*) gfx_init_plane_charset8::chargen#5 gfx_init_plane_charset8::@9/(byte*) gfx_init_plane_charset8::chargen#0 ) - (byte) gfx_init_plane_charset8::cr#0 ← (number) 0 + (byte) gfx_init_plane_charset8::cr#0 ← (byte) 0 to:gfx_init_plane_charset8::@2 gfx_init_plane_charset8::@2: scope:[gfx_init_plane_charset8] from gfx_init_plane_charset8::@1 gfx_init_plane_charset8::@6 (byte) gfx_init_plane_charset8::ch#7 ← phi( gfx_init_plane_charset8::@1/(byte) gfx_init_plane_charset8::ch#8 gfx_init_plane_charset8::@6/(byte) gfx_init_plane_charset8::ch#3 ) @@ -3028,7 +3028,7 @@ gfx_init_plane_charset8::@2: scope:[gfx_init_plane_charset8] from gfx_init_plan (byte*) gfx_init_plane_charset8::chargen#2 ← phi( gfx_init_plane_charset8::@1/(byte*) gfx_init_plane_charset8::chargen#3 gfx_init_plane_charset8::@6/(byte*) gfx_init_plane_charset8::chargen#4 ) (byte) gfx_init_plane_charset8::bits#0 ← *((byte*) gfx_init_plane_charset8::chargen#2) (byte*) gfx_init_plane_charset8::chargen#1 ← ++ (byte*) gfx_init_plane_charset8::chargen#2 - (byte) gfx_init_plane_charset8::cp#0 ← (number) 0 + (byte) gfx_init_plane_charset8::cp#0 ← (byte) 0 to:gfx_init_plane_charset8::@3 gfx_init_plane_charset8::@3: scope:[gfx_init_plane_charset8] from gfx_init_plane_charset8::@2 gfx_init_plane_charset8::@4 (byte) gfx_init_plane_charset8::ch#5 ← phi( gfx_init_plane_charset8::@2/(byte) gfx_init_plane_charset8::ch#7 gfx_init_plane_charset8::@4/(byte) gfx_init_plane_charset8::ch#4 ) @@ -3152,13 +3152,13 @@ gfx_init_plane_fill::@5: scope:[gfx_init_plane_fill] from gfx_init_plane_fill (number~) gfx_init_plane_fill::$5 ← (word~) gfx_init_plane_fill::$4 & (number) $3fff (number~) gfx_init_plane_fill::$6 ← (number) $4000 + (number~) gfx_init_plane_fill::$5 (byte*) gfx_init_plane_fill::gfxb#0 ← ((byte*)) (number~) gfx_init_plane_fill::$6 - (byte) gfx_init_plane_fill::by#0 ← (number) 0 + (byte) gfx_init_plane_fill::by#0 ← (byte) 0 to:gfx_init_plane_fill::@1 gfx_init_plane_fill::@1: scope:[gfx_init_plane_fill] from gfx_init_plane_fill::@3 gfx_init_plane_fill::@5 (byte) gfx_init_plane_fill::by#4 ← phi( gfx_init_plane_fill::@3/(byte) gfx_init_plane_fill::by#1 gfx_init_plane_fill::@5/(byte) gfx_init_plane_fill::by#0 ) (byte*) gfx_init_plane_fill::gfxb#3 ← phi( gfx_init_plane_fill::@3/(byte*) gfx_init_plane_fill::gfxb#4 gfx_init_plane_fill::@5/(byte*) gfx_init_plane_fill::gfxb#0 ) (byte) gfx_init_plane_fill::fill#4 ← phi( gfx_init_plane_fill::@3/(byte) gfx_init_plane_fill::fill#5 gfx_init_plane_fill::@5/(byte) gfx_init_plane_fill::fill#6 ) - (byte) gfx_init_plane_fill::bx#0 ← (number) 0 + (byte) gfx_init_plane_fill::bx#0 ← (byte) 0 to:gfx_init_plane_fill::@2 gfx_init_plane_fill::@2: scope:[gfx_init_plane_fill] from gfx_init_plane_fill::@1 gfx_init_plane_fill::@2 (byte) gfx_init_plane_fill::by#3 ← phi( gfx_init_plane_fill::@1/(byte) gfx_init_plane_fill::by#4 gfx_init_plane_fill::@2/(byte) gfx_init_plane_fill::by#3 ) @@ -3345,7 +3345,7 @@ form_mode::@29: scope:[form_mode] from form_mode::@28 (byte~) form_mode::$33 ← > (byte*) FORM_SCREEN#0 *((byte*) DTV_PLANEA_START_MI#0) ← (byte~) form_mode::$33 *((byte*) DTV_PLANEA_START_HI#0) ← (number) 0 - (byte) form_mode::i#0 ← (number) 0 + (byte) form_mode::i#0 ← (byte) 0 to:form_mode::@1 form_mode::@1: scope:[form_mode] from form_mode::@1 form_mode::@29 (byte) form_field_idx#45 ← phi( form_mode::@1/(byte) form_field_idx#45 form_mode::@29/(byte) form_field_idx#49 ) @@ -3517,7 +3517,7 @@ form_mode::@33: scope:[form_mode] from form_mode::@32 form_set_screen: scope:[form_set_screen] from form_mode::@26 (byte*) form_set_screen::screen#1 ← phi( form_mode::@26/(byte*) form_set_screen::screen#0 ) (byte*) form_set_screen::line#0 ← (byte*) form_set_screen::screen#1 - (byte) form_set_screen::y#0 ← (number) 0 + (byte) form_set_screen::y#0 ← (byte) 0 to:form_set_screen::@1 form_set_screen::@1: scope:[form_set_screen] from form_set_screen form_set_screen::@1 (byte) form_set_screen::y#2 ← phi( form_set_screen/(byte) form_set_screen::y#0 form_set_screen::@1/(byte) form_set_screen::y#1 ) @@ -6859,8 +6859,6 @@ Adding number conversion cast (unumber) 2 in (byte) KEY_MODIFIER_RSHIFT#0 ← (n Adding number conversion cast (unumber) 4 in (byte) KEY_MODIFIER_CTRL#0 ← (number) 4 Adding number conversion cast (unumber) 8 in (byte) KEY_MODIFIER_COMMODORE#0 ← (number) 8 Adding number conversion cast (unumber) 0 in (byte) keyboard_event_scan::keycode#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) keyboard_event_scan::row#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) keyboard_event_scan::col#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (number~) keyboard_event_scan::$14 ← (byte) keyboard_event_scan::keycode#3 + (number) 8 Adding number conversion cast (unumber) keyboard_event_scan::$14 in (number~) keyboard_event_scan::$14 ← (byte) keyboard_event_scan::keycode#3 + (unumber)(number) 8 Adding number conversion cast (unumber) 0 in (bool~) keyboard_event_scan::$17 ← (byte~) keyboard_event_scan::$16 != (number) 0 @@ -6879,13 +6877,11 @@ Adding number conversion cast (unumber) keyboard_event_pressed::$1 in (number~) Adding number conversion cast (unumber) 0 in (bool~) keyboard_event_get::$0 ← (byte) keyboard_events_size#22 == (number) 0 Adding number conversion cast (unumber) $ff in (byte) keyboard_event_get::return#0 ← (number) $ff Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 -Adding number conversion cast (unumber) 0 in (byte) bitmap_init::x#0 ← (number) 0 Adding number conversion cast (unumber) $f8 in (number~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (number) $f8 Adding number conversion cast (unumber) bitmap_init::$0 in (number~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (unumber)(number) $f8 Adding number conversion cast (unumber) 1 in (byte~) bitmap_init::$2 ← (byte) bitmap_init::bits#3 >> (number) 1 Adding number conversion cast (unumber) 0 in (bool~) bitmap_init::$3 ← (byte) bitmap_init::bits#1 == (number) 0 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#2 ← (number) $80 -Adding number conversion cast (unumber) 0 in (byte) bitmap_init::y#0 ← (number) 0 Adding number conversion cast (unumber) 7 in (number~) bitmap_init::$6 ← (byte) bitmap_init::y#2 & (number) 7 Adding number conversion cast (unumber) bitmap_init::$6 in (number~) bitmap_init::$6 ← (byte) bitmap_init::y#2 & (unumber)(number) 7 Adding number conversion cast (unumber) bitmap_init::$8 in (number~) bitmap_init::$8 ← (unumber~) bitmap_init::$6 | (byte~) bitmap_init::$7 @@ -6895,8 +6891,6 @@ Adding number conversion cast (unumber) 7 in (bool~) bitmap_init::$11 ← (unumb Adding number conversion cast (unumber) bitmap_init::$13 in (byte*~) bitmap_init::$14 ← (byte*) bitmap_init::yoffs#3 + (number~) bitmap_init::$13 Adding number conversion cast (unumber) 0 in (var) bitmap_clear::$3 ← (byte)*((byte[$100]) bitmap_plot_xhi#0 + (number) 0) w= (byte)*((byte[$100]) bitmap_plot_xlo#0 + (number) 0) Adding number conversion cast (unumber) 0 in (var) bitmap_clear::$3 ← (byte)*((byte[$100]) bitmap_plot_xhi#0 + (unumber)(number) 0) w= (byte)*((byte[$100]) bitmap_plot_xlo#0 + (number) 0) -Adding number conversion cast (unumber) 0 in (byte) bitmap_clear::y#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) bitmap_clear::x#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) bitmap_clear::bitmap#2) ← (number) 0 Adding number conversion cast (unumber) 1 in (byte~) bitmap_line_xdyi::$0 ← (byte) bitmap_line_xdyi::yd#2 >> (number) 1 Adding number conversion cast (unumber) 1 in (number~) bitmap_line_xdyi::$6 ← (byte) bitmap_line_xdyi::x1#2 + (number) 1 @@ -7048,8 +7042,6 @@ Adding number conversion cast (unumber) gfx_mode::$60 in (number~) gfx_mode::$60 Adding number conversion cast (unumber) 4 in (number~) gfx_mode::$61 ← (unumber~) gfx_mode::$60 / (number) 4 Adding number conversion cast (unumber) gfx_mode::$61 in (number~) gfx_mode::$61 ← (unumber~) gfx_mode::$60 / (unumber)(number) 4 Adding number conversion cast (unumber) gfx_mode::$62 in (number~) gfx_mode::$62 ← (byte~) gfx_mode::$56 | (unumber~) gfx_mode::$61 -Adding number conversion cast (unumber) 0 in (byte) gfx_mode::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_mode::cx#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 Adding number conversion cast (unumber) $10 in (number~) gfx_mode::$64 ← *((byte*) form_vic_bg0_hi#0) * (number) $10 Adding number conversion cast (unumber) gfx_mode::$64 in (number~) gfx_mode::$64 ← *((byte*) form_vic_bg0_hi#0) * (unumber)(number) $10 @@ -7064,15 +7056,9 @@ Adding number conversion cast (unumber) $10 in (number~) gfx_mode::$70 ← *((by Adding number conversion cast (unumber) gfx_mode::$70 in (number~) gfx_mode::$70 ← *((byte*) form_vic_bg3_hi#0) * (unumber)(number) $10 Adding number conversion cast (unumber) gfx_mode::$71 in (number~) gfx_mode::$71 ← (unumber~) gfx_mode::$70 | *((byte*) form_vic_bg3_lo#0) Adding number conversion cast (unumber) 0 in (bool~) gfx_mode::$72 ← *((byte*) form_dtv_palet#0) == (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_mode::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_mode::j#0 ← (number) 0 Adding number conversion cast (unumber) $ff in (bool~) gfx_mode::$86 ← *((byte*) RASTER#0) != (number) $ff Adding number conversion cast (unumber) $32 in *((byte*) PROCPORT#0) ← (number) $32 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_charset::c#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_charset::l#0 ← (number) 0 Adding number conversion cast (unumber) $37 in *((byte*) PROCPORT#0) ← (number) $37 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_screen0::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_screen0::cx#0 ← (number) 0 Adding number conversion cast (unumber) $f in (number~) gfx_init_screen0::$0 ← (byte) gfx_init_screen0::cy#2 & (number) $f Adding number conversion cast (unumber) gfx_init_screen0::$0 in (number~) gfx_init_screen0::$0 ← (byte) gfx_init_screen0::cy#2 & (unumber)(number) $f Adding number conversion cast (unumber) $10 in (number~) gfx_init_screen0::$1 ← (unumber~) gfx_init_screen0::$0 * (number) $10 @@ -7080,12 +7066,8 @@ Adding number conversion cast (unumber) gfx_init_screen0::$1 in (number~) gfx_in Adding number conversion cast (unumber) $f in (number~) gfx_init_screen0::$2 ← (byte) gfx_init_screen0::cx#2 & (number) $f Adding number conversion cast (unumber) gfx_init_screen0::$2 in (number~) gfx_init_screen0::$2 ← (byte) gfx_init_screen0::cx#2 & (unumber)(number) $f Adding number conversion cast (unumber) gfx_init_screen0::$3 in (number~) gfx_init_screen0::$3 ← (unumber~) gfx_init_screen0::$1 | (unumber~) gfx_init_screen0::$2 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_screen1::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_screen1::cx#0 ← (number) 0 Adding number conversion cast (unumber) $f in (number~) gfx_init_screen1::$1 ← (byte~) gfx_init_screen1::$0 & (number) $f Adding number conversion cast (unumber) gfx_init_screen1::$1 in (number~) gfx_init_screen1::$1 ← (byte~) gfx_init_screen1::$0 & (unumber)(number) $f -Adding number conversion cast (unumber) 0 in (byte) gfx_init_screen2::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_screen2::cx#0 ← (number) 0 Adding number conversion cast (unumber) $f in (number~) gfx_init_screen2::$1 ← (byte~) gfx_init_screen2::$0 & (number) $f Adding number conversion cast (unumber) gfx_init_screen2::$1 in (number~) gfx_init_screen2::$1 ← (byte~) gfx_init_screen2::$0 & (unumber)(number) $f Adding number conversion cast (unumber) $f in (number~) gfx_init_screen2::$2 ← (number) $f - (byte) gfx_init_screen2::col#0 @@ -7093,8 +7075,6 @@ Adding number conversion cast (unumber) gfx_init_screen2::$2 in (number~) gfx_in Adding number conversion cast (unumber) $10 in (number~) gfx_init_screen2::$3 ← (byte) gfx_init_screen2::col#0 * (number) $10 Adding number conversion cast (unumber) gfx_init_screen2::$3 in (number~) gfx_init_screen2::$3 ← (byte) gfx_init_screen2::col#0 * (unumber)(number) $10 Adding number conversion cast (unumber) gfx_init_screen2::$4 in (number~) gfx_init_screen2::$4 ← (unumber~) gfx_init_screen2::$3 | (byte) gfx_init_screen2::col2#0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_screen3::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_screen3::cx#0 ← (number) 0 Adding number conversion cast (unumber) 3 in (number~) gfx_init_screen3::$0 ← (byte) gfx_init_screen3::cx#2 & (number) 3 Adding number conversion cast (unumber) gfx_init_screen3::$0 in (number~) gfx_init_screen3::$0 ← (byte) gfx_init_screen3::cx#2 & (unumber)(number) 3 Adding number conversion cast (unumber) $10 in (number~) gfx_init_screen3::$1 ← (unumber~) gfx_init_screen3::$0 * (number) $10 @@ -7102,8 +7082,6 @@ Adding number conversion cast (unumber) gfx_init_screen3::$1 in (number~) gfx_in Adding number conversion cast (unumber) 3 in (number~) gfx_init_screen3::$2 ← (byte) gfx_init_screen3::cy#2 & (number) 3 Adding number conversion cast (unumber) gfx_init_screen3::$2 in (number~) gfx_init_screen3::$2 ← (byte) gfx_init_screen3::cy#2 & (unumber)(number) 3 Adding number conversion cast (unumber) gfx_init_screen3::$3 in (number~) gfx_init_screen3::$3 ← (unumber~) gfx_init_screen3::$1 | (unumber~) gfx_init_screen3::$2 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_screen4::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_screen4::cx#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) gfx_init_screen4::ch#2) ← (number) 0 Adding number conversion cast (unumber) 9 in (byte) gfx_init_vic_bitmap::lines_cnt#0 ← (number) 9 Adding number conversion cast (unumber) 0 in (byte) gfx_init_vic_bitmap::l#0 ← (number) 0 @@ -7113,8 +7091,6 @@ Adding number conversion cast (unumber) 1 in (number~) gfx_init_vic_bitmap::$3 Adding number conversion cast (unumber) gfx_init_vic_bitmap::$3 in (number~) gfx_init_vic_bitmap::$3 ← (byte) gfx_init_vic_bitmap::l#2 + (unumber)(number) 1 Adding number conversion cast (unumber) $4000 in (number~) gfx_init_plane_8bppchunky::$0 ← (dword) PLANE_8BPP_CHUNKY#0 / (number) $4000 Adding number conversion cast (unumber) gfx_init_plane_8bppchunky::$0 in (number~) gfx_init_plane_8bppchunky::$0 ← (dword) PLANE_8BPP_CHUNKY#0 / (unumber)(number) $4000 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_8bppchunky::y#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) gfx_init_plane_8bppchunky::x#0 ← (number) 0 Adding number conversion cast (unumber) $8000 in (bool~) gfx_init_plane_8bppchunky::$6 ← (byte*) gfx_init_plane_8bppchunky::gfxb#3 == (number) $8000 Adding number conversion cast (unumber) $4000 in (number~) gfx_init_plane_horisontal::$0 ← (dword) PLANE_HORISONTAL#0 / (number) $4000 Adding number conversion cast (unumber) gfx_init_plane_horisontal::$0 in (number~) gfx_init_plane_horisontal::$0 ← (dword) PLANE_HORISONTAL#0 / (unumber)(number) $4000 @@ -7122,8 +7098,6 @@ Adding number conversion cast (unumber) $3fff in (number~) gfx_init_plane_horiso Adding number conversion cast (unumber) gfx_init_plane_horisontal::$3 in (number~) gfx_init_plane_horisontal::$3 ← (dword) PLANE_HORISONTAL#0 & (unumber)(number) $3fff Adding number conversion cast (unumber) $4000 in (number~) gfx_init_plane_horisontal::$4 ← (number) $4000 + (unumber~) gfx_init_plane_horisontal::$3 Adding number conversion cast (unumber) gfx_init_plane_horisontal::$4 in (number~) gfx_init_plane_horisontal::$4 ← (unumber)(number) $4000 + (unumber~) gfx_init_plane_horisontal::$3 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_horisontal::ay#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_horisontal::ax#0 ← (number) 0 Adding number conversion cast (unumber) 4 in (number~) gfx_init_plane_horisontal::$8 ← (byte) gfx_init_plane_horisontal::ay#2 & (number) 4 Adding number conversion cast (unumber) gfx_init_plane_horisontal::$8 in (number~) gfx_init_plane_horisontal::$8 ← (byte) gfx_init_plane_horisontal::ay#2 & (unumber)(number) 4 Adding number conversion cast (unumber) 0 in (bool~) gfx_init_plane_horisontal::$9 ← (unumber~) gfx_init_plane_horisontal::$8 == (number) 0 @@ -7135,8 +7109,6 @@ Adding number conversion cast (unumber) $3fff in (number~) gfx_init_plane_horiso Adding number conversion cast (unumber) gfx_init_plane_horisontal2::$3 in (number~) gfx_init_plane_horisontal2::$3 ← (dword) PLANE_HORISONTAL2#0 & (unumber)(number) $3fff Adding number conversion cast (unumber) $4000 in (number~) gfx_init_plane_horisontal2::$4 ← (number) $4000 + (unumber~) gfx_init_plane_horisontal2::$3 Adding number conversion cast (unumber) gfx_init_plane_horisontal2::$4 in (number~) gfx_init_plane_horisontal2::$4 ← (unumber)(number) $4000 + (unumber~) gfx_init_plane_horisontal2::$3 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_horisontal2::ay#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_horisontal2::ax#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (number~) gfx_init_plane_horisontal2::$8 ← (byte) gfx_init_plane_horisontal2::ay#2 / (number) 2 Adding number conversion cast (unumber) gfx_init_plane_horisontal2::$8 in (number~) gfx_init_plane_horisontal2::$8 ← (byte) gfx_init_plane_horisontal2::ay#2 / (unumber)(number) 2 Adding number conversion cast (unumber) 3 in (number~) gfx_init_plane_horisontal2::$9 ← (unumber~) gfx_init_plane_horisontal2::$8 & (number) 3 @@ -7147,8 +7119,6 @@ Adding number conversion cast (unumber) $3fff in (number~) gfx_init_plane_vertic Adding number conversion cast (unumber) gfx_init_plane_vertical::$3 in (number~) gfx_init_plane_vertical::$3 ← (dword) PLANE_VERTICAL#0 & (unumber)(number) $3fff Adding number conversion cast (unumber) $4000 in (number~) gfx_init_plane_vertical::$4 ← (number) $4000 + (unumber~) gfx_init_plane_vertical::$3 Adding number conversion cast (unumber) gfx_init_plane_vertical::$4 in (number~) gfx_init_plane_vertical::$4 ← (unumber)(number) $4000 + (unumber~) gfx_init_plane_vertical::$3 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_vertical::by#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_vertical::bx#0 ← (number) 0 Adding number conversion cast (unumber) $f in *((byte*) gfx_init_plane_vertical::gfxb#2) ← (number) $f Adding number conversion cast (unumber) $4000 in (number~) gfx_init_plane_charset8::$0 ← (dword) PLANE_CHARSET8#0 / (number) $4000 Adding number conversion cast (unumber) gfx_init_plane_charset8::$0 in (number~) gfx_init_plane_charset8::$0 ← (dword) PLANE_CHARSET8#0 / (unumber)(number) $4000 @@ -7157,9 +7127,6 @@ Adding number conversion cast (unumber) gfx_init_plane_charset8::$3 in (number~) Adding number conversion cast (unumber) $4000 in (number~) gfx_init_plane_charset8::$4 ← (number) $4000 + (unumber~) gfx_init_plane_charset8::$3 Adding number conversion cast (unumber) gfx_init_plane_charset8::$4 in (number~) gfx_init_plane_charset8::$4 ← (unumber)(number) $4000 + (unumber~) gfx_init_plane_charset8::$3 Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_charset8::col#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_charset8::ch#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_charset8::cr#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_charset8::cp#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_charset8::c#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (number~) gfx_init_plane_charset8::$8 ← (byte) gfx_init_plane_charset8::bits#2 & (number) $80 Adding number conversion cast (unumber) gfx_init_plane_charset8::$8 in (number~) gfx_init_plane_charset8::$8 ← (byte) gfx_init_plane_charset8::bits#2 & (unumber)(number) $80 @@ -7177,8 +7144,6 @@ Adding number conversion cast (unumber) $3fff in (number~) gfx_init_plane_fill:: Adding number conversion cast (unumber) gfx_init_plane_fill::$5 in (number~) gfx_init_plane_fill::$5 ← (word~) gfx_init_plane_fill::$4 & (unumber)(number) $3fff Adding number conversion cast (unumber) $4000 in (number~) gfx_init_plane_fill::$6 ← (number) $4000 + (unumber~) gfx_init_plane_fill::$5 Adding number conversion cast (unumber) gfx_init_plane_fill::$6 in (number~) gfx_init_plane_fill::$6 ← (unumber)(number) $4000 + (unumber~) gfx_init_plane_fill::$5 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_fill::by#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gfx_init_plane_fill::bx#0 ← (number) 0 Adding number conversion cast (unumber) $10000 in (number~) form_mode::$10 ← (dword~) form_mode::$9 / (number) $10000 Adding number conversion cast (unumber) form_mode::$10 in (number~) form_mode::$10 ← (dword~) form_mode::$9 / (unumber)(number) $10000 Adding number conversion cast (unumber) $400 in (number~) form_mode::$12 ← (dword) DTV_COLOR_BANK_DEFAULT#0 / (number) $400 @@ -7203,7 +7168,6 @@ Adding number conversion cast (unumber) $400 in (number~) form_mode::$29 ← (un Adding number conversion cast (unumber) form_mode::$29 in (number~) form_mode::$29 ← (unumber~) form_mode::$28 / (unumber)(number) $400 Adding number conversion cast (unumber) form_mode::$30 in (number~) form_mode::$30 ← (unumber~) form_mode::$26 | (unumber~) form_mode::$29 Adding number conversion cast (unumber) 0 in *((byte*) DTV_PLANEA_START_HI#0) ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) form_mode::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BGCOL#0) ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 Adding number conversion cast (unumber) $ff in (bool~) form_mode::$35 ← *((byte*) RASTER#0) != (number) $ff @@ -7212,7 +7176,6 @@ Adding number conversion cast (unumber) 0 in (byte) form_field_idx#4 ← (number Adding number conversion cast (snumber) $28 in (signed byte) FORM_CURSOR_BLINK#0 ← (number) $28 Adding number conversion cast (snumber) 2 in (number~) $37 ← (signed byte) FORM_CURSOR_BLINK#0 / (number) 2 Adding number conversion cast (snumber) $37 in (number~) $37 ← (signed byte) FORM_CURSOR_BLINK#0 / (snumber)(number) 2 -Adding number conversion cast (unumber) 0 in (byte) form_set_screen::y#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte*~) form_set_screen::$2 ← (byte*) form_set_screen::line#2 + (number) $28 Adding number conversion cast (unumber) 0 in (byte) form_render_values::idx#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) form_control::$1 ← (signed byte) form_cursor_count#5 < (number) 0 @@ -7334,18 +7297,12 @@ Inlining cast (byte) KEY_MODIFIER_RSHIFT#0 ← (unumber)(number) 2 Inlining cast (byte) KEY_MODIFIER_CTRL#0 ← (unumber)(number) 4 Inlining cast (byte) KEY_MODIFIER_COMMODORE#0 ← (unumber)(number) 8 Inlining cast (byte) keyboard_event_scan::keycode#0 ← (unumber)(number) 0 -Inlining cast (byte) keyboard_event_scan::row#0 ← (unumber)(number) 0 -Inlining cast (byte) keyboard_event_scan::col#0 ← (unumber)(number) 0 Inlining cast (byte) keyboard_modifiers#1 ← (unumber)(number) 0 Inlining cast (byte) keyboard_event_get::return#0 ← (unumber)(number) $ff Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 -Inlining cast (byte) bitmap_init::x#0 ← (unumber)(number) 0 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast (byte*) bitmap_init::yoffs#0 ← (byte*)(number) 0 -Inlining cast (byte) bitmap_init::y#0 ← (unumber)(number) 0 Inlining cast (unumber~) bitmap_init::$16 ← (unumber)(number~) bitmap_init::$13 -Inlining cast (byte) bitmap_clear::y#0 ← (unumber)(number) 0 -Inlining cast (byte) bitmap_clear::x#0 ← (unumber)(number) 0 Inlining cast *((byte*) bitmap_clear::bitmap#2) ← (unumber)(number) 0 Inlining cast (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$0 Inlining cast (byte*) VIC_SCREEN0#0 ← (byte*)(number) $4000 @@ -7392,67 +7349,38 @@ Inlining cast (byte~) gfx_mode::$50 ← (byte)(unumber~) gfx_mode::$49 Inlining cast (word~) gfx_mode::$53 ← (word)(byte*~) gfx_mode::$52 Inlining cast (byte~) gfx_mode::$56 ← (byte)(unumber~) gfx_mode::$55 Inlining cast (word~) gfx_mode::$58 ← (word)(byte*~) gfx_mode::$57 -Inlining cast (byte) gfx_mode::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_mode::cx#0 ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 -Inlining cast (byte) gfx_mode::i#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_mode::j#0 ← (unumber)(number) 0 Inlining cast *((byte*) PROCPORT#0) ← (unumber)(number) $32 -Inlining cast (byte) gfx_init_charset::c#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_charset::l#0 ← (unumber)(number) 0 Inlining cast *((byte*) PROCPORT#0) ← (unumber)(number) $37 -Inlining cast (byte) gfx_init_screen0::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_screen0::cx#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_screen1::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_screen1::cx#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_screen2::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_screen2::cx#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_screen3::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_screen3::cx#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_screen4::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_screen4::cx#0 ← (unumber)(number) 0 Inlining cast *((byte*) gfx_init_screen4::ch#2) ← (unumber)(number) 0 Inlining cast (byte) gfx_init_vic_bitmap::lines_cnt#0 ← (unumber)(number) 9 Inlining cast (byte) gfx_init_vic_bitmap::l#0 ← (unumber)(number) 0 Inlining cast (byte~) gfx_init_plane_8bppchunky::$1 ← (byte)(unumber~) gfx_init_plane_8bppchunky::$0 Inlining cast (byte*) gfx_init_plane_8bppchunky::gfxb#0 ← (byte*)(number) $4000 -Inlining cast (byte) gfx_init_plane_8bppchunky::y#0 ← (unumber)(number) 0 -Inlining cast (word) gfx_init_plane_8bppchunky::x#0 ← (unumber)(number) 0 Inlining cast (byte~) gfx_init_plane_8bppchunky::$10 ← (byte)(word~) gfx_init_plane_8bppchunky::$9 Inlining cast (byte*) gfx_init_plane_8bppchunky::gfxb#2 ← (byte*)(number) $4000 Inlining cast (byte~) gfx_init_plane_8bppchunky::$4 ← (byte)(number~) gfx_init_plane_8bppchunky::$3 Inlining cast (byte~) gfx_init_plane_horisontal::$1 ← (byte)(unumber~) gfx_init_plane_horisontal::$0 Inlining cast (byte*) gfx_init_plane_horisontal::gfxa#0 ← (byte*)(unumber~) gfx_init_plane_horisontal::$4 -Inlining cast (byte) gfx_init_plane_horisontal::ay#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_plane_horisontal::ax#0 ← (unumber)(number) 0 Inlining cast *((byte*) gfx_init_plane_horisontal::gfxa#3) ← (unumber)(number) 0 Inlining cast *((byte*) gfx_init_plane_horisontal::gfxa#4) ← (unumber)(number) $ff Inlining cast (byte~) gfx_init_plane_horisontal::$6 ← (byte)(number~) gfx_init_plane_horisontal::$5 Inlining cast (byte~) gfx_init_plane_horisontal2::$1 ← (byte)(unumber~) gfx_init_plane_horisontal2::$0 Inlining cast (byte*) gfx_init_plane_horisontal2::gfxa#0 ← (byte*)(unumber~) gfx_init_plane_horisontal2::$4 -Inlining cast (byte) gfx_init_plane_horisontal2::ay#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_plane_horisontal2::ax#0 ← (unumber)(number) 0 Inlining cast (byte~) gfx_init_plane_horisontal2::$6 ← (byte)(number~) gfx_init_plane_horisontal2::$5 Inlining cast (byte~) gfx_init_plane_vertical::$1 ← (byte)(unumber~) gfx_init_plane_vertical::$0 Inlining cast (byte*) gfx_init_plane_vertical::gfxb#0 ← (byte*)(unumber~) gfx_init_plane_vertical::$4 -Inlining cast (byte) gfx_init_plane_vertical::by#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_plane_vertical::bx#0 ← (unumber)(number) 0 Inlining cast *((byte*) gfx_init_plane_vertical::gfxb#2) ← (unumber)(number) $f Inlining cast (byte~) gfx_init_plane_vertical::$6 ← (byte)(number~) gfx_init_plane_vertical::$5 Inlining cast (byte~) gfx_init_plane_charset8::$1 ← (byte)(unumber~) gfx_init_plane_charset8::$0 Inlining cast (byte*) gfx_init_plane_charset8::gfxa#0 ← (byte*)(unumber~) gfx_init_plane_charset8::$4 Inlining cast (byte) gfx_init_plane_charset8::col#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_plane_charset8::ch#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_plane_charset8::cr#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_plane_charset8::cp#0 ← (unumber)(number) 0 Inlining cast (byte) gfx_init_plane_charset8::c#0 ← (unumber)(number) 0 Inlining cast (byte~) gfx_init_plane_charset8::$6 ← (byte)(number~) gfx_init_plane_charset8::$5 Inlining cast (byte) gfx_init_plane_fill::fill#0 ← (unumber)(number) $1b Inlining cast (byte) gfx_init_plane_fill::fill#1 ← (unumber)(number) 0 Inlining cast (byte) gfx_init_plane_fill::fill#2 ← (unumber)(number) $ff Inlining cast (byte*) gfx_init_plane_fill::gfxb#0 ← (byte*)(unumber~) gfx_init_plane_fill::$6 -Inlining cast (byte) gfx_init_plane_fill::by#0 ← (unumber)(number) 0 -Inlining cast (byte) gfx_init_plane_fill::bx#0 ← (unumber)(number) 0 Inlining cast (byte~) gfx_init_plane_fill::$8 ← (byte)(number~) gfx_init_plane_fill::$7 Inlining cast (dword~) form_mode::$9 ← (dword)(byte*) FORM_CHARSET#0 Inlining cast (byte~) form_mode::$11 ← (byte)(unumber~) form_mode::$10 @@ -7466,12 +7394,10 @@ Inlining cast (word~) form_mode::$24 ← (word)(byte*) FORM_SCREEN#0 Inlining cast (word~) form_mode::$27 ← (word)(byte*) FORM_CHARSET#0 Inlining cast (byte~) form_mode::$31 ← (byte)(unumber~) form_mode::$30 Inlining cast *((byte*) DTV_PLANEA_START_HI#0) ← (unumber)(number) 0 -Inlining cast (byte) form_mode::i#0 ← (unumber)(number) 0 Inlining cast *((byte*) BGCOL#0) ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 Inlining cast (byte) form_field_idx#4 ← (unumber)(number) 0 Inlining cast (signed byte) FORM_CURSOR_BLINK#0 ← (snumber)(number) $28 -Inlining cast (byte) form_set_screen::y#0 ← (unumber)(number) 0 Inlining cast (byte) form_render_values::idx#0 ← (unumber)(number) 0 Inlining cast (byte) form_control::return#1 ← (unumber)(number) 0 Inlining cast (byte) form_field_idx#8 ← (unumber)(number) 0 @@ -7587,8 +7513,6 @@ Simplifying constant integer cast 2 Simplifying constant integer cast 4 Simplifying constant integer cast 8 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast 0 Simplifying constant integer cast 8 @@ -7604,13 +7528,11 @@ Simplifying constant integer cast 7 Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast $80 -Simplifying constant integer cast 0 Simplifying constant integer cast $f8 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant pointer cast (byte*) 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 7 Simplifying constant integer cast 7 Simplifying constant integer cast 7 @@ -7619,8 +7541,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast *((byte[$100]) bitmap_plot_xlo#0 + (unumber)(number) 0) Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast *((byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) Simplifying constant integer cast *((byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) Simplifying constant integer cast *((byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) @@ -8307,42 +8227,26 @@ Simplifying constant integer cast $40 Simplifying constant integer cast $3fff Simplifying constant integer cast 4 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $10 Simplifying constant integer cast $10 Simplifying constant integer cast $10 Simplifying constant integer cast $10 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast $32 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $37 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast $10 Simplifying constant integer cast $f -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast $f Simplifying constant integer cast $10 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 3 Simplifying constant integer cast $10 Simplifying constant integer cast 3 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast $ff Simplifying constant integer cast 0 @@ -8368,15 +8272,11 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $4000 Simplifying constant pointer cast (byte*) 16384 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $8000 Simplifying constant pointer cast (byte*) 16384 Simplifying constant integer cast $4000 Simplifying constant integer cast $3fff Simplifying constant integer cast $4000 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -8388,24 +8288,17 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $55 Simplifying constant integer cast $aa Simplifying constant integer cast $ff -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 3 Simplifying constant integer cast $4000 Simplifying constant integer cast $3fff Simplifying constant integer cast $4000 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast $4000 Simplifying constant integer cast $3fff Simplifying constant integer cast $4000 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -8415,8 +8308,6 @@ Simplifying constant integer cast $ff Simplifying constant integer cast 4 Simplifying constant integer cast $3fff Simplifying constant integer cast $4000 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $10000 Simplifying constant integer cast $400 Simplifying constant integer cast $400 @@ -8432,13 +8323,11 @@ Simplifying constant integer cast $400 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 2 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast *((byte[$19]) form_line_hi#0 + (byte) form_field_ptr::y#0) Simplifying constant integer cast *((byte[$19]) form_line_lo#0 + (byte) form_field_ptr::y#0) @@ -8496,8 +8385,6 @@ Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 @@ -8513,20 +8400,16 @@ Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) $80 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 @@ -8652,54 +8535,34 @@ Finalized unsigned number type (byte) $40 Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) $32 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $37 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 9 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $4000 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $8000 Finalized unsigned number type (word) $4000 Finalized unsigned number type (word) $3fff Finalized unsigned number type (word) $4000 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -8707,24 +8570,17 @@ Finalized unsigned number type (byte) $ff Finalized unsigned number type (word) $4000 Finalized unsigned number type (word) $3fff Finalized unsigned number type (word) $4000 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 Finalized unsigned number type (word) $4000 Finalized unsigned number type (word) $3fff Finalized unsigned number type (word) $4000 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $4000 Finalized unsigned number type (word) $3fff Finalized unsigned number type (word) $4000 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 @@ -8734,8 +8590,6 @@ Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 4 Finalized unsigned number type (word) $3fff Finalized unsigned number type (word) $4000 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (dword) $10000 Finalized unsigned number type (word) $400 Finalized unsigned number type (word) $400 @@ -8751,13 +8605,11 @@ Finalized unsigned number type (word) $400 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) $28 Finalized signed number type (signed byte) 2 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 @@ -10831,7 +10683,7 @@ Constant inlined gfx_init_plane_charset8::chargen#0 = (const byte*) CHARGEN#0 Constant inlined gfx_init_screen2::cx#0 = (byte) 0 Constant inlined gfx_init_plane_fill::fill#1 = (byte) 0 Constant inlined gfx_init_plane_fill::fill#2 = (byte) $ff -Constant inlined gfx_init_plane_8bppchunky::x#0 = (byte) 0 +Constant inlined gfx_init_plane_8bppchunky::x#0 = (word) 0 Constant inlined gfx_init_screen2::cy#0 = (byte) 0 Constant inlined keyboard_event_scan::keycode#0 = (byte) 0 Constant inlined gfx_init_vic_bitmap::l#0 = (byte) 0 @@ -13188,7 +13040,7 @@ gfx_init_plane_8bppchunky::@1: scope:[gfx_init_plane_8bppchunky] from gfx_init_ to:gfx_init_plane_8bppchunky::@2 gfx_init_plane_8bppchunky::@2: scope:[gfx_init_plane_8bppchunky] from gfx_init_plane_8bppchunky::@1 gfx_init_plane_8bppchunky::@3 [581] (byte) gfx_init_plane_8bppchunky::gfxbCpuBank#4 ← phi( gfx_init_plane_8bppchunky::@1/(byte) gfx_init_plane_8bppchunky::gfxbCpuBank#7 gfx_init_plane_8bppchunky::@3/(byte) gfx_init_plane_8bppchunky::gfxbCpuBank#8 ) - [581] (word) gfx_init_plane_8bppchunky::x#2 ← phi( gfx_init_plane_8bppchunky::@1/(byte) 0 gfx_init_plane_8bppchunky::@3/(word) gfx_init_plane_8bppchunky::x#1 ) + [581] (word) gfx_init_plane_8bppchunky::x#2 ← phi( gfx_init_plane_8bppchunky::@1/(word) 0 gfx_init_plane_8bppchunky::@3/(word) gfx_init_plane_8bppchunky::x#1 ) [581] (byte*) gfx_init_plane_8bppchunky::gfxb#3 ← phi( gfx_init_plane_8bppchunky::@1/(byte*) gfx_init_plane_8bppchunky::gfxb#5 gfx_init_plane_8bppchunky::@3/(byte*) gfx_init_plane_8bppchunky::gfxb#1 ) [582] if((byte*) gfx_init_plane_8bppchunky::gfxb#3!=(word) $8000) goto gfx_init_plane_8bppchunky::@3 to:gfx_init_plane_8bppchunky::@4 @@ -19500,10 +19352,10 @@ gfx_init_plane_8bppchunky: { //SEG1203 [581] phi from gfx_init_plane_8bppchunky::@1 to gfx_init_plane_8bppchunky::@2 [phi:gfx_init_plane_8bppchunky::@1->gfx_init_plane_8bppchunky::@2] b2_from_b1: //SEG1204 [581] phi (byte) gfx_init_plane_8bppchunky::gfxbCpuBank#4 = (byte) gfx_init_plane_8bppchunky::gfxbCpuBank#7 [phi:gfx_init_plane_8bppchunky::@1->gfx_init_plane_8bppchunky::@2#0] -- register_copy - //SEG1205 [581] phi (word) gfx_init_plane_8bppchunky::x#2 = (byte) 0 [phi:gfx_init_plane_8bppchunky::@1->gfx_init_plane_8bppchunky::@2#1] -- vwuz1=vbuc1 - lda #0 + //SEG1205 [581] phi (word) gfx_init_plane_8bppchunky::x#2 = (word) 0 [phi:gfx_init_plane_8bppchunky::@1->gfx_init_plane_8bppchunky::@2#1] -- vwuz1=vwuc1 + lda #<0 sta x - lda #0 + lda #>0 sta x+1 //SEG1206 [581] phi (byte*) gfx_init_plane_8bppchunky::gfxb#3 = (byte*) gfx_init_plane_8bppchunky::gfxb#5 [phi:gfx_init_plane_8bppchunky::@1->gfx_init_plane_8bppchunky::@2#2] -- register_copy jmp b2 @@ -26442,10 +26294,10 @@ gfx_init_plane_8bppchunky: { //SEG1203 [581] phi from gfx_init_plane_8bppchunky::@1 to gfx_init_plane_8bppchunky::@2 [phi:gfx_init_plane_8bppchunky::@1->gfx_init_plane_8bppchunky::@2] b2_from_b1: //SEG1204 [581] phi (byte) gfx_init_plane_8bppchunky::gfxbCpuBank#4 = (byte) gfx_init_plane_8bppchunky::gfxbCpuBank#7 [phi:gfx_init_plane_8bppchunky::@1->gfx_init_plane_8bppchunky::@2#0] -- register_copy - //SEG1205 [581] phi (word) gfx_init_plane_8bppchunky::x#2 = (byte) 0 [phi:gfx_init_plane_8bppchunky::@1->gfx_init_plane_8bppchunky::@2#1] -- vwuz1=vbuc1 - lda #0 + //SEG1205 [581] phi (word) gfx_init_plane_8bppchunky::x#2 = (word) 0 [phi:gfx_init_plane_8bppchunky::@1->gfx_init_plane_8bppchunky::@2#1] -- vwuz1=vwuc1 + lda #<0 sta x - lda #0 + lda #>0 sta x+1 //SEG1206 [581] phi (byte*) gfx_init_plane_8bppchunky::gfxb#3 = (byte*) gfx_init_plane_8bppchunky::gfxb#5 [phi:gfx_init_plane_8bppchunky::@1->gfx_init_plane_8bppchunky::@2#2] -- register_copy jmp b2 @@ -28256,7 +28108,7 @@ Removing instruction ldy form_field_ptr.x Removing instruction ldy form_field_ptr.x Replacing instruction ldy #0 with TAY Removing instruction lda #0 -Removing instruction lda #0 +Removing instruction lda #>0 Removing instruction ldy l Removing instruction ldy l Removing instruction ldy l @@ -33650,8 +33502,8 @@ gfx_init_plane_8bppchunky: { b1: //SEG1203 [581] phi from gfx_init_plane_8bppchunky::@1 to gfx_init_plane_8bppchunky::@2 [phi:gfx_init_plane_8bppchunky::@1->gfx_init_plane_8bppchunky::@2] //SEG1204 [581] phi (byte) gfx_init_plane_8bppchunky::gfxbCpuBank#4 = (byte) gfx_init_plane_8bppchunky::gfxbCpuBank#7 [phi:gfx_init_plane_8bppchunky::@1->gfx_init_plane_8bppchunky::@2#0] -- register_copy - //SEG1205 [581] phi (word) gfx_init_plane_8bppchunky::x#2 = (byte) 0 [phi:gfx_init_plane_8bppchunky::@1->gfx_init_plane_8bppchunky::@2#1] -- vwuz1=vbuc1 - lda #0 + //SEG1205 [581] phi (word) gfx_init_plane_8bppchunky::x#2 = (word) 0 [phi:gfx_init_plane_8bppchunky::@1->gfx_init_plane_8bppchunky::@2#1] -- vwuz1=vwuc1 + lda #<0 sta x sta x+1 //SEG1206 [581] phi (byte*) gfx_init_plane_8bppchunky::gfxb#3 = (byte*) gfx_init_plane_8bppchunky::gfxb#5 [phi:gfx_init_plane_8bppchunky::@1->gfx_init_plane_8bppchunky::@2#2] -- register_copy diff --git a/src/test/ref/c64dtv-gfxmodes.asm b/src/test/ref/c64dtv-gfxmodes.asm index c321d05c2..d17a8b2ca 100644 --- a/src/test/ref/c64dtv-gfxmodes.asm +++ b/src/test/ref/c64dtv-gfxmodes.asm @@ -316,7 +316,7 @@ mode_8bppchunkybmm: { lda #>$4000 sta gfxb+1 b3: - lda #0 + lda #<0 sta x sta x+1 b4: diff --git a/src/test/ref/c64dtv-gfxmodes.cfg b/src/test/ref/c64dtv-gfxmodes.cfg index 99272701b..202ccb7b6 100644 --- a/src/test/ref/c64dtv-gfxmodes.cfg +++ b/src/test/ref/c64dtv-gfxmodes.cfg @@ -241,7 +241,7 @@ mode_8bppchunkybmm::@3: scope:[mode_8bppchunkybmm] from mode_8bppchunkybmm::@2 to:mode_8bppchunkybmm::@4 mode_8bppchunkybmm::@4: scope:[mode_8bppchunkybmm] from mode_8bppchunkybmm::@3 mode_8bppchunkybmm::@5 [136] (byte) mode_8bppchunkybmm::gfxbCpuBank#4 ← phi( mode_8bppchunkybmm::@3/(byte) mode_8bppchunkybmm::gfxbCpuBank#7 mode_8bppchunkybmm::@5/(byte) mode_8bppchunkybmm::gfxbCpuBank#8 ) - [136] (word) mode_8bppchunkybmm::x#2 ← phi( mode_8bppchunkybmm::@3/(byte) 0 mode_8bppchunkybmm::@5/(word) mode_8bppchunkybmm::x#1 ) + [136] (word) mode_8bppchunkybmm::x#2 ← phi( mode_8bppchunkybmm::@3/(word) 0 mode_8bppchunkybmm::@5/(word) mode_8bppchunkybmm::x#1 ) [136] (byte*) mode_8bppchunkybmm::gfxb#3 ← phi( mode_8bppchunkybmm::@3/(byte*) mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::@5/(byte*) mode_8bppchunkybmm::gfxb#1 ) [137] if((byte*) mode_8bppchunkybmm::gfxb#3!=(word) $8000) goto mode_8bppchunkybmm::@5 to:mode_8bppchunkybmm::@6 diff --git a/src/test/ref/c64dtv-gfxmodes.log b/src/test/ref/c64dtv-gfxmodes.log index 9c1b651e8..947e719c1 100644 --- a/src/test/ref/c64dtv-gfxmodes.log +++ b/src/test/ref/c64dtv-gfxmodes.log @@ -517,7 +517,7 @@ keyboard_key_pressed::@return: scope:[keyboard_key_pressed] from keyboard_key_p bitmap_init: scope:[bitmap_init] from mode_stdbitmap::@6 (byte*) bitmap_init::bitmap#2 ← phi( mode_stdbitmap::@6/(byte*) bitmap_init::bitmap#0 ) (byte) bitmap_init::bits#0 ← (number) $80 - (byte) bitmap_init::x#0 ← (number) 0 + (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) bitmap_init::bits#0 bitmap_init::@2/(byte) bitmap_init::bits#4 ) @@ -549,7 +549,7 @@ bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@1 to:bitmap_init::@2 bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@2 (byte*) bitmap_init::yoffs#0 ← ((byte*)) (number) 0 - (byte) bitmap_init::y#0 ← (number) 0 + (byte) bitmap_init::y#0 ← (byte) 0 to:bitmap_init::@5 bitmap_init::@5: scope:[bitmap_init] from bitmap_init::@4 bitmap_init::@6 (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@4/(byte*) bitmap_init::yoffs#0 bitmap_init::@6/(byte*) bitmap_init::yoffs#4 ) @@ -585,12 +585,12 @@ bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@6 bitmap_clear: scope:[bitmap_clear] from mode_stdbitmap::@9 (byte*~) bitmap_clear::$0 ← ((byte*)) { *((byte[$100]) bitmap_plot_xhi#0 + (number) 0), *((byte[$100]) bitmap_plot_xlo#0 + (number) 0) } (byte*) bitmap_clear::bitmap#0 ← (byte*~) bitmap_clear::$0 - (byte) bitmap_clear::y#0 ← (number) 0 + (byte) bitmap_clear::y#0 ← (byte) 0 to:bitmap_clear::@1 bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear bitmap_clear::@3 (byte) bitmap_clear::y#4 ← phi( bitmap_clear/(byte) bitmap_clear::y#0 bitmap_clear::@3/(byte) bitmap_clear::y#1 ) (byte*) bitmap_clear::bitmap#3 ← phi( bitmap_clear/(byte*) bitmap_clear::bitmap#0 bitmap_clear::@3/(byte*) bitmap_clear::bitmap#4 ) - (byte) bitmap_clear::x#0 ← (number) 0 + (byte) bitmap_clear::x#0 ← (byte) 0 to:bitmap_clear::@2 bitmap_clear::@2: scope:[bitmap_clear] from bitmap_clear::@1 bitmap_clear::@2 (byte) bitmap_clear::y#3 ← phi( bitmap_clear::@1/(byte) bitmap_clear::y#4 bitmap_clear::@2/(byte) bitmap_clear::y#3 ) @@ -1149,7 +1149,7 @@ menu: scope:[menu] from main::@2 (number~) menu::$21 ← (number~) menu::$17 | (number~) menu::$20 (byte~) menu::$22 ← ((byte)) (number~) menu::$21 *((byte*) VIC_MEMORY#0) ← (byte~) menu::$22 - (byte) menu::i#0 ← (number) 0 + (byte) menu::i#0 ← (byte) 0 to:menu::@1 menu::@1: scope:[menu] from menu menu::@1 (byte) dtv_control#242 ← phi( menu/(byte) dtv_control#251 menu::@1/(byte) dtv_control#242 ) @@ -1884,7 +1884,7 @@ mode_stdchar: scope:[mode_stdchar] from menu::@22 (number~) mode_stdchar::$21 ← (number~) mode_stdchar::$17 | (number~) mode_stdchar::$20 (byte~) mode_stdchar::$22 ← ((byte)) (number~) mode_stdchar::$21 *((byte*) VIC_MEMORY#0) ← (byte~) mode_stdchar::$22 - (byte) mode_stdchar::i#0 ← (number) 0 + (byte) mode_stdchar::i#0 ← (byte) 0 to:mode_stdchar::@1 mode_stdchar::@1: scope:[mode_stdchar] from mode_stdchar mode_stdchar::@1 (byte) dtv_control#220 ← phi( mode_stdchar/(byte) dtv_control#18 mode_stdchar::@1/(byte) dtv_control#220 ) @@ -1900,14 +1900,14 @@ mode_stdchar::@2: scope:[mode_stdchar] from mode_stdchar::@1 *((byte*) BORDERCOL#0) ← (number) 0 (byte*) mode_stdchar::col#0 ← (byte*) mode_stdchar::COLORS#0 (byte*) mode_stdchar::ch#0 ← (byte*) mode_stdchar::SCREEN#0 - (byte) mode_stdchar::cy#0 ← (number) 0 + (byte) mode_stdchar::cy#0 ← (byte) 0 to:mode_stdchar::@3 mode_stdchar::@3: scope:[mode_stdchar] from mode_stdchar::@2 mode_stdchar::@5 (byte) dtv_control#189 ← phi( mode_stdchar::@2/(byte) dtv_control#204 mode_stdchar::@5/(byte) dtv_control#147 ) (byte*) mode_stdchar::ch#3 ← phi( mode_stdchar::@2/(byte*) mode_stdchar::ch#0 mode_stdchar::@5/(byte*) mode_stdchar::ch#4 ) (byte*) mode_stdchar::col#3 ← phi( mode_stdchar::@2/(byte*) mode_stdchar::col#0 mode_stdchar::@5/(byte*) mode_stdchar::col#4 ) (byte) mode_stdchar::cy#4 ← phi( mode_stdchar::@2/(byte) mode_stdchar::cy#0 mode_stdchar::@5/(byte) mode_stdchar::cy#1 ) - (byte) mode_stdchar::cx#0 ← (number) 0 + (byte) mode_stdchar::cx#0 ← (byte) 0 to:mode_stdchar::@4 mode_stdchar::@4: scope:[mode_stdchar] from mode_stdchar::@3 mode_stdchar::@4 (byte) dtv_control#175 ← phi( mode_stdchar::@3/(byte) dtv_control#189 mode_stdchar::@4/(byte) dtv_control#175 ) @@ -1989,7 +1989,7 @@ mode_ecmchar: scope:[mode_ecmchar] from menu::@24 (number~) mode_ecmchar::$22 ← (number~) mode_ecmchar::$18 | (number~) mode_ecmchar::$21 (byte~) mode_ecmchar::$23 ← ((byte)) (number~) mode_ecmchar::$22 *((byte*) VIC_MEMORY#0) ← (byte~) mode_ecmchar::$23 - (byte) mode_ecmchar::i#0 ← (number) 0 + (byte) mode_ecmchar::i#0 ← (byte) 0 to:mode_ecmchar::@1 mode_ecmchar::@1: scope:[mode_ecmchar] from mode_ecmchar mode_ecmchar::@1 (byte) dtv_control#221 ← phi( mode_ecmchar/(byte) dtv_control#21 mode_ecmchar::@1/(byte) dtv_control#221 ) @@ -2008,14 +2008,14 @@ mode_ecmchar::@2: scope:[mode_ecmchar] from mode_ecmchar::@1 *((byte*) BGCOL4#0) ← (number) 6 (byte*) mode_ecmchar::col#0 ← (byte*) mode_ecmchar::COLORS#0 (byte*) mode_ecmchar::ch#0 ← (byte*) mode_ecmchar::SCREEN#0 - (byte) mode_ecmchar::cy#0 ← (number) 0 + (byte) mode_ecmchar::cy#0 ← (byte) 0 to:mode_ecmchar::@3 mode_ecmchar::@3: scope:[mode_ecmchar] from mode_ecmchar::@2 mode_ecmchar::@5 (byte) dtv_control#190 ← phi( mode_ecmchar::@2/(byte) dtv_control#205 mode_ecmchar::@5/(byte) dtv_control#148 ) (byte*) mode_ecmchar::ch#3 ← phi( mode_ecmchar::@2/(byte*) mode_ecmchar::ch#0 mode_ecmchar::@5/(byte*) mode_ecmchar::ch#4 ) (byte*) mode_ecmchar::col#3 ← phi( mode_ecmchar::@2/(byte*) mode_ecmchar::col#0 mode_ecmchar::@5/(byte*) mode_ecmchar::col#4 ) (byte) mode_ecmchar::cy#4 ← phi( mode_ecmchar::@2/(byte) mode_ecmchar::cy#0 mode_ecmchar::@5/(byte) mode_ecmchar::cy#1 ) - (byte) mode_ecmchar::cx#0 ← (number) 0 + (byte) mode_ecmchar::cx#0 ← (byte) 0 to:mode_ecmchar::@4 mode_ecmchar::@4: scope:[mode_ecmchar] from mode_ecmchar::@3 mode_ecmchar::@4 (byte) dtv_control#176 ← phi( mode_ecmchar::@3/(byte) dtv_control#190 mode_ecmchar::@4/(byte) dtv_control#176 ) @@ -2097,7 +2097,7 @@ mode_mcchar: scope:[mode_mcchar] from menu::@26 (number~) mode_mcchar::$22 ← (number~) mode_mcchar::$18 | (number~) mode_mcchar::$21 (byte~) mode_mcchar::$23 ← ((byte)) (number~) mode_mcchar::$22 *((byte*) VIC_MEMORY#0) ← (byte~) mode_mcchar::$23 - (byte) mode_mcchar::i#0 ← (number) 0 + (byte) mode_mcchar::i#0 ← (byte) 0 to:mode_mcchar::@1 mode_mcchar::@1: scope:[mode_mcchar] from mode_mcchar mode_mcchar::@1 (byte) dtv_control#222 ← phi( mode_mcchar/(byte) dtv_control#24 mode_mcchar::@1/(byte) dtv_control#222 ) @@ -2115,14 +2115,14 @@ mode_mcchar::@2: scope:[mode_mcchar] from mode_mcchar::@1 *((byte*) BGCOL3#0) ← (byte) BLUE#0 (byte*) mode_mcchar::col#0 ← (byte*) mode_mcchar::COLORS#0 (byte*) mode_mcchar::ch#0 ← (byte*) mode_mcchar::SCREEN#0 - (byte) mode_mcchar::cy#0 ← (number) 0 + (byte) mode_mcchar::cy#0 ← (byte) 0 to:mode_mcchar::@3 mode_mcchar::@3: scope:[mode_mcchar] from mode_mcchar::@2 mode_mcchar::@5 (byte) dtv_control#191 ← phi( mode_mcchar::@2/(byte) dtv_control#206 mode_mcchar::@5/(byte) dtv_control#149 ) (byte*) mode_mcchar::ch#3 ← phi( mode_mcchar::@2/(byte*) mode_mcchar::ch#0 mode_mcchar::@5/(byte*) mode_mcchar::ch#4 ) (byte*) mode_mcchar::col#3 ← phi( mode_mcchar::@2/(byte*) mode_mcchar::col#0 mode_mcchar::@5/(byte*) mode_mcchar::col#4 ) (byte) mode_mcchar::cy#4 ← phi( mode_mcchar::@2/(byte) mode_mcchar::cy#0 mode_mcchar::@5/(byte) mode_mcchar::cy#1 ) - (byte) mode_mcchar::cx#0 ← (number) 0 + (byte) mode_mcchar::cx#0 ← (byte) 0 to:mode_mcchar::@4 mode_mcchar::@4: scope:[mode_mcchar] from mode_mcchar::@3 mode_mcchar::@4 (byte) dtv_control#177 ← phi( mode_mcchar::@3/(byte) dtv_control#191 mode_mcchar::@4/(byte) dtv_control#177 ) @@ -2195,7 +2195,7 @@ mode_stdbitmap: scope:[mode_stdbitmap] from menu::@28 (number~) mode_stdbitmap::$16 ← (number~) mode_stdbitmap::$12 | (number~) mode_stdbitmap::$15 (byte~) mode_stdbitmap::$17 ← ((byte)) (number~) mode_stdbitmap::$16 *((byte*) VIC_MEMORY#0) ← (byte~) mode_stdbitmap::$17 - (byte) mode_stdbitmap::i#0 ← (number) 0 + (byte) mode_stdbitmap::i#0 ← (byte) 0 to:mode_stdbitmap::@1 mode_stdbitmap::@1: scope:[mode_stdbitmap] from mode_stdbitmap mode_stdbitmap::@1 (byte) dtv_control#268 ← phi( mode_stdbitmap/(byte) dtv_control#27 mode_stdbitmap::@1/(byte) dtv_control#268 ) @@ -2210,13 +2210,13 @@ mode_stdbitmap::@2: scope:[mode_stdbitmap] from mode_stdbitmap::@1 *((byte*) BGCOL#0) ← (byte) BLACK#0 *((byte*) BORDERCOL#0) ← (byte) BLACK#0 (byte*) mode_stdbitmap::ch#0 ← (byte*) mode_stdbitmap::SCREEN#0 - (byte) mode_stdbitmap::cy#0 ← (number) 0 + (byte) mode_stdbitmap::cy#0 ← (byte) 0 to:mode_stdbitmap::@3 mode_stdbitmap::@3: scope:[mode_stdbitmap] from mode_stdbitmap::@2 mode_stdbitmap::@5 (byte) dtv_control#254 ← phi( mode_stdbitmap::@2/(byte) dtv_control#261 mode_stdbitmap::@5/(byte) dtv_control#236 ) (byte*) mode_stdbitmap::ch#3 ← phi( mode_stdbitmap::@2/(byte*) mode_stdbitmap::ch#0 mode_stdbitmap::@5/(byte*) mode_stdbitmap::ch#4 ) (byte) mode_stdbitmap::cy#4 ← phi( mode_stdbitmap::@2/(byte) mode_stdbitmap::cy#0 mode_stdbitmap::@5/(byte) mode_stdbitmap::cy#1 ) - (byte) mode_stdbitmap::cx#0 ← (number) 0 + (byte) mode_stdbitmap::cx#0 ← (byte) 0 to:mode_stdbitmap::@4 mode_stdbitmap::@4: scope:[mode_stdbitmap] from mode_stdbitmap::@3 mode_stdbitmap::@4 (byte) dtv_control#244 ← phi( mode_stdbitmap::@3/(byte) dtv_control#254 mode_stdbitmap::@4/(byte) dtv_control#244 ) @@ -2328,7 +2328,7 @@ mode_hicolstdchar: scope:[mode_hicolstdchar] from menu::@30 (number~) mode_hicolstdchar::$21 ← (number~) mode_hicolstdchar::$17 | (number~) mode_hicolstdchar::$20 (byte~) mode_hicolstdchar::$22 ← ((byte)) (number~) mode_hicolstdchar::$21 *((byte*) VIC_MEMORY#0) ← (byte~) mode_hicolstdchar::$22 - (byte) mode_hicolstdchar::i#0 ← (number) 0 + (byte) mode_hicolstdchar::i#0 ← (byte) 0 to:mode_hicolstdchar::@1 mode_hicolstdchar::@1: scope:[mode_hicolstdchar] from mode_hicolstdchar mode_hicolstdchar::@1 (byte) dtv_control#224 ← phi( mode_hicolstdchar/(byte) dtv_control#30 mode_hicolstdchar::@1/(byte) dtv_control#224 ) @@ -2344,14 +2344,14 @@ mode_hicolstdchar::@2: scope:[mode_hicolstdchar] from mode_hicolstdchar::@1 *((byte*) BORDERCOL#0) ← (number) 0 (byte*) mode_hicolstdchar::col#0 ← (byte*) mode_hicolstdchar::COLORS#0 (byte*) mode_hicolstdchar::ch#0 ← (byte*) mode_hicolstdchar::SCREEN#0 - (byte) mode_hicolstdchar::cy#0 ← (number) 0 + (byte) mode_hicolstdchar::cy#0 ← (byte) 0 to:mode_hicolstdchar::@3 mode_hicolstdchar::@3: scope:[mode_hicolstdchar] from mode_hicolstdchar::@2 mode_hicolstdchar::@5 (byte) dtv_control#193 ← phi( mode_hicolstdchar::@2/(byte) dtv_control#208 mode_hicolstdchar::@5/(byte) dtv_control#151 ) (byte*) mode_hicolstdchar::ch#3 ← phi( mode_hicolstdchar::@2/(byte*) mode_hicolstdchar::ch#0 mode_hicolstdchar::@5/(byte*) mode_hicolstdchar::ch#4 ) (byte*) mode_hicolstdchar::col#3 ← phi( mode_hicolstdchar::@2/(byte*) mode_hicolstdchar::col#0 mode_hicolstdchar::@5/(byte*) mode_hicolstdchar::col#4 ) (byte) mode_hicolstdchar::cy#4 ← phi( mode_hicolstdchar::@2/(byte) mode_hicolstdchar::cy#0 mode_hicolstdchar::@5/(byte) mode_hicolstdchar::cy#1 ) - (byte) mode_hicolstdchar::cx#0 ← (number) 0 + (byte) mode_hicolstdchar::cx#0 ← (byte) 0 to:mode_hicolstdchar::@4 mode_hicolstdchar::@4: scope:[mode_hicolstdchar] from mode_hicolstdchar::@3 mode_hicolstdchar::@4 (byte) dtv_control#179 ← phi( mode_hicolstdchar::@3/(byte) dtv_control#193 mode_hicolstdchar::@4/(byte) dtv_control#179 ) @@ -2432,7 +2432,7 @@ mode_hicolecmchar: scope:[mode_hicolecmchar] from menu::@32 (number~) mode_hicolecmchar::$22 ← (number~) mode_hicolecmchar::$18 | (number~) mode_hicolecmchar::$21 (byte~) mode_hicolecmchar::$23 ← ((byte)) (number~) mode_hicolecmchar::$22 *((byte*) VIC_MEMORY#0) ← (byte~) mode_hicolecmchar::$23 - (byte) mode_hicolecmchar::i#0 ← (number) 0 + (byte) mode_hicolecmchar::i#0 ← (byte) 0 to:mode_hicolecmchar::@1 mode_hicolecmchar::@1: scope:[mode_hicolecmchar] from mode_hicolecmchar mode_hicolecmchar::@1 (byte) dtv_control#225 ← phi( mode_hicolecmchar/(byte) dtv_control#33 mode_hicolecmchar::@1/(byte) dtv_control#225 ) @@ -2451,14 +2451,14 @@ mode_hicolecmchar::@2: scope:[mode_hicolecmchar] from mode_hicolecmchar::@1 *((byte*) BGCOL4#0) ← (number) $5c (byte*) mode_hicolecmchar::col#0 ← (byte*) mode_hicolecmchar::COLORS#0 (byte*) mode_hicolecmchar::ch#0 ← (byte*) mode_hicolecmchar::SCREEN#0 - (byte) mode_hicolecmchar::cy#0 ← (number) 0 + (byte) mode_hicolecmchar::cy#0 ← (byte) 0 to:mode_hicolecmchar::@3 mode_hicolecmchar::@3: scope:[mode_hicolecmchar] from mode_hicolecmchar::@2 mode_hicolecmchar::@5 (byte) dtv_control#194 ← phi( mode_hicolecmchar::@2/(byte) dtv_control#209 mode_hicolecmchar::@5/(byte) dtv_control#152 ) (byte*) mode_hicolecmchar::ch#3 ← phi( mode_hicolecmchar::@2/(byte*) mode_hicolecmchar::ch#0 mode_hicolecmchar::@5/(byte*) mode_hicolecmchar::ch#4 ) (byte*) mode_hicolecmchar::col#3 ← phi( mode_hicolecmchar::@2/(byte*) mode_hicolecmchar::col#0 mode_hicolecmchar::@5/(byte*) mode_hicolecmchar::col#4 ) (byte) mode_hicolecmchar::cy#4 ← phi( mode_hicolecmchar::@2/(byte) mode_hicolecmchar::cy#0 mode_hicolecmchar::@5/(byte) mode_hicolecmchar::cy#1 ) - (byte) mode_hicolecmchar::cx#0 ← (number) 0 + (byte) mode_hicolecmchar::cx#0 ← (byte) 0 to:mode_hicolecmchar::@4 mode_hicolecmchar::@4: scope:[mode_hicolecmchar] from mode_hicolecmchar::@3 mode_hicolecmchar::@4 (byte) dtv_control#180 ← phi( mode_hicolecmchar::@3/(byte) dtv_control#194 mode_hicolecmchar::@4/(byte) dtv_control#180 ) @@ -2539,7 +2539,7 @@ mode_hicolmcchar: scope:[mode_hicolmcchar] from menu::@34 (number~) mode_hicolmcchar::$22 ← (number~) mode_hicolmcchar::$18 | (number~) mode_hicolmcchar::$21 (byte~) mode_hicolmcchar::$23 ← ((byte)) (number~) mode_hicolmcchar::$22 *((byte*) VIC_MEMORY#0) ← (byte~) mode_hicolmcchar::$23 - (byte) mode_hicolmcchar::i#0 ← (number) 0 + (byte) mode_hicolmcchar::i#0 ← (byte) 0 to:mode_hicolmcchar::@1 mode_hicolmcchar::@1: scope:[mode_hicolmcchar] from mode_hicolmcchar mode_hicolmcchar::@1 (byte) dtv_control#226 ← phi( mode_hicolmcchar/(byte) dtv_control#36 mode_hicolmcchar::@1/(byte) dtv_control#226 ) @@ -2557,14 +2557,14 @@ mode_hicolmcchar::@2: scope:[mode_hicolmcchar] from mode_hicolmcchar::@1 *((byte*) BGCOL3#0) ← (number) $58 (byte*) mode_hicolmcchar::col#0 ← (byte*) mode_hicolmcchar::COLORS#0 (byte*) mode_hicolmcchar::ch#0 ← (byte*) mode_hicolmcchar::SCREEN#0 - (byte) mode_hicolmcchar::cy#0 ← (number) 0 + (byte) mode_hicolmcchar::cy#0 ← (byte) 0 to:mode_hicolmcchar::@3 mode_hicolmcchar::@3: scope:[mode_hicolmcchar] from mode_hicolmcchar::@2 mode_hicolmcchar::@5 (byte) dtv_control#195 ← phi( mode_hicolmcchar::@2/(byte) dtv_control#210 mode_hicolmcchar::@5/(byte) dtv_control#153 ) (byte*) mode_hicolmcchar::ch#3 ← phi( mode_hicolmcchar::@2/(byte*) mode_hicolmcchar::ch#0 mode_hicolmcchar::@5/(byte*) mode_hicolmcchar::ch#4 ) (byte*) mode_hicolmcchar::col#3 ← phi( mode_hicolmcchar::@2/(byte*) mode_hicolmcchar::col#0 mode_hicolmcchar::@5/(byte*) mode_hicolmcchar::col#4 ) (byte) mode_hicolmcchar::cy#4 ← phi( mode_hicolmcchar::@2/(byte) mode_hicolmcchar::cy#0 mode_hicolmcchar::@5/(byte) mode_hicolmcchar::cy#1 ) - (byte) mode_hicolmcchar::cx#0 ← (number) 0 + (byte) mode_hicolmcchar::cx#0 ← (byte) 0 to:mode_hicolmcchar::@4 mode_hicolmcchar::@4: scope:[mode_hicolmcchar] from mode_hicolmcchar::@3 mode_hicolmcchar::@4 (byte) dtv_control#181 ← phi( mode_hicolmcchar::@3/(byte) dtv_control#195 mode_hicolmcchar::@4/(byte) dtv_control#181 ) @@ -2643,7 +2643,7 @@ mode_twoplanebitmap: scope:[mode_twoplanebitmap] from menu::@38 (byte*~) mode_twoplanebitmap::$12 ← (byte*) mode_twoplanebitmap::COLORS#0 / (number) $400 (byte~) mode_twoplanebitmap::$13 ← > (byte*~) mode_twoplanebitmap::$12 *((byte*) DTV_COLOR_BANK_HI#0) ← (byte~) mode_twoplanebitmap::$13 - (byte) mode_twoplanebitmap::i#0 ← (number) 0 + (byte) mode_twoplanebitmap::i#0 ← (byte) 0 to:mode_twoplanebitmap::@1 mode_twoplanebitmap::@1: scope:[mode_twoplanebitmap] from mode_twoplanebitmap mode_twoplanebitmap::@1 (byte) dtv_control#288 ← phi( mode_twoplanebitmap/(byte) dtv_control#39 mode_twoplanebitmap::@1/(byte) dtv_control#288 ) @@ -2659,13 +2659,13 @@ mode_twoplanebitmap::@2: scope:[mode_twoplanebitmap] from mode_twoplanebitmap:: *((byte*) BGCOL1#0) ← (number) $70 *((byte*) BGCOL2#0) ← (number) $d4 (byte*) mode_twoplanebitmap::col#0 ← (byte*) mode_twoplanebitmap::COLORS#0 - (byte) mode_twoplanebitmap::cy#0 ← (number) 0 + (byte) mode_twoplanebitmap::cy#0 ← (byte) 0 to:mode_twoplanebitmap::@3 mode_twoplanebitmap::@3: scope:[mode_twoplanebitmap] from mode_twoplanebitmap::@2 mode_twoplanebitmap::@5 (byte) dtv_control#284 ← phi( mode_twoplanebitmap::@2/(byte) dtv_control#287 mode_twoplanebitmap::@5/(byte) dtv_control#274 ) (byte*) mode_twoplanebitmap::col#3 ← phi( mode_twoplanebitmap::@2/(byte*) mode_twoplanebitmap::col#0 mode_twoplanebitmap::@5/(byte*) mode_twoplanebitmap::col#4 ) (byte) mode_twoplanebitmap::cy#4 ← phi( mode_twoplanebitmap::@2/(byte) mode_twoplanebitmap::cy#0 mode_twoplanebitmap::@5/(byte) mode_twoplanebitmap::cy#1 ) - (byte) mode_twoplanebitmap::cx#0 ← (number) 0 + (byte) mode_twoplanebitmap::cx#0 ← (byte) 0 to:mode_twoplanebitmap::@4 mode_twoplanebitmap::@4: scope:[mode_twoplanebitmap] from mode_twoplanebitmap::@3 mode_twoplanebitmap::@4 (byte) dtv_control#280 ← phi( mode_twoplanebitmap::@3/(byte) dtv_control#284 mode_twoplanebitmap::@4/(byte) dtv_control#280 ) @@ -2693,13 +2693,13 @@ mode_twoplanebitmap::@5: scope:[mode_twoplanebitmap] from mode_twoplanebitmap:: mode_twoplanebitmap::@6: scope:[mode_twoplanebitmap] from mode_twoplanebitmap::@5 (byte) dtv_control#269 ← phi( mode_twoplanebitmap::@5/(byte) dtv_control#274 ) (byte*) mode_twoplanebitmap::gfxa#0 ← (byte*) mode_twoplanebitmap::PLANEA#0 - (byte) mode_twoplanebitmap::ay#0 ← (number) 0 + (byte) mode_twoplanebitmap::ay#0 ← (byte) 0 to:mode_twoplanebitmap::@7 mode_twoplanebitmap::@7: scope:[mode_twoplanebitmap] from mode_twoplanebitmap::@13 mode_twoplanebitmap::@6 (byte) dtv_control#262 ← phi( mode_twoplanebitmap::@13/(byte) dtv_control#227 mode_twoplanebitmap::@6/(byte) dtv_control#269 ) (byte*) mode_twoplanebitmap::gfxa#7 ← phi( mode_twoplanebitmap::@13/(byte*) mode_twoplanebitmap::gfxa#8 mode_twoplanebitmap::@6/(byte*) mode_twoplanebitmap::gfxa#0 ) (byte) mode_twoplanebitmap::ay#5 ← phi( mode_twoplanebitmap::@13/(byte) mode_twoplanebitmap::ay#1 mode_twoplanebitmap::@6/(byte) mode_twoplanebitmap::ay#0 ) - (byte) mode_twoplanebitmap::ax#0 ← (number) 0 + (byte) mode_twoplanebitmap::ax#0 ← (byte) 0 to:mode_twoplanebitmap::@8 mode_twoplanebitmap::@8: scope:[mode_twoplanebitmap] from mode_twoplanebitmap::@10 mode_twoplanebitmap::@7 (byte) dtv_control#255 ← phi( mode_twoplanebitmap::@10/(byte) dtv_control#237 mode_twoplanebitmap::@7/(byte) dtv_control#262 ) @@ -2746,13 +2746,13 @@ mode_twoplanebitmap::@13: scope:[mode_twoplanebitmap] from mode_twoplanebitmap: mode_twoplanebitmap::@14: scope:[mode_twoplanebitmap] from mode_twoplanebitmap::@13 (byte) dtv_control#211 ← phi( mode_twoplanebitmap::@13/(byte) dtv_control#227 ) (byte*) mode_twoplanebitmap::gfxb#0 ← (byte*) mode_twoplanebitmap::PLANEB#0 - (byte) mode_twoplanebitmap::by#0 ← (number) 0 + (byte) mode_twoplanebitmap::by#0 ← (byte) 0 to:mode_twoplanebitmap::@15 mode_twoplanebitmap::@15: scope:[mode_twoplanebitmap] from mode_twoplanebitmap::@14 mode_twoplanebitmap::@17 (byte) dtv_control#196 ← phi( mode_twoplanebitmap::@14/(byte) dtv_control#211 mode_twoplanebitmap::@17/(byte) dtv_control#154 ) (byte) mode_twoplanebitmap::by#4 ← phi( mode_twoplanebitmap::@14/(byte) mode_twoplanebitmap::by#0 mode_twoplanebitmap::@17/(byte) mode_twoplanebitmap::by#1 ) (byte*) mode_twoplanebitmap::gfxb#3 ← phi( mode_twoplanebitmap::@14/(byte*) mode_twoplanebitmap::gfxb#0 mode_twoplanebitmap::@17/(byte*) mode_twoplanebitmap::gfxb#4 ) - (byte) mode_twoplanebitmap::bx#0 ← (number) 0 + (byte) mode_twoplanebitmap::bx#0 ← (byte) 0 to:mode_twoplanebitmap::@16 mode_twoplanebitmap::@16: scope:[mode_twoplanebitmap] from mode_twoplanebitmap::@15 mode_twoplanebitmap::@16 (byte) dtv_control#182 ← phi( mode_twoplanebitmap::@15/(byte) dtv_control#196 mode_twoplanebitmap::@16/(byte) dtv_control#182 ) @@ -2823,7 +2823,7 @@ mode_sixsfred: scope:[mode_sixsfred] from menu::@40 (byte*~) mode_sixsfred::$13 ← (byte*) mode_sixsfred::COLORS#0 / (number) $400 (byte~) mode_sixsfred::$14 ← > (byte*~) mode_sixsfred::$13 *((byte*) DTV_COLOR_BANK_HI#0) ← (byte~) mode_sixsfred::$14 - (byte) mode_sixsfred::i#0 ← (number) 0 + (byte) mode_sixsfred::i#0 ← (byte) 0 to:mode_sixsfred::@1 mode_sixsfred::@1: scope:[mode_sixsfred] from mode_sixsfred mode_sixsfred::@1 (byte) dtv_control#285 ← phi( mode_sixsfred/(byte) dtv_control#42 mode_sixsfred::@1/(byte) dtv_control#285 ) @@ -2837,13 +2837,13 @@ mode_sixsfred::@2: scope:[mode_sixsfred] from mode_sixsfred::@1 (byte) dtv_control#281 ← phi( mode_sixsfred::@1/(byte) dtv_control#285 ) *((byte*) BORDERCOL#0) ← (number) 0 (byte*) mode_sixsfred::col#0 ← (byte*) mode_sixsfred::COLORS#0 - (byte) mode_sixsfred::cy#0 ← (number) 0 + (byte) mode_sixsfred::cy#0 ← (byte) 0 to:mode_sixsfred::@3 mode_sixsfred::@3: scope:[mode_sixsfred] from mode_sixsfred::@2 mode_sixsfred::@5 (byte) dtv_control#275 ← phi( mode_sixsfred::@2/(byte) dtv_control#281 mode_sixsfred::@5/(byte) dtv_control#263 ) (byte*) mode_sixsfred::col#3 ← phi( mode_sixsfred::@2/(byte*) mode_sixsfred::col#0 mode_sixsfred::@5/(byte*) mode_sixsfred::col#4 ) (byte) mode_sixsfred::cy#4 ← phi( mode_sixsfred::@2/(byte) mode_sixsfred::cy#0 mode_sixsfred::@5/(byte) mode_sixsfred::cy#1 ) - (byte) mode_sixsfred::cx#0 ← (number) 0 + (byte) mode_sixsfred::cx#0 ← (byte) 0 to:mode_sixsfred::@4 mode_sixsfred::@4: scope:[mode_sixsfred] from mode_sixsfred::@3 mode_sixsfred::@4 (byte) dtv_control#270 ← phi( mode_sixsfred::@3/(byte) dtv_control#275 mode_sixsfred::@4/(byte) dtv_control#270 ) @@ -2870,13 +2870,13 @@ mode_sixsfred::@6: scope:[mode_sixsfred] from mode_sixsfred::@5 (byte) dtv_control#256 ← phi( mode_sixsfred::@5/(byte) dtv_control#263 ) (byte*) mode_sixsfred::gfxa#0 ← (byte*) mode_sixsfred::PLANEA#0 (byte[]) mode_sixsfred::row_bitmask#0 ← { (number) 0, (number) $55, (number) $aa, (number) $ff } - (byte) mode_sixsfred::ay#0 ← (number) 0 + (byte) mode_sixsfred::ay#0 ← (byte) 0 to:mode_sixsfred::@7 mode_sixsfred::@7: scope:[mode_sixsfred] from mode_sixsfred::@6 mode_sixsfred::@9 (byte) dtv_control#247 ← phi( mode_sixsfred::@6/(byte) dtv_control#256 mode_sixsfred::@9/(byte) dtv_control#228 ) (byte*) mode_sixsfred::gfxa#3 ← phi( mode_sixsfred::@6/(byte*) mode_sixsfred::gfxa#0 mode_sixsfred::@9/(byte*) mode_sixsfred::gfxa#4 ) (byte) mode_sixsfred::ay#4 ← phi( mode_sixsfred::@6/(byte) mode_sixsfred::ay#0 mode_sixsfred::@9/(byte) mode_sixsfred::ay#1 ) - (byte) mode_sixsfred::ax#0 ← (number) 0 + (byte) mode_sixsfred::ax#0 ← (byte) 0 to:mode_sixsfred::@8 mode_sixsfred::@8: scope:[mode_sixsfred] from mode_sixsfred::@7 mode_sixsfred::@8 (byte) dtv_control#238 ← phi( mode_sixsfred::@7/(byte) dtv_control#247 mode_sixsfred::@8/(byte) dtv_control#238 ) @@ -2903,13 +2903,13 @@ mode_sixsfred::@9: scope:[mode_sixsfred] from mode_sixsfred::@8 mode_sixsfred::@10: scope:[mode_sixsfred] from mode_sixsfred::@9 (byte) dtv_control#212 ← phi( mode_sixsfred::@9/(byte) dtv_control#228 ) (byte*) mode_sixsfred::gfxb#0 ← (byte*) mode_sixsfred::PLANEB#0 - (byte) mode_sixsfred::by#0 ← (number) 0 + (byte) mode_sixsfred::by#0 ← (byte) 0 to:mode_sixsfred::@11 mode_sixsfred::@11: scope:[mode_sixsfred] from mode_sixsfred::@10 mode_sixsfred::@13 (byte) dtv_control#197 ← phi( mode_sixsfred::@10/(byte) dtv_control#212 mode_sixsfred::@13/(byte) dtv_control#155 ) (byte) mode_sixsfred::by#4 ← phi( mode_sixsfred::@10/(byte) mode_sixsfred::by#0 mode_sixsfred::@13/(byte) mode_sixsfred::by#1 ) (byte*) mode_sixsfred::gfxb#3 ← phi( mode_sixsfred::@10/(byte*) mode_sixsfred::gfxb#0 mode_sixsfred::@13/(byte*) mode_sixsfred::gfxb#4 ) - (byte) mode_sixsfred::bx#0 ← (number) 0 + (byte) mode_sixsfred::bx#0 ← (byte) 0 to:mode_sixsfred::@12 mode_sixsfred::@12: scope:[mode_sixsfred] from mode_sixsfred::@11 mode_sixsfred::@12 (byte) dtv_control#183 ← phi( mode_sixsfred::@11/(byte) dtv_control#197 mode_sixsfred::@12/(byte) dtv_control#183 ) @@ -2978,7 +2978,7 @@ mode_sixsfred2: scope:[mode_sixsfred2] from menu::@36 (byte*~) mode_sixsfred2::$11 ← (byte*) mode_sixsfred2::COLORS#0 / (number) $400 (byte~) mode_sixsfred2::$12 ← > (byte*~) mode_sixsfred2::$11 *((byte*) DTV_COLOR_BANK_HI#0) ← (byte~) mode_sixsfred2::$12 - (byte) mode_sixsfred2::i#0 ← (number) 0 + (byte) mode_sixsfred2::i#0 ← (byte) 0 to:mode_sixsfred2::@1 mode_sixsfred2::@1: scope:[mode_sixsfred2] from mode_sixsfred2 mode_sixsfred2::@1 (byte) dtv_control#286 ← phi( mode_sixsfred2/(byte) dtv_control#45 mode_sixsfred2::@1/(byte) dtv_control#286 ) @@ -2992,13 +2992,13 @@ mode_sixsfred2::@2: scope:[mode_sixsfred2] from mode_sixsfred2::@1 (byte) dtv_control#282 ← phi( mode_sixsfred2::@1/(byte) dtv_control#286 ) *((byte*) BORDERCOL#0) ← (number) 0 (byte*) mode_sixsfred2::col#0 ← (byte*) mode_sixsfred2::COLORS#0 - (byte) mode_sixsfred2::cy#0 ← (number) 0 + (byte) mode_sixsfred2::cy#0 ← (byte) 0 to:mode_sixsfred2::@3 mode_sixsfred2::@3: scope:[mode_sixsfred2] from mode_sixsfred2::@2 mode_sixsfred2::@5 (byte) dtv_control#276 ← phi( mode_sixsfred2::@2/(byte) dtv_control#282 mode_sixsfred2::@5/(byte) dtv_control#264 ) (byte*) mode_sixsfred2::col#3 ← phi( mode_sixsfred2::@2/(byte*) mode_sixsfred2::col#0 mode_sixsfred2::@5/(byte*) mode_sixsfred2::col#4 ) (byte) mode_sixsfred2::cy#4 ← phi( mode_sixsfred2::@2/(byte) mode_sixsfred2::cy#0 mode_sixsfred2::@5/(byte) mode_sixsfred2::cy#1 ) - (byte) mode_sixsfred2::cx#0 ← (number) 0 + (byte) mode_sixsfred2::cx#0 ← (byte) 0 to:mode_sixsfred2::@4 mode_sixsfred2::@4: scope:[mode_sixsfred2] from mode_sixsfred2::@3 mode_sixsfred2::@4 (byte) dtv_control#271 ← phi( mode_sixsfred2::@3/(byte) dtv_control#276 mode_sixsfred2::@4/(byte) dtv_control#271 ) @@ -3027,13 +3027,13 @@ mode_sixsfred2::@6: scope:[mode_sixsfred2] from mode_sixsfred2::@5 (byte) dtv_control#257 ← phi( mode_sixsfred2::@5/(byte) dtv_control#264 ) (byte*) mode_sixsfred2::gfxa#0 ← (byte*) mode_sixsfred2::PLANEA#0 (byte[]) mode_sixsfred2::row_bitmask#0 ← { (number) 0, (number) $55, (number) $aa, (number) $ff } - (byte) mode_sixsfred2::ay#0 ← (number) 0 + (byte) mode_sixsfred2::ay#0 ← (byte) 0 to:mode_sixsfred2::@7 mode_sixsfred2::@7: scope:[mode_sixsfred2] from mode_sixsfred2::@6 mode_sixsfred2::@9 (byte) dtv_control#248 ← phi( mode_sixsfred2::@6/(byte) dtv_control#257 mode_sixsfred2::@9/(byte) dtv_control#229 ) (byte*) mode_sixsfred2::gfxa#3 ← phi( mode_sixsfred2::@6/(byte*) mode_sixsfred2::gfxa#0 mode_sixsfred2::@9/(byte*) mode_sixsfred2::gfxa#4 ) (byte) mode_sixsfred2::ay#4 ← phi( mode_sixsfred2::@6/(byte) mode_sixsfred2::ay#0 mode_sixsfred2::@9/(byte) mode_sixsfred2::ay#1 ) - (byte) mode_sixsfred2::ax#0 ← (number) 0 + (byte) mode_sixsfred2::ax#0 ← (byte) 0 to:mode_sixsfred2::@8 mode_sixsfred2::@8: scope:[mode_sixsfred2] from mode_sixsfred2::@7 mode_sixsfred2::@8 (byte) dtv_control#239 ← phi( mode_sixsfred2::@7/(byte) dtv_control#248 mode_sixsfred2::@8/(byte) dtv_control#239 ) @@ -3060,13 +3060,13 @@ mode_sixsfred2::@9: scope:[mode_sixsfred2] from mode_sixsfred2::@8 mode_sixsfred2::@10: scope:[mode_sixsfred2] from mode_sixsfred2::@9 (byte) dtv_control#213 ← phi( mode_sixsfred2::@9/(byte) dtv_control#229 ) (byte*) mode_sixsfred2::gfxb#0 ← (byte*) mode_sixsfred2::PLANEB#0 - (byte) mode_sixsfred2::by#0 ← (number) 0 + (byte) mode_sixsfred2::by#0 ← (byte) 0 to:mode_sixsfred2::@11 mode_sixsfred2::@11: scope:[mode_sixsfred2] from mode_sixsfred2::@10 mode_sixsfred2::@13 (byte) dtv_control#198 ← phi( mode_sixsfred2::@10/(byte) dtv_control#213 mode_sixsfred2::@13/(byte) dtv_control#156 ) (byte) mode_sixsfred2::by#4 ← phi( mode_sixsfred2::@10/(byte) mode_sixsfred2::by#0 mode_sixsfred2::@13/(byte) mode_sixsfred2::by#1 ) (byte*) mode_sixsfred2::gfxb#3 ← phi( mode_sixsfred2::@10/(byte*) mode_sixsfred2::gfxb#0 mode_sixsfred2::@13/(byte*) mode_sixsfred2::gfxb#4 ) - (byte) mode_sixsfred2::bx#0 ← (number) 0 + (byte) mode_sixsfred2::bx#0 ← (byte) 0 to:mode_sixsfred2::@12 mode_sixsfred2::@12: scope:[mode_sixsfred2] from mode_sixsfred2::@11 mode_sixsfred2::@12 (byte) dtv_control#184 ← phi( mode_sixsfred2::@11/(byte) dtv_control#198 mode_sixsfred2::@12/(byte) dtv_control#184 ) @@ -3132,7 +3132,7 @@ mode_8bpppixelcell: scope:[mode_8bpppixelcell] from menu::@42 *((byte*) DTV_PLANEB_MODULO_LO#0) ← (number) 0 *((byte*) DTV_PLANEB_MODULO_HI#0) ← (number) 0 *((byte*) BORDERCOL#0) ← (number) 0 - (byte) mode_8bpppixelcell::i#0 ← (number) 0 + (byte) mode_8bpppixelcell::i#0 ← (byte) 0 to:mode_8bpppixelcell::@1 mode_8bpppixelcell::@1: scope:[mode_8bpppixelcell] from mode_8bpppixelcell mode_8bpppixelcell::@1 (byte) dtv_control#283 ← phi( mode_8bpppixelcell/(byte) dtv_control#48 mode_8bpppixelcell::@1/(byte) dtv_control#283 ) @@ -3145,13 +3145,13 @@ mode_8bpppixelcell::@1: scope:[mode_8bpppixelcell] from mode_8bpppixelcell mode mode_8bpppixelcell::@2: scope:[mode_8bpppixelcell] from mode_8bpppixelcell::@1 (byte) dtv_control#277 ← phi( mode_8bpppixelcell::@1/(byte) dtv_control#283 ) (byte*) mode_8bpppixelcell::gfxa#0 ← (byte*) mode_8bpppixelcell::PLANEA#0 - (byte) mode_8bpppixelcell::ay#0 ← (number) 0 + (byte) mode_8bpppixelcell::ay#0 ← (byte) 0 to:mode_8bpppixelcell::@3 mode_8bpppixelcell::@3: scope:[mode_8bpppixelcell] from mode_8bpppixelcell::@2 mode_8bpppixelcell::@5 (byte) dtv_control#272 ← phi( mode_8bpppixelcell::@2/(byte) dtv_control#277 mode_8bpppixelcell::@5/(byte) dtv_control#258 ) (byte*) mode_8bpppixelcell::gfxa#3 ← phi( mode_8bpppixelcell::@2/(byte*) mode_8bpppixelcell::gfxa#0 mode_8bpppixelcell::@5/(byte*) mode_8bpppixelcell::gfxa#4 ) (byte) mode_8bpppixelcell::ay#4 ← phi( mode_8bpppixelcell::@2/(byte) mode_8bpppixelcell::ay#0 mode_8bpppixelcell::@5/(byte) mode_8bpppixelcell::ay#1 ) - (byte) mode_8bpppixelcell::ax#0 ← (number) 0 + (byte) mode_8bpppixelcell::ax#0 ← (byte) 0 to:mode_8bpppixelcell::@4 mode_8bpppixelcell::@4: scope:[mode_8bpppixelcell] from mode_8bpppixelcell::@3 mode_8bpppixelcell::@4 (byte) dtv_control#265 ← phi( mode_8bpppixelcell::@3/(byte) dtv_control#272 mode_8bpppixelcell::@4/(byte) dtv_control#265 ) @@ -3183,7 +3183,7 @@ mode_8bpppixelcell::@6: scope:[mode_8bpppixelcell] from mode_8bpppixelcell::@5 (byte*) mode_8bpppixelcell::gfxb#0 ← (byte*) mode_8bpppixelcell::PLANEB#0 (byte*) mode_8bpppixelcell::chargen#0 ← (byte*) mode_8bpppixelcell::CHARGEN#0 (byte) mode_8bpppixelcell::col#0 ← (number) 0 - (byte) mode_8bpppixelcell::ch#0 ← (number) 0 + (byte) mode_8bpppixelcell::ch#0 ← (byte) 0 to:mode_8bpppixelcell::@7 mode_8bpppixelcell::@7: scope:[mode_8bpppixelcell] from mode_8bpppixelcell::@13 mode_8bpppixelcell::@6 (byte) dtv_control#240 ← phi( mode_8bpppixelcell::@13/(byte) dtv_control#157 mode_8bpppixelcell::@6/(byte) dtv_control#249 ) @@ -3191,7 +3191,7 @@ mode_8bpppixelcell::@7: scope:[mode_8bpppixelcell] from mode_8bpppixelcell::@13 (byte) mode_8bpppixelcell::col#7 ← phi( mode_8bpppixelcell::@13/(byte) mode_8bpppixelcell::col#8 mode_8bpppixelcell::@6/(byte) mode_8bpppixelcell::col#0 ) (byte*) mode_8bpppixelcell::gfxb#7 ← phi( mode_8bpppixelcell::@13/(byte*) mode_8bpppixelcell::gfxb#8 mode_8bpppixelcell::@6/(byte*) mode_8bpppixelcell::gfxb#0 ) (byte*) mode_8bpppixelcell::chargen#4 ← phi( mode_8bpppixelcell::@13/(byte*) mode_8bpppixelcell::chargen#5 mode_8bpppixelcell::@6/(byte*) mode_8bpppixelcell::chargen#0 ) - (byte) mode_8bpppixelcell::cr#0 ← (number) 0 + (byte) mode_8bpppixelcell::cr#0 ← (byte) 0 to:mode_8bpppixelcell::@8 mode_8bpppixelcell::@8: scope:[mode_8bpppixelcell] from mode_8bpppixelcell::@12 mode_8bpppixelcell::@7 (byte) dtv_control#230 ← phi( mode_8bpppixelcell::@12/(byte) dtv_control#185 mode_8bpppixelcell::@7/(byte) dtv_control#240 ) @@ -3202,7 +3202,7 @@ mode_8bpppixelcell::@8: scope:[mode_8bpppixelcell] from mode_8bpppixelcell::@12 (byte*) mode_8bpppixelcell::chargen#2 ← phi( mode_8bpppixelcell::@12/(byte*) mode_8bpppixelcell::chargen#3 mode_8bpppixelcell::@7/(byte*) mode_8bpppixelcell::chargen#4 ) (byte) mode_8bpppixelcell::bits#0 ← *((byte*) mode_8bpppixelcell::chargen#2) (byte*) mode_8bpppixelcell::chargen#1 ← ++ (byte*) mode_8bpppixelcell::chargen#2 - (byte) mode_8bpppixelcell::cp#0 ← (number) 0 + (byte) mode_8bpppixelcell::cp#0 ← (byte) 0 to:mode_8bpppixelcell::@9 mode_8bpppixelcell::@9: scope:[mode_8bpppixelcell] from mode_8bpppixelcell::@10 mode_8bpppixelcell::@8 (byte) dtv_control#215 ← phi( mode_8bpppixelcell::@10/(byte) dtv_control#199 mode_8bpppixelcell::@8/(byte) dtv_control#230 ) @@ -3313,7 +3313,7 @@ mode_8bppchunkybmm: scope:[mode_8bppchunkybmm] from menu::@44 *((byte*) DTV_PLANEB_MODULO_LO#0) ← (number) 0 *((byte*) DTV_PLANEB_MODULO_HI#0) ← (number) 0 *((byte*) BORDERCOL#0) ← (number) 0 - (byte) mode_8bppchunkybmm::i#0 ← (number) 0 + (byte) mode_8bppchunkybmm::i#0 ← (byte) 0 to:mode_8bppchunkybmm::@1 mode_8bppchunkybmm::@1: scope:[mode_8bppchunkybmm] from mode_8bppchunkybmm mode_8bppchunkybmm::@1 (byte) dtv_control#259 ← phi( mode_8bppchunkybmm/(byte) dtv_control#51 mode_8bppchunkybmm::@1/(byte) dtv_control#259 ) @@ -3336,14 +3336,14 @@ mode_8bppchunkybmm::@9: scope:[mode_8bppchunkybmm] from mode_8bppchunkybmm::@2 (byte) mode_8bppchunkybmm::gfxbCpuBank#3 ← phi( mode_8bppchunkybmm::@2/(byte) mode_8bppchunkybmm::gfxbCpuBank#0 ) (byte) mode_8bppchunkybmm::gfxbCpuBank#1 ← ++ (byte) mode_8bppchunkybmm::gfxbCpuBank#3 (byte*) mode_8bppchunkybmm::gfxb#0 ← ((byte*)) (number) $4000 - (byte) mode_8bppchunkybmm::y#0 ← (number) 0 + (byte) mode_8bppchunkybmm::y#0 ← (byte) 0 to:mode_8bppchunkybmm::@3 mode_8bppchunkybmm::@3: scope:[mode_8bppchunkybmm] from mode_8bppchunkybmm::@7 mode_8bppchunkybmm::@9 (byte) dtv_control#231 ← phi( mode_8bppchunkybmm::@7/(byte) dtv_control#186 mode_8bppchunkybmm::@9/(byte) dtv_control#241 ) (byte) mode_8bppchunkybmm::gfxbCpuBank#7 ← phi( mode_8bppchunkybmm::@7/(byte) mode_8bppchunkybmm::gfxbCpuBank#9 mode_8bppchunkybmm::@9/(byte) mode_8bppchunkybmm::gfxbCpuBank#1 ) (byte) mode_8bppchunkybmm::y#6 ← phi( mode_8bppchunkybmm::@7/(byte) mode_8bppchunkybmm::y#1 mode_8bppchunkybmm::@9/(byte) mode_8bppchunkybmm::y#0 ) (byte*) mode_8bppchunkybmm::gfxb#5 ← phi( mode_8bppchunkybmm::@7/(byte*) mode_8bppchunkybmm::gfxb#6 mode_8bppchunkybmm::@9/(byte*) mode_8bppchunkybmm::gfxb#0 ) - (word) mode_8bppchunkybmm::x#0 ← (number) 0 + (word) mode_8bppchunkybmm::x#0 ← (word) 0 to:mode_8bppchunkybmm::@4 mode_8bppchunkybmm::@4: scope:[mode_8bppchunkybmm] from mode_8bppchunkybmm::@3 mode_8bppchunkybmm::@5 (byte) dtv_control#217 ← phi( mode_8bppchunkybmm::@3/(byte) dtv_control#231 mode_8bppchunkybmm::@5/(byte) dtv_control#200 ) @@ -6158,13 +6158,11 @@ Adding number conversion cast (unumber) 7 in (number~) keyboard_key_pressed::$0 Adding number conversion cast (unumber) keyboard_key_pressed::$0 in (number~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#20 & (unumber)(number) 7 Adding number conversion cast (unumber) 3 in (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_key_pressed::key#20 >> (number) 3 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 -Adding number conversion cast (unumber) 0 in (byte) bitmap_init::x#0 ← (number) 0 Adding number conversion cast (unumber) $f8 in (number~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (number) $f8 Adding number conversion cast (unumber) bitmap_init::$0 in (number~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (unumber)(number) $f8 Adding number conversion cast (unumber) 1 in (byte~) bitmap_init::$2 ← (byte) bitmap_init::bits#3 >> (number) 1 Adding number conversion cast (unumber) 0 in (bool~) bitmap_init::$3 ← (byte) bitmap_init::bits#1 == (number) 0 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#2 ← (number) $80 -Adding number conversion cast (unumber) 0 in (byte) bitmap_init::y#0 ← (number) 0 Adding number conversion cast (unumber) 7 in (number~) bitmap_init::$6 ← (byte) bitmap_init::y#2 & (number) 7 Adding number conversion cast (unumber) bitmap_init::$6 in (number~) bitmap_init::$6 ← (byte) bitmap_init::y#2 & (unumber)(number) 7 Adding number conversion cast (unumber) bitmap_init::$8 in (number~) bitmap_init::$8 ← (unumber~) bitmap_init::$6 | (byte~) bitmap_init::$7 @@ -6174,8 +6172,6 @@ Adding number conversion cast (unumber) 7 in (bool~) bitmap_init::$11 ← (unumb Adding number conversion cast (unumber) bitmap_init::$13 in (byte*~) bitmap_init::$14 ← (byte*) bitmap_init::yoffs#3 + (number~) bitmap_init::$13 Adding number conversion cast (unumber) 0 in (var) bitmap_clear::$3 ← (byte)*((byte[$100]) bitmap_plot_xhi#0 + (number) 0) w= (byte)*((byte[$100]) bitmap_plot_xlo#0 + (number) 0) Adding number conversion cast (unumber) 0 in (var) bitmap_clear::$3 ← (byte)*((byte[$100]) bitmap_plot_xhi#0 + (unumber)(number) 0) w= (byte)*((byte[$100]) bitmap_plot_xlo#0 + (number) 0) -Adding number conversion cast (unumber) 0 in (byte) bitmap_clear::y#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) bitmap_clear::x#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) bitmap_clear::bitmap#2) ← (number) 0 Adding number conversion cast (unumber) 1 in (byte~) bitmap_line_xdyi::$0 ← (byte) bitmap_line_xdyi::yd#2 >> (number) 1 Adding number conversion cast (unumber) 1 in (number~) bitmap_line_xdyi::$6 ← (byte) bitmap_line_xdyi::x1#2 + (number) 1 @@ -6212,7 +6208,6 @@ Adding number conversion cast (unumber) menu::$19 in (number~) menu::$19 ← (wo Adding number conversion cast (unumber) $400 in (number~) menu::$20 ← (unumber~) menu::$19 / (number) $400 Adding number conversion cast (unumber) menu::$20 in (number~) menu::$20 ← (unumber~) menu::$19 / (unumber)(number) $400 Adding number conversion cast (unumber) menu::$21 in (number~) menu::$21 ← (unumber~) menu::$17 | (unumber~) menu::$20 -Adding number conversion cast (unumber) 0 in (byte) menu::i#0 ← (number) 0 Adding number conversion cast (unumber) $3e8 in (byte*~) menu::$27 ← (byte*) COLS#0 + (number) $3e8 Adding number conversion cast (unumber) 0 in *((byte*) BGCOL#0) ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 @@ -6263,11 +6258,8 @@ Adding number conversion cast (unumber) mode_stdchar::$19 in (number~) mode_stdc Adding number conversion cast (unumber) $400 in (number~) mode_stdchar::$20 ← (unumber~) mode_stdchar::$19 / (number) $400 Adding number conversion cast (unumber) mode_stdchar::$20 in (number~) mode_stdchar::$20 ← (unumber~) mode_stdchar::$19 / (unumber)(number) $400 Adding number conversion cast (unumber) mode_stdchar::$21 in (number~) mode_stdchar::$21 ← (unumber~) mode_stdchar::$17 | (unumber~) mode_stdchar::$20 -Adding number conversion cast (unumber) 0 in (byte) mode_stdchar::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BGCOL#0) ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_stdchar::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_stdchar::cx#0 ← (number) 0 Adding number conversion cast (unumber) $f in (number~) mode_stdchar::$26 ← (byte~) mode_stdchar::$25 & (number) $f Adding number conversion cast (unumber) mode_stdchar::$26 in (number~) mode_stdchar::$26 ← (byte~) mode_stdchar::$25 & (unumber)(number) $f Adding number conversion cast (unumber) $f in (number~) mode_stdchar::$27 ← (byte) mode_stdchar::cy#2 & (number) $f @@ -6301,14 +6293,11 @@ Adding number conversion cast (unumber) mode_ecmchar::$20 in (number~) mode_ecmc Adding number conversion cast (unumber) $400 in (number~) mode_ecmchar::$21 ← (unumber~) mode_ecmchar::$20 / (number) $400 Adding number conversion cast (unumber) mode_ecmchar::$21 in (number~) mode_ecmchar::$21 ← (unumber~) mode_ecmchar::$20 / (unumber)(number) $400 Adding number conversion cast (unumber) mode_ecmchar::$22 in (number~) mode_ecmchar::$22 ← (unumber~) mode_ecmchar::$18 | (unumber~) mode_ecmchar::$21 -Adding number conversion cast (unumber) 0 in (byte) mode_ecmchar::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BGCOL1#0) ← (number) 0 Adding number conversion cast (unumber) 2 in *((byte*) BGCOL2#0) ← (number) 2 Adding number conversion cast (unumber) 5 in *((byte*) BGCOL3#0) ← (number) 5 Adding number conversion cast (unumber) 6 in *((byte*) BGCOL4#0) ← (number) 6 -Adding number conversion cast (unumber) 0 in (byte) mode_ecmchar::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_ecmchar::cx#0 ← (number) 0 Adding number conversion cast (unumber) $f in (number~) mode_ecmchar::$27 ← (byte~) mode_ecmchar::$26 & (number) $f Adding number conversion cast (unumber) mode_ecmchar::$27 in (number~) mode_ecmchar::$27 ← (byte~) mode_ecmchar::$26 & (unumber)(number) $f Adding number conversion cast (unumber) $f in (number~) mode_ecmchar::$28 ← (byte) mode_ecmchar::cy#2 & (number) $f @@ -6342,10 +6331,7 @@ Adding number conversion cast (unumber) mode_mcchar::$20 in (number~) mode_mccha Adding number conversion cast (unumber) $400 in (number~) mode_mcchar::$21 ← (unumber~) mode_mcchar::$20 / (number) $400 Adding number conversion cast (unumber) mode_mcchar::$21 in (number~) mode_mcchar::$21 ← (unumber~) mode_mcchar::$20 / (unumber)(number) $400 Adding number conversion cast (unumber) mode_mcchar::$22 in (number~) mode_mcchar::$22 ← (unumber~) mode_mcchar::$18 | (unumber~) mode_mcchar::$21 -Adding number conversion cast (unumber) 0 in (byte) mode_mcchar::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_mcchar::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_mcchar::cx#0 ← (number) 0 Adding number conversion cast (unumber) $f in (number~) mode_mcchar::$27 ← (byte~) mode_mcchar::$26 & (number) $f Adding number conversion cast (unumber) mode_mcchar::$27 in (number~) mode_mcchar::$27 ← (byte~) mode_mcchar::$26 & (unumber)(number) $f Adding number conversion cast (unumber) $f in (number~) mode_mcchar::$28 ← (byte) mode_mcchar::cy#2 & (number) $f @@ -6375,9 +6361,6 @@ Adding number conversion cast (unumber) mode_stdbitmap::$14 in (number~) mode_st Adding number conversion cast (unumber) $400 in (number~) mode_stdbitmap::$15 ← (unumber~) mode_stdbitmap::$14 / (number) $400 Adding number conversion cast (unumber) mode_stdbitmap::$15 in (number~) mode_stdbitmap::$15 ← (unumber~) mode_stdbitmap::$14 / (unumber)(number) $400 Adding number conversion cast (unumber) mode_stdbitmap::$16 in (number~) mode_stdbitmap::$16 ← (unumber~) mode_stdbitmap::$12 | (unumber~) mode_stdbitmap::$15 -Adding number conversion cast (unumber) 0 in (byte) mode_stdbitmap::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_stdbitmap::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_stdbitmap::cx#0 ← (number) 0 Adding number conversion cast (unumber) $f in (number~) mode_stdbitmap::$23 ← (byte~) mode_stdbitmap::$22 & (number) $f Adding number conversion cast (unumber) mode_stdbitmap::$23 in (number~) mode_stdbitmap::$23 ← (byte~) mode_stdbitmap::$22 & (unumber)(number) $f Adding number conversion cast (unumber) $f in (number~) mode_stdbitmap::$24 ← (number) $f - (byte) mode_stdbitmap::col#0 @@ -6411,11 +6394,8 @@ Adding number conversion cast (unumber) mode_hicolstdchar::$19 in (number~) mode Adding number conversion cast (unumber) $400 in (number~) mode_hicolstdchar::$20 ← (unumber~) mode_hicolstdchar::$19 / (number) $400 Adding number conversion cast (unumber) mode_hicolstdchar::$20 in (number~) mode_hicolstdchar::$20 ← (unumber~) mode_hicolstdchar::$19 / (unumber)(number) $400 Adding number conversion cast (unumber) mode_hicolstdchar::$21 in (number~) mode_hicolstdchar::$21 ← (unumber~) mode_hicolstdchar::$17 | (unumber~) mode_hicolstdchar::$20 -Adding number conversion cast (unumber) 0 in (byte) mode_hicolstdchar::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BGCOL#0) ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_hicolstdchar::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_hicolstdchar::cx#0 ← (number) 0 Adding number conversion cast (unumber) $f in (number~) mode_hicolstdchar::$25 ← (byte) mode_hicolstdchar::cy#2 & (number) $f Adding number conversion cast (unumber) mode_hicolstdchar::$25 in (number~) mode_hicolstdchar::$25 ← (byte) mode_hicolstdchar::cy#2 & (unumber)(number) $f Adding number conversion cast (unumber) $10 in (number~) mode_hicolstdchar::$26 ← (unumber~) mode_hicolstdchar::$25 * (number) $10 @@ -6443,14 +6423,11 @@ Adding number conversion cast (unumber) mode_hicolecmchar::$20 in (number~) mode Adding number conversion cast (unumber) $400 in (number~) mode_hicolecmchar::$21 ← (unumber~) mode_hicolecmchar::$20 / (number) $400 Adding number conversion cast (unumber) mode_hicolecmchar::$21 in (number~) mode_hicolecmchar::$21 ← (unumber~) mode_hicolecmchar::$20 / (unumber)(number) $400 Adding number conversion cast (unumber) mode_hicolecmchar::$22 in (number~) mode_hicolecmchar::$22 ← (unumber~) mode_hicolecmchar::$18 | (unumber~) mode_hicolecmchar::$21 -Adding number conversion cast (unumber) 0 in (byte) mode_hicolecmchar::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 Adding number conversion cast (unumber) $50 in *((byte*) BGCOL1#0) ← (number) $50 Adding number conversion cast (unumber) $54 in *((byte*) BGCOL2#0) ← (number) $54 Adding number conversion cast (unumber) $58 in *((byte*) BGCOL3#0) ← (number) $58 Adding number conversion cast (unumber) $5c in *((byte*) BGCOL4#0) ← (number) $5c -Adding number conversion cast (unumber) 0 in (byte) mode_hicolecmchar::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_hicolecmchar::cx#0 ← (number) 0 Adding number conversion cast (unumber) $f in (number~) mode_hicolecmchar::$26 ← (byte) mode_hicolecmchar::cy#2 & (number) $f Adding number conversion cast (unumber) mode_hicolecmchar::$26 in (number~) mode_hicolecmchar::$26 ← (byte) mode_hicolecmchar::cy#2 & (unumber)(number) $f Adding number conversion cast (unumber) $10 in (number~) mode_hicolecmchar::$27 ← (unumber~) mode_hicolecmchar::$26 * (number) $10 @@ -6478,13 +6455,10 @@ Adding number conversion cast (unumber) mode_hicolmcchar::$20 in (number~) mode_ Adding number conversion cast (unumber) $400 in (number~) mode_hicolmcchar::$21 ← (unumber~) mode_hicolmcchar::$20 / (number) $400 Adding number conversion cast (unumber) mode_hicolmcchar::$21 in (number~) mode_hicolmcchar::$21 ← (unumber~) mode_hicolmcchar::$20 / (unumber)(number) $400 Adding number conversion cast (unumber) mode_hicolmcchar::$22 in (number~) mode_hicolmcchar::$22 ← (unumber~) mode_hicolmcchar::$18 | (unumber~) mode_hicolmcchar::$21 -Adding number conversion cast (unumber) 0 in (byte) mode_hicolmcchar::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 Adding number conversion cast (unumber) $50 in *((byte*) BGCOL1#0) ← (number) $50 Adding number conversion cast (unumber) $54 in *((byte*) BGCOL2#0) ← (number) $54 Adding number conversion cast (unumber) $58 in *((byte*) BGCOL3#0) ← (number) $58 -Adding number conversion cast (unumber) 0 in (byte) mode_hicolmcchar::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_hicolmcchar::cx#0 ← (number) 0 Adding number conversion cast (unumber) $f in (number~) mode_hicolmcchar::$26 ← (byte) mode_hicolmcchar::cy#2 & (number) $f Adding number conversion cast (unumber) mode_hicolmcchar::$26 in (number~) mode_hicolmcchar::$26 ← (byte) mode_hicolmcchar::cy#2 & (unumber)(number) $f Adding number conversion cast (unumber) $10 in (number~) mode_hicolmcchar::$27 ← (unumber~) mode_hicolmcchar::$26 * (number) $10 @@ -6504,12 +6478,9 @@ Adding number conversion cast (unumber) 0 in *((byte*) DTV_PLANEB_MODULO_LO#0) Adding number conversion cast (unumber) 0 in *((byte*) DTV_PLANEB_MODULO_HI#0) ← (number) 0 Adding number conversion cast (unumber) $400 in (byte*~) mode_twoplanebitmap::$10 ← (byte*) mode_twoplanebitmap::COLORS#0 / (number) $400 Adding number conversion cast (unumber) $400 in (byte*~) mode_twoplanebitmap::$12 ← (byte*) mode_twoplanebitmap::COLORS#0 / (number) $400 -Adding number conversion cast (unumber) 0 in (byte) mode_twoplanebitmap::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 Adding number conversion cast (unumber) $70 in *((byte*) BGCOL1#0) ← (number) $70 Adding number conversion cast (unumber) $d4 in *((byte*) BGCOL2#0) ← (number) $d4 -Adding number conversion cast (unumber) 0 in (byte) mode_twoplanebitmap::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_twoplanebitmap::cx#0 ← (number) 0 Adding number conversion cast (unumber) $f in (number~) mode_twoplanebitmap::$16 ← (byte) mode_twoplanebitmap::cy#2 & (number) $f Adding number conversion cast (unumber) mode_twoplanebitmap::$16 in (number~) mode_twoplanebitmap::$16 ← (byte) mode_twoplanebitmap::cy#2 & (unumber)(number) $f Adding number conversion cast (unumber) $10 in (number~) mode_twoplanebitmap::$17 ← (unumber~) mode_twoplanebitmap::$16 * (number) $10 @@ -6517,15 +6488,11 @@ Adding number conversion cast (unumber) mode_twoplanebitmap::$17 in (number~) mo Adding number conversion cast (unumber) $f in (number~) mode_twoplanebitmap::$18 ← (byte) mode_twoplanebitmap::cx#2 & (number) $f Adding number conversion cast (unumber) mode_twoplanebitmap::$18 in (number~) mode_twoplanebitmap::$18 ← (byte) mode_twoplanebitmap::cx#2 & (unumber)(number) $f Adding number conversion cast (unumber) mode_twoplanebitmap::$19 in (number~) mode_twoplanebitmap::$19 ← (unumber~) mode_twoplanebitmap::$17 | (unumber~) mode_twoplanebitmap::$18 -Adding number conversion cast (unumber) 0 in (byte) mode_twoplanebitmap::ay#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_twoplanebitmap::ax#0 ← (number) 0 Adding number conversion cast (unumber) 4 in (number~) mode_twoplanebitmap::$22 ← (byte) mode_twoplanebitmap::ay#2 & (number) 4 Adding number conversion cast (unumber) mode_twoplanebitmap::$22 in (number~) mode_twoplanebitmap::$22 ← (byte) mode_twoplanebitmap::ay#2 & (unumber)(number) 4 Adding number conversion cast (unumber) 0 in (bool~) mode_twoplanebitmap::$23 ← (unumber~) mode_twoplanebitmap::$22 == (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) mode_twoplanebitmap::gfxa#3) ← (number) 0 Adding number conversion cast (unumber) $ff in *((byte*) mode_twoplanebitmap::gfxa#4) ← (number) $ff -Adding number conversion cast (unumber) 0 in (byte) mode_twoplanebitmap::by#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_twoplanebitmap::bx#0 ← (number) 0 Adding number conversion cast (unumber) $f in *((byte*) mode_twoplanebitmap::gfxb#2) ← (number) $f Adding number conversion cast (unumber) 3 in (number~) mode_sixsfred::$5 ← (byte~) mode_sixsfred::$4 | (number) 3 Adding number conversion cast (unumber) mode_sixsfred::$5 in (number~) mode_sixsfred::$5 ← (byte~) mode_sixsfred::$4 | (unumber)(number) 3 @@ -6539,20 +6506,13 @@ Adding number conversion cast (unumber) 0 in *((byte*) DTV_PLANEB_MODULO_LO#0) Adding number conversion cast (unumber) 0 in *((byte*) DTV_PLANEB_MODULO_HI#0) ← (number) 0 Adding number conversion cast (unumber) $400 in (byte*~) mode_sixsfred::$11 ← (byte*) mode_sixsfred::COLORS#0 / (number) $400 Adding number conversion cast (unumber) $400 in (byte*~) mode_sixsfred::$13 ← (byte*) mode_sixsfred::COLORS#0 / (number) $400 -Adding number conversion cast (unumber) 0 in (byte) mode_sixsfred::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_sixsfred::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_sixsfred::cx#0 ← (number) 0 Adding number conversion cast (unumber) $f in (number~) mode_sixsfred::$18 ← (byte~) mode_sixsfred::$17 & (number) $f Adding number conversion cast (unumber) mode_sixsfred::$18 in (number~) mode_sixsfred::$18 ← (byte~) mode_sixsfred::$17 & (unumber)(number) $f -Adding number conversion cast (unumber) 0 in (byte) mode_sixsfred::ay#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_sixsfred::ax#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (number~) mode_sixsfred::$21 ← (byte) mode_sixsfred::ay#2 / (number) 2 Adding number conversion cast (unumber) mode_sixsfred::$21 in (number~) mode_sixsfred::$21 ← (byte) mode_sixsfred::ay#2 / (unumber)(number) 2 Adding number conversion cast (unumber) 3 in (number~) mode_sixsfred::$22 ← (unumber~) mode_sixsfred::$21 & (number) 3 Adding number conversion cast (unumber) mode_sixsfred::$22 in (number~) mode_sixsfred::$22 ← (unumber~) mode_sixsfred::$21 & (unumber)(number) 3 -Adding number conversion cast (unumber) 0 in (byte) mode_sixsfred::by#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_sixsfred::bx#0 ← (number) 0 Adding number conversion cast (unumber) $1b in *((byte*) mode_sixsfred::gfxb#2) ← (number) $1b Adding number conversion cast (unumber) 3 in (number~) mode_sixsfred2::$3 ← (byte~) mode_sixsfred2::$2 | (number) 3 Adding number conversion cast (unumber) mode_sixsfred2::$3 in (number~) mode_sixsfred2::$3 ← (byte~) mode_sixsfred2::$2 | (unumber)(number) 3 @@ -6566,10 +6526,7 @@ Adding number conversion cast (unumber) 0 in *((byte*) DTV_PLANEB_MODULO_LO#0) Adding number conversion cast (unumber) 0 in *((byte*) DTV_PLANEB_MODULO_HI#0) ← (number) 0 Adding number conversion cast (unumber) $400 in (byte*~) mode_sixsfred2::$9 ← (byte*) mode_sixsfred2::COLORS#0 / (number) $400 Adding number conversion cast (unumber) $400 in (byte*~) mode_sixsfred2::$11 ← (byte*) mode_sixsfred2::COLORS#0 / (number) $400 -Adding number conversion cast (unumber) 0 in (byte) mode_sixsfred2::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_sixsfred2::cy#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_sixsfred2::cx#0 ← (number) 0 Adding number conversion cast (unumber) 3 in (number~) mode_sixsfred2::$15 ← (byte) mode_sixsfred2::cx#2 & (number) 3 Adding number conversion cast (unumber) mode_sixsfred2::$15 in (number~) mode_sixsfred2::$15 ← (byte) mode_sixsfred2::cx#2 & (unumber)(number) 3 Adding number conversion cast (unumber) $10 in (number~) mode_sixsfred2::$16 ← (unumber~) mode_sixsfred2::$15 * (number) $10 @@ -6577,14 +6534,10 @@ Adding number conversion cast (unumber) mode_sixsfred2::$16 in (number~) mode_si Adding number conversion cast (unumber) 3 in (number~) mode_sixsfred2::$17 ← (byte) mode_sixsfred2::cy#2 & (number) 3 Adding number conversion cast (unumber) mode_sixsfred2::$17 in (number~) mode_sixsfred2::$17 ← (byte) mode_sixsfred2::cy#2 & (unumber)(number) 3 Adding number conversion cast (unumber) mode_sixsfred2::$18 in (number~) mode_sixsfred2::$18 ← (unumber~) mode_sixsfred2::$16 | (unumber~) mode_sixsfred2::$17 -Adding number conversion cast (unumber) 0 in (byte) mode_sixsfred2::ay#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_sixsfred2::ax#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (number~) mode_sixsfred2::$21 ← (byte) mode_sixsfred2::ay#2 / (number) 2 Adding number conversion cast (unumber) mode_sixsfred2::$21 in (number~) mode_sixsfred2::$21 ← (byte) mode_sixsfred2::ay#2 / (unumber)(number) 2 Adding number conversion cast (unumber) 3 in (number~) mode_sixsfred2::$22 ← (unumber~) mode_sixsfred2::$21 & (number) 3 Adding number conversion cast (unumber) mode_sixsfred2::$22 in (number~) mode_sixsfred2::$22 ← (unumber~) mode_sixsfred2::$21 & (unumber)(number) 3 -Adding number conversion cast (unumber) 0 in (byte) mode_sixsfred2::by#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_sixsfred2::bx#0 ← (number) 0 Adding number conversion cast (unumber) $1b in *((byte*) mode_sixsfred2::gfxb#2) ← (number) $1b Adding number conversion cast (unumber) 3 in (number~) mode_8bpppixelcell::$6 ← (byte~) mode_8bpppixelcell::$5 | (number) 3 Adding number conversion cast (unumber) mode_8bpppixelcell::$6 in (number~) mode_8bpppixelcell::$6 ← (byte~) mode_8bpppixelcell::$5 | (unumber)(number) 3 @@ -6597,9 +6550,6 @@ Adding number conversion cast (unumber) 0 in *((byte*) DTV_PLANEB_STEP#0) ← (n Adding number conversion cast (unumber) 0 in *((byte*) DTV_PLANEB_MODULO_LO#0) ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) DTV_PLANEB_MODULO_HI#0) ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_8bpppixelcell::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_8bpppixelcell::ay#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_8bpppixelcell::ax#0 ← (number) 0 Adding number conversion cast (unumber) $f in (number~) mode_8bpppixelcell::$14 ← (byte) mode_8bpppixelcell::ay#2 & (number) $f Adding number conversion cast (unumber) mode_8bpppixelcell::$14 in (number~) mode_8bpppixelcell::$14 ← (byte) mode_8bpppixelcell::ay#2 & (unumber)(number) $f Adding number conversion cast (unumber) $10 in (number~) mode_8bpppixelcell::$15 ← (unumber~) mode_8bpppixelcell::$14 * (number) $10 @@ -6608,9 +6558,6 @@ Adding number conversion cast (unumber) $f in (number~) mode_8bpppixelcell::$16 Adding number conversion cast (unumber) mode_8bpppixelcell::$16 in (number~) mode_8bpppixelcell::$16 ← (byte) mode_8bpppixelcell::ax#2 & (unumber)(number) $f Adding number conversion cast (unumber) mode_8bpppixelcell::$17 in (number~) mode_8bpppixelcell::$17 ← (unumber~) mode_8bpppixelcell::$15 | (unumber~) mode_8bpppixelcell::$16 Adding number conversion cast (unumber) 0 in (byte) mode_8bpppixelcell::col#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_8bpppixelcell::ch#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_8bpppixelcell::cr#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_8bpppixelcell::cp#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) mode_8bpppixelcell::c#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (number~) mode_8bpppixelcell::$20 ← (byte) mode_8bpppixelcell::bits#2 & (number) $80 Adding number conversion cast (unumber) mode_8bpppixelcell::$20 in (number~) mode_8bpppixelcell::$20 ← (byte) mode_8bpppixelcell::bits#2 & (unumber)(number) $80 @@ -6624,11 +6571,8 @@ Adding number conversion cast (unumber) 8 in *((byte*) DTV_PLANEB_STEP#0) ← (n Adding number conversion cast (unumber) 0 in *((byte*) DTV_PLANEB_MODULO_LO#0) ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) DTV_PLANEB_MODULO_HI#0) ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mode_8bppchunkybmm::i#0 ← (number) 0 Adding number conversion cast (unumber) $4000 in (number~) mode_8bppchunkybmm::$16 ← (dword) mode_8bppchunkybmm::PLANEB#0 / (number) $4000 Adding number conversion cast (unumber) mode_8bppchunkybmm::$16 in (number~) mode_8bppchunkybmm::$16 ← (dword) mode_8bppchunkybmm::PLANEB#0 / (unumber)(number) $4000 -Adding number conversion cast (unumber) 0 in (byte) mode_8bppchunkybmm::y#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (word) mode_8bppchunkybmm::x#0 ← (number) 0 Adding number conversion cast (unumber) $8000 in (bool~) mode_8bppchunkybmm::$24 ← (byte*) mode_8bppchunkybmm::gfxb#3 == (number) $8000 Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (byte) to elements in (byte[$10]) DTV_PALETTE_DEFAULT#0 ← { (byte)(number) 0, (byte)(number) $f, (byte)(number) $36, (byte)(number) $be, (byte)(number) $58, (byte)(number) $db, (byte)(number) $86, (byte)(number) $ff, (byte)(number) $29, (byte)(number) $26, (byte)(number) $3b, (byte)(number) 5, (byte)(number) 7, (byte)(number) $df, (byte)(number) $9a, (byte)(number) $a } @@ -6716,13 +6660,9 @@ Inlining cast (byte) KEY_1#0 ← (unumber)(number) $38 Inlining cast (byte) KEY_2#0 ← (unumber)(number) $3b Inlining cast (byte) KEY_SPACE#0 ← (unumber)(number) $3c Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 -Inlining cast (byte) bitmap_init::x#0 ← (unumber)(number) 0 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast (byte*) bitmap_init::yoffs#0 ← (byte*)(number) 0 -Inlining cast (byte) bitmap_init::y#0 ← (unumber)(number) 0 Inlining cast (unumber~) bitmap_init::$16 ← (unumber)(number~) bitmap_init::$13 -Inlining cast (byte) bitmap_clear::y#0 ← (unumber)(number) 0 -Inlining cast (byte) bitmap_clear::x#0 ← (unumber)(number) 0 Inlining cast *((byte*) bitmap_clear::bitmap#2) ← (unumber)(number) 0 Inlining cast (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$0 Inlining cast (byte*) menu::SCREEN#0 ← (byte*)(number) $8000 @@ -6738,7 +6678,6 @@ Inlining cast (byte~) menu::$11 ← (byte)(unumber~) menu::$10 Inlining cast (word~) menu::$15 ← (word)(byte*) menu::SCREEN#0 Inlining cast (word~) menu::$18 ← (word)(byte*) menu::CHARSET#0 Inlining cast (byte~) menu::$22 ← (byte)(unumber~) menu::$21 -Inlining cast (byte) menu::i#0 ← (unumber)(number) 0 Inlining cast *((byte*) BGCOL#0) ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 Inlining cast (byte) dtv_control#15 ← (unumber)(number) 0 @@ -6758,11 +6697,8 @@ Inlining cast (byte~) mode_stdchar::$11 ← (byte)(unumber~) mode_stdchar::$10 Inlining cast (word~) mode_stdchar::$15 ← (word)(byte*) mode_stdchar::SCREEN#0 Inlining cast (word~) mode_stdchar::$18 ← (word)(byte*) mode_stdchar::CHARSET#0 Inlining cast (byte~) mode_stdchar::$22 ← (byte)(unumber~) mode_stdchar::$21 -Inlining cast (byte) mode_stdchar::i#0 ← (unumber)(number) 0 Inlining cast *((byte*) BGCOL#0) ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 -Inlining cast (byte) mode_stdchar::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_stdchar::cx#0 ← (unumber)(number) 0 Inlining cast (byte*) mode_ecmchar::SCREEN#0 ← (byte*)(number) $8000 Inlining cast (byte*) mode_ecmchar::CHARSET#0 ← (byte*)(number) $9000 Inlining cast (byte*) mode_ecmchar::COLORS#0 ← (byte*)(number) $d800 @@ -6778,14 +6714,11 @@ Inlining cast (byte~) mode_ecmchar::$11 ← (byte)(unumber~) mode_ecmchar::$10 Inlining cast (word~) mode_ecmchar::$16 ← (word)(byte*) mode_ecmchar::SCREEN#0 Inlining cast (word~) mode_ecmchar::$19 ← (word)(byte*) mode_ecmchar::CHARSET#0 Inlining cast (byte~) mode_ecmchar::$23 ← (byte)(unumber~) mode_ecmchar::$22 -Inlining cast (byte) mode_ecmchar::i#0 ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 Inlining cast *((byte*) BGCOL1#0) ← (unumber)(number) 0 Inlining cast *((byte*) BGCOL2#0) ← (unumber)(number) 2 Inlining cast *((byte*) BGCOL3#0) ← (unumber)(number) 5 Inlining cast *((byte*) BGCOL4#0) ← (unumber)(number) 6 -Inlining cast (byte) mode_ecmchar::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_ecmchar::cx#0 ← (unumber)(number) 0 Inlining cast (byte*) mode_mcchar::SCREEN#0 ← (byte*)(number) $8000 Inlining cast (byte*) mode_mcchar::CHARSET#0 ← (byte*)(number) $9000 Inlining cast (byte*) mode_mcchar::COLORS#0 ← (byte*)(number) $d800 @@ -6801,10 +6734,7 @@ Inlining cast (byte~) mode_mcchar::$11 ← (byte)(unumber~) mode_mcchar::$10 Inlining cast (word~) mode_mcchar::$16 ← (word)(byte*) mode_mcchar::SCREEN#0 Inlining cast (word~) mode_mcchar::$19 ← (word)(byte*) mode_mcchar::CHARSET#0 Inlining cast (byte~) mode_mcchar::$23 ← (byte)(unumber~) mode_mcchar::$22 -Inlining cast (byte) mode_mcchar::i#0 ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 -Inlining cast (byte) mode_mcchar::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_mcchar::cx#0 ← (unumber)(number) 0 Inlining cast (byte*) mode_stdbitmap::SCREEN#0 ← (byte*)(number) $4000 Inlining cast (byte*) mode_stdbitmap::BITMAP#0 ← (byte*)(number) $6000 Inlining cast (dword~) mode_stdbitmap::$0 ← (dword)(byte*) mode_stdbitmap::BITMAP#0 @@ -6817,9 +6747,6 @@ Inlining cast (byte~) mode_stdbitmap::$5 ← (byte)(unumber~) mode_stdbitmap::$4 Inlining cast (word~) mode_stdbitmap::$10 ← (word)(byte*) mode_stdbitmap::SCREEN#0 Inlining cast (word~) mode_stdbitmap::$13 ← (word)(byte*) mode_stdbitmap::BITMAP#0 Inlining cast (byte~) mode_stdbitmap::$17 ← (byte)(unumber~) mode_stdbitmap::$16 -Inlining cast (byte) mode_stdbitmap::i#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_stdbitmap::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_stdbitmap::cx#0 ← (unumber)(number) 0 Inlining cast (byte) mode_stdbitmap::lines_cnt#0 ← (unumber)(number) 9 Inlining cast (byte) mode_stdbitmap::l#0 ← (unumber)(number) 0 Inlining cast (byte*) mode_hicolstdchar::SCREEN#0 ← (byte*)(number) $8000 @@ -6835,11 +6762,8 @@ Inlining cast (byte~) mode_hicolstdchar::$11 ← (byte)(unumber~) mode_hicolstdc Inlining cast (word~) mode_hicolstdchar::$15 ← (word)(byte*) mode_hicolstdchar::SCREEN#0 Inlining cast (word~) mode_hicolstdchar::$18 ← (word)(byte*) mode_hicolstdchar::CHARSET#0 Inlining cast (byte~) mode_hicolstdchar::$22 ← (byte)(unumber~) mode_hicolstdchar::$21 -Inlining cast (byte) mode_hicolstdchar::i#0 ← (unumber)(number) 0 Inlining cast *((byte*) BGCOL#0) ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 -Inlining cast (byte) mode_hicolstdchar::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_hicolstdchar::cx#0 ← (unumber)(number) 0 Inlining cast (byte*) mode_hicolecmchar::SCREEN#0 ← (byte*)(number) $8000 Inlining cast (byte*) mode_hicolecmchar::CHARSET#0 ← (byte*)(number) $9000 Inlining cast (byte*) mode_hicolecmchar::COLORS#0 ← (byte*)(number) $8400 @@ -6853,14 +6777,11 @@ Inlining cast (byte~) mode_hicolecmchar::$11 ← (byte)(unumber~) mode_hicolecmc Inlining cast (word~) mode_hicolecmchar::$16 ← (word)(byte*) mode_hicolecmchar::SCREEN#0 Inlining cast (word~) mode_hicolecmchar::$19 ← (word)(byte*) mode_hicolecmchar::CHARSET#0 Inlining cast (byte~) mode_hicolecmchar::$23 ← (byte)(unumber~) mode_hicolecmchar::$22 -Inlining cast (byte) mode_hicolecmchar::i#0 ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 Inlining cast *((byte*) BGCOL1#0) ← (unumber)(number) $50 Inlining cast *((byte*) BGCOL2#0) ← (unumber)(number) $54 Inlining cast *((byte*) BGCOL3#0) ← (unumber)(number) $58 Inlining cast *((byte*) BGCOL4#0) ← (unumber)(number) $5c -Inlining cast (byte) mode_hicolecmchar::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_hicolecmchar::cx#0 ← (unumber)(number) 0 Inlining cast (byte*) mode_hicolmcchar::SCREEN#0 ← (byte*)(number) $8000 Inlining cast (byte*) mode_hicolmcchar::CHARSET#0 ← (byte*)(number) $9000 Inlining cast (byte*) mode_hicolmcchar::COLORS#0 ← (byte*)(number) $8400 @@ -6874,13 +6795,10 @@ Inlining cast (byte~) mode_hicolmcchar::$11 ← (byte)(unumber~) mode_hicolmccha Inlining cast (word~) mode_hicolmcchar::$16 ← (word)(byte*) mode_hicolmcchar::SCREEN#0 Inlining cast (word~) mode_hicolmcchar::$19 ← (word)(byte*) mode_hicolmcchar::CHARSET#0 Inlining cast (byte~) mode_hicolmcchar::$23 ← (byte)(unumber~) mode_hicolmcchar::$22 -Inlining cast (byte) mode_hicolmcchar::i#0 ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 Inlining cast *((byte*) BGCOL1#0) ← (unumber)(number) $50 Inlining cast *((byte*) BGCOL2#0) ← (unumber)(number) $54 Inlining cast *((byte*) BGCOL3#0) ← (unumber)(number) $58 -Inlining cast (byte) mode_hicolmcchar::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_hicolmcchar::cx#0 ← (unumber)(number) 0 Inlining cast (byte*) mode_twoplanebitmap::PLANEA#0 ← (byte*)(number) $4000 Inlining cast (byte*) mode_twoplanebitmap::PLANEB#0 ← (byte*)(number) $6000 Inlining cast (byte*) mode_twoplanebitmap::COLORS#0 ← (byte*)(number) $8000 @@ -6892,18 +6810,11 @@ Inlining cast *((byte*) DTV_PLANEB_START_HI#0) ← (unumber)(number) 0 Inlining cast *((byte*) DTV_PLANEB_STEP#0) ← (unumber)(number) 1 Inlining cast *((byte*) DTV_PLANEB_MODULO_LO#0) ← (unumber)(number) 0 Inlining cast *((byte*) DTV_PLANEB_MODULO_HI#0) ← (unumber)(number) 0 -Inlining cast (byte) mode_twoplanebitmap::i#0 ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 Inlining cast *((byte*) BGCOL1#0) ← (unumber)(number) $70 Inlining cast *((byte*) BGCOL2#0) ← (unumber)(number) $d4 -Inlining cast (byte) mode_twoplanebitmap::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_twoplanebitmap::cx#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_twoplanebitmap::ay#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_twoplanebitmap::ax#0 ← (unumber)(number) 0 Inlining cast *((byte*) mode_twoplanebitmap::gfxa#3) ← (unumber)(number) 0 Inlining cast *((byte*) mode_twoplanebitmap::gfxa#4) ← (unumber)(number) $ff -Inlining cast (byte) mode_twoplanebitmap::by#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_twoplanebitmap::bx#0 ← (unumber)(number) 0 Inlining cast *((byte*) mode_twoplanebitmap::gfxb#2) ← (unumber)(number) $f Inlining cast (byte*) mode_sixsfred::PLANEA#0 ← (byte*)(number) $4000 Inlining cast (byte*) mode_sixsfred::PLANEB#0 ← (byte*)(number) $6000 @@ -6916,14 +6827,7 @@ Inlining cast *((byte*) DTV_PLANEB_START_HI#0) ← (unumber)(number) 0 Inlining cast *((byte*) DTV_PLANEB_STEP#0) ← (unumber)(number) 1 Inlining cast *((byte*) DTV_PLANEB_MODULO_LO#0) ← (unumber)(number) 0 Inlining cast *((byte*) DTV_PLANEB_MODULO_HI#0) ← (unumber)(number) 0 -Inlining cast (byte) mode_sixsfred::i#0 ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 -Inlining cast (byte) mode_sixsfred::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_sixsfred::cx#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_sixsfred::ay#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_sixsfred::ax#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_sixsfred::by#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_sixsfred::bx#0 ← (unumber)(number) 0 Inlining cast *((byte*) mode_sixsfred::gfxb#2) ← (unumber)(number) $1b Inlining cast (byte*) mode_sixsfred2::PLANEA#0 ← (byte*)(number) $4000 Inlining cast (byte*) mode_sixsfred2::PLANEB#0 ← (byte*)(number) $6000 @@ -6936,14 +6840,7 @@ Inlining cast *((byte*) DTV_PLANEB_START_HI#0) ← (unumber)(number) 0 Inlining cast *((byte*) DTV_PLANEB_STEP#0) ← (unumber)(number) 1 Inlining cast *((byte*) DTV_PLANEB_MODULO_LO#0) ← (unumber)(number) 0 Inlining cast *((byte*) DTV_PLANEB_MODULO_HI#0) ← (unumber)(number) 0 -Inlining cast (byte) mode_sixsfred2::i#0 ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 -Inlining cast (byte) mode_sixsfred2::cy#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_sixsfred2::cx#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_sixsfred2::ay#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_sixsfred2::ax#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_sixsfred2::by#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_sixsfred2::bx#0 ← (unumber)(number) 0 Inlining cast *((byte*) mode_sixsfred2::gfxb#2) ← (unumber)(number) $1b Inlining cast (byte*) mode_8bpppixelcell::PLANEA#0 ← (byte*)(number) $3c00 Inlining cast (byte*) mode_8bpppixelcell::PLANEB#0 ← (byte*)(number) $4000 @@ -6956,25 +6853,16 @@ Inlining cast *((byte*) DTV_PLANEB_STEP#0) ← (unumber)(number) 0 Inlining cast *((byte*) DTV_PLANEB_MODULO_LO#0) ← (unumber)(number) 0 Inlining cast *((byte*) DTV_PLANEB_MODULO_HI#0) ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 -Inlining cast (byte) mode_8bpppixelcell::i#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_8bpppixelcell::ay#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_8bpppixelcell::ax#0 ← (unumber)(number) 0 Inlining cast (byte*) mode_8bpppixelcell::CHARGEN#0 ← (byte*)(number) $d000 Inlining cast (byte) mode_8bpppixelcell::col#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_8bpppixelcell::ch#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_8bpppixelcell::cr#0 ← (unumber)(number) 0 -Inlining cast (byte) mode_8bpppixelcell::cp#0 ← (unumber)(number) 0 Inlining cast (byte) mode_8bpppixelcell::c#0 ← (unumber)(number) 0 Inlining cast (dword) mode_8bppchunkybmm::PLANEB#0 ← (unumber)(number) $20000 Inlining cast *((byte*) DTV_PLANEB_STEP#0) ← (unumber)(number) 8 Inlining cast *((byte*) DTV_PLANEB_MODULO_LO#0) ← (unumber)(number) 0 Inlining cast *((byte*) DTV_PLANEB_MODULO_HI#0) ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 -Inlining cast (byte) mode_8bppchunkybmm::i#0 ← (unumber)(number) 0 Inlining cast (byte~) mode_8bppchunkybmm::$17 ← (byte)(unumber~) mode_8bppchunkybmm::$16 Inlining cast (byte*) mode_8bppchunkybmm::gfxb#0 ← (byte*)(number) $4000 -Inlining cast (byte) mode_8bppchunkybmm::y#0 ← (unumber)(number) 0 -Inlining cast (word) mode_8bppchunkybmm::x#0 ← (unumber)(number) 0 Inlining cast (byte~) mode_8bppchunkybmm::$28 ← (byte)(word~) mode_8bppchunkybmm::$27 Inlining cast (byte*) mode_8bppchunkybmm::gfxb#2 ← (byte*)(number) $4000 Inlining cast (byte~) mode_8bppchunkybmm::$20 ← (byte)(number~) mode_8bppchunkybmm::$19 @@ -7092,13 +6980,11 @@ Simplifying constant integer cast $80 Simplifying constant integer cast 7 Simplifying constant integer cast 3 Simplifying constant integer cast $80 -Simplifying constant integer cast 0 Simplifying constant integer cast $f8 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant pointer cast (byte*) 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 7 Simplifying constant integer cast 7 Simplifying constant integer cast 7 @@ -7107,8 +6993,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast *((byte[$100]) bitmap_plot_xlo#0 + (unumber)(number) 0) Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast *((byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) Simplifying constant integer cast *((byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) Simplifying constant integer cast *((byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) @@ -7135,7 +7019,6 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast $40 Simplifying constant integer cast $3fff Simplifying constant integer cast $400 -Simplifying constant integer cast 0 Simplifying constant integer cast $3e8 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -7180,9 +7063,6 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast $400 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast $f Simplifying constant integer cast $10 @@ -7205,12 +7085,9 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast $400 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 5 Simplifying constant integer cast 6 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast $f Simplifying constant integer cast $10 @@ -7232,9 +7109,6 @@ Simplifying constant integer cast $40 Simplifying constant integer cast $3fff Simplifying constant integer cast $400 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast $f Simplifying constant integer cast $10 @@ -7252,9 +7126,6 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast $40 Simplifying constant integer cast $3fff Simplifying constant integer cast $400 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast $f Simplifying constant integer cast $10 @@ -7298,9 +7169,6 @@ Simplifying constant integer cast $3fff Simplifying constant integer cast $400 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast $10 Simplifying constant integer cast $f @@ -7319,13 +7187,10 @@ Simplifying constant integer cast $40 Simplifying constant integer cast $3fff Simplifying constant integer cast $400 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $50 Simplifying constant integer cast $54 Simplifying constant integer cast $58 Simplifying constant integer cast $5c -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast $10 Simplifying constant integer cast $f @@ -7344,12 +7209,9 @@ Simplifying constant integer cast $40 Simplifying constant integer cast $3fff Simplifying constant integer cast $400 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $50 Simplifying constant integer cast $54 Simplifying constant integer cast $58 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast $10 Simplifying constant integer cast $f @@ -7368,22 +7230,15 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $400 Simplifying constant integer cast $400 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $70 Simplifying constant integer cast $d4 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast $10 Simplifying constant integer cast $f -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast $ff -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant pointer cast (byte*) 16384 Simplifying constant pointer cast (byte*) 24576 @@ -7400,20 +7255,13 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $400 Simplifying constant integer cast $400 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast 0 Simplifying constant integer cast $55 Simplifying constant integer cast $aa Simplifying constant integer cast $ff -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 3 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $1b Simplifying constant pointer cast (byte*) 16384 Simplifying constant pointer cast (byte*) 24576 @@ -7430,9 +7278,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $400 Simplifying constant integer cast $400 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 3 Simplifying constant integer cast $10 Simplifying constant integer cast 3 @@ -7440,12 +7285,8 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $55 Simplifying constant integer cast $aa Simplifying constant integer cast $ff -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 3 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $1b Simplifying constant pointer cast (byte*) 15360 Simplifying constant pointer cast (byte*) 16384 @@ -7459,18 +7300,12 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast $10 Simplifying constant integer cast $f Simplifying constant pointer cast (byte*) 53248 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -7480,11 +7315,8 @@ Simplifying constant integer cast 8 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $4000 Simplifying constant pointer cast (byte*) 16384 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $8000 Simplifying constant pointer cast (byte*) 16384 Successful SSA optimization PassNCastSimplification @@ -7532,20 +7364,16 @@ Finalized unsigned number type (byte) $3c Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $80 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 @@ -7566,7 +7394,6 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) $40 Finalized unsigned number type (word) $3fff Finalized unsigned number type (word) $400 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -7608,9 +7435,6 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (word) $400 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 @@ -7630,12 +7454,9 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (word) $400 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) 6 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 @@ -7654,9 +7475,6 @@ Finalized unsigned number type (byte) $40 Finalized unsigned number type (word) $3fff Finalized unsigned number type (word) $400 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 @@ -7672,9 +7490,6 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (byte) $40 Finalized unsigned number type (word) $3fff Finalized unsigned number type (word) $400 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 @@ -7695,9 +7510,6 @@ Finalized unsigned number type (word) $3fff Finalized unsigned number type (word) $400 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $f @@ -7713,13 +7525,10 @@ Finalized unsigned number type (byte) $40 Finalized unsigned number type (word) $3fff Finalized unsigned number type (word) $400 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $50 Finalized unsigned number type (byte) $54 Finalized unsigned number type (byte) $58 Finalized unsigned number type (byte) $5c -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $f @@ -7735,12 +7544,9 @@ Finalized unsigned number type (byte) $40 Finalized unsigned number type (word) $3fff Finalized unsigned number type (word) $400 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $50 Finalized unsigned number type (byte) $54 Finalized unsigned number type (byte) $58 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $f @@ -7756,22 +7562,15 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $400 Finalized unsigned number type (word) $400 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $70 Finalized unsigned number type (byte) $d4 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 @@ -7785,16 +7584,9 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $400 Finalized unsigned number type (word) $400 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $1b Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 @@ -7808,18 +7600,11 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $400 Finalized unsigned number type (word) $400 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $1b Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 @@ -7831,17 +7616,11 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 @@ -7851,10 +7630,7 @@ Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $4000 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $8000 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) keyboard_key_pressed::$0 ← (byte) keyboard_key_pressed::key#20 & (byte) 7 @@ -10404,7 +10180,7 @@ Constant inlined mode_ecmchar::$5 = <(word)(const dword) DTV_COLOR_BANK_DEFAULT# Constant inlined mode_ecmchar::$4 = (word)(const dword) DTV_COLOR_BANK_DEFAULT#0/(word) $400 Constant inlined dtv_control#45 = (const byte) DTV_LINEAR#0 Constant inlined mode_hicolmcchar::cx#0 = (byte) 0 -Constant inlined mode_8bppchunkybmm::x#0 = (byte) 0 +Constant inlined mode_8bppchunkybmm::x#0 = (word) 0 Constant inlined dtv_control#42 = (const byte) DTV_HIGHCOLOR#0|(const byte) DTV_LINEAR#0 Constant inlined mode_sixsfred::cx#0 = (byte) 0 Constant inlined mode_ecmchar::$15 = (const byte) VIC_DEN#0|(const byte) VIC_RSEL#0|(const byte) VIC_ECM#0|(byte) 3 @@ -11490,7 +11266,7 @@ mode_8bppchunkybmm::@3: scope:[mode_8bppchunkybmm] from mode_8bppchunkybmm::@2 to:mode_8bppchunkybmm::@4 mode_8bppchunkybmm::@4: scope:[mode_8bppchunkybmm] from mode_8bppchunkybmm::@3 mode_8bppchunkybmm::@5 [136] (byte) mode_8bppchunkybmm::gfxbCpuBank#4 ← phi( mode_8bppchunkybmm::@3/(byte) mode_8bppchunkybmm::gfxbCpuBank#7 mode_8bppchunkybmm::@5/(byte) mode_8bppchunkybmm::gfxbCpuBank#8 ) - [136] (word) mode_8bppchunkybmm::x#2 ← phi( mode_8bppchunkybmm::@3/(byte) 0 mode_8bppchunkybmm::@5/(word) mode_8bppchunkybmm::x#1 ) + [136] (word) mode_8bppchunkybmm::x#2 ← phi( mode_8bppchunkybmm::@3/(word) 0 mode_8bppchunkybmm::@5/(word) mode_8bppchunkybmm::x#1 ) [136] (byte*) mode_8bppchunkybmm::gfxb#3 ← phi( mode_8bppchunkybmm::@3/(byte*) mode_8bppchunkybmm::gfxb#5 mode_8bppchunkybmm::@5/(byte*) mode_8bppchunkybmm::gfxb#1 ) [137] if((byte*) mode_8bppchunkybmm::gfxb#3!=(word) $8000) goto mode_8bppchunkybmm::@5 to:mode_8bppchunkybmm::@6 @@ -15205,10 +14981,10 @@ mode_8bppchunkybmm: { //SEG235 [136] phi from mode_8bppchunkybmm::@3 to mode_8bppchunkybmm::@4 [phi:mode_8bppchunkybmm::@3->mode_8bppchunkybmm::@4] b4_from_b3: //SEG236 [136] phi (byte) mode_8bppchunkybmm::gfxbCpuBank#4 = (byte) mode_8bppchunkybmm::gfxbCpuBank#7 [phi:mode_8bppchunkybmm::@3->mode_8bppchunkybmm::@4#0] -- register_copy - //SEG237 [136] phi (word) mode_8bppchunkybmm::x#2 = (byte) 0 [phi:mode_8bppchunkybmm::@3->mode_8bppchunkybmm::@4#1] -- vwuz1=vbuc1 - lda #0 + //SEG237 [136] phi (word) mode_8bppchunkybmm::x#2 = (word) 0 [phi:mode_8bppchunkybmm::@3->mode_8bppchunkybmm::@4#1] -- vwuz1=vwuc1 + lda #<0 sta x - lda #0 + lda #>0 sta x+1 //SEG238 [136] phi (byte*) mode_8bppchunkybmm::gfxb#3 = (byte*) mode_8bppchunkybmm::gfxb#5 [phi:mode_8bppchunkybmm::@3->mode_8bppchunkybmm::@4#2] -- register_copy jmp b4 @@ -21994,10 +21770,10 @@ mode_8bppchunkybmm: { //SEG235 [136] phi from mode_8bppchunkybmm::@3 to mode_8bppchunkybmm::@4 [phi:mode_8bppchunkybmm::@3->mode_8bppchunkybmm::@4] b4_from_b3: //SEG236 [136] phi (byte) mode_8bppchunkybmm::gfxbCpuBank#4 = (byte) mode_8bppchunkybmm::gfxbCpuBank#7 [phi:mode_8bppchunkybmm::@3->mode_8bppchunkybmm::@4#0] -- register_copy - //SEG237 [136] phi (word) mode_8bppchunkybmm::x#2 = (byte) 0 [phi:mode_8bppchunkybmm::@3->mode_8bppchunkybmm::@4#1] -- vwuz1=vbuc1 - lda #0 + //SEG237 [136] phi (word) mode_8bppchunkybmm::x#2 = (word) 0 [phi:mode_8bppchunkybmm::@3->mode_8bppchunkybmm::@4#1] -- vwuz1=vwuc1 + lda #<0 sta x - lda #0 + lda #>0 sta x+1 //SEG238 [136] phi (byte*) mode_8bppchunkybmm::gfxb#3 = (byte*) mode_8bppchunkybmm::gfxb#5 [phi:mode_8bppchunkybmm::@3->mode_8bppchunkybmm::@4#2] -- register_copy jmp b4 @@ -26308,7 +26084,7 @@ Removing instruction lda #0 Removing instruction lda #0 Removing instruction lda #0 Removing instruction lda #0 -Removing instruction lda #0 +Removing instruction lda #>0 Removing instruction lda #0 Removing instruction lda #0 Removing instruction lda #0 @@ -28950,8 +28726,8 @@ mode_8bppchunkybmm: { b3: //SEG235 [136] phi from mode_8bppchunkybmm::@3 to mode_8bppchunkybmm::@4 [phi:mode_8bppchunkybmm::@3->mode_8bppchunkybmm::@4] //SEG236 [136] phi (byte) mode_8bppchunkybmm::gfxbCpuBank#4 = (byte) mode_8bppchunkybmm::gfxbCpuBank#7 [phi:mode_8bppchunkybmm::@3->mode_8bppchunkybmm::@4#0] -- register_copy - //SEG237 [136] phi (word) mode_8bppchunkybmm::x#2 = (byte) 0 [phi:mode_8bppchunkybmm::@3->mode_8bppchunkybmm::@4#1] -- vwuz1=vbuc1 - lda #0 + //SEG237 [136] phi (word) mode_8bppchunkybmm::x#2 = (word) 0 [phi:mode_8bppchunkybmm::@3->mode_8bppchunkybmm::@4#1] -- vwuz1=vwuc1 + lda #<0 sta x sta x+1 //SEG238 [136] phi (byte*) mode_8bppchunkybmm::gfxb#3 = (byte*) mode_8bppchunkybmm::gfxb#5 [phi:mode_8bppchunkybmm::@3->mode_8bppchunkybmm::@4#2] -- register_copy diff --git a/src/test/ref/cast-deref.log b/src/test/ref/cast-deref.log index 7082fda54..9865f2f56 100644 --- a/src/test/ref/cast-deref.log +++ b/src/test/ref/cast-deref.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @1 (signed byte[]) main::sbs#0 ← { (number) -1, (number) -2, (number) -3, (number) -4 } (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -47,12 +47,9 @@ SYMBOL TABLE SSA (signed byte[]) main::sbs (signed byte[]) main::sbs#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (signed byte) to elements in (signed byte[]) main::sbs#0 ← { (signed byte)(number) -1, (signed byte)(number) -2, (signed byte)(number) -3, (signed byte)(number) -4 } Successful SSA optimization PassNAddArrayNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte~) main::$0 ← (byte)*((signed byte[]) main::sbs#0 + (byte) main::i#2) Successful SSA optimization Pass2InlineCast Simplifying constant integer cast -1 @@ -60,10 +57,7 @@ Simplifying constant integer cast -2 Simplifying constant integer cast -3 Simplifying constant integer cast -4 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$1 [8] if((byte) main::i#1!=rangelast(0,3)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant right-side identified [0] (signed byte[]) main::sbs#0 ← { (signed byte) -1, (signed byte) -2, (signed byte) -3, (signed byte) -4 } diff --git a/src/test/ref/casting.log b/src/test/ref/casting.log index e3f9143a3..1b549f92d 100644 --- a/src/test/ref/casting.log +++ b/src/test/ref/casting.log @@ -22,7 +22,7 @@ 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 ) - (byte) main::b#0 ← (number) 0 + (byte) main::b#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte*) SCREEN4#4 ← phi( main/(byte*) SCREEN4#5 main::@1/(byte*) SCREEN4#4 ) @@ -54,7 +54,7 @@ main::@return: scope:[main] from main::@3 w: scope:[w] from main::@2 (byte*) SCREEN4#2 ← phi( main::@2/(byte*) SCREEN4#3 ) (byte*) SCREEN3#2 ← phi( main::@2/(byte*) SCREEN3#3 ) - (byte) w::i#0 ← (number) 0 + (byte) w::i#0 ← (byte) 0 to:w::@1 w::@1: scope:[w] from w w::@1 (byte*) SCREEN4#1 ← phi( w/(byte*) SCREEN4#2 w::@1/(byte*) SCREEN4#1 ) @@ -163,10 +163,8 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) $0 in (byte*~) $1 ← (byte*) SCREEN#0 + (number~) $0 Adding number conversion cast (unumber) $2 in (byte*~) $3 ← (byte*) SCREEN#0 + (number~) $2 Adding number conversion cast (unumber) $4 in (byte*~) $5 ← (byte*) SCREEN#0 + (number~) $4 -Adding number conversion cast (unumber) 0 in (byte) main::b#0 ← (number) 0 Adding number conversion cast (unumber) $c8 in (number~) main::$1 ← (number) $c8 - (byte) main::b#2 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (unumber)(number) $c8 - (byte) main::b#2 -Adding number conversion cast (unumber) 0 in (byte) w::i#0 ← (number) 0 Adding number conversion cast (unumber) $514 in (word) w::w1#0 ← (number) $514 Adding number conversion cast (unumber) $4e2 in (word) w::w2#0 ← (number) $4e2 Adding number conversion cast (unumber) w::$2 in (number~) w::$3 ← (number~) w::$2 + (byte) w::i#2 @@ -176,25 +174,19 @@ Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (unumber~) $6 ← (unumber)(number~) $0 Inlining cast (unumber~) $7 ← (unumber)(number~) $2 Inlining cast (unumber~) $8 ← (unumber)(number~) $4 -Inlining cast (byte) main::b#0 ← (unumber)(number) 0 Inlining cast (signed byte~) main::$2 ← (signed byte)(byte) main::b#2 Inlining cast (byte~) main::$4 ← (byte)(signed byte) main::sb#0 -Inlining cast (byte) w::i#0 ← (unumber)(number) 0 Inlining cast (word) w::w1#0 ← (unumber)(number) $514 Inlining cast (word) w::w2#0 ← (unumber)(number) $4e2 Inlining cast (byte~) w::$1 ← (byte)(word~) w::$0 Inlining cast (unumber~) w::$5 ← (unumber)(number~) w::$2 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $c8 -Simplifying constant integer cast 0 Simplifying constant integer cast $514 Simplifying constant integer cast $4e2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $c8 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $514 Finalized unsigned number type (word) $4e2 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/chargen.log b/src/test/ref/chargen.log index 589191a47..44d4ff6b0 100644 --- a/src/test/ref/chargen.log +++ b/src/test/ref/chargen.log @@ -17,14 +17,14 @@ main: scope:[main] from @1 (byte*) main::CHAR_A#0 ← (byte*~) main::$0 *((byte*) PROCPORT#0) ← (number) $32 (byte*) main::sc#0 ← (byte*) SCREEN#0 - (byte) main::y#0 ← (number) 0 + (byte) main::y#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@5 (byte*) main::sc#7 ← phi( main/(byte*) main::sc#0 main::@5/(byte*) main::sc#2 ) (byte) main::y#2 ← phi( main/(byte) main::y#0 main::@5/(byte) main::y#1 ) (byte*) main::CHAR_A#1 ← phi( main/(byte*) main::CHAR_A#0 main::@5/(byte*) main::CHAR_A#2 ) (byte) main::bits#0 ← *((byte*) main::CHAR_A#1 + (byte) main::y#2) - (byte) main::x#0 ← (number) 0 + (byte) main::x#0 ← (byte) 0 to:main::@2 main::@2: scope:[main] from main::@1 main::@3 (byte*) main::CHAR_A#4 ← phi( main::@1/(byte*) main::CHAR_A#1 main::@3/(byte*) main::CHAR_A#3 ) @@ -155,8 +155,6 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 8 in (byte*~) main::$0 ← (byte*) CHARGEN#0 + (number) 8 Adding number conversion cast (unumber) $32 in *((byte*) PROCPORT#0) ← (number) $32 -Adding number conversion cast (unumber) 0 in (byte) main::y#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::x#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (number~) main::$1 ← (byte) main::bits#2 & (number) $80 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (byte) main::bits#2 & (unumber)(number) $80 Adding number conversion cast (unumber) 0 in (bool~) main::$2 ← (unumber~) main::$1 != (number) 0 @@ -169,8 +167,6 @@ Inlining cast (byte*) PROCPORT#0 ← (byte*)(number) 1 Inlining cast (byte*) CHARGEN#0 ← (byte*)(number) $d000 Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast *((byte*) PROCPORT#0) ← (unumber)(number) $32 -Inlining cast (byte) main::y#0 ← (unumber)(number) 0 -Inlining cast (byte) main::x#0 ← (unumber)(number) 0 Inlining cast *((byte*) PROCPORT#0) ← (unumber)(number) $37 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1 @@ -178,8 +174,6 @@ Simplifying constant pointer cast (byte*) 53248 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 8 Simplifying constant integer cast $32 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -188,8 +182,6 @@ Simplifying constant integer cast $37 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $32 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 diff --git a/src/test/ref/chessboard.log b/src/test/ref/chessboard.log index 7f8992135..95732ecb8 100644 --- a/src/test/ref/chessboard.log +++ b/src/test/ref/chessboard.log @@ -9,14 +9,14 @@ main: scope:[main] from @1 (byte*) main::screen#0 ← ((byte*)) (number) $400 (byte*) main::colors#0 ← ((byte*)) (number) $d800 (byte) main::color#0 ← (number) 1 - (byte) main::row#0 ← (number) 0 + (byte) main::row#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::row#4 ← phi( main/(byte) main::row#0 main::@3/(byte) main::row#1 ) (byte*) main::colors#4 ← phi( main/(byte*) main::colors#0 main::@3/(byte*) main::colors#1 ) (byte) main::color#5 ← phi( main/(byte) main::color#0 main::@3/(byte) main::color#2 ) (byte*) main::screen#4 ← phi( main/(byte*) main::screen#0 main::@3/(byte*) main::screen#1 ) - (byte) main::column#0 ← (number) 0 + (byte) main::column#0 ← (byte) 0 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::row#3 ← phi( main::@1/(byte) main::row#4 main::@2/(byte) main::row#3 ) @@ -104,8 +104,6 @@ SYMBOL TABLE SSA (byte*) main::screen#4 Adding number conversion cast (unumber) 1 in (byte) main::color#0 ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) main::row#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::column#0 ← (number) 0 Adding number conversion cast (unumber) $a0 in *((byte*) main::screen#2 + (byte) main::column#2) ← (number) $a0 Adding number conversion cast (unumber) 1 in (number~) main::$0 ← (byte) main::color#3 ^ (number) 1 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::color#3 ^ (unumber)(number) 1 @@ -117,15 +115,11 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 Inlining cast (byte*) main::colors#0 ← (byte*)(number) $d800 Inlining cast (byte) main::color#0 ← (unumber)(number) 1 -Inlining cast (byte) main::row#0 ← (unumber)(number) 0 -Inlining cast (byte) main::column#0 ← (unumber)(number) 0 Inlining cast *((byte*) main::screen#2 + (byte) main::column#2) ← (unumber)(number) $a0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 55296 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $a0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 @@ -133,8 +127,6 @@ Simplifying constant integer cast $28 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $a0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 diff --git a/src/test/ref/complex/tetris/test-sprites.log b/src/test/ref/complex/tetris/test-sprites.log index 12b052ee1..e7d51d51c 100644 --- a/src/test/ref/complex/tetris/test-sprites.log +++ b/src/test/ref/complex/tetris/test-sprites.log @@ -153,7 +153,7 @@ sprites_init: scope:[sprites_init] from main::@4 (number~) sprites_init::$0 ← (number) $f * (number) 8 (number~) sprites_init::$1 ← (number) $18 + (number~) sprites_init::$0 (byte) sprites_init::xpos#0 ← (number~) sprites_init::$1 - (byte) sprites_init::s#0 ← (number) 0 + (byte) sprites_init::s#0 ← (byte) 0 to:sprites_init::@1 sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1 (byte) sprites_init::xpos#2 ← phi( sprites_init/(byte) sprites_init::xpos#0 sprites_init::@1/(byte) sprites_init::xpos#1 ) @@ -455,7 +455,7 @@ main::@6: scope:[main] from main::@4 *((byte*) SPRITES_ENABLE#0) ← (number) $ff (byte) main::xpos#0 ← (number) $18 (byte) main::ypos#0 ← (number) $32 - (byte) main::s#0 ← (number) 4 + (byte) main::s#0 ← (byte) 4 to:main::@1 main::@1: scope:[main] from main::@5 main::@6 (byte) sin_idx#22 ← phi( main::@5/(byte) sin_idx#19 main::@6/(byte) sin_idx#23 ) @@ -535,7 +535,7 @@ loop::@4: scope:[loop] from loop::@1 loop::@4 loop::@5: scope:[loop] from loop::@4 (byte) sin_idx#8 ← phi( loop::@4/(byte) sin_idx#13 ) (byte) loop::idx#0 ← (byte) sin_idx#8 - (byte) loop::s#0 ← (number) 4 + (byte) loop::s#0 ← (byte) 4 to:loop::@6 loop::@6: scope:[loop] from loop::@5 loop::@6 (byte) sin_idx#14 ← phi( loop::@5/(byte) sin_idx#8 loop::@6/(byte) sin_idx#14 ) @@ -1014,7 +1014,6 @@ Adding number conversion cast (unumber) 0 in (byte) render_screen_showing#0 ← Adding number conversion cast (unumber) $f in *((byte*) SPRITES_ENABLE#0) ← (number) $f Adding number conversion cast (unumber) 0 in *((byte*) SPRITES_MC#0) ← (number) 0 Adding number conversion cast (unumber) sprites_init::$1 in (byte) sprites_init::xpos#0 ← (number~) sprites_init::$1 -Adding number conversion cast (unumber) 0 in (byte) sprites_init::s#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (number~) sprites_init::$2 ← (byte) sprites_init::s#2 * (number) 2 Adding number conversion cast (unumber) sprites_init::$2 in (number~) sprites_init::$2 ← (byte) sprites_init::s#2 * (unumber)(number) 2 Adding number conversion cast (unumber) $18 in (number~) sprites_init::$3 ← (byte) sprites_init::xpos#2 + (number) $18 @@ -1075,7 +1074,6 @@ Adding number conversion cast (unumber) main::toD0181_$8#0 in (number~) main::to Adding number conversion cast (unumber) $ff in *((byte*) SPRITES_ENABLE#0) ← (number) $ff Adding number conversion cast (unumber) $18 in (byte) main::xpos#0 ← (number) $18 Adding number conversion cast (unumber) $32 in (byte) main::ypos#0 ← (number) $32 -Adding number conversion cast (unumber) 4 in (byte) main::s#0 ← (number) 4 Adding number conversion cast (unumber) 2 in (number~) main::$5 ← (byte) main::s#2 * (number) 2 Adding number conversion cast (unumber) main::$5 in (number~) main::$5 ← (byte) main::s#2 * (unumber)(number) 2 Adding number conversion cast (unumber) 3 in (number~) main::$6 ← (byte) main::s#2 - (number) 3 @@ -1085,7 +1083,6 @@ Adding number conversion cast (unumber) main::toSpritePtr2_$1#0 in (number~) mai Adding number conversion cast (unumber) $18 in (byte) main::xpos#1 ← (byte) main::xpos#3 + (number) $18 Adding number conversion cast (unumber) $18 in (byte) main::ypos#1 ← (byte) main::ypos#3 + (number) $18 Adding number conversion cast (unumber) $ff in (bool~) loop::$0 ← *((byte*) RASTER#0) != (number) $ff -Adding number conversion cast (unumber) 4 in (byte) loop::s#0 ← (number) 4 Adding number conversion cast (unumber) 2 in (number~) loop::$1 ← (byte) loop::s#2 * (number) 2 Adding number conversion cast (unumber) loop::$1 in (number~) loop::$1 ← (byte) loop::s#2 * (unumber)(number) 2 Adding number conversion cast (unumber) $a in (byte) loop::idx#1 ← (byte) loop::idx#2 + (number) $a @@ -1122,7 +1119,6 @@ Inlining cast (byte) render_screen_showing#0 ← (unumber)(number) 0 Inlining cast *((byte*) SPRITES_ENABLE#0) ← (unumber)(number) $f Inlining cast *((byte*) SPRITES_MC#0) ← (unumber)(number) 0 Inlining cast (byte) sprites_init::xpos#0 ← (unumber)(number~) sprites_init::$1 -Inlining cast (byte) sprites_init::s#0 ← (unumber)(number) 0 Inlining cast (byte) SPRITES_FIRST_YPOS#0 ← (unumber)(number) $31 Inlining cast (word~) toSpritePtr1_$0#0 ← (word)(byte*) toSpritePtr1_sprite#1 Inlining cast (byte~) toSpritePtr1_$2#0 ← (byte)(unumber~) toSpritePtr1_$1#0 @@ -1140,10 +1136,8 @@ Inlining cast (word~) main::toD0181_$4#0 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast *((byte*) SPRITES_ENABLE#0) ← (unumber)(number) $ff Inlining cast (byte) main::xpos#0 ← (unumber)(number) $18 Inlining cast (byte) main::ypos#0 ← (unumber)(number) $32 -Inlining cast (byte) main::s#0 ← (unumber)(number) 4 Inlining cast (word~) main::toSpritePtr2_$0#0 ← (word)(byte*) main::toSpritePtr2_sprite#1 Inlining cast (byte~) main::toSpritePtr2_$2#0 ← (byte)(unumber~) main::toSpritePtr2_$1#0 -Inlining cast (byte) loop::s#0 ← (unumber)(number) 4 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 0 Simplifying constant integer cast 7 @@ -1176,7 +1170,6 @@ Simplifying constant pointer cast (byte*) 10240 Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast $18 Simplifying constant integer cast $31 @@ -1223,14 +1216,12 @@ Simplifying constant integer cast $f Simplifying constant integer cast $ff Simplifying constant integer cast $18 Simplifying constant integer cast $32 -Simplifying constant integer cast 4 Simplifying constant integer cast 2 Simplifying constant integer cast 3 Simplifying constant integer cast $40 Simplifying constant integer cast $18 Simplifying constant integer cast $18 Simplifying constant integer cast $ff -Simplifying constant integer cast 4 Simplifying constant integer cast 2 Simplifying constant integer cast $a Successful SSA optimization PassNCastSimplification @@ -1243,7 +1234,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $18 Finalized unsigned number type (byte) $31 @@ -1288,14 +1278,12 @@ Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) $18 Finalized unsigned number type (byte) $32 -Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) $18 Finalized unsigned number type (byte) $18 Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $a Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/complex/tetris/tetris.log b/src/test/ref/complex/tetris/tetris.log index e9f35d01c..d92ae1d1a 100644 --- a/src/test/ref/complex/tetris/tetris.log +++ b/src/test/ref/complex/tetris/tetris.log @@ -296,7 +296,7 @@ keyboard_matrix_read::@return: scope:[keyboard_matrix_read] from keyboard_matri keyboard_event_scan: scope:[keyboard_event_scan] from main::@35 (byte) keyboard_events_size#53 ← phi( main::@35/(byte) keyboard_events_size#26 ) (byte) keyboard_event_scan::keycode#0 ← (number) 0 - (byte) keyboard_event_scan::row#0 ← (number) 0 + (byte) keyboard_event_scan::row#0 ← (byte) 0 to:keyboard_event_scan::@8 keyboard_event_scan::@8: scope:[keyboard_event_scan] from keyboard_event_scan keyboard_event_scan::@10 (byte) keyboard_events_size#46 ← phi( keyboard_event_scan/(byte) keyboard_events_size#53 keyboard_event_scan::@10/(byte) keyboard_events_size#54 ) @@ -321,7 +321,7 @@ keyboard_event_scan::@9: scope:[keyboard_event_scan] from keyboard_event_scan:: (byte) keyboard_event_scan::keycode#12 ← phi( keyboard_event_scan::@25/(byte) keyboard_event_scan::keycode#7 ) (byte) keyboard_event_scan::row#9 ← phi( keyboard_event_scan::@25/(byte) keyboard_event_scan::row#3 ) (byte) keyboard_event_scan::row_scan#5 ← phi( keyboard_event_scan::@25/(byte) keyboard_event_scan::row_scan#0 ) - (byte) keyboard_event_scan::col#0 ← (number) 0 + (byte) keyboard_event_scan::col#0 ← (byte) 0 to:keyboard_event_scan::@11 keyboard_event_scan::@21: scope:[keyboard_event_scan] from keyboard_event_scan::@25 (byte) keyboard_events_size#61 ← phi( keyboard_event_scan::@25/(byte) keyboard_events_size#37 ) @@ -652,7 +652,7 @@ render_init::@5: scope:[render_init] from render_init::@4 (byte*~) render_init::$11 ← (byte*~) render_init::$10 + (number) $10 (byte*) render_init::li_2#0 ← (byte*~) render_init::$11 (number~) render_init::$12 ← (byte) PLAYFIELD_LINES#0 - (number) 1 - (byte) render_init::i#0 ← (number) 0 + (byte) render_init::i#0 ← (byte) 0 to:render_init::@1 render_init::@1: scope:[render_init] from render_init::@1 render_init::@5 (byte*) render_init::li_2#2 ← phi( render_init::@1/(byte*) render_init::li_2#1 render_init::@5/(byte*) render_init::li_2#0 ) @@ -932,7 +932,7 @@ render_screen_original: scope:[render_screen_original] from render_init::@3 ren (byte*~) render_screen_original::$3 ← (byte*) PLAYFIELD_COLORS_ORIGINAL#0 + (number~) render_screen_original::$2 (byte*) render_screen_original::ocols#0 ← (byte*~) render_screen_original::$3 (byte*) render_screen_original::cols#0 ← (byte*) COLS#0 - (byte) render_screen_original::y#0 ← (number) 0 + (byte) render_screen_original::y#0 ← (byte) 0 to:render_screen_original::@1 render_screen_original::@1: scope:[render_screen_original] from render_screen_original render_screen_original::@7 (byte) render_screen_original::y#6 ← phi( render_screen_original/(byte) render_screen_original::y#0 render_screen_original::@7/(byte) render_screen_original::y#1 ) @@ -1007,7 +1007,7 @@ render_playfield: scope:[render_playfield] from main::@23 main::@31 (number~) render_playfield::$0 ← (byte) PLAYFIELD_COLS#0 * (number) 2 (byte) render_playfield::i#0 ← (number~) render_playfield::$0 (number~) render_playfield::$1 ← (byte) PLAYFIELD_LINES#0 - (number) 1 - (byte) render_playfield::l#0 ← (number) 2 + (byte) render_playfield::l#0 ← (byte) 2 to:render_playfield::@1 render_playfield::@1: scope:[render_playfield] from render_playfield render_playfield::@3 (byte) render_playfield::i#3 ← phi( render_playfield/(byte) render_playfield::i#0 render_playfield::@3/(byte) render_playfield::i#4 ) @@ -1017,7 +1017,7 @@ render_playfield::@1: scope:[render_playfield] from render_playfield render_pla (byte~) render_playfield::$6 ← (byte~) render_playfield::$2 * (const byte) SIZEOF_POINTER (byte*) render_playfield::screen_line#0 ← *((byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_playfield::$6) (number~) render_playfield::$3 ← (byte) PLAYFIELD_COLS#0 - (number) 1 - (byte) render_playfield::c#0 ← (number) 0 + (byte) render_playfield::c#0 ← (byte) 0 to:render_playfield::@2 render_playfield::@2: scope:[render_playfield] from render_playfield::@1 render_playfield::@2 (byte) render_screen_render#32 ← phi( render_playfield::@1/(byte) render_screen_render#13 render_playfield::@2/(byte) render_screen_render#32 ) @@ -1051,7 +1051,7 @@ render_moving: scope:[render_moving] from main::@32 main::@39 (byte) current_ypos#13 ← phi( main::@32/(byte) current_ypos#30 main::@39/(byte) current_ypos#31 ) (byte) render_moving::i#0 ← (number) 0 (byte) render_moving::ypos#0 ← (byte) current_ypos#13 - (byte) render_moving::l#0 ← (number) 0 + (byte) render_moving::l#0 ← (byte) 0 to:render_moving::@1 render_moving::@1: scope:[render_moving] from render_moving render_moving::@3 (byte) current_piece_char#52 ← phi( render_moving/(byte) current_piece_char#68 render_moving::@3/(byte) current_piece_char#69 ) @@ -1076,7 +1076,7 @@ render_moving::@2: scope:[render_moving] from render_moving::@1 (byte~) render_moving::$6 ← (byte~) render_moving::$1 * (const byte) SIZEOF_POINTER (byte*) render_moving::screen_line#0 ← *((byte*[PLAYFIELD_LINES#0]) screen_lines_1#0 + (byte~) render_moving::$6) (byte) render_moving::xpos#0 ← (byte) current_xpos#16 - (byte) render_moving::c#0 ← (number) 0 + (byte) render_moving::c#0 ← (byte) 0 to:render_moving::@4 render_moving::@8: scope:[render_moving] from render_moving::@1 (byte) current_piece_char#85 ← phi( render_moving::@1/(byte) current_piece_char#52 ) @@ -1179,14 +1179,14 @@ render_next::@2: scope:[render_next] from render_next::@1 render_next::@3 (byte~) render_next::$9 ← (byte) next_piece_idx#12 * (const byte) SIZEOF_WORD (byte*) render_next::next_piece_gfx#0 ← ((byte*)) *((word[]) PIECES#0 + (byte~) render_next::$9) (byte) render_next::next_piece_char#0 ← *((byte[]) PIECES_NEXT_CHARS#0 + (byte) next_piece_idx#12) - (byte) render_next::l#0 ← (number) 0 + (byte) render_next::l#0 ← (byte) 0 to:render_next::@5 render_next::@5: scope:[render_next] from render_next::@11 render_next::@2 (byte) render_next::l#7 ← phi( render_next::@11/(byte) render_next::l#1 render_next::@2/(byte) render_next::l#0 ) (byte*) render_next::screen_next_area#10 ← phi( render_next::@11/(byte*) render_next::screen_next_area#4 render_next::@2/(byte*) render_next::screen_next_area#11 ) (byte) render_next::next_piece_char#3 ← phi( render_next::@11/(byte) render_next::next_piece_char#5 render_next::@2/(byte) render_next::next_piece_char#0 ) (byte*) render_next::next_piece_gfx#3 ← phi( render_next::@11/(byte*) render_next::next_piece_gfx#5 render_next::@2/(byte*) render_next::next_piece_gfx#0 ) - (byte) render_next::c#0 ← (number) 0 + (byte) render_next::c#0 ← (byte) 0 to:render_next::@6 render_next::@6: scope:[render_next] from render_next::@5 render_next::@8 (byte) render_next::l#6 ← phi( render_next::@5/(byte) render_next::l#7 render_next::@8/(byte) render_next::l#3 ) @@ -1278,7 +1278,7 @@ sprites_init: scope:[sprites_init] from main::@26 (number~) sprites_init::$0 ← (number) $f * (number) 8 (number~) sprites_init::$1 ← (number) $18 + (number~) sprites_init::$0 (byte) sprites_init::xpos#0 ← (number~) sprites_init::$1 - (byte) sprites_init::s#0 ← (number) 0 + (byte) sprites_init::s#0 ← (byte) 0 to:sprites_init::@1 sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1 (byte) sprites_init::xpos#2 ← phi( sprites_init/(byte) sprites_init::xpos#0 sprites_init::@1/(byte) sprites_init::xpos#1 ) @@ -1618,7 +1618,7 @@ play_init: scope:[play_init] from main::@28 (byte) play_init::idx#0 ← (number) 0 (byte*) play_init::pli#0 ← (byte[$3]) playfield#0 (number~) play_init::$1 ← (byte) PLAYFIELD_LINES#0 - (number) 1 - (byte) play_init::j#0 ← (number) 0 + (byte) play_init::j#0 ← (byte) 0 to:play_init::@1 play_init::@1: scope:[play_init] from play_init play_init::@1 (byte) level#28 ← phi( play_init/(byte) level#44 play_init::@1/(byte) level#28 ) @@ -1639,7 +1639,7 @@ play_init::@2: scope:[play_init] from play_init::@1 (byte~) play_init::$0 ← (byte) PLAYFIELD_COLS#0 * (byte) PLAYFIELD_LINES#0 *((byte[$29]) playfield_lines_idx#0 + (byte) PLAYFIELD_LINES#0) ← (byte~) play_init::$0 (byte) current_movedown_slow#1 ← *((byte[]) MOVEDOWN_SLOW_SPEEDS#0 + (byte) level#13) - (byte) play_init::b#0 ← (number) 0 + (byte) play_init::b#0 ← (byte) 0 to:play_init::@3 play_init::@3: scope:[play_init] from play_init::@2 play_init::@3 (byte) current_movedown_slow#29 ← phi( play_init::@2/(byte) current_movedown_slow#1 play_init::@3/(byte) current_movedown_slow#29 ) @@ -2443,7 +2443,7 @@ play_collision: scope:[play_collision] from play_move_down::@9 play_move_leftri (byte*) play_collision::piece_gfx#0 ← (byte*~) play_collision::$0 (byte) play_collision::i#0 ← (number) 0 (byte) play_collision::yp#0 ← (byte) play_collision::ypos#5 - (byte) play_collision::l#0 ← (number) 0 + (byte) play_collision::l#0 ← (byte) 0 to:play_collision::@1 play_collision::@1: scope:[play_collision] from play_collision play_collision::@17 (byte) play_collision::l#6 ← phi( play_collision/(byte) play_collision::l#0 play_collision::@17/(byte) play_collision::l#1 ) @@ -2454,7 +2454,7 @@ play_collision::@1: scope:[play_collision] from play_collision play_collision:: (byte~) play_collision::$14 ← (byte) play_collision::yp#2 * (const byte) SIZEOF_POINTER (byte*) play_collision::playfield_line#0 ← *((byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_collision::$14) (byte) play_collision::xp#0 ← (byte) play_collision::xpos#5 - (byte) play_collision::c#0 ← (number) 0 + (byte) play_collision::c#0 ← (byte) 0 to:play_collision::@2 play_collision::@2: scope:[play_collision] from play_collision::@1 play_collision::@3 (byte*) play_collision::playfield_line#5 ← phi( play_collision::@1/(byte*) play_collision::playfield_line#0 play_collision::@3/(byte*) play_collision::playfield_line#6 ) @@ -2575,7 +2575,7 @@ play_lock_current: scope:[play_lock_current] from play_move_down::@10 (byte) current_ypos#23 ← phi( play_move_down::@10/(byte) current_ypos#44 ) (byte) play_lock_current::i#0 ← (number) 0 (byte) play_lock_current::yp#0 ← (byte) current_ypos#23 - (byte) play_lock_current::l#0 ← (number) 0 + (byte) play_lock_current::l#0 ← (byte) 0 to:play_lock_current::@1 play_lock_current::@1: scope:[play_lock_current] from play_lock_current play_lock_current::@5 (byte) play_lock_current::l#6 ← phi( play_lock_current/(byte) play_lock_current::l#0 play_lock_current::@5/(byte) play_lock_current::l#1 ) @@ -2587,7 +2587,7 @@ play_lock_current::@1: scope:[play_lock_current] from play_lock_current play_lo (byte~) play_lock_current::$4 ← (byte) play_lock_current::yp#2 * (const byte) SIZEOF_POINTER (byte*) play_lock_current::playfield_line#0 ← *((byte*[PLAYFIELD_LINES#0]) playfield_lines#0 + (byte~) play_lock_current::$4) (byte) play_lock_current::xp#0 ← (byte) current_xpos#29 - (byte) play_lock_current::c#0 ← (number) 0 + (byte) play_lock_current::c#0 ← (byte) 0 to:play_lock_current::@2 play_lock_current::@2: scope:[play_lock_current] from play_lock_current::@1 play_lock_current::@3 (byte) current_xpos#86 ← phi( play_lock_current::@1/(byte) current_xpos#29 play_lock_current::@3/(byte) current_xpos#68 ) @@ -2782,7 +2782,7 @@ play_remove_lines: scope:[play_remove_lines] from play_move_down::@19 (byte) play_remove_lines::w#0 ← (number~) play_remove_lines::$3 (byte) play_remove_lines::removed#0 ← (number) 0 (number~) play_remove_lines::$4 ← (byte) PLAYFIELD_LINES#0 - (number) 1 - (byte) play_remove_lines::y#0 ← (number) 0 + (byte) play_remove_lines::y#0 ← (byte) 0 to:play_remove_lines::@1 play_remove_lines::@1: scope:[play_remove_lines] from play_remove_lines play_remove_lines::@7 (byte) play_remove_lines::removed#11 ← phi( play_remove_lines/(byte) play_remove_lines::removed#0 play_remove_lines::@7/(byte) play_remove_lines::removed#8 ) @@ -2791,7 +2791,7 @@ play_remove_lines::@1: scope:[play_remove_lines] from play_remove_lines play_re (byte) play_remove_lines::r#3 ← phi( play_remove_lines/(byte) play_remove_lines::r#0 play_remove_lines::@7/(byte) play_remove_lines::r#5 ) (byte) play_remove_lines::full#0 ← (number) 1 (number~) play_remove_lines::$5 ← (byte) PLAYFIELD_COLS#0 - (number) 1 - (byte) play_remove_lines::x#0 ← (number) 0 + (byte) play_remove_lines::x#0 ← (byte) 0 to:play_remove_lines::@2 play_remove_lines::@2: scope:[play_remove_lines] from play_remove_lines::@1 play_remove_lines::@3 (byte) play_remove_lines::removed#9 ← phi( play_remove_lines::@1/(byte) play_remove_lines::removed#11 play_remove_lines::@3/(byte) play_remove_lines::removed#6 ) @@ -2975,7 +2975,7 @@ play_increase_level::@3: scope:[play_increase_level] from play_increase_level:: (byte) current_movedown_slow#66 ← phi( play_increase_level::@2/(byte) current_movedown_slow#73 play_increase_level::@6/(byte) current_movedown_slow#74 ) (byte) level#65 ← phi( play_increase_level::@2/(byte) level#77 play_increase_level::@6/(byte) level#78 ) asm { sed } - (byte) play_increase_level::b#0 ← (number) 0 + (byte) play_increase_level::b#0 ← (byte) 0 to:play_increase_level::@7 play_increase_level::@6: scope:[play_increase_level] from play_increase_level::@2 (byte) current_movedown_slow#74 ← phi( play_increase_level::@2/(byte) current_movedown_slow#73 ) @@ -7152,8 +7152,6 @@ Adding number conversion cast (unumber) 2 in (byte) KEY_MODIFIER_RSHIFT#0 ← (n Adding number conversion cast (unumber) 4 in (byte) KEY_MODIFIER_CTRL#0 ← (number) 4 Adding number conversion cast (unumber) 8 in (byte) KEY_MODIFIER_COMMODORE#0 ← (number) 8 Adding number conversion cast (unumber) 0 in (byte) keyboard_event_scan::keycode#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) keyboard_event_scan::row#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) keyboard_event_scan::col#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (number~) keyboard_event_scan::$14 ← (byte) keyboard_event_scan::keycode#3 + (number) 8 Adding number conversion cast (unumber) keyboard_event_scan::$14 in (number~) keyboard_event_scan::$14 ← (byte) keyboard_event_scan::keycode#3 + (unumber)(number) 8 Adding number conversion cast (unumber) 0 in (bool~) keyboard_event_scan::$17 ← (byte~) keyboard_event_scan::$16 != (number) 0 @@ -7198,7 +7196,6 @@ Adding number conversion cast (unumber) render_init::$9 in (byte*~) render_init: Adding number conversion cast (unumber) $10 in (byte*~) render_init::$11 ← (byte*~) render_init::$10 + (number) $10 Adding number conversion cast (unumber) 1 in (number~) render_init::$12 ← (byte) PLAYFIELD_LINES#0 - (number) 1 Adding number conversion cast (unumber) render_init::$12 in (number~) render_init::$12 ← (byte) PLAYFIELD_LINES#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) render_init::i#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte*) render_init::li_1#1 ← (byte*) render_init::li_1#2 + (number) $28 Adding number conversion cast (unumber) $28 in (byte*) render_init::li_2#1 ← (byte*) render_init::li_2#2 + (number) $28 Adding number conversion cast (unumber) 0 in (byte) render_screen_show#1 ← (number) 0 @@ -7255,7 +7252,6 @@ Adding number conversion cast (unumber) 4 in (byte~) render_bcd::$5 ← (byte) r Adding number conversion cast (unumber) 0 in (byte) render_screen_original::SPACE#0 ← (number) 0 Adding number conversion cast (unumber) render_screen_original::$0 in (byte*~) render_screen_original::$1 ← (byte*) PLAYFIELD_SCREEN_ORIGINAL#0 + (number~) render_screen_original::$0 Adding number conversion cast (unumber) render_screen_original::$2 in (byte*~) render_screen_original::$3 ← (byte*) PLAYFIELD_COLORS_ORIGINAL#0 + (number~) render_screen_original::$2 -Adding number conversion cast (unumber) 0 in (byte) render_screen_original::y#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) render_screen_original::x#0 ← (number) 0 Adding number conversion cast (unumber) 4 in (bool~) render_screen_original::$4 ← (byte) render_screen_original::x#1 != (number) 4 Adding number conversion cast (unumber) $24 in (bool~) render_screen_original::$5 ← (byte) render_screen_original::x#2 != (number) $24 @@ -7264,27 +7260,20 @@ Adding number conversion cast (unumber) 2 in (number~) render_playfield::$0 ← Adding number conversion cast (unumber) render_playfield::$0 in (number~) render_playfield::$0 ← (byte) PLAYFIELD_COLS#0 * (unumber)(number) 2 Adding number conversion cast (unumber) 1 in (number~) render_playfield::$1 ← (byte) PLAYFIELD_LINES#0 - (number) 1 Adding number conversion cast (unumber) render_playfield::$1 in (number~) render_playfield::$1 ← (byte) PLAYFIELD_LINES#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 2 in (byte) render_playfield::l#0 ← (number) 2 Adding number conversion cast (unumber) 1 in (number~) render_playfield::$3 ← (byte) PLAYFIELD_COLS#0 - (number) 1 Adding number conversion cast (unumber) render_playfield::$3 in (number~) render_playfield::$3 ← (byte) PLAYFIELD_COLS#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) render_playfield::c#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) render_moving::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) render_moving::l#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (bool~) render_moving::$0 ← (byte) render_moving::ypos#2 > (number) 1 -Adding number conversion cast (unumber) 0 in (byte) render_moving::c#0 ← (number) 0 Adding number conversion cast (unumber) 4 in (byte) render_moving::i#1 ← (byte) render_moving::i#3 + (number) 4 Adding number conversion cast (unumber) 0 in (bool~) render_moving::$2 ← (byte) render_moving::current_cell#0 != (number) 0 Adding number conversion cast (unumber) render_next::$2 in (word) render_next::next_area_offset#0 ← (number~) render_next::$2 Adding number conversion cast (unumber) 0 in (bool~) render_next::$3 ← (byte) render_screen_render#15 == (number) 0 -Adding number conversion cast (unumber) 0 in (byte) render_next::l#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) render_next::c#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) render_next::$6 ← (byte) render_next::cell#0 != (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) render_next::screen_next_area#6) ← (number) 0 Adding number conversion cast (unumber) $24 in (byte*) render_next::screen_next_area#4 ← (byte*) render_next::screen_next_area#8 + (number) $24 Adding number conversion cast (unumber) $f in *((byte*) SPRITES_ENABLE#0) ← (number) $f Adding number conversion cast (unumber) 0 in *((byte*) SPRITES_MC#0) ← (number) 0 Adding number conversion cast (unumber) sprites_init::$1 in (byte) sprites_init::xpos#0 ← (number~) sprites_init::$1 -Adding number conversion cast (unumber) 0 in (byte) sprites_init::s#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (number~) sprites_init::$2 ← (byte) sprites_init::s#2 * (number) 2 Adding number conversion cast (unumber) sprites_init::$2 in (number~) sprites_init::$2 ← (byte) sprites_init::s#2 * (unumber)(number) 2 Adding number conversion cast (unumber) $18 in (number~) sprites_init::$3 ← (byte) sprites_init::xpos#2 + (number) $18 @@ -7336,8 +7325,6 @@ Adding number conversion cast (unumber) 0 in (byte) current_movedown_counter#0 Adding number conversion cast (unumber) 0 in (byte) play_init::idx#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) play_init::$1 ← (byte) PLAYFIELD_LINES#0 - (number) 1 Adding number conversion cast (unumber) play_init::$1 in (number~) play_init::$1 ← (byte) PLAYFIELD_LINES#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) play_init::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) play_init::b#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) play_movement::render#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) play_movement::$1 ← (byte) game_over#1 != (number) 0 Adding number conversion cast (unumber) 0 in (byte) play_move_down::movedown#0 ← (number) 0 @@ -7373,16 +7360,12 @@ Adding number conversion cast (unumber) 2 in (byte) COLLISION_BOTTOM#0 ← (numb Adding number conversion cast (unumber) 4 in (byte) COLLISION_LEFT#0 ← (number) 4 Adding number conversion cast (unumber) 8 in (byte) COLLISION_RIGHT#0 ← (number) 8 Adding number conversion cast (unumber) 0 in (byte) play_collision::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) play_collision::l#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) play_collision::c#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) play_collision::$1 ← *((byte*) play_collision::piece_gfx#1 + (byte) play_collision::i#2) != (number) 0 Adding number conversion cast (unumber) $80 in (number~) play_collision::$5 ← (byte) play_collision::xp#3 & (number) $80 Adding number conversion cast (unumber) play_collision::$5 in (number~) play_collision::$5 ← (byte) play_collision::xp#3 & (unumber)(number) $80 Adding number conversion cast (unumber) 0 in (bool~) play_collision::$6 ← (unumber~) play_collision::$5 != (number) 0 Adding number conversion cast (unumber) 0 in (bool~) play_collision::$10 ← *((byte*) play_collision::playfield_line#1 + (byte) play_collision::xp#5) != (number) 0 Adding number conversion cast (unumber) 0 in (byte) play_lock_current::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) play_lock_current::l#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) play_lock_current::c#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) play_lock_current::$0 ← *((byte*) current_piece_gfx#22 + (byte) play_lock_current::i#2) != (number) 0 Adding number conversion cast (unumber) 0 in (byte) current_orientation#8 ← (number) 0 Adding number conversion cast (unumber) 7 in (byte) play_spawn_current::piece_idx#0 ← (number) 7 @@ -7397,11 +7380,9 @@ Adding number conversion cast (unumber) play_remove_lines::$3 in (number~) play_ Adding number conversion cast (unumber) 0 in (byte) play_remove_lines::removed#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) play_remove_lines::$4 ← (byte) PLAYFIELD_LINES#0 - (number) 1 Adding number conversion cast (unumber) play_remove_lines::$4 in (number~) play_remove_lines::$4 ← (byte) PLAYFIELD_LINES#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) play_remove_lines::y#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) play_remove_lines::full#0 ← (number) 1 Adding number conversion cast (unumber) 1 in (number~) play_remove_lines::$5 ← (byte) PLAYFIELD_COLS#0 - (number) 1 Adding number conversion cast (unumber) play_remove_lines::$5 in (number~) play_remove_lines::$5 ← (byte) PLAYFIELD_COLS#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) play_remove_lines::x#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) play_remove_lines::$6 ← (byte) play_remove_lines::c#0 == (number) 0 Adding number conversion cast (unumber) 0 in (byte) play_remove_lines::full#1 ← (number) 0 Adding number conversion cast (unumber) 1 in (bool~) play_remove_lines::$9 ← (byte) play_remove_lines::full#2 == (number) 1 @@ -7417,7 +7398,6 @@ Adding number conversion cast (unumber) 1 in (byte) current_movedown_slow#9 ← Adding number conversion cast (unumber) $f in (number~) play_increase_level::$1 ← (byte) level_bcd#7 & (number) $f Adding number conversion cast (unumber) play_increase_level::$1 in (number~) play_increase_level::$1 ← (byte) level_bcd#7 & (unumber)(number) $f Adding number conversion cast (unumber) $a in (bool~) play_increase_level::$2 ← (unumber~) play_increase_level::$1 == (number) $a -Adding number conversion cast (unumber) 0 in (byte) play_increase_level::b#0 ← (number) 0 Adding number conversion cast (unumber) 6 in (byte) level_bcd#8 ← (byte) level_bcd#21 + (number) 6 Adding number conversion cast (unumber) $ff in (bool~) main::$10 ← *((byte*) RASTER#0) != (number) $ff Adding number conversion cast (unumber) 0 in (byte) main::render#0 ← (number) 0 @@ -7506,8 +7486,6 @@ Inlining cast (byte) KEY_MODIFIER_RSHIFT#0 ← (unumber)(number) 2 Inlining cast (byte) KEY_MODIFIER_CTRL#0 ← (unumber)(number) 4 Inlining cast (byte) KEY_MODIFIER_COMMODORE#0 ← (unumber)(number) 8 Inlining cast (byte) keyboard_event_scan::keycode#0 ← (unumber)(number) 0 -Inlining cast (byte) keyboard_event_scan::row#0 ← (unumber)(number) 0 -Inlining cast (byte) keyboard_event_scan::col#0 ← (unumber)(number) 0 Inlining cast (byte) keyboard_modifiers#1 ← (unumber)(number) 0 Inlining cast (byte) keyboard_event_get::return#0 ← (unumber)(number) $ff Inlining cast (word*) SID_VOICE3_FREQ#0 ← (word*)(number) $d40e @@ -7535,7 +7513,6 @@ Inlining cast *((byte*) CIA2_PORT_A_DDR#0) ← (unumber)(number) 3 Inlining cast (word~) render_init::vicSelectGfxBank1_toDd001_$0#0 ← (word)(byte*) render_init::vicSelectGfxBank1_toDd001_gfx#1 Inlining cast (unumber~) render_init::$16 ← (unumber)(number~) render_init::$6 Inlining cast (unumber~) render_init::$17 ← (unumber)(number~) render_init::$9 -Inlining cast (byte) render_init::i#0 ← (unumber)(number) 0 Inlining cast (byte) render_screen_show#1 ← (unumber)(number) 0 Inlining cast (byte) render_screen_render#1 ← (unumber)(number) $20 Inlining cast (byte) render_show::d018val#0 ← (unumber)(number) 0 @@ -7557,22 +7534,14 @@ Inlining cast (byte) render_bcd::ZERO_CHAR#0 ← (unumber)(number) $35 Inlining cast (byte) render_screen_original::SPACE#0 ← (unumber)(number) 0 Inlining cast (unumber~) render_screen_original::$8 ← (unumber)(number~) render_screen_original::$0 Inlining cast (unumber~) render_screen_original::$9 ← (unumber)(number~) render_screen_original::$2 -Inlining cast (byte) render_screen_original::y#0 ← (unumber)(number) 0 Inlining cast (byte) render_screen_original::x#0 ← (unumber)(number) 0 -Inlining cast (byte) render_playfield::l#0 ← (unumber)(number) 2 -Inlining cast (byte) render_playfield::c#0 ← (unumber)(number) 0 Inlining cast (byte) render_moving::i#0 ← (unumber)(number) 0 -Inlining cast (byte) render_moving::l#0 ← (unumber)(number) 0 -Inlining cast (byte) render_moving::c#0 ← (unumber)(number) 0 Inlining cast (word) render_next::next_area_offset#0 ← (unumber)(number~) render_next::$2 Inlining cast (byte*) render_next::next_piece_gfx#0 ← (byte*)*((word[]) PIECES#0 + (byte~) render_next::$9) -Inlining cast (byte) render_next::l#0 ← (unumber)(number) 0 -Inlining cast (byte) render_next::c#0 ← (unumber)(number) 0 Inlining cast *((byte*) render_next::screen_next_area#6) ← (unumber)(number) 0 Inlining cast *((byte*) SPRITES_ENABLE#0) ← (unumber)(number) $f Inlining cast *((byte*) SPRITES_MC#0) ← (unumber)(number) 0 Inlining cast (byte) sprites_init::xpos#0 ← (unumber)(number~) sprites_init::$1 -Inlining cast (byte) sprites_init::s#0 ← (unumber)(number) 0 Inlining cast (byte) SPRITES_FIRST_YPOS#0 ← (unumber)(number) $31 Inlining cast (word~) toSpritePtr1_$0#0 ← (word)(byte*) toSpritePtr1_sprite#1 Inlining cast (byte~) toSpritePtr1_$2#0 ← (byte)(unumber~) toSpritePtr1_$1#0 @@ -7594,8 +7563,6 @@ Inlining cast (byte) current_movedown_slow#0 ← (unumber)(number) $30 Inlining cast (byte) current_movedown_fast#0 ← (unumber)(number) $a Inlining cast (byte) current_movedown_counter#0 ← (unumber)(number) 0 Inlining cast (byte) play_init::idx#0 ← (unumber)(number) 0 -Inlining cast (byte) play_init::j#0 ← (unumber)(number) 0 -Inlining cast (byte) play_init::b#0 ← (unumber)(number) 0 Inlining cast (byte) play_movement::render#0 ← (unumber)(number) 0 Inlining cast (byte) play_move_down::movedown#0 ← (unumber)(number) 0 Inlining cast (byte) play_move_down::return#1 ← (unumber)(number) 0 @@ -7614,23 +7581,16 @@ Inlining cast (byte) COLLISION_BOTTOM#0 ← (unumber)(number) 2 Inlining cast (byte) COLLISION_LEFT#0 ← (unumber)(number) 4 Inlining cast (byte) COLLISION_RIGHT#0 ← (unumber)(number) 8 Inlining cast (byte) play_collision::i#0 ← (unumber)(number) 0 -Inlining cast (byte) play_collision::l#0 ← (unumber)(number) 0 -Inlining cast (byte) play_collision::c#0 ← (unumber)(number) 0 Inlining cast (byte) play_lock_current::i#0 ← (unumber)(number) 0 -Inlining cast (byte) play_lock_current::l#0 ← (unumber)(number) 0 -Inlining cast (byte) play_lock_current::c#0 ← (unumber)(number) 0 Inlining cast (byte*) current_piece#5 ← (byte*)*((word[]) PIECES#0 + (byte~) play_spawn_current::$7) Inlining cast (byte) current_orientation#8 ← (unumber)(number) 0 Inlining cast (byte) play_spawn_current::piece_idx#0 ← (unumber)(number) 7 Inlining cast (byte) game_over#5 ← (unumber)(number) 1 Inlining cast (byte) play_remove_lines::removed#0 ← (unumber)(number) 0 -Inlining cast (byte) play_remove_lines::y#0 ← (unumber)(number) 0 Inlining cast (byte) play_remove_lines::full#0 ← (unumber)(number) 1 -Inlining cast (byte) play_remove_lines::x#0 ← (unumber)(number) 0 Inlining cast (byte) play_remove_lines::full#1 ← (unumber)(number) 0 Inlining cast *((byte[$3]) playfield#0 + (byte) play_remove_lines::w#7) ← (unumber)(number) 0 Inlining cast (byte) current_movedown_slow#9 ← (unumber)(number) 1 -Inlining cast (byte) play_increase_level::b#0 ← (unumber)(number) 0 Inlining cast (byte) main::render#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 0 @@ -7712,8 +7672,6 @@ Simplifying constant integer cast 2 Simplifying constant integer cast 4 Simplifying constant integer cast 8 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast 0 Simplifying constant integer cast 8 @@ -7758,7 +7716,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $10 Simplifying constant integer cast $10 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast 0 @@ -7794,30 +7751,22 @@ Simplifying constant integer cast $f Simplifying constant integer cast 4 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast $24 Simplifying constant integer cast $28 Simplifying constant integer cast 2 Simplifying constant integer cast 1 -Simplifying constant integer cast 2 Simplifying constant integer cast 1 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $24 Simplifying constant integer cast $f Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast $18 Simplifying constant integer cast $31 @@ -8377,8 +8326,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -8402,16 +8349,12 @@ Simplifying constant integer cast 4 Simplifying constant integer cast 8 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 7 Simplifying constant integer cast 1 Simplifying constant integer cast 7 @@ -8420,12 +8363,10 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $ff Simplifying constant integer cast 0 @@ -8436,7 +8377,6 @@ Simplifying constant integer cast $1d Simplifying constant integer cast 1 Simplifying constant integer cast $f Simplifying constant integer cast $a -Simplifying constant integer cast 0 Simplifying constant integer cast 6 Simplifying constant integer cast $ff Simplifying constant integer cast 0 @@ -8479,8 +8419,6 @@ Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 @@ -8516,7 +8454,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 0 @@ -8552,30 +8489,22 @@ Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $24 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $24 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $18 Finalized unsigned number type (byte) $31 @@ -8623,8 +8552,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 @@ -8648,16 +8575,12 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 7 @@ -8666,12 +8589,10 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 @@ -8682,7 +8603,6 @@ Finalized unsigned number type (byte) $1d Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $a -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 6 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/condition-integer-0.asm b/src/test/ref/condition-integer-0.asm new file mode 100644 index 000000000..d9baaa994 --- /dev/null +++ b/src/test/ref/condition-integer-0.asm @@ -0,0 +1,56 @@ +// Tests using integer conditions in if() +// This should produce '+ ++ ++' at the top of the screen +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label SCREEN = $400 +main: { + .label i1 = 2 + lda #'+' + sta SCREEN + lda #' ' + sta SCREEN+1 + ldy #2 + ldx #0 + // loop byte + b3: + cpx #0 + beq b4 + lda #'+' + sta SCREEN,y + iny + b4: + inx + cpx #3 + bne b3 + lda #' ' + sta SCREEN,y + iny + lda #<0 + sta i1 + sta i1+1 + // loop word + b7: + lda i1 + cmp #<0 + bne !+ + lda i1+1 + cmp #>0 + beq b8 + !: + lda #'+' + sta SCREEN,y + iny + b8: + inc i1 + bne !+ + inc i1+1 + !: + lda i1+1 + cmp #>3 + bne b7 + lda i1 + cmp #<3 + bne b7 + rts +} diff --git a/src/test/ref/condition-integer-0.cfg b/src/test/ref/condition-integer-0.cfg new file mode 100644 index 000000000..ceede22d2 --- /dev/null +++ b/src/test/ref/condition-integer-0.cfg @@ -0,0 +1,53 @@ +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@2 +main::@2: scope:[main] from main + [5] *((const byte*) SCREEN#0) ← (byte) '+' + to:main::@1 +main::@1: scope:[main] from main::@2 + [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' + to:main::@3 +main::@3: scope:[main] from main::@1 main::@4 + [7] (byte) main::idx#10 ← phi( main::@1/(byte) 2 main::@4/(byte) main::idx#11 ) + [7] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@4/(byte) main::i#1 ) + [8] if((byte) 0==(byte) main::i#2) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@3 + [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' + [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 + to:main::@4 +main::@4: scope:[main] from main::@3 main::@5 + [11] (byte) main::idx#11 ← phi( main::@3/(byte) main::idx#10 main::@5/(byte) main::idx#4 ) + [12] (byte) main::i#1 ← ++ (byte) main::i#2 + [13] if((byte) main::i#1!=(byte) 3) goto main::@3 + to:main::@6 +main::@6: scope:[main] from main::@4 + [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' + [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 + to:main::@7 +main::@7: scope:[main] from main::@6 main::@8 + [16] (byte) main::idx#12 ← phi( main::@8/(byte) main::idx#17 main::@6/(byte) main::idx#5 ) + [16] (word) main::i1#2 ← phi( main::@8/(word) main::i1#1 main::@6/(word) 0 ) + [17] if((byte) 0==(word) main::i1#2) goto main::@8 + to:main::@9 +main::@9: scope:[main] from main::@7 + [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' + [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 + to:main::@8 +main::@8: scope:[main] from main::@7 main::@9 + [20] (byte) main::idx#17 ← phi( main::@9/(byte) main::idx#6 main::@7/(byte) main::idx#12 ) + [21] (word) main::i1#1 ← ++ (word) main::i1#2 + [22] if((word) main::i1#1!=(byte) 3) goto main::@7 + to:main::@return +main::@return: scope:[main] from main::@8 + [23] return + to:@return diff --git a/src/test/ref/condition-integer-0.log b/src/test/ref/condition-integer-0.log new file mode 100644 index 000000000..bfdda1fe2 --- /dev/null +++ b/src/test/ref/condition-integer-0.log @@ -0,0 +1,928 @@ +Warning! Adding boolean cast to non-boolean sub-expression (number) 0 +Warning! Adding boolean cast to non-boolean sub-expression (number) $3e7 +Warning! Adding boolean cast to non-boolean sub-expression (byte) main::i +Warning! Adding boolean cast to non-boolean sub-expression (word) main::i1 +Adding pointer type conversion cast (byte*) SCREEN in (byte*) SCREEN ← (number) $400 +Culled Empty Block (label) main::@12 + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + (byte*) SCREEN#0 ← ((byte*)) (number) $400 + to:@1 +main: scope:[main] from @1 + (byte) main::idx#0 ← (number) 0 + (bool~) main::$6 ← (number) 0 != (number) 0 + (bool~) main::$0 ← ! (bool~) main::$6 + if((bool~) main::$0) goto main::@1 + to:main::@3 +main::@1: scope:[main] from main main::@3 + (byte) main::idx#13 ← phi( main/(byte) main::idx#0 main::@3/(byte) main::idx#1 ) + (bool~) main::$7 ← (number) 0 != (number) $3e7 + (bool~) main::$1 ← ! (bool~) main::$7 + if((bool~) main::$1) goto main::@2 + to:main::@4 +main::@3: scope:[main] from main + (byte) main::idx#7 ← phi( main/(byte) main::idx#0 ) + *((byte*) SCREEN#0 + (byte) main::idx#7) ← (byte) '0' + (byte) main::idx#1 ← ++ (byte) main::idx#7 + to:main::@1 +main::@2: scope:[main] from main::@1 main::@4 + (byte) main::idx#8 ← phi( main::@1/(byte) main::idx#13 main::@4/(byte) main::idx#3 ) + *((byte*) SCREEN#0 + (byte) main::idx#8) ← (byte) ' ' + (byte) main::idx#2 ← ++ (byte) main::idx#8 + (byte) main::i#0 ← (byte) 0 + to:main::@5 +main::@4: scope:[main] from main::@1 + (byte) main::idx#9 ← phi( main::@1/(byte) main::idx#13 ) + *((byte*) SCREEN#0 + (byte) main::idx#9) ← (byte) '+' + (byte) main::idx#3 ← ++ (byte) main::idx#9 + to:main::@2 +main::@5: scope:[main] from main::@2 main::@6 + (byte) main::idx#14 ← phi( main::@2/(byte) main::idx#2 main::@6/(byte) main::idx#15 ) + (byte) main::i#2 ← phi( main::@2/(byte) main::i#0 main::@6/(byte) main::i#1 ) + (bool~) main::$8 ← (number) 0 != (byte) main::i#2 + (bool~) main::$2 ← ! (bool~) main::$8 + if((bool~) main::$2) goto main::@6 + to:main::@7 +main::@6: scope:[main] from main::@5 main::@7 + (byte) main::idx#15 ← phi( main::@5/(byte) main::idx#14 main::@7/(byte) main::idx#4 ) + (byte) main::i#3 ← phi( main::@5/(byte) main::i#2 main::@7/(byte) main::i#4 ) + (byte) main::i#1 ← (byte) main::i#3 + rangenext(0,2) + (bool~) main::$3 ← (byte) main::i#1 != rangelast(0,2) + if((bool~) main::$3) goto main::@5 + to:main::@8 +main::@7: scope:[main] from main::@5 + (byte) main::i#4 ← phi( main::@5/(byte) main::i#2 ) + (byte) main::idx#10 ← phi( main::@5/(byte) main::idx#14 ) + *((byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' + (byte) main::idx#4 ← ++ (byte) main::idx#10 + to:main::@6 +main::@8: scope:[main] from main::@6 + (byte) main::idx#11 ← phi( main::@6/(byte) main::idx#15 ) + *((byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' + (byte) main::idx#5 ← ++ (byte) main::idx#11 + (word) main::i1#0 ← (word) 0 + to:main::@9 +main::@9: scope:[main] from main::@10 main::@8 + (byte) main::idx#16 ← phi( main::@10/(byte) main::idx#17 main::@8/(byte) main::idx#5 ) + (word) main::i1#2 ← phi( main::@10/(word) main::i1#1 main::@8/(word) main::i1#0 ) + (bool~) main::$9 ← (number) 0 != (word) main::i1#2 + (bool~) main::$4 ← ! (bool~) main::$9 + if((bool~) main::$4) goto main::@10 + to:main::@11 +main::@10: scope:[main] from main::@11 main::@9 + (byte) main::idx#17 ← phi( main::@11/(byte) main::idx#6 main::@9/(byte) main::idx#16 ) + (word) main::i1#3 ← phi( main::@11/(word) main::i1#4 main::@9/(word) main::i1#2 ) + (word) main::i1#1 ← (word) main::i1#3 + rangenext(0,2) + (bool~) main::$5 ← (word) main::i1#1 != rangelast(0,2) + if((bool~) main::$5) goto main::@9 + to:main::@return +main::@11: scope:[main] from main::@9 + (word) main::i1#4 ← phi( main::@9/(word) main::i1#2 ) + (byte) main::idx#12 ← phi( main::@9/(byte) main::idx#16 ) + *((byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' + (byte) main::idx#6 ← ++ (byte) main::idx#12 + to:main::@10 +main::@return: scope:[main] from main::@10 + return + to:@return +@1: scope:[] from @begin + call main + to:@2 +@2: scope:[] from @1 + to:@end +@end: scope:[] from @2 + +SYMBOL TABLE SSA +(label) @1 +(label) @2 +(label) @begin +(label) @end +(byte*) SCREEN +(byte*) SCREEN#0 +(void()) main() +(bool~) main::$0 +(bool~) main::$1 +(bool~) main::$2 +(bool~) main::$3 +(bool~) main::$4 +(bool~) main::$5 +(bool~) main::$6 +(bool~) main::$7 +(bool~) main::$8 +(bool~) main::$9 +(label) main::@1 +(label) main::@10 +(label) main::@11 +(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 +(byte) main::i +(byte) main::i#0 +(byte) main::i#1 +(byte) main::i#2 +(byte) main::i#3 +(byte) main::i#4 +(word) main::i1 +(word) main::i1#0 +(word) main::i1#1 +(word) main::i1#2 +(word) main::i1#3 +(word) main::i1#4 +(byte) main::idx +(byte) main::idx#0 +(byte) main::idx#1 +(byte) main::idx#10 +(byte) main::idx#11 +(byte) main::idx#12 +(byte) main::idx#13 +(byte) main::idx#14 +(byte) main::idx#15 +(byte) main::idx#16 +(byte) main::idx#17 +(byte) main::idx#2 +(byte) main::idx#3 +(byte) main::idx#4 +(byte) main::idx#5 +(byte) main::idx#6 +(byte) main::idx#7 +(byte) main::idx#8 +(byte) main::idx#9 + +Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) main::$8 ← (number) 0 != (byte) main::i#2 +Adding number conversion cast (unumber) 0 in (bool~) main::$9 ← (number) 0 != (word) main::i1#2 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 +Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inversing boolean not [3] (bool~) main::$0 ← (number) 0 == (number) 0 from [2] (bool~) main::$6 ← (number) 0 != (number) 0 +Inversing boolean not [7] (bool~) main::$1 ← (number) 0 == (number) $3e7 from [6] (bool~) main::$7 ← (number) 0 != (number) $3e7 +Inversing boolean not [21] (bool~) main::$2 ← (byte) 0 == (byte) main::i#2 from [20] (bool~) main::$8 ← (byte) 0 != (byte) main::i#2 +Inversing boolean not [36] (bool~) main::$4 ← (byte) 0 == (word) main::i1#2 from [35] (bool~) main::$9 ← (byte) 0 != (word) main::i1#2 +Successful SSA optimization Pass2UnaryNotSimplification +Alias (byte) main::idx#0 = (byte) main::idx#7 +Alias (byte) main::idx#13 = (byte) main::idx#9 +Alias (byte) main::idx#10 = (byte) main::idx#14 +Alias (byte) main::i#2 = (byte) main::i#4 +Alias (byte) main::idx#11 = (byte) main::idx#15 +Alias (byte) main::idx#12 = (byte) main::idx#16 +Alias (word) main::i1#2 = (word) main::i1#4 +Successful SSA optimization Pass2AliasElimination +Alias (byte) main::i#2 = (byte) main::i#3 +Alias (word) main::i1#2 = (word) main::i1#3 +Successful SSA optimization Pass2AliasElimination +Simple Condition (bool~) main::$0 [4] if((number) 0==(number) 0) goto main::@1 +Simple Condition (bool~) main::$1 [8] if((number) 0==(number) $3e7) goto main::@2 +Simple Condition (bool~) main::$2 [22] if((byte) 0==(byte) main::i#2) goto main::@6 +Simple Condition (bool~) main::$3 [26] if((byte) main::i#1!=rangelast(0,2)) goto main::@5 +Simple Condition (bool~) main::$4 [37] if((byte) 0==(word) main::i1#2) goto main::@10 +Simple Condition (bool~) main::$5 [41] if((word) main::i1#1!=rangelast(0,2)) goto main::@9 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant (const byte*) SCREEN#0 = (byte*) 1024 +Constant (const byte) main::idx#0 = 0 +Constant (const byte) main::i#0 = 0 +Constant (const word) main::i1#0 = 0 +Successful SSA optimization Pass2ConstantIdentification +if() condition always true - replacing block destination [4] if((number) 0==(number) 0) goto main::@1 +Removing PHI-reference to removed block (main::@1) in block main::@2 +if() condition always false - eliminating [8] if((number) 0==(number) $3e7) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Resolved ranged next value [24] main::i#1 ← ++ main::i#2 to ++ +Resolved ranged comparison value [26] if(main::i#1!=rangelast(0,2)) goto main::@5 to (number) 3 +Resolved ranged next value [39] main::i1#1 ← ++ main::i1#2 to ++ +Resolved ranged comparison value [41] if(main::i1#1!=rangelast(0,2)) goto main::@9 to (number) 3 +Simplifying expression containing zero SCREEN#0 in [10] *((const byte*) SCREEN#0 + (const byte) main::idx#0) ← (byte) '0' +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating variable (byte) main::idx#1 from unused block main::@3 +Removing PHI-reference to removed block (main::@3) in block main::@1 +Removing unused block main::@3 +Successful SSA optimization Pass2EliminateUnusedBlocks +Adding number conversion cast (unumber) 3 in if((byte) main::i#1!=(number) 3) goto main::@5 +Adding number conversion cast (unumber) 3 in if((word) main::i1#1!=(number) 3) goto main::@9 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 3 +Simplifying constant integer cast 3 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 3 +Finalized unsigned number type (byte) 3 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) main::idx#3 = (byte) main::idx#8 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) main::idx#13 (const byte) main::idx#0 +Successful SSA optimization Pass2IdenticalPhiElimination +Constant right-side identified [5] (byte) main::idx#3 ← ++ (const byte) main::idx#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) main::idx#3 = ++main::idx#0 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN#0 in [4] *((const byte*) SCREEN#0 + (const byte) main::idx#0) ← (byte) '+' +Successful SSA optimization PassNSimplifyExpressionWithZero +Constant right-side identified [1] (byte) main::idx#2 ← ++ (const byte) main::idx#3 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) main::idx#2 = ++main::idx#3 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with var siblings (const byte) main::idx#0 +Inlining constant with var siblings (const byte) main::i#0 +Inlining constant with var siblings (const word) main::i1#0 +Inlining constant with var siblings (const byte) main::idx#3 +Inlining constant with var siblings (const byte) main::idx#2 +Constant inlined main::i#0 = (byte) 0 +Constant inlined main::i1#0 = (word) 0 +Constant inlined main::idx#0 = (byte) 0 +Constant inlined main::idx#2 = ++++(byte) 0 +Constant inlined main::idx#3 = ++(byte) 0 +Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN#0+++0) +Successful SSA optimization Pass2ConstantAdditionElimination +Simplifying constant integer increment ++0 +Simplifying constant integer increment ++0 +Successful SSA optimization Pass2ConstantSimplification +Simplifying constant integer increment ++1 +Successful SSA optimization Pass2ConstantSimplification +Added new block during phi lifting main::@13(between main::@6 and main::@5) +Added new block during phi lifting main::@14(between main::@5 and main::@6) +Added new block during phi lifting main::@15(between main::@10 and main::@9) +Added new block during phi lifting main::@16(between main::@9 and main::@10) +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 +CALL GRAPH +Calls in [] to main:2 + +Created 6 initial phi equivalence classes +Coalesced [13] main::idx#20 ← main::idx#4 +Coalesced [19] main::idx#22 ← main::idx#5 +Coalesced [24] main::idx#23 ← main::idx#6 +Coalesced [29] main::i1#5 ← main::i1#1 +Coalesced [30] main::idx#21 ← main::idx#17 +Coalesced (already) [31] main::idx#24 ← main::idx#12 +Coalesced [32] main::i#5 ← main::i#1 +Coalesced [33] main::idx#18 ← main::idx#11 +Coalesced (already) [34] main::idx#19 ← main::idx#10 +Coalesced down to 4 phi equivalence classes +Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1 +Culled Empty Block (label) main::@15 +Culled Empty Block (label) main::@16 +Culled Empty Block (label) main::@13 +Culled Empty Block (label) main::@14 +Renumbering block main::@2 to main::@1 +Renumbering block main::@4 to main::@2 +Renumbering block main::@5 to main::@3 +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 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@2 +main::@2: scope:[main] from main + [5] *((const byte*) SCREEN#0) ← (byte) '+' + to:main::@1 +main::@1: scope:[main] from main::@2 + [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' + to:main::@3 +main::@3: scope:[main] from main::@1 main::@4 + [7] (byte) main::idx#10 ← phi( main::@1/(byte) 2 main::@4/(byte) main::idx#11 ) + [7] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@4/(byte) main::i#1 ) + [8] if((byte) 0==(byte) main::i#2) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@3 + [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' + [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 + to:main::@4 +main::@4: scope:[main] from main::@3 main::@5 + [11] (byte) main::idx#11 ← phi( main::@3/(byte) main::idx#10 main::@5/(byte) main::idx#4 ) + [12] (byte) main::i#1 ← ++ (byte) main::i#2 + [13] if((byte) main::i#1!=(byte) 3) goto main::@3 + to:main::@6 +main::@6: scope:[main] from main::@4 + [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' + [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 + to:main::@7 +main::@7: scope:[main] from main::@6 main::@8 + [16] (byte) main::idx#12 ← phi( main::@8/(byte) main::idx#17 main::@6/(byte) main::idx#5 ) + [16] (word) main::i1#2 ← phi( main::@8/(word) main::i1#1 main::@6/(word) 0 ) + [17] if((byte) 0==(word) main::i1#2) goto main::@8 + to:main::@9 +main::@9: scope:[main] from main::@7 + [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' + [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 + to:main::@8 +main::@8: scope:[main] from main::@7 main::@9 + [20] (byte) main::idx#17 ← phi( main::@9/(byte) main::idx#6 main::@7/(byte) main::idx#12 ) + [21] (word) main::i1#1 ← ++ (word) main::i1#2 + [22] if((word) main::i1#1!=(byte) 3) goto main::@7 + to:main::@return +main::@return: scope:[main] from main::@8 + [23] return + to:@return + + +VARIABLE REGISTER WEIGHTS +(byte*) SCREEN +(void()) main() +(byte) main::i +(byte) main::i#1 16.5 +(byte) main::i#2 6.6000000000000005 +(word) main::i1 +(word) main::i1#1 16.5 +(word) main::i1#2 6.6000000000000005 +(byte) main::idx +(byte) main::idx#10 14.666666666666666 +(byte) main::idx#11 9.25 +(byte) main::idx#12 15.333333333333332 +(byte) main::idx#17 11.0 +(byte) main::idx#4 22.0 +(byte) main::idx#5 4.0 +(byte) main::idx#6 22.0 + +Initial phi equivalence classes +[ main::i#2 main::i#1 ] +[ main::idx#10 main::idx#11 main::idx#4 ] +[ main::i1#2 main::i1#1 ] +[ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] +Complete equivalence classes +[ main::i#2 main::i#1 ] +[ main::idx#10 main::idx#11 main::idx#4 ] +[ main::i1#2 main::i1#1 ] +[ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] +Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::idx#10 main::idx#11 main::idx#4 ] +Allocated zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] +Allocated zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] + +INITIAL ASM +//SEG0 File Comments +// Tests using integer conditions in if() +// This should produce '+ ++ ++' at the top of the screen +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label SCREEN = $400 +//SEG3 @begin +bbegin: +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG5 @1 +b1: +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG9 @end +bend: +//SEG10 main +main: { + .label i = 2 + .label idx = 3 + .label idx_5 = 6 + .label i1 = 4 + .label idx_6 = 6 + .label idx_12 = 6 + .label idx_17 = 6 + jmp b2 + //SEG11 main::@2 + b2: + //SEG12 [5] *((const byte*) SCREEN#0) ← (byte) '+' -- _deref_pbuc1=vbuc2 + lda #'+' + sta SCREEN + jmp b1 + //SEG13 main::@1 + b1: + //SEG14 [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' -- _deref_pbuc1=vbuc2 + lda #' ' + sta SCREEN+1 + //SEG15 [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + b3_from_b1: + //SEG16 [7] phi (byte) main::idx#10 = (byte) 2 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 + lda #2 + sta idx + //SEG17 [7] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#1] -- vbuz1=vbuc1 + lda #0 + sta i + jmp b3 + // loop byte + //SEG18 [7] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + b3_from_b4: + //SEG19 [7] phi (byte) main::idx#10 = (byte) main::idx#11 [phi:main::@4->main::@3#0] -- register_copy + //SEG20 [7] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#1] -- register_copy + jmp b3 + //SEG21 main::@3 + b3: + //SEG22 [8] if((byte) 0==(byte) main::i#2) goto main::@4 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp i + beq b4_from_b3 + jmp b5 + //SEG23 main::@5 + b5: + //SEG24 [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #'+' + ldy idx + sta SCREEN,y + //SEG25 [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 -- vbuz1=_inc_vbuz1 + inc idx + //SEG26 [11] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] + b4_from_b3: + b4_from_b5: + //SEG27 [11] phi (byte) main::idx#11 = (byte) main::idx#10 [phi:main::@3/main::@5->main::@4#0] -- register_copy + jmp b4 + //SEG28 main::@4 + b4: + //SEG29 [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + inc i + //SEG30 [13] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 + lda #3 + cmp i + bne b3_from_b4 + jmp b6 + //SEG31 main::@6 + b6: + //SEG32 [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #' ' + ldy idx + sta SCREEN,y + //SEG33 [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 -- vbuz1=_inc_vbuz2 + ldy idx + iny + sty idx_5 + //SEG34 [16] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + b7_from_b6: + //SEG35 [16] phi (byte) main::idx#12 = (byte) main::idx#5 [phi:main::@6->main::@7#0] -- register_copy + //SEG36 [16] phi (word) main::i1#2 = (word) 0 [phi:main::@6->main::@7#1] -- vwuz1=vwuc1 + lda #<0 + sta i1 + lda #>0 + sta i1+1 + jmp b7 + // loop word + //SEG37 [16] phi from main::@8 to main::@7 [phi:main::@8->main::@7] + b7_from_b8: + //SEG38 [16] phi (byte) main::idx#12 = (byte) main::idx#17 [phi:main::@8->main::@7#0] -- register_copy + //SEG39 [16] phi (word) main::i1#2 = (word) main::i1#1 [phi:main::@8->main::@7#1] -- register_copy + jmp b7 + //SEG40 main::@7 + b7: + //SEG41 [17] if((byte) 0==(word) main::i1#2) goto main::@8 -- vwuc1_eq_vwuz1_then_la1 + lda i1 + cmp #<0 + bne !+ + lda i1+1 + cmp #>0 + beq b8_from_b7 + !: + jmp b9 + //SEG42 main::@9 + b9: + //SEG43 [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #'+' + ldy idx_12 + sta SCREEN,y + //SEG44 [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 -- vbuz1=_inc_vbuz1 + inc idx_6 + //SEG45 [20] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] + b8_from_b7: + b8_from_b9: + //SEG46 [20] phi (byte) main::idx#17 = (byte) main::idx#12 [phi:main::@7/main::@9->main::@8#0] -- register_copy + jmp b8 + //SEG47 main::@8 + b8: + //SEG48 [21] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 + inc i1 + bne !+ + inc i1+1 + !: + //SEG49 [22] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 + lda i1+1 + cmp #>3 + bne b7_from_b8 + lda i1 + cmp #<3 + bne b7_from_b8 + jmp breturn + //SEG50 main::@return + breturn: + //SEG51 [23] return + rts +} + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [5] *((const byte*) SCREEN#0) ← (byte) '+' [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' [ main::i#2 main::idx#10 ] ( main:2 [ main::i#2 main::idx#10 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::idx#10 main::idx#11 main::idx#4 ] +Statement [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' [ main::idx#11 ] ( main:2 [ main::idx#11 ] ) always clobbers reg byte a +Statement [17] if((byte) 0==(word) main::i1#2) goto main::@8 [ main::i1#2 main::idx#12 ] ( main:2 [ main::i1#2 main::idx#12 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] +Statement [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' [ main::i1#2 main::idx#12 ] ( main:2 [ main::i1#2 main::idx#12 ] ) always clobbers reg byte a +Statement [22] if((word) main::i1#1!=(byte) 3) goto main::@7 [ main::i1#1 main::idx#17 ] ( main:2 [ main::i1#1 main::idx#17 ] ) always clobbers reg byte a +Statement [5] *((const byte*) SCREEN#0) ← (byte) '+' [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' [ main::i#2 main::idx#10 ] ( main:2 [ main::i#2 main::idx#10 ] ) always clobbers reg byte a +Statement [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' [ main::idx#11 ] ( main:2 [ main::idx#11 ] ) always clobbers reg byte a +Statement [17] if((byte) 0==(word) main::i1#2) goto main::@8 [ main::i1#2 main::idx#12 ] ( main:2 [ main::i1#2 main::idx#12 ] ) always clobbers reg byte a +Statement [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' [ main::i1#2 main::idx#12 ] ( main:2 [ main::i1#2 main::idx#12 ] ) always clobbers reg byte a +Statement [22] if((word) main::i1#1!=(byte) 3) goto main::@7 [ main::i1#1 main::idx#17 ] ( main:2 [ main::i1#1 main::idx#17 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::idx#10 main::idx#11 main::idx#4 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] : zp ZP_WORD:4 , +Potential registers zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [main] 52.33: zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] 45.92: zp ZP_BYTE:3 [ main::idx#10 main::idx#11 main::idx#4 ] 23.1: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 23.1: zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] +Uplift Scope [] + +Uplifting [main] best 1227 combination reg byte y [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] reg byte y [ main::idx#10 main::idx#11 main::idx#4 ] reg byte x [ main::i#2 main::i#1 ] zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] +Uplifting [] best 1227 combination +Allocated (was zp ZP_WORD:4) zp ZP_WORD:2 [ main::i1#2 main::i1#1 ] + +ASSEMBLER BEFORE OPTIMIZATION +//SEG0 File Comments +// Tests using integer conditions in if() +// This should produce '+ ++ ++' at the top of the screen +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label SCREEN = $400 +//SEG3 @begin +bbegin: +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG5 @1 +b1: +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG9 @end +bend: +//SEG10 main +main: { + .label i1 = 2 + jmp b2 + //SEG11 main::@2 + b2: + //SEG12 [5] *((const byte*) SCREEN#0) ← (byte) '+' -- _deref_pbuc1=vbuc2 + lda #'+' + sta SCREEN + jmp b1 + //SEG13 main::@1 + b1: + //SEG14 [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' -- _deref_pbuc1=vbuc2 + lda #' ' + sta SCREEN+1 + //SEG15 [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + b3_from_b1: + //SEG16 [7] phi (byte) main::idx#10 = (byte) 2 [phi:main::@1->main::@3#0] -- vbuyy=vbuc1 + ldy #2 + //SEG17 [7] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#1] -- vbuxx=vbuc1 + ldx #0 + jmp b3 + // loop byte + //SEG18 [7] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + b3_from_b4: + //SEG19 [7] phi (byte) main::idx#10 = (byte) main::idx#11 [phi:main::@4->main::@3#0] -- register_copy + //SEG20 [7] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#1] -- register_copy + jmp b3 + //SEG21 main::@3 + b3: + //SEG22 [8] if((byte) 0==(byte) main::i#2) goto main::@4 -- vbuc1_eq_vbuxx_then_la1 + cpx #0 + beq b4_from_b3 + jmp b5 + //SEG23 main::@5 + b5: + //SEG24 [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuyy=vbuc2 + lda #'+' + sta SCREEN,y + //SEG25 [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 -- vbuyy=_inc_vbuyy + iny + //SEG26 [11] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] + b4_from_b3: + b4_from_b5: + //SEG27 [11] phi (byte) main::idx#11 = (byte) main::idx#10 [phi:main::@3/main::@5->main::@4#0] -- register_copy + jmp b4 + //SEG28 main::@4 + b4: + //SEG29 [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + inx + //SEG30 [13] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuxx_neq_vbuc1_then_la1 + cpx #3 + bne b3_from_b4 + jmp b6 + //SEG31 main::@6 + b6: + //SEG32 [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 + lda #' ' + sta SCREEN,y + //SEG33 [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 -- vbuyy=_inc_vbuyy + iny + //SEG34 [16] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + b7_from_b6: + //SEG35 [16] phi (byte) main::idx#12 = (byte) main::idx#5 [phi:main::@6->main::@7#0] -- register_copy + //SEG36 [16] phi (word) main::i1#2 = (word) 0 [phi:main::@6->main::@7#1] -- vwuz1=vwuc1 + lda #<0 + sta i1 + lda #>0 + sta i1+1 + jmp b7 + // loop word + //SEG37 [16] phi from main::@8 to main::@7 [phi:main::@8->main::@7] + b7_from_b8: + //SEG38 [16] phi (byte) main::idx#12 = (byte) main::idx#17 [phi:main::@8->main::@7#0] -- register_copy + //SEG39 [16] phi (word) main::i1#2 = (word) main::i1#1 [phi:main::@8->main::@7#1] -- register_copy + jmp b7 + //SEG40 main::@7 + b7: + //SEG41 [17] if((byte) 0==(word) main::i1#2) goto main::@8 -- vwuc1_eq_vwuz1_then_la1 + lda i1 + cmp #<0 + bne !+ + lda i1+1 + cmp #>0 + beq b8_from_b7 + !: + jmp b9 + //SEG42 main::@9 + b9: + //SEG43 [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' -- pbuc1_derefidx_vbuyy=vbuc2 + lda #'+' + sta SCREEN,y + //SEG44 [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 -- vbuyy=_inc_vbuyy + iny + //SEG45 [20] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] + b8_from_b7: + b8_from_b9: + //SEG46 [20] phi (byte) main::idx#17 = (byte) main::idx#12 [phi:main::@7/main::@9->main::@8#0] -- register_copy + jmp b8 + //SEG47 main::@8 + b8: + //SEG48 [21] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 + inc i1 + bne !+ + inc i1+1 + !: + //SEG49 [22] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 + lda i1+1 + cmp #>3 + bne b7_from_b8 + lda i1 + cmp #<3 + bne b7_from_b8 + jmp breturn + //SEG50 main::@return + breturn: + //SEG51 [23] return + rts +} + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b1 +Removing instruction jmp bend +Removing instruction jmp b2 +Removing instruction jmp b1 +Removing instruction jmp b3 +Removing instruction jmp b5 +Removing instruction jmp b4 +Removing instruction jmp b6 +Removing instruction jmp b7 +Removing instruction jmp b9 +Removing instruction jmp b8 +Removing instruction jmp breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #>0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b4_from_b3 with b4 +Replacing label b3_from_b4 with b3 +Replacing label b8_from_b7 with b8 +Replacing label b7_from_b8 with b7 +Replacing label b7_from_b8 with b7 +Removing instruction b1_from_bbegin: +Removing instruction b1: +Removing instruction main_from_b1: +Removing instruction bend_from_b1: +Removing instruction b3_from_b4: +Removing instruction b4_from_b3: +Removing instruction b4_from_b5: +Removing instruction b7_from_b8: +Removing instruction b8_from_b7: +Removing instruction b8_from_b9: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction bend: +Removing instruction b2: +Removing instruction b1: +Removing instruction b3_from_b1: +Removing instruction b5: +Removing instruction b6: +Removing instruction b7_from_b6: +Removing instruction b9: +Removing instruction breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Updating BasicUpstart to call main directly +Removing instruction jsr main +Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b3 +Removing instruction jmp b7 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction bbegin: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(label) @1 +(label) @begin +(label) @end +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = (byte*) 1024 +(void()) main() +(label) main::@1 +(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 +(byte) main::i +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#2 reg byte x 6.6000000000000005 +(word) main::i1 +(word) main::i1#1 i1 zp ZP_WORD:2 16.5 +(word) main::i1#2 i1 zp ZP_WORD:2 6.6000000000000005 +(byte) main::idx +(byte) main::idx#10 reg byte y 14.666666666666666 +(byte) main::idx#11 reg byte y 9.25 +(byte) main::idx#12 reg byte y 15.333333333333332 +(byte) main::idx#17 reg byte y 11.0 +(byte) main::idx#4 reg byte y 22.0 +(byte) main::idx#5 reg byte y 4.0 +(byte) main::idx#6 reg byte y 22.0 + +reg byte x [ main::i#2 main::i#1 ] +reg byte y [ main::idx#10 main::idx#11 main::idx#4 ] +zp ZP_WORD:2 [ main::i1#2 main::i1#1 ] +reg byte y [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] + + +FINAL ASSEMBLER +Score: 862 + +//SEG0 File Comments +// Tests using integer conditions in if() +// This should produce '+ ++ ++' at the top of the screen +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label SCREEN = $400 +//SEG3 @begin +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +//SEG5 @1 +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +//SEG9 @end +//SEG10 main +main: { + .label i1 = 2 + //SEG11 main::@2 + //SEG12 [5] *((const byte*) SCREEN#0) ← (byte) '+' -- _deref_pbuc1=vbuc2 + lda #'+' + sta SCREEN + //SEG13 main::@1 + //SEG14 [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' -- _deref_pbuc1=vbuc2 + lda #' ' + sta SCREEN+1 + //SEG15 [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + //SEG16 [7] phi (byte) main::idx#10 = (byte) 2 [phi:main::@1->main::@3#0] -- vbuyy=vbuc1 + ldy #2 + //SEG17 [7] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#1] -- vbuxx=vbuc1 + ldx #0 + // loop byte + //SEG18 [7] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + //SEG19 [7] phi (byte) main::idx#10 = (byte) main::idx#11 [phi:main::@4->main::@3#0] -- register_copy + //SEG20 [7] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#1] -- register_copy + //SEG21 main::@3 + b3: + //SEG22 [8] if((byte) 0==(byte) main::i#2) goto main::@4 -- vbuc1_eq_vbuxx_then_la1 + cpx #0 + beq b4 + //SEG23 main::@5 + //SEG24 [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuyy=vbuc2 + lda #'+' + sta SCREEN,y + //SEG25 [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 -- vbuyy=_inc_vbuyy + iny + //SEG26 [11] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] + //SEG27 [11] phi (byte) main::idx#11 = (byte) main::idx#10 [phi:main::@3/main::@5->main::@4#0] -- register_copy + //SEG28 main::@4 + b4: + //SEG29 [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + inx + //SEG30 [13] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuxx_neq_vbuc1_then_la1 + cpx #3 + bne b3 + //SEG31 main::@6 + //SEG32 [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 + lda #' ' + sta SCREEN,y + //SEG33 [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 -- vbuyy=_inc_vbuyy + iny + //SEG34 [16] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + //SEG35 [16] phi (byte) main::idx#12 = (byte) main::idx#5 [phi:main::@6->main::@7#0] -- register_copy + //SEG36 [16] phi (word) main::i1#2 = (word) 0 [phi:main::@6->main::@7#1] -- vwuz1=vwuc1 + lda #<0 + sta i1 + sta i1+1 + // loop word + //SEG37 [16] phi from main::@8 to main::@7 [phi:main::@8->main::@7] + //SEG38 [16] phi (byte) main::idx#12 = (byte) main::idx#17 [phi:main::@8->main::@7#0] -- register_copy + //SEG39 [16] phi (word) main::i1#2 = (word) main::i1#1 [phi:main::@8->main::@7#1] -- register_copy + //SEG40 main::@7 + b7: + //SEG41 [17] if((byte) 0==(word) main::i1#2) goto main::@8 -- vwuc1_eq_vwuz1_then_la1 + lda i1 + cmp #<0 + bne !+ + lda i1+1 + cmp #>0 + beq b8 + !: + //SEG42 main::@9 + //SEG43 [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '+' -- pbuc1_derefidx_vbuyy=vbuc2 + lda #'+' + sta SCREEN,y + //SEG44 [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 -- vbuyy=_inc_vbuyy + iny + //SEG45 [20] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] + //SEG46 [20] phi (byte) main::idx#17 = (byte) main::idx#12 [phi:main::@7/main::@9->main::@8#0] -- register_copy + //SEG47 main::@8 + b8: + //SEG48 [21] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 + inc i1 + bne !+ + inc i1+1 + !: + //SEG49 [22] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 + lda i1+1 + cmp #>3 + bne b7 + lda i1 + cmp #<3 + bne b7 + //SEG50 main::@return + //SEG51 [23] return + rts +} + diff --git a/src/test/ref/condition-integer-0.sym b/src/test/ref/condition-integer-0.sym new file mode 100644 index 000000000..1daabbadc --- /dev/null +++ b/src/test/ref/condition-integer-0.sym @@ -0,0 +1 @@ +program \ No newline at end of file diff --git a/src/test/ref/condition-integer-1.asm b/src/test/ref/condition-integer-1.asm new file mode 100644 index 000000000..7e6ce3b29 --- /dev/null +++ b/src/test/ref/condition-integer-1.asm @@ -0,0 +1,55 @@ +// Tests using integer conditions in if() +// This should produce '0 0 0' at the top of the screen +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label SCREEN = $400 +main: { + .label i1 = 2 + lda #'0' + sta SCREEN + lda #' ' + sta SCREEN+1 + ldy #2 + ldx #0 + // loop byte + b3: + cpx #0 + bne b4 + lda #'0' + sta SCREEN,y + iny + b4: + inx + cpx #3 + bne b3 + lda #' ' + sta SCREEN,y + iny + lda #<0 + sta i1 + sta i1+1 + // loop word + b7: + lda i1+1 + cmp #>0 + bne b8 + lda i1 + cmp #<0 + bne b8 + lda #'0' + sta SCREEN,y + iny + b8: + inc i1 + bne !+ + inc i1+1 + !: + lda i1+1 + cmp #>3 + bne b7 + lda i1 + cmp #<3 + bne b7 + rts +} diff --git a/src/test/ref/condition-integer-1.cfg b/src/test/ref/condition-integer-1.cfg new file mode 100644 index 000000000..c5cd311fd --- /dev/null +++ b/src/test/ref/condition-integer-1.cfg @@ -0,0 +1,53 @@ +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@2 +main::@2: scope:[main] from main + [5] *((const byte*) SCREEN#0) ← (byte) '0' + to:main::@1 +main::@1: scope:[main] from main::@2 + [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' + to:main::@3 +main::@3: scope:[main] from main::@1 main::@4 + [7] (byte) main::idx#10 ← phi( main::@1/(byte) 2 main::@4/(byte) main::idx#11 ) + [7] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@4/(byte) main::i#1 ) + [8] if((byte) 0!=(byte) main::i#2) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@3 + [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '0' + [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 + to:main::@4 +main::@4: scope:[main] from main::@3 main::@5 + [11] (byte) main::idx#11 ← phi( main::@3/(byte) main::idx#10 main::@5/(byte) main::idx#4 ) + [12] (byte) main::i#1 ← ++ (byte) main::i#2 + [13] if((byte) main::i#1!=(byte) 3) goto main::@3 + to:main::@6 +main::@6: scope:[main] from main::@4 + [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' + [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 + to:main::@7 +main::@7: scope:[main] from main::@6 main::@8 + [16] (byte) main::idx#12 ← phi( main::@8/(byte) main::idx#17 main::@6/(byte) main::idx#5 ) + [16] (word) main::i1#2 ← phi( main::@8/(word) main::i1#1 main::@6/(word) 0 ) + [17] if((byte) 0!=(word) main::i1#2) goto main::@8 + to:main::@9 +main::@9: scope:[main] from main::@7 + [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '0' + [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 + to:main::@8 +main::@8: scope:[main] from main::@7 main::@9 + [20] (byte) main::idx#17 ← phi( main::@9/(byte) main::idx#6 main::@7/(byte) main::idx#12 ) + [21] (word) main::i1#1 ← ++ (word) main::i1#2 + [22] if((word) main::i1#1!=(byte) 3) goto main::@7 + to:main::@return +main::@return: scope:[main] from main::@8 + [23] return + to:@return diff --git a/src/test/ref/condition-integer-1.log b/src/test/ref/condition-integer-1.log new file mode 100644 index 000000000..aa91644e5 --- /dev/null +++ b/src/test/ref/condition-integer-1.log @@ -0,0 +1,934 @@ +Warning! Adding boolean cast to non-boolean sub-expression (number) 0 +Warning! Adding boolean cast to non-boolean sub-expression (number) $3e7 +Warning! Adding boolean cast to non-boolean sub-expression (byte) main::i +Warning! Adding boolean cast to non-boolean sub-expression (word) main::i1 +Adding pointer type conversion cast (byte*) SCREEN in (byte*) SCREEN ← (number) $400 +Culled Empty Block (label) main::@12 + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + (byte*) SCREEN#0 ← ((byte*)) (number) $400 + to:@1 +main: scope:[main] from @1 + (byte) main::idx#0 ← (number) 0 + (bool~) main::$10 ← (number) 0 != (number) 0 + (bool~) main::$0 ← ! (bool~) main::$10 + (bool~) main::$1 ← ! (bool~) main::$0 + if((bool~) main::$1) goto main::@1 + to:main::@3 +main::@1: scope:[main] from main main::@3 + (byte) main::idx#13 ← phi( main/(byte) main::idx#0 main::@3/(byte) main::idx#1 ) + (bool~) main::$11 ← (number) 0 != (number) $3e7 + (bool~) main::$2 ← ! (bool~) main::$11 + (bool~) main::$3 ← ! (bool~) main::$2 + if((bool~) main::$3) goto main::@2 + to:main::@4 +main::@3: scope:[main] from main + (byte) main::idx#7 ← phi( main/(byte) main::idx#0 ) + *((byte*) SCREEN#0 + (byte) main::idx#7) ← (byte) '0' + (byte) main::idx#1 ← ++ (byte) main::idx#7 + to:main::@1 +main::@2: scope:[main] from main::@1 main::@4 + (byte) main::idx#8 ← phi( main::@1/(byte) main::idx#13 main::@4/(byte) main::idx#3 ) + *((byte*) SCREEN#0 + (byte) main::idx#8) ← (byte) ' ' + (byte) main::idx#2 ← ++ (byte) main::idx#8 + (byte) main::i#0 ← (byte) 0 + to:main::@5 +main::@4: scope:[main] from main::@1 + (byte) main::idx#9 ← phi( main::@1/(byte) main::idx#13 ) + *((byte*) SCREEN#0 + (byte) main::idx#9) ← (byte) '+' + (byte) main::idx#3 ← ++ (byte) main::idx#9 + to:main::@2 +main::@5: scope:[main] from main::@2 main::@6 + (byte) main::idx#14 ← phi( main::@2/(byte) main::idx#2 main::@6/(byte) main::idx#15 ) + (byte) main::i#2 ← phi( main::@2/(byte) main::i#0 main::@6/(byte) main::i#1 ) + (bool~) main::$12 ← (number) 0 != (byte) main::i#2 + (bool~) main::$4 ← ! (bool~) main::$12 + (bool~) main::$5 ← ! (bool~) main::$4 + if((bool~) main::$5) goto main::@6 + to:main::@7 +main::@6: scope:[main] from main::@5 main::@7 + (byte) main::idx#15 ← phi( main::@5/(byte) main::idx#14 main::@7/(byte) main::idx#4 ) + (byte) main::i#3 ← phi( main::@5/(byte) main::i#2 main::@7/(byte) main::i#4 ) + (byte) main::i#1 ← (byte) main::i#3 + rangenext(0,2) + (bool~) main::$6 ← (byte) main::i#1 != rangelast(0,2) + if((bool~) main::$6) goto main::@5 + to:main::@8 +main::@7: scope:[main] from main::@5 + (byte) main::i#4 ← phi( main::@5/(byte) main::i#2 ) + (byte) main::idx#10 ← phi( main::@5/(byte) main::idx#14 ) + *((byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '0' + (byte) main::idx#4 ← ++ (byte) main::idx#10 + to:main::@6 +main::@8: scope:[main] from main::@6 + (byte) main::idx#11 ← phi( main::@6/(byte) main::idx#15 ) + *((byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' + (byte) main::idx#5 ← ++ (byte) main::idx#11 + (word) main::i1#0 ← (word) 0 + to:main::@9 +main::@9: scope:[main] from main::@10 main::@8 + (byte) main::idx#16 ← phi( main::@10/(byte) main::idx#17 main::@8/(byte) main::idx#5 ) + (word) main::i1#2 ← phi( main::@10/(word) main::i1#1 main::@8/(word) main::i1#0 ) + (bool~) main::$13 ← (number) 0 != (word) main::i1#2 + (bool~) main::$7 ← ! (bool~) main::$13 + (bool~) main::$8 ← ! (bool~) main::$7 + if((bool~) main::$8) goto main::@10 + to:main::@11 +main::@10: scope:[main] from main::@11 main::@9 + (byte) main::idx#17 ← phi( main::@11/(byte) main::idx#6 main::@9/(byte) main::idx#16 ) + (word) main::i1#3 ← phi( main::@11/(word) main::i1#4 main::@9/(word) main::i1#2 ) + (word) main::i1#1 ← (word) main::i1#3 + rangenext(0,2) + (bool~) main::$9 ← (word) main::i1#1 != rangelast(0,2) + if((bool~) main::$9) goto main::@9 + to:main::@return +main::@11: scope:[main] from main::@9 + (word) main::i1#4 ← phi( main::@9/(word) main::i1#2 ) + (byte) main::idx#12 ← phi( main::@9/(byte) main::idx#16 ) + *((byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '0' + (byte) main::idx#6 ← ++ (byte) main::idx#12 + to:main::@10 +main::@return: scope:[main] from main::@10 + return + to:@return +@1: scope:[] from @begin + call main + to:@2 +@2: scope:[] from @1 + to:@end +@end: scope:[] from @2 + +SYMBOL TABLE SSA +(label) @1 +(label) @2 +(label) @begin +(label) @end +(byte*) SCREEN +(byte*) SCREEN#0 +(void()) main() +(bool~) main::$0 +(bool~) main::$1 +(bool~) main::$10 +(bool~) main::$11 +(bool~) main::$12 +(bool~) main::$13 +(bool~) main::$2 +(bool~) main::$3 +(bool~) main::$4 +(bool~) main::$5 +(bool~) main::$6 +(bool~) main::$7 +(bool~) main::$8 +(bool~) main::$9 +(label) main::@1 +(label) main::@10 +(label) main::@11 +(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 +(byte) main::i +(byte) main::i#0 +(byte) main::i#1 +(byte) main::i#2 +(byte) main::i#3 +(byte) main::i#4 +(word) main::i1 +(word) main::i1#0 +(word) main::i1#1 +(word) main::i1#2 +(word) main::i1#3 +(word) main::i1#4 +(byte) main::idx +(byte) main::idx#0 +(byte) main::idx#1 +(byte) main::idx#10 +(byte) main::idx#11 +(byte) main::idx#12 +(byte) main::idx#13 +(byte) main::idx#14 +(byte) main::idx#15 +(byte) main::idx#16 +(byte) main::idx#17 +(byte) main::idx#2 +(byte) main::idx#3 +(byte) main::idx#4 +(byte) main::idx#5 +(byte) main::idx#6 +(byte) main::idx#7 +(byte) main::idx#8 +(byte) main::idx#9 + +Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 +Adding number conversion cast (unumber) 0 in (bool~) main::$12 ← (number) 0 != (byte) main::i#2 +Adding number conversion cast (unumber) 0 in (bool~) main::$13 ← (number) 0 != (word) main::i1#2 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 +Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inversing boolean not [3] (bool~) main::$0 ← (number) 0 == (number) 0 from [2] (bool~) main::$10 ← (number) 0 != (number) 0 +Inversing boolean not [4] (bool~) main::$1 ← (number) 0 != (number) 0 from [3] (bool~) main::$0 ← (number) 0 == (number) 0 +Inversing boolean not [8] (bool~) main::$2 ← (number) 0 == (number) $3e7 from [7] (bool~) main::$11 ← (number) 0 != (number) $3e7 +Inversing boolean not [9] (bool~) main::$3 ← (number) 0 != (number) $3e7 from [8] (bool~) main::$2 ← (number) 0 == (number) $3e7 +Inversing boolean not [23] (bool~) main::$4 ← (byte) 0 == (byte) main::i#2 from [22] (bool~) main::$12 ← (byte) 0 != (byte) main::i#2 +Inversing boolean not [24] (bool~) main::$5 ← (byte) 0 != (byte) main::i#2 from [23] (bool~) main::$4 ← (byte) 0 == (byte) main::i#2 +Inversing boolean not [39] (bool~) main::$7 ← (byte) 0 == (word) main::i1#2 from [38] (bool~) main::$13 ← (byte) 0 != (word) main::i1#2 +Inversing boolean not [40] (bool~) main::$8 ← (byte) 0 != (word) main::i1#2 from [39] (bool~) main::$7 ← (byte) 0 == (word) main::i1#2 +Successful SSA optimization Pass2UnaryNotSimplification +Alias (byte) main::idx#0 = (byte) main::idx#7 +Alias (byte) main::idx#13 = (byte) main::idx#9 +Alias (byte) main::idx#10 = (byte) main::idx#14 +Alias (byte) main::i#2 = (byte) main::i#4 +Alias (byte) main::idx#11 = (byte) main::idx#15 +Alias (byte) main::idx#12 = (byte) main::idx#16 +Alias (word) main::i1#2 = (word) main::i1#4 +Successful SSA optimization Pass2AliasElimination +Alias (byte) main::i#2 = (byte) main::i#3 +Alias (word) main::i1#2 = (word) main::i1#3 +Successful SSA optimization Pass2AliasElimination +Simple Condition (bool~) main::$1 [5] if((number) 0!=(number) 0) goto main::@1 +Simple Condition (bool~) main::$3 [10] if((number) 0!=(number) $3e7) goto main::@2 +Simple Condition (bool~) main::$5 [25] if((byte) 0!=(byte) main::i#2) goto main::@6 +Simple Condition (bool~) main::$6 [29] if((byte) main::i#1!=rangelast(0,2)) goto main::@5 +Simple Condition (bool~) main::$8 [41] if((byte) 0!=(word) main::i1#2) goto main::@10 +Simple Condition (bool~) main::$9 [45] if((word) main::i1#1!=rangelast(0,2)) goto main::@9 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant (const byte*) SCREEN#0 = (byte*) 1024 +Constant (const byte) main::idx#0 = 0 +Constant (const byte) main::i#0 = 0 +Constant (const word) main::i1#0 = 0 +Successful SSA optimization Pass2ConstantIdentification +Removing PHI-reference to removed block (main) in block main::@1 +if() condition always false - eliminating [5] if((number) 0!=(number) 0) goto main::@1 +if() condition always true - replacing block destination [10] if((number) 0!=(number) $3e7) goto main::@2 +Successful SSA optimization Pass2ConstantIfs +Resolved ranged next value [27] main::i#1 ← ++ main::i#2 to ++ +Resolved ranged comparison value [29] if(main::i#1!=rangelast(0,2)) goto main::@5 to (number) 3 +Resolved ranged next value [43] main::i1#1 ← ++ main::i1#2 to ++ +Resolved ranged comparison value [45] if(main::i1#1!=rangelast(0,2)) goto main::@9 to (number) 3 +Simplifying expression containing zero SCREEN#0 in [12] *((const byte*) SCREEN#0 + (const byte) main::idx#0) ← (byte) '0' +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating variable (byte) main::idx#3 from unused block main::@4 +Removing PHI-reference to removed block (main::@4) in block main::@2 +Removing unused block main::@4 +Successful SSA optimization Pass2EliminateUnusedBlocks +Adding number conversion cast (unumber) 3 in if((byte) main::i#1!=(number) 3) goto main::@5 +Adding number conversion cast (unumber) 3 in if((word) main::i1#1!=(number) 3) goto main::@9 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 3 +Simplifying constant integer cast 3 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 3 +Finalized unsigned number type (byte) 3 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) main::idx#1 = (byte) main::idx#13 (byte) main::idx#8 +Successful SSA optimization Pass2AliasElimination +Constant right-side identified [2] (byte) main::idx#1 ← ++ (const byte) main::idx#0 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) main::idx#1 = ++main::idx#0 +Successful SSA optimization Pass2ConstantIdentification +Constant right-side identified [2] (byte) main::idx#2 ← ++ (const byte) main::idx#1 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte) main::idx#2 = ++main::idx#1 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with var siblings (const byte) main::idx#0 +Inlining constant with var siblings (const byte) main::i#0 +Inlining constant with var siblings (const word) main::i1#0 +Inlining constant with var siblings (const byte) main::idx#1 +Inlining constant with var siblings (const byte) main::idx#2 +Constant inlined main::i#0 = (byte) 0 +Constant inlined main::i1#0 = (word) 0 +Constant inlined main::idx#0 = (byte) 0 +Constant inlined main::idx#1 = ++(byte) 0 +Constant inlined main::idx#2 = ++++(byte) 0 +Successful SSA optimization Pass2ConstantInlining +Consolidated array index constant in *(SCREEN#0+++0) +Successful SSA optimization Pass2ConstantAdditionElimination +Simplifying constant integer increment ++0 +Simplifying constant integer increment ++0 +Successful SSA optimization Pass2ConstantSimplification +Simplifying constant integer increment ++1 +Successful SSA optimization Pass2ConstantSimplification +Added new block during phi lifting main::@13(between main::@6 and main::@5) +Added new block during phi lifting main::@14(between main::@5 and main::@6) +Added new block during phi lifting main::@15(between main::@10 and main::@9) +Added new block during phi lifting main::@16(between main::@9 and main::@10) +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 +CALL GRAPH +Calls in [] to main:2 + +Created 6 initial phi equivalence classes +Coalesced [13] main::idx#20 ← main::idx#4 +Coalesced [19] main::idx#22 ← main::idx#5 +Coalesced [24] main::idx#23 ← main::idx#6 +Coalesced [29] main::i1#5 ← main::i1#1 +Coalesced [30] main::idx#21 ← main::idx#17 +Coalesced (already) [31] main::idx#24 ← main::idx#12 +Coalesced [32] main::i#5 ← main::i#1 +Coalesced [33] main::idx#18 ← main::idx#11 +Coalesced (already) [34] main::idx#19 ← main::idx#10 +Coalesced down to 4 phi equivalence classes +Culled Empty Block (label) @2 +Culled Empty Block (label) main::@1 +Culled Empty Block (label) main::@15 +Culled Empty Block (label) main::@16 +Culled Empty Block (label) main::@13 +Culled Empty Block (label) main::@14 +Renumbering block main::@2 to main::@1 +Renumbering block main::@3 to main::@2 +Renumbering block main::@5 to main::@3 +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 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@2 +main::@2: scope:[main] from main + [5] *((const byte*) SCREEN#0) ← (byte) '0' + to:main::@1 +main::@1: scope:[main] from main::@2 + [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' + to:main::@3 +main::@3: scope:[main] from main::@1 main::@4 + [7] (byte) main::idx#10 ← phi( main::@1/(byte) 2 main::@4/(byte) main::idx#11 ) + [7] (byte) main::i#2 ← phi( main::@1/(byte) 0 main::@4/(byte) main::i#1 ) + [8] if((byte) 0!=(byte) main::i#2) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@3 + [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '0' + [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 + to:main::@4 +main::@4: scope:[main] from main::@3 main::@5 + [11] (byte) main::idx#11 ← phi( main::@3/(byte) main::idx#10 main::@5/(byte) main::idx#4 ) + [12] (byte) main::i#1 ← ++ (byte) main::i#2 + [13] if((byte) main::i#1!=(byte) 3) goto main::@3 + to:main::@6 +main::@6: scope:[main] from main::@4 + [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' + [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 + to:main::@7 +main::@7: scope:[main] from main::@6 main::@8 + [16] (byte) main::idx#12 ← phi( main::@8/(byte) main::idx#17 main::@6/(byte) main::idx#5 ) + [16] (word) main::i1#2 ← phi( main::@8/(word) main::i1#1 main::@6/(word) 0 ) + [17] if((byte) 0!=(word) main::i1#2) goto main::@8 + to:main::@9 +main::@9: scope:[main] from main::@7 + [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '0' + [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 + to:main::@8 +main::@8: scope:[main] from main::@7 main::@9 + [20] (byte) main::idx#17 ← phi( main::@9/(byte) main::idx#6 main::@7/(byte) main::idx#12 ) + [21] (word) main::i1#1 ← ++ (word) main::i1#2 + [22] if((word) main::i1#1!=(byte) 3) goto main::@7 + to:main::@return +main::@return: scope:[main] from main::@8 + [23] return + to:@return + + +VARIABLE REGISTER WEIGHTS +(byte*) SCREEN +(void()) main() +(byte) main::i +(byte) main::i#1 16.5 +(byte) main::i#2 6.6000000000000005 +(word) main::i1 +(word) main::i1#1 16.5 +(word) main::i1#2 6.6000000000000005 +(byte) main::idx +(byte) main::idx#10 14.666666666666666 +(byte) main::idx#11 9.25 +(byte) main::idx#12 15.333333333333332 +(byte) main::idx#17 11.0 +(byte) main::idx#4 22.0 +(byte) main::idx#5 4.0 +(byte) main::idx#6 22.0 + +Initial phi equivalence classes +[ main::i#2 main::i#1 ] +[ main::idx#10 main::idx#11 main::idx#4 ] +[ main::i1#2 main::i1#1 ] +[ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] +Complete equivalence classes +[ main::i#2 main::i#1 ] +[ main::idx#10 main::idx#11 main::idx#4 ] +[ main::i1#2 main::i1#1 ] +[ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] +Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::idx#10 main::idx#11 main::idx#4 ] +Allocated zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] +Allocated zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] + +INITIAL ASM +//SEG0 File Comments +// Tests using integer conditions in if() +// This should produce '0 0 0' at the top of the screen +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label SCREEN = $400 +//SEG3 @begin +bbegin: +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG5 @1 +b1: +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG9 @end +bend: +//SEG10 main +main: { + .label i = 2 + .label idx = 3 + .label idx_5 = 6 + .label i1 = 4 + .label idx_6 = 6 + .label idx_12 = 6 + .label idx_17 = 6 + jmp b2 + //SEG11 main::@2 + b2: + //SEG12 [5] *((const byte*) SCREEN#0) ← (byte) '0' -- _deref_pbuc1=vbuc2 + lda #'0' + sta SCREEN + jmp b1 + //SEG13 main::@1 + b1: + //SEG14 [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' -- _deref_pbuc1=vbuc2 + lda #' ' + sta SCREEN+1 + //SEG15 [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + b3_from_b1: + //SEG16 [7] phi (byte) main::idx#10 = (byte) 2 [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 + lda #2 + sta idx + //SEG17 [7] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#1] -- vbuz1=vbuc1 + lda #0 + sta i + jmp b3 + // loop byte + //SEG18 [7] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + b3_from_b4: + //SEG19 [7] phi (byte) main::idx#10 = (byte) main::idx#11 [phi:main::@4->main::@3#0] -- register_copy + //SEG20 [7] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#1] -- register_copy + jmp b3 + //SEG21 main::@3 + b3: + //SEG22 [8] if((byte) 0!=(byte) main::i#2) goto main::@4 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp i + bne b4_from_b3 + jmp b5 + //SEG23 main::@5 + b5: + //SEG24 [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '0' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #'0' + ldy idx + sta SCREEN,y + //SEG25 [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 -- vbuz1=_inc_vbuz1 + inc idx + //SEG26 [11] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] + b4_from_b3: + b4_from_b5: + //SEG27 [11] phi (byte) main::idx#11 = (byte) main::idx#10 [phi:main::@3/main::@5->main::@4#0] -- register_copy + jmp b4 + //SEG28 main::@4 + b4: + //SEG29 [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + inc i + //SEG30 [13] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuz1_neq_vbuc1_then_la1 + lda #3 + cmp i + bne b3_from_b4 + jmp b6 + //SEG31 main::@6 + b6: + //SEG32 [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #' ' + ldy idx + sta SCREEN,y + //SEG33 [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 -- vbuz1=_inc_vbuz2 + ldy idx + iny + sty idx_5 + //SEG34 [16] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + b7_from_b6: + //SEG35 [16] phi (byte) main::idx#12 = (byte) main::idx#5 [phi:main::@6->main::@7#0] -- register_copy + //SEG36 [16] phi (word) main::i1#2 = (word) 0 [phi:main::@6->main::@7#1] -- vwuz1=vwuc1 + lda #<0 + sta i1 + lda #>0 + sta i1+1 + jmp b7 + // loop word + //SEG37 [16] phi from main::@8 to main::@7 [phi:main::@8->main::@7] + b7_from_b8: + //SEG38 [16] phi (byte) main::idx#12 = (byte) main::idx#17 [phi:main::@8->main::@7#0] -- register_copy + //SEG39 [16] phi (word) main::i1#2 = (word) main::i1#1 [phi:main::@8->main::@7#1] -- register_copy + jmp b7 + //SEG40 main::@7 + b7: + //SEG41 [17] if((byte) 0!=(word) main::i1#2) goto main::@8 -- vwuc1_neq_vwuz1_then_la1 + lda i1+1 + cmp #>0 + bne b8_from_b7 + lda i1 + cmp #<0 + bne b8_from_b7 + jmp b9 + //SEG42 main::@9 + b9: + //SEG43 [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '0' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #'0' + ldy idx_12 + sta SCREEN,y + //SEG44 [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 -- vbuz1=_inc_vbuz1 + inc idx_6 + //SEG45 [20] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] + b8_from_b7: + b8_from_b9: + //SEG46 [20] phi (byte) main::idx#17 = (byte) main::idx#12 [phi:main::@7/main::@9->main::@8#0] -- register_copy + jmp b8 + //SEG47 main::@8 + b8: + //SEG48 [21] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 + inc i1 + bne !+ + inc i1+1 + !: + //SEG49 [22] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 + lda i1+1 + cmp #>3 + bne b7_from_b8 + lda i1 + cmp #<3 + bne b7_from_b8 + jmp breturn + //SEG50 main::@return + breturn: + //SEG51 [23] return + rts +} + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [5] *((const byte*) SCREEN#0) ← (byte) '0' [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '0' [ main::i#2 main::idx#10 ] ( main:2 [ main::i#2 main::idx#10 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::idx#10 main::idx#11 main::idx#4 ] +Statement [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' [ main::idx#11 ] ( main:2 [ main::idx#11 ] ) always clobbers reg byte a +Statement [17] if((byte) 0!=(word) main::i1#2) goto main::@8 [ main::i1#2 main::idx#12 ] ( main:2 [ main::i1#2 main::idx#12 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] +Statement [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '0' [ main::i1#2 main::idx#12 ] ( main:2 [ main::i1#2 main::idx#12 ] ) always clobbers reg byte a +Statement [22] if((word) main::i1#1!=(byte) 3) goto main::@7 [ main::i1#1 main::idx#17 ] ( main:2 [ main::i1#1 main::idx#17 ] ) always clobbers reg byte a +Statement [5] *((const byte*) SCREEN#0) ← (byte) '0' [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' [ ] ( main:2 [ ] ) always clobbers reg byte a +Statement [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '0' [ main::i#2 main::idx#10 ] ( main:2 [ main::i#2 main::idx#10 ] ) always clobbers reg byte a +Statement [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' [ main::idx#11 ] ( main:2 [ main::idx#11 ] ) always clobbers reg byte a +Statement [17] if((byte) 0!=(word) main::i1#2) goto main::@8 [ main::i1#2 main::idx#12 ] ( main:2 [ main::i1#2 main::idx#12 ] ) always clobbers reg byte a +Statement [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '0' [ main::i1#2 main::idx#12 ] ( main:2 [ main::i1#2 main::idx#12 ] ) always clobbers reg byte a +Statement [22] if((word) main::i1#1!=(byte) 3) goto main::@7 [ main::i1#1 main::idx#17 ] ( main:2 [ main::i1#1 main::idx#17 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::idx#10 main::idx#11 main::idx#4 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , +Potential registers zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] : zp ZP_WORD:4 , +Potential registers zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [main] 52.33: zp ZP_BYTE:6 [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] 45.92: zp ZP_BYTE:3 [ main::idx#10 main::idx#11 main::idx#4 ] 23.1: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 23.1: zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] +Uplift Scope [] + +Uplifting [main] best 1227 combination reg byte y [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] reg byte y [ main::idx#10 main::idx#11 main::idx#4 ] reg byte x [ main::i#2 main::i#1 ] zp ZP_WORD:4 [ main::i1#2 main::i1#1 ] +Uplifting [] best 1227 combination +Allocated (was zp ZP_WORD:4) zp ZP_WORD:2 [ main::i1#2 main::i1#1 ] + +ASSEMBLER BEFORE OPTIMIZATION +//SEG0 File Comments +// Tests using integer conditions in if() +// This should produce '0 0 0' at the top of the screen +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label SCREEN = $400 +//SEG3 @begin +bbegin: +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG5 @1 +b1: +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG9 @end +bend: +//SEG10 main +main: { + .label i1 = 2 + jmp b2 + //SEG11 main::@2 + b2: + //SEG12 [5] *((const byte*) SCREEN#0) ← (byte) '0' -- _deref_pbuc1=vbuc2 + lda #'0' + sta SCREEN + jmp b1 + //SEG13 main::@1 + b1: + //SEG14 [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' -- _deref_pbuc1=vbuc2 + lda #' ' + sta SCREEN+1 + //SEG15 [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + b3_from_b1: + //SEG16 [7] phi (byte) main::idx#10 = (byte) 2 [phi:main::@1->main::@3#0] -- vbuyy=vbuc1 + ldy #2 + //SEG17 [7] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#1] -- vbuxx=vbuc1 + ldx #0 + jmp b3 + // loop byte + //SEG18 [7] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + b3_from_b4: + //SEG19 [7] phi (byte) main::idx#10 = (byte) main::idx#11 [phi:main::@4->main::@3#0] -- register_copy + //SEG20 [7] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#1] -- register_copy + jmp b3 + //SEG21 main::@3 + b3: + //SEG22 [8] if((byte) 0!=(byte) main::i#2) goto main::@4 -- vbuc1_neq_vbuxx_then_la1 + cpx #0 + bne b4_from_b3 + jmp b5 + //SEG23 main::@5 + b5: + //SEG24 [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '0' -- pbuc1_derefidx_vbuyy=vbuc2 + lda #'0' + sta SCREEN,y + //SEG25 [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 -- vbuyy=_inc_vbuyy + iny + //SEG26 [11] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] + b4_from_b3: + b4_from_b5: + //SEG27 [11] phi (byte) main::idx#11 = (byte) main::idx#10 [phi:main::@3/main::@5->main::@4#0] -- register_copy + jmp b4 + //SEG28 main::@4 + b4: + //SEG29 [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + inx + //SEG30 [13] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuxx_neq_vbuc1_then_la1 + cpx #3 + bne b3_from_b4 + jmp b6 + //SEG31 main::@6 + b6: + //SEG32 [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 + lda #' ' + sta SCREEN,y + //SEG33 [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 -- vbuyy=_inc_vbuyy + iny + //SEG34 [16] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + b7_from_b6: + //SEG35 [16] phi (byte) main::idx#12 = (byte) main::idx#5 [phi:main::@6->main::@7#0] -- register_copy + //SEG36 [16] phi (word) main::i1#2 = (word) 0 [phi:main::@6->main::@7#1] -- vwuz1=vwuc1 + lda #<0 + sta i1 + lda #>0 + sta i1+1 + jmp b7 + // loop word + //SEG37 [16] phi from main::@8 to main::@7 [phi:main::@8->main::@7] + b7_from_b8: + //SEG38 [16] phi (byte) main::idx#12 = (byte) main::idx#17 [phi:main::@8->main::@7#0] -- register_copy + //SEG39 [16] phi (word) main::i1#2 = (word) main::i1#1 [phi:main::@8->main::@7#1] -- register_copy + jmp b7 + //SEG40 main::@7 + b7: + //SEG41 [17] if((byte) 0!=(word) main::i1#2) goto main::@8 -- vwuc1_neq_vwuz1_then_la1 + lda i1+1 + cmp #>0 + bne b8_from_b7 + lda i1 + cmp #<0 + bne b8_from_b7 + jmp b9 + //SEG42 main::@9 + b9: + //SEG43 [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '0' -- pbuc1_derefidx_vbuyy=vbuc2 + lda #'0' + sta SCREEN,y + //SEG44 [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 -- vbuyy=_inc_vbuyy + iny + //SEG45 [20] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] + b8_from_b7: + b8_from_b9: + //SEG46 [20] phi (byte) main::idx#17 = (byte) main::idx#12 [phi:main::@7/main::@9->main::@8#0] -- register_copy + jmp b8 + //SEG47 main::@8 + b8: + //SEG48 [21] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 + inc i1 + bne !+ + inc i1+1 + !: + //SEG49 [22] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 + lda i1+1 + cmp #>3 + bne b7_from_b8 + lda i1 + cmp #<3 + bne b7_from_b8 + jmp breturn + //SEG50 main::@return + breturn: + //SEG51 [23] return + rts +} + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b1 +Removing instruction jmp bend +Removing instruction jmp b2 +Removing instruction jmp b1 +Removing instruction jmp b3 +Removing instruction jmp b5 +Removing instruction jmp b4 +Removing instruction jmp b6 +Removing instruction jmp b7 +Removing instruction jmp b9 +Removing instruction jmp b8 +Removing instruction jmp breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #>0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Replacing label b4_from_b3 with b4 +Replacing label b3_from_b4 with b3 +Replacing label b8_from_b7 with b8 +Replacing label b8_from_b7 with b8 +Replacing label b7_from_b8 with b7 +Replacing label b7_from_b8 with b7 +Removing instruction b1_from_bbegin: +Removing instruction b1: +Removing instruction main_from_b1: +Removing instruction bend_from_b1: +Removing instruction b3_from_b4: +Removing instruction b4_from_b3: +Removing instruction b4_from_b5: +Removing instruction b7_from_b8: +Removing instruction b8_from_b7: +Removing instruction b8_from_b9: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction bend: +Removing instruction b2: +Removing instruction b1: +Removing instruction b3_from_b1: +Removing instruction b5: +Removing instruction b6: +Removing instruction b7_from_b6: +Removing instruction b9: +Removing instruction breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Updating BasicUpstart to call main directly +Removing instruction jsr main +Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b3 +Removing instruction jmp b7 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction bbegin: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(label) @1 +(label) @begin +(label) @end +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = (byte*) 1024 +(void()) main() +(label) main::@1 +(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 +(byte) main::i +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#2 reg byte x 6.6000000000000005 +(word) main::i1 +(word) main::i1#1 i1 zp ZP_WORD:2 16.5 +(word) main::i1#2 i1 zp ZP_WORD:2 6.6000000000000005 +(byte) main::idx +(byte) main::idx#10 reg byte y 14.666666666666666 +(byte) main::idx#11 reg byte y 9.25 +(byte) main::idx#12 reg byte y 15.333333333333332 +(byte) main::idx#17 reg byte y 11.0 +(byte) main::idx#4 reg byte y 22.0 +(byte) main::idx#5 reg byte y 4.0 +(byte) main::idx#6 reg byte y 22.0 + +reg byte x [ main::i#2 main::i#1 ] +reg byte y [ main::idx#10 main::idx#11 main::idx#4 ] +zp ZP_WORD:2 [ main::i1#2 main::i1#1 ] +reg byte y [ main::idx#12 main::idx#17 main::idx#5 main::idx#6 ] + + +FINAL ASSEMBLER +Score: 862 + +//SEG0 File Comments +// Tests using integer conditions in if() +// This should produce '0 0 0' at the top of the screen +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label SCREEN = $400 +//SEG3 @begin +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +//SEG5 @1 +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +//SEG9 @end +//SEG10 main +main: { + .label i1 = 2 + //SEG11 main::@2 + //SEG12 [5] *((const byte*) SCREEN#0) ← (byte) '0' -- _deref_pbuc1=vbuc2 + lda #'0' + sta SCREEN + //SEG13 main::@1 + //SEG14 [6] *((const byte*) SCREEN#0+(byte) 1) ← (byte) ' ' -- _deref_pbuc1=vbuc2 + lda #' ' + sta SCREEN+1 + //SEG15 [7] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + //SEG16 [7] phi (byte) main::idx#10 = (byte) 2 [phi:main::@1->main::@3#0] -- vbuyy=vbuc1 + ldy #2 + //SEG17 [7] phi (byte) main::i#2 = (byte) 0 [phi:main::@1->main::@3#1] -- vbuxx=vbuc1 + ldx #0 + // loop byte + //SEG18 [7] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + //SEG19 [7] phi (byte) main::idx#10 = (byte) main::idx#11 [phi:main::@4->main::@3#0] -- register_copy + //SEG20 [7] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@4->main::@3#1] -- register_copy + //SEG21 main::@3 + b3: + //SEG22 [8] if((byte) 0!=(byte) main::i#2) goto main::@4 -- vbuc1_neq_vbuxx_then_la1 + cpx #0 + bne b4 + //SEG23 main::@5 + //SEG24 [9] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '0' -- pbuc1_derefidx_vbuyy=vbuc2 + lda #'0' + sta SCREEN,y + //SEG25 [10] (byte) main::idx#4 ← ++ (byte) main::idx#10 -- vbuyy=_inc_vbuyy + iny + //SEG26 [11] phi from main::@3 main::@5 to main::@4 [phi:main::@3/main::@5->main::@4] + //SEG27 [11] phi (byte) main::idx#11 = (byte) main::idx#10 [phi:main::@3/main::@5->main::@4#0] -- register_copy + //SEG28 main::@4 + b4: + //SEG29 [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + inx + //SEG30 [13] if((byte) main::i#1!=(byte) 3) goto main::@3 -- vbuxx_neq_vbuc1_then_la1 + cpx #3 + bne b3 + //SEG31 main::@6 + //SEG32 [14] *((const byte*) SCREEN#0 + (byte) main::idx#11) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 + lda #' ' + sta SCREEN,y + //SEG33 [15] (byte) main::idx#5 ← ++ (byte) main::idx#11 -- vbuyy=_inc_vbuyy + iny + //SEG34 [16] phi from main::@6 to main::@7 [phi:main::@6->main::@7] + //SEG35 [16] phi (byte) main::idx#12 = (byte) main::idx#5 [phi:main::@6->main::@7#0] -- register_copy + //SEG36 [16] phi (word) main::i1#2 = (word) 0 [phi:main::@6->main::@7#1] -- vwuz1=vwuc1 + lda #<0 + sta i1 + sta i1+1 + // loop word + //SEG37 [16] phi from main::@8 to main::@7 [phi:main::@8->main::@7] + //SEG38 [16] phi (byte) main::idx#12 = (byte) main::idx#17 [phi:main::@8->main::@7#0] -- register_copy + //SEG39 [16] phi (word) main::i1#2 = (word) main::i1#1 [phi:main::@8->main::@7#1] -- register_copy + //SEG40 main::@7 + b7: + //SEG41 [17] if((byte) 0!=(word) main::i1#2) goto main::@8 -- vwuc1_neq_vwuz1_then_la1 + lda i1+1 + cmp #>0 + bne b8 + lda i1 + cmp #<0 + bne b8 + //SEG42 main::@9 + //SEG43 [18] *((const byte*) SCREEN#0 + (byte) main::idx#12) ← (byte) '0' -- pbuc1_derefidx_vbuyy=vbuc2 + lda #'0' + sta SCREEN,y + //SEG44 [19] (byte) main::idx#6 ← ++ (byte) main::idx#12 -- vbuyy=_inc_vbuyy + iny + //SEG45 [20] phi from main::@7 main::@9 to main::@8 [phi:main::@7/main::@9->main::@8] + //SEG46 [20] phi (byte) main::idx#17 = (byte) main::idx#12 [phi:main::@7/main::@9->main::@8#0] -- register_copy + //SEG47 main::@8 + b8: + //SEG48 [21] (word) main::i1#1 ← ++ (word) main::i1#2 -- vwuz1=_inc_vwuz1 + inc i1 + bne !+ + inc i1+1 + !: + //SEG49 [22] if((word) main::i1#1!=(byte) 3) goto main::@7 -- vwuz1_neq_vwuc1_then_la1 + lda i1+1 + cmp #>3 + bne b7 + lda i1 + cmp #<3 + bne b7 + //SEG50 main::@return + //SEG51 [23] return + rts +} + diff --git a/src/test/ref/condition-integer-1.sym b/src/test/ref/condition-integer-1.sym new file mode 100644 index 000000000..1daabbadc --- /dev/null +++ b/src/test/ref/condition-integer-1.sym @@ -0,0 +1 @@ +program \ No newline at end of file diff --git a/src/test/ref/condition-integer-2.asm b/src/test/ref/condition-integer-2.asm new file mode 100644 index 000000000..bafd8435e --- /dev/null +++ b/src/test/ref/condition-integer-2.asm @@ -0,0 +1,43 @@ +// Tests using integer conditions in while() / for() / do..while +// This should produce 'ba ba ba' at the top of the screen +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label SCREEN = $400 +main: { + ldy #0 + ldx #2 + // for() + b1: + txa + sta SCREEN,y + iny + dex + cpx #0 + bne b1 + lda #' ' + sta SCREEN,y + iny + lda #3 + b3: + sec + sbc #1 + cmp #0 + bne b4 + lda #' ' + sta SCREEN,y + iny + lda #2 + b6: + sta SCREEN,y + iny + sec + sbc #1 + cmp #0 + bne b6 + rts + b4: + sta SCREEN,y + iny + jmp b3 +} diff --git a/src/test/ref/condition-integer-2.cfg b/src/test/ref/condition-integer-2.cfg new file mode 100644 index 000000000..314594831 --- /dev/null +++ b/src/test/ref/condition-integer-2.cfg @@ -0,0 +1,49 @@ +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [5] (byte) idx#8 ← phi( main/(byte) 0 main::@1/(byte) idx#1 ) + [5] (byte) main::i#2 ← phi( main/(byte) 2 main::@1/(byte) main::i#1 ) + [6] *((const byte*) SCREEN#0 + (byte) idx#8) ← (byte) main::i#2 + [7] (byte) idx#1 ← ++ (byte) idx#8 + [8] (byte) main::i#1 ← -- (byte) main::i#2 + [9] if((byte) 0!=(byte) main::i#1) goto main::@1 + to:main::@2 +main::@2: scope:[main] from main::@1 + [10] *((const byte*) SCREEN#0 + (byte) idx#1) ← (byte) ' ' + [11] (byte) idx#2 ← ++ (byte) idx#1 + to:main::@3 +main::@3: scope:[main] from main::@2 main::@4 + [12] (byte) idx#10 ← phi( main::@2/(byte) idx#2 main::@4/(byte) idx#3 ) + [12] (byte) main::j#2 ← phi( main::@2/(byte) 3 main::@4/(byte) main::j#1 ) + [13] (byte) main::j#1 ← -- (byte) main::j#2 + [14] if((byte) 0!=(byte) main::j#1) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@3 + [15] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' + [16] (byte) idx#4 ← ++ (byte) idx#10 + to:main::@6 +main::@6: scope:[main] from main::@5 main::@6 + [17] (byte) idx#12 ← phi( main::@5/(byte) idx#4 main::@6/(byte) idx#13 ) + [17] (byte) main::k#2 ← phi( main::@5/(byte) 2 main::@6/(byte) main::k#1 ) + [18] *((const byte*) SCREEN#0 + (byte) idx#12) ← (byte) main::k#2 + [19] (byte) idx#13 ← ++ (byte) idx#12 + [20] (byte) main::k#1 ← -- (byte) main::k#2 + [21] if((byte) 0!=(byte) main::k#1) goto main::@6 + to:main::@return +main::@return: scope:[main] from main::@6 + [22] return + to:@return +main::@4: scope:[main] from main::@3 + [23] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) main::j#1 + [24] (byte) idx#3 ← ++ (byte) idx#10 + to:main::@3 diff --git a/src/test/ref/condition-integer-2.log b/src/test/ref/condition-integer-2.log new file mode 100644 index 000000000..e08be3984 --- /dev/null +++ b/src/test/ref/condition-integer-2.log @@ -0,0 +1,784 @@ +Warning! Adding boolean cast to non-boolean condition (byte) main::i +Warning! Adding boolean cast to non-boolean condition (byte) main::j +Warning! Adding boolean cast to non-boolean condition (byte) main::k +Adding pointer type conversion cast (byte*) SCREEN in (byte*) SCREEN ← (number) $400 +Culled Empty Block (label) main::@6 +Culled Empty Block (label) main::@7 +Culled Empty Block (label) main::@8 +Culled Empty Block (label) main::@10 + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + (byte*) SCREEN#0 ← ((byte*)) (number) $400 + (byte) idx#0 ← (number) 0 + to:@1 +main: scope:[main] from @1 + (byte) idx#15 ← phi( @1/(byte) idx#17 ) + (byte) main::i#0 ← (number) 2 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte) idx#8 ← phi( main/(byte) idx#15 main::@1/(byte) idx#1 ) + (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) + *((byte*) SCREEN#0 + (byte) idx#8) ← (byte) main::i#2 + (byte) idx#1 ← ++ (byte) idx#8 + (byte) main::i#1 ← -- (byte) main::i#2 + (bool~) main::$0 ← (number) 0 != (byte) main::i#1 + if((bool~) main::$0) goto main::@1 + to:main::@2 +main::@2: scope:[main] from main::@1 + (byte) idx#9 ← phi( main::@1/(byte) idx#1 ) + *((byte*) SCREEN#0 + (byte) idx#9) ← (byte) ' ' + (byte) idx#2 ← ++ (byte) idx#9 + (byte) main::j#0 ← (number) 3 + to:main::@3 +main::@3: scope:[main] from main::@2 main::@4 + (byte) idx#16 ← phi( main::@2/(byte) idx#2 main::@4/(byte) idx#3 ) + (byte) main::j#2 ← phi( main::@2/(byte) main::j#0 main::@4/(byte) main::j#3 ) + (byte) main::j#1 ← -- (byte) main::j#2 + (bool~) main::$1 ← (number) 0 != (byte) main::j#1 + if((bool~) main::$1) goto main::@4 + to:main::@5 +main::@4: scope:[main] from main::@3 + (byte) idx#10 ← phi( main::@3/(byte) idx#16 ) + (byte) main::j#3 ← phi( main::@3/(byte) main::j#1 ) + *((byte*) SCREEN#0 + (byte) idx#10) ← (byte) main::j#3 + (byte) idx#3 ← ++ (byte) idx#10 + to:main::@3 +main::@5: scope:[main] from main::@3 + (byte) idx#11 ← phi( main::@3/(byte) idx#16 ) + *((byte*) SCREEN#0 + (byte) idx#11) ← (byte) ' ' + (byte) idx#4 ← ++ (byte) idx#11 + (byte) main::k#0 ← (number) 2 + to:main::@9 +main::@9: scope:[main] from main::@5 main::@9 + (byte) idx#12 ← phi( main::@5/(byte) idx#4 main::@9/(byte) idx#5 ) + (byte) main::k#2 ← phi( main::@5/(byte) main::k#0 main::@9/(byte) main::k#1 ) + *((byte*) SCREEN#0 + (byte) idx#12) ← (byte) main::k#2 + (byte) idx#5 ← ++ (byte) idx#12 + (byte) main::k#1 ← -- (byte) main::k#2 + (bool~) main::$2 ← (number) 0 != (byte) main::k#1 + if((bool~) main::$2) goto main::@9 + to:main::@return +main::@return: scope:[main] from main::@9 + (byte) idx#13 ← phi( main::@9/(byte) idx#5 ) + (byte) idx#6 ← (byte) idx#13 + return + to:@return +@1: scope:[] from @begin + (byte) idx#17 ← phi( @begin/(byte) idx#0 ) + call main + to:@2 +@2: scope:[] from @1 + (byte) idx#14 ← phi( @1/(byte) idx#6 ) + (byte) idx#7 ← (byte) idx#14 + to:@end +@end: scope:[] from @2 + +SYMBOL TABLE SSA +(label) @1 +(label) @2 +(label) @begin +(label) @end +(byte*) SCREEN +(byte*) SCREEN#0 +(byte) idx +(byte) idx#0 +(byte) idx#1 +(byte) idx#10 +(byte) idx#11 +(byte) idx#12 +(byte) idx#13 +(byte) idx#14 +(byte) idx#15 +(byte) idx#16 +(byte) idx#17 +(byte) idx#2 +(byte) idx#3 +(byte) idx#4 +(byte) idx#5 +(byte) idx#6 +(byte) idx#7 +(byte) idx#8 +(byte) idx#9 +(void()) main() +(bool~) main::$0 +(bool~) main::$1 +(bool~) main::$2 +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@9 +(label) main::@return +(byte) main::i +(byte) main::i#0 +(byte) main::i#1 +(byte) main::i#2 +(byte) main::j +(byte) main::j#0 +(byte) main::j#1 +(byte) main::j#2 +(byte) main::j#3 +(byte) main::k +(byte) main::k#0 +(byte) main::k#1 +(byte) main::k#2 + +Adding number conversion cast (unumber) 0 in (byte) idx#0 ← (number) 0 +Adding number conversion cast (unumber) 2 in (byte) main::i#0 ← (number) 2 +Adding number conversion cast (unumber) 0 in (bool~) main::$0 ← (number) 0 != (byte) main::i#1 +Adding number conversion cast (unumber) 3 in (byte) main::j#0 ← (number) 3 +Adding number conversion cast (unumber) 0 in (bool~) main::$1 ← (number) 0 != (byte) main::j#1 +Adding number conversion cast (unumber) 2 in (byte) main::k#0 ← (number) 2 +Adding number conversion cast (unumber) 0 in (bool~) main::$2 ← (number) 0 != (byte) main::k#1 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 +Inlining cast (byte) idx#0 ← (unumber)(number) 0 +Inlining cast (byte) main::i#0 ← (unumber)(number) 2 +Inlining cast (byte) main::j#0 ← (unumber)(number) 3 +Inlining cast (byte) main::k#0 ← (unumber)(number) 2 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 +Simplifying constant integer cast 2 +Simplifying constant integer cast 0 +Simplifying constant integer cast 3 +Simplifying constant integer cast 0 +Simplifying constant integer cast 2 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 2 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 3 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 2 +Finalized unsigned number type (byte) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) idx#1 = (byte) idx#9 +Alias (byte) main::j#1 = (byte) main::j#3 +Alias (byte) idx#10 = (byte) idx#16 (byte) idx#11 +Alias (byte) idx#13 = (byte) idx#5 (byte) idx#6 +Alias (byte) idx#0 = (byte) idx#17 +Alias (byte) idx#14 = (byte) idx#7 +Successful SSA optimization Pass2AliasElimination +Identical Phi Values (byte) idx#15 (byte) idx#0 +Identical Phi Values (byte) idx#14 (byte) idx#13 +Successful SSA optimization Pass2IdenticalPhiElimination +Simple Condition (bool~) main::$0 [9] if((byte) 0!=(byte) main::i#1) goto main::@1 +Simple Condition (bool~) main::$1 [17] if((byte) 0!=(byte) main::j#1) goto main::@4 +Simple Condition (bool~) main::$2 [30] if((byte) 0!=(byte) main::k#1) goto main::@9 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant (const byte*) SCREEN#0 = (byte*) 1024 +Constant (const byte) idx#0 = 0 +Constant (const byte) main::i#0 = 2 +Constant (const byte) main::j#0 = 3 +Constant (const byte) main::k#0 = 2 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with var siblings (const byte) main::i#0 +Inlining constant with var siblings (const byte) main::j#0 +Inlining constant with var siblings (const byte) main::k#0 +Inlining constant with var siblings (const byte) idx#0 +Constant inlined main::i#0 = (byte) 2 +Constant inlined main::k#0 = (byte) 2 +Constant inlined main::j#0 = (byte) 3 +Constant inlined idx#0 = (byte) 0 +Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@11(between main::@1 and main::@1) +Added new block during phi lifting main::@12(between main::@9 and main::@9) +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 +CALL GRAPH +Calls in [] to main:2 + +Created 6 initial phi equivalence classes +Coalesced [13] idx#19 ← idx#2 +Coalesced [19] idx#21 ← idx#4 +Coalesced [26] main::k#3 ← main::k#1 +Coalesced [27] idx#22 ← idx#13 +Coalesced [30] main::j#4 ← main::j#1 +Coalesced [31] idx#20 ← idx#3 +Coalesced [32] main::i#3 ← main::i#1 +Coalesced [33] idx#18 ← idx#1 +Coalesced down to 6 phi equivalence classes +Culled Empty Block (label) @2 +Culled Empty Block (label) main::@12 +Culled Empty Block (label) main::@11 +Renumbering block main::@9 to main::@6 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [5] (byte) idx#8 ← phi( main/(byte) 0 main::@1/(byte) idx#1 ) + [5] (byte) main::i#2 ← phi( main/(byte) 2 main::@1/(byte) main::i#1 ) + [6] *((const byte*) SCREEN#0 + (byte) idx#8) ← (byte) main::i#2 + [7] (byte) idx#1 ← ++ (byte) idx#8 + [8] (byte) main::i#1 ← -- (byte) main::i#2 + [9] if((byte) 0!=(byte) main::i#1) goto main::@1 + to:main::@2 +main::@2: scope:[main] from main::@1 + [10] *((const byte*) SCREEN#0 + (byte) idx#1) ← (byte) ' ' + [11] (byte) idx#2 ← ++ (byte) idx#1 + to:main::@3 +main::@3: scope:[main] from main::@2 main::@4 + [12] (byte) idx#10 ← phi( main::@2/(byte) idx#2 main::@4/(byte) idx#3 ) + [12] (byte) main::j#2 ← phi( main::@2/(byte) 3 main::@4/(byte) main::j#1 ) + [13] (byte) main::j#1 ← -- (byte) main::j#2 + [14] if((byte) 0!=(byte) main::j#1) goto main::@4 + to:main::@5 +main::@5: scope:[main] from main::@3 + [15] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' + [16] (byte) idx#4 ← ++ (byte) idx#10 + to:main::@6 +main::@6: scope:[main] from main::@5 main::@6 + [17] (byte) idx#12 ← phi( main::@5/(byte) idx#4 main::@6/(byte) idx#13 ) + [17] (byte) main::k#2 ← phi( main::@5/(byte) 2 main::@6/(byte) main::k#1 ) + [18] *((const byte*) SCREEN#0 + (byte) idx#12) ← (byte) main::k#2 + [19] (byte) idx#13 ← ++ (byte) idx#12 + [20] (byte) main::k#1 ← -- (byte) main::k#2 + [21] if((byte) 0!=(byte) main::k#1) goto main::@6 + to:main::@return +main::@return: scope:[main] from main::@6 + [22] return + to:@return +main::@4: scope:[main] from main::@3 + [23] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) main::j#1 + [24] (byte) idx#3 ← ++ (byte) idx#10 + to:main::@3 + + +VARIABLE REGISTER WEIGHTS +(byte*) SCREEN +(byte) idx +(byte) idx#1 6.5 +(byte) idx#10 7.8 +(byte) idx#12 17.5 +(byte) idx#13 7.333333333333333 +(byte) idx#2 4.0 +(byte) idx#3 22.0 +(byte) idx#4 4.0 +(byte) idx#8 16.5 +(void()) main() +(byte) main::i +(byte) main::i#1 16.5 +(byte) main::i#2 11.0 +(byte) main::j +(byte) main::j#1 11.0 +(byte) main::j#2 22.0 +(byte) main::k +(byte) main::k#1 16.5 +(byte) main::k#2 11.0 + +Initial phi equivalence classes +[ main::i#2 main::i#1 ] +[ idx#8 idx#1 ] +[ main::j#2 main::j#1 ] +[ idx#10 idx#2 idx#3 ] +[ main::k#2 main::k#1 ] +[ idx#12 idx#4 idx#13 ] +Complete equivalence classes +[ main::i#2 main::i#1 ] +[ idx#8 idx#1 ] +[ main::j#2 main::j#1 ] +[ idx#10 idx#2 idx#3 ] +[ main::k#2 main::k#1 ] +[ idx#12 idx#4 idx#13 ] +Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:3 [ idx#8 idx#1 ] +Allocated zp ZP_BYTE:4 [ main::j#2 main::j#1 ] +Allocated zp ZP_BYTE:5 [ idx#10 idx#2 idx#3 ] +Allocated zp ZP_BYTE:6 [ main::k#2 main::k#1 ] +Allocated zp ZP_BYTE:7 [ idx#12 idx#4 idx#13 ] + +INITIAL ASM +//SEG0 File Comments +// Tests using integer conditions in while() / for() / do..while +// This should produce 'ba ba ba' at the top of the screen +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label SCREEN = $400 + .label idx = 3 + .label idx_2 = 5 + .label idx_3 = 5 + .label idx_4 = 7 + .label idx_10 = 5 + .label idx_12 = 7 + .label idx_13 = 7 +//SEG3 @begin +bbegin: +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG5 @1 +b1: +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG9 @end +bend: +//SEG10 main +main: { + .label i = 2 + .label j = 4 + .label k = 6 + //SEG11 [5] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + //SEG12 [5] phi (byte) idx#8 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta idx + //SEG13 [5] phi (byte) main::i#2 = (byte) 2 [phi:main->main::@1#1] -- vbuz1=vbuc1 + lda #2 + sta i + jmp b1 + // for() + //SEG14 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + b1_from_b1: + //SEG15 [5] phi (byte) idx#8 = (byte) idx#1 [phi:main::@1->main::@1#0] -- register_copy + //SEG16 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#1] -- register_copy + jmp b1 + //SEG17 main::@1 + b1: + //SEG18 [6] *((const byte*) SCREEN#0 + (byte) idx#8) ← (byte) main::i#2 -- pbuc1_derefidx_vbuz1=vbuz2 + lda i + ldy idx + sta SCREEN,y + //SEG19 [7] (byte) idx#1 ← ++ (byte) idx#8 -- vbuz1=_inc_vbuz1 + inc idx + //SEG20 [8] (byte) main::i#1 ← -- (byte) main::i#2 -- vbuz1=_dec_vbuz1 + dec i + //SEG21 [9] if((byte) 0!=(byte) main::i#1) goto main::@1 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp i + bne b1_from_b1 + jmp b2 + //SEG22 main::@2 + b2: + //SEG23 [10] *((const byte*) SCREEN#0 + (byte) idx#1) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #' ' + ldy idx + sta SCREEN,y + //SEG24 [11] (byte) idx#2 ← ++ (byte) idx#1 -- vbuz1=_inc_vbuz2 + ldy idx + iny + sty idx_2 + //SEG25 [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + b3_from_b2: + //SEG26 [12] phi (byte) idx#10 = (byte) idx#2 [phi:main::@2->main::@3#0] -- register_copy + //SEG27 [12] phi (byte) main::j#2 = (byte) 3 [phi:main::@2->main::@3#1] -- vbuz1=vbuc1 + lda #3 + sta j + jmp b3 + //SEG28 main::@3 + b3: + //SEG29 [13] (byte) main::j#1 ← -- (byte) main::j#2 -- vbuz1=_dec_vbuz1 + dec j + //SEG30 [14] if((byte) 0!=(byte) main::j#1) goto main::@4 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp j + bne b4 + jmp b5 + //SEG31 main::@5 + b5: + //SEG32 [15] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #' ' + ldy idx_10 + sta SCREEN,y + //SEG33 [16] (byte) idx#4 ← ++ (byte) idx#10 -- vbuz1=_inc_vbuz2 + ldy idx_10 + iny + sty idx_4 + //SEG34 [17] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + b6_from_b5: + //SEG35 [17] phi (byte) idx#12 = (byte) idx#4 [phi:main::@5->main::@6#0] -- register_copy + //SEG36 [17] phi (byte) main::k#2 = (byte) 2 [phi:main::@5->main::@6#1] -- vbuz1=vbuc1 + lda #2 + sta k + jmp b6 + //SEG37 [17] phi from main::@6 to main::@6 [phi:main::@6->main::@6] + b6_from_b6: + //SEG38 [17] phi (byte) idx#12 = (byte) idx#13 [phi:main::@6->main::@6#0] -- register_copy + //SEG39 [17] phi (byte) main::k#2 = (byte) main::k#1 [phi:main::@6->main::@6#1] -- register_copy + jmp b6 + //SEG40 main::@6 + b6: + //SEG41 [18] *((const byte*) SCREEN#0 + (byte) idx#12) ← (byte) main::k#2 -- pbuc1_derefidx_vbuz1=vbuz2 + lda k + ldy idx_12 + sta SCREEN,y + //SEG42 [19] (byte) idx#13 ← ++ (byte) idx#12 -- vbuz1=_inc_vbuz1 + inc idx_13 + //SEG43 [20] (byte) main::k#1 ← -- (byte) main::k#2 -- vbuz1=_dec_vbuz1 + dec k + //SEG44 [21] if((byte) 0!=(byte) main::k#1) goto main::@6 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp k + bne b6_from_b6 + jmp breturn + //SEG45 main::@return + breturn: + //SEG46 [22] return + rts + //SEG47 main::@4 + b4: + //SEG48 [23] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) main::j#1 -- pbuc1_derefidx_vbuz1=vbuz2 + lda j + ldy idx_10 + sta SCREEN,y + //SEG49 [24] (byte) idx#3 ← ++ (byte) idx#10 -- vbuz1=_inc_vbuz1 + inc idx_3 + //SEG50 [12] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + b3_from_b4: + //SEG51 [12] phi (byte) idx#10 = (byte) idx#3 [phi:main::@4->main::@3#0] -- register_copy + //SEG52 [12] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@4->main::@3#1] -- register_copy + jmp b3 +} + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [10] *((const byte*) SCREEN#0 + (byte) idx#1) ← (byte) ' ' [ idx#1 ] ( main:2 [ idx#1 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ idx#8 idx#1 ] +Statement [15] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' [ idx#10 ] ( main:2 [ idx#10 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:5 [ idx#10 idx#2 idx#3 ] +Statement [10] *((const byte*) SCREEN#0 + (byte) idx#1) ← (byte) ' ' [ idx#1 ] ( main:2 [ idx#1 ] ) always clobbers reg byte a +Statement [15] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' [ idx#10 ] ( main:2 [ idx#10 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ idx#8 idx#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:4 [ main::j#2 main::j#1 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:5 [ idx#10 idx#2 idx#3 ] : zp ZP_BYTE:5 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:6 [ main::k#2 main::k#1 ] : zp ZP_BYTE:6 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:7 [ idx#12 idx#4 idx#13 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [main] 33: zp ZP_BYTE:4 [ main::j#2 main::j#1 ] 27.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 27.5: zp ZP_BYTE:6 [ main::k#2 main::k#1 ] +Uplift Scope [] 33.8: zp ZP_BYTE:5 [ idx#10 idx#2 idx#3 ] 28.83: zp ZP_BYTE:7 [ idx#12 idx#4 idx#13 ] 23: zp ZP_BYTE:3 [ idx#8 idx#1 ] + +Uplifting [main] best 1079 combination reg byte a [ main::j#2 main::j#1 ] reg byte x [ main::i#2 main::i#1 ] reg byte a [ main::k#2 main::k#1 ] +Uplifting [] best 851 combination reg byte y [ idx#10 idx#2 idx#3 ] reg byte y [ idx#12 idx#4 idx#13 ] reg byte y [ idx#8 idx#1 ] + +ASSEMBLER BEFORE OPTIMIZATION +//SEG0 File Comments +// Tests using integer conditions in while() / for() / do..while +// This should produce 'ba ba ba' at the top of the screen +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label SCREEN = $400 +//SEG3 @begin +bbegin: +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG5 @1 +b1: +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG9 @end +bend: +//SEG10 main +main: { + //SEG11 [5] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + //SEG12 [5] phi (byte) idx#8 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 + //SEG13 [5] phi (byte) main::i#2 = (byte) 2 [phi:main->main::@1#1] -- vbuxx=vbuc1 + ldx #2 + jmp b1 + // for() + //SEG14 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + b1_from_b1: + //SEG15 [5] phi (byte) idx#8 = (byte) idx#1 [phi:main::@1->main::@1#0] -- register_copy + //SEG16 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#1] -- register_copy + jmp b1 + //SEG17 main::@1 + b1: + //SEG18 [6] *((const byte*) SCREEN#0 + (byte) idx#8) ← (byte) main::i#2 -- pbuc1_derefidx_vbuyy=vbuxx + txa + sta SCREEN,y + //SEG19 [7] (byte) idx#1 ← ++ (byte) idx#8 -- vbuyy=_inc_vbuyy + iny + //SEG20 [8] (byte) main::i#1 ← -- (byte) main::i#2 -- vbuxx=_dec_vbuxx + dex + //SEG21 [9] if((byte) 0!=(byte) main::i#1) goto main::@1 -- vbuc1_neq_vbuxx_then_la1 + cpx #0 + bne b1_from_b1 + jmp b2 + //SEG22 main::@2 + b2: + //SEG23 [10] *((const byte*) SCREEN#0 + (byte) idx#1) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 + lda #' ' + sta SCREEN,y + //SEG24 [11] (byte) idx#2 ← ++ (byte) idx#1 -- vbuyy=_inc_vbuyy + iny + //SEG25 [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + b3_from_b2: + //SEG26 [12] phi (byte) idx#10 = (byte) idx#2 [phi:main::@2->main::@3#0] -- register_copy + //SEG27 [12] phi (byte) main::j#2 = (byte) 3 [phi:main::@2->main::@3#1] -- vbuaa=vbuc1 + lda #3 + jmp b3 + //SEG28 main::@3 + b3: + //SEG29 [13] (byte) main::j#1 ← -- (byte) main::j#2 -- vbuaa=_dec_vbuaa + sec + sbc #1 + //SEG30 [14] if((byte) 0!=(byte) main::j#1) goto main::@4 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne b4 + jmp b5 + //SEG31 main::@5 + b5: + //SEG32 [15] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 + lda #' ' + sta SCREEN,y + //SEG33 [16] (byte) idx#4 ← ++ (byte) idx#10 -- vbuyy=_inc_vbuyy + iny + //SEG34 [17] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + b6_from_b5: + //SEG35 [17] phi (byte) idx#12 = (byte) idx#4 [phi:main::@5->main::@6#0] -- register_copy + //SEG36 [17] phi (byte) main::k#2 = (byte) 2 [phi:main::@5->main::@6#1] -- vbuaa=vbuc1 + lda #2 + jmp b6 + //SEG37 [17] phi from main::@6 to main::@6 [phi:main::@6->main::@6] + b6_from_b6: + //SEG38 [17] phi (byte) idx#12 = (byte) idx#13 [phi:main::@6->main::@6#0] -- register_copy + //SEG39 [17] phi (byte) main::k#2 = (byte) main::k#1 [phi:main::@6->main::@6#1] -- register_copy + jmp b6 + //SEG40 main::@6 + b6: + //SEG41 [18] *((const byte*) SCREEN#0 + (byte) idx#12) ← (byte) main::k#2 -- pbuc1_derefidx_vbuyy=vbuaa + sta SCREEN,y + //SEG42 [19] (byte) idx#13 ← ++ (byte) idx#12 -- vbuyy=_inc_vbuyy + iny + //SEG43 [20] (byte) main::k#1 ← -- (byte) main::k#2 -- vbuaa=_dec_vbuaa + sec + sbc #1 + //SEG44 [21] if((byte) 0!=(byte) main::k#1) goto main::@6 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne b6_from_b6 + jmp breturn + //SEG45 main::@return + breturn: + //SEG46 [22] return + rts + //SEG47 main::@4 + b4: + //SEG48 [23] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) main::j#1 -- pbuc1_derefidx_vbuyy=vbuaa + sta SCREEN,y + //SEG49 [24] (byte) idx#3 ← ++ (byte) idx#10 -- vbuyy=_inc_vbuyy + iny + //SEG50 [12] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + b3_from_b4: + //SEG51 [12] phi (byte) idx#10 = (byte) idx#3 [phi:main::@4->main::@3#0] -- register_copy + //SEG52 [12] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@4->main::@3#1] -- register_copy + jmp b3 +} + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b1 +Removing instruction jmp bend +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp b5 +Removing instruction jmp b6 +Removing instruction jmp breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label b1_from_b1 with b1 +Replacing label b6_from_b6 with b6 +Removing instruction b1_from_bbegin: +Removing instruction b1: +Removing instruction main_from_b1: +Removing instruction bend_from_b1: +Removing instruction b1_from_b1: +Removing instruction b6_from_b6: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction bend: +Removing instruction b1_from_main: +Removing instruction b2: +Removing instruction b3_from_b2: +Removing instruction b5: +Removing instruction b6_from_b5: +Removing instruction breturn: +Removing instruction b3_from_b4: +Succesful ASM optimization Pass5UnusedLabelElimination +Updating BasicUpstart to call main directly +Removing instruction jsr main +Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b1 +Removing instruction jmp b6 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction bbegin: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(label) @1 +(label) @begin +(label) @end +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = (byte*) 1024 +(byte) idx +(byte) idx#1 reg byte y 6.5 +(byte) idx#10 reg byte y 7.8 +(byte) idx#12 reg byte y 17.5 +(byte) idx#13 reg byte y 7.333333333333333 +(byte) idx#2 reg byte y 4.0 +(byte) idx#3 reg byte y 22.0 +(byte) idx#4 reg byte y 4.0 +(byte) idx#8 reg byte y 16.5 +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@5 +(label) main::@6 +(label) main::@return +(byte) main::i +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#2 reg byte x 11.0 +(byte) main::j +(byte) main::j#1 reg byte a 11.0 +(byte) main::j#2 reg byte a 22.0 +(byte) main::k +(byte) main::k#1 reg byte a 16.5 +(byte) main::k#2 reg byte a 11.0 + +reg byte x [ main::i#2 main::i#1 ] +reg byte y [ idx#8 idx#1 ] +reg byte a [ main::j#2 main::j#1 ] +reg byte y [ idx#10 idx#2 idx#3 ] +reg byte a [ main::k#2 main::k#1 ] +reg byte y [ idx#12 idx#4 idx#13 ] + + +FINAL ASSEMBLER +Score: 599 + +//SEG0 File Comments +// Tests using integer conditions in while() / for() / do..while +// This should produce 'ba ba ba' at the top of the screen +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label SCREEN = $400 +//SEG3 @begin +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +//SEG5 @1 +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +//SEG9 @end +//SEG10 main +main: { + //SEG11 [5] phi from main to main::@1 [phi:main->main::@1] + //SEG12 [5] phi (byte) idx#8 = (byte) 0 [phi:main->main::@1#0] -- vbuyy=vbuc1 + ldy #0 + //SEG13 [5] phi (byte) main::i#2 = (byte) 2 [phi:main->main::@1#1] -- vbuxx=vbuc1 + ldx #2 + // for() + //SEG14 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + //SEG15 [5] phi (byte) idx#8 = (byte) idx#1 [phi:main::@1->main::@1#0] -- register_copy + //SEG16 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#1] -- register_copy + //SEG17 main::@1 + b1: + //SEG18 [6] *((const byte*) SCREEN#0 + (byte) idx#8) ← (byte) main::i#2 -- pbuc1_derefidx_vbuyy=vbuxx + txa + sta SCREEN,y + //SEG19 [7] (byte) idx#1 ← ++ (byte) idx#8 -- vbuyy=_inc_vbuyy + iny + //SEG20 [8] (byte) main::i#1 ← -- (byte) main::i#2 -- vbuxx=_dec_vbuxx + dex + //SEG21 [9] if((byte) 0!=(byte) main::i#1) goto main::@1 -- vbuc1_neq_vbuxx_then_la1 + cpx #0 + bne b1 + //SEG22 main::@2 + //SEG23 [10] *((const byte*) SCREEN#0 + (byte) idx#1) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 + lda #' ' + sta SCREEN,y + //SEG24 [11] (byte) idx#2 ← ++ (byte) idx#1 -- vbuyy=_inc_vbuyy + iny + //SEG25 [12] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + //SEG26 [12] phi (byte) idx#10 = (byte) idx#2 [phi:main::@2->main::@3#0] -- register_copy + //SEG27 [12] phi (byte) main::j#2 = (byte) 3 [phi:main::@2->main::@3#1] -- vbuaa=vbuc1 + lda #3 + //SEG28 main::@3 + b3: + //SEG29 [13] (byte) main::j#1 ← -- (byte) main::j#2 -- vbuaa=_dec_vbuaa + sec + sbc #1 + //SEG30 [14] if((byte) 0!=(byte) main::j#1) goto main::@4 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne b4 + //SEG31 main::@5 + //SEG32 [15] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) ' ' -- pbuc1_derefidx_vbuyy=vbuc2 + lda #' ' + sta SCREEN,y + //SEG33 [16] (byte) idx#4 ← ++ (byte) idx#10 -- vbuyy=_inc_vbuyy + iny + //SEG34 [17] phi from main::@5 to main::@6 [phi:main::@5->main::@6] + //SEG35 [17] phi (byte) idx#12 = (byte) idx#4 [phi:main::@5->main::@6#0] -- register_copy + //SEG36 [17] phi (byte) main::k#2 = (byte) 2 [phi:main::@5->main::@6#1] -- vbuaa=vbuc1 + lda #2 + //SEG37 [17] phi from main::@6 to main::@6 [phi:main::@6->main::@6] + //SEG38 [17] phi (byte) idx#12 = (byte) idx#13 [phi:main::@6->main::@6#0] -- register_copy + //SEG39 [17] phi (byte) main::k#2 = (byte) main::k#1 [phi:main::@6->main::@6#1] -- register_copy + //SEG40 main::@6 + b6: + //SEG41 [18] *((const byte*) SCREEN#0 + (byte) idx#12) ← (byte) main::k#2 -- pbuc1_derefidx_vbuyy=vbuaa + sta SCREEN,y + //SEG42 [19] (byte) idx#13 ← ++ (byte) idx#12 -- vbuyy=_inc_vbuyy + iny + //SEG43 [20] (byte) main::k#1 ← -- (byte) main::k#2 -- vbuaa=_dec_vbuaa + sec + sbc #1 + //SEG44 [21] if((byte) 0!=(byte) main::k#1) goto main::@6 -- vbuc1_neq_vbuaa_then_la1 + cmp #0 + bne b6 + //SEG45 main::@return + //SEG46 [22] return + rts + //SEG47 main::@4 + b4: + //SEG48 [23] *((const byte*) SCREEN#0 + (byte) idx#10) ← (byte) main::j#1 -- pbuc1_derefidx_vbuyy=vbuaa + sta SCREEN,y + //SEG49 [24] (byte) idx#3 ← ++ (byte) idx#10 -- vbuyy=_inc_vbuyy + iny + //SEG50 [12] phi from main::@4 to main::@3 [phi:main::@4->main::@3] + //SEG51 [12] phi (byte) idx#10 = (byte) idx#3 [phi:main::@4->main::@3#0] -- register_copy + //SEG52 [12] phi (byte) main::j#2 = (byte) main::j#1 [phi:main::@4->main::@3#1] -- register_copy + jmp b3 +} + diff --git a/src/test/ref/condition-integer-2.sym b/src/test/ref/condition-integer-2.sym new file mode 100644 index 000000000..1daabbadc --- /dev/null +++ b/src/test/ref/condition-integer-2.sym @@ -0,0 +1 @@ +program \ No newline at end of file diff --git a/src/test/ref/condition-integer-3.asm b/src/test/ref/condition-integer-3.asm new file mode 100644 index 000000000..45b12030f --- /dev/null +++ b/src/test/ref/condition-integer-3.asm @@ -0,0 +1,24 @@ +// Tests using integer conditions in ternary operator +// This should produce '++0++' at the top of the screen +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label SCREEN = $400 +main: { + ldx #0 + ldy #-2 + b1: + cpy #0 + bne b2 + lda #'0' + jmp b3 + b2: + lda #'+' + b3: + sta SCREEN,x + inx + iny + cpy #3 + bne b1 + rts +} diff --git a/src/test/ref/condition-integer-3.cfg b/src/test/ref/condition-integer-3.cfg new file mode 100644 index 000000000..ccd8c8740 --- /dev/null +++ b/src/test/ref/condition-integer-3.cfg @@ -0,0 +1,30 @@ +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@1 +main::@1: scope:[main] from main main::@3 + [5] (byte) main::idx#2 ← phi( main/(byte) 0 main::@3/(byte) main::idx#1 ) + [5] (signed byte) main::i#2 ← phi( main/(signed byte) -2 main::@3/(signed byte) main::i#1 ) + [6] if((signed byte) 0!=(signed byte) main::i#2) goto main::@2 + to:main::@3 +main::@2: scope:[main] from main::@1 + [7] phi() + to:main::@3 +main::@3: scope:[main] from main::@1 main::@2 + [8] (byte) main::j#0 ← phi( main::@2/(byte) '+' main::@1/(byte) '0' ) + [9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← (byte) main::j#0 + [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 + [11] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 + [12] if((signed byte) main::i#1!=(signed byte) 3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@3 + [13] return + to:@return diff --git a/src/test/ref/condition-integer-3.log b/src/test/ref/condition-integer-3.log new file mode 100644 index 000000000..eacbd03ef --- /dev/null +++ b/src/test/ref/condition-integer-3.log @@ -0,0 +1,507 @@ +Warning! Adding boolean cast to non-boolean condition (signed byte) main::i +Adding pointer type conversion cast (byte*) SCREEN in (byte*) SCREEN ← (number) $400 +Culled Empty Block (label) main::@5 +Culled Empty Block (label) main::@6 +Culled Empty Block (label) main::@7 + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + (byte*) SCREEN#0 ← ((byte*)) (number) $400 + to:@1 +main: scope:[main] from @1 + (byte) main::idx#0 ← (number) 0 + (signed byte) main::i#0 ← (signed byte) -2 + to:main::@1 +main::@1: scope:[main] from main main::@4 + (byte) main::idx#5 ← phi( main/(byte) main::idx#0 main::@4/(byte) main::idx#1 ) + (signed byte) main::i#2 ← phi( main/(signed byte) main::i#0 main::@4/(signed byte) main::i#1 ) + (bool~) main::$4 ← (number) 0 != (signed byte) main::i#2 + if((bool~) main::$4) goto main::@2 + to:main::@3 +main::@2: scope:[main] from main::@1 + (signed byte) main::i#4 ← phi( main::@1/(signed byte) main::i#2 ) + (byte) main::idx#3 ← phi( main::@1/(byte) main::idx#5 ) + (byte~) main::$1 ← (byte) '+' + to:main::@4 +main::@3: scope:[main] from main::@1 + (signed byte) main::i#5 ← phi( main::@1/(signed byte) main::i#2 ) + (byte) main::idx#4 ← phi( main::@1/(byte) main::idx#5 ) + (byte~) main::$0 ← (byte) '0' + to:main::@4 +main::@4: scope:[main] from main::@2 main::@3 + (signed byte) main::i#3 ← phi( main::@2/(signed byte) main::i#4 main::@3/(signed byte) main::i#5 ) + (byte) main::idx#2 ← phi( main::@2/(byte) main::idx#3 main::@3/(byte) main::idx#4 ) + (byte~) main::$2 ← phi( main::@2/(byte~) main::$1 main::@3/(byte~) main::$0 ) + (byte) main::j#0 ← (byte~) main::$2 + *((byte*) SCREEN#0 + (byte) main::idx#2) ← (byte) main::j#0 + (byte) main::idx#1 ← ++ (byte) main::idx#2 + (signed byte) main::i#1 ← (signed byte) main::i#3 + rangenext(-2,2) + (bool~) main::$3 ← (signed byte) main::i#1 != rangelast(-2,2) + if((bool~) main::$3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@4 + return + to:@return +@1: scope:[] from @begin + call main + to:@2 +@2: scope:[] from @1 + to:@end +@end: scope:[] from @2 + +SYMBOL TABLE SSA +(label) @1 +(label) @2 +(label) @begin +(label) @end +(byte*) SCREEN +(byte*) SCREEN#0 +(void()) main() +(byte~) main::$0 +(byte~) main::$1 +(byte~) main::$2 +(bool~) main::$3 +(bool~) main::$4 +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@4 +(label) main::@return +(signed byte) main::i +(signed byte) main::i#0 +(signed byte) main::i#1 +(signed byte) main::i#2 +(signed byte) main::i#3 +(signed byte) main::i#4 +(signed byte) main::i#5 +(byte) main::idx +(byte) main::idx#0 +(byte) main::idx#1 +(byte) main::idx#2 +(byte) main::idx#3 +(byte) main::idx#4 +(byte) main::idx#5 +(byte) main::j +(byte) main::j#0 + +Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 +Adding number conversion cast (snumber) 0 in (bool~) main::$4 ← (number) 0 != (signed byte) main::i#2 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 +Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Finalized signed number type (signed byte) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Alias (byte) main::idx#3 = (byte) main::idx#5 (byte) main::idx#4 +Alias (signed byte) main::i#2 = (signed byte) main::i#4 (signed byte) main::i#5 +Alias (byte) main::j#0 = (byte~) main::$2 +Successful SSA optimization Pass2AliasElimination +Alias (byte) main::idx#2 = (byte) main::idx#3 +Alias (signed byte) main::i#2 = (signed byte) main::i#3 +Successful SSA optimization Pass2AliasElimination +Simple Condition (bool~) main::$4 [5] if((signed byte) 0!=(signed byte) main::i#2) goto main::@2 +Simple Condition (bool~) main::$3 [16] if((signed byte) main::i#1!=rangelast(-2,2)) goto main::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant (const byte*) SCREEN#0 = (byte*) 1024 +Constant (const byte) main::idx#0 = 0 +Constant (const signed byte) main::i#0 = -2 +Constant (const byte) main::$1 = '+' +Constant (const byte) main::$0 = '0' +Successful SSA optimization Pass2ConstantIdentification +Resolved ranged next value [14] main::i#1 ← ++ main::i#2 to ++ +Resolved ranged comparison value [16] if(main::i#1!=rangelast(-2,2)) goto main::@1 to (number) 3 +Adding number conversion cast (snumber) 3 in if((signed byte) main::i#1!=(number) 3) goto main::@1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 3 +Successful SSA optimization PassNCastSimplification +Finalized signed number type (signed byte) 3 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inlining constant with var siblings (const byte) main::idx#0 +Inlining constant with var siblings (const signed byte) main::i#0 +Constant inlined main::i#0 = (signed byte) -2 +Constant inlined main::idx#0 = (byte) 0 +Constant inlined main::$1 = (byte) '+' +Constant inlined main::$0 = (byte) '0' +Successful SSA optimization Pass2ConstantInlining +Added new block during phi lifting main::@8(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 @end +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@3 +Adding NOP phi() at start of main::@2 +CALL GRAPH +Calls in [] to main:2 + +Created 3 initial phi equivalence classes +Coalesced [15] main::i#6 ← main::i#1 +Coalesced [16] main::idx#6 ← main::idx#1 +Coalesced down to 3 phi equivalence classes +Culled Empty Block (label) @2 +Culled Empty Block (label) main::@3 +Culled Empty Block (label) main::@8 +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 +Adding NOP phi() at start of main +Adding NOP phi() at start of main::@2 + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@1 +main::@1: scope:[main] from main main::@3 + [5] (byte) main::idx#2 ← phi( main/(byte) 0 main::@3/(byte) main::idx#1 ) + [5] (signed byte) main::i#2 ← phi( main/(signed byte) -2 main::@3/(signed byte) main::i#1 ) + [6] if((signed byte) 0!=(signed byte) main::i#2) goto main::@2 + to:main::@3 +main::@2: scope:[main] from main::@1 + [7] phi() + to:main::@3 +main::@3: scope:[main] from main::@1 main::@2 + [8] (byte) main::j#0 ← phi( main::@2/(byte) '+' main::@1/(byte) '0' ) + [9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← (byte) main::j#0 + [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 + [11] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 + [12] if((signed byte) main::i#1!=(signed byte) 3) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@3 + [13] return + to:@return + + +VARIABLE REGISTER WEIGHTS +(byte*) SCREEN +(void()) main() +(signed byte) main::i +(signed byte) main::i#1 16.5 +(signed byte) main::i#2 5.5 +(byte) main::idx +(byte) main::idx#1 7.333333333333333 +(byte) main::idx#2 6.6000000000000005 +(byte) main::j +(byte) main::j#0 11.0 + +Initial phi equivalence classes +[ main::i#2 main::i#1 ] +[ main::idx#2 main::idx#1 ] +[ main::j#0 ] +Complete equivalence classes +[ main::i#2 main::i#1 ] +[ main::idx#2 main::idx#1 ] +[ main::j#0 ] +Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::idx#2 main::idx#1 ] +Allocated zp ZP_BYTE:4 [ main::j#0 ] + +INITIAL ASM +//SEG0 File Comments +// Tests using integer conditions in ternary operator +// This should produce '++0++' at the top of the screen +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label SCREEN = $400 +//SEG3 @begin +bbegin: +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG5 @1 +b1: +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG9 @end +bend: +//SEG10 main +main: { + .label j = 4 + .label idx = 3 + .label i = 2 + //SEG11 [5] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + //SEG12 [5] phi (byte) main::idx#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta idx + //SEG13 [5] phi (signed byte) main::i#2 = (signed byte) -2 [phi:main->main::@1#1] -- vbsz1=vbsc1 + lda #-2 + sta i + jmp b1 + //SEG14 [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + b1_from_b3: + //SEG15 [5] phi (byte) main::idx#2 = (byte) main::idx#1 [phi:main::@3->main::@1#0] -- register_copy + //SEG16 [5] phi (signed byte) main::i#2 = (signed byte) main::i#1 [phi:main::@3->main::@1#1] -- register_copy + jmp b1 + //SEG17 main::@1 + b1: + //SEG18 [6] if((signed byte) 0!=(signed byte) main::i#2) goto main::@2 -- vbsc1_neq_vbsz1_then_la1 + lda #0 + cmp i + bne b2_from_b1 + //SEG19 [8] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + b3_from_b1: + //SEG20 [8] phi (byte) main::j#0 = (byte) '0' [phi:main::@1->main::@3#0] -- vbuz1=vbuc1 + lda #'0' + sta j + jmp b3 + //SEG21 [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + jmp b2 + //SEG22 main::@2 + b2: + //SEG23 [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + b3_from_b2: + //SEG24 [8] phi (byte) main::j#0 = (byte) '+' [phi:main::@2->main::@3#0] -- vbuz1=vbuc1 + lda #'+' + sta j + jmp b3 + //SEG25 main::@3 + b3: + //SEG26 [9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← (byte) main::j#0 -- pbuc1_derefidx_vbuz1=vbuz2 + lda j + ldy idx + sta SCREEN,y + //SEG27 [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 -- vbuz1=_inc_vbuz1 + inc idx + //SEG28 [11] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 -- vbsz1=_inc_vbsz1 + inc i + //SEG29 [12] if((signed byte) main::i#1!=(signed byte) 3) goto main::@1 -- vbsz1_neq_vbsc1_then_la1 + lda #3 + cmp i + bne b1_from_b3 + jmp breturn + //SEG30 main::@return + breturn: + //SEG31 [13] return + rts +} + +REGISTER UPLIFT POTENTIAL REGISTERS +Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::idx#2 main::idx#1 ] : zp ZP_BYTE:3 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:4 [ main::j#0 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [main] 22: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] 13.93: zp ZP_BYTE:3 [ main::idx#2 main::idx#1 ] 11: zp ZP_BYTE:4 [ main::j#0 ] +Uplift Scope [] + +Uplifting [main] best 458 combination reg byte y [ main::i#2 main::i#1 ] reg byte x [ main::idx#2 main::idx#1 ] reg byte a [ main::j#0 ] +Uplifting [] best 458 combination + +ASSEMBLER BEFORE OPTIMIZATION +//SEG0 File Comments +// Tests using integer conditions in ternary operator +// This should produce '++0++' at the top of the screen +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label SCREEN = $400 +//SEG3 @begin +bbegin: +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG5 @1 +b1: +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG9 @end +bend: +//SEG10 main +main: { + //SEG11 [5] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + //SEG12 [5] phi (byte) main::idx#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + ldx #0 + //SEG13 [5] phi (signed byte) main::i#2 = (signed byte) -2 [phi:main->main::@1#1] -- vbsyy=vbsc1 + ldy #-2 + jmp b1 + //SEG14 [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + b1_from_b3: + //SEG15 [5] phi (byte) main::idx#2 = (byte) main::idx#1 [phi:main::@3->main::@1#0] -- register_copy + //SEG16 [5] phi (signed byte) main::i#2 = (signed byte) main::i#1 [phi:main::@3->main::@1#1] -- register_copy + jmp b1 + //SEG17 main::@1 + b1: + //SEG18 [6] if((signed byte) 0!=(signed byte) main::i#2) goto main::@2 -- vbsc1_neq_vbsyy_then_la1 + cpy #0 + bne b2_from_b1 + //SEG19 [8] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + b3_from_b1: + //SEG20 [8] phi (byte) main::j#0 = (byte) '0' [phi:main::@1->main::@3#0] -- vbuaa=vbuc1 + lda #'0' + jmp b3 + //SEG21 [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + b2_from_b1: + jmp b2 + //SEG22 main::@2 + b2: + //SEG23 [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + b3_from_b2: + //SEG24 [8] phi (byte) main::j#0 = (byte) '+' [phi:main::@2->main::@3#0] -- vbuaa=vbuc1 + lda #'+' + jmp b3 + //SEG25 main::@3 + b3: + //SEG26 [9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← (byte) main::j#0 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN,x + //SEG27 [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 -- vbuxx=_inc_vbuxx + inx + //SEG28 [11] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 -- vbsyy=_inc_vbsyy + iny + //SEG29 [12] if((signed byte) main::i#1!=(signed byte) 3) goto main::@1 -- vbsyy_neq_vbsc1_then_la1 + cpy #3 + bne b1_from_b3 + jmp breturn + //SEG30 main::@return + breturn: + //SEG31 [13] return + rts +} + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b1 +Removing instruction jmp bend +Removing instruction jmp b1 +Removing instruction jmp b2 +Removing instruction jmp b3 +Removing instruction jmp breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label b2_from_b1 with b2 +Replacing label b1_from_b3 with b1 +Removing instruction b1_from_bbegin: +Removing instruction b1: +Removing instruction main_from_b1: +Removing instruction bend_from_b1: +Removing instruction b1_from_b3: +Removing instruction b2_from_b1: +Removing instruction b3_from_b2: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction bend: +Removing instruction b1_from_main: +Removing instruction b3_from_b1: +Removing instruction breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Updating BasicUpstart to call main directly +Removing instruction jsr main +Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b1 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction bbegin: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(label) @1 +(label) @begin +(label) @end +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = (byte*) 1024 +(void()) main() +(label) main::@1 +(label) main::@2 +(label) main::@3 +(label) main::@return +(signed byte) main::i +(signed byte) main::i#1 reg byte y 16.5 +(signed byte) main::i#2 reg byte y 5.5 +(byte) main::idx +(byte) main::idx#1 reg byte x 7.333333333333333 +(byte) main::idx#2 reg byte x 6.6000000000000005 +(byte) main::j +(byte) main::j#0 reg byte a 11.0 + +reg byte y [ main::i#2 main::i#1 ] +reg byte x [ main::idx#2 main::idx#1 ] +reg byte a [ main::j#0 ] + + +FINAL ASSEMBLER +Score: 296 + +//SEG0 File Comments +// Tests using integer conditions in ternary operator +// This should produce '++0++' at the top of the screen +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label SCREEN = $400 +//SEG3 @begin +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +//SEG5 @1 +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +//SEG9 @end +//SEG10 main +main: { + //SEG11 [5] phi from main to main::@1 [phi:main->main::@1] + //SEG12 [5] phi (byte) main::idx#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + ldx #0 + //SEG13 [5] phi (signed byte) main::i#2 = (signed byte) -2 [phi:main->main::@1#1] -- vbsyy=vbsc1 + ldy #-2 + //SEG14 [5] phi from main::@3 to main::@1 [phi:main::@3->main::@1] + //SEG15 [5] phi (byte) main::idx#2 = (byte) main::idx#1 [phi:main::@3->main::@1#0] -- register_copy + //SEG16 [5] phi (signed byte) main::i#2 = (signed byte) main::i#1 [phi:main::@3->main::@1#1] -- register_copy + //SEG17 main::@1 + b1: + //SEG18 [6] if((signed byte) 0!=(signed byte) main::i#2) goto main::@2 -- vbsc1_neq_vbsyy_then_la1 + cpy #0 + bne b2 + //SEG19 [8] phi from main::@1 to main::@3 [phi:main::@1->main::@3] + //SEG20 [8] phi (byte) main::j#0 = (byte) '0' [phi:main::@1->main::@3#0] -- vbuaa=vbuc1 + lda #'0' + jmp b3 + //SEG21 [7] phi from main::@1 to main::@2 [phi:main::@1->main::@2] + //SEG22 main::@2 + b2: + //SEG23 [8] phi from main::@2 to main::@3 [phi:main::@2->main::@3] + //SEG24 [8] phi (byte) main::j#0 = (byte) '+' [phi:main::@2->main::@3#0] -- vbuaa=vbuc1 + lda #'+' + //SEG25 main::@3 + b3: + //SEG26 [9] *((const byte*) SCREEN#0 + (byte) main::idx#2) ← (byte) main::j#0 -- pbuc1_derefidx_vbuxx=vbuaa + sta SCREEN,x + //SEG27 [10] (byte) main::idx#1 ← ++ (byte) main::idx#2 -- vbuxx=_inc_vbuxx + inx + //SEG28 [11] (signed byte) main::i#1 ← ++ (signed byte) main::i#2 -- vbsyy=_inc_vbsyy + iny + //SEG29 [12] if((signed byte) main::i#1!=(signed byte) 3) goto main::@1 -- vbsyy_neq_vbsc1_then_la1 + cpy #3 + bne b1 + //SEG30 main::@return + //SEG31 [13] return + rts +} + diff --git a/src/test/ref/condition-integer-3.sym b/src/test/ref/condition-integer-3.sym new file mode 100644 index 000000000..1daabbadc --- /dev/null +++ b/src/test/ref/condition-integer-3.sym @@ -0,0 +1 @@ +program \ No newline at end of file diff --git a/src/test/ref/condition-integer-4.asm b/src/test/ref/condition-integer-4.asm new file mode 100644 index 000000000..4603bde58 --- /dev/null +++ b/src/test/ref/condition-integer-4.asm @@ -0,0 +1,63 @@ +// Tests using integer conditions in && and || operator +// This should produce '01010101', '00110011', '00010001', '01110111' at the top of the screen +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" + .label SCREEN = $400 +main: { + .label _8 = 2 + .label _9 = 3 + .label _14 = 4 + .label _15 = 5 + ldx #0 + ldy #0 + b1: + tya + and #1 + cmp #0 + beq b2 + lda #'+' + sta SCREEN,x + b2: + tya + and #2 + cmp #0 + beq b3 + lda #'+' + sta SCREEN+$28*1,x + b3: + tya + and #1 + sta _8 + tya + and #2 + sta _9 + lda #0 + cmp _8 + beq b4 + cmp _9 + beq b4 + lda #'+' + sta SCREEN+$28*2,x + b4: + tya + and #1 + sta _14 + tya + and #2 + sta _15 + lda #0 + cmp _14 + bne b9 + cmp _15 + beq b5 + b9: + lda #'+' + sta SCREEN+$28*3,x + b5: + inx + iny + cpy #8 + bne b1 + rts +} diff --git a/src/test/ref/condition-integer-4.cfg b/src/test/ref/condition-integer-4.cfg new file mode 100644 index 000000000..62b436325 --- /dev/null +++ b/src/test/ref/condition-integer-4.cfg @@ -0,0 +1,58 @@ +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@1 +main::@1: scope:[main] from main main::@5 + [5] (byte) main::idx#10 ← phi( main/(byte) 0 main::@5/(byte) main::idx#1 ) + [5] (byte) main::i#10 ← phi( main/(byte) 0 main::@5/(byte) main::i#1 ) + [6] (byte~) main::$0 ← (byte) main::i#10 & (byte) 1 + [7] if((byte) 0==(byte~) main::$0) goto main::@2 + to:main::@6 +main::@6: scope:[main] from main::@1 + [8] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' + to:main::@2 +main::@2: scope:[main] from main::@1 main::@6 + [9] (byte~) main::$4 ← (byte) main::i#10 & (byte) 2 + [10] if((byte) 0==(byte~) main::$4) goto main::@3 + to:main::@7 +main::@7: scope:[main] from main::@2 + [11] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) main::idx#10) ← (byte) '+' + to:main::@3 +main::@3: scope:[main] from main::@2 main::@7 + [12] (byte~) main::$8 ← (byte) main::i#10 & (byte) 1 + [13] (byte~) main::$9 ← (byte) main::i#10 & (byte) 2 + [14] if((byte) 0==(byte~) main::$8) goto main::@4 + to:main::@10 +main::@10: scope:[main] from main::@3 + [15] if((byte) 0==(byte~) main::$9) goto main::@4 + to:main::@8 +main::@8: scope:[main] from main::@10 + [16] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::idx#10) ← (byte) '+' + to:main::@4 +main::@4: scope:[main] from main::@10 main::@3 main::@8 + [17] (byte~) main::$14 ← (byte) main::i#10 & (byte) 1 + [18] (byte~) main::$15 ← (byte) main::i#10 & (byte) 2 + [19] if((byte) 0!=(byte~) main::$14) goto main::@9 + to:main::@11 +main::@11: scope:[main] from main::@4 + [20] if((byte) 0==(byte~) main::$15) goto main::@5 + to:main::@9 +main::@9: scope:[main] from main::@11 main::@4 + [21] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) main::idx#10) ← (byte) '+' + to:main::@5 +main::@5: scope:[main] from main::@11 main::@9 + [22] (byte) main::idx#1 ← ++ (byte) main::idx#10 + [23] (byte) main::i#1 ← ++ (byte) main::i#10 + [24] if((byte) main::i#1!=(byte) 8) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@5 + [25] return + to:@return diff --git a/src/test/ref/condition-integer-4.log b/src/test/ref/condition-integer-4.log new file mode 100644 index 000000000..1db715e74 --- /dev/null +++ b/src/test/ref/condition-integer-4.log @@ -0,0 +1,1026 @@ +Warning! Adding boolean cast to non-boolean sub-expression (number~) main::$0 +Warning! Adding boolean cast to non-boolean sub-expression (number~) main::$4 +Adding pointer type conversion cast (byte*) SCREEN in (byte*) SCREEN ← (number) $400 +Culled Empty Block (label) main::@10 + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + (byte*) SCREEN#0 ← ((byte*)) (number) $400 + to:@1 +main: scope:[main] from @1 + (byte) main::idx#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 + to:main::@1 +main::@1: scope:[main] from main main::@5 + (byte) main::idx#7 ← phi( main/(byte) main::idx#0 main::@5/(byte) main::idx#1 ) + (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@5/(byte) main::i#1 ) + (number~) main::$0 ← (byte) main::i#2 & (number) 1 + (bool~) main::$21 ← (number) 0 != (number~) main::$0 + (bool~) main::$1 ← ! (bool~) main::$21 + if((bool~) main::$1) goto main::@2 + to:main::@6 +main::@2: scope:[main] from main::@1 main::@6 + (byte) main::idx#8 ← phi( main::@1/(byte) main::idx#7 main::@6/(byte) main::idx#2 ) + (byte) main::i#3 ← phi( main::@1/(byte) main::i#2 main::@6/(byte) main::i#7 ) + (number~) main::$4 ← (byte) main::i#3 & (number) 2 + (bool~) main::$22 ← (number) 0 != (number~) main::$4 + (bool~) main::$5 ← ! (bool~) main::$22 + if((bool~) main::$5) goto main::@3 + to:main::@7 +main::@6: scope:[main] from main::@1 + (byte) main::i#7 ← phi( main::@1/(byte) main::i#2 ) + (byte) main::idx#2 ← phi( main::@1/(byte) main::idx#7 ) + (number~) main::$2 ← (number) $28 * (number) 0 + (byte*~) main::$3 ← (byte*) SCREEN#0 + (number~) main::$2 + *((byte*~) main::$3 + (byte) main::idx#2) ← (byte) '+' + to:main::@2 +main::@3: scope:[main] from main::@2 main::@7 + (byte) main::idx#9 ← phi( main::@2/(byte) main::idx#8 main::@7/(byte) main::idx#3 ) + (byte) main::i#4 ← phi( main::@2/(byte) main::i#3 main::@7/(byte) main::i#8 ) + (number~) main::$8 ← (byte) main::i#4 & (number) 1 + (number~) main::$9 ← (byte) main::i#4 & (number) 2 + (bool~) main::$10 ← (number~) main::$8 && (number~) main::$9 + (bool~) main::$11 ← ! (bool~) main::$10 + if((bool~) main::$11) goto main::@4 + to:main::@8 +main::@7: scope:[main] from main::@2 + (byte) main::i#8 ← phi( main::@2/(byte) main::i#3 ) + (byte) main::idx#3 ← phi( main::@2/(byte) main::idx#8 ) + (number~) main::$6 ← (number) $28 * (number) 1 + (byte*~) main::$7 ← (byte*) SCREEN#0 + (number~) main::$6 + *((byte*~) main::$7 + (byte) main::idx#3) ← (byte) '+' + to:main::@3 +main::@4: scope:[main] from main::@3 main::@8 + (byte) main::idx#10 ← phi( main::@3/(byte) main::idx#9 main::@8/(byte) main::idx#4 ) + (byte) main::i#5 ← phi( main::@3/(byte) main::i#4 main::@8/(byte) main::i#9 ) + (number~) main::$14 ← (byte) main::i#5 & (number) 1 + (number~) main::$15 ← (byte) main::i#5 & (number) 2 + (bool~) main::$16 ← (number~) main::$14 || (number~) main::$15 + (bool~) main::$17 ← ! (bool~) main::$16 + if((bool~) main::$17) goto main::@5 + to:main::@9 +main::@8: scope:[main] from main::@3 + (byte) main::i#9 ← phi( main::@3/(byte) main::i#4 ) + (byte) main::idx#4 ← phi( main::@3/(byte) main::idx#9 ) + (number~) main::$12 ← (number) $28 * (number) 2 + (byte*~) main::$13 ← (byte*) SCREEN#0 + (number~) main::$12 + *((byte*~) main::$13 + (byte) main::idx#4) ← (byte) '+' + to:main::@4 +main::@5: scope:[main] from main::@4 main::@9 + (byte) main::i#6 ← phi( main::@4/(byte) main::i#5 main::@9/(byte) main::i#10 ) + (byte) main::idx#5 ← phi( main::@4/(byte) main::idx#10 main::@9/(byte) main::idx#6 ) + (byte) main::idx#1 ← ++ (byte) main::idx#5 + (byte) main::i#1 ← (byte) main::i#6 + rangenext(0,7) + (bool~) main::$20 ← (byte) main::i#1 != rangelast(0,7) + if((bool~) main::$20) goto main::@1 + to:main::@return +main::@9: scope:[main] from main::@4 + (byte) main::i#10 ← phi( main::@4/(byte) main::i#5 ) + (byte) main::idx#6 ← phi( main::@4/(byte) main::idx#10 ) + (number~) main::$18 ← (number) $28 * (number) 3 + (byte*~) main::$19 ← (byte*) SCREEN#0 + (number~) main::$18 + *((byte*~) main::$19 + (byte) main::idx#6) ← (byte) '+' + to:main::@5 +main::@return: scope:[main] from main::@5 + return + to:@return +@1: scope:[] from @begin + call main + to:@2 +@2: scope:[] from @1 + to:@end +@end: scope:[] from @2 + +SYMBOL TABLE SSA +(label) @1 +(label) @2 +(label) @begin +(label) @end +(byte*) SCREEN +(byte*) SCREEN#0 +(void()) main() +(number~) main::$0 +(bool~) main::$1 +(bool~) main::$10 +(bool~) main::$11 +(number~) main::$12 +(byte*~) main::$13 +(number~) main::$14 +(number~) main::$15 +(bool~) main::$16 +(bool~) main::$17 +(number~) main::$18 +(byte*~) main::$19 +(number~) main::$2 +(bool~) main::$20 +(bool~) main::$21 +(bool~) main::$22 +(byte*~) main::$3 +(number~) main::$4 +(bool~) main::$5 +(number~) main::$6 +(byte*~) main::$7 +(number~) main::$8 +(number~) main::$9 +(label) main::@1 +(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 +(byte) main::i +(byte) main::i#0 +(byte) main::i#1 +(byte) main::i#10 +(byte) main::i#2 +(byte) main::i#3 +(byte) main::i#4 +(byte) main::i#5 +(byte) main::i#6 +(byte) main::i#7 +(byte) main::i#8 +(byte) main::i#9 +(byte) main::idx +(byte) main::idx#0 +(byte) main::idx#1 +(byte) main::idx#10 +(byte) main::idx#2 +(byte) main::idx#3 +(byte) main::idx#4 +(byte) main::idx#5 +(byte) main::idx#6 +(byte) main::idx#7 +(byte) main::idx#8 +(byte) main::idx#9 + +Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 +Adding number conversion cast (unumber) 1 in (number~) main::$0 ← (byte) main::i#2 & (number) 1 +Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::i#2 & (unumber)(number) 1 +Adding number conversion cast (unumber) 0 in (bool~) main::$21 ← (number) 0 != (unumber~) main::$0 +Adding number conversion cast (unumber) 2 in (number~) main::$4 ← (byte) main::i#3 & (number) 2 +Adding number conversion cast (unumber) main::$4 in (number~) main::$4 ← (byte) main::i#3 & (unumber)(number) 2 +Adding number conversion cast (unumber) 0 in (bool~) main::$22 ← (number) 0 != (unumber~) main::$4 +Adding number conversion cast (unumber) main::$2 in (byte*~) main::$3 ← (byte*) SCREEN#0 + (number~) main::$2 +Adding number conversion cast (unumber) 1 in (number~) main::$8 ← (byte) main::i#4 & (number) 1 +Adding number conversion cast (unumber) main::$8 in (number~) main::$8 ← (byte) main::i#4 & (unumber)(number) 1 +Adding number conversion cast (unumber) 2 in (number~) main::$9 ← (byte) main::i#4 & (number) 2 +Adding number conversion cast (unumber) main::$9 in (number~) main::$9 ← (byte) main::i#4 & (unumber)(number) 2 +Adding number conversion cast (unumber) main::$6 in (byte*~) main::$7 ← (byte*) SCREEN#0 + (number~) main::$6 +Adding number conversion cast (unumber) 1 in (number~) main::$14 ← (byte) main::i#5 & (number) 1 +Adding number conversion cast (unumber) main::$14 in (number~) main::$14 ← (byte) main::i#5 & (unumber)(number) 1 +Adding number conversion cast (unumber) 2 in (number~) main::$15 ← (byte) main::i#5 & (number) 2 +Adding number conversion cast (unumber) main::$15 in (number~) main::$15 ← (byte) main::i#5 & (unumber)(number) 2 +Adding number conversion cast (unumber) main::$12 in (byte*~) main::$13 ← (byte*) SCREEN#0 + (number~) main::$12 +Adding number conversion cast (unumber) main::$18 in (byte*~) main::$19 ← (byte*) SCREEN#0 + (number~) main::$18 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 +Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 +Inlining cast (unumber~) main::$23 ← (unumber)(number~) main::$2 +Inlining cast (unumber~) main::$24 ← (unumber)(number~) main::$6 +Inlining cast (unumber~) main::$25 ← (unumber)(number~) main::$12 +Inlining cast (unumber~) main::$26 ← (unumber)(number~) main::$18 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (byte*) 1024 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 0 +Simplifying constant integer cast 2 +Simplifying constant integer cast 0 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Simplifying constant integer cast 1 +Simplifying constant integer cast 2 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 2 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 2 +Finalized unsigned number type (byte) 1 +Finalized unsigned number type (byte) 2 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to byte in (unumber~) main::$0 ← (byte) main::i#2 & (byte) 1 +Inferred type updated to byte in (unumber~) main::$4 ← (byte) main::i#3 & (byte) 2 +Inferred type updated to byte in (unumber~) main::$8 ← (byte) main::i#4 & (byte) 1 +Inferred type updated to byte in (unumber~) main::$9 ← (byte) main::i#4 & (byte) 2 +Inferred type updated to byte in (unumber~) main::$14 ← (byte) main::i#5 & (byte) 1 +Inferred type updated to byte in (unumber~) main::$15 ← (byte) main::i#5 & (byte) 2 +Inversing boolean not [6] (bool~) main::$1 ← (byte) 0 == (byte~) main::$0 from [5] (bool~) main::$21 ← (byte) 0 != (byte~) main::$0 +Inversing boolean not [11] (bool~) main::$5 ← (byte) 0 == (byte~) main::$4 from [10] (bool~) main::$22 ← (byte) 0 != (byte~) main::$4 +Successful SSA optimization Pass2UnaryNotSimplification +Alias (byte) main::idx#2 = (byte) main::idx#7 +Alias (byte) main::i#2 = (byte) main::i#7 +Alias (byte) main::idx#3 = (byte) main::idx#8 +Alias (byte) main::i#3 = (byte) main::i#8 +Alias (byte) main::idx#4 = (byte) main::idx#9 +Alias (byte) main::i#4 = (byte) main::i#9 +Alias (byte) main::idx#10 = (byte) main::idx#6 +Alias (byte) main::i#10 = (byte) main::i#5 +Successful SSA optimization Pass2AliasElimination +Alias (byte) main::i#10 = (byte) main::i#3 (byte) main::i#2 (byte) main::i#4 (byte) main::i#6 +Alias (byte) main::idx#10 = (byte) main::idx#3 (byte) main::idx#2 (byte) main::idx#4 (byte) main::idx#5 +Successful SSA optimization Pass2AliasElimination +Simple Condition (bool~) main::$1 [7] if((byte) 0==(byte~) main::$0) goto main::@2 +Simple Condition (bool~) main::$5 [12] if((byte) 0==(byte~) main::$4) goto main::@3 +Simple Condition (bool~) main::$20 [44] if((byte) main::i#1!=rangelast(0,7)) goto main::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Rewriting ! if()-condition to reversed if() [22] (bool~) main::$11 ← ! (bool~) main::$10 +Successful SSA optimization Pass2ConditionalAndOrRewriting +Rewriting && if()-condition to two if()s [21] (bool~) main::$10 ← (byte~) main::$8 && (byte~) main::$9 +Successful SSA optimization Pass2ConditionalAndOrRewriting +Rewriting ! if()-condition to reversed if() [33] (bool~) main::$17 ← ! (bool~) main::$16 +Successful SSA optimization Pass2ConditionalAndOrRewriting +Rewriting || if()-condition to two if()s [32] (bool~) main::$16 ← (byte~) main::$14 || (byte~) main::$15 +Successful SSA optimization Pass2ConditionalAndOrRewriting +Warning! Adding boolean cast to non-boolean condition (byte~) main::$8 +Warning! Adding boolean cast to non-boolean condition (byte~) main::$14 +Warning! Adding boolean cast to non-boolean condition (byte~) main::$9 +Warning! Adding boolean cast to non-boolean condition (byte~) main::$15 +Constant right-side identified [14] (number~) main::$2 ← (number) $28 * (number) 0 +Constant right-side identified [25] (number~) main::$6 ← (number) $28 * (number) 1 +Constant right-side identified [36] (number~) main::$12 ← (number) $28 * (number) 2 +Constant right-side identified [46] (number~) main::$18 ← (number) $28 * (number) 3 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte*) SCREEN#0 = (byte*) 1024 +Constant (const byte) main::idx#0 = 0 +Constant (const byte) main::i#0 = 0 +Constant (const number) main::$2 = $28*0 +Constant (const number) main::$6 = $28*1 +Constant (const number) main::$12 = $28*2 +Constant (const number) main::$18 = $28*3 +Successful SSA optimization Pass2ConstantIdentification +Constant value identified (unumber)main::$2 in [15] (unumber~) main::$23 ← (unumber)(const number) main::$2 +Constant value identified (unumber)main::$6 in [26] (unumber~) main::$24 ← (unumber)(const number) main::$6 +Constant value identified (unumber)main::$12 in [37] (unumber~) main::$25 ← (unumber)(const number) main::$12 +Constant value identified (unumber)main::$18 in [47] (unumber~) main::$26 ← (unumber)(const number) main::$18 +Successful SSA optimization Pass2ConstantValues +Resolved ranged next value [42] main::i#1 ← ++ main::i#10 to ++ +Resolved ranged comparison value [44] if(main::i#1!=rangelast(0,7)) goto main::@1 to (number) 8 +Simplifying constant evaluating to zero (number) $28*(number) 0 in +Simplifying constant evaluating to zero (unumber)(const number) main::$2 in [15] (unumber~) main::$23 ← (unumber)(const number) main::$2 +Successful SSA optimization PassNSimplifyConstantZero +Eliminating unused constant (const number) main::$2 +Successful SSA optimization PassNEliminateUnusedVars +Adding number conversion cast (unumber) 0 in (bool~) main::$27 ← (number) 0 != (byte~) main::$8 +Adding number conversion cast (unumber) 0 in (bool~) main::$28 ← (number) 0 != (byte~) main::$14 +Adding number conversion cast (unumber) 8 in if((byte) main::i#1!=(number) 8) goto main::@1 +Adding number conversion cast (unumber) 0 in (bool~) main::$29 ← (number) 0 != (byte~) main::$9 +Adding number conversion cast (unumber) 0 in (bool~) main::$30 ← (number) 0 != (byte~) main::$15 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Simplifying constant integer cast 8 +Simplifying constant integer cast 0 +Simplifying constant integer cast 0 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 8 +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to byte in (unumber~) main::$23 ← (byte) 0 +Simple Condition (bool~) main::$27 [11] if((byte) 0!=(byte~) main::$8) goto main::@11 +Simple Condition (bool~) main::$28 [18] if((byte) 0!=(byte~) main::$14) goto main::@9 +Simple Condition (bool~) main::$29 [31] if((byte) 0!=(byte~) main::$9) goto main::@8 +Simple Condition (bool~) main::$30 [33] if((byte) 0!=(byte~) main::$15) goto main::@9 +Successful SSA optimization Pass2ConditionalJumpSimplification +Negating conditional jump and destination [11] if((byte) 0==(byte~) main::$8) goto main::@4 +Negating conditional jump and destination [31] if((byte) 0==(byte~) main::$9) goto main::@4 +Negating conditional jump and destination [33] if((byte) 0==(byte~) main::$15) goto main::@5 +Successful SSA optimization Pass2ConditionalJumpSequenceImprovement +Constant (const byte) main::$23 = 0 +Constant (const unumber) main::$24 = (unumber)main::$6 +Constant (const unumber) main::$25 = (unumber)main::$12 +Constant (const unumber) main::$26 = (unumber)main::$18 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero SCREEN#0 in [6] (byte*~) main::$3 ← (const byte*) SCREEN#0 + (const byte) main::$23 +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant (const byte) main::$23 +Successful SSA optimization PassNEliminateUnusedVars +Simplifying constant integer cast (const unumber) main::$6 +Simplifying constant integer cast (const unumber) main::$12 +Simplifying constant integer cast (const unumber) main::$18 +Successful SSA optimization PassNCastSimplification +Constant right-side identified [10] (byte*~) main::$7 ← (const byte*) SCREEN#0 + (const unumber) main::$24 +Constant right-side identified [15] (byte*~) main::$13 ← (const byte*) SCREEN#0 + (const unumber) main::$25 +Constant right-side identified [20] (byte*~) main::$19 ← (const byte*) SCREEN#0 + (const unumber) main::$26 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte*) main::$3 = SCREEN#0 +Constant (const byte*) main::$7 = SCREEN#0+main::$24 +Constant (const byte*) main::$13 = SCREEN#0+main::$25 +Constant (const byte*) main::$19 = SCREEN#0+main::$26 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with var siblings (const byte) main::idx#0 +Inlining constant with var siblings (const byte) main::i#0 +Constant inlined main::idx#0 = (byte) 0 +Constant inlined main::$18 = (number) $28*(number) 3 +Constant inlined main::$19 = (const byte*) SCREEN#0+(number) $28*(number) 3 +Constant inlined main::$12 = (number) $28*(number) 2 +Constant inlined main::i#0 = (byte) 0 +Constant inlined main::$6 = (number) $28*(number) 1 +Constant inlined main::$24 = (number) $28*(number) 1 +Constant inlined main::$13 = (const byte*) SCREEN#0+(number) $28*(number) 2 +Constant inlined main::$3 = (const byte*) SCREEN#0 +Constant inlined main::$25 = (number) $28*(number) 2 +Constant inlined main::$26 = (number) $28*(number) 3 +Constant inlined main::$7 = (const byte*) SCREEN#0+(number) $28*(number) 1 +Successful SSA optimization Pass2ConstantInlining +Adding number conversion cast (unumber) $28*1 in [9] *((const byte*) SCREEN#0+(number) $28*(number) 1 + (byte) main::idx#10) ← (byte) '+' +Adding number conversion cast (unumber) $28*2 in [13] *((const byte*) SCREEN#0+(number) $28*(number) 2 + (byte) main::idx#10) ← (byte) '+' +Adding number conversion cast (unumber) $28*3 in [17] *((const byte*) SCREEN#0+(number) $28*(number) 3 + (byte) main::idx#10) ← (byte) '+' +Successful SSA optimization PassNAddNumberTypeConversions +Added new block during phi lifting main::@13(between main::@5 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 @end +Adding NOP phi() at start of main +CALL GRAPH +Calls in [] to main:2 + +Created 2 initial phi equivalence classes +Coalesced [27] main::i#11 ← main::i#1 +Coalesced [28] main::idx#11 ← main::idx#1 +Coalesced down to 2 phi equivalence classes +Culled Empty Block (label) @2 +Culled Empty Block (label) main::@13 +Renumbering block main::@11 to main::@10 +Renumbering block main::@12 to main::@11 +Adding NOP phi() at start of @begin +Adding NOP phi() at start of @1 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@1 +main::@1: scope:[main] from main main::@5 + [5] (byte) main::idx#10 ← phi( main/(byte) 0 main::@5/(byte) main::idx#1 ) + [5] (byte) main::i#10 ← phi( main/(byte) 0 main::@5/(byte) main::i#1 ) + [6] (byte~) main::$0 ← (byte) main::i#10 & (byte) 1 + [7] if((byte) 0==(byte~) main::$0) goto main::@2 + to:main::@6 +main::@6: scope:[main] from main::@1 + [8] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' + to:main::@2 +main::@2: scope:[main] from main::@1 main::@6 + [9] (byte~) main::$4 ← (byte) main::i#10 & (byte) 2 + [10] if((byte) 0==(byte~) main::$4) goto main::@3 + to:main::@7 +main::@7: scope:[main] from main::@2 + [11] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) main::idx#10) ← (byte) '+' + to:main::@3 +main::@3: scope:[main] from main::@2 main::@7 + [12] (byte~) main::$8 ← (byte) main::i#10 & (byte) 1 + [13] (byte~) main::$9 ← (byte) main::i#10 & (byte) 2 + [14] if((byte) 0==(byte~) main::$8) goto main::@4 + to:main::@10 +main::@10: scope:[main] from main::@3 + [15] if((byte) 0==(byte~) main::$9) goto main::@4 + to:main::@8 +main::@8: scope:[main] from main::@10 + [16] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::idx#10) ← (byte) '+' + to:main::@4 +main::@4: scope:[main] from main::@10 main::@3 main::@8 + [17] (byte~) main::$14 ← (byte) main::i#10 & (byte) 1 + [18] (byte~) main::$15 ← (byte) main::i#10 & (byte) 2 + [19] if((byte) 0!=(byte~) main::$14) goto main::@9 + to:main::@11 +main::@11: scope:[main] from main::@4 + [20] if((byte) 0==(byte~) main::$15) goto main::@5 + to:main::@9 +main::@9: scope:[main] from main::@11 main::@4 + [21] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) main::idx#10) ← (byte) '+' + to:main::@5 +main::@5: scope:[main] from main::@11 main::@9 + [22] (byte) main::idx#1 ← ++ (byte) main::idx#10 + [23] (byte) main::i#1 ← ++ (byte) main::i#10 + [24] if((byte) main::i#1!=(byte) 8) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@5 + [25] return + to:@return + + +VARIABLE REGISTER WEIGHTS +(byte*) SCREEN +(void()) main() +(byte~) main::$0 22.0 +(byte~) main::$14 11.0 +(byte~) main::$15 11.0 +(byte~) main::$4 22.0 +(byte~) main::$8 11.0 +(byte~) main::$9 11.0 +(byte) main::i +(byte) main::i#1 16.5 +(byte) main::i#10 4.888888888888889 +(byte) main::idx +(byte) main::idx#1 7.333333333333333 +(byte) main::idx#10 3.8823529411764706 + +Initial phi equivalence classes +[ main::i#10 main::i#1 ] +[ main::idx#10 main::idx#1 ] +Added variable main::$0 to zero page equivalence class [ main::$0 ] +Added variable main::$4 to zero page equivalence class [ main::$4 ] +Added variable main::$8 to zero page equivalence class [ main::$8 ] +Added variable main::$9 to zero page equivalence class [ main::$9 ] +Added variable main::$14 to zero page equivalence class [ main::$14 ] +Added variable main::$15 to zero page equivalence class [ main::$15 ] +Complete equivalence classes +[ main::i#10 main::i#1 ] +[ main::idx#10 main::idx#1 ] +[ main::$0 ] +[ main::$4 ] +[ main::$8 ] +[ main::$9 ] +[ main::$14 ] +[ main::$15 ] +Allocated zp ZP_BYTE:2 [ main::i#10 main::i#1 ] +Allocated zp ZP_BYTE:3 [ main::idx#10 main::idx#1 ] +Allocated zp ZP_BYTE:4 [ main::$0 ] +Allocated zp ZP_BYTE:5 [ main::$4 ] +Allocated zp ZP_BYTE:6 [ main::$8 ] +Allocated zp ZP_BYTE:7 [ main::$9 ] +Allocated zp ZP_BYTE:8 [ main::$14 ] +Allocated zp ZP_BYTE:9 [ main::$15 ] + +INITIAL ASM +//SEG0 File Comments +// Tests using integer conditions in && and || operator +// This should produce '01010101', '00110011', '00010001', '01110111' at the top of the screen +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label SCREEN = $400 +//SEG3 @begin +bbegin: +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG5 @1 +b1: +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG9 @end +bend: +//SEG10 main +main: { + .label _0 = 4 + .label _4 = 5 + .label _8 = 6 + .label _9 = 7 + .label _14 = 8 + .label _15 = 9 + .label idx = 3 + .label i = 2 + //SEG11 [5] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + //SEG12 [5] phi (byte) main::idx#10 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta idx + //SEG13 [5] phi (byte) main::i#10 = (byte) 0 [phi:main->main::@1#1] -- vbuz1=vbuc1 + lda #0 + sta i + jmp b1 + //SEG14 [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] + b1_from_b5: + //SEG15 [5] phi (byte) main::idx#10 = (byte) main::idx#1 [phi:main::@5->main::@1#0] -- register_copy + //SEG16 [5] phi (byte) main::i#10 = (byte) main::i#1 [phi:main::@5->main::@1#1] -- register_copy + jmp b1 + //SEG17 main::@1 + b1: + //SEG18 [6] (byte~) main::$0 ← (byte) main::i#10 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + lda #1 + and i + sta _0 + //SEG19 [7] if((byte) 0==(byte~) main::$0) goto main::@2 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp _0 + beq b2 + jmp b6 + //SEG20 main::@6 + b6: + //SEG21 [8] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #'+' + ldy idx + sta SCREEN,y + jmp b2 + //SEG22 main::@2 + b2: + //SEG23 [9] (byte~) main::$4 ← (byte) main::i#10 & (byte) 2 -- vbuz1=vbuz2_band_vbuc1 + lda #2 + and i + sta _4 + //SEG24 [10] if((byte) 0==(byte~) main::$4) goto main::@3 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp _4 + beq b3 + jmp b7 + //SEG25 main::@7 + b7: + //SEG26 [11] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #'+' + ldy idx + sta SCREEN+$28*1,y + jmp b3 + //SEG27 main::@3 + b3: + //SEG28 [12] (byte~) main::$8 ← (byte) main::i#10 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + lda #1 + and i + sta _8 + //SEG29 [13] (byte~) main::$9 ← (byte) main::i#10 & (byte) 2 -- vbuz1=vbuz2_band_vbuc1 + lda #2 + and i + sta _9 + //SEG30 [14] if((byte) 0==(byte~) main::$8) goto main::@4 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp _8 + beq b4 + jmp b10 + //SEG31 main::@10 + b10: + //SEG32 [15] if((byte) 0==(byte~) main::$9) goto main::@4 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp _9 + beq b4 + jmp b8 + //SEG33 main::@8 + b8: + //SEG34 [16] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #'+' + ldy idx + sta SCREEN+$28*2,y + jmp b4 + //SEG35 main::@4 + b4: + //SEG36 [17] (byte~) main::$14 ← (byte) main::i#10 & (byte) 1 -- vbuz1=vbuz2_band_vbuc1 + lda #1 + and i + sta _14 + //SEG37 [18] (byte~) main::$15 ← (byte) main::i#10 & (byte) 2 -- vbuz1=vbuz2_band_vbuc1 + lda #2 + and i + sta _15 + //SEG38 [19] if((byte) 0!=(byte~) main::$14) goto main::@9 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp _14 + bne b9 + jmp b11 + //SEG39 main::@11 + b11: + //SEG40 [20] if((byte) 0==(byte~) main::$15) goto main::@5 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp _15 + beq b5 + jmp b9 + //SEG41 main::@9 + b9: + //SEG42 [21] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuz1=vbuc2 + lda #'+' + ldy idx + sta SCREEN+$28*3,y + jmp b5 + //SEG43 main::@5 + b5: + //SEG44 [22] (byte) main::idx#1 ← ++ (byte) main::idx#10 -- vbuz1=_inc_vbuz1 + inc idx + //SEG45 [23] (byte) main::i#1 ← ++ (byte) main::i#10 -- vbuz1=_inc_vbuz1 + inc i + //SEG46 [24] if((byte) main::i#1!=(byte) 8) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #8 + cmp i + bne b1_from_b5 + jmp breturn + //SEG47 main::@return + breturn: + //SEG48 [25] return + rts +} + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [8] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' [ main::i#10 main::idx#10 ] ( main:2 [ main::i#10 main::idx#10 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#10 main::i#1 ] +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:3 [ main::idx#10 main::idx#1 ] +Statement [9] (byte~) main::$4 ← (byte) main::i#10 & (byte) 2 [ main::i#10 main::idx#10 main::$4 ] ( main:2 [ main::i#10 main::idx#10 main::$4 ] ) always clobbers reg byte a +Statement [11] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) main::idx#10) ← (byte) '+' [ main::i#10 main::idx#10 ] ( main:2 [ main::i#10 main::idx#10 ] ) always clobbers reg byte a +Statement [12] (byte~) main::$8 ← (byte) main::i#10 & (byte) 1 [ main::i#10 main::idx#10 main::$8 ] ( main:2 [ main::i#10 main::idx#10 main::$8 ] ) always clobbers reg byte a +Statement [13] (byte~) main::$9 ← (byte) main::i#10 & (byte) 2 [ main::i#10 main::idx#10 main::$8 main::$9 ] ( main:2 [ main::i#10 main::idx#10 main::$8 main::$9 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:6 [ main::$8 ] +Statement [16] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::idx#10) ← (byte) '+' [ main::i#10 main::idx#10 ] ( main:2 [ main::i#10 main::idx#10 ] ) always clobbers reg byte a +Statement [17] (byte~) main::$14 ← (byte) main::i#10 & (byte) 1 [ main::i#10 main::idx#10 main::$14 ] ( main:2 [ main::i#10 main::idx#10 main::$14 ] ) always clobbers reg byte a +Statement [18] (byte~) main::$15 ← (byte) main::i#10 & (byte) 2 [ main::i#10 main::idx#10 main::$14 main::$15 ] ( main:2 [ main::i#10 main::idx#10 main::$14 main::$15 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:8 [ main::$14 ] +Statement [21] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) main::idx#10) ← (byte) '+' [ main::i#10 main::idx#10 ] ( main:2 [ main::i#10 main::idx#10 ] ) always clobbers reg byte a +Statement [6] (byte~) main::$0 ← (byte) main::i#10 & (byte) 1 [ main::i#10 main::idx#10 main::$0 ] ( main:2 [ main::i#10 main::idx#10 main::$0 ] ) always clobbers reg byte a +Statement [8] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' [ main::i#10 main::idx#10 ] ( main:2 [ main::i#10 main::idx#10 ] ) always clobbers reg byte a +Statement [9] (byte~) main::$4 ← (byte) main::i#10 & (byte) 2 [ main::i#10 main::idx#10 main::$4 ] ( main:2 [ main::i#10 main::idx#10 main::$4 ] ) always clobbers reg byte a +Statement [11] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) main::idx#10) ← (byte) '+' [ main::i#10 main::idx#10 ] ( main:2 [ main::i#10 main::idx#10 ] ) always clobbers reg byte a +Statement [12] (byte~) main::$8 ← (byte) main::i#10 & (byte) 1 [ main::i#10 main::idx#10 main::$8 ] ( main:2 [ main::i#10 main::idx#10 main::$8 ] ) always clobbers reg byte a +Statement [13] (byte~) main::$9 ← (byte) main::i#10 & (byte) 2 [ main::i#10 main::idx#10 main::$8 main::$9 ] ( main:2 [ main::i#10 main::idx#10 main::$8 main::$9 ] ) always clobbers reg byte a +Statement [16] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::idx#10) ← (byte) '+' [ main::i#10 main::idx#10 ] ( main:2 [ main::i#10 main::idx#10 ] ) always clobbers reg byte a +Statement [17] (byte~) main::$14 ← (byte) main::i#10 & (byte) 1 [ main::i#10 main::idx#10 main::$14 ] ( main:2 [ main::i#10 main::idx#10 main::$14 ] ) always clobbers reg byte a +Statement [18] (byte~) main::$15 ← (byte) main::i#10 & (byte) 2 [ main::i#10 main::idx#10 main::$14 main::$15 ] ( main:2 [ main::i#10 main::idx#10 main::$14 main::$15 ] ) always clobbers reg byte a +Statement [21] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) main::idx#10) ← (byte) '+' [ main::i#10 main::idx#10 ] ( main:2 [ main::i#10 main::idx#10 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::i#10 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:3 [ main::idx#10 main::idx#1 ] : zp ZP_BYTE:3 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:4 [ main::$0 ] : zp ZP_BYTE:4 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:5 [ main::$4 ] : zp ZP_BYTE:5 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:6 [ main::$8 ] : zp ZP_BYTE:6 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:7 [ main::$9 ] : zp ZP_BYTE:7 , reg byte a , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:8 [ main::$14 ] : zp ZP_BYTE:8 , reg byte x , reg byte y , +Potential registers zp ZP_BYTE:9 [ main::$15 ] : zp ZP_BYTE:9 , reg byte a , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [main] 22: zp ZP_BYTE:4 [ main::$0 ] 22: zp ZP_BYTE:5 [ main::$4 ] 21.39: zp ZP_BYTE:2 [ main::i#10 main::i#1 ] 11.22: zp ZP_BYTE:3 [ main::idx#10 main::idx#1 ] 11: zp ZP_BYTE:6 [ main::$8 ] 11: zp ZP_BYTE:7 [ main::$9 ] 11: zp ZP_BYTE:8 [ main::$14 ] 11: zp ZP_BYTE:9 [ main::$15 ] +Uplift Scope [] + +Uplifting [main] best 1563 combination reg byte a [ main::$0 ] reg byte a [ main::$4 ] reg byte y [ main::i#10 main::i#1 ] reg byte x [ main::idx#10 main::idx#1 ] zp ZP_BYTE:6 [ main::$8 ] zp ZP_BYTE:7 [ main::$9 ] zp ZP_BYTE:8 [ main::$14 ] zp ZP_BYTE:9 [ main::$15 ] +Limited combination testing to 100 combinations of 20736 possible. +Uplifting [] best 1563 combination +Attempting to uplift remaining variables inzp ZP_BYTE:6 [ main::$8 ] +Uplifting [main] best 1563 combination zp ZP_BYTE:6 [ main::$8 ] +Attempting to uplift remaining variables inzp ZP_BYTE:7 [ main::$9 ] +Uplifting [main] best 1563 combination zp ZP_BYTE:7 [ main::$9 ] +Attempting to uplift remaining variables inzp ZP_BYTE:8 [ main::$14 ] +Uplifting [main] best 1563 combination zp ZP_BYTE:8 [ main::$14 ] +Attempting to uplift remaining variables inzp ZP_BYTE:9 [ main::$15 ] +Uplifting [main] best 1563 combination zp ZP_BYTE:9 [ main::$15 ] +Allocated (was zp ZP_BYTE:6) zp ZP_BYTE:2 [ main::$8 ] +Allocated (was zp ZP_BYTE:7) zp ZP_BYTE:3 [ main::$9 ] +Allocated (was zp ZP_BYTE:8) zp ZP_BYTE:4 [ main::$14 ] +Allocated (was zp ZP_BYTE:9) zp ZP_BYTE:5 [ main::$15 ] + +ASSEMBLER BEFORE OPTIMIZATION +//SEG0 File Comments +// Tests using integer conditions in && and || operator +// This should produce '01010101', '00110011', '00010001', '01110111' at the top of the screen +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label SCREEN = $400 +//SEG3 @begin +bbegin: +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG5 @1 +b1: +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG9 @end +bend: +//SEG10 main +main: { + .label _8 = 2 + .label _9 = 3 + .label _14 = 4 + .label _15 = 5 + //SEG11 [5] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + //SEG12 [5] phi (byte) main::idx#10 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + ldx #0 + //SEG13 [5] phi (byte) main::i#10 = (byte) 0 [phi:main->main::@1#1] -- vbuyy=vbuc1 + ldy #0 + jmp b1 + //SEG14 [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] + b1_from_b5: + //SEG15 [5] phi (byte) main::idx#10 = (byte) main::idx#1 [phi:main::@5->main::@1#0] -- register_copy + //SEG16 [5] phi (byte) main::i#10 = (byte) main::i#1 [phi:main::@5->main::@1#1] -- register_copy + jmp b1 + //SEG17 main::@1 + b1: + //SEG18 [6] (byte~) main::$0 ← (byte) main::i#10 & (byte) 1 -- vbuaa=vbuyy_band_vbuc1 + tya + and #1 + //SEG19 [7] if((byte) 0==(byte~) main::$0) goto main::@2 -- vbuc1_eq_vbuaa_then_la1 + cmp #0 + beq b2 + jmp b6 + //SEG20 main::@6 + b6: + //SEG21 [8] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'+' + sta SCREEN,x + jmp b2 + //SEG22 main::@2 + b2: + //SEG23 [9] (byte~) main::$4 ← (byte) main::i#10 & (byte) 2 -- vbuaa=vbuyy_band_vbuc1 + tya + and #2 + //SEG24 [10] if((byte) 0==(byte~) main::$4) goto main::@3 -- vbuc1_eq_vbuaa_then_la1 + cmp #0 + beq b3 + jmp b7 + //SEG25 main::@7 + b7: + //SEG26 [11] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'+' + sta SCREEN+$28*1,x + jmp b3 + //SEG27 main::@3 + b3: + //SEG28 [12] (byte~) main::$8 ← (byte) main::i#10 & (byte) 1 -- vbuz1=vbuyy_band_vbuc1 + tya + and #1 + sta _8 + //SEG29 [13] (byte~) main::$9 ← (byte) main::i#10 & (byte) 2 -- vbuz1=vbuyy_band_vbuc1 + tya + and #2 + sta _9 + //SEG30 [14] if((byte) 0==(byte~) main::$8) goto main::@4 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp _8 + beq b4 + jmp b10 + //SEG31 main::@10 + b10: + //SEG32 [15] if((byte) 0==(byte~) main::$9) goto main::@4 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp _9 + beq b4 + jmp b8 + //SEG33 main::@8 + b8: + //SEG34 [16] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'+' + sta SCREEN+$28*2,x + jmp b4 + //SEG35 main::@4 + b4: + //SEG36 [17] (byte~) main::$14 ← (byte) main::i#10 & (byte) 1 -- vbuz1=vbuyy_band_vbuc1 + tya + and #1 + sta _14 + //SEG37 [18] (byte~) main::$15 ← (byte) main::i#10 & (byte) 2 -- vbuz1=vbuyy_band_vbuc1 + tya + and #2 + sta _15 + //SEG38 [19] if((byte) 0!=(byte~) main::$14) goto main::@9 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp _14 + bne b9 + jmp b11 + //SEG39 main::@11 + b11: + //SEG40 [20] if((byte) 0==(byte~) main::$15) goto main::@5 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp _15 + beq b5 + jmp b9 + //SEG41 main::@9 + b9: + //SEG42 [21] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'+' + sta SCREEN+$28*3,x + jmp b5 + //SEG43 main::@5 + b5: + //SEG44 [22] (byte) main::idx#1 ← ++ (byte) main::idx#10 -- vbuxx=_inc_vbuxx + inx + //SEG45 [23] (byte) main::i#1 ← ++ (byte) main::i#10 -- vbuyy=_inc_vbuyy + iny + //SEG46 [24] if((byte) main::i#1!=(byte) 8) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 + cpy #8 + bne b1_from_b5 + jmp breturn + //SEG47 main::@return + breturn: + //SEG48 [25] return + rts +} + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b1 +Removing instruction jmp bend +Removing instruction jmp b1 +Removing instruction jmp b6 +Removing instruction jmp b2 +Removing instruction jmp b7 +Removing instruction jmp b3 +Removing instruction jmp b10 +Removing instruction jmp b8 +Removing instruction jmp b4 +Removing instruction jmp b11 +Removing instruction jmp b9 +Removing instruction jmp b5 +Removing instruction jmp breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label b1_from_b5 with b1 +Removing instruction b1_from_bbegin: +Removing instruction b1: +Removing instruction main_from_b1: +Removing instruction bend_from_b1: +Removing instruction b1_from_b5: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction bend: +Removing instruction b1_from_main: +Removing instruction b6: +Removing instruction b7: +Removing instruction b10: +Removing instruction b8: +Removing instruction b11: +Removing instruction breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Updating BasicUpstart to call main directly +Removing instruction jsr main +Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b1 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction lda #0 +Removing instruction lda #0 +Succesful ASM optimization Pass5UnnecesaryLoadElimination +Removing instruction bbegin: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(label) @1 +(label) @begin +(label) @end +(byte*) SCREEN +(const byte*) SCREEN#0 SCREEN = (byte*) 1024 +(void()) main() +(byte~) main::$0 reg byte a 22.0 +(byte~) main::$14 $14 zp ZP_BYTE:4 11.0 +(byte~) main::$15 $15 zp ZP_BYTE:5 11.0 +(byte~) main::$4 reg byte a 22.0 +(byte~) main::$8 $8 zp ZP_BYTE:2 11.0 +(byte~) main::$9 $9 zp ZP_BYTE:3 11.0 +(label) main::@1 +(label) main::@10 +(label) main::@11 +(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 +(byte) main::i +(byte) main::i#1 reg byte y 16.5 +(byte) main::i#10 reg byte y 4.888888888888889 +(byte) main::idx +(byte) main::idx#1 reg byte x 7.333333333333333 +(byte) main::idx#10 reg byte x 3.8823529411764706 + +reg byte y [ main::i#10 main::i#1 ] +reg byte x [ main::idx#10 main::idx#1 ] +reg byte a [ main::$0 ] +reg byte a [ main::$4 ] +zp ZP_BYTE:2 [ main::$8 ] +zp ZP_BYTE:3 [ main::$9 ] +zp ZP_BYTE:4 [ main::$14 ] +zp ZP_BYTE:5 [ main::$15 ] + + +FINAL ASSEMBLER +Score: 1121 + +//SEG0 File Comments +// Tests using integer conditions in && and || operator +// This should produce '01010101', '00110011', '00010001', '01110111' at the top of the screen +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG2 Global Constants & labels + .label SCREEN = $400 +//SEG3 @begin +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +//SEG5 @1 +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +//SEG9 @end +//SEG10 main +main: { + .label _8 = 2 + .label _9 = 3 + .label _14 = 4 + .label _15 = 5 + //SEG11 [5] phi from main to main::@1 [phi:main->main::@1] + //SEG12 [5] phi (byte) main::idx#10 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + ldx #0 + //SEG13 [5] phi (byte) main::i#10 = (byte) 0 [phi:main->main::@1#1] -- vbuyy=vbuc1 + ldy #0 + //SEG14 [5] phi from main::@5 to main::@1 [phi:main::@5->main::@1] + //SEG15 [5] phi (byte) main::idx#10 = (byte) main::idx#1 [phi:main::@5->main::@1#0] -- register_copy + //SEG16 [5] phi (byte) main::i#10 = (byte) main::i#1 [phi:main::@5->main::@1#1] -- register_copy + //SEG17 main::@1 + b1: + //SEG18 [6] (byte~) main::$0 ← (byte) main::i#10 & (byte) 1 -- vbuaa=vbuyy_band_vbuc1 + tya + and #1 + //SEG19 [7] if((byte) 0==(byte~) main::$0) goto main::@2 -- vbuc1_eq_vbuaa_then_la1 + cmp #0 + beq b2 + //SEG20 main::@6 + //SEG21 [8] *((const byte*) SCREEN#0 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'+' + sta SCREEN,x + //SEG22 main::@2 + b2: + //SEG23 [9] (byte~) main::$4 ← (byte) main::i#10 & (byte) 2 -- vbuaa=vbuyy_band_vbuc1 + tya + and #2 + //SEG24 [10] if((byte) 0==(byte~) main::$4) goto main::@3 -- vbuc1_eq_vbuaa_then_la1 + cmp #0 + beq b3 + //SEG25 main::@7 + //SEG26 [11] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 1 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'+' + sta SCREEN+$28*1,x + //SEG27 main::@3 + b3: + //SEG28 [12] (byte~) main::$8 ← (byte) main::i#10 & (byte) 1 -- vbuz1=vbuyy_band_vbuc1 + tya + and #1 + sta _8 + //SEG29 [13] (byte~) main::$9 ← (byte) main::i#10 & (byte) 2 -- vbuz1=vbuyy_band_vbuc1 + tya + and #2 + sta _9 + //SEG30 [14] if((byte) 0==(byte~) main::$8) goto main::@4 -- vbuc1_eq_vbuz1_then_la1 + lda #0 + cmp _8 + beq b4 + //SEG31 main::@10 + //SEG32 [15] if((byte) 0==(byte~) main::$9) goto main::@4 -- vbuc1_eq_vbuz1_then_la1 + cmp _9 + beq b4 + //SEG33 main::@8 + //SEG34 [16] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'+' + sta SCREEN+$28*2,x + //SEG35 main::@4 + b4: + //SEG36 [17] (byte~) main::$14 ← (byte) main::i#10 & (byte) 1 -- vbuz1=vbuyy_band_vbuc1 + tya + and #1 + sta _14 + //SEG37 [18] (byte~) main::$15 ← (byte) main::i#10 & (byte) 2 -- vbuz1=vbuyy_band_vbuc1 + tya + and #2 + sta _15 + //SEG38 [19] if((byte) 0!=(byte~) main::$14) goto main::@9 -- vbuc1_neq_vbuz1_then_la1 + lda #0 + cmp _14 + bne b9 + //SEG39 main::@11 + //SEG40 [20] if((byte) 0==(byte~) main::$15) goto main::@5 -- vbuc1_eq_vbuz1_then_la1 + cmp _15 + beq b5 + //SEG41 main::@9 + b9: + //SEG42 [21] *((const byte*) SCREEN#0+(byte)(number) $28*(number) 3 + (byte) main::idx#10) ← (byte) '+' -- pbuc1_derefidx_vbuxx=vbuc2 + lda #'+' + sta SCREEN+$28*3,x + //SEG43 main::@5 + b5: + //SEG44 [22] (byte) main::idx#1 ← ++ (byte) main::idx#10 -- vbuxx=_inc_vbuxx + inx + //SEG45 [23] (byte) main::i#1 ← ++ (byte) main::i#10 -- vbuyy=_inc_vbuyy + iny + //SEG46 [24] if((byte) main::i#1!=(byte) 8) goto main::@1 -- vbuyy_neq_vbuc1_then_la1 + cpy #8 + bne b1 + //SEG47 main::@return + //SEG48 [25] return + rts +} + diff --git a/src/test/ref/condition-integer-4.sym b/src/test/ref/condition-integer-4.sym new file mode 100644 index 000000000..1daabbadc --- /dev/null +++ b/src/test/ref/condition-integer-4.sym @@ -0,0 +1 @@ +program \ No newline at end of file diff --git a/src/test/ref/condition-type-mismatch.asm b/src/test/ref/condition-type-mismatch.asm new file mode 100644 index 000000000..56cb967a2 --- /dev/null +++ b/src/test/ref/condition-type-mismatch.asm @@ -0,0 +1,10 @@ +// Tests a condition type mismatch (not boolean) +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +main: { + .label screen = $400 + lda #'a' + sta screen + rts +} diff --git a/src/test/ref/condition-type-mismatch.cfg b/src/test/ref/condition-type-mismatch.cfg new file mode 100644 index 000000000..3adfeec78 --- /dev/null +++ b/src/test/ref/condition-type-mismatch.cfg @@ -0,0 +1,18 @@ +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@1 +main::@1: scope:[main] from main + [5] *((const byte*) main::screen#0) ← (byte) 'a' + to:main::@return +main::@return: scope:[main] from main::@1 + [6] return + to:@return diff --git a/src/test/ref/condition-type-mismatch.log b/src/test/ref/condition-type-mismatch.log new file mode 100644 index 000000000..6745134f4 --- /dev/null +++ b/src/test/ref/condition-type-mismatch.log @@ -0,0 +1,267 @@ +Warning! Adding boolean cast to non-boolean sub-expression (byte) main::b +Adding pointer type conversion cast (byte*) main::screen in (byte*) main::screen ← (number) $400 +Identified constant variable (byte) main::b +Identified constant variable (byte*) main::screen +Culled Empty Block (label) main::@1 + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + to:@1 +main: scope:[main] from @1 + (byte) main::b#0 ← (number) $c + (bool~) main::$1 ← (number) 0 != (byte) main::b#0 + (bool~) main::$0 ← ! (bool~) main::$1 + if((bool~) main::$0) goto main::@return + to:main::@2 +main::@2: scope:[main] from main + (byte*) main::screen#0 ← ((byte*)) (number) $400 + *((byte*) main::screen#0) ← (byte) 'a' + to:main::@return +main::@return: scope:[main] from main main::@2 + return + to:@return +@1: scope:[] from @begin + call main + to:@2 +@2: scope:[] from @1 + to:@end +@end: scope:[] from @2 + +SYMBOL TABLE SSA +(label) @1 +(label) @2 +(label) @begin +(label) @end +(void()) main() +(bool~) main::$0 +(bool~) main::$1 +(label) main::@2 +(label) main::@return +(byte) main::b +(byte) main::b#0 +(byte*) main::screen +(byte*) main::screen#0 + +Adding number conversion cast (unumber) $c in (byte) main::b#0 ← (number) $c +Adding number conversion cast (unumber) 0 in (bool~) main::$1 ← (number) 0 != (byte) main::b#0 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast (byte) main::b#0 ← (unumber)(number) $c +Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 +Successful SSA optimization Pass2InlineCast +Simplifying constant integer cast $c +Simplifying constant integer cast 0 +Simplifying constant pointer cast (byte*) 1024 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) $c +Finalized unsigned number type (byte) 0 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inversing boolean not [2] (bool~) main::$0 ← (byte) 0 == (byte) main::b#0 from [1] (bool~) main::$1 ← (byte) 0 != (byte) main::b#0 +Successful SSA optimization Pass2UnaryNotSimplification +Simple Condition (bool~) main::$0 [3] if((byte) 0==(byte) main::b#0) goto main::@return +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant (const byte) main::b#0 = $c +Constant (const byte*) main::screen#0 = (byte*) 1024 +Successful SSA optimization Pass2ConstantIdentification +if() condition always false - eliminating [3] if((byte) 0==(const byte) main::b#0) goto main::@return +Successful SSA optimization Pass2ConstantIfs +Eliminating unused constant (const byte) main::b#0 +Successful SSA optimization PassNEliminateUnusedVars +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 +CALL GRAPH +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 +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@1 +main::@1: scope:[main] from main + [5] *((const byte*) main::screen#0) ← (byte) 'a' + to:main::@return +main::@return: scope:[main] from main::@1 + [6] return + to:@return + + +VARIABLE REGISTER WEIGHTS +(void()) main() +(byte) main::b +(byte*) main::screen + +Initial phi equivalence classes +Complete equivalence classes + +INITIAL ASM +//SEG0 File Comments +// Tests a condition type mismatch (not boolean) +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels +//SEG3 @begin +bbegin: +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG5 @1 +b1: +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG9 @end +bend: +//SEG10 main +main: { + .label screen = $400 + jmp b1 + //SEG11 main::@1 + b1: + //SEG12 [5] *((const byte*) main::screen#0) ← (byte) 'a' -- _deref_pbuc1=vbuc2 + lda #'a' + sta screen + jmp breturn + //SEG13 main::@return + breturn: + //SEG14 [6] return + rts +} + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [5] *((const byte*) main::screen#0) ← (byte) 'a' [ ] ( main:2 [ ] ) always clobbers reg byte a + +REGISTER UPLIFT SCOPES +Uplift Scope [main] +Uplift Scope [] + +Uplifting [main] best 57 combination +Uplifting [] best 57 combination + +ASSEMBLER BEFORE OPTIMIZATION +//SEG0 File Comments +// Tests a condition type mismatch (not boolean) +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels +//SEG3 @begin +bbegin: +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG5 @1 +b1: +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG9 @end +bend: +//SEG10 main +main: { + .label screen = $400 + jmp b1 + //SEG11 main::@1 + b1: + //SEG12 [5] *((const byte*) main::screen#0) ← (byte) 'a' -- _deref_pbuc1=vbuc2 + lda #'a' + sta screen + jmp breturn + //SEG13 main::@return + breturn: + //SEG14 [6] return + rts +} + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b1 +Removing instruction jmp bend +Removing instruction jmp b1 +Removing instruction jmp breturn +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction b1_from_bbegin: +Removing instruction b1: +Removing instruction main_from_b1: +Removing instruction bend_from_b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction bend: +Removing instruction b1: +Removing instruction breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Updating BasicUpstart to call main directly +Removing instruction jsr main +Succesful ASM optimization Pass5SkipBegin +Removing instruction bbegin: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(label) @1 +(label) @begin +(label) @end +(void()) main() +(label) main::@1 +(label) main::@return +(byte) main::b +(byte*) main::screen +(const byte*) main::screen#0 screen = (byte*) 1024 + + + +FINAL ASSEMBLER +Score: 12 + +//SEG0 File Comments +// Tests a condition type mismatch (not boolean) +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG2 Global Constants & labels +//SEG3 @begin +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +//SEG5 @1 +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +//SEG9 @end +//SEG10 main +main: { + .label screen = $400 + //SEG11 main::@1 + //SEG12 [5] *((const byte*) main::screen#0) ← (byte) 'a' -- _deref_pbuc1=vbuc2 + lda #'a' + sta screen + //SEG13 main::@return + //SEG14 [6] return + rts +} + diff --git a/src/test/ref/condition-type-mismatch.sym b/src/test/ref/condition-type-mismatch.sym new file mode 100644 index 000000000..1daabbadc --- /dev/null +++ b/src/test/ref/condition-type-mismatch.sym @@ -0,0 +1 @@ +program \ No newline at end of file diff --git a/src/test/ref/consolidate-array-index-problem.log b/src/test/ref/consolidate-array-index-problem.log index 5e9217a3b..a538bef81 100644 --- a/src/test/ref/consolidate-array-index-problem.log +++ b/src/test/ref/consolidate-array-index-problem.log @@ -12,7 +12,7 @@ main: scope:[main] from @1 (byte) main::BLACK#0 ← (number) 0 (byte*) main::screen#0 ← ((byte*)) (number) $400 (byte*) main::cols#0 ← ((byte*)) (number) $d800 - (byte) main::x#0 ← (number) 0 + (byte) main::x#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::x#2 ← phi( main/(byte) main::x#0 main::@1/(byte) main::x#1 ) @@ -58,23 +58,19 @@ SYMBOL TABLE SSA (byte) main::y#0 Adding number conversion cast (unumber) 0 in (byte) main::BLACK#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::x#0 ← (number) 0 Adding number conversion cast (unumber) $c in (number~) main::$0 ← (byte) main::x#2 + (number) $c Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::x#2 + (unumber)(number) $c Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) main::BLACK#0 ← (unumber)(number) 0 Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 Inlining cast (byte*) main::cols#0 ← (byte*)(number) $d800 -Inlining cast (byte) main::x#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 55296 -Simplifying constant integer cast 0 Simplifying constant integer cast $c Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $c Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$0 ← (byte) main::x#2 + (byte) $c diff --git a/src/test/ref/consolidate-constant-problem.log b/src/test/ref/consolidate-constant-problem.log index 44f9d84cf..b35d6a185 100644 --- a/src/test/ref/consolidate-constant-problem.log +++ b/src/test/ref/consolidate-constant-problem.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA (byte*) screen#0 ← ((byte*)) (number) $400 to:@1 main: scope:[main] from @1 - (byte) main::j#0 ← (number) 0 + (byte) main::j#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::j#2 ← phi( main/(byte) main::j#0 main::@1/(byte) main::j#1 ) @@ -52,7 +52,6 @@ SYMBOL TABLE SSA (byte*) screen (byte*) screen#0 -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (number~) main::$0 ← (number) $28 * (byte) main::j#2 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (unumber)(number) $28 * (byte) main::j#2 Adding number conversion cast (unumber) $27 in (byte*~) main::$2 ← (byte*~) main::$1 + (number) $27 @@ -64,12 +63,10 @@ Adding number conversion cast (unumber) main::$4 in (number~) main::$4 ← (unum Adding number conversion cast (unumber) 0 in *((byte*) screen#0 + (unumber~) main::$4) ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) screen#0 ← (byte*)(number) $400 -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 Inlining cast *((byte*~) main::$2) ← (unumber)(number) 0 Inlining cast *((byte*) screen#0 + (unumber~) main::$4) ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $27 Simplifying constant integer cast 0 @@ -77,7 +74,6 @@ Simplifying constant integer cast $28 Simplifying constant integer cast $26 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $27 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/const-identification.log b/src/test/ref/const-identification.log index f6f5d3670..5cc80482d 100644 --- a/src/test/ref/const-identification.log +++ b/src/test/ref/const-identification.log @@ -14,7 +14,7 @@ CONTROL FLOW GRAPH SSA (byte*) SCREEN#0 ← ((byte*)) (number) $400 to:@3 main: scope:[main] from @3 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -139,7 +139,6 @@ SYMBOL TABLE SSA (byte*) plots (byte*) plots#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) SCREEN#0 + (byte) main::i#2) ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) line::x0#0 ← (number) 0 Adding number conversion cast (unumber) $a in (byte) line::x1#0 ← (number) $a @@ -148,7 +147,6 @@ Adding number conversion cast (unumber) plot::$0 in (number~) plot::$0 ← *((by Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) plots#0 ← (byte*)(number) $1000 Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast *((byte*) SCREEN#0 + (byte) main::i#2) ← (unumber)(number) 0 Inlining cast (byte) line::x0#0 ← (unumber)(number) 0 Inlining cast (byte) line::x1#0 ← (unumber)(number) $a @@ -157,13 +155,11 @@ Simplifying constant pointer cast (byte*) 4096 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $a Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/const-int-cast-problem.log b/src/test/ref/const-int-cast-problem.log index 9fd1a3628..a7a88e145 100644 --- a/src/test/ref/const-int-cast-problem.log +++ b/src/test/ref/const-int-cast-problem.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA (byte*) SCREEN#0 ← ((byte*)) (number) $400 to:@1 main: scope:[main] from @1 - (byte) main::i#0 ← (number) $79 + (byte) main::i#0 ← (byte) $79 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -43,17 +43,13 @@ SYMBOL TABLE SSA (byte) main::i#1 (byte) main::i#2 -Adding number conversion cast (unumber) $79 in (byte) main::i#0 ← (number) $79 Adding number conversion cast (unumber) 4 in (byte~) main::$0 ← (byte) main::i#2 >> (number) 4 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) $79 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $79 Simplifying constant integer cast 4 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) $79 Finalized unsigned number type (byte) 4 Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$1 [7] if((byte) main::i#1!=rangelast($79,$7a)) goto main::@1 diff --git a/src/test/ref/const-signed-promotion.log b/src/test/ref/const-signed-promotion.log index 66fb8f3f3..34516e05d 100644 --- a/src/test/ref/const-signed-promotion.log +++ b/src/test/ref/const-signed-promotion.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA (signed word[3]) world#0 ← { fill( 3, 0) } to:@1 main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -55,21 +55,17 @@ SYMBOL TABLE SSA (signed word[3]) world (signed word[3]) world#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (snumber) $190 in *((signed word[3]) world#0 + (byte~) main::$1) ← (number) $190 Adding number conversion cast (unumber) 0 in (number~) main::$2 ← (number) 0 * (const byte) SIZEOF_SIGNED_WORD Adding number conversion cast (unumber) main::$2 in (number~) main::$2 ← (unumber)(number) 0 * (const byte) SIZEOF_SIGNED_WORD Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast *((signed word[3]) world#0 + (byte~) main::$1) ← (snumber)(number) $190 Inlining cast (signed word*) main::screen#0 ← (signed word*)(number) $400 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 Simplifying constant integer cast $190 Simplifying constant pointer cast (signed word*) 1024 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized signed number type (signed word) $190 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/constant-string-concat.log b/src/test/ref/constant-string-concat.log index ff8ea081e..018575df3 100644 --- a/src/test/ref/constant-string-concat.log +++ b/src/test/ref/constant-string-concat.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @1 (byte[]) main::s#0 ← (const string) main::$1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -46,16 +46,10 @@ SYMBOL TABLE SSA (byte[]) main::s (byte[]) main::s#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [7] if((byte) main::i#1!=rangelast(0,7)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte[]) main::s#0 = main::$1 diff --git a/src/test/ref/constantmin.log b/src/test/ref/constantmin.log index 1f9c440db..4c8b409e3 100644 --- a/src/test/ref/constantmin.log +++ b/src/test/ref/constantmin.log @@ -19,7 +19,7 @@ main: scope:[main] from @1 (byte*) BGCOL#1 ← phi( @1/(byte*) BGCOL#2 ) *((byte*) SCREEN#0) ← (byte) STAR#0 *((byte*) BGCOL#1) ← (byte) RED#0 - (byte) main::i#0 ← (number) $28 + (byte) main::i#0 ← (byte) $28 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -74,7 +74,6 @@ Adding number conversion cast (unumber) $51 in (byte) STAR#0 ← (number) $51 Adding number conversion cast (unumber) $0 in (byte*~) $1 ← (byte*) VIC#0 + (number~) $0 Adding number conversion cast (unumber) 1 in (byte*~) $2 ← (byte*~) $1 + (number) 1 Adding number conversion cast (unumber) 2 in (byte) RED#0 ← (number) 2 -Adding number conversion cast (unumber) $28 in (byte) main::i#0 ← (number) $28 Adding number conversion cast (unumber) 1 in (number~) main::$0 ← (byte) STAR#0 + (number) 1 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) STAR#0 + (unumber)(number) 1 Successful SSA optimization PassNAddNumberTypeConversions @@ -83,20 +82,17 @@ Inlining cast (byte) STAR#0 ← (unumber)(number) $51 Inlining cast (byte*) VIC#0 ← (byte*)(number) $d000 Inlining cast (unumber~) $3 ← (unumber)(number~) $0 Inlining cast (byte) RED#0 ← (unumber)(number) 2 -Inlining cast (byte) main::i#0 ← (unumber)(number) $28 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $51 Simplifying constant pointer cast (byte*) 53248 Simplifying constant integer cast 1 Simplifying constant integer cast 2 -Simplifying constant integer cast $28 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $51 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 -Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$0 ← (byte) STAR#0 + (byte) 1 diff --git a/src/test/ref/derefidx-word-2.log b/src/test/ref/derefidx-word-2.log index 1c137b85e..39d413a45 100644 --- a/src/test/ref/derefidx-word-2.log +++ b/src/test/ref/derefidx-word-2.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::screen#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -45,19 +45,14 @@ SYMBOL TABLE SSA (byte*) main::screen (byte*) main::screen#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) main::$0 in (number~) main::$1 ← (number~) main::$0 + (byte) main::i#2 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (unumber~) main::$3 + (byte) main::i#2 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (unumber~) main::$3 ← (unumber)(number~) main::$0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$2 [9] if((byte) main::i#1!=rangelast(0,$27)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant right-side identified [3] (number~) main::$0 ← (number) $28 * (number) $a diff --git a/src/test/ref/divide-2s.log b/src/test/ref/divide-2s.log index 456b84a63..6c6c74e55 100644 --- a/src/test/ref/divide-2s.log +++ b/src/test/ref/divide-2s.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -84,7 +84,6 @@ SYMBOL TABLE SSA (signed byte) main::sb (signed byte) main::sb#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) main::$0 in (byte*~) main::$1 ← (byte*) main::SCREEN#0 + (number~) main::$0 Adding number conversion cast (unumber) 1 in (number~) main::$2 ← (byte) main::i#2 / (number) 1 Adding number conversion cast (unumber) main::$2 in (number~) main::$2 ← (byte) main::i#2 / (unumber)(number) 1 @@ -102,7 +101,6 @@ Adding number conversion cast (snumber) 2 in (number~) main::$16 ← (signed byt Adding number conversion cast (snumber) main::$16 in (number~) main::$16 ← (signed byte) main::sb#0 / (snumber)(number) 2 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (unumber~) main::$19 ← (unumber)(number~) main::$0 Inlining cast (unumber~) main::$20 ← (unumber)(number~) main::$3 Inlining cast (unumber~) main::$21 ← (unumber)(number~) main::$6 @@ -112,14 +110,12 @@ Inlining cast (unumber~) main::$23 ← (unumber)(number~) main::$14 Inlining cast (byte~) main::$17 ← (byte)(snumber~) main::$16 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 4 Simplifying constant integer cast 8 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 4 diff --git a/src/test/ref/double-indexing-arrays.log b/src/test/ref/double-indexing-arrays.log index 089d410c4..17aba7f3c 100644 --- a/src/test/ref/double-indexing-arrays.log +++ b/src/test/ref/double-indexing-arrays.log @@ -13,7 +13,7 @@ CONTROL FLOW GRAPH SSA (byte*) COLS#0 ← ((byte*)) (number) $d800 to:@1 main: scope:[main] from @1 - (byte) main::x#0 ← (number) 0 + (byte) main::x#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::x#2 ← phi( main/(byte) main::x#0 main::@1/(byte) main::x#1 ) @@ -97,7 +97,6 @@ SYMBOL TABLE SSA (byte) main::x#1 !reg byte y (byte) main::x#2 !reg byte y -Adding number conversion cast (unumber) 0 in (byte) main::x#0 ← (number) 0 Adding number conversion cast (unumber) $c8 in (number~) main::$0 ← (number) $c8 + (byte) main::x#2 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (unumber)(number) $c8 + (byte) main::x#2 Adding number conversion cast (unumber) $c8 in (number~) main::$1 ← (number) $c8 + (byte) main::x#2 @@ -133,11 +132,9 @@ Adding number conversion cast (unumber) main::$15 in (number~) main::$15 ← (un Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte*) COLS#0 ← (byte*)(number) $d800 -Inlining cast (byte) main::x#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 55296 -Simplifying constant integer cast 0 Simplifying constant integer cast $c8 Simplifying constant integer cast $c8 Simplifying constant integer cast $c8 @@ -155,7 +152,6 @@ Simplifying constant integer cast $320 Simplifying constant integer cast $320 Simplifying constant integer cast $320 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $c8 Finalized unsigned number type (byte) $c8 Finalized unsigned number type (byte) $c8 diff --git a/src/test/ref/dword.log b/src/test/ref/dword.log index 87e8b7327..e788d6565 100644 --- a/src/test/ref/dword.log +++ b/src/test/ref/dword.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (dword) main::a#0 ← (number) $ee6b2800 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -56,19 +56,15 @@ SYMBOL TABLE SSA (byte) main::i#2 Adding number conversion cast (unumber) $ee6b2800 in (dword) main::a#0 ← (number) $ee6b2800 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (dword) main::a#0 ← (unumber)(number) $ee6b2800 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte~) main::$1 ← (byte)(dword) main::b#0 Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast $ee6b2800 -Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (dword) $ee6b2800 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (dword) main::b#0 = (dword~) main::$0 Alias (byte) main::c#0 = (byte~) main::$1 diff --git a/src/test/ref/examples/3d/3d.log b/src/test/ref/examples/3d/3d.log index ad0f2812a..ee3f5b840 100644 --- a/src/test/ref/examples/3d/3d.log +++ b/src/test/ref/examples/3d/3d.log @@ -524,7 +524,7 @@ anim::@28: scope:[anim] from anim::@27 (byte*) print_screen#45 ← phi( anim::@27/(byte*) print_screen#47 ) (signed byte) sy#29 ← phi( anim::@27/(signed byte) sy#30 ) (signed byte) sx#26 ← phi( anim::@27/(signed byte) sx#27 ) - (byte) anim::i#0 ← (number) 0 + (byte) anim::i#0 ← (byte) 0 to:anim::@22 anim::@22: scope:[anim] from anim::@28 anim::@29 (signed byte*) COSQ#14 ← phi( anim::@28/(signed byte*) COSQ#15 anim::@29/(signed byte*) COSQ#12 ) @@ -690,7 +690,7 @@ debug_print_init::@17: scope:[debug_print_init] from debug_print_init::@16 (number~) debug_print_init::$42 ← (number) $10 * (number) $28 (byte*~) debug_print_init::$43 ← (byte*) debug_print_init::COLS#0 + (number~) debug_print_init::$42 (byte*) debug_print_init::at_cols#0 ← (byte*~) debug_print_init::$43 - (byte) debug_print_init::i#0 ← (number) 0 + (byte) debug_print_init::i#0 ← (byte) 0 to:debug_print_init::@1 debug_print_init::@1: scope:[debug_print_init] from debug_print_init::@17 debug_print_init::@3 (byte*) debug_print_init::at_cols#5 ← phi( debug_print_init::@17/(byte*) debug_print_init::at_cols#0 debug_print_init::@3/(byte*) debug_print_init::at_cols#6 ) @@ -733,7 +733,7 @@ debug_print_init::@20: scope:[debug_print_init] from debug_print_init::@19 (byte) debug_print_init::c#7 ← phi( debug_print_init::@19/(byte) debug_print_init::c#4 ) (byte*) debug_print_init::at_cols#2 ← phi( debug_print_init::@19/(byte*) debug_print_init::at_cols#3 ) (byte) debug_print_init::i#7 ← phi( debug_print_init::@19/(byte) debug_print_init::i#4 ) - (byte) debug_print_init::j#0 ← (number) 0 + (byte) debug_print_init::j#0 ← (byte) 0 to:debug_print_init::@2 debug_print_init::@2: scope:[debug_print_init] from debug_print_init::@2 debug_print_init::@20 (byte*) debug_print_init::at_line#5 ← phi( debug_print_init::@2/(byte*) debug_print_init::at_line#5 debug_print_init::@20/(byte*) debug_print_init::at_line#6 ) @@ -1066,7 +1066,7 @@ debug_print::@14: scope:[debug_print] from debug_print::@26 (byte*~) debug_print::$13 ← (byte*) SCREEN#0 + (number~) debug_print::$12 (byte*) debug_print::at_line#0 ← (byte*~) debug_print::$13 (byte) debug_print::c#0 ← (number) 4 - (byte) debug_print::i#0 ← (number) 0 + (byte) debug_print::i#0 ← (byte) 0 to:debug_print::@1 debug_print::@1: scope:[debug_print] from debug_print::@14 debug_print::@32 (byte) debug_print::i#2 ← phi( debug_print::@14/(byte) debug_print::i#0 debug_print::@32/(byte) debug_print::i#1 ) @@ -1151,7 +1151,7 @@ sprites_init: scope:[sprites_init] from main *((byte*) SPRITES_ENABLE#0) ← (number) $ff (byte*~) sprites_init::$0 ← (byte*) sprites_init::SCREEN#0 + (number) $3f8 (byte*) sprites_init::sprites_ptr#0 ← (byte*~) sprites_init::$0 - (byte) sprites_init::i#0 ← (number) 0 + (byte) sprites_init::i#0 ← (byte) 0 to:sprites_init::@1 sprites_init::@1: scope:[sprites_init] from sprites_init sprites_init::@1 (byte) sprites_init::i#2 ← phi( sprites_init/(byte) sprites_init::i#0 sprites_init::@1/(byte) sprites_init::i#1 ) @@ -2346,7 +2346,6 @@ Adding number conversion cast (snumber) 0 in (signed byte) sz#0 ← (number) 0 Adding number conversion cast (unumber) $ff in (bool~) anim::$0 ← *((byte*) RASTER#0) != (number) $ff Adding number conversion cast (unumber) $fe in (bool~) anim::$1 ← *((byte*) RASTER#0) != (number) $fe Adding number conversion cast (unumber) $fd in (bool~) anim::$2 ← *((byte*) RASTER#0) != (number) $fd -Adding number conversion cast (unumber) 0 in (byte) anim::i#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (number~) anim::$6 ← (byte) anim::i#3 * (number) 2 Adding number conversion cast (unumber) anim::$6 in (number~) anim::$6 ← (byte) anim::i#3 * (unumber)(number) 2 Adding number conversion cast (unumber) $80 in (number~) anim::$8 ← (number) $80 + (byte~) anim::$7 @@ -2373,11 +2372,9 @@ Adding number conversion cast (unumber) debug_print_init::$37 in (byte*~) debug_ Adding number conversion cast (unumber) debug_print_init::$40 in (byte*~) debug_print_init::$41 ← (byte*) SCREEN#0 + (number~) debug_print_init::$40 Adding number conversion cast (unumber) 4 in (byte) debug_print_init::c#0 ← (number) 4 Adding number conversion cast (unumber) debug_print_init::$42 in (byte*~) debug_print_init::$43 ← (byte*) debug_print_init::COLS#0 + (number~) debug_print_init::$42 -Adding number conversion cast (unumber) 0 in (byte) debug_print_init::i#0 ← (number) 0 Adding number conversion cast (unumber) debug_print_init::$44 in (byte*~) debug_print_init::$45 ← (byte*) debug_print_init::at_line#1 + (number~) debug_print_init::$44 Adding number conversion cast (unumber) debug_print_init::$48 in (byte*~) debug_print_init::$49 ← (byte*) debug_print_init::at_line#2 + (number~) debug_print_init::$48 Adding number conversion cast (unumber) debug_print_init::$52 in (byte*~) debug_print_init::$53 ← (byte*) debug_print_init::at_line#3 + (number~) debug_print_init::$52 -Adding number conversion cast (unumber) 0 in (byte) debug_print_init::j#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (number~) debug_print_init::$56 ← (number) 8 + (byte) debug_print_init::i#5 Adding number conversion cast (unumber) debug_print_init::$56 in (number~) debug_print_init::$56 ← (unumber)(number) 8 + (byte) debug_print_init::i#5 Adding number conversion cast (unumber) debug_print_init::$57 in (byte*~) debug_print_init::$58 ← (byte*) debug_print_init::at_cols#1 + (number~) debug_print_init::$57 @@ -2449,7 +2446,6 @@ Adding number conversion cast (unumber) $28 in (number~) debug_print::print_sbyt Adding number conversion cast (unumber) debug_print::print_sbyte_pos12_$0#0 in (number~) debug_print::print_sbyte_pos12_$0#0 ← (byte) debug_print::print_sbyte_pos12_row#1 * (unumber)(number) $28 Adding number conversion cast (unumber) debug_print::$12 in (byte*~) debug_print::$13 ← (byte*) SCREEN#0 + (number~) debug_print::$12 Adding number conversion cast (unumber) 4 in (byte) debug_print::c#0 ← (number) 4 -Adding number conversion cast (unumber) 0 in (byte) debug_print::i#0 ← (number) 0 Adding number conversion cast (unumber) debug_print::$14 in (byte*~) debug_print::$15 ← (byte*) debug_print::at_line#1 + (number~) debug_print::$14 Adding number conversion cast (unumber) debug_print::$18 in (byte*~) debug_print::$19 ← (byte*) debug_print::at_line#2 + (number~) debug_print::$18 Adding number conversion cast (unumber) debug_print::$22 in (byte*~) debug_print::$23 ← (byte*) debug_print::at_line#3 + (number~) debug_print::$22 @@ -2459,7 +2455,6 @@ Adding number conversion cast (unumber) debug_print::$34 in (byte*~) debug_print Adding number conversion cast (unumber) 4 in (byte) debug_print::c#1 ← (byte) debug_print::c#8 + (number) 4 Adding number conversion cast (unumber) $ff in *((byte*) SPRITES_ENABLE#0) ← (number) $ff Adding number conversion cast (unumber) $3f8 in (byte*~) sprites_init::$0 ← (byte*) sprites_init::SCREEN#0 + (number) $3f8 -Adding number conversion cast (unumber) 0 in (byte) sprites_init::i#0 ← (number) 0 Adding number conversion cast (unumber) $40 in (byte*~) sprites_init::$1 ← (byte*) SPRITE#0 / (number) $40 Adding number conversion cast (unumber) 0 in *((signed byte[9]) rotation_matrix#0 + (number) 0) ← (signed byte~) calculate_matrix::$10 Adding number conversion cast (unumber) 1 in *((signed byte[9]) rotation_matrix#0 + (number) 1) ← (signed byte~) calculate_matrix::$11 @@ -2502,7 +2497,6 @@ Inlining cast (word~) main::$2 ← (word)(byte*) mulf_sqr2#0 Inlining cast (signed byte) sx#2 ← (snumber)(number) 0 Inlining cast (signed byte) sy#2 ← (snumber)(number) 0 Inlining cast (signed byte) sz#0 ← (snumber)(number) 0 -Inlining cast (byte) anim::i#0 ← (unumber)(number) 0 Inlining cast (byte~) anim::$7 ← (byte)*((signed byte*) xp#0) Inlining cast (byte~) anim::$9 ← (byte)*((signed byte*) yp#0) Inlining cast (unumber~) debug_print_init::$95 ← (unumber)(number~) debug_print_init::$1 @@ -2521,11 +2515,9 @@ Inlining cast (unumber~) debug_print_init::$107 ← (unumber)(number~) debug_pri Inlining cast (byte) debug_print_init::c#0 ← (unumber)(number) 4 Inlining cast (byte*) debug_print_init::COLS#0 ← (byte*)(number) $d800 Inlining cast (unumber~) debug_print_init::$108 ← (unumber)(number~) debug_print_init::$42 -Inlining cast (byte) debug_print_init::i#0 ← (unumber)(number) 0 Inlining cast (unumber~) debug_print_init::$109 ← (unumber)(number~) debug_print_init::$44 Inlining cast (unumber~) debug_print_init::$110 ← (unumber)(number~) debug_print_init::$48 Inlining cast (unumber~) debug_print_init::$111 ← (unumber)(number~) debug_print_init::$52 -Inlining cast (byte) debug_print_init::j#0 ← (unumber)(number) 0 Inlining cast (unumber~) debug_print_init::$112 ← (unumber)(number~) debug_print_init::$57 Inlining cast (unumber~) debug_print_init::$113 ← (unumber)(number~) debug_print_init::$61 Inlining cast (unumber~) debug_print_init::$114 ← (unumber)(number~) debug_print_init::$65 @@ -2561,7 +2553,6 @@ Inlining cast (byte) debug_print::print_sbyte_pos12_row#0 ← (unumber)(number) Inlining cast (byte) debug_print::print_sbyte_pos12_col#0 ← (unumber)(number) $25 Inlining cast (unumber~) debug_print::$39 ← (unumber)(number~) debug_print::$12 Inlining cast (byte) debug_print::c#0 ← (unumber)(number) 4 -Inlining cast (byte) debug_print::i#0 ← (unumber)(number) 0 Inlining cast (unumber~) debug_print::$40 ← (unumber)(number~) debug_print::$14 Inlining cast (unumber~) debug_print::$41 ← (unumber)(number~) debug_print::$18 Inlining cast (unumber~) debug_print::$42 ← (unumber)(number~) debug_print::$22 @@ -2570,7 +2561,6 @@ Inlining cast (unumber~) debug_print::$44 ← (unumber)(number~) debug_print::$3 Inlining cast (unumber~) debug_print::$45 ← (unumber)(number~) debug_print::$34 Inlining cast (byte*) sprites_init::SCREEN#0 ← (byte*)(number) $400 Inlining cast *((byte*) SPRITES_ENABLE#0) ← (unumber)(number) $ff -Inlining cast (byte) sprites_init::i#0 ← (unumber)(number) 0 Inlining cast (byte~) sprites_init::$2 ← (byte)(byte*~) sprites_init::$1 Inlining cast (byte*) mulf_sqr1#0 ← (byte*)(number) $2400 Inlining cast (byte*) mulf_sqr2#0 ← (byte*)(number) $2600 @@ -2638,7 +2628,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast $fe Simplifying constant integer cast $fd -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast $80 Simplifying constant integer cast $80 @@ -2649,8 +2638,6 @@ Simplifying constant integer cast $22 Simplifying constant integer cast $22 Simplifying constant integer cast 4 Simplifying constant pointer cast (byte*) 55296 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast 4 Simplifying constant integer cast 0 @@ -2699,12 +2686,10 @@ Simplifying constant integer cast 6 Simplifying constant integer cast $25 Simplifying constant integer cast $28 Simplifying constant integer cast 4 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $ff Simplifying constant integer cast $3f8 -Simplifying constant integer cast 0 Simplifying constant integer cast $40 Simplifying constant integer cast 0 Simplifying constant integer cast 1 @@ -2743,7 +2728,6 @@ Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) $fe Finalized unsigned number type (byte) $fd -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) $80 @@ -2753,8 +2737,6 @@ Finalized unsigned number type (byte) $22 Finalized unsigned number type (byte) $22 Finalized unsigned number type (byte) $22 Finalized unsigned number type (byte) 4 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 @@ -2803,11 +2785,9 @@ Finalized unsigned number type (byte) 6 Finalized unsigned number type (byte) $25 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 4 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $ff Finalized unsigned number type (word) $3f8 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 diff --git a/src/test/ref/examples/3d/perspective.log b/src/test/ref/examples/3d/perspective.log index dcd545d41..714f530f1 100644 --- a/src/test/ref/examples/3d/perspective.log +++ b/src/test/ref/examples/3d/perspective.log @@ -454,7 +454,7 @@ perspective::@return: scope:[perspective] from perspective mulf_init: scope:[mulf_init] from main (signed word) mulf_init::sqr#0 ← (number) 0 (signed word) mulf_init::add#0 ← (number) 1 - (byte) mulf_init::i#0 ← (number) 0 + (byte) mulf_init::i#0 ← (byte) 0 to:mulf_init::@1 mulf_init::@1: scope:[mulf_init] from mulf_init mulf_init::@1 (signed word) mulf_init::add#2 ← phi( mulf_init/(signed word) mulf_init::add#0 mulf_init::@1/(signed word) mulf_init::add#1 ) @@ -864,7 +864,6 @@ Adding number conversion cast (snumber) -$47 in (signed byte) do_perspective::y# Adding number conversion cast (snumber) $36 in (signed byte) do_perspective::z#0 ← (number) $36 Adding number conversion cast (snumber) 0 in (signed word) mulf_init::sqr#0 ← (number) 0 Adding number conversion cast (snumber) 1 in (signed word) mulf_init::add#0 ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) mulf_init::i#0 ← (number) 0 Adding number conversion cast (unumber) $100 in (byte*~) mulf_init::$1 ← (byte[$200]) mulf_sqr1#0 + (number) $100 Adding number conversion cast (unumber) $100 in (byte*~) mulf_init::$3 ← (byte[$200]) mulf_sqr1#0 + (number) $100 Adding number conversion cast (unumber) 1 in (number~) mulf_init::$5 ← (byte) mulf_init::i#2 + (number) 1 @@ -895,7 +894,6 @@ Inlining cast (byte~) do_perspective::$8 ← (byte)*((signed byte*) xr#0) Inlining cast (byte~) do_perspective::$11 ← (byte)*((signed byte*) yr#0) Inlining cast (signed word) mulf_init::sqr#0 ← (snumber)(number) 0 Inlining cast (signed word) mulf_init::add#0 ← (snumber)(number) 1 -Inlining cast (byte) mulf_init::i#0 ← (unumber)(number) 0 Inlining cast (signed byte*) PERSP_Z#0 ← (signed byte*)(number) $2400 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 @@ -914,7 +912,6 @@ Simplifying constant integer cast -$47 Simplifying constant integer cast $36 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast $100 Simplifying constant integer cast $100 Simplifying constant integer cast 1 @@ -936,7 +933,6 @@ Finalized signed number type (signed byte) -$47 Finalized signed number type (signed byte) $36 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $100 Finalized unsigned number type (word) $100 Finalized unsigned number type (byte) 1 diff --git a/src/test/ref/examples/bresenham/bitmap-bresenham.log b/src/test/ref/examples/bresenham/bitmap-bresenham.log index 4a7558482..1da4b92b5 100644 --- a/src/test/ref/examples/bresenham/bitmap-bresenham.log +++ b/src/test/ref/examples/bresenham/bitmap-bresenham.log @@ -106,7 +106,7 @@ CONTROL FLOW GRAPH SSA bitmap_init: scope:[bitmap_init] from main (byte*) bitmap_init::bitmap#2 ← phi( main/(byte*) bitmap_init::bitmap#0 ) (byte) bitmap_init::bits#0 ← (number) $80 - (byte) bitmap_init::x#0 ← (number) 0 + (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 (byte) bitmap_init::bits#3 ← phi( bitmap_init/(byte) bitmap_init::bits#0 bitmap_init::@2/(byte) bitmap_init::bits#4 ) @@ -138,7 +138,7 @@ bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@1 to:bitmap_init::@2 bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@2 (byte*) bitmap_init::yoffs#0 ← ((byte*)) (number) 0 - (byte) bitmap_init::y#0 ← (number) 0 + (byte) bitmap_init::y#0 ← (byte) 0 to:bitmap_init::@5 bitmap_init::@5: scope:[bitmap_init] from bitmap_init::@4 bitmap_init::@6 (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@4/(byte*) bitmap_init::yoffs#0 bitmap_init::@6/(byte*) bitmap_init::yoffs#4 ) @@ -174,12 +174,12 @@ bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@6 bitmap_clear: scope:[bitmap_clear] from main::@3 (byte*~) bitmap_clear::$0 ← ((byte*)) { *((byte[$100]) bitmap_plot_xhi#0 + (number) 0), *((byte[$100]) bitmap_plot_xlo#0 + (number) 0) } (byte*) bitmap_clear::bitmap#0 ← (byte*~) bitmap_clear::$0 - (byte) bitmap_clear::y#0 ← (number) 0 + (byte) bitmap_clear::y#0 ← (byte) 0 to:bitmap_clear::@1 bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear bitmap_clear::@3 (byte) bitmap_clear::y#4 ← phi( bitmap_clear/(byte) bitmap_clear::y#0 bitmap_clear::@3/(byte) bitmap_clear::y#1 ) (byte*) bitmap_clear::bitmap#3 ← phi( bitmap_clear/(byte*) bitmap_clear::bitmap#0 bitmap_clear::@3/(byte*) bitmap_clear::bitmap#4 ) - (byte) bitmap_clear::x#0 ← (number) 0 + (byte) bitmap_clear::x#0 ← (byte) 0 to:bitmap_clear::@2 bitmap_clear::@2: scope:[bitmap_clear] from bitmap_clear::@1 bitmap_clear::@2 (byte) bitmap_clear::y#3 ← phi( bitmap_clear::@1/(byte) bitmap_clear::y#4 bitmap_clear::@2/(byte) bitmap_clear::y#3 ) @@ -1304,13 +1304,11 @@ Adding number conversion cast (unumber) $20 in (byte) VIC_BMM#0 ← (number) $20 Adding number conversion cast (unumber) $10 in (byte) VIC_DEN#0 ← (number) $10 Adding number conversion cast (unumber) 8 in (byte) VIC_RSEL#0 ← (number) 8 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 -Adding number conversion cast (unumber) 0 in (byte) bitmap_init::x#0 ← (number) 0 Adding number conversion cast (unumber) $f8 in (number~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (number) $f8 Adding number conversion cast (unumber) bitmap_init::$0 in (number~) bitmap_init::$0 ← (byte) bitmap_init::x#2 & (unumber)(number) $f8 Adding number conversion cast (unumber) 1 in (byte~) bitmap_init::$2 ← (byte) bitmap_init::bits#3 >> (number) 1 Adding number conversion cast (unumber) 0 in (bool~) bitmap_init::$3 ← (byte) bitmap_init::bits#1 == (number) 0 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#2 ← (number) $80 -Adding number conversion cast (unumber) 0 in (byte) bitmap_init::y#0 ← (number) 0 Adding number conversion cast (unumber) 7 in (number~) bitmap_init::$6 ← (byte) bitmap_init::y#2 & (number) 7 Adding number conversion cast (unumber) bitmap_init::$6 in (number~) bitmap_init::$6 ← (byte) bitmap_init::y#2 & (unumber)(number) 7 Adding number conversion cast (unumber) bitmap_init::$8 in (number~) bitmap_init::$8 ← (unumber~) bitmap_init::$6 | (byte~) bitmap_init::$7 @@ -1320,8 +1318,6 @@ Adding number conversion cast (unumber) 7 in (bool~) bitmap_init::$11 ← (unumb Adding number conversion cast (unumber) bitmap_init::$13 in (byte*~) bitmap_init::$14 ← (byte*) bitmap_init::yoffs#3 + (number~) bitmap_init::$13 Adding number conversion cast (unumber) 0 in (var) bitmap_clear::$3 ← (byte)*((byte[$100]) bitmap_plot_xhi#0 + (number) 0) w= (byte)*((byte[$100]) bitmap_plot_xlo#0 + (number) 0) Adding number conversion cast (unumber) 0 in (var) bitmap_clear::$3 ← (byte)*((byte[$100]) bitmap_plot_xhi#0 + (unumber)(number) 0) w= (byte)*((byte[$100]) bitmap_plot_xlo#0 + (number) 0) -Adding number conversion cast (unumber) 0 in (byte) bitmap_clear::y#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) bitmap_clear::x#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) bitmap_clear::bitmap#2) ← (number) 0 Adding number conversion cast (unumber) 1 in (byte~) bitmap_line_xdyi::$0 ← (byte) bitmap_line_xdyi::yd#2 >> (number) 1 Adding number conversion cast (unumber) 1 in (number~) bitmap_line_xdyi::$6 ← (byte) bitmap_line_xdyi::x1#2 + (number) 1 @@ -1368,13 +1364,9 @@ Inlining cast (byte) VIC_DEN#0 ← (unumber)(number) $10 Inlining cast (byte) VIC_RSEL#0 ← (unumber)(number) 8 Inlining cast (byte*) VIC_MEMORY#0 ← (byte*)(number) $d018 Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 -Inlining cast (byte) bitmap_init::x#0 ← (unumber)(number) 0 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 Inlining cast (byte*) bitmap_init::yoffs#0 ← (byte*)(number) 0 -Inlining cast (byte) bitmap_init::y#0 ← (unumber)(number) 0 Inlining cast (unumber~) bitmap_init::$16 ← (unumber)(number~) bitmap_init::$13 -Inlining cast (byte) bitmap_clear::y#0 ← (unumber)(number) 0 -Inlining cast (byte) bitmap_clear::x#0 ← (unumber)(number) 0 Inlining cast *((byte*) bitmap_clear::bitmap#2) ← (unumber)(number) 0 Inlining cast (byte*) bitmap_plot::plotter#0 ← (byte*)(word~) bitmap_plot::$0 Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 @@ -1396,13 +1388,11 @@ Simplifying constant integer cast $10 Simplifying constant integer cast 8 Simplifying constant pointer cast (byte*) 53272 Simplifying constant integer cast $80 -Simplifying constant integer cast 0 Simplifying constant integer cast $f8 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant pointer cast (byte*) 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 7 Simplifying constant integer cast 7 Simplifying constant integer cast 7 @@ -1411,8 +1401,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast *((byte[$100]) bitmap_plot_xlo#0 + (unumber)(number) 0) Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast *((byte[$100]) bitmap_plot_xhi#0 + (byte) bitmap_plot::x#4) Simplifying constant integer cast *((byte[$100]) bitmap_plot_xlo#0 + (byte) bitmap_plot::x#4) Simplifying constant integer cast *((byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#4) @@ -1463,20 +1451,16 @@ Finalized unsigned number type (byte) $20 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $80 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 diff --git a/src/test/ref/examples/chargen/chargen-analysis.log b/src/test/ref/examples/chargen/chargen-analysis.log index 083b4cd9d..f0f45b827 100644 --- a/src/test/ref/examples/chargen/chargen-analysis.log +++ b/src/test/ref/examples/chargen/chargen-analysis.log @@ -274,7 +274,7 @@ main::@27: scope:[main] from main::@26 call print_str_at to:main::@28 main::@28: scope:[main] from main::@27 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@28 main::@29 (byte) main::i#2 ← phi( main::@28/(byte) main::i#0 main::@29/(byte) main::i#1 ) @@ -385,7 +385,7 @@ main::@23: scope:[main] from main::@34 main::@11: scope:[main] from main::@10 main::@23 (byte) main::shift#9 ← phi( main::@10/(byte) main::shift#1 main::@23/(byte) main::shift#2 ) (byte) main::cur_pos#11 ← phi( main::@10/(byte) main::cur_pos#13 main::@23/(byte) main::cur_pos#14 ) - (byte) main::ch#0 ← (number) 0 + (byte) main::ch#0 ← (byte) 0 to:main::@12 main::@12: scope:[main] from main::@11 main::@14 (byte) main::shift#7 ← phi( main::@11/(byte) main::shift#9 main::@14/(byte) main::shift#10 ) @@ -513,7 +513,7 @@ plot_chargen::@9: scope:[plot_chargen] from plot_chargen::@1 (word~) plot_chargen::$7 ← (word) mul8u::return#4 (byte*~) plot_chargen::$8 ← (byte*~) plot_chargen::$6 + (word~) plot_chargen::$7 (byte*) plot_chargen::sc#0 ← (byte*~) plot_chargen::$8 - (byte) plot_chargen::y#0 ← (number) 0 + (byte) plot_chargen::y#0 ← (byte) 0 to:plot_chargen::@3 plot_chargen::@2: scope:[plot_chargen] from plot_chargen (byte) plot_chargen::pos#4 ← phi( plot_chargen/(byte) plot_chargen::pos#3 ) @@ -526,7 +526,7 @@ plot_chargen::@3: scope:[plot_chargen] from plot_chargen::@7 plot_chargen::@9 (byte) plot_chargen::y#2 ← phi( plot_chargen::@7/(byte) plot_chargen::y#1 plot_chargen::@9/(byte) plot_chargen::y#0 ) (byte*) plot_chargen::chargen#3 ← phi( plot_chargen::@7/(byte*) plot_chargen::chargen#4 plot_chargen::@9/(byte*) plot_chargen::chargen#5 ) (byte) plot_chargen::bits#0 ← *((byte*) plot_chargen::chargen#3 + (byte) plot_chargen::y#2) - (byte) plot_chargen::x#0 ← (number) 0 + (byte) plot_chargen::x#0 ← (byte) 0 to:plot_chargen::@4 plot_chargen::@4: scope:[plot_chargen] from plot_chargen::@3 plot_chargen::@5 (byte*) plot_chargen::chargen#8 ← phi( plot_chargen::@3/(byte*) plot_chargen::chargen#3 plot_chargen::@5/(byte*) plot_chargen::chargen#7 ) @@ -1151,7 +1151,6 @@ Adding number conversion cast (unumber) 1 in (byte*~) main::$5 ← (byte*) SCREE Adding number conversion cast (unumber) $14 in (byte*~) main::$6 ← (byte*~) main::$5 + (number) $14 Adding number conversion cast (unumber) 1 in (byte*~) main::$8 ← (byte*) SCREEN#0 + (number) 1 Adding number conversion cast (unumber) $1e in (byte*~) main::$9 ← (byte*~) main::$8 + (number) $1e -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $20 in (byte) plot_chargen::ch#0 ← (number) $20 Adding number conversion cast (unumber) 0 in (byte) plot_chargen::shift#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) main::cur_pos#0 ← (number) 0 @@ -1167,7 +1166,6 @@ Adding number conversion cast (unumber) 0 in (bool~) main::$28 ← (byte~) main: Adding number conversion cast (unumber) 3 in (byte) main::cur_pos#4 ← (number) 3 Adding number conversion cast (unumber) 1 in (byte) main::shift#1 ← (number) 1 Adding number conversion cast (unumber) 0 in (byte) main::shift#2 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::ch#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) main::pressed#0 ← (number) 0 Adding number conversion cast (unumber) $3f in (bool~) main::$30 ← (byte) main::key#0 != (number) $3f Adding number conversion cast (unumber) 0 in (bool~) main::$33 ← (byte) main::pressed#2 != (number) 0 @@ -1178,9 +1176,7 @@ Adding number conversion cast (unumber) $32 in *((byte*) PROCPORT#0) ← (number Adding number conversion cast (unumber) $28 in (byte*~) plot_chargen::$5 ← (byte*) SCREEN#0 + (number) $28 Adding number conversion cast (unumber) 1 in (byte*~) plot_chargen::$6 ← (byte*~) plot_chargen::$5 + (number) 1 Adding number conversion cast (unumber) $a in (byte) mul8u::b#0 ← (number) $a -Adding number conversion cast (unumber) 0 in (byte) plot_chargen::y#0 ← (number) 0 Adding number conversion cast (unumber) $800 in (byte*~) plot_chargen::$9 ← (byte*) plot_chargen::chargen#2 + (number) $800 -Adding number conversion cast (unumber) 0 in (byte) plot_chargen::x#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (number~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (number) $80 Adding number conversion cast (unumber) plot_chargen::$10 in (number~) plot_chargen::$10 ← (byte) plot_chargen::bits#2 & (unumber)(number) $80 Adding number conversion cast (unumber) 0 in (bool~) plot_chargen::$11 ← (unumber~) plot_chargen::$10 != (number) 0 @@ -1254,7 +1250,6 @@ Inlining cast (byte) KEY_2#0 ← (unumber)(number) $3b Inlining cast (byte) KEY_SPACE#0 ← (unumber)(number) $3c Inlining cast (byte) KEY_Q#0 ← (unumber)(number) $3e Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte) plot_chargen::ch#0 ← (unumber)(number) $20 Inlining cast (byte) plot_chargen::shift#0 ← (unumber)(number) 0 Inlining cast (byte) main::cur_pos#0 ← (unumber)(number) 0 @@ -1265,13 +1260,10 @@ Inlining cast (byte) main::cur_pos#3 ← (unumber)(number) 2 Inlining cast (byte) main::cur_pos#4 ← (unumber)(number) 3 Inlining cast (byte) main::shift#1 ← (unumber)(number) 1 Inlining cast (byte) main::shift#2 ← (unumber)(number) 0 -Inlining cast (byte) main::ch#0 ← (unumber)(number) 0 Inlining cast (byte) main::pressed#0 ← (unumber)(number) 0 Inlining cast (word~) plot_chargen::$0 ← (word)(byte) plot_chargen::ch#2 Inlining cast *((byte*) PROCPORT#0) ← (unumber)(number) $32 Inlining cast (byte) mul8u::b#0 ← (unumber)(number) $a -Inlining cast (byte) plot_chargen::y#0 ← (unumber)(number) 0 -Inlining cast (byte) plot_chargen::x#0 ← (unumber)(number) 0 Inlining cast *((byte*) PROCPORT#0) ← (unumber)(number) $37 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1 @@ -1380,7 +1372,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast $14 Simplifying constant integer cast 1 Simplifying constant integer cast $1e -Simplifying constant integer cast 0 Simplifying constant integer cast $20 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -1397,7 +1388,6 @@ Simplifying constant integer cast 3 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $3f Simplifying constant integer cast 0 Simplifying constant integer cast 8 @@ -1406,9 +1396,7 @@ Simplifying constant integer cast $32 Simplifying constant integer cast $28 Simplifying constant integer cast 1 Simplifying constant integer cast $a -Simplifying constant integer cast 0 Simplifying constant integer cast $800 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -1486,7 +1474,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $14 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $1e -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $20 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -1503,7 +1490,6 @@ Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $3f Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 @@ -1512,9 +1498,7 @@ Finalized unsigned number type (byte) $32 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $a -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $800 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 diff --git a/src/test/ref/examples/fastmultiply/fastmultiply8.log b/src/test/ref/examples/fastmultiply/fastmultiply8.log index ba688ced7..5f325eb2a 100644 --- a/src/test/ref/examples/fastmultiply/fastmultiply8.log +++ b/src/test/ref/examples/fastmultiply/fastmultiply8.log @@ -148,7 +148,7 @@ main::@7: scope:[main] from main (byte*) main::at_line#0 ← ((byte*)) (number) $400 (byte*~) main::$1 ← (byte*) main::at_line#0 + (number) 4 (byte*) main::at#0 ← (byte*~) main::$1 - (byte) main::k#0 ← (number) 0 + (byte) main::k#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@7 main::@8 (byte*) main::at_line#7 ← phi( main::@7/(byte*) main::at_line#0 main::@8/(byte*) main::at_line#5 ) @@ -169,7 +169,7 @@ main::@8: scope:[main] from main::@1 to:main::@2 main::@2: scope:[main] from main::@8 (byte*) main::at_line#3 ← phi( main::@8/(byte*) main::at_line#5 ) - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@5 (byte) main::i#2 ← phi( main::@2/(byte) main::i#0 main::@5/(byte) main::i#1 ) @@ -184,7 +184,7 @@ main::@9: scope:[main] from main::@3 (byte*) main::at_line#10 ← phi( main::@3/(byte*) main::at_line#1 ) (byte) main::i#6 ← phi( main::@3/(byte) main::i#2 ) (byte*) main::at#9 ← phi( main::@3/(byte*) main::at#2 ) - (byte) main::j#0 ← (number) 0 + (byte) main::j#0 ← (byte) 0 to:main::@4 main::@4: scope:[main] from main::@11 main::@9 (byte*) main::at_line#9 ← phi( main::@11/(byte*) main::at_line#6 main::@9/(byte*) main::at_line#10 ) @@ -235,7 +235,7 @@ init_screen: scope:[init_screen] from main init_screen::@5: scope:[init_screen] from init_screen (byte*) init_screen::COLS#0 ← ((byte*)) (number) $d800 (byte) init_screen::WHITE#0 ← (number) 1 - (byte) init_screen::l#0 ← (number) 0 + (byte) init_screen::l#0 ← (byte) 0 to:init_screen::@1 init_screen::@1: scope:[init_screen] from init_screen::@1 init_screen::@5 (byte) init_screen::l#2 ← phi( init_screen::@1/(byte) init_screen::l#1 init_screen::@5/(byte) init_screen::l#0 ) @@ -247,7 +247,7 @@ init_screen::@1: scope:[init_screen] from init_screen::@1 init_screen::@5 to:init_screen::@2 init_screen::@2: scope:[init_screen] from init_screen::@1 (byte*) init_screen::COLS#4 ← phi( init_screen::@1/(byte*) init_screen::COLS#2 ) - (byte) init_screen::m#0 ← (number) 0 + (byte) init_screen::m#0 ← (byte) 0 to:init_screen::@3 init_screen::@3: scope:[init_screen] from init_screen::@2 init_screen::@3 (byte) init_screen::m#2 ← phi( init_screen::@2/(byte) init_screen::m#0 init_screen::@3/(byte) init_screen::m#1 ) @@ -518,15 +518,10 @@ Adding number conversion cast (unumber) print_byte_at::$2 in (number~) print_byt Adding number conversion cast (unumber) 1 in (byte*~) print_byte_at::$3 ← (byte*) print_byte_at::at#2 + (number) 1 Adding number conversion cast (unumber) $3e8 in (byte*~) print_cls::$0 ← (byte*) print_screen#2 + (number) $3e8 Adding number conversion cast (unumber) 4 in (byte*~) main::$1 ← (byte*) main::at_line#0 + (number) 4 -Adding number conversion cast (unumber) 0 in (byte) main::k#0 ← (number) 0 Adding number conversion cast (unumber) 4 in (byte*) main::at#1 ← (byte*) main::at#5 + (number) 4 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte*) main::at_line#1 ← (byte*) main::at_line#2 + (number) $28 -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 Adding number conversion cast (unumber) 4 in (byte*) main::at#3 ← (byte*) main::at#6 + (number) 4 Adding number conversion cast (unumber) 1 in (byte) init_screen::WHITE#0 ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) init_screen::l#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) init_screen::m#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) init_screen::COLS#3 + (number) 0) ← (byte) init_screen::WHITE#0 Adding number conversion cast (unumber) 1 in *((byte*) init_screen::COLS#3 + (number) 1) ← (byte) init_screen::WHITE#0 Adding number conversion cast (unumber) 2 in *((byte*) init_screen::COLS#3 + (number) 2) ← (byte) init_screen::WHITE#0 @@ -538,13 +533,8 @@ Successful SSA optimization PassNAddArrayNumberTypeConversions Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Inlining cast (byte~) print_sbyte_at::$1 ← (byte)(signed byte) print_sbyte_at::b#6 Inlining cast (byte*) main::at_line#0 ← (byte*)(number) $400 -Inlining cast (byte) main::k#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 Inlining cast (byte*) init_screen::COLS#0 ← (byte*)(number) $d800 Inlining cast (byte) init_screen::WHITE#0 ← (unumber)(number) 1 -Inlining cast (byte) init_screen::l#0 ← (unumber)(number) 0 -Inlining cast (byte) init_screen::m#0 ← (unumber)(number) 0 Inlining cast (signed byte*) ap#0 ← (signed byte*)(number) $fd Inlining cast (signed byte*) bp#0 ← (signed byte*)(number) $fe Inlining cast (signed byte*) cp#0 ← (signed byte*)(number) $ff @@ -569,17 +559,12 @@ Simplifying constant integer cast $40 Simplifying constant integer cast $5f Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 4 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant pointer cast (byte*) 55296 Simplifying constant integer cast 1 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 3 @@ -597,16 +582,11 @@ Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 4 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 3 diff --git a/src/test/ref/examples/fire/fire.asm b/src/test/ref/examples/fire/fire.asm index 2d7d0070d..35cf6694a 100644 --- a/src/test/ref/examples/fire/fire.asm +++ b/src/test/ref/examples/fire/fire.asm @@ -309,7 +309,7 @@ sid_rnd_init: { fillscreen: { .label screen = $11 .label i = $13 - lda #0 + lda #<0 sta i sta i+1 b1: diff --git a/src/test/ref/examples/fire/fire.cfg b/src/test/ref/examples/fire/fire.cfg index 0c035a0bd..becac42df 100644 --- a/src/test/ref/examples/fire/fire.cfg +++ b/src/test/ref/examples/fire/fire.cfg @@ -174,7 +174,7 @@ fillscreen: scope:[fillscreen] from main main::@4 main::@5 main::@6 [90] (byte) fillscreen::fill#5 ← phi( main/(byte) 0 main::@5/(byte) 0 main::@6/(const byte) YELLOW#0 main::@4/(byte) 0 ) to:fillscreen::@1 fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@1 - [91] (word) fillscreen::i#2 ← phi( fillscreen/(byte) 0 fillscreen::@1/(word) fillscreen::i#1 ) + [91] (word) fillscreen::i#2 ← phi( fillscreen/(word) 0 fillscreen::@1/(word) fillscreen::i#1 ) [91] (byte*) fillscreen::screen#5 ← phi( fillscreen/(byte*) fillscreen::screen#6 fillscreen::@1/(byte*) fillscreen::screen#4 ) [92] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 [93] (byte*) fillscreen::screen#4 ← ++ (byte*) fillscreen::screen#5 diff --git a/src/test/ref/examples/fire/fire.log b/src/test/ref/examples/fire/fire.log index c16e600b7..938266697 100644 --- a/src/test/ref/examples/fire/fire.log +++ b/src/test/ref/examples/fire/fire.log @@ -408,7 +408,7 @@ makecharset::@return: scope:[makecharset] from makecharset::@11 fillscreen: scope:[fillscreen] from main main::@10 main::@11 main::@9 (byte*) fillscreen::screen#6 ← phi( main/(byte*) fillscreen::screen#0 main::@10/(byte*) fillscreen::screen#2 main::@11/(byte*) fillscreen::screen#3 main::@9/(byte*) fillscreen::screen#1 ) (byte) fillscreen::fill#5 ← phi( main/(byte) fillscreen::fill#0 main::@10/(byte) fillscreen::fill#2 main::@11/(byte) fillscreen::fill#3 main::@9/(byte) fillscreen::fill#1 ) - (word) fillscreen::i#0 ← (number) 0 + (word) fillscreen::i#0 ← (word) 0 to:fillscreen::@1 fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@1 (word) fillscreen::i#2 ← phi( fillscreen/(word) fillscreen::i#0 fillscreen::@1/(word) fillscreen::i#1 ) @@ -808,7 +808,6 @@ Adding number conversion cast (unumber) makecharset::$15 in (byte*~) makecharset Adding number conversion cast (unumber) 3 in (word~) makecharset::$18 ← (word~) makecharset::$17 << (number) 3 Adding number conversion cast (unumber) 8 in (bool~) makecharset::$20 ← (byte) makecharset::i#1 < (number) 8 Adding number conversion cast (unumber) $40 in (bool~) makecharset::$21 ← (byte) makecharset::c#1 < (number) $40 -Adding number conversion cast (unumber) 0 in (word) fillscreen::i#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (unumber) $28 - 1 in (unumber~) fire::$7 ← (number) $28 - (number) 1 Adding number conversion cast (unumber) $28 - 1 in (unumber~) fire::$8 ← (number) $28 - (number) 1 @@ -855,7 +854,6 @@ Inlining cast (byte) makecharset::b#0 ← (unumber)(number) 0 Inlining cast (byte) makecharset::ii#0 ← (unumber)(number) 0 Inlining cast (unumber~) makecharset::$25 ← (unumber)(number~) makecharset::$15 Inlining cast (word~) makecharset::$17 ← (word)(byte) makecharset::c#3 -Inlining cast (word) fillscreen::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 @@ -913,7 +911,6 @@ Simplifying constant integer cast 7 Simplifying constant integer cast 3 Simplifying constant integer cast 8 Simplifying constant integer cast $40 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 7 @@ -952,7 +949,6 @@ Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $40 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to word in (unumber~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (word) $3fff Inferred type updated to word in (unumber~) main::toD0181_$2#0 ← (word~) main::toD0181_$1#0 * (byte) 4 @@ -1293,7 +1289,7 @@ Constant inlined fire::$18 = (number) $19*(number) $28 Constant inlined fire::$5 = (const byte*) BUFFER#0+(number) $18*(number) $28 Constant inlined fire::screenbase#0 = (const byte*) SCREEN1#0 Constant inlined fire::$4 = (number) $18*(number) $28 -Constant inlined fillscreen::i#0 = (byte) 0 +Constant inlined fillscreen::i#0 = (word) 0 Constant inlined makecharset::$5 = (number) $100*(number) 8 Constant inlined makecharset::$3 = (number) $40*(number) 8 Constant inlined makecharset::$0 = (number) 1*(number) 8 @@ -1625,7 +1621,7 @@ fillscreen: scope:[fillscreen] from main main::@4 main::@5 main::@6 [90] (byte) fillscreen::fill#5 ← phi( main/(byte) 0 main::@5/(byte) 0 main::@6/(const byte) YELLOW#0 main::@4/(byte) 0 ) to:fillscreen::@1 fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@1 - [91] (word) fillscreen::i#2 ← phi( fillscreen/(byte) 0 fillscreen::@1/(word) fillscreen::i#1 ) + [91] (word) fillscreen::i#2 ← phi( fillscreen/(word) 0 fillscreen::@1/(word) fillscreen::i#1 ) [91] (byte*) fillscreen::screen#5 ← phi( fillscreen/(byte*) fillscreen::screen#6 fillscreen::@1/(byte*) fillscreen::screen#4 ) [92] *((byte*) fillscreen::screen#5) ← (byte) fillscreen::fill#5 [93] (byte*) fillscreen::screen#4 ← ++ (byte*) fillscreen::screen#5 @@ -2497,10 +2493,10 @@ fillscreen: { .label fill = $16 //SEG180 [91] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] b1_from_fillscreen: - //SEG181 [91] phi (word) fillscreen::i#2 = (byte) 0 [phi:fillscreen->fillscreen::@1#0] -- vwuz1=vbuc1 - lda #0 + //SEG181 [91] phi (word) fillscreen::i#2 = (word) 0 [phi:fillscreen->fillscreen::@1#0] -- vwuz1=vwuc1 + lda #<0 sta i - lda #0 + lda #>0 sta i+1 //SEG182 [91] phi (byte*) fillscreen::screen#5 = (byte*) fillscreen::screen#6 [phi:fillscreen->fillscreen::@1#1] -- register_copy jmp b1 @@ -3340,10 +3336,10 @@ fillscreen: { .label i = $13 //SEG180 [91] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] b1_from_fillscreen: - //SEG181 [91] phi (word) fillscreen::i#2 = (byte) 0 [phi:fillscreen->fillscreen::@1#0] -- vwuz1=vbuc1 - lda #0 + //SEG181 [91] phi (word) fillscreen::i#2 = (word) 0 [phi:fillscreen->fillscreen::@1#0] -- vwuz1=vwuc1 + lda #<0 sta i - lda #0 + lda #>0 sta i+1 //SEG182 [91] phi (byte*) fillscreen::screen#5 = (byte*) fillscreen::screen#6 [phi:fillscreen->fillscreen::@1#1] -- register_copy jmp b1 @@ -3426,7 +3422,7 @@ Removing instruction ldy #0 Replacing instruction ldy #0 with TAY Replacing instruction ldx #0 with TAX Replacing instruction lda #0 with TYA -Removing instruction lda #0 +Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b3 with b1 Replacing label b6_from_b7 with b6 @@ -4210,8 +4206,8 @@ fillscreen: { .label screen = $11 .label i = $13 //SEG180 [91] phi from fillscreen to fillscreen::@1 [phi:fillscreen->fillscreen::@1] - //SEG181 [91] phi (word) fillscreen::i#2 = (byte) 0 [phi:fillscreen->fillscreen::@1#0] -- vwuz1=vbuc1 - lda #0 + //SEG181 [91] phi (word) fillscreen::i#2 = (word) 0 [phi:fillscreen->fillscreen::@1#0] -- vwuz1=vwuc1 + lda #<0 sta i sta i+1 //SEG182 [91] phi (byte*) fillscreen::screen#5 = (byte*) fillscreen::screen#6 [phi:fillscreen->fillscreen::@1#1] -- register_copy diff --git a/src/test/ref/examples/multiplexer/simple-multiplexer.log b/src/test/ref/examples/multiplexer/simple-multiplexer.log index 2309aecdc..90196fc8c 100644 --- a/src/test/ref/examples/multiplexer/simple-multiplexer.log +++ b/src/test/ref/examples/multiplexer/simple-multiplexer.log @@ -135,7 +135,7 @@ plexInit::plexSetScreen1: scope:[plexInit] from plexInit plexInit::@3: scope:[plexInit] from plexInit::plexSetScreen1 (byte*) PLEX_SCREEN_PTR#22 ← phi( plexInit::plexSetScreen1/(byte*) PLEX_SCREEN_PTR#1 ) (number~) plexInit::$1 ← (byte) PLEX_COUNT#0 - (number) 1 - (byte) plexInit::i#0 ← (number) 0 + (byte) plexInit::i#0 ← (byte) 0 to:plexInit::@1 plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::@3 (byte*) PLEX_SCREEN_PTR#15 ← phi( plexInit::@1/(byte*) PLEX_SCREEN_PTR#15 plexInit::@3/(byte*) PLEX_SCREEN_PTR#22 ) @@ -152,7 +152,7 @@ plexInit::@return: scope:[plexInit] from plexInit::@1 to:@return plexSort: scope:[plexSort] from loop::@11 (number~) plexSort::$1 ← (byte) PLEX_COUNT#0 - (number) 2 - (byte) plexSort::m#0 ← (number) 0 + (byte) plexSort::m#0 ← (byte) 0 to:plexSort::@1 plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 (byte) plexSort::m#2 ← phi( plexSort/(byte) plexSort::m#0 plexSort::@2/(byte) plexSort::m#1 ) @@ -204,7 +204,7 @@ plexSort::plexFreePrepare1: scope:[plexSort] from plexSort::@6 (byte) plex_sprite_msb#38 ← phi( plexSort::@6/(byte) plex_sprite_msb#1 ) (byte) plex_sprite_idx#39 ← phi( plexSort::@6/(byte) plex_sprite_idx#1 ) (byte) plex_show_idx#39 ← phi( plexSort::@6/(byte) plex_show_idx#1 ) - (byte) plexSort::plexFreePrepare1_s#0 ← (number) 0 + (byte) plexSort::plexFreePrepare1_s#0 ← (byte) 0 to:plexSort::plexFreePrepare1_@1 plexSort::plexFreePrepare1_@1: scope:[plexSort] from plexSort::plexFreePrepare1 plexSort::plexFreePrepare1_@1 (byte) plex_sprite_msb#30 ← phi( plexSort::plexFreePrepare1/(byte) plex_sprite_msb#38 plexSort::plexFreePrepare1_@1/(byte) plex_sprite_msb#30 ) @@ -406,7 +406,7 @@ init::@5: scope:[init] from init (byte*) PLEX_SCREEN_PTR#5 ← (byte*) PLEX_SCREEN_PTR#12 (word) init::xp#0 ← (number) $20 (number~) init::$3 ← (byte) PLEX_COUNT#0 - (number) 1 - (byte) init::sx#0 ← (number) 0 + (byte) init::sx#0 ← (byte) 0 to:init::@1 init::@1: scope:[init] from init::@1 init::@5 (byte*) PLEX_SCREEN_PTR#28 ← phi( init::@1/(byte*) PLEX_SCREEN_PTR#28 init::@5/(byte*) PLEX_SCREEN_PTR#5 ) @@ -425,7 +425,7 @@ init::@1: scope:[init] from init::@1 init::@5 init::@2: scope:[init] from init::@1 (byte*) PLEX_SCREEN_PTR#24 ← phi( init::@1/(byte*) PLEX_SCREEN_PTR#28 ) *((byte*) SPRITES_ENABLE#0) ← (number) $ff - (byte) init::ss#0 ← (number) 0 + (byte) init::ss#0 ← (byte) 0 to:init::@3 init::@3: scope:[init] from init::@2 init::@3 (byte*) PLEX_SCREEN_PTR#20 ← phi( init::@2/(byte*) PLEX_SCREEN_PTR#24 init::@3/(byte*) PLEX_SCREEN_PTR#20 ) @@ -477,7 +477,7 @@ loop::@6: scope:[loop] from loop::@4 *((byte*) BORDERCOL#0) ← ++ *((byte*) BORDERCOL#0) (byte) loop::y_idx#0 ← (byte) loop::sin_idx#2 (number~) loop::$1 ← (byte) PLEX_COUNT#0 - (number) 1 - (byte) loop::sy#0 ← (number) 0 + (byte) loop::sy#0 ← (byte) 0 to:loop::@10 loop::@10: scope:[loop] from loop::@10 loop::@6 (byte*) PLEX_SCREEN_PTR#39 ← phi( loop::@10/(byte*) PLEX_SCREEN_PTR#39 loop::@6/(byte*) PLEX_SCREEN_PTR#40 ) @@ -537,7 +537,7 @@ loop::@14: scope:[loop] from loop::@12 (byte) plex_sprite_idx#47 ← phi( loop::@12/(byte) plex_sprite_idx#48 ) (byte) plex_free_next#36 ← phi( loop::@12/(byte) plex_free_next#41 ) (number~) loop::$6 ← (byte) PLEX_COUNT#0 - (number) 1 - (byte) loop::ss#0 ← (number) 0 + (byte) loop::ss#0 ← (byte) 0 to:loop::@18 loop::@18: scope:[loop] from loop::@14 loop::@31 (byte) loop::sin_idx#14 ← phi( loop::@14/(byte) loop::sin_idx#15 loop::@31/(byte) loop::sin_idx#8 ) @@ -1178,10 +1178,8 @@ Adding number conversion cast (unumber) 1 in (byte) plex_sprite_msb#0 ← (numbe Adding number conversion cast (unumber) $3f8 in (byte*~) plexInit::plexSetScreen1_$0#0 ← (byte*) plexInit::plexSetScreen1_screen#1 + (number) $3f8 Adding number conversion cast (unumber) 1 in (number~) plexInit::$1 ← (byte) PLEX_COUNT#0 - (number) 1 Adding number conversion cast (unumber) plexInit::$1 in (number~) plexInit::$1 ← (byte) PLEX_COUNT#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) plexInit::i#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (number~) plexSort::$1 ← (byte) PLEX_COUNT#0 - (number) 2 Adding number conversion cast (unumber) plexSort::$1 in (number~) plexSort::$1 ← (byte) PLEX_COUNT#0 - (unumber)(number) 2 -Adding number conversion cast (unumber) 0 in (byte) plexSort::m#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) plexSort::$2 ← (byte) plexSort::m#2 + (number) 1 Adding number conversion cast (unumber) plexSort::$2 in (number~) plexSort::$2 ← (byte) plexSort::m#2 + (unumber)(number) 1 Adding number conversion cast (unumber) 1 in (number~) plexSort::$5 ← (byte) plexSort::s#3 + (number) 1 @@ -1190,7 +1188,6 @@ Adding number conversion cast (unumber) $ff in (bool~) plexSort::$6 ← (byte) p Adding number conversion cast (unumber) 0 in (byte) plex_show_idx#1 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) plex_sprite_idx#1 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) plex_sprite_msb#1 ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) plexSort::plexFreePrepare1_s#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte[8]) PLEX_FREE_YPOS#0 + (byte) plexSort::plexFreePrepare1_s#2) ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) plex_free_next#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte~) plexShowSprite::$0 ← (byte) plex_sprite_idx#12 << (number) 1 @@ -1216,22 +1213,18 @@ Adding number conversion cast (unumber) init::$1 in (number~) init::$1 ← (byte Adding number conversion cast (unumber) $20 in (word) init::xp#0 ← (number) $20 Adding number conversion cast (unumber) 1 in (number~) init::$3 ← (byte) PLEX_COUNT#0 - (number) 1 Adding number conversion cast (unumber) init::$3 in (number~) init::$3 ← (byte) PLEX_COUNT#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) init::sx#0 ← (number) 0 Adding number conversion cast (unumber) $40 in (byte*~) init::$4 ← (byte*) SPRITE#0 / (number) $40 Adding number conversion cast (unumber) 9 in (word) init::xp#1 ← (word) init::xp#2 + (number) 9 Adding number conversion cast (unumber) $ff in *((byte*) SPRITES_ENABLE#0) ← (number) $ff -Adding number conversion cast (unumber) 0 in (byte) init::ss#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) loop::sin_idx#0 ← (number) 0 Adding number conversion cast (unumber) $ff in (bool~) loop::$0 ← *((byte*) RASTER#0) != (number) $ff Adding number conversion cast (unumber) 1 in (number~) loop::$1 ← (byte) PLEX_COUNT#0 - (number) 1 Adding number conversion cast (unumber) loop::$1 in (number~) loop::$1 ← (byte) PLEX_COUNT#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) loop::sy#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (number) 8 Adding number conversion cast (unumber) 1 in (byte) loop::sin_idx#1 ← (byte) loop::sin_idx#3 + (number) 1 Adding number conversion cast (unumber) 0 in (bool~) loop::$5 ← (byte~) loop::$4 != (number) 0 Adding number conversion cast (unumber) 1 in (number~) loop::$6 ← (byte) PLEX_COUNT#0 - (number) 1 Adding number conversion cast (unumber) loop::$6 in (number~) loop::$6 ← (byte) PLEX_COUNT#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) loop::ss#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SPRITES_XPOS#0 ← (byte*)(number) $d000 Inlining cast (byte*) SPRITES_YPOS#0 ← (byte*)(number) $d001 @@ -1251,12 +1244,9 @@ Inlining cast (byte*) PLEX_SCREEN_PTR#0 ← (byte*)(number~) $0 Inlining cast (byte) plex_show_idx#0 ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_idx#0 ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_msb#0 ← (unumber)(number) 1 -Inlining cast (byte) plexInit::i#0 ← (unumber)(number) 0 -Inlining cast (byte) plexSort::m#0 ← (unumber)(number) 0 Inlining cast (byte) plex_show_idx#1 ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_idx#1 ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_msb#1 ← (unumber)(number) 1 -Inlining cast (byte) plexSort::plexFreePrepare1_s#0 ← (unumber)(number) 0 Inlining cast *((byte[8]) PLEX_FREE_YPOS#0 + (byte) plexSort::plexFreePrepare1_s#2) ← (unumber)(number) 0 Inlining cast (byte) plex_free_next#0 ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_msb#4 ← (unumber)(number) 1 @@ -1265,13 +1255,9 @@ Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte*) SPRITE#0 ← (byte*)(number) $2000 Inlining cast (byte*) YSIN#0 ← (byte*)(number) $2100 Inlining cast (word) init::xp#0 ← (unumber)(number) $20 -Inlining cast (byte) init::sx#0 ← (unumber)(number) 0 Inlining cast (byte~) init::$5 ← (byte)(byte*~) init::$4 Inlining cast *((byte*) SPRITES_ENABLE#0) ← (unumber)(number) $ff -Inlining cast (byte) init::ss#0 ← (unumber)(number) 0 Inlining cast (byte) loop::sin_idx#0 ← (unumber)(number) 0 -Inlining cast (byte) loop::sy#0 ← (unumber)(number) 0 -Inlining cast (byte) loop::ss#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53248 Simplifying constant pointer cast (byte*) 53249 @@ -1292,9 +1278,7 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $3f8 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $ff @@ -1303,7 +1287,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $15 Simplifying constant integer cast 1 @@ -1322,20 +1305,16 @@ Simplifying constant pointer cast (byte*) 8448 Simplifying constant integer cast 3 Simplifying constant integer cast $20 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast $40 Simplifying constant integer cast 9 Simplifying constant integer cast $ff Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) $10 @@ -1348,9 +1327,7 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $3f8 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $ff @@ -1359,7 +1336,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $15 Finalized unsigned number type (byte) 1 @@ -1375,20 +1351,16 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $20 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 9 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) plexInit::$1 ← (byte) PLEX_COUNT#0 - (byte) 1 Inferred type updated to byte in (unumber~) plexSort::$1 ← (byte) PLEX_COUNT#0 - (byte) 2 diff --git a/src/test/ref/examples/rotate/rotate.log b/src/test/ref/examples/rotate/rotate.log index 20ee39042..820b70656 100644 --- a/src/test/ref/examples/rotate/rotate.log +++ b/src/test/ref/examples/rotate/rotate.log @@ -312,7 +312,7 @@ init::@3: scope:[init] from init *((byte*) SPRITES_ENABLE#0) ← (number) $ff (byte*~) init::$1 ← (byte*) SCREEN#0 + (number) $3f8 (byte*) init::sprites_ptr#0 ← (byte*~) init::$1 - (byte) init::i#0 ← (number) 0 + (byte) init::i#0 ← (byte) 0 to:init::@1 init::@1: scope:[init] from init::@1 init::@3 (byte) init::i#2 ← phi( init::@1/(byte) init::i#1 init::@3/(byte) init::i#0 ) @@ -357,7 +357,7 @@ anim::@6: scope:[anim] from anim::@4 (signed byte~) anim::$2 ← ((signed byte)) *((byte*) SIN#1 + (byte) anim::angle#2) (signed byte) anim::sin_a#0 ← (signed byte~) anim::$2 (byte) anim::sprite_msb#0 ← (number) 0 - (byte) anim::i#0 ← (number) 0 + (byte) anim::i#0 ← (byte) 0 to:anim::@10 anim::@10: scope:[anim] from anim::@11 anim::@6 (byte*) SIN#22 ← phi( anim::@11/(byte*) SIN#7 anim::@6/(byte*) SIN#1 ) @@ -1045,12 +1045,10 @@ Adding number conversion cast (snumber) 0 in (bool~) mulf8s_prepared::$4 ← (si Adding number conversion cast (unumber) $40 in (byte*~) $0 ← (byte*) COS#0 + (number) $40 Adding number conversion cast (unumber) $ff in *((byte*) SPRITES_ENABLE#0) ← (number) $ff Adding number conversion cast (unumber) $3f8 in (byte*~) init::$1 ← (byte*) SCREEN#0 + (number) $3f8 -Adding number conversion cast (unumber) 0 in (byte) init::i#0 ← (number) 0 Adding number conversion cast (unumber) $40 in (byte*~) init::$2 ← (byte*) SPRITE#0 / (number) $40 Adding number conversion cast (unumber) 0 in (byte) anim::angle#0 ← (number) 0 Adding number conversion cast (unumber) $ff in (bool~) anim::$0 ← *((byte*) RASTER#0) != (number) $ff Adding number conversion cast (unumber) 0 in (byte) anim::sprite_msb#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) anim::i#0 ← (number) 0 Adding number conversion cast (snumber) 2 in (number~) anim::$5 ← (signed word~) anim::$4 * (number) 2 Adding number conversion cast (snumber) anim::$5 in (number~) anim::$5 ← (signed word~) anim::$4 * (snumber)(number) 2 Adding number conversion cast (snumber) 2 in (number~) anim::$7 ← (signed word~) anim::$6 * (number) 2 @@ -1103,13 +1101,11 @@ Inlining cast (byte~) mulf8s_prepared::$13 ← (byte)*((signed byte*) mulf8s_pre Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte*) COS#0 ← (byte*)(number) $2000 Inlining cast *((byte*) SPRITES_ENABLE#0) ← (unumber)(number) $ff -Inlining cast (byte) init::i#0 ← (unumber)(number) 0 Inlining cast (byte~) init::$3 ← (byte)(byte*~) init::$2 Inlining cast (byte) anim::angle#0 ← (unumber)(number) 0 Inlining cast (signed byte~) anim::$1 ← (signed byte)*((byte*) COS#0 + (byte) anim::angle#2) Inlining cast (signed byte~) anim::$2 ← (signed byte)*((byte*) SIN#1 + (byte) anim::angle#2) Inlining cast (byte) anim::sprite_msb#0 ← (unumber)(number) 0 -Inlining cast (byte) anim::i#0 ← (unumber)(number) 0 Inlining cast (byte~) anim::mulf8s_prepare1_$0#0 ← (byte)(signed byte) anim::mulf8s_prepare1_a#1 Inlining cast (byte~) anim::mulf8s_prepare2_$0#0 ← (byte)(signed byte) anim::mulf8s_prepare2_a#1 Inlining cast (signed byte~) anim::$14 ← (signed byte)(byte~) anim::$13 @@ -1154,7 +1150,6 @@ Simplifying constant pointer cast (byte*) 8192 Simplifying constant integer cast $40 Simplifying constant integer cast $ff Simplifying constant integer cast $3f8 -Simplifying constant integer cast 0 Simplifying constant integer cast $40 Simplifying constant integer cast -$46 Simplifying constant integer cast -$46 @@ -1175,7 +1170,6 @@ Simplifying constant integer cast $46 Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 2 Simplifying constant integer cast 2 @@ -1213,12 +1207,10 @@ Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) $ff Finalized unsigned number type (word) $3f8 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 2 Finalized signed number type (signed byte) 2 Finalized signed number type (signed byte) 2 diff --git a/src/test/ref/examples/scrollbig/scrollbig.log b/src/test/ref/examples/scrollbig/scrollbig.log index 2e5586c4b..8823a60ba 100644 --- a/src/test/ref/examples/scrollbig/scrollbig.log +++ b/src/test/ref/examples/scrollbig/scrollbig.log @@ -169,7 +169,7 @@ scroll_bit::@7: scope:[scroll_bit] from scroll_bit::@1 (byte*~) scroll_bit::$4 ← (byte*) SCREEN#0 + (number) $28 (byte*~) scroll_bit::$5 ← (byte*~) scroll_bit::$4 + (number) $27 (byte*) scroll_bit::sc#0 ← (byte*~) scroll_bit::$5 - (byte) scroll_bit::r#0 ← (number) 0 + (byte) scroll_bit::r#0 ← (byte) 0 to:scroll_bit::@3 scroll_bit::@2: scope:[scroll_bit] from scroll_bit (byte*) nxt#24 ← phi( scroll_bit/(byte*) nxt#29 ) @@ -671,7 +671,6 @@ Adding number conversion cast (unumber) 0 in (bool~) scroll_bit::$1 ← (byte) c Adding number conversion cast (unumber) $32 in *((byte*) PROCPORT#0) ← (number) $32 Adding number conversion cast (unumber) $28 in (byte*~) scroll_bit::$4 ← (byte*) SCREEN#0 + (number) $28 Adding number conversion cast (unumber) $27 in (byte*~) scroll_bit::$5 ← (byte*~) scroll_bit::$4 + (number) $27 -Adding number conversion cast (unumber) 0 in (byte) scroll_bit::r#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (number~) scroll_bit::$7 ← (word) scroll_bit::c#0 * (number) 8 Adding number conversion cast (unumber) scroll_bit::$7 in (number~) scroll_bit::$7 ← (word) scroll_bit::c#0 * (unumber)(number) 8 Adding number conversion cast (unumber) $80 in (byte) current_bit#6 ← (number) $80 @@ -727,7 +726,6 @@ Inlining cast (byte) scroll#2 ← (unumber)(number) 7 Inlining cast (byte) scroll#4 ← (unumber)(number) 7 Inlining cast (byte) current_bit#4 ← (unumber)(number) 1 Inlining cast *((byte*) PROCPORT#0) ← (unumber)(number) $32 -Inlining cast (byte) scroll_bit::r#0 ← (unumber)(number) 0 Inlining cast (byte) current_bit#6 ← (unumber)(number) $80 Inlining cast *((byte*) PROCPORT#0) ← (unumber)(number) $37 Inlining cast (byte) scroll_hard::i#0 ← (unumber)(number) 0 @@ -766,7 +764,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $32 Simplifying constant integer cast $28 Simplifying constant integer cast $27 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -797,7 +794,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $32 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $27 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/examples/scrolllogo/scrolllogo.log b/src/test/ref/examples/scrolllogo/scrolllogo.log index 849612aa1..8e4489e43 100644 --- a/src/test/ref/examples/scrolllogo/scrolllogo.log +++ b/src/test/ref/examples/scrolllogo/scrolllogo.log @@ -137,7 +137,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@2 (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@2/(word) divr16u::dividend#2 ) (word) divr16u::rem#10 ← phi( div32u16u/(word) divr16u::rem#3 div32u16u::@2/(word) divr16u::rem#4 ) (word) divr16u::quotient#0 ← (number) 0 - (byte) divr16u::i#0 ← (number) 0 + (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (byte) divr16u::i#5 ← phi( divr16u/(byte) divr16u::i#0 divr16u::@3/(byte) divr16u::i#1 ) @@ -683,7 +683,7 @@ main::@4: scope:[main] from main::@3 main::@5: scope:[main] from main::@4 (word) xsin_idx#21 ← phi( main::@4/(word) xsin_idx#22 ) (word) rem16u#30 ← phi( main::@4/(word) rem16u#33 ) - (byte) main::ch#0 ← (number) 0 + (byte) main::ch#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@1 main::@5 (word) xsin_idx#20 ← phi( main::@1/(word) xsin_idx#20 main::@5/(word) xsin_idx#21 ) @@ -1658,7 +1658,6 @@ Adding number conversion cast (unumber) 1 in (byte) WHITE#0 ← (number) 1 Adding number conversion cast (unumber) $b in (byte) DARK_GREY#0 ← (number) $b Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) divr16u::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1709,7 +1708,6 @@ Adding number conversion cast (unumber) $3e8 in (word) fill::size#0 ← (number) Adding number conversion cast (unumber) 8 in (number~) main::$2 ← (byte) WHITE#0 | (number) 8 Adding number conversion cast (unumber) main::$2 in (number~) main::$2 ← (byte) WHITE#0 | (unumber)(number) 8 Adding number conversion cast (unumber) $3e8 in (word) fill::size#1 ← (number) $3e8 -Adding number conversion cast (unumber) 0 in (byte) main::ch#0 ← (number) 0 Adding number conversion cast (snumber) -$140 in (signed word) sin16s_gen2::min#0 ← (number) -$140 Adding number conversion cast (snumber) $140 in (signed word) sin16s_gen2::max#0 ← (number) $140 Adding number conversion cast (unumber) 0 in (word) xsin_idx#2 ← (number) 0 @@ -1763,7 +1761,6 @@ Inlining cast (byte) WHITE#0 ← (unumber)(number) 1 Inlining cast (byte) DARK_GREY#0 ← (unumber)(number) $b Inlining cast (word) rem16u#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 -Inlining cast (byte) divr16u::i#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 Inlining cast (dword) mul16u::res#0 ← (unumber)(number) 0 Inlining cast (word~) mul16s::$0 ← (word)(signed word) mul16s::a#1 @@ -1794,7 +1791,6 @@ Inlining cast (word~) main::toD0181_$0#0 ← (word)(byte*) main::toD0181_screen# Inlining cast (word~) main::toD0181_$4#0 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast (word) fill::size#0 ← (unumber)(number) $3e8 Inlining cast (word) fill::size#1 ← (unumber)(number) $3e8 -Inlining cast (byte) main::ch#0 ← (unumber)(number) 0 Inlining cast (signed word) sin16s_gen2::min#0 ← (snumber)(number) -$140 Inlining cast (signed word) sin16s_gen2::max#0 ← (snumber)(number) $140 Inlining cast (word) xsin_idx#2 ← (unumber)(number) 0 @@ -1828,7 +1824,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast $b Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -1872,7 +1867,6 @@ Simplifying constant integer cast $f Simplifying constant integer cast $3e8 Simplifying constant integer cast 8 Simplifying constant integer cast $3e8 -Simplifying constant integer cast 0 Simplifying constant integer cast -$140 Simplifying constant integer cast $140 Simplifying constant integer cast 0 @@ -1907,7 +1901,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $b Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -1947,7 +1940,6 @@ Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 8 Finalized unsigned number type (word) $3e8 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed word) -$140 Finalized signed number type (signed word) $140 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/examples/showlogo/showlogo.log b/src/test/ref/examples/showlogo/showlogo.log index f0d7b98b2..59b6dfb65 100644 --- a/src/test/ref/examples/showlogo/showlogo.log +++ b/src/test/ref/examples/showlogo/showlogo.log @@ -134,7 +134,7 @@ main::@10: scope:[main] from main::@9 call fill to:main::@11 main::@11: scope:[main] from main::@10 - (byte) main::ch#0 ← (number) 0 + (byte) main::ch#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@1 main::@11 (byte) main::ch#2 ← phi( main::@1/(byte) main::ch#1 main::@11/(byte) main::ch#0 ) @@ -312,7 +312,6 @@ Adding number conversion cast (unumber) main::$2 in (word) fill::size#0 ← (num Adding number conversion cast (unumber) 8 in (number~) main::$5 ← (byte) WHITE#0 | (number) 8 Adding number conversion cast (unumber) main::$5 in (number~) main::$5 ← (byte) WHITE#0 | (unumber)(number) 8 Adding number conversion cast (unumber) main::$4 in (word) fill::size#1 ← (number~) main::$4 -Adding number conversion cast (unumber) 0 in (byte) main::ch#0 ← (number) 0 Adding number conversion cast (unumber) $3e7 in (byte*~) main::$10 ← (byte*) SCREEN#0 + (number) $3e7 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) BORDERCOL#0 ← (byte*)(number) $d020 @@ -333,7 +332,6 @@ Inlining cast (word~) main::toD0181_$0#0 ← (word)(byte*) main::toD0181_screen# Inlining cast (word~) main::toD0181_$4#0 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast (word) fill::size#0 ← (unumber)(number~) main::$2 Inlining cast (word) fill::size#1 ← (unumber)(number~) main::$4 -Inlining cast (byte) main::ch#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 @@ -354,7 +352,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast 8 -Simplifying constant integer cast 0 Simplifying constant integer cast $3e7 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $10 @@ -367,7 +364,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) 8 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3e7 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to word in (unumber~) main::toD0181_$1#0 ← (word~) main::toD0181_$0#0 & (word) $3fff diff --git a/src/test/ref/examples/sinplotter/sine-plotter.log b/src/test/ref/examples/sinplotter/sine-plotter.log index 080fcf44e..13b0c8361 100644 --- a/src/test/ref/examples/sinplotter/sine-plotter.log +++ b/src/test/ref/examples/sinplotter/sine-plotter.log @@ -139,7 +139,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@2 (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@2/(word) divr16u::dividend#2 ) (word) divr16u::rem#10 ← phi( div32u16u/(word) divr16u::rem#3 div32u16u::@2/(word) divr16u::rem#4 ) (word) divr16u::quotient#0 ← (number) 0 - (byte) divr16u::i#0 ← (number) 0 + (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (byte) divr16u::i#5 ← phi( divr16u/(byte) divr16u::i#0 divr16u::@3/(byte) divr16u::i#1 ) @@ -622,7 +622,7 @@ fill::@return: scope:[fill] from fill::@1 bitmap_init: scope:[bitmap_init] from main::@9 (byte*) bitmap_init::bitmap#5 ← phi( main::@9/(byte*) bitmap_init::bitmap#0 ) (byte) bitmap_init::bits#0 ← (number) $80 - (byte) bitmap_init::x#0 ← (number) 0 + (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 (byte*) bitmap_init::bitmap#3 ← phi( bitmap_init/(byte*) bitmap_init::bitmap#5 bitmap_init::@2/(byte*) bitmap_init::bitmap#2 ) @@ -650,7 +650,7 @@ bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@2 (byte*) bitmap_init::bitmap#1 ← phi( bitmap_init::@2/(byte*) bitmap_init::bitmap#2 ) (byte*) bitmap_init::yoffs#0 ← (byte*) bitmap_init::bitmap#1 - (byte) bitmap_init::y#0 ← (number) 0 + (byte) bitmap_init::y#0 ← (byte) 0 to:bitmap_init::@5 bitmap_init::@5: scope:[bitmap_init] from bitmap_init::@4 bitmap_init::@6 (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@4/(byte*) bitmap_init::yoffs#0 bitmap_init::@6/(byte*) bitmap_init::yoffs#4 ) @@ -686,12 +686,12 @@ bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@6 bitmap_clear: scope:[bitmap_clear] from main::@10 (byte*~) bitmap_clear::$0 ← ((byte*)) { *((byte[$100]) bitmap_plot_yhi#0 + (number) 0), *((byte[$100]) bitmap_plot_ylo#0 + (number) 0) } (byte*) bitmap_clear::bitmap#0 ← (byte*~) bitmap_clear::$0 - (byte) bitmap_clear::y#0 ← (number) 0 + (byte) bitmap_clear::y#0 ← (byte) 0 to:bitmap_clear::@1 bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear bitmap_clear::@3 (byte) bitmap_clear::y#4 ← phi( bitmap_clear/(byte) bitmap_clear::y#0 bitmap_clear::@3/(byte) bitmap_clear::y#1 ) (byte*) bitmap_clear::bitmap#3 ← phi( bitmap_clear/(byte*) bitmap_clear::bitmap#0 bitmap_clear::@3/(byte*) bitmap_clear::bitmap#4 ) - (byte) bitmap_clear::x#0 ← (number) 0 + (byte) bitmap_clear::x#0 ← (byte) 0 to:bitmap_clear::@2 bitmap_clear::@2: scope:[bitmap_clear] from bitmap_clear::@1 bitmap_clear::@2 (byte) bitmap_clear::y#3 ← phi( bitmap_clear::@1/(byte) bitmap_clear::y#4 bitmap_clear::@2/(byte) bitmap_clear::y#3 ) @@ -1746,7 +1746,6 @@ Adding number conversion cast (unumber) 8 in (byte) VIC_CSEL#0 ← (number) 8 Adding number conversion cast (unumber) 1 in (byte) WHITE#0 ← (number) 1 Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) divr16u::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1783,11 +1782,9 @@ Adding number conversion cast (unumber) 0 in (byte) mulu16_sel::select#4 ← (nu Adding number conversion cast (unumber) 4 in (word~) sin16s::$13 ← (word) sin16s::x5#0 >> (number) 4 Adding number conversion cast (unumber) 0 in (bool~) sin16s::$16 ← (byte) sin16s::isUpper#2 != (number) 0 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 -Adding number conversion cast (unumber) 0 in (byte) bitmap_init::x#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (number) 1 Adding number conversion cast (unumber) 0 in (bool~) bitmap_init::$0 ← (byte) bitmap_init::bits#1 == (number) 0 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#2 ← (number) $80 -Adding number conversion cast (unumber) 0 in (byte) bitmap_init::y#0 ← (number) 0 Adding number conversion cast (unumber) 7 in (number~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (number) 7 Adding number conversion cast (unumber) bitmap_init::$3 in (number~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (unumber)(number) 7 Adding number conversion cast (unumber) bitmap_init::$5 in (number~) bitmap_init::$5 ← (unumber~) bitmap_init::$3 | (byte~) bitmap_init::$4 @@ -1797,8 +1794,6 @@ Adding number conversion cast (unumber) 7 in (bool~) bitmap_init::$8 ← (unumbe Adding number conversion cast (unumber) bitmap_init::$10 in (byte*~) bitmap_init::$11 ← (byte*) bitmap_init::yoffs#3 + (number~) bitmap_init::$10 Adding number conversion cast (unumber) 0 in (var) bitmap_clear::$3 ← (byte)*((byte[$100]) bitmap_plot_yhi#0 + (number) 0) w= (byte)*((byte[$100]) bitmap_plot_ylo#0 + (number) 0) Adding number conversion cast (unumber) 0 in (var) bitmap_clear::$3 ← (byte)*((byte[$100]) bitmap_plot_yhi#0 + (unumber)(number) 0) w= (byte)*((byte[$100]) bitmap_plot_ylo#0 + (number) 0) -Adding number conversion cast (unumber) 0 in (byte) bitmap_clear::y#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) bitmap_clear::x#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) bitmap_clear::bitmap#2) ← (number) 0 Adding number conversion cast (unumber) $fff8 in (number~) bitmap_plot::$1 ← (word) bitmap_plot::x#2 & (number) $fff8 Adding number conversion cast (unumber) bitmap_plot::$1 in (number~) bitmap_plot::$1 ← (word) bitmap_plot::x#2 & (unumber)(number) $fff8 @@ -1851,7 +1846,6 @@ Inlining cast (byte*) CIA2_PORT_A_DDR#0 ← (byte*)(number) $dd02 Inlining cast (byte) WHITE#0 ← (unumber)(number) 1 Inlining cast (word) rem16u#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 -Inlining cast (byte) divr16u::i#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 Inlining cast (dword) mul16u::res#0 ← (unumber)(number) 0 Inlining cast (word~) mul16s::$0 ← (word)(signed word) mul16s::a#1 @@ -1876,12 +1870,8 @@ Inlining cast (byte) mulu16_sel::select#4 ← (unumber)(number) 0 Inlining cast (signed word~) sin16s::$15 ← (signed word)(word) sin16s::usinx#1 Inlining cast (signed word~) sin16s::$20 ← (signed word)(word) sin16s::usinx#3 Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 -Inlining cast (byte) bitmap_init::x#0 ← (unumber)(number) 0 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 -Inlining cast (byte) bitmap_init::y#0 ← (unumber)(number) 0 Inlining cast (unumber~) bitmap_init::$13 ← (unumber)(number~) bitmap_init::$10 -Inlining cast (byte) bitmap_clear::y#0 ← (unumber)(number) 0 -Inlining cast (byte) bitmap_clear::x#0 ← (unumber)(number) 0 Inlining cast *((byte*) bitmap_clear::bitmap#2) ← (unumber)(number) 0 Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte*) BITMAP#0 ← (byte*)(number) $2000 @@ -1916,7 +1906,6 @@ Simplifying constant pointer cast (byte*) 56578 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -1951,11 +1940,9 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 0 Simplifying constant integer cast $80 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $80 -Simplifying constant integer cast 0 Simplifying constant integer cast 7 Simplifying constant integer cast 7 Simplifying constant integer cast 7 @@ -1964,8 +1951,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast *((byte[$100]) bitmap_plot_ylo#0 + (unumber)(number) 0) Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast *((byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#2) Simplifying constant integer cast *((byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#2) Simplifying constant integer cast $fff8 @@ -2003,7 +1988,6 @@ Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -2036,19 +2020,15 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $fff8 Finalized unsigned number type (word) $200 Finalized unsigned number type (byte) 3 diff --git a/src/test/ref/examples/sinsprites/sinus-sprites.log b/src/test/ref/examples/sinsprites/sinus-sprites.log index 98f0a9ca8..ff350aed7 100644 --- a/src/test/ref/examples/sinsprites/sinus-sprites.log +++ b/src/test/ref/examples/sinsprites/sinus-sprites.log @@ -293,7 +293,7 @@ init: scope:[init] from main init::@3: scope:[init] from init (byte) progress_idx#45 ← phi( init/(byte) progress_idx#47 ) (byte*) progress_cursor#45 ← phi( init/(byte*) progress_cursor#47 ) - (byte) init::i#0 ← (number) 0 + (byte) init::i#0 ← (byte) 0 to:init::@1 init::@1: scope:[init] from init::@1 init::@3 (byte) progress_idx#43 ← phi( init::@1/(byte) progress_idx#43 init::@3/(byte) progress_idx#45 ) @@ -442,7 +442,7 @@ anim: scope:[anim] from main::@3 (byte) anim::yidx#0 ← (byte) sin_idx_y#9 (byte) anim::j2#0 ← (number) $c (byte) anim::x_msb#0 ← (number) 0 - (byte) anim::j#0 ← (number) 0 + (byte) anim::j#0 ← (byte) 0 to:anim::@4 anim::@4: scope:[anim] from anim anim::@6 (byte) sin_idx_y#24 ← phi( anim/(byte) sin_idx_y#9 anim::@6/(byte) sin_idx_y#19 ) @@ -569,7 +569,7 @@ place_sprites: scope:[place_sprites] from init::@2 (byte) place_sprites::spr_x#0 ← (number) $3c (byte) place_sprites::j2#0 ← (number) 0 (byte) place_sprites::col#0 ← (number) 5 - (byte) place_sprites::j#0 ← (number) 0 + (byte) place_sprites::j#0 ← (byte) 0 to:place_sprites::@1 place_sprites::@1: scope:[place_sprites] from place_sprites place_sprites::@1 (byte) place_sprites::col#2 ← phi( place_sprites/(byte) place_sprites::col#0 place_sprites::@1/(byte) place_sprites::col#1 ) @@ -600,7 +600,7 @@ place_sprites::@return: scope:[place_sprites] from place_sprites::@1 gen_sprites: scope:[gen_sprites] from init::@4 (byte[]) gen_sprites::cml#0 ← (const string) gen_sprites::$3 (byte*) gen_sprites::spr#0 ← (byte*) sprites#0 - (byte) gen_sprites::i#0 ← (number) 0 + (byte) gen_sprites::i#0 ← (byte) 0 to:gen_sprites::@1 gen_sprites::@1: scope:[gen_sprites] from gen_sprites gen_sprites::@3 (byte*) gen_sprites::spr#2 ← phi( gen_sprites/(byte*) gen_sprites::spr#0 gen_sprites::@3/(byte*) gen_sprites::spr#1 ) @@ -630,7 +630,7 @@ gen_chargen_sprite: scope:[gen_chargen_sprite] from gen_sprites::@1 (byte*) gen_chargen_sprite::chargen#0 ← (byte*~) gen_chargen_sprite::$2 asm { sei } *((byte*) PROCPORT#0) ← (number) $32 - (byte) gen_chargen_sprite::y#0 ← (number) 0 + (byte) gen_chargen_sprite::y#0 ← (byte) 0 to:gen_chargen_sprite::@1 gen_chargen_sprite::@1: scope:[gen_chargen_sprite] from gen_chargen_sprite gen_chargen_sprite::@8 (byte*) gen_chargen_sprite::sprite#11 ← phi( gen_chargen_sprite/(byte*) gen_chargen_sprite::sprite#12 gen_chargen_sprite::@8/(byte*) gen_chargen_sprite::sprite#2 ) @@ -639,7 +639,7 @@ gen_chargen_sprite::@1: scope:[gen_chargen_sprite] from gen_chargen_sprite gen_ (byte) gen_chargen_sprite::bits#0 ← *((byte*) gen_chargen_sprite::chargen#1 + (byte) gen_chargen_sprite::y#2) (byte) gen_chargen_sprite::s_gen#0 ← (number) 0 (byte) gen_chargen_sprite::s_gen_cnt#0 ← (number) 0 - (byte) gen_chargen_sprite::x#0 ← (number) 0 + (byte) gen_chargen_sprite::x#0 ← (byte) 0 to:gen_chargen_sprite::@2 gen_chargen_sprite::@2: scope:[gen_chargen_sprite] from gen_chargen_sprite::@1 gen_chargen_sprite::@7 (byte*) gen_chargen_sprite::chargen#9 ← phi( gen_chargen_sprite::@1/(byte*) gen_chargen_sprite::chargen#1 gen_chargen_sprite::@7/(byte*) gen_chargen_sprite::chargen#3 ) @@ -664,7 +664,7 @@ gen_chargen_sprite::@3: scope:[gen_chargen_sprite] from gen_chargen_sprite::@10 (byte) gen_chargen_sprite::s_gen_cnt#4 ← phi( gen_chargen_sprite::@10/(byte) gen_chargen_sprite::s_gen_cnt#6 gen_chargen_sprite::@2/(byte) gen_chargen_sprite::s_gen_cnt#7 ) (byte) gen_chargen_sprite::c#3 ← phi( gen_chargen_sprite::@10/(byte) gen_chargen_sprite::c#1 gen_chargen_sprite::@2/(byte) gen_chargen_sprite::c#0 ) (byte) gen_chargen_sprite::s_gen#5 ← phi( gen_chargen_sprite::@10/(byte) gen_chargen_sprite::s_gen#7 gen_chargen_sprite::@2/(byte) gen_chargen_sprite::s_gen#8 ) - (byte) gen_chargen_sprite::b#0 ← (number) 0 + (byte) gen_chargen_sprite::b#0 ← (byte) 0 to:gen_chargen_sprite::@4 gen_chargen_sprite::@10: scope:[gen_chargen_sprite] from gen_chargen_sprite::@2 (byte*) gen_chargen_sprite::chargen#8 ← phi( gen_chargen_sprite::@2/(byte*) gen_chargen_sprite::chargen#9 ) @@ -1716,7 +1716,6 @@ Successful SSA optimization Pass2FixInlineConstructorsNew Adding number conversion cast (unumber) $dd in (byte) sinlen_x#0 ← (number) $dd Adding number conversion cast (unumber) $c5 in (byte) sinlen_y#0 ← (number) $c5 Adding number conversion cast (unumber) $ff in (bool~) main::$1 ← *((byte*) RASTER#0) != (number) $ff -Adding number conversion cast (unumber) 0 in (byte) init::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) COLS#0 + (byte) init::i#2) ← (number) 0 Adding number conversion cast (unumber) $28 in (number~) init::$9 ← (number) $28 + (byte) init::i#2 Adding number conversion cast (unumber) init::$9 in (number~) init::$9 ← (unumber)(number) $28 + (byte) init::i#2 @@ -1736,7 +1735,6 @@ Adding number conversion cast (unumber) 0 in (byte) sin_idx_x#2 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) sin_idx_y#2 ← (number) 0 Adding number conversion cast (unumber) $c in (byte) anim::j2#0 ← (number) $c Adding number conversion cast (unumber) 0 in (byte) anim::x_msb#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) anim::j#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (number~) anim::$6 ← (byte) anim::x_msb#2 * (number) 2 Adding number conversion cast (unumber) anim::$6 in (number~) anim::$6 ← (byte) anim::x_msb#2 * (unumber)(number) 2 Adding number conversion cast (unumber) anim::$8 in (number~) anim::$8 ← (unumber~) anim::$6 | (byte~) anim::$7 @@ -1757,26 +1755,21 @@ Adding number conversion cast (unumber) place_sprites::$2 in (number~) place_spr Adding number conversion cast (unumber) $3c in (byte) place_sprites::spr_x#0 ← (number) $3c Adding number conversion cast (unumber) 0 in (byte) place_sprites::j2#0 ← (number) 0 Adding number conversion cast (unumber) 5 in (byte) place_sprites::col#0 ← (number) 5 -Adding number conversion cast (unumber) 0 in (byte) place_sprites::j#0 ← (number) 0 Adding number conversion cast (unumber) $50 in *((byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (number) $50 Adding number conversion cast (unumber) $20 in (number~) place_sprites::$4 ← (byte) place_sprites::spr_x#2 + (number) $20 Adding number conversion cast (unumber) place_sprites::$4 in (number~) place_sprites::$4 ← (byte) place_sprites::spr_x#2 + (unumber)(number) $20 Adding number conversion cast (unumber) place_sprites::$5 in (number~) place_sprites::$6 ← (byte) place_sprites::col#2 ^ (number~) place_sprites::$5 Adding number conversion cast (unumber) place_sprites::$6 in (number~) place_sprites::$6 ← (byte) place_sprites::col#2 ^ (unumber~) place_sprites::$8 -Adding number conversion cast (unumber) 0 in (byte) gen_sprites::i#0 ← (number) 0 Adding number conversion cast (unumber) $40 in (byte*~) gen_sprites::$1 ← (byte*) gen_sprites::spr#3 + (number) $40 Adding number conversion cast (unumber) 8 in (number~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 * (number) 8 Adding number conversion cast (unumber) gen_chargen_sprite::$1 in (number~) gen_chargen_sprite::$1 ← (word~) gen_chargen_sprite::$0 * (unumber)(number) 8 Adding number conversion cast (unumber) $32 in *((byte*) PROCPORT#0) ← (number) $32 -Adding number conversion cast (unumber) 0 in (byte) gen_chargen_sprite::y#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) gen_chargen_sprite::s_gen#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) gen_chargen_sprite::s_gen_cnt#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gen_chargen_sprite::x#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) gen_chargen_sprite::c#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (number~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (number) $80 Adding number conversion cast (unumber) gen_chargen_sprite::$3 in (number~) gen_chargen_sprite::$3 ← (byte) gen_chargen_sprite::bits#2 & (unumber)(number) $80 Adding number conversion cast (unumber) 0 in (bool~) gen_chargen_sprite::$4 ← (unumber~) gen_chargen_sprite::$3 != (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gen_chargen_sprite::b#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) gen_chargen_sprite::c#1 ← (number) 1 Adding number conversion cast (unumber) 2 in (number~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 * (number) 2 Adding number conversion cast (unumber) gen_chargen_sprite::$6 in (number~) gen_chargen_sprite::$6 ← (byte) gen_chargen_sprite::s_gen#3 * (unumber)(number) 2 @@ -1818,7 +1811,6 @@ Inlining cast (byte) sinlen_x#0 ← (unumber)(number) $dd Inlining cast (byte) sinlen_y#0 ← (unumber)(number) $c5 Inlining cast (byte*) sprites#0 ← (byte*)(number) $2000 Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) init::i#0 ← (unumber)(number) 0 Inlining cast *((byte*) COLS#0 + (byte) init::i#2) ← (unumber)(number) 0 Inlining cast *((byte*) COLS#0 + (unumber~) init::$9) ← (unumber)(number) $b Inlining cast (byte) gen_sintab::min#0 ← (unumber)(number) 0 @@ -1832,7 +1824,6 @@ Inlining cast (byte) sin_idx_x#2 ← (unumber)(number) 0 Inlining cast (byte) sin_idx_y#2 ← (unumber)(number) 0 Inlining cast (byte) anim::j2#0 ← (unumber)(number) $c Inlining cast (byte) anim::x_msb#0 ← (unumber)(number) 0 -Inlining cast (byte) anim::j#0 ← (unumber)(number) 0 Inlining cast (word~) anim::$4 ← (word)(number) $1e Inlining cast (byte) sin_idx_x#4 ← (unumber)(number) 0 Inlining cast (byte) sin_idx_y#4 ← (unumber)(number) 0 @@ -1844,18 +1835,13 @@ Inlining cast (byte~) place_sprites::$3 ← (byte)(unumber~) place_sprites::$2 Inlining cast (byte) place_sprites::spr_x#0 ← (unumber)(number) $3c Inlining cast (byte) place_sprites::j2#0 ← (unumber)(number) 0 Inlining cast (byte) place_sprites::col#0 ← (unumber)(number) 5 -Inlining cast (byte) place_sprites::j#0 ← (unumber)(number) 0 Inlining cast *((byte*) SPRITES_YPOS#0 + (byte) place_sprites::j2#3) ← (unumber)(number) $50 Inlining cast (unumber~) place_sprites::$8 ← (unumber)(number~) place_sprites::$5 -Inlining cast (byte) gen_sprites::i#0 ← (unumber)(number) 0 Inlining cast (word~) gen_chargen_sprite::$0 ← (word)(byte) gen_chargen_sprite::ch#1 Inlining cast *((byte*) PROCPORT#0) ← (unumber)(number) $32 -Inlining cast (byte) gen_chargen_sprite::y#0 ← (unumber)(number) 0 Inlining cast (byte) gen_chargen_sprite::s_gen#0 ← (unumber)(number) 0 Inlining cast (byte) gen_chargen_sprite::s_gen_cnt#0 ← (unumber)(number) 0 -Inlining cast (byte) gen_chargen_sprite::x#0 ← (unumber)(number) 0 Inlining cast (byte) gen_chargen_sprite::c#0 ← (unumber)(number) 0 -Inlining cast (byte) gen_chargen_sprite::b#0 ← (unumber)(number) 0 Inlining cast (byte) gen_chargen_sprite::c#1 ← (unumber)(number) 1 Inlining cast (byte) gen_chargen_sprite::s_gen#2 ← (unumber)(number) 0 Inlining cast (byte) gen_chargen_sprite::s_gen_cnt#2 ← (unumber)(number) 0 @@ -1891,7 +1877,6 @@ Simplifying constant pointer cast (byte*) 8192 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $ff Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $b Simplifying constant integer cast 0 @@ -1918,7 +1903,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast $c Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $1e Simplifying constant integer cast 2 Simplifying constant integer cast $a @@ -1934,21 +1918,16 @@ Simplifying constant integer cast $40 Simplifying constant integer cast $3c Simplifying constant integer cast 0 Simplifying constant integer cast 5 -Simplifying constant integer cast 0 Simplifying constant integer cast $50 Simplifying constant integer cast $20 -Simplifying constant integer cast 0 Simplifying constant integer cast $40 Simplifying constant integer cast 8 Simplifying constant integer cast $32 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 8 @@ -1983,7 +1962,6 @@ Finalized unsigned number type (byte) $dd Finalized unsigned number type (byte) $c5 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $b Finalized unsigned number type (byte) 0 @@ -2001,7 +1979,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $c Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 8 @@ -2016,21 +1993,16 @@ Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) $3c Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 5 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $50 Finalized unsigned number type (byte) $20 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) $32 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 8 diff --git a/src/test/ref/fillscreen.log b/src/test/ref/fillscreen.log index facd4c36e..ebbe8275c 100644 --- a/src/test/ref/fillscreen.log +++ b/src/test/ref/fillscreen.log @@ -19,7 +19,7 @@ main::@return: scope:[main] from main::@1 to:@return fillscreen: scope:[fillscreen] from main (byte) fillscreen::c#2 ← phi( main/(byte) fillscreen::c#0 ) - (byte) fillscreen::j#0 ← (number) 0 + (byte) fillscreen::j#0 ← (byte) 0 to:fillscreen::@1 fillscreen::@1: scope:[fillscreen] from fillscreen fillscreen::@1 (byte) fillscreen::j#2 ← phi( fillscreen/(byte) fillscreen::j#0 fillscreen::@1/(byte) fillscreen::j#1 ) @@ -82,21 +82,17 @@ SYMBOL TABLE SSA (byte) main::c (byte) main::c#0 -Adding number conversion cast (unumber) 0 in (byte) fillscreen::j#0 ← (number) 0 Adding number conversion cast (unumber) $100 in (byte*~) fillscreen::$0 ← (byte*) SCREEN#0 + (number) $100 Adding number conversion cast (unumber) $200 in (byte*~) fillscreen::$1 ← (byte*) SCREEN#0 + (number) $200 Adding number conversion cast (unumber) $3e8 in (byte*~) fillscreen::$2 ← (byte*) SCREEN#0 + (number) $3e8 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) fillscreen::j#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $100 Simplifying constant integer cast $200 Simplifying constant integer cast $3e8 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $100 Finalized unsigned number type (word) $200 Finalized unsigned number type (word) $3e8 diff --git a/src/test/ref/flipper-rex2.log b/src/test/ref/flipper-rex2.log index 82b650591..4facd24c3 100644 --- a/src/test/ref/flipper-rex2.log +++ b/src/test/ref/flipper-rex2.log @@ -27,7 +27,7 @@ main: scope:[main] from @4 main::@9: scope:[main] from main to:main::@1 main::@1: scope:[main] from main::@11 main::@9 - (byte) main::c#0 ← (number) $19 + (byte) main::c#0 ← (byte) $19 to:main::@3 main::@3: scope:[main] from main::@1 main::@3 main::@6 (byte) main::c#4 ← phi( main::@1/(byte) main::c#0 main::@3/(byte) main::c#4 main::@6/(byte) main::c#1 ) @@ -58,7 +58,7 @@ main::@return: scope:[main] from main::@11 return to:@return prepare: scope:[prepare] from main - (byte) prepare::i#0 ← (number) 0 + (byte) prepare::i#0 ← (byte) 0 to:prepare::@1 prepare::@1: scope:[prepare] from prepare prepare::@1 (byte) prepare::i#2 ← phi( prepare/(byte) prepare::i#0 prepare::@1/(byte) prepare::i#1 ) @@ -73,13 +73,13 @@ prepare::@return: scope:[prepare] from prepare::@1 flip: scope:[flip] from main::@7 (byte) flip::srcIdx#0 ← (number) 0 (byte) flip::dstIdx#0 ← (number) $f - (byte) flip::r#0 ← (number) $10 + (byte) flip::r#0 ← (byte) $10 to:flip::@1 flip::@1: scope:[flip] from flip flip::@3 (byte) flip::r#4 ← phi( flip/(byte) flip::r#0 flip::@3/(byte) flip::r#1 ) (byte) flip::dstIdx#5 ← phi( flip/(byte) flip::dstIdx#0 flip::@3/(byte) flip::dstIdx#2 ) (byte) flip::srcIdx#3 ← phi( flip/(byte) flip::srcIdx#0 flip::@3/(byte) flip::srcIdx#4 ) - (byte) flip::c#0 ← (number) $10 + (byte) flip::c#0 ← (byte) $10 to:flip::@2 flip::@2: scope:[flip] from flip::@1 flip::@2 (byte) flip::r#3 ← phi( flip::@1/(byte) flip::r#4 flip::@2/(byte) flip::r#3 ) @@ -104,7 +104,7 @@ flip::@3: scope:[flip] from flip::@2 if((bool~) flip::$2) goto flip::@1 to:flip::@4 flip::@4: scope:[flip] from flip::@3 - (byte) flip::i#0 ← (number) 0 + (byte) flip::i#0 ← (byte) 0 to:flip::@5 flip::@5: scope:[flip] from flip::@4 flip::@5 (byte) flip::i#2 ← phi( flip::@4/(byte) flip::i#0 flip::@5/(byte) flip::i#1 ) @@ -122,7 +122,7 @@ plot: scope:[plot] from main::@10 (byte*~) plot::$2 ← (byte*~) plot::$1 + (number) $c (byte*) plot::line#0 ← (byte*~) plot::$2 (byte) plot::i#0 ← (number) 0 - (byte) plot::y#0 ← (number) $10 + (byte) plot::y#0 ← (byte) $10 to:plot::@1 plot::@1: scope:[plot] from plot plot::@3 (byte) plot::y#4 ← phi( plot/(byte) plot::y#0 plot::@3/(byte) plot::y#1 ) @@ -275,71 +275,47 @@ SYMBOL TABLE SSA (byte) prepare::i#1 (byte) prepare::i#2 -Adding number conversion cast (unumber) $19 in (byte) main::c#0 ← (number) $19 Adding number conversion cast (unumber) $fe in (bool~) main::$1 ← *((byte*) RASTER#0) != (number) $fe Adding number conversion cast (unumber) $ff in (bool~) main::$2 ← *((byte*) RASTER#0) != (number) $ff -Adding number conversion cast (unumber) 0 in (byte) prepare::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) flip::srcIdx#0 ← (number) 0 Adding number conversion cast (unumber) $f in (byte) flip::dstIdx#0 ← (number) $f -Adding number conversion cast (unumber) $10 in (byte) flip::r#0 ← (number) $10 -Adding number conversion cast (unumber) $10 in (byte) flip::c#0 ← (number) $10 Adding number conversion cast (unumber) $10 in (number~) flip::$0 ← (byte) flip::dstIdx#3 + (number) $10 Adding number conversion cast (unumber) flip::$0 in (number~) flip::$0 ← (byte) flip::dstIdx#3 + (unumber)(number) $10 -Adding number conversion cast (unumber) 0 in (byte) flip::i#0 ← (number) 0 Adding number conversion cast (unumber) plot::$0 in (byte*~) plot::$1 ← (byte*) SCREEN#0 + (number~) plot::$0 Adding number conversion cast (unumber) $c in (byte*~) plot::$2 ← (byte*~) plot::$1 + (number) $c Adding number conversion cast (unumber) 0 in (byte) plot::i#0 ← (number) 0 -Adding number conversion cast (unumber) $10 in (byte) plot::y#0 ← (number) $10 Adding number conversion cast (unumber) 0 in (byte) plot::x#0 ← (number) 0 Adding number conversion cast (unumber) $10 in (bool~) plot::$3 ← (byte) plot::x#1 < (number) $10 Adding number conversion cast (unumber) $28 in (byte*~) plot::$4 ← (byte*) plot::line#3 + (number) $28 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) RASTER#0 ← (byte*)(number) $d012 Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::c#0 ← (unumber)(number) $19 -Inlining cast (byte) prepare::i#0 ← (unumber)(number) 0 Inlining cast (byte) flip::srcIdx#0 ← (unumber)(number) 0 Inlining cast (byte) flip::dstIdx#0 ← (unumber)(number) $f -Inlining cast (byte) flip::r#0 ← (unumber)(number) $10 -Inlining cast (byte) flip::c#0 ← (unumber)(number) $10 -Inlining cast (byte) flip::i#0 ← (unumber)(number) 0 Inlining cast (unumber~) plot::$6 ← (unumber)(number~) plot::$0 Inlining cast (byte) plot::i#0 ← (unumber)(number) 0 -Inlining cast (byte) plot::y#0 ← (unumber)(number) $10 Inlining cast (byte) plot::x#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast $19 Simplifying constant integer cast $fe Simplifying constant integer cast $ff Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $f Simplifying constant integer cast $10 -Simplifying constant integer cast $10 -Simplifying constant integer cast $10 -Simplifying constant integer cast 0 Simplifying constant integer cast $c Simplifying constant integer cast 0 -Simplifying constant integer cast $10 Simplifying constant integer cast 0 Simplifying constant integer cast $10 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) $19 Finalized unsigned number type (byte) $fe Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 -Finalized unsigned number type (byte) $10 -Finalized unsigned number type (byte) $10 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $c Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) $28 diff --git a/src/test/ref/forrangedwords.asm b/src/test/ref/forrangedwords.asm index 1c19b3cc4..e96212505 100644 --- a/src/test/ref/forrangedwords.asm +++ b/src/test/ref/forrangedwords.asm @@ -5,7 +5,7 @@ main: { .label SCREEN = $400 .label w = 2 .label sw = 4 - lda #0 + lda #<0 sta w sta w+1 b1: diff --git a/src/test/ref/forrangedwords.cfg b/src/test/ref/forrangedwords.cfg index f8eea23b2..a42228e89 100644 --- a/src/test/ref/forrangedwords.cfg +++ b/src/test/ref/forrangedwords.cfg @@ -11,7 +11,7 @@ main: scope:[main] from @1 [4] phi() to:main::@1 main::@1: scope:[main] from main main::@1 - [5] (word) main::w#2 ← phi( main/(byte) 0 main::@1/(word) main::w#1 ) + [5] (word) main::w#2 ← phi( main/(word) 0 main::@1/(word) main::w#1 ) [6] (byte~) main::$0 ← < (word) main::w#2 [7] *((const byte*) main::SCREEN#0) ← (byte~) main::$0 [8] (byte~) main::$1 ← > (word) main::w#2 diff --git a/src/test/ref/forrangedwords.log b/src/test/ref/forrangedwords.log index 168a75c63..c1ce8c7b6 100644 --- a/src/test/ref/forrangedwords.log +++ b/src/test/ref/forrangedwords.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (word) main::w#0 ← (number) 0 + (word) main::w#0 ← (word) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (word) main::w#2 ← phi( main/(word) main::w#0 main::@1/(word) main::w#1 ) @@ -20,7 +20,7 @@ main::@1: scope:[main] from main main::@1 if((bool~) main::$2) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 - (signed word) main::sw#0 ← (number) -$7fff + (signed word) main::sw#0 ← (signed word) -$7fff to:main::@3 main::@3: scope:[main] from main::@2 main::@3 (signed word) main::sw#2 ← phi( main::@2/(signed word) main::sw#0 main::@3/(signed word) main::sw#1 ) @@ -69,29 +69,21 @@ SYMBOL TABLE SSA (word) main::w#1 (word) main::w#2 -Adding number conversion cast (unumber) 0 in (word) main::w#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) main::SCREEN#0 + (number) 0) ← (byte~) main::$0 Adding number conversion cast (unumber) 1 in *((byte*) main::SCREEN#0 + (number) 1) ← (byte~) main::$1 -Adding number conversion cast (snumber) -$7fff in (signed word) main::sw#0 ← (number) -$7fff Adding number conversion cast (unumber) 3 in *((byte*) main::SCREEN#0 + (number) 3) ← (byte~) main::$3 Adding number conversion cast (unumber) 4 in *((byte*) main::SCREEN#0 + (number) 4) ← (byte~) main::$4 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (word) main::w#0 ← (unumber)(number) 0 -Inlining cast (signed word) main::sw#0 ← (snumber)(number) -$7fff Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast -$7fff Simplifying constant integer cast 3 Simplifying constant integer cast 4 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized signed number type (signed word) -$7fff Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 4 Successful SSA optimization PassNFinalizeNumberTypeConversions @@ -119,7 +111,7 @@ Finalized signed number type (signed word) $7fff Successful SSA optimization PassNFinalizeNumberTypeConversions Inlining constant with var siblings (const word) main::w#0 Inlining constant with var siblings (const signed word) main::sw#0 -Constant inlined main::w#0 = (byte) 0 +Constant inlined main::w#0 = (word) 0 Constant inlined main::sw#0 = (signed word) -$7fff Successful SSA optimization Pass2ConstantInlining Consolidated array index constant in *(main::SCREEN#0+1) @@ -165,7 +157,7 @@ main: scope:[main] from @1 [4] phi() to:main::@1 main::@1: scope:[main] from main main::@1 - [5] (word) main::w#2 ← phi( main/(byte) 0 main::@1/(word) main::w#1 ) + [5] (word) main::w#2 ← phi( main/(word) 0 main::@1/(word) main::w#1 ) [6] (byte~) main::$0 ← < (word) main::w#2 [7] *((const byte*) main::SCREEN#0) ← (byte~) main::$0 [8] (byte~) main::$1 ← > (word) main::w#2 @@ -256,10 +248,10 @@ main: { .label sw = 4 //SEG11 [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: - //SEG12 [5] phi (word) main::w#2 = (byte) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1 - lda #0 + //SEG12 [5] phi (word) main::w#2 = (word) 0 [phi:main->main::@1#0] -- vwuz1=vwuc1 + lda #<0 sta w - lda #0 + lda #>0 sta w+1 jmp b1 //SEG13 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] @@ -387,10 +379,10 @@ main: { .label sw = 4 //SEG11 [5] phi from main to main::@1 [phi:main->main::@1] b1_from_main: - //SEG12 [5] phi (word) main::w#2 = (byte) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1 - lda #0 + //SEG12 [5] phi (word) main::w#2 = (word) 0 [phi:main->main::@1#0] -- vwuz1=vwuc1 + lda #<0 sta w - lda #0 + lda #>0 sta w+1 jmp b1 //SEG13 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] @@ -465,7 +457,7 @@ Removing instruction jmp b1 Removing instruction jmp b2 Removing instruction jmp breturn Succesful ASM optimization Pass5NextJumpElimination -Removing instruction lda #0 +Removing instruction lda #>0 Succesful ASM optimization Pass5UnnecesaryLoadElimination Replacing label b1_from_b1 with b1 Replacing label b1_from_b1 with b1 @@ -543,8 +535,8 @@ main: { .label w = 2 .label sw = 4 //SEG11 [5] phi from main to main::@1 [phi:main->main::@1] - //SEG12 [5] phi (word) main::w#2 = (byte) 0 [phi:main->main::@1#0] -- vwuz1=vbuc1 - lda #0 + //SEG12 [5] phi (word) main::w#2 = (word) 0 [phi:main->main::@1#0] -- vwuz1=vwuc1 + lda #<0 sta w sta w+1 //SEG13 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] diff --git a/src/test/ref/forrangemin.log b/src/test/ref/forrangemin.log index 3bee7f4ae..d22686e7e 100644 --- a/src/test/ref/forrangemin.log +++ b/src/test/ref/forrangemin.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA (byte*) SCREEN2#0 ← ((byte*)) (number) $500 to:@1 main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -66,20 +66,16 @@ SYMBOL TABLE SSA (byte) main::j#2 (byte) main::j#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $64 in (byte) main::j#1 ← (number) $64 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN1#0 ← (byte*)(number) $400 Inlining cast (byte*) SCREEN2#0 ← (byte*)(number) $500 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte) main::j#1 ← (unumber)(number) $64 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 1280 -Simplifying constant integer cast 0 Simplifying constant integer cast $64 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $64 Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [7] if((byte) main::i#1!=rangelast(0,$ff)) goto main::@1 diff --git a/src/test/ref/function-pointer-noarg-2.log b/src/test/ref/function-pointer-noarg-2.log index da1bb63f7..a8246e467 100644 --- a/src/test/ref/function-pointer-noarg-2.log +++ b/src/test/ref/function-pointer-noarg-2.log @@ -13,7 +13,7 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@3 main: scope:[main] from @3 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@3/(byte) main::i#1 ) @@ -82,22 +82,18 @@ SYMBOL TABLE SSA (byte) main::i#3 (byte) main::i#4 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) main::$0 ← (byte) main::i#2 & (number) 1 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::i#2 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) main::$1 ← (unumber~) main::$0 == (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte*) fn1::BORDERCOL#0 ← (byte*)(number) $d020 Inlining cast (byte*) fn2::BGCOL#0 ← (byte*)(number) $d021 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53281 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/function-pointer-noarg-call-10.log b/src/test/ref/function-pointer-noarg-call-10.log index dff887ea8..cee18942c 100644 --- a/src/test/ref/function-pointer-noarg-call-10.log +++ b/src/test/ref/function-pointer-noarg-call-10.log @@ -27,7 +27,7 @@ main::@return: scope:[main] from main::@2 to:@return do10: scope:[do10] from main main::@1 (void()*) do10::fn#3 ← phi( main/(void()*) do10::fn#0 main::@1/(void()*) do10::fn#1 ) - (byte) do10::i#0 ← (number) 0 + (byte) do10::i#0 ← (byte) 0 to:do10::@1 do10::@1: scope:[do10] from do10 do10::@1 (byte) do10::i#2 ← phi( do10/(byte) do10::i#0 do10::@1/(byte) do10::i#1 ) @@ -167,23 +167,19 @@ SYMBOL TABLE SSA (label) world::@return (const string) world::msg = (string) "world @" -Adding number conversion cast (unumber) 0 in (byte) do10::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) idx#4 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) print::i#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) do10::i#0 ← (unumber)(number) 0 Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte) idx#4 ← (unumber)(number) 0 Inlining cast (byte) print::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (void()*) do10::fn#0 = (void()*~) main::$0 Alias (void()*) do10::fn#1 = (void()*~) main::$2 diff --git a/src/test/ref/function-pointer-noarg-call-7.log b/src/test/ref/function-pointer-noarg-call-7.log index 1783c35ab..8be51fa52 100644 --- a/src/test/ref/function-pointer-noarg-call-7.log +++ b/src/test/ref/function-pointer-noarg-call-7.log @@ -20,7 +20,7 @@ main::@return: scope:[main] from main::@1 to:@return do10: scope:[do10] from main (void()*) do10::fn#2 ← phi( main/(void()*) do10::fn#0 ) - (byte) do10::i#0 ← (number) 0 + (byte) do10::i#0 ← (byte) 0 to:do10::@1 do10::@1: scope:[do10] from do10 do10::@1 (byte) do10::i#2 ← phi( do10/(byte) do10::i#0 do10::@1/(byte) do10::i#1 ) @@ -110,23 +110,19 @@ SYMBOL TABLE SSA (byte[]) msg (byte[]) msg#0 -Adding number conversion cast (unumber) 0 in (byte) do10::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) idx#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) hello::i#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) do10::i#0 ← (unumber)(number) 0 Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte) idx#0 ← (unumber)(number) 0 Inlining cast (byte) hello::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (void()*) main::f#0 = (void()*~) main::$0 Alias (byte) idx#1 = (byte) idx#4 (byte) idx#2 diff --git a/src/test/ref/function-pointer-noarg-call-8.log b/src/test/ref/function-pointer-noarg-call-8.log index 2dc2a680f..b4ac4f50c 100644 --- a/src/test/ref/function-pointer-noarg-call-8.log +++ b/src/test/ref/function-pointer-noarg-call-8.log @@ -34,7 +34,7 @@ main::@return: scope:[main] from main::@2 to:@return do10: scope:[do10] from main main::@1 (void()*) do10::fn#3 ← phi( main/(void()*) do10::fn#0 main::@1/(void()*) do10::fn#1 ) - (byte) do10::i#0 ← (number) 0 + (byte) do10::i#0 ← (byte) 0 to:do10::@1 do10::@1: scope:[do10] from do10 do10::@1 (byte) do10::i#2 ← phi( do10/(byte) do10::i#0 do10::@1/(byte) do10::i#1 ) @@ -149,23 +149,19 @@ SYMBOL TABLE SSA (byte[]) msg2 (byte[]) msg2#0 -Adding number conversion cast (unumber) 0 in (byte) do10::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) idx#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) hello::i#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) do10::i#0 ← (unumber)(number) 0 Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte) idx#0 ← (unumber)(number) 0 Inlining cast (byte) hello::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (void()*) main::f#0 = (void()*~) main::$0 (void()*) main::f#1 Alias (byte*) msg#1 = (byte*) msg#8 (byte*) msg#5 (byte*) msg#2 diff --git a/src/test/ref/halfscii.log b/src/test/ref/halfscii.log index ba4f3d04a..d3ccdf832 100644 --- a/src/test/ref/halfscii.log +++ b/src/test/ref/halfscii.log @@ -141,7 +141,7 @@ main::@9: scope:[main] from main::@4 main::@10: scope:[main] from main::@5 *((byte*) PROCPORT#0) ← (number) $37 asm { cli } - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@11 main::@11: scope:[main] from main::@10 main::@11 (byte) main::i#2 ← phi( main::@10/(byte) main::i#0 main::@11/(byte) main::i#1 ) @@ -357,7 +357,6 @@ Adding number conversion cast (unumber) $800 in (byte*~) main::$38 ← (byte*) C Adding number conversion cast (unumber) 1 in (number~) main::$35 ← (byte) main::bits_gen#16 + (number) 1 Adding number conversion cast (unumber) main::$35 in (number~) main::$35 ← (byte) main::bits_gen#16 + (unumber)(number) 1 Adding number conversion cast (unumber) $37 in *((byte*) PROCPORT#0) ← (number) $37 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $19 in *((byte*) D018#0) ← (number) $19 Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (byte) to elements in (byte[]) bits_count#0 ← { (byte)(number) 0, (byte)(number) 1, (byte)(number) 1, (byte)(number) 2, (byte)(number) 1, (byte)(number) 2, (byte)(number) 2, (byte)(number) 3, (byte)(number) 1, (byte)(number) 2, (byte)(number) 2, (byte)(number) 3, (byte)(number) 2, (byte)(number) 3, (byte)(number) 3, (byte)(number) 4 } @@ -370,7 +369,6 @@ Inlining cast (byte*) CHARSET4#0 ← (byte*)(number) $2800 Inlining cast *((byte*) PROCPORT#0) ← (unumber)(number) $32 Inlining cast (byte) main::bits_gen#0 ← (unumber)(number) 0 Inlining cast *((byte*) PROCPORT#0) ← (unumber)(number) $37 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast *((byte*) D018#0) ← (unumber)(number) $19 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 @@ -428,7 +426,6 @@ Simplifying constant integer cast 2 Simplifying constant integer cast $800 Simplifying constant integer cast 1 Simplifying constant integer cast $37 -Simplifying constant integer cast 0 Simplifying constant integer cast $19 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $32 @@ -465,7 +462,6 @@ Finalized unsigned number type (byte) 2 Finalized unsigned number type (word) $800 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $37 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $19 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$1 ← *((byte*) main::chargen#2) & (byte) $60 diff --git a/src/test/ref/helloworld0.log b/src/test/ref/helloworld0.log index 471f471d8..dd1fc7b84 100644 --- a/src/test/ref/helloworld0.log +++ b/src/test/ref/helloworld0.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA (byte*) SCREEN#0 ← ((byte*)) (number) $400 to:@1 main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -46,16 +46,10 @@ SYMBOL TABLE SSA (byte[]) msg (byte[]) msg#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [7] if((byte) main::i#1!=rangelast(0,$b)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte[]) msg#0 = $0 diff --git a/src/test/ref/hex2dec.log b/src/test/ref/hex2dec.log index 070be6db8..20bd720a1 100644 --- a/src/test/ref/hex2dec.log +++ b/src/test/ref/hex2dec.log @@ -145,7 +145,7 @@ utoa10w: scope:[utoa10w] from main::@16 (word) utoa10w::value#5 ← phi( main::@16/(word) utoa10w::value#0 ) (byte) utoa10w::bStarted#0 ← (number) 0 (byte) utoa10w::digit#0 ← (number) 0 - (byte) utoa10w::i#0 ← (number) 0 + (byte) utoa10w::i#0 ← (byte) 0 to:utoa10w::@2 utoa10w::@2: scope:[utoa10w] from utoa10w utoa10w::@10 utoa10w::@3 (byte*) utoa10w::dst#9 ← phi( utoa10w/(byte*) utoa10w::dst#10 utoa10w::@10/(byte*) utoa10w::dst#6 utoa10w::@3/(byte*) utoa10w::dst#11 ) @@ -616,7 +616,6 @@ Adding number conversion cast (unumber) 0 in (bool~) main::$16 ← *((byte[]) ma Adding number conversion cast (unumber) $3e7 in (byte*~) cls::$0 ← (byte*) cls::screen#0 + (number) $3e7 Adding number conversion cast (unumber) 0 in (byte) utoa10w::bStarted#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) utoa10w::digit#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) utoa10w::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) utoa10w::bStarted#1 ← (number) 1 Adding number conversion cast (unumber) 1 in (number~) utoa10w::$2 ← (byte) utoa10w::i#4 & (number) 1 Adding number conversion cast (unumber) utoa10w::$2 in (number~) utoa10w::$2 ← (byte) utoa10w::i#4 & (unumber)(number) 1 @@ -656,7 +655,6 @@ Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte*) cls::screen#0 ← (byte*)(number) $400 Inlining cast (byte) utoa10w::bStarted#0 ← (unumber)(number) 0 Inlining cast (byte) utoa10w::digit#0 ← (unumber)(number) 0 -Inlining cast (byte) utoa10w::i#0 ← (unumber)(number) 0 Inlining cast (byte) utoa10w::bStarted#1 ← (unumber)(number) 1 Inlining cast (byte) utoa10w::digit#2 ← (unumber)(number) 0 Inlining cast (byte~) utoa10w::$0 ← (byte)(word) utoa10w::value#4 @@ -709,7 +707,6 @@ Simplifying constant integer cast 3 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 @@ -749,7 +746,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3e7 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/immzero.log b/src/test/ref/immzero.log index 0d8df3f82..c3cf1bd85 100644 --- a/src/test/ref/immzero.log +++ b/src/test/ref/immzero.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @1 (word~) main::$0 ← ((word)) (number) 0 (word) main::w#0 ← (word~) main::$0 - (byte) main::j#0 ← (number) 0 + (byte) main::j#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::j#2 ← phi( main/(byte) main::j#0 main::@1/(byte) main::j#1 ) @@ -47,16 +47,10 @@ SYMBOL TABLE SSA (word) main::w#1 (word) main::w#2 -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (word~) main::$0 ← (word)(number) 0 -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (word) main::w#0 = (word~) main::$0 Alias (word) main::w#1 = (word~) main::$1 Successful SSA optimization Pass2AliasElimination diff --git a/src/test/ref/incrementinarray.log b/src/test/ref/incrementinarray.log index df53e8829..bf09db80c 100644 --- a/src/test/ref/incrementinarray.log +++ b/src/test/ref/incrementinarray.log @@ -116,7 +116,7 @@ main::@3: scope:[main] from main (byte*) print_line_cursor#13 ← phi( main/(byte*) print_line_cursor#4 ) (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#13 (byte*) print_char_cursor#7 ← (byte*) print_char_cursor#17 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@3 main::@5 (byte) main::i#4 ← phi( main::@3/(byte) main::i#0 main::@5/(byte) main::i#1 ) @@ -278,21 +278,17 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#9 + (number) $28 Adding number conversion cast (unumber) $3e8 in (byte*~) print_cls::$0 ← (byte*) print_screen#2 + (number) $3e8 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in *((byte[]) txt#0 + (number) 1) ← ++ *((byte[]) txt#0 + (number) 1) Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $28 Simplifying constant integer cast $3e8 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $28 Finalized unsigned number type (word) $3e8 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) print_line_cursor#0 = (byte*) print_screen#0 (byte*) print_char_cursor#0 (byte*) print_line_cursor#22 (byte*) print_char_cursor#28 (byte*) print_screen#6 (byte*) print_line_cursor#20 (byte*) print_char_cursor#26 (byte*) print_screen#5 diff --git a/src/test/ref/inline-asm-clobber-none.log b/src/test/ref/inline-asm-clobber-none.log index 58f77dcaf..a1dcdca13 100644 --- a/src/test/ref/inline-asm-clobber-none.log +++ b/src/test/ref/inline-asm-clobber-none.log @@ -6,16 +6,16 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@1 main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@5 (byte) main::i#6 ← phi( main/(byte) main::i#0 main::@5/(byte) main::i#1 ) - (byte) main::j#0 ← (number) 0 + (byte) main::j#0 ← (byte) 0 to:main::@2 main::@2: scope:[main] from main::@1 main::@4 (byte) main::i#5 ← phi( main::@1/(byte) main::i#6 main::@4/(byte) main::i#3 ) (byte) main::j#4 ← phi( main::@1/(byte) main::j#0 main::@4/(byte) main::j#1 ) - (byte) main::k#0 ← (number) 0 + (byte) main::k#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@3 (byte) main::i#4 ← phi( main::@2/(byte) main::i#5 main::@3/(byte) main::i#4 ) @@ -83,22 +83,6 @@ SYMBOL TABLE SSA (byte) main::k#1 (byte) main::k#2 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::k#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 -Inlining cast (byte) main::k#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::j#2 = (byte) main::j#3 Alias (byte) main::i#2 = (byte) main::i#3 (byte) main::i#4 Successful SSA optimization Pass2AliasElimination diff --git a/src/test/ref/inline-asm-clobber.log b/src/test/ref/inline-asm-clobber.log index 6e1ad2311..35af2201f 100644 --- a/src/test/ref/inline-asm-clobber.log +++ b/src/test/ref/inline-asm-clobber.log @@ -7,11 +7,11 @@ CONTROL FLOW GRAPH SSA (byte*) SCREEN#0 ← ((byte*)) (number) $400 to:@1 main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::i#4 ← phi( main/(byte) main::i#0 main::@3/(byte) main::i#1 ) - (byte) main::j#0 ← (number) 0 + (byte) main::j#0 ← (byte) 0 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::i#2 ← phi( main::@1/(byte) main::i#4 main::@2/(byte) main::i#2 ) @@ -28,11 +28,11 @@ main::@3: scope:[main] from main::@2 if((bool~) main::$1) goto main::@1 to:main::@4 main::@4: scope:[main] from main::@3 - (byte) main::k#0 ← (number) 0 + (byte) main::k#0 ← (byte) 0 to:main::@5 main::@5: scope:[main] from main::@4 main::@7 (byte) main::k#4 ← phi( main::@4/(byte) main::k#0 main::@7/(byte) main::k#1 ) - (byte) main::l#0 ← (number) 0 + (byte) main::l#0 ← (byte) 0 to:main::@6 main::@6: scope:[main] from main::@5 main::@6 (byte) main::k#2 ← phi( main::@5/(byte) main::k#4 main::@6/(byte) main::k#2 ) @@ -100,28 +100,10 @@ SYMBOL TABLE SSA (byte) main::l#1 (byte) main::l#2 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::k#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::l#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 -Inlining cast (byte) main::k#0 ← (unumber)(number) 0 -Inlining cast (byte) main::l#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte) main::k#2 = (byte) main::k#3 Successful SSA optimization Pass2AliasElimination diff --git a/src/test/ref/inline-asm-jsr-clobber.log b/src/test/ref/inline-asm-jsr-clobber.log index 85b4fe6aa..d94cad3dd 100644 --- a/src/test/ref/inline-asm-jsr-clobber.log +++ b/src/test/ref/inline-asm-jsr-clobber.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@1 main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -39,14 +39,6 @@ SYMBOL TABLE SSA (byte) main::i#1 (byte) main::i#2 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 -Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [5] if((byte) main::i#1!=rangelast(0,$a)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte) main::i#0 = 0 diff --git a/src/test/ref/inline-assignment.log b/src/test/ref/inline-assignment.log index 63b249b47..3819c9834 100644 --- a/src/test/ref/inline-assignment.log +++ b/src/test/ref/inline-assignment.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte) main::a#0 ← (byte) 0 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -49,17 +49,13 @@ SYMBOL TABLE SSA (byte) main::i#1 (byte) main::i#2 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $50 in (byte*~) main::$0 ← (byte*) SCREEN#0 + (number) $50 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $50 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $50 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::a#1 = (byte) main::i#2 diff --git a/src/test/ref/inline-kasm-clobber.log b/src/test/ref/inline-kasm-clobber.log index b795a4752..acdf47f42 100644 --- a/src/test/ref/inline-kasm-clobber.log +++ b/src/test/ref/inline-kasm-clobber.log @@ -7,16 +7,16 @@ CONTROL FLOW GRAPH SSA (byte*) SCREEN#0 ← ((byte*)) (number) $400 to:@1 main: scope:[main] from @1 - (byte) main::k#0 ← (number) 0 + (byte) main::k#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@5 (byte) main::k#6 ← phi( main/(byte) main::k#0 main::@5/(byte) main::k#1 ) - (byte) main::l#0 ← (number) 0 + (byte) main::l#0 ← (byte) 0 to:main::@2 main::@2: scope:[main] from main::@1 main::@4 (byte) main::k#5 ← phi( main::@1/(byte) main::k#6 main::@4/(byte) main::k#3 ) (byte) main::l#4 ← phi( main::@1/(byte) main::l#0 main::@4/(byte) main::l#1 ) - (byte) main::m#0 ← (number) 0 + (byte) main::m#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@3 (byte) main::k#4 ← phi( main::@2/(byte) main::k#5 main::@3/(byte) main::k#4 ) @@ -89,24 +89,10 @@ SYMBOL TABLE SSA (byte) main::m#1 (byte) main::m#2 -Adding number conversion cast (unumber) 0 in (byte) main::k#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::l#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::m#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::k#0 ← (unumber)(number) 0 -Inlining cast (byte) main::l#0 ← (unumber)(number) 0 -Inlining cast (byte) main::m#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::l#2 = (byte) main::l#3 Alias (byte) main::k#2 = (byte) main::k#3 (byte) main::k#4 Successful SSA optimization Pass2AliasElimination diff --git a/src/test/ref/inline-kasm-data.log b/src/test/ref/inline-kasm-data.log index 17ac19d16..25850d761 100644 --- a/src/test/ref/inline-kasm-data.log +++ b/src/test/ref/inline-kasm-data.log @@ -12,7 +12,7 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @1 (byte*) main::screen#0 ← ((byte*)) (number) $400 (byte*) main::cols#0 ← ((byte*)) (number) $d800 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte*) main::cols#2 ← phi( main/(byte*) main::cols#0 main::@1/(byte*) main::cols#1 ) @@ -63,7 +63,6 @@ SYMBOL TABLE SSA (byte*) sintab (byte*) sintab#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte*) main::screen#1 ← (byte*) main::screen#2 + (number) $28 Adding number conversion cast (unumber) 1 in *((byte*) main::cols#2 + (byte) main::sin#0) ← (number) 1 Adding number conversion cast (unumber) $28 in (byte*) main::cols#1 ← (byte*) main::cols#2 + (number) $28 @@ -71,18 +70,15 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) sintab#0 ← (byte*)(number) $1000 Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 Inlining cast (byte*) main::cols#0 ← (byte*)(number) $d800 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast *((byte*) main::cols#2 + (byte) main::sin#0) ← (unumber)(number) 1 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 4096 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 55296 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast 1 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $28 diff --git a/src/test/ref/inline-word.log b/src/test/ref/inline-word.log index aed6c24cb..857c7be69 100644 --- a/src/test/ref/inline-word.log +++ b/src/test/ref/inline-word.log @@ -13,11 +13,11 @@ main: scope:[main] from @1 (byte*~) main::$3 ← (byte*) SCREEN#0 + (number) $200 (byte~) main::$4 ← > (byte*~) main::$3 (byte[]) main::his#0 ← { (byte~) main::$0, (byte~) main::$2, (byte~) main::$4 } - (byte) main::h#0 ← (number) 0 + (byte) main::h#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::h#4 ← phi( main/(byte) main::h#0 main::@3/(byte) main::h#1 ) - (byte) main::l#0 ← (number) 4 + (byte) main::l#0 ← (byte) 4 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::l#2 ← phi( main::@1/(byte) main::l#0 main::@2/(byte) main::l#1 ) @@ -87,26 +87,18 @@ Fixing inline constructor with main::$8 ← (byte)*(main::his#0 + main::h#2) w= Successful SSA optimization Pass2FixInlineConstructorsNew Adding number conversion cast (unumber) $100 in (byte*~) main::$1 ← (byte*) SCREEN#0 + (number) $100 Adding number conversion cast (unumber) $200 in (byte*~) main::$3 ← (byte*) SCREEN#0 + (number) $200 -Adding number conversion cast (unumber) 0 in (byte) main::h#0 ← (number) 0 -Adding number conversion cast (unumber) 4 in (byte) main::l#0 ← (number) 4 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::h#0 ← (unumber)(number) 0 -Inlining cast (byte) main::l#0 ← (unumber)(number) 4 Inlining cast (byte*~) main::$5 ← (byte*)(word) main::w#0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $100 Simplifying constant integer cast $200 -Simplifying constant integer cast 0 -Simplifying constant integer cast 4 Simplifying constant integer cast *((byte[]) main::his#0 + (byte) main::h#2) Simplifying constant integer cast (byte) main::l#2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (word) $100 Finalized unsigned number type (word) $200 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 4 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (word) main::w#0 = (word~) main::$8 Alias (byte*) main::sc#0 = (byte*~) main::$5 diff --git a/src/test/ref/inlinearrayproblem.log b/src/test/ref/inlinearrayproblem.log index 3239374c1..d45eb4a98 100644 --- a/src/test/ref/inlinearrayproblem.log +++ b/src/test/ref/inlinearrayproblem.log @@ -13,7 +13,7 @@ main: scope:[main] from @1 (byte*) SCREEN2#2 ← phi( @1/(byte*) SCREEN2#3 ) (byte[]) main::txt#0 ← (const string) main::$1 (byte[]) main::data#0 ← { (number) 1, (number) 2, (number) 3 } - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte*) SCREEN2#1 ← phi( main/(byte*) SCREEN2#2 main::@1/(byte*) SCREEN2#1 ) @@ -62,22 +62,16 @@ SYMBOL TABLE SSA (byte[]) main::txt (byte[]) main::txt#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (byte) to elements in (byte[]) main::data#0 ← { (byte)(number) 1, (byte)(number) 2, (byte)(number) 3 } Successful SSA optimization PassNAddArrayNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte*) SCREEN2#0 ← (byte*)(number~) $0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 3 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) SCREEN2#0 = (byte*) SCREEN2#3 Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte*) SCREEN2#1 diff --git a/src/test/ref/inmem-const-array.log b/src/test/ref/inmem-const-array.log index e2d19a3c0..e0d2dac51 100644 --- a/src/test/ref/inmem-const-array.log +++ b/src/test/ref/inmem-const-array.log @@ -18,7 +18,7 @@ main: scope:[main] from @1 (byte*) main::screen#0 ← ((byte*)) (number) $400 (byte*) main::cols#0 ← ((byte*)) (number) $d800 (byte) main::j#0 ← (number) 0 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::j#3 ← phi( main/(byte) main::j#0 main::@2/(byte) main::j#4 ) @@ -93,7 +93,6 @@ Adding number conversion cast (unumber) 1 in (byte) WHITE#0 ← (number) 1 Adding number conversion cast (unumber) 2 in (byte) RED#0 ← (number) 2 Adding number conversion cast (unumber) 5 in (byte) GREEN#0 ← (number) 5 Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 3 in (bool~) main::$0 ← (byte) main::j#1 == (number) 3 Adding number conversion cast (unumber) 0 in (byte) main::j#2 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions @@ -103,7 +102,6 @@ Inlining cast (byte) GREEN#0 ← (unumber)(number) 5 Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 Inlining cast (byte*) main::cols#0 ← (byte*)(number) $d800 Inlining cast (byte) main::j#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte) main::j#2 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 1 @@ -112,7 +110,6 @@ Simplifying constant integer cast 5 Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 55296 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 3 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification @@ -120,7 +117,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/inmemarray.log b/src/test/ref/inmemarray.log index f03e0a0cb..bf31a731b 100644 --- a/src/test/ref/inmemarray.log +++ b/src/test/ref/inmemarray.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte) main::j#0 ← (number) 0 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -72,7 +72,6 @@ SYMBOL TABLE SSA (byte) main::j#4 Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (bool~) main::$0 ← (byte) main::j#1 == (number) 8 Adding number conversion cast (unumber) 0 in (byte) main::j#2 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions @@ -80,7 +79,6 @@ Adding number conversion cast (byte) to elements in (byte[]) TXT#0 ← { (byte)( Successful SSA optimization PassNAddArrayNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte) main::j#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte) main::j#2 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 @@ -93,12 +91,10 @@ Simplifying constant integer cast $f Simplifying constant integer cast $14 Simplifying constant integer cast $20 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/interrupt-volatile-reuse-problem2.log b/src/test/ref/interrupt-volatile-reuse-problem2.log index e62ebc1b5..2b54c32fb 100644 --- a/src/test/ref/interrupt-volatile-reuse-problem2.log +++ b/src/test/ref/interrupt-volatile-reuse-problem2.log @@ -25,16 +25,16 @@ main::@1: scope:[main] from main main::@8 if(true) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 - (byte) main::x#0 ← (number) 0 + (byte) main::x#0 ← (byte) 0 to:main::@4 main::@4: scope:[main] from main::@2 main::@8 (byte) main::x#6 ← phi( main::@2/(byte) main::x#0 main::@8/(byte) main::x#1 ) - (byte) main::y#0 ← (number) 0 + (byte) main::y#0 ← (byte) 0 to:main::@5 main::@5: scope:[main] from main::@4 main::@7 (byte) main::x#4 ← phi( main::@4/(byte) main::x#6 main::@7/(byte) main::x#5 ) (byte) main::y#4 ← phi( main::@4/(byte) main::y#0 main::@7/(byte) main::y#1 ) - (byte) main::a#0 ← (number) 0 + (byte) main::a#0 ← (byte) 0 to:main::@6 main::@6: scope:[main] from main::@5 main::@6 (byte) main::x#2 ← phi( main::@5/(byte) main::x#4 main::@6/(byte) main::x#2 ) @@ -136,9 +136,6 @@ interrupt(KERNEL_MIN)(void()) irq() (byte) main::y#4 Adding number conversion cast (unumber) 0 in (byte) col1#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::y#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::a#0 ← (number) 0 Adding number conversion cast (unumber) 1 in *((byte*) IRQ_STATUS#0) ← (number) 1 Adding number conversion cast (unumber) $28 in *((byte*) SCREEN#0 + (number) $28) ← (byte) col1#3 Successful SSA optimization PassNAddNumberTypeConversions @@ -146,25 +143,16 @@ Inlining cast (void()**) KERNEL_IRQ#0 ← (void()**)(number) $314 Inlining cast (byte*) IRQ_STATUS#0 ← (byte*)(number) $d019 Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte) col1#0 ← (unumber)(number) 0 -Inlining cast (byte) main::x#0 ← (unumber)(number) 0 -Inlining cast (byte) main::y#0 ← (unumber)(number) 0 -Inlining cast (byte) main::a#0 ← (unumber)(number) 0 Inlining cast *((byte*) IRQ_STATUS#0) ← (unumber)(number) 1 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (void()**) 788 Simplifying constant pointer cast (byte*) 53273 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/irq-local-var-overlap-problem.log b/src/test/ref/irq-local-var-overlap-problem.log index 92a93e3dc..3f4de55be 100644 --- a/src/test/ref/irq-local-var-overlap-problem.log +++ b/src/test/ref/irq-local-var-overlap-problem.log @@ -45,16 +45,16 @@ main::@1: scope:[main] from main main::@8 if(true) goto main::@2 to:main::@return main::@2: scope:[main] from main::@1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@4 main::@4: scope:[main] from main::@2 main::@8 (byte) main::i#7 ← phi( main::@2/(byte) main::i#0 main::@8/(byte) main::i#1 ) - (byte) main::j#0 ← (number) 0 + (byte) main::j#0 ← (byte) 0 to:main::@5 main::@5: scope:[main] from main::@4 main::@7 (byte) main::j#5 ← phi( main::@4/(byte) main::j#0 main::@7/(byte) main::j#1 ) (byte) main::i#5 ← phi( main::@4/(byte) main::i#7 main::@7/(byte) main::i#6 ) - (byte) main::k#0 ← (number) 0 + (byte) main::k#0 ← (byte) 0 to:main::@6 main::@6: scope:[main] from main::@13 main::@5 (byte) main::k#2 ← phi( main::@13/(byte) main::k#1 main::@5/(byte) main::k#0 ) @@ -91,16 +91,16 @@ main::@return: scope:[main] from main::@1 to:@return irq: scope:[irq] from *((byte*) BGCOL#0) ← ++ *((byte*) BGCOL#0) - (byte) irq::i#0 ← (number) 0 + (byte) irq::i#0 ← (byte) 0 to:irq::@1 irq::@1: scope:[irq] from irq irq::@5 (byte) irq::i#7 ← phi( irq/(byte) irq::i#0 irq::@5/(byte) irq::i#1 ) - (byte) irq::j#0 ← (number) 0 + (byte) irq::j#0 ← (byte) 0 to:irq::@2 irq::@2: scope:[irq] from irq::@1 irq::@4 (byte) irq::j#4 ← phi( irq::@1/(byte) irq::j#0 irq::@4/(byte) irq::j#1 ) (byte) irq::i#4 ← phi( irq::@1/(byte) irq::i#7 irq::@4/(byte) irq::i#6 ) - (byte) irq::k#0 ← (number) 0 + (byte) irq::k#0 ← (byte) 0 to:irq::@3 irq::@3: scope:[irq] from irq::@2 irq::@7 (byte) irq::k#2 ← phi( irq::@2/(byte) irq::k#0 irq::@7/(byte) irq::k#1 ) @@ -140,16 +140,16 @@ irq::@return: scope:[irq] from irq::@6 return to:@return sub_main: scope:[sub_main] from main::@6 - (byte) sub_main::i#0 ← (number) 0 + (byte) sub_main::i#0 ← (byte) 0 to:sub_main::@1 sub_main::@1: scope:[sub_main] from sub_main sub_main::@5 (byte) sub_main::i#6 ← phi( sub_main/(byte) sub_main::i#0 sub_main::@5/(byte) sub_main::i#1 ) - (byte) sub_main::j#0 ← (number) 0 + (byte) sub_main::j#0 ← (byte) 0 to:sub_main::@2 sub_main::@2: scope:[sub_main] from sub_main::@1 sub_main::@4 (byte) sub_main::j#4 ← phi( sub_main::@1/(byte) sub_main::j#0 sub_main::@4/(byte) sub_main::j#1 ) (byte) sub_main::i#4 ← phi( sub_main::@1/(byte) sub_main::i#6 sub_main::@4/(byte) sub_main::i#5 ) - (byte) sub_main::k#0 ← (number) 0 + (byte) sub_main::k#0 ← (byte) 0 to:sub_main::@3 sub_main::@3: scope:[sub_main] from sub_main::@2 sub_main::@3 (byte) sub_main::k#2 ← phi( sub_main::@2/(byte) sub_main::k#0 sub_main::@3/(byte) sub_main::k#1 ) @@ -179,16 +179,16 @@ sub_main::@return: scope:[sub_main] from sub_main::@5 return to:@return sub_irq: scope:[sub_irq] from irq::@3 - (byte) sub_irq::i#0 ← (number) 0 + (byte) sub_irq::i#0 ← (byte) 0 to:sub_irq::@1 sub_irq::@1: scope:[sub_irq] from sub_irq sub_irq::@5 (byte) sub_irq::i#6 ← phi( sub_irq/(byte) sub_irq::i#0 sub_irq::@5/(byte) sub_irq::i#1 ) - (byte) sub_irq::j#0 ← (number) 0 + (byte) sub_irq::j#0 ← (byte) 0 to:sub_irq::@2 sub_irq::@2: scope:[sub_irq] from sub_irq::@1 sub_irq::@4 (byte) sub_irq::j#4 ← phi( sub_irq::@1/(byte) sub_irq::j#0 sub_irq::@4/(byte) sub_irq::j#1 ) (byte) sub_irq::i#4 ← phi( sub_irq::@1/(byte) sub_irq::i#6 sub_irq::@4/(byte) sub_irq::i#5 ) - (byte) sub_irq::k#0 ← (number) 0 + (byte) sub_irq::k#0 ← (byte) 0 to:sub_irq::@3 sub_irq::@3: scope:[sub_irq] from sub_irq::@2 sub_irq::@3 (byte) sub_irq::k#2 ← phi( sub_irq::@2/(byte) sub_irq::k#0 sub_irq::@3/(byte) sub_irq::k#1 ) @@ -386,18 +386,6 @@ Adding number conversion cast (unumber) 1 in (byte) IRQ_RASTER#0 ← (number) 1 Adding number conversion cast (unumber) $7f in (byte) CIA_INTERRUPT_CLEAR#0 ← (number) $7f Adding number conversion cast (unumber) $7f in *((byte*) VIC_CONTROL#0) ← *((byte*) VIC_CONTROL#0) & (number) $7f Adding number conversion cast (unumber) $fd in *((byte*) RASTER#0) ← (number) $fd -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::k#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) irq::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) irq::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) irq::k#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sub_main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sub_main::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sub_main::k#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sub_irq::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sub_irq::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) sub_irq::k#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (void()**) KERNEL_IRQ#0 ← (void()**)(number) $314 Inlining cast (byte*) RASTER#0 ← (byte*)(number) $d012 @@ -410,18 +398,6 @@ Inlining cast (byte*) FGCOL#0 ← (byte*)(number) $d021 Inlining cast (byte*) CIA1_INTERRUPT#0 ← (byte*)(number) $dc0d Inlining cast (byte) CIA_INTERRUPT_CLEAR#0 ← (unumber)(number) $7f Inlining cast *((byte*) RASTER#0) ← (unumber)(number) $fd -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 -Inlining cast (byte) main::k#0 ← (unumber)(number) 0 -Inlining cast (byte) irq::i#0 ← (unumber)(number) 0 -Inlining cast (byte) irq::j#0 ← (unumber)(number) 0 -Inlining cast (byte) irq::k#0 ← (unumber)(number) 0 -Inlining cast (byte) sub_main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) sub_main::j#0 ← (unumber)(number) 0 -Inlining cast (byte) sub_main::k#0 ← (unumber)(number) 0 -Inlining cast (byte) sub_irq::i#0 ← (unumber)(number) 0 -Inlining cast (byte) sub_irq::j#0 ← (unumber)(number) 0 -Inlining cast (byte) sub_irq::k#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (void()**) 788 Simplifying constant pointer cast (byte*) 53266 @@ -435,35 +411,11 @@ Simplifying constant pointer cast (byte*) 56333 Simplifying constant integer cast $7f Simplifying constant integer cast $7f Simplifying constant integer cast $fd -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $7f Finalized unsigned number type (byte) $7f Finalized unsigned number type (byte) $fd -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::k#2 = (byte) main::k#3 Alias (byte) main::i#2 = (byte) main::i#4 (byte) main::i#6 (byte) main::i#3 diff --git a/src/test/ref/line-anim.log b/src/test/ref/line-anim.log index 9123756ef..56c1d8fbd 100644 --- a/src/test/ref/line-anim.log +++ b/src/test/ref/line-anim.log @@ -130,7 +130,7 @@ divr16u: scope:[divr16u] from divr16s::@4 (word) divr16u::dividend#4 ← phi( divr16s::@4/(word) divr16u::dividend#1 ) (word) divr16u::rem#8 ← phi( divr16s::@4/(word) divr16u::rem#3 ) (word) divr16u::quotient#0 ← (number) 0 - (byte) divr16u::i#0 ← (number) 0 + (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (byte) divr16u::i#5 ← phi( divr16u/(byte) divr16u::i#0 divr16u::@3/(byte) divr16u::i#1 ) @@ -381,7 +381,7 @@ main::@18: scope:[main] from main::@17 to:main::@19 main::@19: scope:[main] from main::@18 (number~) main::$8 ← (byte) SIZE#0 - (number) 1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@19 main::@21 (byte) main::i#2 ← phi( main::@19/(byte) main::i#0 main::@21/(byte) main::i#1 ) @@ -566,13 +566,13 @@ point_init::@return: scope:[point_init] from point_init::@2 screen_fill: scope:[screen_fill] from main::@18 (byte*) screen_fill::screen#4 ← phi( main::@18/(byte*) screen_fill::screen#0 ) (byte) screen_fill::ch#3 ← phi( main::@18/(byte) screen_fill::ch#0 ) - (byte) screen_fill::y#0 ← (number) 0 + (byte) screen_fill::y#0 ← (byte) 0 to:screen_fill::@1 screen_fill::@1: scope:[screen_fill] from screen_fill screen_fill::@3 (byte) screen_fill::y#4 ← phi( screen_fill/(byte) screen_fill::y#0 screen_fill::@3/(byte) screen_fill::y#1 ) (byte*) screen_fill::screen#3 ← phi( screen_fill/(byte*) screen_fill::screen#4 screen_fill::@3/(byte*) screen_fill::screen#5 ) (byte) screen_fill::ch#2 ← phi( screen_fill/(byte) screen_fill::ch#3 screen_fill::@3/(byte) screen_fill::ch#4 ) - (byte) screen_fill::x#0 ← (number) 0 + (byte) screen_fill::x#0 ← (byte) 0 to:screen_fill::@2 screen_fill::@2: scope:[screen_fill] from screen_fill::@1 screen_fill::@2 (byte) screen_fill::y#3 ← phi( screen_fill::@1/(byte) screen_fill::y#4 screen_fill::@2/(byte) screen_fill::y#3 ) @@ -604,7 +604,7 @@ screen_fill::@return: scope:[screen_fill] from screen_fill::@3 bitmap_init: scope:[bitmap_init] from main::@16 (byte*) bitmap_init::bitmap#5 ← phi( main::@16/(byte*) bitmap_init::bitmap#0 ) (byte) bitmap_init::bits#0 ← (number) $80 - (byte) bitmap_init::x#0 ← (number) 0 + (byte) bitmap_init::x#0 ← (byte) 0 to:bitmap_init::@1 bitmap_init::@1: scope:[bitmap_init] from bitmap_init bitmap_init::@2 (byte*) bitmap_init::bitmap#3 ← phi( bitmap_init/(byte*) bitmap_init::bitmap#5 bitmap_init::@2/(byte*) bitmap_init::bitmap#2 ) @@ -632,7 +632,7 @@ bitmap_init::@3: scope:[bitmap_init] from bitmap_init::@1 bitmap_init::@4: scope:[bitmap_init] from bitmap_init::@2 (byte*) bitmap_init::bitmap#1 ← phi( bitmap_init::@2/(byte*) bitmap_init::bitmap#2 ) (byte*) bitmap_init::yoffs#0 ← (byte*) bitmap_init::bitmap#1 - (byte) bitmap_init::y#0 ← (number) 0 + (byte) bitmap_init::y#0 ← (byte) 0 to:bitmap_init::@5 bitmap_init::@5: scope:[bitmap_init] from bitmap_init::@4 bitmap_init::@6 (byte*) bitmap_init::yoffs#2 ← phi( bitmap_init::@4/(byte*) bitmap_init::yoffs#0 bitmap_init::@6/(byte*) bitmap_init::yoffs#4 ) @@ -668,12 +668,12 @@ bitmap_init::@return: scope:[bitmap_init] from bitmap_init::@6 bitmap_clear: scope:[bitmap_clear] from main::@17 (byte*~) bitmap_clear::$0 ← ((byte*)) { *((byte[$100]) bitmap_plot_yhi#0 + (number) 0), *((byte[$100]) bitmap_plot_ylo#0 + (number) 0) } (byte*) bitmap_clear::bitmap#0 ← (byte*~) bitmap_clear::$0 - (byte) bitmap_clear::y#0 ← (number) 0 + (byte) bitmap_clear::y#0 ← (byte) 0 to:bitmap_clear::@1 bitmap_clear::@1: scope:[bitmap_clear] from bitmap_clear bitmap_clear::@3 (byte) bitmap_clear::y#4 ← phi( bitmap_clear/(byte) bitmap_clear::y#0 bitmap_clear::@3/(byte) bitmap_clear::y#1 ) (byte*) bitmap_clear::bitmap#3 ← phi( bitmap_clear/(byte*) bitmap_clear::bitmap#0 bitmap_clear::@3/(byte*) bitmap_clear::bitmap#4 ) - (byte) bitmap_clear::x#0 ← (number) 0 + (byte) bitmap_clear::x#0 ← (byte) 0 to:bitmap_clear::@2 bitmap_clear::@2: scope:[bitmap_clear] from bitmap_clear::@1 bitmap_clear::@2 (byte) bitmap_clear::y#3 ← phi( bitmap_clear::@1/(byte) bitmap_clear::y#4 bitmap_clear::@2/(byte) bitmap_clear::y#3 ) @@ -1288,7 +1288,6 @@ Adding number conversion cast (unumber) $20 in (byte) VIC_BMM#0 ← (number) $20 Adding number conversion cast (unumber) $10 in (byte) VIC_DEN#0 ← (number) $10 Adding number conversion cast (unumber) 8 in (byte) VIC_RSEL#0 ← (number) 8 Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) divr16u::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#4 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1330,7 +1329,6 @@ Adding number conversion cast (unumber) main::toD0181_$8#0 in (number~) main::to Adding number conversion cast (unumber) $10 in (byte) screen_fill::ch#0 ← (number) $10 Adding number conversion cast (unumber) 1 in (number~) main::$8 ← (byte) SIZE#0 - (number) 1 Adding number conversion cast (unumber) main::$8 in (number~) main::$8 ← (byte) SIZE#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $ff in (bool~) main::$12 ← *((byte*) RASTER#0) != (number) $ff Adding number conversion cast (snumber) 0 in (bool~) point_init::abs16s1_$0#0 ← (signed word) point_init::abs16s1_w#1 < (number) 0 Adding number conversion cast (snumber) 0 in (bool~) point_init::abs16s2_$0#0 ← (signed word) point_init::abs16s2_w#1 < (number) 0 @@ -1344,14 +1342,10 @@ Adding number conversion cast (snumber) $10 in *((signed byte[SIZE#0]) x_add#0 + Adding number conversion cast (snumber) 0 in (signed word) divr16s::dividend#0 ← (number) 0 Adding number conversion cast (unumber) $10 in (number~) point_init::$15 ← (byte~) point_init::$14 / (number) $10 Adding number conversion cast (unumber) point_init::$15 in (number~) point_init::$15 ← (byte~) point_init::$14 / (unumber)(number) $10 -Adding number conversion cast (unumber) 0 in (byte) screen_fill::y#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) screen_fill::x#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#0 ← (number) $80 -Adding number conversion cast (unumber) 0 in (byte) bitmap_init::x#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) bitmap_init::bits#1 ← (byte) bitmap_init::bits#3 >> (number) 1 Adding number conversion cast (unumber) 0 in (bool~) bitmap_init::$0 ← (byte) bitmap_init::bits#1 == (number) 0 Adding number conversion cast (unumber) $80 in (byte) bitmap_init::bits#2 ← (number) $80 -Adding number conversion cast (unumber) 0 in (byte) bitmap_init::y#0 ← (number) 0 Adding number conversion cast (unumber) 7 in (number~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (number) 7 Adding number conversion cast (unumber) bitmap_init::$3 in (number~) bitmap_init::$3 ← (byte) bitmap_init::y#2 & (unumber)(number) 7 Adding number conversion cast (unumber) bitmap_init::$5 in (number~) bitmap_init::$5 ← (unumber~) bitmap_init::$3 | (byte~) bitmap_init::$4 @@ -1361,8 +1355,6 @@ Adding number conversion cast (unumber) 7 in (bool~) bitmap_init::$8 ← (unumbe Adding number conversion cast (unumber) bitmap_init::$10 in (byte*~) bitmap_init::$11 ← (byte*) bitmap_init::yoffs#3 + (number~) bitmap_init::$10 Adding number conversion cast (unumber) 0 in (var) bitmap_clear::$3 ← (byte)*((byte[$100]) bitmap_plot_yhi#0 + (number) 0) w= (byte)*((byte[$100]) bitmap_plot_ylo#0 + (number) 0) Adding number conversion cast (unumber) 0 in (var) bitmap_clear::$3 ← (byte)*((byte[$100]) bitmap_plot_yhi#0 + (unumber)(number) 0) w= (byte)*((byte[$100]) bitmap_plot_ylo#0 + (number) 0) -Adding number conversion cast (unumber) 0 in (byte) bitmap_clear::y#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) bitmap_clear::x#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte*) bitmap_clear::bitmap#2) ← (number) 0 Adding number conversion cast (unumber) $fff8 in (number~) bitmap_plot::$1 ← (word) bitmap_plot::x#1 & (number) $fff8 Adding number conversion cast (unumber) bitmap_plot::$1 in (number~) bitmap_plot::$1 ← (word) bitmap_plot::x#1 & (unumber)(number) $fff8 @@ -1386,7 +1378,6 @@ Inlining cast (byte*) D018#0 ← (byte*)(number) $d018 Inlining cast (byte*) CIA2_PORT_A#0 ← (byte*)(number) $dd00 Inlining cast (byte*) CIA2_PORT_A_DDR#0 ← (byte*)(number) $dd02 Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 -Inlining cast (byte) divr16u::i#0 ← (unumber)(number) 0 Inlining cast (byte) divr16s::neg#0 ← (unumber)(number) 0 Inlining cast (word) divr16s::dividendu#0 ← (unumber)(number) 0 Inlining cast (word) divr16s::remu#0 ← (unumber)(number) 0 @@ -1409,7 +1400,6 @@ Inlining cast (word~) main::vicSelectGfxBank1_toDd001_$0#0 ← (word)(byte*) mai Inlining cast (word~) main::toD0181_$0#0 ← (word)(byte*) main::toD0181_screen#1 Inlining cast (word~) main::toD0181_$4#0 ← (word)(byte*) main::toD0181_gfx#1 Inlining cast (byte) screen_fill::ch#0 ← (unumber)(number) $10 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (signed word~) point_init::$0 ← (signed word)*((word[SIZE#0]) x_end#0 + (byte~) point_init::$17) Inlining cast (signed word~) point_init::$1 ← (signed word)*((word[SIZE#0]) x_start#0 + (byte~) point_init::$18) Inlining cast (signed word~) point_init::$3 ← (signed word)*((byte[SIZE#0]) y_end#0 + (byte) point_init::point_idx#1) @@ -1423,15 +1413,9 @@ Inlining cast *((signed byte[SIZE#0]) x_add#0 + (byte) point_init::point_idx#3) Inlining cast *((signed byte[SIZE#0]) x_add#0 + (byte) point_init::point_idx#4) ← (snumber)(number) $10 Inlining cast (signed word) divr16s::dividend#0 ← (snumber)(number) 0 Inlining cast (signed byte~) point_init::$16 ← (signed byte)(unumber~) point_init::$15 -Inlining cast (byte) screen_fill::y#0 ← (unumber)(number) 0 -Inlining cast (byte) screen_fill::x#0 ← (unumber)(number) 0 Inlining cast (byte) bitmap_init::bits#0 ← (unumber)(number) $80 -Inlining cast (byte) bitmap_init::x#0 ← (unumber)(number) 0 Inlining cast (byte) bitmap_init::bits#2 ← (unumber)(number) $80 -Inlining cast (byte) bitmap_init::y#0 ← (unumber)(number) 0 Inlining cast (unumber~) bitmap_init::$13 ← (unumber)(number~) bitmap_init::$10 -Inlining cast (byte) bitmap_clear::y#0 ← (unumber)(number) 0 -Inlining cast (byte) bitmap_clear::x#0 ← (unumber)(number) 0 Inlining cast *((byte*) bitmap_clear::bitmap#2) ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 0 @@ -1448,7 +1432,6 @@ Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 56576 Simplifying constant pointer cast (byte*) 56578 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -1495,7 +1478,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $10 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -1506,14 +1488,10 @@ Simplifying constant integer cast -$10 Simplifying constant integer cast $10 Simplifying constant integer cast 0 Simplifying constant integer cast $10 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast $80 -Simplifying constant integer cast 0 Simplifying constant integer cast 7 Simplifying constant integer cast 7 Simplifying constant integer cast 7 @@ -1522,8 +1500,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast *((byte[$100]) bitmap_plot_ylo#0 + (unumber)(number) 0) Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast *((byte[$100]) bitmap_plot_yhi#0 + (byte) bitmap_plot::y#1) Simplifying constant integer cast *((byte[$100]) bitmap_plot_ylo#0 + (byte) bitmap_plot::y#1) Simplifying constant integer cast $fff8 @@ -1534,7 +1510,6 @@ Finalized unsigned number type (byte) $20 Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -1563,7 +1538,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (byte) $10 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 @@ -1574,22 +1548,16 @@ Finalized signed number type (signed byte) -$10 Finalized signed number type (signed byte) $10 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) $10 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $fff8 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 diff --git a/src/test/ref/linegen.log b/src/test/ref/linegen.log index d09433251..661d93183 100644 --- a/src/test/ref/linegen.log +++ b/src/test/ref/linegen.log @@ -49,7 +49,7 @@ divr16u: scope:[divr16u] from lin16u_gen lin16u_gen::@3 (word) divr16u::dividend#5 ← phi( lin16u_gen/(word) divr16u::dividend#1 lin16u_gen::@3/(word) divr16u::dividend#2 ) (word) divr16u::rem#10 ← phi( lin16u_gen/(word) divr16u::rem#3 lin16u_gen::@3/(word) divr16u::rem#4 ) (word) divr16u::quotient#0 ← (number) 0 - (byte) divr16u::i#0 ← (number) 0 + (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (byte) divr16u::i#5 ← phi( divr16u/(byte) divr16u::i#0 divr16u::@3/(byte) divr16u::i#1 ) @@ -1103,7 +1103,6 @@ Fixing inline constructor with lin16u_gen::$9 ← (word)lin16u_gen::min#4 dw= (w Successful SSA optimization Pass2FixInlineConstructorsNew Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) divr16u::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1144,7 +1143,6 @@ Adding number conversion cast (unumber) 0 in (word) lin16u_gen::i#0 ← (number) Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (word) rem16u#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 -Inlining cast (byte) divr16u::i#0 ← (unumber)(number) 0 Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Inlining cast (word) lin16u_gen::min#0 ← (unumber)(number) $22d Inlining cast (word) lin16u_gen::max#0 ← (unumber)(number) $7461 @@ -1168,7 +1166,6 @@ Inlining cast (word) lin16u_gen::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -1209,7 +1206,6 @@ Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/literal-strings.log b/src/test/ref/literal-strings.log index fa6df2452..019433678 100644 --- a/src/test/ref/literal-strings.log +++ b/src/test/ref/literal-strings.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA (byte[]) msg#0 ← (const string) $1 to:@1 main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -52,17 +52,13 @@ SYMBOL TABLE SSA (byte[]) msgz (byte[]) msgz#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte*~) main::$0 ← (byte*) SCREEN#0 + (number) $28 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$1 [10] if((byte) main::i#1!=rangelast(0,3)) goto main::@1 diff --git a/src/test/ref/literals.log b/src/test/ref/literals.log index 0d0302bbe..3f1724d0f 100644 --- a/src/test/ref/literals.log +++ b/src/test/ref/literals.log @@ -15,7 +15,7 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @1 *((byte*) SCREEN#0 + (number) 0) ← (byte) ch#0 *((byte*) SCREEN#0 + (number) 2) ← (byte) num#0 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -67,7 +67,6 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 1 in (byte) num#0 ← (number) 1 Adding number conversion cast (unumber) 0 in *((byte*) SCREEN#0 + (number) 0) ← (byte) ch#0 Adding number conversion cast (unumber) 2 in *((byte*) SCREEN#0 + (number) 2) ← (byte) num#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 4 in (number~) main::$0 ← (number) 4 + (byte) main::i#2 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (unumber)(number) 4 + (byte) main::i#2 Adding number conversion cast (unumber) 9 in (number~) main::$1 ← (number) 9 + (byte) main::i#2 @@ -77,7 +76,6 @@ Adding number conversion cast (byte) to elements in (byte[]) nums#0 ← { (byte) Successful SSA optimization PassNAddArrayNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte) num#0 ← (unumber)(number) 1 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 1 @@ -87,14 +85,12 @@ Simplifying constant integer cast 4 Simplifying constant integer cast 5 Simplifying constant integer cast 0 Simplifying constant integer cast 2 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant integer cast 9 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) 9 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/localscope-loops.log b/src/test/ref/localscope-loops.log index 3502ae77c..9259d4da6 100644 --- a/src/test/ref/localscope-loops.log +++ b/src/test/ref/localscope-loops.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA (byte*) SCREEN#0 ← ((byte*)) (number) $400 to:@1 main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -16,7 +16,7 @@ main::@1: scope:[main] from main main::@1 if((bool~) main::$0) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@1 - (byte) main::i1#0 ← (number) 0 + (byte) main::i1#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@3 (byte) main::i1#2 ← phi( main::@2/(byte) main::i1#0 main::@3/(byte) main::i1#1 ) @@ -60,22 +60,14 @@ SYMBOL TABLE SSA (byte) main::i1#1 (byte) main::i1#2 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::i1#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (number~) main::$1 ← (number) $28 + (byte) main::i1#2 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (unumber)(number) $28 + (byte) main::i1#2 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i1#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$1 ← (byte) $28 + (byte) main::i1#2 diff --git a/src/test/ref/longjump.log b/src/test/ref/longjump.log index ec79c39a8..a2a77cf30 100644 --- a/src/test/ref/longjump.log +++ b/src/test/ref/longjump.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -43,16 +43,10 @@ SYMBOL TABLE SSA (byte) main::i#1 (byte) main::i#2 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [7] if((byte) main::i#1!=rangelast(0,$a)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = (byte*) 1024 diff --git a/src/test/ref/longjump2.log b/src/test/ref/longjump2.log index 484828a44..d946fa6ce 100644 --- a/src/test/ref/longjump2.log +++ b/src/test/ref/longjump2.log @@ -23,7 +23,7 @@ main::@return: scope:[main] from main::@2 to:@return long1: scope:[long1] from main (byte*) long1::SCREEN#0 ← ((byte*)) (number) $400 - (byte) long1::i#0 ← (number) 0 + (byte) long1::i#0 ← (byte) 0 to:long1::@1 long1::@1: scope:[long1] from long1 long1::@1 (byte) long1::i#2 ← phi( long1/(byte) long1::i#0 long1::@1/(byte) long1::i#1 ) @@ -38,7 +38,7 @@ long1::@return: scope:[long1] from long1::@1 to:@return long2: scope:[long2] from main::@1 (byte*) long2::SCREEN#0 ← ((byte*)) (number) $400 - (byte) long2::i#0 ← (number) 0 + (byte) long2::i#0 ← (byte) 0 to:long2::@1 long2::@1: scope:[long2] from long2 long2::@1 (byte) long2::i#2 ← phi( long2/(byte) long2::i#0 long2::@1/(byte) long2::i#1 ) @@ -88,22 +88,12 @@ SYMBOL TABLE SSA (label) main::@2 (label) main::@return -Adding number conversion cast (unumber) 0 in (byte) long1::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) long2::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) long1::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) long1::i#0 ← (unumber)(number) 0 Inlining cast (byte*) long2::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) long2::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) long1::$0 [10] if((byte) long1::i#1!=rangelast(0,$a)) goto long1::@1 Simple Condition (bool~) long2::$0 [19] if((byte) long2::i#1!=rangelast(0,$a)) goto long2::@1 Successful SSA optimization Pass2ConditionalJumpSimplification diff --git a/src/test/ref/loop-break-continue.log b/src/test/ref/loop-break-continue.log index dab7cbcde..2d1702b32 100644 --- a/src/test/ref/loop-break-continue.log +++ b/src/test/ref/loop-break-continue.log @@ -12,7 +12,7 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @1 (byte*) main::screen#0 ← ((byte*)) (number) $400 (byte[]) main::str#0 ← (const string) main::$5 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@5 (byte*) main::screen#4 ← phi( main/(byte*) main::screen#0 main::@5/(byte*) main::screen#5 ) @@ -85,16 +85,10 @@ SYMBOL TABLE SSA (byte[]) main::str (byte[]) main::str#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [5] (bool~) main::$1 ← *((byte[]) main::str#0 + (byte) main::i#2) != (byte) '@' from [4] (bool~) main::$0 ← *((byte[]) main::str#0 + (byte) main::i#2) == (byte) '@' Inversing boolean not [9] (bool~) main::$3 ← *((byte[]) main::str#0 + (byte) main::i#3) != (byte) ' ' from [8] (bool~) main::$2 ← *((byte[]) main::str#0 + (byte) main::i#3) == (byte) ' ' Successful SSA optimization Pass2UnaryNotSimplification diff --git a/src/test/ref/loop-break-nested.log b/src/test/ref/loop-break-nested.log index 1e28d5213..7d1a56669 100644 --- a/src/test/ref/loop-break-nested.log +++ b/src/test/ref/loop-break-nested.log @@ -22,7 +22,7 @@ main::@1: scope:[main] from main main::@6 to:main::@return main::@2: scope:[main] from main::@1 (byte*) main::line#6 ← phi( main::@1/(byte*) main::line#2 ) - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@4 main::@4: scope:[main] from main::@2 main::@5 (byte) main::i#2 ← phi( main::@2/(byte) main::i#0 main::@5/(byte) main::i#1 ) @@ -91,19 +91,15 @@ SYMBOL TABLE SSA (byte*) main::line#5 (byte*) main::line#6 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte*) main::line#1 ← (byte*) main::line#5 + (number) $28 Adding number conversion cast (unumber) main::$6 in (bool~) main::$7 ← (byte*) main::line#1 < (number~) main::$6 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::line#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (unumber~) main::$8 ← (unumber)(number~) main::$6 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [3] (bool~) main::$1 ← *((byte*) main::line#2) != (byte) 'a' from [2] (bool~) main::$0 ← *((byte*) main::line#2) == (byte) 'a' diff --git a/src/test/ref/loop-break.log b/src/test/ref/loop-break.log index 3e66ba241..adde7e390 100644 --- a/src/test/ref/loop-break.log +++ b/src/test/ref/loop-break.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (number~) main::$0 ← (number) $28 * (number) 6 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -56,16 +56,10 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [5] (bool~) main::$2 ← *((byte*) SCREEN#0 + (byte) main::i#2) != (byte) 'a' from [4] (bool~) main::$1 ← *((byte*) SCREEN#0 + (byte) main::i#2) == (byte) 'a' Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) main::i#2 = (byte) main::i#3 diff --git a/src/test/ref/loop-continue.log b/src/test/ref/loop-continue.log index d894bae11..0a854d5ae 100644 --- a/src/test/ref/loop-continue.log +++ b/src/test/ref/loop-continue.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (number~) main::$0 ← (number) $28 * (number) 6 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@3/(byte) main::i#1 ) @@ -60,16 +60,10 @@ SYMBOL TABLE SSA (byte) main::i#3 (byte) main::i#4 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [5] (bool~) main::$2 ← *((byte*) SCREEN#0 + (byte) main::i#2) != (byte) ' ' from [4] (bool~) main::$1 ← *((byte*) SCREEN#0 + (byte) main::i#2) == (byte) ' ' Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) main::i#2 = (byte) main::i#3 diff --git a/src/test/ref/loop-problem.log b/src/test/ref/loop-problem.log index f73260aa4..3d32f5cd1 100644 --- a/src/test/ref/loop-problem.log +++ b/src/test/ref/loop-problem.log @@ -21,7 +21,7 @@ main::@return: scope:[main] from main::@2 return to:@return b: scope:[b] from main::@1 - (byte) b::i#0 ← (number) 0 + (byte) b::i#0 ← (byte) 0 to:b::@1 b::@1: scope:[b] from b b::@3 (byte) b::i#3 ← phi( b/(byte) b::i#0 b::@3/(byte) b::i#1 ) @@ -73,16 +73,10 @@ SYMBOL TABLE SSA (label) main::@2 (label) main::@return -Adding number conversion cast (unumber) 0 in (byte) b::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) b::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) b::i#2 = (byte) b::i#3 Successful SSA optimization Pass2AliasElimination Simple Condition (bool~) b::$1 [11] if((byte) b::i#1!=rangelast(0,3)) goto b::@1 diff --git a/src/test/ref/loopnest3.log b/src/test/ref/loopnest3.log index 71fbcfc84..a3264d8ad 100644 --- a/src/test/ref/loopnest3.log +++ b/src/test/ref/loopnest3.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@2 main: scope:[main] from @3 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@3/(byte) main::i#1 ) @@ -38,7 +38,7 @@ b::@return: scope:[b] from b::@1 to:@3 c: scope:[c] from b (byte) c::i#2 ← phi( b/(byte) c::i#0 ) - (byte) c::j#0 ← (number) 0 + (byte) c::j#0 ← (byte) 0 to:c::@1 c::@1: scope:[c] from c c::@1 (byte) c::j#2 ← phi( c/(byte) c::j#0 c::@1/(byte) c::j#1 ) @@ -95,20 +95,10 @@ SYMBOL TABLE SSA (byte) main::i#2 (byte) main::i#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) c::j#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) c::j#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 Successful SSA optimization Pass2AliasElimination Self Phi Eliminated (byte) c::i#1 diff --git a/src/test/ref/mem-alignment.log b/src/test/ref/mem-alignment.log index 46634806b..e4a277db5 100644 --- a/src/test/ref/mem-alignment.log +++ b/src/test/ref/mem-alignment.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte[$100]) main::cs#0 ← { fill( $100, 0) } - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -17,7 +17,7 @@ main::@1: scope:[main] from main main::@1 to:main::@2 main::@2: scope:[main] from main::@1 (byte) main::j#0 ← (number) $ff - (byte) main::i1#0 ← (number) 0 + (byte) main::i1#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@3 (byte) main::i1#2 ← phi( main::@2/(byte) main::i1#0 main::@3/(byte) main::i1#1 ) @@ -67,21 +67,13 @@ SYMBOL TABLE SSA (byte) main::j#1 (byte) main::j#2 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $ff in (byte) main::j#0 ← (number) $ff -Adding number conversion cast (unumber) 0 in (byte) main::i1#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte) main::j#0 ← (unumber)(number) $ff -Inlining cast (byte) main::i1#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 Simplifying constant integer cast $ff -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [7] if((byte) main::i#1!=rangelast(0,$ff)) goto main::@1 Simple Condition (bool~) main::$1 [15] if((byte) main::i1#1!=rangelast(0,$ff)) goto main::@3 diff --git a/src/test/ref/memory-heap.log b/src/test/ref/memory-heap.log index 92bcf8a52..63cf273af 100644 --- a/src/test/ref/memory-heap.log +++ b/src/test/ref/memory-heap.log @@ -55,7 +55,7 @@ main::@4: scope:[main] from main::@3 (byte*) heap_head#4 ← (byte*) heap_head#10 (byte*~) main::$3 ← ((byte*)) (byte*~) main::$2 (byte*) main::buf2#0 ← (byte*~) main::$3 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@1 main::@4 (byte*) heap_head#18 ← phi( main::@1/(byte*) heap_head#18 main::@4/(byte*) heap_head#4 ) @@ -190,7 +190,6 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) $64 in (word) malloc::size#0 ← (number) $64 Adding number conversion cast (unumber) $64 in (word) malloc::size#1 ← (number) $64 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $ff in (number~) main::$6 ← (number) $ff - (byte) main::i#2 Adding number conversion cast (unumber) main::$6 in (number~) main::$6 ← (unumber)(number) $ff - (byte) main::i#2 Adding number conversion cast (unumber) 0 in *((byte*) main::screen#0 + (number) 0) ← *((byte*) main::buf1#3) @@ -201,7 +200,6 @@ Inlining cast (word) malloc::size#0 ← (unumber)(number) $64 Inlining cast (byte*~) main::$1 ← (byte*)(byte*~) main::$0 Inlining cast (word) malloc::size#1 ← (unumber)(number) $64 Inlining cast (byte*~) main::$3 ← (byte*)(byte*~) main::$2 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 49152 @@ -209,7 +207,6 @@ Simplifying constant integer cast $64 Simplifying constant integer cast (byte*~) main::$0 Simplifying constant integer cast $64 Simplifying constant integer cast (byte*~) main::$2 -Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 @@ -217,7 +214,6 @@ Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $64 Finalized unsigned number type (byte) $64 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 diff --git a/src/test/ref/mul8u-min.log b/src/test/ref/mul8u-min.log index 19112b406..39f9d1795 100644 --- a/src/test/ref/mul8u-min.log +++ b/src/test/ref/mul8u-min.log @@ -64,12 +64,12 @@ mul8u::@return: scope:[mul8u] from mul8u::@3 main: scope:[main] from @6 (word*) main::screen#0 ← ((word*)) (number) $400 (byte) main::i#0 ← (number) 0 - (byte) main::a#0 ← (number) 0 + (byte) main::a#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::i#4 ← phi( main/(byte) main::i#0 main::@3/(byte) main::i#5 ) (byte) main::a#4 ← phi( main/(byte) main::a#0 main::@3/(byte) main::a#1 ) - (byte) main::b#0 ← (number) 0 + (byte) main::b#0 ← (byte) 0 to:main::@2 main::@2: scope:[main] from main::@1 main::@5 (byte) main::i#3 ← phi( main::@1/(byte) main::i#4 main::@5/(byte) main::i#1 ) @@ -202,14 +202,10 @@ Adding number conversion cast (unumber) 0 in (bool~) mul8u::$2 ← (unumber~) mu Adding number conversion cast (unumber) 1 in (byte~) mul8u::$5 ← (byte) mul8u::a#4 >> (number) 1 Adding number conversion cast (unumber) 1 in (word~) mul8u::$6 ← (word) mul8u::mb#2 << (number) 1 Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::a#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::b#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (word) mul8u::res#0 ← (unumber)(number) 0 Inlining cast (word*) main::screen#0 ← (word*)(number) $400 Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::a#0 ← (unumber)(number) 0 -Inlining cast (byte) main::b#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -219,8 +215,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant pointer cast (word*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 @@ -229,8 +223,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) mul8u::$1 ← (byte) mul8u::a#3 & (byte) 1 Inversing boolean not [9] (bool~) mul8u::$3 ← (byte~) mul8u::$1 == (byte) 0 from [8] (bool~) mul8u::$2 ← (byte~) mul8u::$1 != (byte) 0 diff --git a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log index f7a3a4ee6..d2fdf88a3 100644 --- a/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log +++ b/src/test/ref/multiplexer-irq/simple-multiplexer-irq.log @@ -135,7 +135,7 @@ plexInit::plexSetScreen1: scope:[plexInit] from plexInit plexInit::@3: scope:[plexInit] from plexInit::plexSetScreen1 (byte*) PLEX_SCREEN_PTR#22 ← phi( plexInit::plexSetScreen1/(byte*) PLEX_SCREEN_PTR#1 ) (number~) plexInit::$1 ← (byte) PLEX_COUNT#0 - (number) 1 - (byte) plexInit::i#0 ← (number) 0 + (byte) plexInit::i#0 ← (byte) 0 to:plexInit::@1 plexInit::@1: scope:[plexInit] from plexInit::@1 plexInit::@3 (byte*) PLEX_SCREEN_PTR#15 ← phi( plexInit::@1/(byte*) PLEX_SCREEN_PTR#15 plexInit::@3/(byte*) PLEX_SCREEN_PTR#22 ) @@ -152,7 +152,7 @@ plexInit::@return: scope:[plexInit] from plexInit::@1 to:@return plexSort: scope:[plexSort] from loop::@11 (number~) plexSort::$1 ← (byte) PLEX_COUNT#0 - (number) 2 - (byte) plexSort::m#0 ← (number) 0 + (byte) plexSort::m#0 ← (byte) 0 to:plexSort::@1 plexSort::@1: scope:[plexSort] from plexSort plexSort::@2 (byte) plexSort::m#2 ← phi( plexSort/(byte) plexSort::m#0 plexSort::@2/(byte) plexSort::m#1 ) @@ -204,7 +204,7 @@ plexSort::plexFreePrepare1: scope:[plexSort] from plexSort::@6 (byte) plex_sprite_msb#43 ← phi( plexSort::@6/(byte) plex_sprite_msb#1 ) (byte) plex_sprite_idx#44 ← phi( plexSort::@6/(byte) plex_sprite_idx#1 ) (byte) plex_show_idx#47 ← phi( plexSort::@6/(byte) plex_show_idx#1 ) - (byte) plexSort::plexFreePrepare1_s#0 ← (number) 0 + (byte) plexSort::plexFreePrepare1_s#0 ← (byte) 0 to:plexSort::plexFreePrepare1_@1 plexSort::plexFreePrepare1_@1: scope:[plexSort] from plexSort::plexFreePrepare1 plexSort::plexFreePrepare1_@1 (byte) plex_sprite_msb#33 ← phi( plexSort::plexFreePrepare1/(byte) plex_sprite_msb#43 plexSort::plexFreePrepare1_@1/(byte) plex_sprite_msb#33 ) @@ -412,7 +412,7 @@ init::@5: scope:[init] from init (byte*) PLEX_SCREEN_PTR#5 ← (byte*) PLEX_SCREEN_PTR#12 (word) init::xp#0 ← (number) $20 (number~) init::$4 ← (byte) PLEX_COUNT#0 - (number) 1 - (byte) init::sx#0 ← (number) 0 + (byte) init::sx#0 ← (byte) 0 to:init::@1 init::@1: scope:[init] from init::@1 init::@5 (byte*) PLEX_SCREEN_PTR#30 ← phi( init::@1/(byte*) PLEX_SCREEN_PTR#30 init::@5/(byte*) PLEX_SCREEN_PTR#5 ) @@ -431,7 +431,7 @@ init::@1: scope:[init] from init::@1 init::@5 init::@2: scope:[init] from init::@1 (byte*) PLEX_SCREEN_PTR#27 ← phi( init::@1/(byte*) PLEX_SCREEN_PTR#30 ) *((byte*) SPRITES_ENABLE#0) ← (number) $ff - (byte) init::ss#0 ← (number) 0 + (byte) init::ss#0 ← (byte) 0 to:init::@3 init::@3: scope:[init] from init::@2 init::@3 (byte*) PLEX_SCREEN_PTR#24 ← phi( init::@2/(byte*) PLEX_SCREEN_PTR#27 init::@3/(byte*) PLEX_SCREEN_PTR#24 ) @@ -614,7 +614,7 @@ loop::@6: scope:[loop] from loop::@4 *((byte*) BORDERCOL#0) ← (byte) RED#0 (byte) loop::y_idx#0 ← (byte) loop::sin_idx#2 (number~) loop::$1 ← (byte) PLEX_COUNT#0 - (number) 1 - (byte) loop::sy#0 ← (number) 0 + (byte) loop::sy#0 ← (byte) 0 to:loop::@10 loop::@10: scope:[loop] from loop::@10 loop::@6 (byte) plex_free_next#40 ← phi( loop::@10/(byte) plex_free_next#40 loop::@6/(byte) plex_free_next#46 ) @@ -1242,10 +1242,8 @@ Adding number conversion cast (unumber) 1 in (byte) plex_sprite_msb#0 ← (numbe Adding number conversion cast (unumber) $3f8 in (byte*~) plexInit::plexSetScreen1_$0#0 ← (byte*) plexInit::plexSetScreen1_screen#1 + (number) $3f8 Adding number conversion cast (unumber) 1 in (number~) plexInit::$1 ← (byte) PLEX_COUNT#0 - (number) 1 Adding number conversion cast (unumber) plexInit::$1 in (number~) plexInit::$1 ← (byte) PLEX_COUNT#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) plexInit::i#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (number~) plexSort::$1 ← (byte) PLEX_COUNT#0 - (number) 2 Adding number conversion cast (unumber) plexSort::$1 in (number~) plexSort::$1 ← (byte) PLEX_COUNT#0 - (unumber)(number) 2 -Adding number conversion cast (unumber) 0 in (byte) plexSort::m#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) plexSort::$2 ← (byte) plexSort::m#2 + (number) 1 Adding number conversion cast (unumber) plexSort::$2 in (number~) plexSort::$2 ← (byte) plexSort::m#2 + (unumber)(number) 1 Adding number conversion cast (unumber) 1 in (number~) plexSort::$5 ← (byte) plexSort::s#3 + (number) 1 @@ -1254,7 +1252,6 @@ Adding number conversion cast (unumber) $ff in (bool~) plexSort::$6 ← (byte) p Adding number conversion cast (unumber) 0 in (byte) plex_show_idx#1 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) plex_sprite_idx#1 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) plex_sprite_msb#1 ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) plexSort::plexFreePrepare1_s#0 ← (number) 0 Adding number conversion cast (unumber) 0 in *((byte[8]) PLEX_FREE_YPOS#0 + (byte) plexSort::plexFreePrepare1_s#2) ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) plex_free_next#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (number~) plexShowSprite::$0 ← (byte) plex_sprite_idx#13 * (number) 2 @@ -1281,18 +1278,15 @@ Adding number conversion cast (unumber) init::$1 in (number~) init::$1 ← (byte Adding number conversion cast (unumber) $20 in (word) init::xp#0 ← (number) $20 Adding number conversion cast (unumber) 1 in (number~) init::$4 ← (byte) PLEX_COUNT#0 - (number) 1 Adding number conversion cast (unumber) init::$4 in (number~) init::$4 ← (byte) PLEX_COUNT#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) init::sx#0 ← (number) 0 Adding number conversion cast (unumber) $40 in (byte*~) init::$5 ← (byte*) SPRITE#0 / (number) $40 Adding number conversion cast (unumber) 9 in (word) init::xp#1 ← (word) init::xp#2 + (number) 9 Adding number conversion cast (unumber) $ff in *((byte*) SPRITES_ENABLE#0) ← (number) $ff -Adding number conversion cast (unumber) 0 in (byte) init::ss#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (number~) plex_irq::$4 ← *((byte*) RASTER#0) + (number) 2 Adding number conversion cast (unumber) plex_irq::$4 in (number~) plex_irq::$4 ← *((byte*) RASTER#0) + (unumber)(number) 2 Adding number conversion cast (unumber) 0 in *((byte*) BORDERCOL#0) ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) loop::sin_idx#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) loop::$1 ← (byte) PLEX_COUNT#0 - (number) 1 Adding number conversion cast (unumber) loop::$1 in (number~) loop::$1 ← (byte) PLEX_COUNT#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) loop::sy#0 ← (number) 0 Adding number conversion cast (unumber) 8 in (byte) loop::y_idx#1 ← (byte) loop::y_idx#2 + (number) 8 Adding number conversion cast (unumber) 1 in (byte) loop::sin_idx#1 ← (byte) loop::sin_idx#3 + (number) 1 Adding number conversion cast (unumber) $7f in *((byte*) VIC_CONTROL#0) ← *((byte*) VIC_CONTROL#0) & (number) $7f @@ -1323,12 +1317,9 @@ Inlining cast (byte*) PLEX_SCREEN_PTR#0 ← (byte*)(number~) $0 Inlining cast (byte) plex_show_idx#0 ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_idx#0 ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_msb#0 ← (unumber)(number) 1 -Inlining cast (byte) plexInit::i#0 ← (unumber)(number) 0 -Inlining cast (byte) plexSort::m#0 ← (unumber)(number) 0 Inlining cast (byte) plex_show_idx#1 ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_idx#1 ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_msb#1 ← (unumber)(number) 1 -Inlining cast (byte) plexSort::plexFreePrepare1_s#0 ← (unumber)(number) 0 Inlining cast *((byte[8]) PLEX_FREE_YPOS#0 + (byte) plexSort::plexFreePrepare1_s#2) ← (unumber)(number) 0 Inlining cast (byte) plex_free_next#0 ← (unumber)(number) 0 Inlining cast (byte) plex_sprite_msb#4 ← (unumber)(number) 1 @@ -1337,13 +1328,10 @@ Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte*) SPRITE#0 ← (byte*)(number) $2000 Inlining cast (byte*) YSIN#0 ← (byte*)(number) $2100 Inlining cast (word) init::xp#0 ← (unumber)(number) $20 -Inlining cast (byte) init::sx#0 ← (unumber)(number) 0 Inlining cast (byte~) init::$6 ← (byte)(byte*~) init::$5 Inlining cast *((byte*) SPRITES_ENABLE#0) ← (unumber)(number) $ff -Inlining cast (byte) init::ss#0 ← (unumber)(number) 0 Inlining cast *((byte*) BORDERCOL#0) ← (unumber)(number) 0 Inlining cast (byte) loop::sin_idx#0 ← (unumber)(number) 0 -Inlining cast (byte) loop::sy#0 ← (unumber)(number) 0 Inlining cast *((byte*) RASTER#0) ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53248 @@ -1372,9 +1360,7 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $3f8 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast $ff @@ -1383,7 +1369,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast $15 Simplifying constant integer cast 1 @@ -1402,16 +1387,13 @@ Simplifying constant pointer cast (byte*) 8448 Simplifying constant integer cast 3 Simplifying constant integer cast $20 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast $40 Simplifying constant integer cast 9 Simplifying constant integer cast $ff -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast 8 Simplifying constant integer cast 1 Simplifying constant integer cast $7f @@ -1430,9 +1412,7 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (word) $3f8 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $ff @@ -1441,7 +1421,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $15 Finalized unsigned number type (byte) 1 @@ -1457,16 +1436,13 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $20 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 9 Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 8 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $7f diff --git a/src/test/ref/multiply-2s.log b/src/test/ref/multiply-2s.log index f3d3c7e1b..e08b6ba45 100644 --- a/src/test/ref/multiply-2s.log +++ b/src/test/ref/multiply-2s.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -84,7 +84,6 @@ SYMBOL TABLE SSA (signed byte) main::sb (signed byte) main::sb#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) main::$0 in (byte*~) main::$1 ← (byte*) main::SCREEN#0 + (number~) main::$0 Adding number conversion cast (unumber) 1 in (number~) main::$2 ← (byte) main::i#2 * (number) 1 Adding number conversion cast (unumber) main::$2 in (number~) main::$2 ← (byte) main::i#2 * (unumber)(number) 1 @@ -102,7 +101,6 @@ Adding number conversion cast (snumber) 2 in (number~) main::$16 ← (signed byt Adding number conversion cast (snumber) main::$16 in (number~) main::$16 ← (signed byte) main::sb#0 * (snumber)(number) 2 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (unumber~) main::$19 ← (unumber)(number~) main::$0 Inlining cast (unumber~) main::$20 ← (unumber)(number~) main::$3 Inlining cast (unumber~) main::$21 ← (unumber)(number~) main::$6 @@ -112,14 +110,12 @@ Inlining cast (unumber~) main::$23 ← (unumber)(number~) main::$14 Inlining cast (byte~) main::$17 ← (byte)(snumber~) main::$16 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 4 Simplifying constant integer cast 8 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 4 diff --git a/src/test/ref/noop-cast-elimination.log b/src/test/ref/noop-cast-elimination.log index 9ca881035..3dc9d9671 100644 --- a/src/test/ref/noop-cast-elimination.log +++ b/src/test/ref/noop-cast-elimination.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @1 (signed word*) main::screen#0 ← ((signed word*)) (number) $400 (signed word) main::sw#0 ← (number) $1234 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (signed word) main::sw#2 ← phi( main/(signed word) main::sw#0 main::@1/(signed word) main::sw#1 ) @@ -55,19 +55,15 @@ SYMBOL TABLE SSA (signed word) main::sw#2 Adding number conversion cast (snumber) $1234 in (signed word) main::sw#0 ← (number) $1234 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (signed word*) main::screen#0 ← (signed word*)(number) $400 Inlining cast (signed word) main::sw#0 ← (snumber)(number) $1234 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (signed byte~) main::$0 ← (signed byte)(byte) main::i#2 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (signed word*) 1024 Simplifying constant integer cast $1234 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized signed number type (signed word) $1234 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$1 [10] if((byte) main::i#1!=rangelast(0,$a)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification diff --git a/src/test/ref/norom-charset.log b/src/test/ref/norom-charset.log index bee13d4ea..5301bad68 100644 --- a/src/test/ref/norom-charset.log +++ b/src/test/ref/norom-charset.log @@ -52,14 +52,14 @@ main::@return: scope:[main] from main::@2 gen_char3: scope:[gen_char3] from main::@1 (byte*) gen_char3::dst#6 ← phi( main::@1/(byte*) gen_char3::dst#0 ) (word) gen_char3::spec#6 ← phi( main::@1/(word) gen_char3::spec#0 ) - (byte) gen_char3::r#0 ← (number) 0 + (byte) gen_char3::r#0 ← (byte) 0 to:gen_char3::@1 gen_char3::@1: scope:[gen_char3] from gen_char3 gen_char3::@5 (byte) gen_char3::r#6 ← phi( gen_char3/(byte) gen_char3::r#0 gen_char3::@5/(byte) gen_char3::r#1 ) (byte*) gen_char3::dst#5 ← phi( gen_char3/(byte*) gen_char3::dst#6 gen_char3::@5/(byte*) gen_char3::dst#1 ) (word) gen_char3::spec#4 ← phi( gen_char3/(word) gen_char3::spec#6 gen_char3::@5/(word) gen_char3::spec#7 ) (byte) gen_char3::b#0 ← (number) 0 - (byte) gen_char3::c#0 ← (number) 0 + (byte) gen_char3::c#0 ← (byte) 0 to:gen_char3::@2 gen_char3::@2: scope:[gen_char3] from gen_char3::@1 gen_char3::@3 (byte) gen_char3::r#4 ← phi( gen_char3::@1/(byte) gen_char3::r#6 gen_char3::@3/(byte) gen_char3::r#3 ) @@ -220,9 +220,7 @@ Adding number conversion cast (unumber) main::$2 in (number~) main::$2 ← (word Adding number conversion cast (unumber) $400 in (number~) main::$4 ← (word~) main::$3 / (number) $400 Adding number conversion cast (unumber) main::$4 in (number~) main::$4 ← (word~) main::$3 / (unumber)(number) $400 Adding number conversion cast (unumber) main::$5 in (number~) main::$5 ← (unumber~) main::$2 | (unumber~) main::$4 -Adding number conversion cast (unumber) 0 in (byte) gen_char3::r#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) gen_char3::b#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) gen_char3::c#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (number~) gen_char3::$1 ← (byte~) gen_char3::$0 & (number) $80 Adding number conversion cast (unumber) gen_char3::$1 in (number~) gen_char3::$1 ← (byte~) gen_char3::$0 & (unumber)(number) $80 Adding number conversion cast (unumber) 0 in (bool~) gen_char3::$2 ← (unumber~) gen_char3::$1 != (number) 0 @@ -242,9 +240,7 @@ Inlining cast (byte) main::c#0 ← (unumber)(number) 0 Inlining cast (word~) main::$1 ← (word)(byte*) SCREEN#0 Inlining cast (word~) main::$3 ← (word)(byte*) CHARSET#0 Inlining cast (byte~) main::$6 ← (byte)(unumber~) main::$5 -Inlining cast (byte) gen_char3::r#0 ← (unumber)(number) 0 Inlining cast (byte) gen_char3::b#0 ← (unumber)(number) 0 -Inlining cast (byte) gen_char3::c#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53272 Simplifying constant pointer cast (byte*) 1024 @@ -260,8 +256,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $40 Simplifying constant integer cast $400 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 2 @@ -275,8 +269,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $40 Finalized unsigned number type (word) $400 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 diff --git a/src/test/ref/overlap-allocation-2.log b/src/test/ref/overlap-allocation-2.log index 7de775bf8..a5f61be97 100644 --- a/src/test/ref/overlap-allocation-2.log +++ b/src/test/ref/overlap-allocation-2.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA (byte*) SCREEN#0 ← ((byte*)) (number) $400 to:@3 main: scope:[main] from @3 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@5 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@5/(byte) main::i#1 ) @@ -23,7 +23,7 @@ main::@5: scope:[main] from main::@1 if((bool~) main::$1) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@5 - (byte) main::j#0 ← (number) $a + (byte) main::j#0 ← (byte) $a to:main::@3 main::@3: scope:[main] from main::@2 main::@6 (byte) main::j#2 ← phi( main::@2/(byte) main::j#0 main::@6/(byte) main::j#1 ) @@ -112,22 +112,14 @@ SYMBOL TABLE SSA (byte) plot::x#1 (byte) plot::x#2 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) $a in (byte) main::j#0 ← (number) $a Adding number conversion cast (unumber) $14 in (number~) line::$1 ← (byte) line::l#3 + (number) $14 Adding number conversion cast (unumber) line::$1 in (number~) line::$1 ← (byte) line::l#3 + (unumber)(number) $14 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::j#0 ← (unumber)(number) $a Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast $a Simplifying constant integer cast $14 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) $14 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) line::$1 ← (byte) line::l#3 + (byte) $14 diff --git a/src/test/ref/overlap-allocation.log b/src/test/ref/overlap-allocation.log index 81bad24a4..caf1ccc96 100644 --- a/src/test/ref/overlap-allocation.log +++ b/src/test/ref/overlap-allocation.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA (byte*) SCREEN#0 ← ((byte*)) (number) $400 to:@2 main: scope:[main] from @2 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@7 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@7/(byte) main::i#1 ) @@ -22,7 +22,7 @@ main::@7: scope:[main] from main::@1 if((bool~) main::$1) goto main::@1 to:main::@2 main::@2: scope:[main] from main::@7 - (byte) main::j#0 ← (number) 0 + (byte) main::j#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@8 (byte) main::j#2 ← phi( main::@2/(byte) main::j#0 main::@8/(byte) main::j#1 ) @@ -36,7 +36,7 @@ main::@8: scope:[main] from main::@3 if((bool~) main::$3) goto main::@3 to:main::@4 main::@4: scope:[main] from main::@8 - (byte) main::k#0 ← (number) 0 + (byte) main::k#0 ← (byte) 0 to:main::@5 main::@5: scope:[main] from main::@4 main::@9 (byte) main::k#2 ← phi( main::@4/(byte) main::k#0 main::@9/(byte) main::k#1 ) @@ -109,24 +109,10 @@ SYMBOL TABLE SSA (byte) plot::x#2 (byte) plot::x#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::k#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 -Inlining cast (byte) main::k#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte) main::j#2 = (byte) main::j#3 Alias (byte) main::k#2 = (byte) main::k#3 diff --git a/src/test/ref/plus-0.log b/src/test/ref/plus-0.log index 6c460a405..9c4e91277 100644 --- a/src/test/ref/plus-0.log +++ b/src/test/ref/plus-0.log @@ -24,13 +24,13 @@ main::@return: scope:[main] from main::@2 fill: scope:[fill] from main main::@1 (byte) fill::ch#4 ← phi( main/(byte) fill::ch#0 main::@1/(byte) fill::ch#1 ) (byte*) fill::screen#4 ← phi( main/(byte*) fill::screen#0 main::@1/(byte*) fill::screen#1 ) - (byte) fill::i#0 ← (number) 0 + (byte) fill::i#0 ← (byte) 0 to:fill::@1 fill::@1: scope:[fill] from fill fill::@3 (byte) fill::i#4 ← phi( fill/(byte) fill::i#0 fill::@3/(byte) fill::i#1 ) (byte) fill::ch#3 ← phi( fill/(byte) fill::ch#4 fill::@3/(byte) fill::ch#5 ) (byte*) fill::screen#3 ← phi( fill/(byte*) fill::screen#4 fill::@3/(byte*) fill::screen#5 ) - (byte) fill::j#0 ← (number) 0 + (byte) fill::j#0 ← (byte) 0 to:fill::@2 fill::@2: scope:[fill] from fill::@1 fill::@2 (byte) fill::i#2 ← phi( fill::@1/(byte) fill::i#4 fill::@2/(byte) fill::i#2 ) @@ -107,24 +107,16 @@ SYMBOL TABLE SSA (label) main::@2 (label) main::@return -Adding number conversion cast (unumber) 0 in (byte) fill::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) fill::j#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (number~) fill::$0 ← (byte) fill::j#2 * (number) $28 Adding number conversion cast (unumber) fill::$0 in (number~) fill::$0 ← (byte) fill::j#2 * (unumber)(number) $28 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*~) main::$0 ← (byte*)(number) $400 Inlining cast (byte*~) main::$2 ← (byte*)(number) $2000 -Inlining cast (byte) fill::i#0 ← (unumber)(number) 0 -Inlining cast (byte) fill::j#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant pointer cast (byte*) 8192 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) fill::$0 ← (byte) fill::j#2 * (byte) $28 diff --git a/src/test/ref/pointer-pointer-2.log b/src/test/ref/pointer-pointer-2.log index 19ca8902a..1edebd6ef 100644 --- a/src/test/ref/pointer-pointer-2.log +++ b/src/test/ref/pointer-pointer-2.log @@ -13,7 +13,7 @@ main: scope:[main] from @2 (byte) textid#16 ← phi( @2/(byte) textid#15 ) (byte*) main::screen#0 ← ((byte*)) (number) $400 (byte*) main::text#0 ← (byte*) 0 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@4 (byte) main::i#6 ← phi( main/(byte) main::i#0 main::@4/(byte) main::i#1 ) @@ -178,24 +178,20 @@ SYMBOL TABLE SSA (byte) textid#8 (byte) textid#9 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) textid#2 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) nexttext::$0 ← (byte) textid#8 & (number) 1 Adding number conversion cast (unumber) nexttext::$0 in (number~) nexttext::$0 ← (byte) textid#8 & (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) nexttext::$1 ← (unumber~) nexttext::$0 == (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte) textid#2 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/ptr-complex.log b/src/test/ref/ptr-complex.log index b51598423..23de521ad 100644 --- a/src/test/ref/ptr-complex.log +++ b/src/test/ref/ptr-complex.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::screen#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -27,7 +27,7 @@ main::@2: scope:[main] from main::@1 (byte*~) main::$3 ← (byte*) main::screen#0 + (number) $52 (byte*~) main::$4 ← (byte*) main::screen#0 + (number) $7a *((byte*~) main::$3) ← *((byte*~) main::$4) - (byte) main::j#0 ← (number) 0 + (byte) main::j#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@3 (byte) main::j#2 ← phi( main::@2/(byte) main::j#0 main::@3/(byte) main::j#1 ) @@ -100,43 +100,35 @@ SYMBOL TABLE SSA (byte*) main::screen (byte*) main::screen#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte*~) main::$14 ← (byte*) main::screen#0 + (number) $28 Adding number conversion cast (unumber) $51 in (byte*~) main::$1 ← (byte*) main::screen#0 + (number) $51 Adding number conversion cast (unumber) $79 in (byte*~) main::$2 ← (byte*) main::screen#0 + (number) $79 Adding number conversion cast (unumber) $52 in (byte*~) main::$3 ← (byte*) main::screen#0 + (number) $52 Adding number conversion cast (unumber) $7a in (byte*~) main::$4 ← (byte*) main::screen#0 + (number) $7a -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 Adding number conversion cast (unumber) $a0 in (byte*~) main::$17 ← (byte*) main::screen#0 + (number) $a0 Adding number conversion cast (unumber) $c8 in (byte*~) main::$19 ← (byte*) main::screen#0 + (number) $c8 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 Inlining cast (byte*~) main::$5 ← (byte*)(number) $d020 Inlining cast (byte*~) main::$9 ← (byte*)(number~) main::$8 Inlining cast (byte*) main::BGCOL#0 ← (byte*)(number) $d020 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $51 Simplifying constant integer cast $79 Simplifying constant integer cast $52 Simplifying constant integer cast $7a -Simplifying constant integer cast 0 Simplifying constant integer cast $a0 Simplifying constant integer cast $c8 Simplifying constant pointer cast (byte*) 53280 Simplifying constant pointer cast (byte*) 53280 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $51 Finalized unsigned number type (byte) $79 Finalized unsigned number type (byte) $52 Finalized unsigned number type (byte) $7a -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $a0 Finalized unsigned number type (byte) $c8 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/reserve-zp-global.log b/src/test/ref/reserve-zp-global.log index ca67acba2..e63ea9cd3 100644 --- a/src/test/ref/reserve-zp-global.log +++ b/src/test/ref/reserve-zp-global.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA to:@2 main: scope:[main] from @2 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@3/(byte) main::i#1 ) @@ -76,16 +76,10 @@ SYMBOL TABLE SSA (byte) sub1::return#3 (byte) sub1::return#4 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) sub1::return#0 = (byte) sub1::return#3 Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte) sub1::return#1 = (byte~) sub1::$0 (byte) sub1::return#4 (byte) sub1::return#2 diff --git a/src/test/ref/reserve-zp-procedure-1.log b/src/test/ref/reserve-zp-procedure-1.log index 0b9db5409..5ec95a047 100644 --- a/src/test/ref/reserve-zp-procedure-1.log +++ b/src/test/ref/reserve-zp-procedure-1.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA to:@2 main: scope:[main] from @2 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@3/(byte) main::i#1 ) @@ -76,16 +76,10 @@ SYMBOL TABLE SSA (byte) sub1::return#3 (byte) sub1::return#4 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) sub1::return#0 = (byte) sub1::return#3 Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte) sub1::return#1 = (byte~) sub1::$0 (byte) sub1::return#4 (byte) sub1::return#2 diff --git a/src/test/ref/reserve-zp-procedure-2.log b/src/test/ref/reserve-zp-procedure-2.log index 0767474a9..929738173 100644 --- a/src/test/ref/reserve-zp-procedure-2.log +++ b/src/test/ref/reserve-zp-procedure-2.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA to:@3 main: scope:[main] from @3 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@4 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@4/(byte) main::i#1 ) @@ -116,17 +116,13 @@ SYMBOL TABLE SSA (byte) sub2::return#3 (byte) sub2::return#4 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte*~) main::$1 ← (byte*) main::SCREEN#0 + (number) $28 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) sub1::return#0 = (byte) sub1::return#3 diff --git a/src/test/ref/reserve-zp-procedure-3.log b/src/test/ref/reserve-zp-procedure-3.log index 7b4cddb81..4cca1164a 100644 --- a/src/test/ref/reserve-zp-procedure-3.log +++ b/src/test/ref/reserve-zp-procedure-3.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA to:@3 main: scope:[main] from @3 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@3/(byte) main::i#1 ) @@ -77,16 +77,10 @@ SYMBOL TABLE SSA (byte) sub1::return#3 (byte) sub1::return#4 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) sub1::return#0 = (byte) sub1::return#3 Alias (byte) main::i#2 = (byte) main::i#3 Alias (byte) sub1::return#1 = (byte~) sub1::$0 (byte) sub1::return#4 (byte) sub1::return#2 diff --git a/src/test/ref/robozzle64-label-problem.log b/src/test/ref/robozzle64-label-problem.log index 0f878318c..633624c97 100644 --- a/src/test/ref/robozzle64-label-problem.log +++ b/src/test/ref/robozzle64-label-problem.log @@ -64,7 +64,7 @@ mul8u::@return: scope:[mul8u] from mul8u::@3 to:@return main: scope:[main] from @6 (word*) main::screen#0 ← ((word*)) (number) $400 - (byte) main::y#0 ← (number) 0 + (byte) main::y#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@4 (word*) main::screen#5 ← phi( main/(word*) main::screen#0 main::@4/(word*) main::screen#2 ) @@ -198,13 +198,11 @@ Adding number conversion cast (unumber) mul8u::$1 in (number~) mul8u::$1 ← (by Adding number conversion cast (unumber) 0 in (bool~) mul8u::$2 ← (unumber~) mul8u::$1 != (number) 0 Adding number conversion cast (unumber) 1 in (byte~) mul8u::$5 ← (byte) mul8u::a#5 >> (number) 1 Adding number conversion cast (unumber) 1 in (word~) mul8u::$6 ← (word) mul8u::mb#2 << (number) 1 -Adding number conversion cast (unumber) 0 in (byte) main::y#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte) mul8u::b#0 ← (number) $28 Adding number conversion cast (unumber) $28 in (byte) mul8u::b#1 ← (number) $28 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (word) mul8u::res#0 ← (unumber)(number) 0 Inlining cast (word*) main::screen#0 ← (word*)(number) $400 -Inlining cast (byte) main::y#0 ← (unumber)(number) 0 Inlining cast (byte) mul8u::b#0 ← (unumber)(number) $28 Inlining cast (byte) mul8u::b#1 ← (unumber)(number) $28 Successful SSA optimization Pass2InlineCast @@ -215,7 +213,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant pointer cast (word*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification @@ -225,7 +222,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/roll-sprite-msb.log b/src/test/ref/roll-sprite-msb.log index cd873fe95..a7c5189ad 100644 --- a/src/test/ref/roll-sprite-msb.log +++ b/src/test/ref/roll-sprite-msb.log @@ -60,7 +60,7 @@ CONTROL FLOW GRAPH SSA to:@6 main: scope:[main] from @6 (word) main::xpos#0 ← (number) $c8 - (byte) main::s#0 ← (number) 0 + (byte) main::s#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (word) main::xpos#2 ← phi( main/(word) main::xpos#0 main::@3/(word) main::xpos#1 ) @@ -164,7 +164,6 @@ SYMBOL TABLE SSA (byte) position_sprite::y#1 Adding number conversion cast (unumber) $c8 in (word) main::xpos#0 ← (number) $c8 -Adding number conversion cast (unumber) 0 in (byte) main::s#0 ← (number) 0 Adding number conversion cast (unumber) $32 in (byte) position_sprite::y#0 ← (number) $32 Adding number conversion cast (unumber) $a in (word) main::xpos#1 ← (word) main::xpos#3 + (number) $a Adding number conversion cast (unumber) 2 in (number~) position_sprite::$0 ← (byte) position_sprite::spriteno#1 * (number) 2 @@ -183,14 +182,12 @@ Inlining cast (byte*) SPRITES_XPOS#0 ← (byte*)(number) $d000 Inlining cast (byte*) SPRITES_YPOS#0 ← (byte*)(number) $d001 Inlining cast (byte*) SPRITES_XMSB#0 ← (byte*)(number) $d010 Inlining cast (word) main::xpos#0 ← (unumber)(number) $c8 -Inlining cast (byte) main::s#0 ← (unumber)(number) 0 Inlining cast (byte) position_sprite::y#0 ← (unumber)(number) $32 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53248 Simplifying constant pointer cast (byte*) 53249 Simplifying constant pointer cast (byte*) 53264 Simplifying constant integer cast $c8 -Simplifying constant integer cast 0 Simplifying constant integer cast $32 Simplifying constant integer cast $a Simplifying constant integer cast 2 @@ -201,7 +198,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast $ff Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $c8 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $32 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 2 diff --git a/src/test/ref/roll-variable.log b/src/test/ref/roll-variable.log index 8e6313ee5..6581c0efe 100644 --- a/src/test/ref/roll-variable.log +++ b/src/test/ref/roll-variable.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::screen#0 ← ((byte*)) (number) $400 - (byte) main::b#0 ← (number) 0 + (byte) main::b#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::b#2 ← phi( main/(byte) main::b#0 main::@1/(byte) main::b#1 ) @@ -44,18 +44,14 @@ SYMBOL TABLE SSA (byte*) main::screen (byte*) main::screen#0 -Adding number conversion cast (unumber) 0 in (byte) main::b#0 ← (number) 0 Adding number conversion cast (unumber) $55 in (number~) main::$0 ← (number) $55 << (byte) main::b#2 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (unumber)(number) $55 << (byte) main::b#2 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 -Inlining cast (byte) main::b#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $55 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $55 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$0 ← (byte) $55 << (byte) main::b#2 diff --git a/src/test/ref/sandbox-ternary-error.log b/src/test/ref/sandbox-ternary-error.log index 1b63a8374..2ffe5f7cb 100644 --- a/src/test/ref/sandbox-ternary-error.log +++ b/src/test/ref/sandbox-ternary-error.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::b#0 ← (number) 0 + (byte) main::b#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@4 (byte) main::b#2 ← phi( main/(byte) main::b#0 main::@4/(byte) main::b#1 ) @@ -93,20 +93,16 @@ SYMBOL TABLE SSA (byte) main::b#7 (byte) main::b#8 -Adding number conversion cast (unumber) 0 in (byte) main::b#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) main::$0 ← (byte) main::b#2 == (number) 0 Adding number conversion cast (unumber) 1 in (bool~) main::$1 ← (byte) main::b#3 == (number) 1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::b#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::b#2 = (byte) main::b#5 (byte) main::b#3 (byte) main::b#7 (byte) main::b#8 diff --git a/src/test/ref/sandbox.log b/src/test/ref/sandbox.log index 22771f0e6..5d37d7c58 100644 --- a/src/test/ref/sandbox.log +++ b/src/test/ref/sandbox.log @@ -60,7 +60,7 @@ divr16u: scope:[divr16u] from div16u (word) divr16u::dividend#4 ← phi( div16u/(word) divr16u::dividend#1 ) (word) divr16u::rem#8 ← phi( div16u/(word) divr16u::rem#3 ) (word) divr16u::quotient#0 ← (number) 0 - (byte) divr16u::i#0 ← (number) 0 + (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (byte) divr16u::i#5 ← phi( divr16u/(byte) divr16u::i#0 divr16u::@3/(byte) divr16u::i#1 ) @@ -2200,7 +2200,6 @@ SYMBOL TABLE SSA (byte*) zp2#0 Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) divr16u::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#4 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -2347,7 +2346,6 @@ Adding number conversion cast (unumber) $57 in (unumber~) myprintf::$21 ← (num Adding number conversion cast (unumber) $57 in (unumber~) myprintf::$28 ← (number) $57 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 -Inlining cast (byte) divr16u::i#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 Inlining cast (byte*) zp1#0 ← (byte*)(number) $61 Inlining cast (byte*) zp2#0 ← (byte*)(number) $62 @@ -2402,7 +2400,6 @@ Inlining cast (word~) main::$13 ← (word)*((byte*) TIMELO#0) Inlining cast (signed word) main::return#0 ← (snumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -2494,7 +2491,6 @@ Simplifying constant integer cast $a Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/scrollbig-clobber.log b/src/test/ref/scrollbig-clobber.log index d71373aac..ad5d0b54d 100644 --- a/src/test/ref/scrollbig-clobber.log +++ b/src/test/ref/scrollbig-clobber.log @@ -11,7 +11,7 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @2 (byte*) nxt#15 ← phi( @2/(byte*) nxt#14 ) (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@3/(byte) main::i#1 ) @@ -128,16 +128,10 @@ SYMBOL TABLE SSA (byte*) nxt#8 (byte*) nxt#9 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [21] (bool~) next_char::$1 ← (byte) next_char::c#0 != (byte) '@' from [20] (bool~) next_char::$0 ← (byte) next_char::c#0 == (byte) '@' Successful SSA optimization Pass2UnaryNotSimplification Alias (byte) next_char::return#0 = (byte) next_char::return#3 diff --git a/src/test/ref/semi-struct-1.log b/src/test/ref/semi-struct-1.log index b8d5a5f8e..5c9927d74 100644 --- a/src/test/ref/semi-struct-1.log +++ b/src/test/ref/semi-struct-1.log @@ -194,7 +194,7 @@ main::@return: scope:[main] from main::@2 init_points: scope:[init_points] from main (byte) init_points::pos#0 ← (number) $a (number~) init_points::$0 ← (byte) NUM_POINTS#0 - (number) 1 - (byte) init_points::i#0 ← (number) 0 + (byte) init_points::i#0 ← (byte) 0 to:init_points::@1 init_points::@1: scope:[init_points] from init_points init_points::@5 (byte) init_points::pos#12 ← phi( init_points/(byte) init_points::pos#0 init_points::@5/(byte) init_points::pos#2 ) @@ -289,7 +289,7 @@ print_points::@6: scope:[print_points] from print_points (byte*) print_line_cursor#7 ← (byte*) print_line_cursor#17 (byte*) print_char_cursor#14 ← (byte*) print_char_cursor#33 (number~) print_points::$1 ← (byte) NUM_POINTS#0 - (number) 1 - (byte) print_points::i#0 ← (number) 0 + (byte) print_points::i#0 ← (byte) 0 to:print_points::@1 print_points::@1: scope:[print_points] from print_points::@10 print_points::@6 (byte*) print_line_cursor#40 ← phi( print_points::@10/(byte*) print_line_cursor#8 print_points::@6/(byte*) print_line_cursor#7 ) @@ -788,14 +788,12 @@ Adding number conversion cast (unumber) 4 in (byte) NUM_POINTS#0 ← (number) 4 Adding number conversion cast (unumber) $a in (byte) init_points::pos#0 ← (number) $a Adding number conversion cast (unumber) 1 in (number~) init_points::$0 ← (byte) NUM_POINTS#0 - (number) 1 Adding number conversion cast (unumber) init_points::$0 in (number~) init_points::$0 ← (byte) NUM_POINTS#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) init_points::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte*~) init_points::pointXpos1_$0#0 ← (byte*) init_points::pointXpos1_point#1 + (number) 0 Adding number conversion cast (unumber) $a in (byte) init_points::pos#1 ← (byte) init_points::pos#3 + (number) $a Adding number conversion cast (unumber) 1 in (byte*~) init_points::pointYpos1_$0#0 ← (byte*) init_points::pointYpos1_point#1 + (number) 1 Adding number conversion cast (unumber) $a in (byte) init_points::pos#2 ← (byte) init_points::pos#4 + (number) $a Adding number conversion cast (unumber) 1 in (number~) print_points::$1 ← (byte) NUM_POINTS#0 - (number) 1 Adding number conversion cast (unumber) print_points::$1 in (number~) print_points::$1 ← (byte) NUM_POINTS#0 - (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) print_points::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte*~) print_points::pointXpos1_$0#0 ← (byte*) print_points::pointXpos1_point#1 + (number) 0 Adding number conversion cast (unumber) 1 in (byte*~) print_points::pointYpos1_$0#0 ← (byte*) print_points::pointYpos1_point#1 + (number) 1 Successful SSA optimization PassNAddNumberTypeConversions @@ -803,10 +801,8 @@ Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Inlining cast (byte) SIZEOF_POINT#0 ← (unumber)(number) 2 Inlining cast (byte) NUM_POINTS#0 ← (unumber)(number) 4 Inlining cast (byte) init_points::pos#0 ← (unumber)(number) $a -Inlining cast (byte) init_points::i#0 ← (unumber)(number) 0 Inlining cast (byte*~) init_points::pointXpos1_$1#0 ← (byte*)(byte*~) init_points::pointXpos1_$0#0 Inlining cast (byte*~) init_points::pointYpos1_$1#0 ← (byte*)(byte*~) init_points::pointYpos1_$0#0 -Inlining cast (byte) print_points::i#0 ← (unumber)(number) 0 Inlining cast (byte*~) print_points::pointXpos1_$1#0 ← (byte*)(byte*~) print_points::pointXpos1_$0#0 Inlining cast (byte*~) print_points::pointYpos1_$1#0 ← (byte*)(byte*~) print_points::pointYpos1_$0#0 Successful SSA optimization Pass2InlineCast @@ -820,7 +816,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $a Simplifying constant integer cast 1 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast (byte*~) init_points::pointXpos1_$0#0 Simplifying constant integer cast $a Simplifying constant integer cast 1 @@ -828,7 +823,6 @@ Simplifying constant integer cast (byte*~) init_points::pointYpos1_$0#0 Simplifying constant integer cast $a Simplifying constant integer cast 1 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast (byte*~) print_points::pointXpos1_$0#0 Simplifying constant integer cast 1 Simplifying constant integer cast (byte*~) print_points::pointYpos1_$0#0 @@ -842,13 +836,11 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $a Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f diff --git a/src/test/ref/signed-indexed-subtract.log b/src/test/ref/signed-indexed-subtract.log index d81dcdb2b..09183e795 100644 --- a/src/test/ref/signed-indexed-subtract.log +++ b/src/test/ref/signed-indexed-subtract.log @@ -187,7 +187,7 @@ main: scope:[main] from @21 (byte*) print_char_cursor#55 ← phi( @21/(byte*) print_char_cursor#47 ) (byte*) print_line_cursor#28 ← phi( @21/(byte*) print_line_cursor#20 ) (byte*) print_screen#9 ← phi( @21/(byte*) print_screen#10 ) - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@7 (byte*) print_char_cursor#54 ← phi( main/(byte*) print_char_cursor#55 main::@7/(byte*) print_char_cursor#49 ) @@ -236,7 +236,7 @@ main::@8: scope:[main] from main::@2 (byte*) print_line_cursor#13 ← phi( main::@2/(byte*) print_line_cursor#4 ) (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#13 (byte*) print_char_cursor#16 ← (byte*) print_char_cursor#35 - (byte) main::j#0 ← (number) 0 + (byte) main::j#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@10 main::@8 (byte*) print_line_cursor#22 ← phi( main::@10/(byte*) print_line_cursor#6 main::@8/(byte*) print_line_cursor#5 ) @@ -515,21 +515,17 @@ Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) p Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (byte*~) print_cls::$0 ← (byte*) print_screen#2 + (number) $3e8 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (byte) sub::s#0 ← (number) $80 Adding number conversion cast (unumber) $40 in (byte) sub::s#1 ← (number) $40 Adding number conversion cast (unumber) $40 in (byte) sub::s#2 ← (number) $40 -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (signed word) to elements in (signed word[]) words#0 ← { (signed word)(number) -$6000, (signed word)(number) -$600, (signed word)(number) -$60, (signed word)(number) -6, (signed word)(number) 0, (signed word)(number) 6, (signed word)(number) $60, (signed word)(number) $600, (signed word)(number) $6000 } Successful SSA optimization PassNAddArrayNumberTypeConversions Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Inlining cast (word~) print_sword::$2 ← (word)(signed word) print_sword::w#3 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte) sub::s#0 ← (unumber)(number) $80 Inlining cast (byte) sub::s#1 ← (unumber)(number) $40 Inlining cast (byte) sub::s#2 ← (unumber)(number) $40 -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $28 @@ -546,22 +542,18 @@ Simplifying constant integer cast 6 Simplifying constant integer cast $60 Simplifying constant integer cast $600 Simplifying constant integer cast $6000 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast $40 Simplifying constant integer cast $40 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $28 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) $40 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f Inversing boolean not [17] (bool~) print_sword::$1 ← (signed word) print_sword::w#2 >= (signed byte) 0 from [16] (bool~) print_sword::$0 ← (signed word) print_sword::w#2 < (signed byte) 0 diff --git a/src/test/ref/signed-word-minus-byte-2.log b/src/test/ref/signed-word-minus-byte-2.log index 822dc15ae..a85358f76 100644 --- a/src/test/ref/signed-word-minus-byte-2.log +++ b/src/test/ref/signed-word-minus-byte-2.log @@ -9,7 +9,7 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @1 (signed word) main::w1#0 ← (number) $4d2 (signed word*) main::screen#0 ← ((signed word*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -56,21 +56,17 @@ SYMBOL TABLE SSA (signed word) main::w1#2 Adding number conversion cast (snumber) $4d2 in (signed word) main::w1#0 ← (number) $4d2 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (snumber) $29 in (number~) main::$0 ← (signed word) main::w1#2 - (number) $29 Adding number conversion cast (snumber) main::$0 in (number~) main::$0 ← (signed word) main::w1#2 - (snumber)(number) $29 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (signed word) main::w1#0 ← (snumber)(number) $4d2 Inlining cast (signed word*) main::screen#0 ← (signed word*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast $4d2 Simplifying constant pointer cast (signed word*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $29 Successful SSA optimization PassNCastSimplification Finalized signed number type (signed word) $4d2 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) $29 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to signed word in (snumber~) main::$0 ← (signed word) main::w1#2 - (signed byte) $29 diff --git a/src/test/ref/signed-words.log b/src/test/ref/signed-words.log index 6af11bf16..65dd7ff7d 100644 --- a/src/test/ref/signed-words.log +++ b/src/test/ref/signed-words.log @@ -150,7 +150,7 @@ init::@1: scope:[init] from init init::@1 if((bool~) init::$3) goto init::@1 to:init::@2 init::@2: scope:[init] from init::@1 - (byte) init::i#0 ← (number) 0 + (byte) init::i#0 ← (byte) 0 to:init::@3 init::@3: scope:[init] from init::@2 init::@3 (byte) init::i#2 ← phi( init::@2/(byte) init::i#0 init::@3/(byte) init::i#1 ) @@ -469,7 +469,6 @@ Adding number conversion cast (unumber) 0 in *((byte*) SPRITES_COLS#0 + (number) Adding number conversion cast (unumber) $40 in (byte*~) init::$0 ← (byte*) SPRITE#0 / (number) $40 Adding number conversion cast (unumber) 0 in *((byte*) SPRITES_PTR#0 + (number) 0) ← (byte~) init::$1 Adding number conversion cast (unumber) $3e8 in (byte*~) init::$2 ← (byte*) SCREEN#0 + (number) $3e8 -Adding number conversion cast (unumber) 0 in (byte) init::i#0 ← (number) 0 Adding number conversion cast (unumber) $ff in *((byte*) SPRITE#0 + (byte) init::i#2) ← (number) $ff Adding number conversion cast (snumber) 0 in (signed word) xpos#2 ← (number) 0 Adding number conversion cast (snumber) 0 in (signed word) ypos#2 ← (number) 0 @@ -509,7 +508,6 @@ Inlining cast *((byte*) SPRITES_EXPAND_Y#0) ← (unumber)(number) 0 Inlining cast *((byte*) SPRITES_XPOS#0 + (unumber)(number) 0) ← (unumber)(number) $64 Inlining cast *((byte*) SPRITES_YPOS#0 + (unumber)(number) 0) ← (unumber)(number) $64 Inlining cast (byte~) init::$1 ← (byte)(byte*~) init::$0 -Inlining cast (byte) init::i#0 ← (unumber)(number) 0 Inlining cast *((byte*) SPRITE#0 + (byte) init::i#2) ← (unumber)(number) $ff Inlining cast (signed word) xpos#2 ← (snumber)(number) 0 Inlining cast (signed word) ypos#2 ← (snumber)(number) 0 @@ -546,7 +544,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast $40 Simplifying constant integer cast 0 Simplifying constant integer cast $3e8 -Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -580,7 +577,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $40 Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $3e8 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 diff --git a/src/test/ref/sinus-basic.log b/src/test/ref/sinus-basic.log index dedc88986..476f4b611 100644 --- a/src/test/ref/sinus-basic.log +++ b/src/test/ref/sinus-basic.log @@ -260,7 +260,7 @@ main::@4: scope:[main] from main::@3 main::@5: scope:[main] from main::@4 (byte*) print_line_cursor#27 ← phi( main::@4/(byte*) print_line_cursor#28 ) (byte*) print_char_cursor#45 ← phi( main::@4/(byte*) print_char_cursor#46 ) - (byte) main::i#0 ← (number) 1 + (byte) main::i#0 ← (byte) 1 to:main::@1 main::@1: scope:[main] from main::@16 main::@5 (byte*) print_line_cursor#26 ← phi( main::@16/(byte*) print_line_cursor#3 main::@5/(byte*) print_line_cursor#27 ) @@ -611,7 +611,6 @@ Adding number conversion cast (unumber) 4 in (byte~) print_byte::$0 ← (byte) p Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (number) $f Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f Adding number conversion cast (unumber) $4fb in (word) setFAC::w#0 ← (number) $4fb -Adding number conversion cast (unumber) 1 in (byte) main::i#0 ← (number) 1 Adding number conversion cast (unumber) $19 in (word) setFAC::w#2 ← (number) $19 Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (byte) to elements in (byte[]) main::f_i#0 ← { (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0, (byte)(number) 0 } @@ -623,7 +622,6 @@ Inlining cast (byte*) memHi#0 ← (byte*)(number) $ff Inlining cast (byte*~) setFAC::$0 ← (byte*)(word) setFAC::w#3 Inlining cast (byte*) main::f_2pi#0 ← (byte*)(number) $e2e5 Inlining cast (word) setFAC::w#0 ← (unumber)(number) $4fb -Inlining cast (byte) main::i#0 ← (unumber)(number) 1 Inlining cast (word~) main::$3 ← (word)(byte) main::i#2 Inlining cast (word) setFAC::w#2 ← (unumber)(number) $19 Successful SSA optimization Pass2InlineCast @@ -647,14 +645,12 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 58085 Simplifying constant integer cast $4fb -Simplifying constant integer cast 1 Simplifying constant integer cast $19 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $4fb -Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $19 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) print_byte::$2 ← (byte) print_byte::b#3 & (byte) $f diff --git a/src/test/ref/sinusgen16.log b/src/test/ref/sinusgen16.log index cea593c5c..4bbc58d8f 100644 --- a/src/test/ref/sinusgen16.log +++ b/src/test/ref/sinusgen16.log @@ -66,7 +66,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@2 (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@2/(word) divr16u::dividend#2 ) (word) divr16u::rem#10 ← phi( div32u16u/(word) divr16u::rem#3 div32u16u::@2/(word) divr16u::rem#4 ) (word) divr16u::quotient#0 ← (number) 0 - (byte) divr16u::i#0 ← (number) 0 + (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (byte) divr16u::i#5 ← phi( divr16u/(byte) divr16u::i#0 divr16u::@3/(byte) divr16u::i#1 ) @@ -1267,7 +1267,6 @@ Fixing inline constructor with div32u16u::$4 ← (word)div32u16u::quotient_hi#1 Successful SSA optimization Pass2FixInlineConstructorsNew Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) divr16u::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1310,7 +1309,6 @@ Adding number conversion cast (snumber) 0 in (bool~) main::$2 ← (signed word) Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (word) rem16u#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 -Inlining cast (byte) divr16u::i#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 Inlining cast (dword) mul16u::res#0 ← (unumber)(number) 0 Inlining cast (dword) PI2_u4f28#0 ← (unumber)(number) $6487ed51 @@ -1334,7 +1332,6 @@ Inlining cast (word) main::wavelength#0 ← (unumber)(number) $78 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -1375,7 +1372,6 @@ Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/sinusgen16b.log b/src/test/ref/sinusgen16b.log index fb18596af..e609772d6 100644 --- a/src/test/ref/sinusgen16b.log +++ b/src/test/ref/sinusgen16b.log @@ -71,7 +71,7 @@ divr16u: scope:[divr16u] from div32u16u div32u16u::@2 (word) divr16u::dividend#5 ← phi( div32u16u/(word) divr16u::dividend#1 div32u16u::@2/(word) divr16u::dividend#2 ) (word) divr16u::rem#10 ← phi( div32u16u/(word) divr16u::rem#3 div32u16u::@2/(word) divr16u::rem#4 ) (word) divr16u::quotient#0 ← (number) 0 - (byte) divr16u::i#0 ← (number) 0 + (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (byte) divr16u::i#5 ← phi( divr16u/(byte) divr16u::i#0 divr16u::@3/(byte) divr16u::i#1 ) @@ -806,7 +806,7 @@ main::@7: scope:[main] from main::@6 (byte*) print_char_cursor#16 ← (byte*) print_char_cursor#36 (signed word*) main::st1#0 ← (signed word[$78]) main::sintab1#0 (signed word*) main::st2#0 ← (signed word[$78]) main::sintab2#0 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@7 main::@9 (byte*) print_line_cursor#18 ← phi( main::@7/(byte*) print_line_cursor#3 main::@9/(byte*) print_line_cursor#11 ) @@ -1666,7 +1666,6 @@ Fixing inline constructor with div32u16u::$4 ← (word)div32u16u::quotient_hi#1 Successful SSA optimization Pass2FixInlineConstructorsNew Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) divr16u::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1722,12 +1721,10 @@ Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (byte*~) print_cls::$0 ← (byte*) print_screen#2 + (number) $3e8 Adding number conversion cast (unumber) $78 in (word) main::wavelength#0 ← (number) $78 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) main::$4 ← (signed word) main::sw#0 >= (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (word) rem16u#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 -Inlining cast (byte) divr16u::i#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 Inlining cast (dword) mul16u::res#0 ← (unumber)(number) 0 Inlining cast (dword) PI2_u4f28#0 ← (unumber)(number) $6487ed51 @@ -1762,11 +1759,9 @@ Inlining cast (signed word~) sin16sb::$19 ← (signed word)(word) sin16sb::usinx Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Inlining cast (word~) print_sword::$2 ← (word)(signed word) print_sword::w#3 Inlining cast (word) main::wavelength#0 ← (unumber)(number) $78 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -1818,11 +1813,9 @@ Simplifying constant integer cast $f Simplifying constant integer cast $3e8 Simplifying constant integer cast $78 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -1870,7 +1863,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) $78 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 diff --git a/src/test/ref/sinusgen8.log b/src/test/ref/sinusgen8.log index 38116dc20..319ed6517 100644 --- a/src/test/ref/sinusgen8.log +++ b/src/test/ref/sinusgen8.log @@ -63,7 +63,7 @@ divr16u: scope:[divr16u] from div16u (word) divr16u::dividend#4 ← phi( div16u/(word) divr16u::dividend#1 ) (word) divr16u::rem#8 ← phi( div16u/(word) divr16u::rem#3 ) (word) divr16u::quotient#0 ← (number) 0 - (byte) divr16u::i#0 ← (number) 0 + (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (byte) divr16u::i#5 ← phi( divr16u/(byte) divr16u::i#0 divr16u::@3/(byte) divr16u::i#1 ) @@ -565,7 +565,7 @@ main::@6: scope:[main] from main::@5 (byte*) print_line_cursor#7 ← phi( main::@5/(byte*) print_line_cursor#2 ) (byte*) print_line_cursor#3 ← (byte*) print_line_cursor#7 (byte*) print_char_cursor#14 ← (byte*) print_char_cursor#32 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@6 main::@8 (byte*) print_line_cursor#17 ← phi( main::@6/(byte*) print_line_cursor#3 main::@8/(byte*) print_line_cursor#11 ) @@ -1150,7 +1150,6 @@ SYMBOL TABLE SSA (word) sin8s_gen::x#3 Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) divr16u::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#4 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1190,13 +1189,11 @@ Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#2 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (byte*~) print_cls::$0 ← (byte*) print_screen#2 + (number) $3e8 Adding number conversion cast (unumber) $c0 in (word) main::wavelength#0 ← (number) $c0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (snumber) 0 in (bool~) main::$4 ← (signed byte) main::sb#0 >= (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (byte) to elements in (byte[]) main::sintabref#0 ← { (byte)(number) 0, (byte)(number) 4, (byte)(number) 8, (byte)(number) $c, (byte)(number) $11, (byte)(number) $15, (byte)(number) $19, (byte)(number) $1d, (byte)(number) $21, (byte)(number) $25, (byte)(number) $29, (byte)(number) $2d, (byte)(number) $31, (byte)(number) $35, (byte)(number) $38, (byte)(number) $3c, (byte)(number) $40, (byte)(number) $43, (byte)(number) $47, (byte)(number) $4a, (byte)(number) $4e, (byte)(number) $51, (byte)(number) $54, (byte)(number) $57, (byte)(number) $5a, (byte)(number) $5d, (byte)(number) $60, (byte)(number) $63, (byte)(number) $65, (byte)(number) $68, (byte)(number) $6a, (byte)(number) $6c, (byte)(number) $6e, (byte)(number) $70, (byte)(number) $72, (byte)(number) $74, (byte)(number) $76, (byte)(number) $77, (byte)(number) $79, (byte)(number) $7a, (byte)(number) $7b, (byte)(number) $7c, (byte)(number) $7d, (byte)(number) $7e, (byte)(number) $7e, (byte)(number) $7f, (byte)(number) $7f, (byte)(number) $7f, (byte)(number) $80, (byte)(number) $7f, (byte)(number) $7f, (byte)(number) $7f, (byte)(number) $7e, (byte)(number) $7e, (byte)(number) $7d, (byte)(number) $7c, (byte)(number) $7b, (byte)(number) $7a, (byte)(number) $79, (byte)(number) $77, (byte)(number) $76, (byte)(number) $74, (byte)(number) $72, (byte)(number) $70, (byte)(number) $6e, (byte)(number) $6c, (byte)(number) $6a, (byte)(number) $68, (byte)(number) $65, (byte)(number) $63, (byte)(number) $60, (byte)(number) $5d, (byte)(number) $5a, (byte)(number) $57, (byte)(number) $54, (byte)(number) $51, (byte)(number) $4e, (byte)(number) $4a, (byte)(number) $47, (byte)(number) $43, (byte)(number) $40, (byte)(number) $3c, (byte)(number) $38, (byte)(number) $35, (byte)(number) $31, (byte)(number) $2d, (byte)(number) $29, (byte)(number) $25, (byte)(number) $21, (byte)(number) $1d, (byte)(number) $19, (byte)(number) $15, (byte)(number) $11, (byte)(number) $c, (byte)(number) 8, (byte)(number) 4, (byte)(number) 0, (byte)(number) $fc, (byte)(number) $f8, (byte)(number) $f4, (byte)(number) $ef, (byte)(number) $eb, (byte)(number) $e7, (byte)(number) $e3, (byte)(number) $df, (byte)(number) $db, (byte)(number) $d7, (byte)(number) $d3, (byte)(number) $cf, (byte)(number) $cb, (byte)(number) $c8, (byte)(number) $c4, (byte)(number) $c0, (byte)(number) $bd, (byte)(number) $b9, (byte)(number) $b6, (byte)(number) $b2, (byte)(number) $af, (byte)(number) $ac, (byte)(number) $a9, (byte)(number) $a6, (byte)(number) $a3, (byte)(number) $a0, (byte)(number) $9d, (byte)(number) $9b, (byte)(number) $98, (byte)(number) $96, (byte)(number) $94, (byte)(number) $92, (byte)(number) $90, (byte)(number) $8e, (byte)(number) $8c, (byte)(number) $8a, (byte)(number) $89, (byte)(number) $87, (byte)(number) $86, (byte)(number) $85, (byte)(number) $84, (byte)(number) $83, (byte)(number) $82, (byte)(number) $82, (byte)(number) $81, (byte)(number) $81, (byte)(number) $81, (byte)(number) $81, (byte)(number) $81, (byte)(number) $81, (byte)(number) $81, (byte)(number) $82, (byte)(number) $82, (byte)(number) $83, (byte)(number) $84, (byte)(number) $85, (byte)(number) $86, (byte)(number) $87, (byte)(number) $89, (byte)(number) $8a, (byte)(number) $8c, (byte)(number) $8e, (byte)(number) $90, (byte)(number) $92, (byte)(number) $94, (byte)(number) $96, (byte)(number) $98, (byte)(number) $9b, (byte)(number) $9d, (byte)(number) $a0, (byte)(number) $a3, (byte)(number) $a6, (byte)(number) $a9, (byte)(number) $ac, (byte)(number) $af, (byte)(number) $b2, (byte)(number) $b6, (byte)(number) $b9, (byte)(number) $bd, (byte)(number) $c0, (byte)(number) $c4, (byte)(number) $c8, (byte)(number) $cb, (byte)(number) $cf, (byte)(number) $d3, (byte)(number) $d7, (byte)(number) $db, (byte)(number) $df, (byte)(number) $e3, (byte)(number) $e7, (byte)(number) $eb, (byte)(number) $ef, (byte)(number) $f4, (byte)(number) $f8, (byte)(number) $fc } Successful SSA optimization PassNAddArrayNumberTypeConversions Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 -Inlining cast (byte) divr16u::i#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 Inlining cast (word) mul8u::res#0 ← (unumber)(number) 0 Inlining cast (word) PI2_u4f12#0 ← (unumber)(number) $6488 @@ -1217,11 +1214,9 @@ Inlining cast (signed byte~) sin8s::$21 ← (signed byte)(byte) sin8s::usinx#6 Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Inlining cast (byte~) print_sbyte::$1 ← (byte)(signed byte) print_sbyte::b#4 Inlining cast (word) main::wavelength#0 ← (unumber)(number) $c0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (signed byte~) main::$2 ← (signed byte)*((byte[]) main::sintabref#0 + (byte) main::i#2) Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -1451,10 +1446,8 @@ Simplifying constant integer cast $f4 Simplifying constant integer cast $f8 Simplifying constant integer cast $fc Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -1490,7 +1483,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) $c0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 diff --git a/src/test/ref/sinusgen8b.log b/src/test/ref/sinusgen8b.log index bfc38f2d8..db46c27e5 100644 --- a/src/test/ref/sinusgen8b.log +++ b/src/test/ref/sinusgen8b.log @@ -74,7 +74,7 @@ divr16u: scope:[divr16u] from div16u div32u16u div32u16u::@2 (word) divr16u::dividend#6 ← phi( div16u/(word) divr16u::dividend#1 div32u16u/(word) divr16u::dividend#2 div32u16u::@2/(word) divr16u::dividend#3 ) (word) divr16u::rem#11 ← phi( div16u/(word) divr16u::rem#3 div32u16u/(word) divr16u::rem#4 div32u16u::@2/(word) divr16u::rem#5 ) (word) divr16u::quotient#0 ← (number) 0 - (byte) divr16u::i#0 ← (number) 0 + (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (byte) divr16u::i#5 ← phi( divr16u/(byte) divr16u::i#0 divr16u::@3/(byte) divr16u::i#1 ) @@ -899,7 +899,7 @@ main::@5: scope:[main] from main::@4 (byte*) print_line_cursor#7 ← phi( main::@4/(byte*) print_line_cursor#2 ) (byte*) print_line_cursor#3 ← (byte*) print_line_cursor#7 (byte*) print_char_cursor#14 ← (byte*) print_char_cursor#31 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@5 main::@7 (byte*) print_line_cursor#17 ← phi( main::@5/(byte*) print_line_cursor#3 main::@7/(byte*) print_line_cursor#11 ) @@ -1779,7 +1779,6 @@ Fixing inline constructor with div32u16u::$4 ← (word)div32u16u::quotient_hi#1 Successful SSA optimization Pass2FixInlineConstructorsNew Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) divr16u::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#6 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1843,11 +1842,9 @@ Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#2 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (byte*~) print_cls::$0 ← (byte*) print_screen#2 + (number) $3e8 Adding number conversion cast (unumber) $c0 in (word) main::wavelength#0 ← (number) $c0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (word) rem16u#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 -Inlining cast (byte) divr16u::i#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#4 ← (unumber)(number) 0 Inlining cast (word) mul8u::res#0 ← (unumber)(number) 0 @@ -1885,13 +1882,11 @@ Inlining cast (signed byte~) sin8s::$21 ← (signed byte)(byte) sin8s::usinx#6 Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Inlining cast (byte~) print_sbyte::$1 ← (byte)(signed byte) print_sbyte::b#4 Inlining cast (word) main::wavelength#0 ← (unumber)(number) $c0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (word~) main::$3 ← (word)(byte) main::i#2 Inlining cast (signed byte~) main::$6 ← (signed byte)(byte~) main::$5 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -1952,11 +1947,9 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 Simplifying constant integer cast $c0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -2014,7 +2007,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) $c0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) divr16u::$2 ← (byte~) divr16u::$1 & (byte) $80 Inferred type updated to word in (unumber~) divr16u::$5 ← (word) divr16u::rem#8 | (byte) 1 diff --git a/src/test/ref/sinusgenscale8.log b/src/test/ref/sinusgenscale8.log index 9bb9a3d03..d6be1743a 100644 --- a/src/test/ref/sinusgenscale8.log +++ b/src/test/ref/sinusgenscale8.log @@ -64,7 +64,7 @@ divr16u: scope:[divr16u] from div16u (word) divr16u::dividend#4 ← phi( div16u/(word) divr16u::dividend#1 ) (word) divr16u::rem#8 ← phi( div16u/(word) divr16u::rem#3 ) (word) divr16u::quotient#0 ← (number) 0 - (byte) divr16u::i#0 ← (number) 0 + (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (byte) divr16u::i#5 ← phi( divr16u/(byte) divr16u::i#0 divr16u::@3/(byte) divr16u::i#1 ) @@ -1923,7 +1923,6 @@ SYMBOL TABLE SSA (word) sin8u_table::x#9 Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) divr16u::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#4 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -1976,7 +1975,6 @@ Adding number conversion cast (unumber) 1 in (number~) sin8u_table::$19 ← (byt Adding number conversion cast (unumber) sin8u_table::$19 in (number~) sin8u_table::$19 ← (byte) sin8u_table::amplitude#2 + (unumber)(number) 1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 -Inlining cast (byte) divr16u::i#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 Inlining cast (word) mul8u::res#0 ← (unumber)(number) 0 Inlining cast (byte~) mul8su::$0 ← (byte)(signed byte) mul8su::a#1 @@ -2008,7 +2006,6 @@ Inlining cast (word) sin8u_table::x#0 ← (unumber)(number) 0 Inlining cast (word) sin8u_table::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -2057,7 +2054,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/statement-sequence-1.log b/src/test/ref/statement-sequence-1.log index 97003cf09..e34ad5fc1 100644 --- a/src/test/ref/statement-sequence-1.log +++ b/src/test/ref/statement-sequence-1.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -73,7 +73,6 @@ SYMBOL TABLE SSA (byte) main::i#3 (byte) main::i#4 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 5 in (number~) main::$0 ← (byte) main::i#2 + (number) 5 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::i#2 + (unumber)(number) 5 Adding number conversion cast (unumber) 1 in (number~) main::$1 ← (byte) main::i#2 & (number) 1 @@ -82,16 +81,13 @@ Adding number conversion cast (unumber) 0 in (bool~) main::$2 ← (unumber~) mai Adding number conversion cast (unumber) 5 in (bool~) main::$3 ← (byte) main::i#2 > (number) 5 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 5 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 5 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/string-encoding-literals.log b/src/test/ref/string-encoding-literals.log index e44e7e50c..6231dfc6a 100644 --- a/src/test/ref/string-encoding-literals.log +++ b/src/test/ref/string-encoding-literals.log @@ -14,7 +14,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -104,7 +104,6 @@ SYMBOL TABLE SSA (byte[]) standard (byte[]) standard#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) main::$0 in (byte*~) main::$1 ← (byte*) main::SCREEN#0 + (number~) main::$0 Adding number conversion cast (unumber) main::$2 in (byte*~) main::$3 ← (byte*) main::SCREEN#0 + (number~) main::$2 Adding number conversion cast (unumber) main::$4 in (byte*~) main::$5 ← (byte*) main::SCREEN#0 + (number~) main::$4 @@ -114,7 +113,6 @@ Adding number conversion cast (unumber) main::$10 in (byte*~) main::$11 ← (byt Adding number conversion cast (unumber) main::$12 in (byte*~) main::$13 ← (byte*) main::SCREEN#0 + (number~) main::$12 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (unumber~) main::$15 ← (unumber)(number~) main::$0 Inlining cast (unumber~) main::$16 ← (unumber)(number~) main::$2 Inlining cast (unumber~) main::$17 ← (unumber)(number~) main::$4 @@ -124,10 +122,7 @@ Inlining cast (unumber~) main::$20 ← (unumber)(number~) main::$10 Inlining cast (unumber~) main::$21 ← (unumber)(number~) main::$12 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$14 [40] if((byte) main::i#1!=rangelast(0,5)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant right-side identified [10] (number~) main::$0 ← (number) $28 * (number) 0 diff --git a/src/test/ref/string-encoding-pragma.log b/src/test/ref/string-encoding-pragma.log new file mode 100644 index 000000000..18c2e880c --- /dev/null +++ b/src/test/ref/string-encoding-pragma.log @@ -0,0 +1,600 @@ +Adding pointer type conversion cast (byte*) main::SCREEN in (byte*) main::SCREEN ← (number) $400 +Identified constant variable (byte*) main::SCREEN +Culled Empty Block (label) main::@2 + +CONTROL FLOW GRAPH SSA +@begin: scope:[] from + (byte[]) screencode_mixed1#0 ← (const string) $0 + (byte[]) petscii_mixed1#0 ← (const string) $1 + (byte[]) petscii_mixed2#0 ← (const string) $2 + (byte[]) screencode_mixed2#0 ← (const string) $3 + (byte[]) screencode_upper#0 ← (const string) $4 + (byte[]) screencode_mixed3#0 ← (const string) $5 + to:@1 +main: scope:[main] from @1 + (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 + (byte) main::i#0 ← (byte) 0 + to:main::@1 +main::@1: scope:[main] from main main::@1 + (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) + (number~) main::$0 ← (number) $28 * (number) 2 + (byte*~) main::$1 ← (byte*) main::SCREEN#0 + (number~) main::$0 + *((byte*~) main::$1 + (byte) main::i#2) ← *((byte[]) screencode_mixed1#0 + (byte) main::i#2) + (number~) main::$2 ← (number) $28 * (number) 0 + (byte*~) main::$3 ← (byte*) main::SCREEN#0 + (number~) main::$2 + *((byte*~) main::$3 + (byte) main::i#2) ← *((byte[]) petscii_mixed1#0 + (byte) main::i#2) + (number~) main::$4 ← (number) $28 * (number) 1 + (byte*~) main::$5 ← (byte*) main::SCREEN#0 + (number~) main::$4 + *((byte*~) main::$5 + (byte) main::i#2) ← *((byte[]) petscii_mixed2#0 + (byte) main::i#2) + (number~) main::$6 ← (number) $28 * (number) 2 + (byte*~) main::$7 ← (byte*) main::SCREEN#0 + (number~) main::$6 + *((byte*~) main::$7 + (byte) main::i#2) ← *((byte[]) screencode_mixed2#0 + (byte) main::i#2) + (number~) main::$8 ← (number) $28 * (number) 4 + (byte*~) main::$9 ← (byte*) main::SCREEN#0 + (number~) main::$8 + *((byte*~) main::$9 + (byte) main::i#2) ← *((byte[]) screencode_upper#0 + (byte) main::i#2) + (number~) main::$10 ← (number) $28 * (number) 3 + (byte*~) main::$11 ← (byte*) main::SCREEN#0 + (number~) main::$10 + *((byte*~) main::$11 + (byte) main::i#2) ← *((byte[]) screencode_mixed3#0 + (byte) main::i#2) + (byte) main::i#1 ← (byte) main::i#2 + rangenext(0,5) + (bool~) main::$12 ← (byte) main::i#1 != rangelast(0,5) + if((bool~) main::$12) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + return + to:@return +@1: scope:[] from @begin + call main + to:@2 +@2: scope:[] from @1 + to:@end +@end: scope:[] from @2 + +SYMBOL TABLE SSA +(const string) $0 = (string) "abcABC1@" +(const string) $1 = (string) PETSCII_MIXED"abcABC2@" +(const string) $2 = (string) PETSCII_MIXED"abcABC3@" +(const string) $3 = (string) "abcABC4@" +(const string) $4 = (string) SCREENCODE_UPPER"abcABC5@" +(const string) $5 = (string) "abcABC6@" +(label) @1 +(label) @2 +(label) @begin +(label) @end +(void()) main() +(number~) main::$0 +(byte*~) main::$1 +(number~) main::$10 +(byte*~) main::$11 +(bool~) main::$12 +(number~) main::$2 +(byte*~) main::$3 +(number~) main::$4 +(byte*~) main::$5 +(number~) main::$6 +(byte*~) main::$7 +(number~) main::$8 +(byte*~) main::$9 +(label) main::@1 +(label) main::@return +(byte*) main::SCREEN +(byte*) main::SCREEN#0 +(byte) main::i +(byte) main::i#0 +(byte) main::i#1 +(byte) main::i#2 +(byte[]) petscii_mixed1 +(byte[]) petscii_mixed1#0 +(byte[]) petscii_mixed2 +(byte[]) petscii_mixed2#0 +(byte[]) screencode_mixed1 +(byte[]) screencode_mixed1#0 +(byte[]) screencode_mixed2 +(byte[]) screencode_mixed2#0 +(byte[]) screencode_mixed3 +(byte[]) screencode_mixed3#0 +(byte[]) screencode_upper +(byte[]) screencode_upper#0 + +Adding number conversion cast (unumber) main::$0 in (byte*~) main::$1 ← (byte*) main::SCREEN#0 + (number~) main::$0 +Adding number conversion cast (unumber) main::$2 in (byte*~) main::$3 ← (byte*) main::SCREEN#0 + (number~) main::$2 +Adding number conversion cast (unumber) main::$4 in (byte*~) main::$5 ← (byte*) main::SCREEN#0 + (number~) main::$4 +Adding number conversion cast (unumber) main::$6 in (byte*~) main::$7 ← (byte*) main::SCREEN#0 + (number~) main::$6 +Adding number conversion cast (unumber) main::$8 in (byte*~) main::$9 ← (byte*) main::SCREEN#0 + (number~) main::$8 +Adding number conversion cast (unumber) main::$10 in (byte*~) main::$11 ← (byte*) main::SCREEN#0 + (number~) main::$10 +Successful SSA optimization PassNAddNumberTypeConversions +Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 +Inlining cast (unumber~) main::$13 ← (unumber)(number~) main::$0 +Inlining cast (unumber~) main::$14 ← (unumber)(number~) main::$2 +Inlining cast (unumber~) main::$15 ← (unumber)(number~) main::$4 +Inlining cast (unumber~) main::$16 ← (unumber)(number~) main::$6 +Inlining cast (unumber~) main::$17 ← (unumber)(number~) main::$8 +Inlining cast (unumber~) main::$18 ← (unumber)(number~) main::$10 +Successful SSA optimization Pass2InlineCast +Simplifying constant pointer cast (byte*) 1024 +Successful SSA optimization PassNCastSimplification +Simple Condition (bool~) main::$12 [35] if((byte) main::i#1!=rangelast(0,5)) goto main::@1 +Successful SSA optimization Pass2ConditionalJumpSimplification +Constant right-side identified [9] (number~) main::$0 ← (number) $28 * (number) 2 +Constant right-side identified [13] (number~) main::$2 ← (number) $28 * (number) 0 +Constant right-side identified [17] (number~) main::$4 ← (number) $28 * (number) 1 +Constant right-side identified [21] (number~) main::$6 ← (number) $28 * (number) 2 +Constant right-side identified [25] (number~) main::$8 ← (number) $28 * (number) 4 +Constant right-side identified [29] (number~) main::$10 ← (number) $28 * (number) 3 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte[]) screencode_mixed1#0 = $0 +Constant (const byte[]) petscii_mixed1#0 = $1 +Constant (const byte[]) petscii_mixed2#0 = $2 +Constant (const byte[]) screencode_mixed2#0 = $3 +Constant (const byte[]) screencode_upper#0 = $4 +Constant (const byte[]) screencode_mixed3#0 = $5 +Constant (const byte*) main::SCREEN#0 = (byte*) 1024 +Constant (const byte) main::i#0 = 0 +Constant (const number) main::$0 = $28*2 +Constant (const number) main::$2 = $28*0 +Constant (const number) main::$4 = $28*1 +Constant (const number) main::$6 = $28*2 +Constant (const number) main::$8 = $28*4 +Constant (const number) main::$10 = $28*3 +Successful SSA optimization Pass2ConstantIdentification +Constant value identified (unumber)main::$0 in [10] (unumber~) main::$13 ← (unumber)(const number) main::$0 +Constant value identified (unumber)main::$2 in [14] (unumber~) main::$14 ← (unumber)(const number) main::$2 +Constant value identified (unumber)main::$4 in [18] (unumber~) main::$15 ← (unumber)(const number) main::$4 +Constant value identified (unumber)main::$6 in [22] (unumber~) main::$16 ← (unumber)(const number) main::$6 +Constant value identified (unumber)main::$8 in [26] (unumber~) main::$17 ← (unumber)(const number) main::$8 +Constant value identified (unumber)main::$10 in [30] (unumber~) main::$18 ← (unumber)(const number) main::$10 +Successful SSA optimization Pass2ConstantValues +Resolved ranged next value [33] main::i#1 ← ++ main::i#2 to ++ +Resolved ranged comparison value [35] if(main::i#1!=rangelast(0,5)) goto main::@1 to (number) 6 +Simplifying constant evaluating to zero (number) $28*(number) 0 in +Simplifying constant evaluating to zero (unumber)(const number) main::$2 in [14] (unumber~) main::$14 ← (unumber)(const number) main::$2 +Successful SSA optimization PassNSimplifyConstantZero +Eliminating unused constant (const number) main::$2 +Successful SSA optimization PassNEliminateUnusedVars +Adding number conversion cast (unumber) 6 in if((byte) main::i#1!=(number) 6) goto main::@1 +Successful SSA optimization PassNAddNumberTypeConversions +Simplifying constant integer cast 6 +Successful SSA optimization PassNCastSimplification +Finalized unsigned number type (byte) 0 +Finalized unsigned number type (byte) 6 +Successful SSA optimization PassNFinalizeNumberTypeConversions +Inferred type updated to byte in (unumber~) main::$14 ← (byte) 0 +Constant (const unumber) main::$13 = (unumber)main::$0 +Constant (const byte) main::$14 = 0 +Constant (const unumber) main::$15 = (unumber)main::$4 +Constant (const unumber) main::$16 = (unumber)main::$6 +Constant (const unumber) main::$17 = (unumber)main::$8 +Constant (const unumber) main::$18 = (unumber)main::$10 +Successful SSA optimization Pass2ConstantIdentification +Simplifying expression containing zero main::SCREEN#0 in [5] (byte*~) main::$3 ← (const byte*) main::SCREEN#0 + (const byte) main::$14 +Successful SSA optimization PassNSimplifyExpressionWithZero +Eliminating unused constant (const byte) main::$14 +Successful SSA optimization PassNEliminateUnusedVars +Simplifying constant integer cast (const unumber) main::$0 +Simplifying constant integer cast (const unumber) main::$4 +Simplifying constant integer cast (const unumber) main::$6 +Simplifying constant integer cast (const unumber) main::$8 +Simplifying constant integer cast (const unumber) main::$10 +Successful SSA optimization PassNCastSimplification +Constant right-side identified [1] (byte*~) main::$1 ← (const byte*) main::SCREEN#0 + (const unumber) main::$13 +Constant right-side identified [5] (byte*~) main::$5 ← (const byte*) main::SCREEN#0 + (const unumber) main::$15 +Constant right-side identified [7] (byte*~) main::$7 ← (const byte*) main::SCREEN#0 + (const unumber) main::$16 +Constant right-side identified [9] (byte*~) main::$9 ← (const byte*) main::SCREEN#0 + (const unumber) main::$17 +Constant right-side identified [11] (byte*~) main::$11 ← (const byte*) main::SCREEN#0 + (const unumber) main::$18 +Successful SSA optimization Pass2ConstantRValueConsolidation +Constant (const byte*) main::$1 = main::SCREEN#0+main::$13 +Constant (const byte*) main::$3 = main::SCREEN#0 +Constant (const byte*) main::$5 = main::SCREEN#0+main::$15 +Constant (const byte*) main::$7 = main::SCREEN#0+main::$16 +Constant (const byte*) main::$9 = main::SCREEN#0+main::$17 +Constant (const byte*) main::$11 = main::SCREEN#0+main::$18 +Successful SSA optimization Pass2ConstantIdentification +Inlining constant with var siblings (const byte) main::i#0 +Constant inlined main::$13 = (number) $28*(number) 2 +Constant inlined main::$15 = (number) $28*(number) 1 +Constant inlined $0 = (const byte[]) screencode_mixed1#0 +Constant inlined $1 = (const byte[]) petscii_mixed1#0 +Constant inlined main::$10 = (number) $28*(number) 3 +Constant inlined $2 = (const byte[]) petscii_mixed2#0 +Constant inlined $3 = (const byte[]) screencode_mixed2#0 +Constant inlined main::$11 = (const byte*) main::SCREEN#0+(number) $28*(number) 3 +Constant inlined $4 = (const byte[]) screencode_upper#0 +Constant inlined $5 = (const byte[]) screencode_mixed3#0 +Constant inlined main::$16 = (number) $28*(number) 2 +Constant inlined main::$1 = (const byte*) main::SCREEN#0+(number) $28*(number) 2 +Constant inlined main::$17 = (number) $28*(number) 4 +Constant inlined main::$18 = (number) $28*(number) 3 +Constant inlined main::$0 = (number) $28*(number) 2 +Constant inlined main::$5 = (const byte*) main::SCREEN#0+(number) $28*(number) 1 +Constant inlined main::i#0 = (byte) 0 +Constant inlined main::$6 = (number) $28*(number) 2 +Constant inlined main::$3 = (const byte*) main::SCREEN#0 +Constant inlined main::$4 = (number) $28*(number) 1 +Constant inlined main::$9 = (const byte*) main::SCREEN#0+(number) $28*(number) 4 +Constant inlined main::$7 = (const byte*) main::SCREEN#0+(number) $28*(number) 2 +Constant inlined main::$8 = (number) $28*(number) 4 +Successful SSA optimization Pass2ConstantInlining +Adding number conversion cast (unumber) $28*2 in [1] *((const byte*) main::SCREEN#0+(number) $28*(number) 2 + (byte) main::i#2) ← *((const byte[]) screencode_mixed1#0 + (byte) main::i#2) +Adding number conversion cast (unumber) $28*1 in [3] *((const byte*) main::SCREEN#0+(number) $28*(number) 1 + (byte) main::i#2) ← *((const byte[]) petscii_mixed2#0 + (byte) main::i#2) +Adding number conversion cast (unumber) $28*2 in [4] *((const byte*) main::SCREEN#0+(number) $28*(number) 2 + (byte) main::i#2) ← *((const byte[]) screencode_mixed2#0 + (byte) main::i#2) +Adding number conversion cast (unumber) $28*4 in [5] *((const byte*) main::SCREEN#0+(number) $28*(number) 4 + (byte) main::i#2) ← *((const byte[]) screencode_upper#0 + (byte) main::i#2) +Adding number conversion cast (unumber) $28*3 in [6] *((const byte*) main::SCREEN#0+(number) $28*(number) 3 + (byte) main::i#2) ← *((const byte[]) screencode_mixed3#0 + (byte) main::i#2) +Successful SSA optimization PassNAddNumberTypeConversions +Added new block during phi lifting main::@3(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 +Adding NOP phi() at start of @end +Adding NOP phi() at start of main +CALL GRAPH +Calls in [] to main:2 + +Created 1 initial phi equivalence classes +Coalesced [16] main::i#3 ← main::i#1 +Coalesced down to 1 phi equivalence classes +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 +Adding NOP phi() at start of main + +FINAL CONTROL FLOW GRAPH +@begin: scope:[] from + [0] phi() + to:@1 +@1: scope:[] from @begin + [1] phi() + [2] call main + to:@end +@end: scope:[] from @1 + [3] phi() +main: scope:[main] from @1 + [4] phi() + to:main::@1 +main::@1: scope:[main] from main main::@1 + [5] (byte) main::i#2 ← phi( main/(byte) 0 main::@1/(byte) main::i#1 ) + [6] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::i#2) ← *((const byte[]) screencode_mixed1#0 + (byte) main::i#2) + [7] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const byte[]) petscii_mixed1#0 + (byte) main::i#2) + [8] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 1 + (byte) main::i#2) ← *((const byte[]) petscii_mixed2#0 + (byte) main::i#2) + [9] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::i#2) ← *((const byte[]) screencode_mixed2#0 + (byte) main::i#2) + [10] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 4 + (byte) main::i#2) ← *((const byte[]) screencode_upper#0 + (byte) main::i#2) + [11] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 3 + (byte) main::i#2) ← *((const byte[]) screencode_mixed3#0 + (byte) main::i#2) + [12] (byte) main::i#1 ← ++ (byte) main::i#2 + [13] if((byte) main::i#1!=(byte) 6) goto main::@1 + to:main::@return +main::@return: scope:[main] from main::@1 + [14] return + to:@return + + +VARIABLE REGISTER WEIGHTS +(void()) main() +(byte*) main::SCREEN +(byte) main::i +(byte) main::i#1 16.5 +(byte) main::i#2 22.000000000000004 +(byte[]) petscii_mixed1 +(byte[]) petscii_mixed2 +(byte[]) screencode_mixed1 +(byte[]) screencode_mixed2 +(byte[]) screencode_mixed3 +(byte[]) screencode_upper + +Initial phi equivalence classes +[ main::i#2 main::i#1 ] +Complete equivalence classes +[ main::i#2 main::i#1 ] +Allocated zp ZP_BYTE:2 [ main::i#2 main::i#1 ] + +INITIAL ASM +//SEG0 File Comments +// Test string encoding via literals +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels +//SEG3 @begin +bbegin: +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG5 @1 +b1: +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG9 @end +bend: +//SEG10 main +main: { + .label SCREEN = $400 + .label i = 2 + //SEG11 [5] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + //SEG12 [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuz1=vbuc1 + lda #0 + sta i + jmp b1 + //SEG13 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + b1_from_b1: + //SEG14 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy + jmp b1 + //SEG15 main::@1 + b1: + //SEG16 [6] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::i#2) ← *((const byte[]) screencode_mixed1#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy i + lda screencode_mixed1,y + sta SCREEN+$28*2,y + //SEG17 [7] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const byte[]) petscii_mixed1#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy i + lda petscii_mixed1,y + sta SCREEN,y + //SEG18 [8] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 1 + (byte) main::i#2) ← *((const byte[]) petscii_mixed2#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy i + lda petscii_mixed2,y + sta SCREEN+$28*1,y + //SEG19 [9] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::i#2) ← *((const byte[]) screencode_mixed2#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy i + lda screencode_mixed2,y + sta SCREEN+$28*2,y + //SEG20 [10] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 4 + (byte) main::i#2) ← *((const byte[]) screencode_upper#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy i + lda screencode_upper,y + sta SCREEN+$28*4,y + //SEG21 [11] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 3 + (byte) main::i#2) ← *((const byte[]) screencode_mixed3#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuz1=pbuc2_derefidx_vbuz1 + ldy i + lda screencode_mixed3,y + sta SCREEN+$28*3,y + //SEG22 [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuz1=_inc_vbuz1 + inc i + //SEG23 [13] if((byte) main::i#1!=(byte) 6) goto main::@1 -- vbuz1_neq_vbuc1_then_la1 + lda #6 + cmp i + bne b1_from_b1 + jmp breturn + //SEG24 main::@return + breturn: + //SEG25 [14] return + rts +} + // Default encoding (screencode_mixed) + screencode_mixed1: .text "abcABC1@" +.encoding "petscii_mixed" + petscii_mixed1: .text "abcABC2@" + petscii_mixed2: .text "abcABC3@" +.encoding "screencode_mixed" + screencode_mixed2: .text "abcABC4@" + // Override default encoding using suffix +.encoding "screencode_upper" + screencode_upper: .text "abcABC5@" +.encoding "screencode_mixed" + screencode_mixed3: .text "abcABC6@" + +REGISTER UPLIFT POTENTIAL REGISTERS +Statement [6] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::i#2) ← *((const byte[]) screencode_mixed1#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Removing always clobbered register reg byte a as potential for zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Statement [7] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const byte[]) petscii_mixed1#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [8] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 1 + (byte) main::i#2) ← *((const byte[]) petscii_mixed2#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [9] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::i#2) ← *((const byte[]) screencode_mixed2#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [10] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 4 + (byte) main::i#2) ← *((const byte[]) screencode_upper#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [11] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 3 + (byte) main::i#2) ← *((const byte[]) screencode_mixed3#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [6] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::i#2) ← *((const byte[]) screencode_mixed1#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [7] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const byte[]) petscii_mixed1#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [8] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 1 + (byte) main::i#2) ← *((const byte[]) petscii_mixed2#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [9] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::i#2) ← *((const byte[]) screencode_mixed2#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [10] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 4 + (byte) main::i#2) ← *((const byte[]) screencode_upper#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Statement [11] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 3 + (byte) main::i#2) ← *((const byte[]) screencode_mixed3#0 + (byte) main::i#2) [ main::i#2 ] ( main:2 [ main::i#2 ] ) always clobbers reg byte a +Potential registers zp ZP_BYTE:2 [ main::i#2 main::i#1 ] : zp ZP_BYTE:2 , reg byte x , reg byte y , + +REGISTER UPLIFT SCOPES +Uplift Scope [main] 38.5: zp ZP_BYTE:2 [ main::i#2 main::i#1 ] +Uplift Scope [] + +Uplifting [main] best 763 combination reg byte x [ main::i#2 main::i#1 ] +Uplifting [] best 763 combination + +ASSEMBLER BEFORE OPTIMIZATION +//SEG0 File Comments +// Test string encoding via literals +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(bbegin) +.pc = $80d "Program" +//SEG2 Global Constants & labels +//SEG3 @begin +bbegin: +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +b1_from_bbegin: + jmp b1 +//SEG5 @1 +b1: +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +main_from_b1: + jsr main +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +bend_from_b1: + jmp bend +//SEG9 @end +bend: +//SEG10 main +main: { + .label SCREEN = $400 + //SEG11 [5] phi from main to main::@1 [phi:main->main::@1] + b1_from_main: + //SEG12 [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + ldx #0 + jmp b1 + //SEG13 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + b1_from_b1: + //SEG14 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy + jmp b1 + //SEG15 main::@1 + b1: + //SEG16 [6] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::i#2) ← *((const byte[]) screencode_mixed1#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda screencode_mixed1,x + sta SCREEN+$28*2,x + //SEG17 [7] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const byte[]) petscii_mixed1#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda petscii_mixed1,x + sta SCREEN,x + //SEG18 [8] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 1 + (byte) main::i#2) ← *((const byte[]) petscii_mixed2#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda petscii_mixed2,x + sta SCREEN+$28*1,x + //SEG19 [9] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::i#2) ← *((const byte[]) screencode_mixed2#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda screencode_mixed2,x + sta SCREEN+$28*2,x + //SEG20 [10] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 4 + (byte) main::i#2) ← *((const byte[]) screencode_upper#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda screencode_upper,x + sta SCREEN+$28*4,x + //SEG21 [11] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 3 + (byte) main::i#2) ← *((const byte[]) screencode_mixed3#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda screencode_mixed3,x + sta SCREEN+$28*3,x + //SEG22 [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + inx + //SEG23 [13] if((byte) main::i#1!=(byte) 6) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #6 + bne b1_from_b1 + jmp breturn + //SEG24 main::@return + breturn: + //SEG25 [14] return + rts +} + // Default encoding (screencode_mixed) + screencode_mixed1: .text "abcABC1@" +.encoding "petscii_mixed" + petscii_mixed1: .text "abcABC2@" + petscii_mixed2: .text "abcABC3@" +.encoding "screencode_mixed" + screencode_mixed2: .text "abcABC4@" + // Override default encoding using suffix +.encoding "screencode_upper" + screencode_upper: .text "abcABC5@" +.encoding "screencode_mixed" + screencode_mixed3: .text "abcABC6@" + +ASSEMBLER OPTIMIZATIONS +Removing instruction jmp b1 +Removing instruction jmp bend +Removing instruction jmp b1 +Removing instruction jmp breturn +Succesful ASM optimization Pass5NextJumpElimination +Replacing label b1_from_b1 with b1 +Removing instruction b1_from_bbegin: +Removing instruction b1: +Removing instruction main_from_b1: +Removing instruction bend_from_b1: +Removing instruction b1_from_b1: +Succesful ASM optimization Pass5RedundantLabelElimination +Removing instruction bend: +Removing instruction b1_from_main: +Removing instruction breturn: +Succesful ASM optimization Pass5UnusedLabelElimination +Updating BasicUpstart to call main directly +Removing instruction jsr main +Succesful ASM optimization Pass5SkipBegin +Removing instruction jmp b1 +Succesful ASM optimization Pass5NextJumpElimination +Removing instruction bbegin: +Succesful ASM optimization Pass5UnusedLabelElimination + +FINAL SYMBOL TABLE +(label) @1 +(label) @begin +(label) @end +(void()) main() +(label) main::@1 +(label) main::@return +(byte*) main::SCREEN +(const byte*) main::SCREEN#0 SCREEN = (byte*) 1024 +(byte) main::i +(byte) main::i#1 reg byte x 16.5 +(byte) main::i#2 reg byte x 22.000000000000004 +(byte[]) petscii_mixed1 +(const byte[]) petscii_mixed1#0 petscii_mixed1 = (string) PETSCII_MIXED"abcABC2@" +(byte[]) petscii_mixed2 +(const byte[]) petscii_mixed2#0 petscii_mixed2 = (string) PETSCII_MIXED"abcABC3@" +(byte[]) screencode_mixed1 +(const byte[]) screencode_mixed1#0 screencode_mixed1 = (string) "abcABC1@" +(byte[]) screencode_mixed2 +(const byte[]) screencode_mixed2#0 screencode_mixed2 = (string) "abcABC4@" +(byte[]) screencode_mixed3 +(const byte[]) screencode_mixed3#0 screencode_mixed3 = (string) "abcABC6@" +(byte[]) screencode_upper +(const byte[]) screencode_upper#0 screencode_upper = (string) SCREENCODE_UPPER"abcABC5@" + +reg byte x [ main::i#2 main::i#1 ] + + +FINAL ASSEMBLER +Score: 661 + +//SEG0 File Comments +// Test string encoding via literals +//SEG1 Basic Upstart +.pc = $801 "Basic" +:BasicUpstart(main) +.pc = $80d "Program" +//SEG2 Global Constants & labels +//SEG3 @begin +//SEG4 [1] phi from @begin to @1 [phi:@begin->@1] +//SEG5 @1 +//SEG6 [2] call main +//SEG7 [4] phi from @1 to main [phi:@1->main] +//SEG8 [3] phi from @1 to @end [phi:@1->@end] +//SEG9 @end +//SEG10 main +main: { + .label SCREEN = $400 + //SEG11 [5] phi from main to main::@1 [phi:main->main::@1] + //SEG12 [5] phi (byte) main::i#2 = (byte) 0 [phi:main->main::@1#0] -- vbuxx=vbuc1 + ldx #0 + //SEG13 [5] phi from main::@1 to main::@1 [phi:main::@1->main::@1] + //SEG14 [5] phi (byte) main::i#2 = (byte) main::i#1 [phi:main::@1->main::@1#0] -- register_copy + //SEG15 main::@1 + b1: + //SEG16 [6] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::i#2) ← *((const byte[]) screencode_mixed1#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda screencode_mixed1,x + sta SCREEN+$28*2,x + //SEG17 [7] *((const byte*) main::SCREEN#0 + (byte) main::i#2) ← *((const byte[]) petscii_mixed1#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda petscii_mixed1,x + sta SCREEN,x + //SEG18 [8] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 1 + (byte) main::i#2) ← *((const byte[]) petscii_mixed2#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda petscii_mixed2,x + sta SCREEN+$28*1,x + //SEG19 [9] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 2 + (byte) main::i#2) ← *((const byte[]) screencode_mixed2#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda screencode_mixed2,x + sta SCREEN+$28*2,x + //SEG20 [10] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 4 + (byte) main::i#2) ← *((const byte[]) screencode_upper#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda screencode_upper,x + sta SCREEN+$28*4,x + //SEG21 [11] *((const byte*) main::SCREEN#0+(byte)(number) $28*(number) 3 + (byte) main::i#2) ← *((const byte[]) screencode_mixed3#0 + (byte) main::i#2) -- pbuc1_derefidx_vbuxx=pbuc2_derefidx_vbuxx + lda screencode_mixed3,x + sta SCREEN+$28*3,x + //SEG22 [12] (byte) main::i#1 ← ++ (byte) main::i#2 -- vbuxx=_inc_vbuxx + inx + //SEG23 [13] if((byte) main::i#1!=(byte) 6) goto main::@1 -- vbuxx_neq_vbuc1_then_la1 + cpx #6 + bne b1 + //SEG24 main::@return + //SEG25 [14] return + rts +} + // Default encoding (screencode_mixed) + screencode_mixed1: .text "abcABC1@" +.encoding "petscii_mixed" + petscii_mixed1: .text "abcABC2@" + petscii_mixed2: .text "abcABC3@" +.encoding "screencode_mixed" + screencode_mixed2: .text "abcABC4@" + // Override default encoding using suffix +.encoding "screencode_upper" + screencode_upper: .text "abcABC5@" +.encoding "screencode_mixed" + screencode_mixed3: .text "abcABC6@" + diff --git a/src/test/ref/string-encoding-pragma.sym b/src/test/ref/string-encoding-pragma.sym new file mode 100644 index 000000000..1daabbadc --- /dev/null +++ b/src/test/ref/string-encoding-pragma.sym @@ -0,0 +1 @@ +program \ No newline at end of file diff --git a/src/test/ref/struct-3.log b/src/test/ref/struct-3.log index a5360de29..5d7f09b74 100644 --- a/src/test/ref/struct-3.log +++ b/src/test/ref/struct-3.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA (struct Point[4]) points#0 ← { fill( 4, 0) } to:@1 main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -25,7 +25,7 @@ main::@1: scope:[main] from main main::@1 to:main::@2 main::@2: scope:[main] from main::@1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i1#0 ← (number) 0 + (byte) main::i1#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@3 (byte) main::i1#2 ← phi( main::@2/(byte) main::i1#0 main::@3/(byte) main::i1#1 ) @@ -82,25 +82,17 @@ SYMBOL TABLE SSA (struct Point[4]) points (struct Point[4]) points#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) main::$0 ← (byte) main::i#2 + (number) 1 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::i#2 + (unumber)(number) 1 -Adding number conversion cast (unumber) 0 in (byte) main::i1#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte*~) main::$2 ← (byte*) main::SCREEN#0 + (number) $28 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i1#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$0 ← (byte) main::i#2 + (byte) 1 diff --git a/src/test/ref/struct-4.log b/src/test/ref/struct-4.log index 13244ce0e..9fc9b1419 100644 --- a/src/test/ref/struct-4.log +++ b/src/test/ref/struct-4.log @@ -30,7 +30,7 @@ STATEMENTS (byte) OFFS_X ← (number) 0 (byte) OFFS_Y ← (number) 1 proc (void()) main() - (byte) main:::1::i ← (number) 0 + (byte) main:::1::i ← (byte) 0 main:::1::@1: (var) main:::1::$0 ← ((byte*)) (struct Point[4]) points (var) main:::1::$1 ← (var) main:::1::$0 + (byte) OFFS_X @@ -47,7 +47,7 @@ main:::1::@1: (var) main:::1::$9 ← (byte) main:::1::i != rangelast(0,3) if((var) main:::1::$9) goto main:::1::@1 (byte*) main::SCREEN ← (number) $400 - (byte) main:::2::i ← (number) 0 + (byte) main:::2::i ← (byte) 0 main:::2::@1: (var) main:::2::$0 ← ((byte*)) (struct Point[4]) points (var) main:::2::$1 ← (var) main:::2::$0 + (byte) OFFS_X @@ -117,7 +117,7 @@ INITIAL CONTROL FLOW GRAPH [3] (byte) OFFS_Y ← (number) 1 to:@1 main: scope:[main] from - [4] (byte) main::i ← (number) 0 + [4] (byte) main::i ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 [5] (byte*~) main::$0 ← ((byte*)) (struct Point[4]) points @@ -137,7 +137,7 @@ main::@1: scope:[main] from main main::@1 to:main::@2 main::@2: scope:[main] from main::@1 [19] (byte*) main::SCREEN ← ((byte*)) (number) $400 - [20] (byte) main::i1 ← (number) 0 + [20] (byte) main::i1 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@3 [21] (byte*~) main::$10 ← ((byte*)) (struct Point[4]) points @@ -178,7 +178,7 @@ CONTROL FLOW GRAPH SSA (byte) OFFS_Y#0 ← (number) 1 to:@1 main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -199,7 +199,7 @@ main::@1: scope:[main] from main main::@1 to:main::@2 main::@2: scope:[main] from main::@1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i1#0 ← (number) 0 + (byte) main::i1#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@3 (byte) main::i1#2 ← phi( main::@2/(byte) main::i1#0 main::@3/(byte) main::i1#1 ) @@ -282,38 +282,30 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 2 in (byte) SIZEOF_POINT#0 ← (number) 2 Adding number conversion cast (unumber) 0 in (byte) OFFS_X#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) OFFS_Y#0 ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 4 in (number~) main::$8 ← (byte) main::i#2 + (number) 4 Adding number conversion cast (unumber) main::$8 in (number~) main::$8 ← (byte) main::i#2 + (unumber)(number) 4 -Adding number conversion cast (unumber) 0 in (byte) main::i1#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte*~) main::$14 ← (byte*) main::SCREEN#0 + (number) $28 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) SIZEOF_POINT#0 ← (unumber)(number) 2 Inlining cast (byte) OFFS_X#0 ← (unumber)(number) 0 Inlining cast (byte) OFFS_Y#0 ← (unumber)(number) 1 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte*~) main::$0 ← (byte*)(struct Point[4]) points#0 Inlining cast (byte*~) main::$4 ← (byte*)(struct Point[4]) points#0 Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i1#0 ← (unumber)(number) 0 Inlining cast (byte*~) main::$10 ← (byte*)(struct Point[4]) points#0 Inlining cast (byte*~) main::$15 ← (byte*)(struct Point[4]) points#0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 2 Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$8 ← (byte) main::i#2 + (byte) 4 diff --git a/src/test/ref/struct-5.log b/src/test/ref/struct-5.log index 2d2a194f6..11be88fd7 100644 --- a/src/test/ref/struct-5.log +++ b/src/test/ref/struct-5.log @@ -32,7 +32,7 @@ STATEMENTS (byte) OFFS_X ← (number) 0 (byte) OFFS_Y ← (number) 1 proc (void()) main() - (byte) main:::1::i ← (number) 0 + (byte) main:::1::i ← (byte) 0 main:::1::@1: (var) main:::1::$0 ← (struct Point[4]) points + (byte) main:::1::i (struct Point*) main:::1::point_i ← (var) main:::1::$0 @@ -47,7 +47,7 @@ main:::1::@1: (var) main:::1::$6 ← (byte) main:::1::i != rangelast(0,3) if((var) main:::1::$6) goto main:::1::@1 (byte*) main::SCREEN ← (number) $400 - (byte) main:::2::i ← (number) 0 + (byte) main:::2::i ← (byte) 0 main:::2::@1: (var) main:::2::$0 ← (struct Point[4]) points + (byte) main:::2::i (struct Point*) main:::2::point_i ← (var) main:::2::$0 @@ -113,7 +113,7 @@ INITIAL CONTROL FLOW GRAPH [3] (byte) OFFS_Y ← (number) 1 to:@1 main: scope:[main] from - [4] (byte) main::i ← (number) 0 + [4] (byte) main::i ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 [5] (byte~) main::$14 ← (byte) main::i * (const byte) SIZEOF_STRUCT_POINT @@ -132,7 +132,7 @@ main::@1: scope:[main] from main main::@1 to:main::@2 main::@2: scope:[main] from main::@1 [18] (byte*) main::SCREEN ← ((byte*)) (number) $400 - [19] (byte) main::i1 ← (number) 0 + [19] (byte) main::i1 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@3 [20] (byte~) main::$15 ← (byte) main::i1 * (const byte) SIZEOF_STRUCT_POINT @@ -172,7 +172,7 @@ CONTROL FLOW GRAPH SSA (byte) OFFS_Y#0 ← (number) 1 to:@1 main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -192,7 +192,7 @@ main::@1: scope:[main] from main main::@1 to:main::@2 main::@2: scope:[main] from main::@1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i1#0 ← (number) 0 + (byte) main::i1#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@3 (byte) main::i1#2 ← phi( main::@2/(byte) main::i1#0 main::@3/(byte) main::i1#1 ) @@ -272,35 +272,27 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) 0 in (byte) OFFS_X#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) OFFS_Y#0 ← (number) 1 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 4 in (number~) main::$5 ← (byte) main::i#2 + (number) 4 Adding number conversion cast (unumber) main::$5 in (number~) main::$5 ← (byte) main::i#2 + (unumber)(number) 4 -Adding number conversion cast (unumber) 0 in (byte) main::i1#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte*~) main::$10 ← (byte*) main::SCREEN#0 + (number) $28 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) OFFS_X#0 ← (unumber)(number) 0 Inlining cast (byte) OFFS_Y#0 ← (unumber)(number) 1 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte*~) main::$1 ← (byte*)(struct Point*) main::point_i#0 Inlining cast (byte*~) main::$3 ← (byte*)(struct Point*) main::point_i#0 Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i1#0 ← (unumber)(number) 0 Inlining cast (byte*~) main::$8 ← (byte*)(struct Point*) main::point_i1#0 Inlining cast (byte*~) main::$11 ← (byte*)(struct Point*) main::point_i1#0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant integer cast 1 -Simplifying constant integer cast 0 Simplifying constant integer cast 4 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 4 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$5 ← (byte) main::i#2 + (byte) 4 diff --git a/src/test/ref/subexpr-optimize-0.log b/src/test/ref/subexpr-optimize-0.log index e96c5f322..64eccaabf 100644 --- a/src/test/ref/subexpr-optimize-0.log +++ b/src/test/ref/subexpr-optimize-0.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::screen#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte*) main::screen#3 ← phi( main/(byte*) main::screen#0 main::@1/(byte*) main::screen#2 ) @@ -52,21 +52,17 @@ SYMBOL TABLE SSA (byte*) main::screen#2 (byte*) main::screen#3 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (number~) main::$0 ← (byte) main::i#2 * (number) 2 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::i#2 * (unumber)(number) 2 Adding number conversion cast (unumber) 2 in (number~) main::$1 ← (byte) main::i#2 * (number) 2 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (byte) main::i#2 * (unumber)(number) 2 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/subexpr-optimize-1.log b/src/test/ref/subexpr-optimize-1.log index e79ddee35..28bab399c 100644 --- a/src/test/ref/subexpr-optimize-1.log +++ b/src/test/ref/subexpr-optimize-1.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -65,7 +65,6 @@ SYMBOL TABLE SSA (byte) main::i#1 (byte) main::i#2 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) main::$0 ← (byte) main::i#2 + (number) 1 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::i#2 + (unumber)(number) 1 Adding number conversion cast (unumber) $28 in (byte*~) main::$1 ← (byte*) main::SCREEN#0 + (number) $28 @@ -82,10 +81,8 @@ Adding number conversion cast (unumber) 1 in (number~) main::$9 ← (byte) main: Adding number conversion cast (unumber) main::$9 in (number~) main::$9 ← (byte) main::i#2 + (unumber)(number) 1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $28 Simplifying constant integer cast $28 @@ -97,7 +94,6 @@ Simplifying constant integer cast $78 Simplifying constant integer cast $78 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 diff --git a/src/test/ref/ternary-1.log b/src/test/ref/ternary-1.log index 91f1d945b..588f2f6e9 100644 --- a/src/test/ref/ternary-1.log +++ b/src/test/ref/ternary-1.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@4 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@4/(byte) main::i#1 ) @@ -67,17 +67,13 @@ SYMBOL TABLE SSA (byte) main::i#4 (byte) main::i#5 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 5 in (bool~) main::$0 ← (byte) main::i#2 < (number) 5 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 5 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 5 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#4 (byte) main::i#5 diff --git a/src/test/ref/ternary-3.log b/src/test/ref/ternary-3.log index b0daa8b10..1a23611af 100644 --- a/src/test/ref/ternary-3.log +++ b/src/test/ref/ternary-3.log @@ -14,7 +14,7 @@ CONTROL FLOW GRAPH SSA to:@4 main: scope:[main] from @4 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@4 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@4/(byte) main::i#1 ) @@ -170,7 +170,6 @@ SYMBOL TABLE SSA (byte) main::i#7 (byte) main::i#8 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 5 in (bool~) cond::$0 ← (byte) cond::b#1 < (number) 5 Adding number conversion cast (unumber) 5 in (number~) m1::$0 ← (number) 5 + (byte) m1::i#1 Adding number conversion cast (unumber) m1::$0 in (number~) m1::$0 ← (unumber)(number) 5 + (byte) m1::i#1 @@ -178,15 +177,12 @@ Adding number conversion cast (unumber) $a in (number~) m2::$0 ← (number) $a + Adding number conversion cast (unumber) m2::$0 in (number~) m2::$0 ← (unumber)(number) $a + (byte) m2::i#1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 5 Simplifying constant integer cast 5 Simplifying constant integer cast $a Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) $a diff --git a/src/test/ref/ternary-inference.log b/src/test/ref/ternary-inference.log index ce466e0f6..3c03dd3cf 100644 --- a/src/test/ref/ternary-inference.log +++ b/src/test/ref/ternary-inference.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::screen#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@4 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@4/(byte) main::i#1 ) @@ -69,7 +69,6 @@ SYMBOL TABLE SSA (byte*) main::screen (byte*) main::screen#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 5 in (bool~) main::$0 ← (byte) main::i#2 < (number) 5 Adding number conversion cast (unumber) main::$3 in (byte) main::i#3 ← phi( main::@2/(byte) main::i#4 main::@3/(byte) main::i#5 ) (number~) main::$3 ← phi( main::@2/(number~) main::$2 main::@3/(byte~) main::$1 ) @@ -81,15 +80,12 @@ Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (unumber) $57 in (unumber~) main::$2 ← (number) $57 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (unumber~) main::$2 ← (unumber)(number) $57 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 5 Simplifying constant integer cast $57 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) $57 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/test-address-of.log b/src/test/ref/test-address-of.log index 1314d3569..841524241 100644 --- a/src/test/ref/test-address-of.log +++ b/src/test/ref/test-address-of.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::b#0 ← (number) 0 + (byte) main::b#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::b#2 ← phi( main/(byte) main::b#0 main::@1/(byte) main::b#1 ) @@ -52,18 +52,14 @@ SYMBOL TABLE SSA (byte) main::c (byte) main::c#0 -Adding number conversion cast (unumber) 0 in (byte) main::b#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) main::$1 ← *((byte*) main::bp#0) + (number) 1 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← *((byte*) main::bp#0) + (unumber)(number) 1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::b#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$1 ← *((byte*) main::bp#0) + (byte) 1 diff --git a/src/test/ref/test-comments-block.log b/src/test/ref/test-comments-block.log index a7319289f..848fb2673 100644 --- a/src/test/ref/test-comments-block.log +++ b/src/test/ref/test-comments-block.log @@ -11,7 +11,7 @@ CONTROL FLOW GRAPH SSA to:@2 main: scope:[main] from @2 (byte) main::i#0 ← (number) 0 - (byte) main::b#0 ← (number) 0 + (byte) main::b#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@3/(byte) main::i#1 ) @@ -98,18 +98,14 @@ SYMBOL TABLE SSA (byte) sum::return#4 Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::b#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::b#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) sum::return#0 = (byte) sum::return#3 Alias (byte) main::i#2 = (byte) main::i#3 diff --git a/src/test/ref/test-comments-loop.log b/src/test/ref/test-comments-loop.log index e704fceb4..293e10299 100644 --- a/src/test/ref/test-comments-loop.log +++ b/src/test/ref/test-comments-loop.log @@ -6,7 +6,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::b#0 ← (number) 0 + (byte) main::b#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::b#2 ← phi( main/(byte) main::b#0 main::@1/(byte) main::b#1 ) @@ -41,16 +41,10 @@ SYMBOL TABLE SSA (byte) main::b#1 (byte) main::b#2 -Adding number conversion cast (unumber) 0 in (byte) main::b#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::b#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [6] if((byte) main::b#1!=rangelast(0,$a)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = (byte*) 1024 diff --git a/src/test/ref/test-comments-single.log b/src/test/ref/test-comments-single.log index 7640b0e62..23332a3a4 100644 --- a/src/test/ref/test-comments-single.log +++ b/src/test/ref/test-comments-single.log @@ -11,7 +11,7 @@ CONTROL FLOW GRAPH SSA to:@2 main: scope:[main] from @2 (byte) main::i#0 ← (number) 0 - (byte) main::b#0 ← (number) 0 + (byte) main::b#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::i#3 ← phi( main/(byte) main::i#0 main::@3/(byte) main::i#1 ) @@ -98,18 +98,14 @@ SYMBOL TABLE SSA (byte) sum::return#4 Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::b#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::b#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) sum::return#0 = (byte) sum::return#3 Alias (byte) main::i#2 = (byte) main::i#3 diff --git a/src/test/ref/test-comparisons-sword.log b/src/test/ref/test-comparisons-sword.log index e10939cdf..f00ee17bc 100644 --- a/src/test/ref/test-comparisons-sword.log +++ b/src/test/ref/test-comparisons-sword.log @@ -284,7 +284,7 @@ main::@15: scope:[main] from main (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#13 (byte*) print_char_cursor#18 ← (byte*) print_char_cursor#46 (byte) main::s#0 ← (number) 0 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@15 main::@7 (byte*) print_line_cursor#31 ← phi( main::@15/(byte*) print_line_cursor#5 main::@7/(byte*) print_line_cursor#23 ) @@ -293,7 +293,7 @@ main::@1: scope:[main] from main::@15 main::@7 (byte) main::i#2 ← phi( main::@15/(byte) main::i#0 main::@7/(byte) main::i#1 ) (byte~) main::$8 ← (byte) main::i#2 * (const byte) SIZEOF_SIGNED_WORD (signed word) main::w1#0 ← *((signed word[]) swords#0 + (byte~) main::$8) - (byte) main::j#0 ← (number) 0 + (byte) main::j#0 ← (byte) 0 to:main::@2 main::@2: scope:[main] from main::@1 main::@6 (byte) main::i#10 ← phi( main::@1/(byte) main::i#2 main::@6/(byte) main::i#4 ) @@ -304,7 +304,7 @@ main::@2: scope:[main] from main::@1 main::@6 (byte) main::j#2 ← phi( main::@1/(byte) main::j#0 main::@6/(byte) main::j#1 ) (byte~) main::$9 ← (byte) main::j#2 * (const byte) SIZEOF_SIGNED_WORD (signed word) main::w2#0 ← *((signed word[]) swords#0 + (byte~) main::$9) - (byte) main::op#0 ← (number) 0 + (byte) main::op#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@4 (byte) main::i#8 ← phi( main::@2/(byte) main::i#10 main::@4/(byte) main::i#5 ) @@ -1249,9 +1249,6 @@ Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (byte*~) print_cls::$0 ← (byte*) print_screen#2 + (number) $3e8 Adding number conversion cast (unumber) 0 in (byte) main::s#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::op#0 ← (number) 0 Adding number conversion cast (unumber) 3 in (bool~) main::$2 ← (byte) main::s#1 == (number) 3 Adding number conversion cast (unumber) 0 in (byte) main::s#2 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) LT#0 ← (number) 0 @@ -1270,9 +1267,6 @@ Successful SSA optimization PassNAddArrayNumberTypeConversions Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Inlining cast (word~) print_sword::$2 ← (word)(signed word) print_sword::w#4 Inlining cast (byte) main::s#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 -Inlining cast (byte) main::op#0 ← (unumber)(number) 0 Inlining cast (byte) main::s#2 ← (unumber)(number) 0 Inlining cast (byte) LT#0 ← (unumber)(number) 0 Inlining cast (byte) LE#0 ← (unumber)(number) 1 @@ -1293,9 +1287,6 @@ Simplifying constant integer cast -$6fed Simplifying constant integer cast $12 Simplifying constant integer cast $7fed Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 3 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -1315,9 +1306,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/test-comparisons-word.log b/src/test/ref/test-comparisons-word.log index 7f908cca0..a3bc2398d 100644 --- a/src/test/ref/test-comparisons-word.log +++ b/src/test/ref/test-comparisons-word.log @@ -248,7 +248,7 @@ main::@15: scope:[main] from main (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#13 (byte*) print_char_cursor#15 ← (byte*) print_char_cursor#39 (byte) main::s#0 ← (number) 0 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@15 main::@7 (byte*) print_line_cursor#31 ← phi( main::@15/(byte*) print_line_cursor#5 main::@7/(byte*) print_line_cursor#23 ) @@ -257,7 +257,7 @@ main::@1: scope:[main] from main::@15 main::@7 (byte) main::i#2 ← phi( main::@15/(byte) main::i#0 main::@7/(byte) main::i#1 ) (byte~) main::$8 ← (byte) main::i#2 * (const byte) SIZEOF_WORD (word) main::w1#0 ← *((word[]) words#0 + (byte~) main::$8) - (byte) main::j#0 ← (number) 0 + (byte) main::j#0 ← (byte) 0 to:main::@2 main::@2: scope:[main] from main::@1 main::@6 (byte) main::i#10 ← phi( main::@1/(byte) main::i#2 main::@6/(byte) main::i#4 ) @@ -268,7 +268,7 @@ main::@2: scope:[main] from main::@1 main::@6 (byte) main::j#2 ← phi( main::@1/(byte) main::j#0 main::@6/(byte) main::j#1 ) (byte~) main::$9 ← (byte) main::j#2 * (const byte) SIZEOF_WORD (word) main::w2#0 ← *((word[]) words#0 + (byte~) main::$9) - (byte) main::op#0 ← (number) 0 + (byte) main::op#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@4 (byte) main::i#8 ← phi( main::@2/(byte) main::i#10 main::@4/(byte) main::i#5 ) @@ -1091,9 +1091,6 @@ Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (byte*~) print_cls::$0 ← (byte*) print_screen#2 + (number) $3e8 Adding number conversion cast (unumber) 0 in (byte) main::s#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::op#0 ← (number) 0 Adding number conversion cast (unumber) 3 in (bool~) main::$2 ← (byte) main::s#1 == (number) 3 Adding number conversion cast (unumber) 0 in (byte) main::s#2 ← (number) 0 Adding number conversion cast (unumber) $57 in (byte) FF#0 ← (number) $57 @@ -1109,9 +1106,6 @@ Adding number conversion cast (word) to elements in (word[]) words#0 ← { (word Successful SSA optimization PassNAddArrayNumberTypeConversions Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Inlining cast (byte) main::s#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 -Inlining cast (byte) main::op#0 ← (unumber)(number) 0 Inlining cast (byte) main::s#2 ← (unumber)(number) 0 Inlining cast (byte) FF#0 ← (unumber)(number) $57 Inlining cast (byte) TT#0 ← (unumber)(number) $51 @@ -1125,9 +1119,6 @@ Simplifying constant integer cast $12 Simplifying constant integer cast $3f34 Simplifying constant integer cast $cfed Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 3 Simplifying constant integer cast 0 Simplifying constant integer cast $57 @@ -1144,9 +1135,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $57 diff --git a/src/test/ref/test-comparisons.log b/src/test/ref/test-comparisons.log index 2021824f5..4d6c0faa9 100644 --- a/src/test/ref/test-comparisons.log +++ b/src/test/ref/test-comparisons.log @@ -154,7 +154,7 @@ main::@45: scope:[main] from main (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#17 (byte*) print_char_cursor#12 ← (byte*) print_char_cursor#57 (byte) main::a#0 ← (number) 7 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@45 main::@70 (byte*) print_line_cursor#85 ← phi( main::@45/(byte*) print_line_cursor#5 main::@70/(byte*) print_line_cursor#10 ) @@ -1759,7 +1759,6 @@ Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (byte*~) print_cls::$0 ← (byte*) print_screen#2 + (number) $3e8 Adding number conversion cast (unumber) 7 in (byte) main::a#0 ← (number) 7 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $ce in (number~) main::$1 ← (number) $ce - (byte) main::a#2 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (unumber)(number) $ce - (byte) main::a#2 Adding number conversion cast (unumber) $37 in (bool~) main::$5 ← (byte) main::a#4 < (number) $37 @@ -1779,7 +1778,6 @@ Adding number conversion cast (byte) to elements in (byte[5]) main::cs#0 ← { ( Successful SSA optimization PassNAddArrayNumberTypeConversions Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Inlining cast (byte) main::a#0 ← (unumber)(number) 7 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte) printu::b#1 ← (unumber)(number) $37 Inlining cast (byte) printu::b#5 ← (unumber)(number) $37 Inlining cast (byte) printu::b#9 ← (unumber)(number) $37 @@ -1792,7 +1790,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 Simplifying constant integer cast 7 -Simplifying constant integer cast 0 Simplifying constant integer cast $ce Simplifying constant integer cast 7 Simplifying constant integer cast $c7 @@ -1816,7 +1813,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 7 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ce Finalized unsigned number type (byte) $37 Finalized unsigned number type (byte) $37 diff --git a/src/test/ref/test-division.log b/src/test/ref/test-division.log index 37c255371..aa324b14f 100644 --- a/src/test/ref/test-division.log +++ b/src/test/ref/test-division.log @@ -316,7 +316,7 @@ divr8u: scope:[divr8u] from div8u (byte) divr8u::dividend#4 ← phi( div8u/(byte) divr8u::dividend#0 ) (byte) divr8u::rem#9 ← phi( div8u/(byte) divr8u::rem#0 ) (byte) divr8u::quotient#0 ← (number) 0 - (byte) divr8u::i#0 ← (number) 0 + (byte) divr8u::i#0 ← (byte) 0 to:divr8u::@1 divr8u::@1: scope:[divr8u] from divr8u divr8u::@3 (byte) divr8u::i#5 ← phi( divr8u/(byte) divr8u::i#0 divr8u::@3/(byte) divr8u::i#1 ) @@ -399,7 +399,7 @@ divr16u: scope:[divr16u] from div16u divr16s::@4 (word) divr16u::dividend#5 ← phi( div16u/(word) divr16u::dividend#1 divr16s::@4/(word) divr16u::dividend#2 ) (word) divr16u::rem#10 ← phi( div16u/(word) divr16u::rem#3 divr16s::@4/(word) divr16u::rem#4 ) (word) divr16u::quotient#0 ← (number) 0 - (byte) divr16u::i#0 ← (number) 0 + (byte) divr16u::i#0 ← (byte) 0 to:divr16u::@1 divr16u::@1: scope:[divr16u] from divr16u divr16u::@3 (byte) divr16u::i#5 ← phi( divr16u/(byte) divr16u::i#0 divr16u::@3/(byte) divr16u::i#1 ) @@ -850,7 +850,7 @@ test_8u: scope:[test_8u] from main::@1 (byte) rem8u#45 ← phi( main::@1/(byte) rem8u#33 ) (byte[]) test_8u::dividends#0 ← { (number) $ff, (number) $ff, (number) $ff, (number) $ff, (number) $ff, (number) $ff } (byte[]) test_8u::divisors#0 ← { (number) 5, (number) 7, (number) $b, (number) $d, (number) $11, (number) $13 } - (byte) test_8u::i#0 ← (number) 0 + (byte) test_8u::i#0 ← (byte) 0 to:test_8u::@1 test_8u::@1: scope:[test_8u] from test_8u test_8u::@11 (byte*) print_line_cursor#79 ← phi( test_8u/(byte*) print_line_cursor#83 test_8u::@11/(byte*) print_line_cursor#11 ) @@ -972,7 +972,7 @@ test_16u: scope:[test_16u] from main::@2 (word) rem16u#49 ← phi( main::@2/(word) rem16u#38 ) (word[]) test_16u::dividends#0 ← { (number) $ffff, (number) $ffff, (number) $ffff, (number) $ffff, (number) $ffff, (number) $ffff } (word[]) test_16u::divisors#0 ← { (number) 5, (number) 7, (number) $b, (number) $d, (number) $11, (number) $13 } - (byte) test_16u::i#0 ← (number) 0 + (byte) test_16u::i#0 ← (byte) 0 to:test_16u::@1 test_16u::@1: scope:[test_16u] from test_16u test_16u::@11 (byte*) print_line_cursor#80 ← phi( test_16u/(byte*) print_line_cursor#84 test_16u::@11/(byte*) print_line_cursor#13 ) @@ -1097,7 +1097,7 @@ test_8s: scope:[test_8s] from main::@3 (byte) rem8u#48 ← phi( main::@3/(byte) rem8u#34 ) (signed byte[]) test_8s::dividends#0 ← { (number) $7f, (number) -$7f, (number) -$7f, (number) $7f, (number) $7f, (number) $7f } (signed byte[]) test_8s::divisors#0 ← { (number) 5, (number) 7, (number) -$b, (number) -$d, (number) $11, (number) $13 } - (byte) test_8s::i#0 ← (number) 0 + (byte) test_8s::i#0 ← (byte) 0 to:test_8s::@1 test_8s::@1: scope:[test_8s] from test_8s test_8s::@11 (byte*) print_line_cursor#81 ← phi( test_8s/(byte*) print_line_cursor#85 test_8s::@11/(byte*) print_line_cursor#15 ) @@ -1233,7 +1233,7 @@ test_16s: scope:[test_16s] from main::@4 (word) rem16u#52 ← phi( main::@4/(word) rem16u#39 ) (signed word[]) test_16s::dividends#0 ← { (number) $7fff, (number) $7fff, (number) -$7fff, (number) -$7fff, (number) $7fff, (number) -$7fff } (signed word[]) test_16s::divisors#0 ← { (number) 5, (number) -7, (number) $b, (number) -$d, (number) -$11, (number) $13 } - (byte) test_16s::i#0 ← (number) 0 + (byte) test_16s::i#0 ← (byte) 0 to:test_16s::@1 test_16s::@1: scope:[test_16s] from test_16s test_16s::@11 (byte*) print_line_cursor#82 ← phi( test_16s/(byte*) print_line_cursor#86 test_16s::@11/(byte*) print_line_cursor#17 ) @@ -2577,7 +2577,6 @@ Adding number conversion cast (unumber) $3e8 in (byte*~) print_cls::$0 ← (byte Adding number conversion cast (unumber) 0 in (byte) rem8u#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) divr8u::rem#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) divr8u::quotient#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) divr8u::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte~) divr8u::$0 ← (byte) divr8u::rem#4 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr8u::$1 ← (byte) divr8u::dividend#2 & (number) $80 Adding number conversion cast (unumber) divr8u::$1 in (number~) divr8u::$1 ← (byte) divr8u::dividend#2 & (unumber)(number) $80 @@ -2588,7 +2587,6 @@ Adding number conversion cast (unumber) 1 in (number~) divr8u::$4 ← (byte) div Adding number conversion cast (unumber) divr8u::$4 in (number~) divr8u::$4 ← (byte) divr8u::rem#6 | (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (word) rem16u#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (word) divr16u::quotient#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) divr16u::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (word~) divr16u::$0 ← (word) divr16u::rem#5 << (number) 1 Adding number conversion cast (unumber) $80 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (number) $80 Adding number conversion cast (unumber) divr16u::$2 in (number~) divr16u::$2 ← (byte~) divr16u::$1 & (unumber)(number) $80 @@ -2621,10 +2619,6 @@ Adding number conversion cast (unumber) 1 in (number~) divr16s::$15 ← (byte) d Adding number conversion cast (unumber) divr16s::$15 in (number~) divr16s::$15 ← (byte) divr16s::neg#3 ^ (unumber)(number) 1 Adding number conversion cast (unumber) 0 in (bool~) divr16s::$5 ← (byte) divr16s::neg#4 == (number) 0 Adding number conversion cast (snumber) 0 in (signed word) divr16s::rem#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) test_8u::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) test_16u::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) test_8s::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) test_16s::i#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (byte) to elements in (byte[]) test_8u::dividends#0 ← { (byte)(number) $ff, (byte)(number) $ff, (byte)(number) $ff, (byte)(number) $ff, (byte)(number) $ff, (byte)(number) $ff } Adding number conversion cast (byte) to elements in (byte[]) test_8u::divisors#0 ← { (byte)(number) 5, (byte)(number) 7, (byte)(number) $b, (byte)(number) $d, (byte)(number) $11, (byte)(number) $13 } @@ -2641,10 +2635,8 @@ Inlining cast (byte~) print_sbyte::$1 ← (byte)(signed byte) print_sbyte::b#7 Inlining cast (byte) rem8u#0 ← (unumber)(number) 0 Inlining cast (byte) divr8u::rem#0 ← (unumber)(number) 0 Inlining cast (byte) divr8u::quotient#0 ← (unumber)(number) 0 -Inlining cast (byte) divr8u::i#0 ← (unumber)(number) 0 Inlining cast (word) rem16u#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::quotient#0 ← (unumber)(number) 0 -Inlining cast (byte) divr16u::i#0 ← (unumber)(number) 0 Inlining cast (word) divr16u::rem#3 ← (unumber)(number) 0 Inlining cast (signed byte) rem8s#0 ← (snumber)(number) 0 Inlining cast (byte) div8s::neg#0 ← (unumber)(number) 0 @@ -2676,10 +2668,6 @@ Inlining cast (signed word~) divr16s::$21 ← (signed word)(word) divr16s::resul Inlining cast (signed word~) divr16s::$16 ← (signed word)(word) rem16u#22 Inlining cast (signed word~) divr16s::$18 ← (signed word)(word) divr16s::resultu#2 Inlining cast (signed word) divr16s::rem#0 ← (snumber)(number) 0 -Inlining cast (byte) test_8u::i#0 ← (unumber)(number) 0 -Inlining cast (byte) test_16u::i#0 ← (unumber)(number) 0 -Inlining cast (byte) test_8s::i#0 ← (unumber)(number) 0 -Inlining cast (byte) test_16s::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $28 @@ -2691,7 +2679,6 @@ Simplifying constant integer cast $3e8 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -2700,7 +2687,6 @@ Simplifying constant integer cast 1 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast $80 Simplifying constant integer cast 0 @@ -2741,7 +2727,6 @@ Simplifying constant integer cast $b Simplifying constant integer cast $d Simplifying constant integer cast $11 Simplifying constant integer cast $13 -Simplifying constant integer cast 0 Simplifying constant integer cast $ffff Simplifying constant integer cast $ffff Simplifying constant integer cast $ffff @@ -2754,7 +2739,6 @@ Simplifying constant integer cast $b Simplifying constant integer cast $d Simplifying constant integer cast $11 Simplifying constant integer cast $13 -Simplifying constant integer cast 0 Simplifying constant integer cast $7f Simplifying constant integer cast -$7f Simplifying constant integer cast -$7f @@ -2767,7 +2751,6 @@ Simplifying constant integer cast -$b Simplifying constant integer cast -$d Simplifying constant integer cast $11 Simplifying constant integer cast $13 -Simplifying constant integer cast 0 Simplifying constant integer cast $7fff Simplifying constant integer cast $7fff Simplifying constant integer cast -$7fff @@ -2780,7 +2763,6 @@ Simplifying constant integer cast $b Simplifying constant integer cast -$d Simplifying constant integer cast -$11 Simplifying constant integer cast $13 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $28 Finalized signed number type (signed byte) 0 @@ -2791,7 +2773,6 @@ Finalized unsigned number type (word) $3e8 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -2800,7 +2781,6 @@ Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 @@ -2829,10 +2809,6 @@ Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) print_byte::$2 ← (byte) print_byte::b#8 & (byte) $f Inferred type updated to byte in (unumber~) divr8u::$1 ← (byte) divr8u::dividend#2 & (byte) $80 diff --git a/src/test/ref/test-keyboard.log b/src/test/ref/test-keyboard.log index 03d0ac13b..66eb0b865 100644 --- a/src/test/ref/test-keyboard.log +++ b/src/test/ref/test-keyboard.log @@ -206,7 +206,7 @@ main::@6: scope:[main] from main::@3 main::@6 to:main::@7 main::@7: scope:[main] from main::@6 (byte*) main::screen#0 ← ((byte*)) (number) $400 - (byte) main::row#0 ← (number) 0 + (byte) main::row#0 ← (byte) 0 to:main::@8 main::@8: scope:[main] from main::@14 main::@7 (byte*) main::screen#16 ← phi( main::@14/(byte*) main::screen#1 main::@7/(byte*) main::screen#0 ) @@ -221,7 +221,7 @@ main::@28: scope:[main] from main::@8 (byte) keyboard_matrix_read::return#6 ← phi( main::@8/(byte) keyboard_matrix_read::return#3 ) (byte~) main::$4 ← (byte) keyboard_matrix_read::return#6 (byte) main::row_pressed_bits#0 ← (byte~) main::$4 - (byte) main::col#0 ← (number) 0 + (byte) main::col#0 ← (byte) 0 to:main::@9 main::@9: scope:[main] from main::@11 main::@28 (byte) main::row#7 ← phi( main::@11/(byte) main::row#4 main::@28/(byte) main::row#8 ) @@ -271,7 +271,7 @@ main::@15: scope:[main] from main::@14 (byte*~) main::$11 ← (byte*) main::screen#6 + (number) $28 (byte*) main::screen#2 ← (byte*~) main::$11 (byte) main::i#0 ← (number) 0 - (byte) main::ch#0 ← (number) 0 + (byte) main::ch#0 ← (byte) 0 to:main::@16 main::@16: scope:[main] from main::@15 main::@17 (byte) main::i#9 ← phi( main::@15/(byte) main::i#0 main::@17/(byte) main::i#6 ) @@ -687,8 +687,6 @@ Adding number conversion cast (unumber) keyboard_key_pressed::$0 in (number~) ke Adding number conversion cast (unumber) 3 in (byte~) keyboard_key_pressed::$1 ← (byte) keyboard_key_pressed::key#1 >> (number) 3 Adding number conversion cast (unumber) main::$1 in (bool~) main::$2 ← (byte*) main::sc#1 < (number~) main::$1 Adding number conversion cast (unumber) $ff in (bool~) main::$3 ← *((byte*) RASTER#0) != (number) $ff -Adding number conversion cast (unumber) 0 in (byte) main::row#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::col#0 ← (number) 0 Adding number conversion cast (unumber) $80 in (number~) main::$5 ← (byte) main::row_pressed_bits#2 & (number) $80 Adding number conversion cast (unumber) main::$5 in (number~) main::$5 ← (byte) main::row_pressed_bits#2 & (unumber)(number) $80 Adding number conversion cast (unumber) 0 in (bool~) main::$6 ← (unumber~) main::$5 != (number) 0 @@ -697,7 +695,6 @@ Adding number conversion cast (unumber) main::$7 in (number~) main::$7 ← (byte Adding number conversion cast (unumber) $28 in (byte*~) main::$9 ← (byte*) main::screen#5 + (number) $28 Adding number conversion cast (unumber) $28 in (byte*~) main::$11 ← (byte*) main::screen#6 + (number) $28 Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::ch#0 ← (number) 0 Adding number conversion cast (unumber) $3f in (bool~) main::$13 ← (byte) main::key#0 != (number) $3f Adding number conversion cast (unumber) 0 in (bool~) main::$16 ← (byte~) main::$15 != (number) 0 Adding number conversion cast (unumber) 5 in (bool~) main::$19 ← (byte) main::i#2 < (number) 5 @@ -766,10 +763,7 @@ Inlining cast *((byte*) CIA1_PORT_B_DDR#0) ← (unumber)(number) 0 Inlining cast (byte*) main::sc#0 ← (byte*)(number) $400 Inlining cast (unumber~) main::$20 ← (unumber)(number~) main::$1 Inlining cast (byte*) main::screen#0 ← (byte*)(number) $400 -Inlining cast (byte) main::row#0 ← (unumber)(number) 0 -Inlining cast (byte) main::col#0 ← (unumber)(number) 0 Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::ch#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 53266 Simplifying constant pointer cast (byte*) 56320 @@ -863,15 +857,12 @@ Simplifying constant integer cast 3 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $ff Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $80 Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $3f Simplifying constant integer cast 0 Simplifying constant integer cast 5 @@ -931,15 +922,12 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 7 Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $ff -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $80 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $3f Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 5 diff --git a/src/test/ref/test-multiply-16bit.log b/src/test/ref/test-multiply-16bit.log index 002fa3e5d..dc93601b1 100644 --- a/src/test/ref/test-multiply-16bit.log +++ b/src/test/ref/test-multiply-16bit.log @@ -728,7 +728,7 @@ mul16u_compare: scope:[mul16u_compare] from main::@2 (byte*) print_char_cursor#151 ← phi( main::@2/(byte*) print_char_cursor#138 ) (word) mul16u_compare::a#0 ← (number) 0 (word) mul16u_compare::b#0 ← (number) 0 - (byte) mul16u_compare::i#0 ← (number) 0 + (byte) mul16u_compare::i#0 ← (byte) 0 to:mul16u_compare::@1 mul16u_compare::@1: scope:[mul16u_compare] from mul16u_compare mul16u_compare::@10 (byte*) print_line_cursor#94 ← phi( mul16u_compare/(byte*) print_line_cursor#98 mul16u_compare::@10/(byte*) print_line_cursor#56 ) @@ -746,7 +746,7 @@ mul16u_compare::@12: scope:[mul16u_compare] from mul16u_compare::@1 (word) mul16u_compare::a#6 ← phi( mul16u_compare::@1/(word) mul16u_compare::a#9 ) (byte*) print_char_cursor#91 ← phi( mul16u_compare::@1/(byte*) print_char_cursor#2 ) (byte*) print_char_cursor#28 ← (byte*) print_char_cursor#91 - (byte) mul16u_compare::j#0 ← (number) 0 + (byte) mul16u_compare::j#0 ← (byte) 0 to:mul16u_compare::@2 mul16u_compare::@2: scope:[mul16u_compare] from mul16u_compare::@12 mul16u_compare::@5 (byte*) print_line_cursor#86 ← phi( mul16u_compare::@12/(byte*) print_line_cursor#90 mul16u_compare::@5/(byte*) print_line_cursor#65 ) @@ -1064,7 +1064,7 @@ mul16s_compare: scope:[mul16s_compare] from main::@3 (byte*) print_char_cursor#154 ← phi( main::@3/(byte*) print_char_cursor#25 ) (signed word) mul16s_compare::a#0 ← (number) -$7fff (signed word) mul16s_compare::b#0 ← (number) -$7fff - (byte) mul16s_compare::i#0 ← (number) 0 + (byte) mul16s_compare::i#0 ← (byte) 0 to:mul16s_compare::@1 mul16s_compare::@1: scope:[mul16s_compare] from mul16s_compare mul16s_compare::@10 (byte*) print_line_cursor#96 ← phi( mul16s_compare/(byte*) print_line_cursor#100 mul16s_compare::@10/(byte*) print_line_cursor#59 ) @@ -1082,7 +1082,7 @@ mul16s_compare::@12: scope:[mul16s_compare] from mul16s_compare::@1 (signed word) mul16s_compare::a#6 ← phi( mul16s_compare::@1/(signed word) mul16s_compare::a#9 ) (byte*) print_char_cursor#109 ← phi( mul16s_compare::@1/(byte*) print_char_cursor#2 ) (byte*) print_char_cursor#46 ← (byte*) print_char_cursor#109 - (byte) mul16s_compare::j#0 ← (number) 0 + (byte) mul16s_compare::j#0 ← (byte) 0 to:mul16s_compare::@2 mul16s_compare::@2: scope:[mul16s_compare] from mul16s_compare::@12 mul16s_compare::@5 (byte*) print_line_cursor#88 ← phi( mul16s_compare::@12/(byte*) print_line_cursor#92 mul16s_compare::@5/(byte*) print_line_cursor#69 ) @@ -2610,8 +2610,6 @@ Adding number conversion cast (snumber) 0 in (bool~) muls16s::$1 ← (signed wor Adding number conversion cast (snumber) 0 in (signed word) muls16s::j#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (word) mul16u_compare::a#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (word) mul16u_compare::b#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mul16u_compare::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mul16u_compare::j#0 ← (number) 0 Adding number conversion cast (unumber) $d2b in (number~) mul16u_compare::$4 ← (word) mul16u_compare::a#2 + (number) $d2b Adding number conversion cast (unumber) mul16u_compare::$4 in (number~) mul16u_compare::$4 ← (word) mul16u_compare::a#2 + (unumber)(number) $d2b Adding number conversion cast (unumber) $ffd in (number~) mul16u_compare::$5 ← (word) mul16u_compare::b#2 + (number) $ffd @@ -2623,8 +2621,6 @@ Adding number conversion cast (unumber) 0 in (byte) mul16u_compare::ok#2 ← (nu Adding number conversion cast (unumber) 2 in *((byte*) BGCOL#0) ← (number) 2 Adding number conversion cast (snumber) -$7fff in (signed word) mul16s_compare::a#0 ← (number) -$7fff Adding number conversion cast (snumber) -$7fff in (signed word) mul16s_compare::b#0 ← (number) -$7fff -Adding number conversion cast (unumber) 0 in (byte) mul16s_compare::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mul16s_compare::j#0 ← (number) 0 Adding number conversion cast (snumber) $d2b in (number~) mul16s_compare::$4 ← (signed word) mul16s_compare::a#2 + (number) $d2b Adding number conversion cast (snumber) mul16s_compare::$4 in (number~) mul16s_compare::$4 ← (signed word) mul16s_compare::a#2 + (snumber)(number) $d2b Adding number conversion cast (snumber) $ffd in (number~) mul16s_compare::$5 ← (signed word) mul16s_compare::b#2 + (number) $ffd @@ -2667,16 +2663,12 @@ Inlining cast (signed word) muls16s::i#0 ← (snumber)(number) 0 Inlining cast (signed word) muls16s::j#0 ← (snumber)(number) 0 Inlining cast (word) mul16u_compare::a#0 ← (unumber)(number) 0 Inlining cast (word) mul16u_compare::b#0 ← (unumber)(number) 0 -Inlining cast (byte) mul16u_compare::i#0 ← (unumber)(number) 0 -Inlining cast (byte) mul16u_compare::j#0 ← (unumber)(number) 0 Inlining cast (byte) mul16u_compare::ok#0 ← (unumber)(number) 1 Inlining cast (byte) mul16u_compare::ok#1 ← (unumber)(number) 0 Inlining cast (byte) mul16u_compare::ok#2 ← (unumber)(number) 0 Inlining cast *((byte*) BGCOL#0) ← (unumber)(number) 2 Inlining cast (signed word) mul16s_compare::a#0 ← (snumber)(number) -$7fff Inlining cast (signed word) mul16s_compare::b#0 ← (snumber)(number) -$7fff -Inlining cast (byte) mul16s_compare::i#0 ← (unumber)(number) 0 -Inlining cast (byte) mul16s_compare::j#0 ← (unumber)(number) 0 Inlining cast (byte) mul16s_compare::ok#0 ← (unumber)(number) 1 Inlining cast (byte) mul16s_compare::ok#1 ← (unumber)(number) 0 Inlining cast (byte) mul16s_compare::ok#2 ← (unumber)(number) 0 @@ -2731,8 +2723,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $d2b Simplifying constant integer cast $ffd Simplifying constant integer cast 1 @@ -2742,8 +2732,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 2 Simplifying constant integer cast -$7fff Simplifying constant integer cast -$7fff -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $d2b Simplifying constant integer cast $ffd Simplifying constant integer cast 1 @@ -2795,8 +2783,6 @@ Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $d2b Finalized unsigned number type (word) $ffd Finalized unsigned number type (byte) 1 @@ -2806,8 +2792,6 @@ Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Finalized signed number type (signed word) -$7fff Finalized signed number type (signed word) -$7fff -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed word) $d2b Finalized signed number type (signed word) $ffd Finalized unsigned number type (byte) 1 diff --git a/src/test/ref/test-multiply-8bit.log b/src/test/ref/test-multiply-8bit.log index 26266cbe8..da869b5db 100644 --- a/src/test/ref/test-multiply-8bit.log +++ b/src/test/ref/test-multiply-8bit.log @@ -898,13 +898,13 @@ mulf_tables_cmp::@11: scope:[mulf_tables_cmp] from mulf_tables_cmp::@10 mul8u_compare: scope:[mul8u_compare] from main::@4 (byte*) print_line_cursor#108 ← phi( main::@4/(byte*) print_line_cursor#6 ) (byte*) print_char_cursor#185 ← phi( main::@4/(byte*) print_char_cursor#23 ) - (byte) mul8u_compare::a#0 ← (number) 0 + (byte) mul8u_compare::a#0 ← (byte) 0 to:mul8u_compare::@1 mul8u_compare::@1: scope:[mul8u_compare] from mul8u_compare mul8u_compare::@10 (byte*) print_line_cursor#104 ← phi( mul8u_compare/(byte*) print_line_cursor#108 mul8u_compare::@10/(byte*) print_line_cursor#72 ) (byte*) print_char_cursor#183 ← phi( mul8u_compare/(byte*) print_char_cursor#185 mul8u_compare::@10/(byte*) print_char_cursor#159 ) (byte) mul8u_compare::a#7 ← phi( mul8u_compare/(byte) mul8u_compare::a#0 mul8u_compare::@10/(byte) mul8u_compare::a#1 ) - (byte) mul8u_compare::b#0 ← (number) 0 + (byte) mul8u_compare::b#0 ← (byte) 0 to:mul8u_compare::@2 mul8u_compare::@2: scope:[mul8u_compare] from mul8u_compare::@1 mul8u_compare::@5 (byte*) print_line_cursor#100 ← phi( mul8u_compare::@1/(byte*) print_line_cursor#104 mul8u_compare::@5/(byte*) print_line_cursor#83 ) @@ -2736,8 +2736,6 @@ Adding number conversion cast (snumber) 0 in (bool~) muls8s::$1 ← (signed byte Adding number conversion cast (snumber) 0 in (signed byte) muls8s::j#0 ← (number) 0 Adding number conversion cast (unumber) mulf_tables_cmp::$10 in (byte*~) mulf_tables_cmp::$11 ← (byte[$200]) mulf_sqr1_lo#0 + (number~) mulf_tables_cmp::$10 Adding number conversion cast (unumber) 2 in *((byte*) BGCOL#0) ← (number) 2 -Adding number conversion cast (unumber) 0 in (byte) mul8u_compare::a#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) mul8u_compare::b#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (byte) mul8u_compare::ok#0 ← (number) 1 Adding number conversion cast (unumber) 0 in (byte) mul8u_compare::ok#1 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) mul8u_compare::$9 ← (byte) mul8u_compare::ok#3 == (number) 0 @@ -2789,8 +2787,6 @@ Inlining cast (unumber~) mulf_tables_cmp::$13 ← (unumber)(number~) mulf_tables Inlining cast *((byte*) BGCOL#0) ← (unumber)(number) 2 Inlining cast (word~) mulf_tables_cmp::$5 ← (word)(byte*) mulf_tables_cmp::asm_sqr#4 Inlining cast (word~) mulf_tables_cmp::$8 ← (word)(byte*) mulf_tables_cmp::kc_sqr#4 -Inlining cast (byte) mul8u_compare::a#0 ← (unumber)(number) 0 -Inlining cast (byte) mul8u_compare::b#0 ← (unumber)(number) 0 Inlining cast (byte) mul8u_compare::ok#0 ← (unumber)(number) 1 Inlining cast (byte) mul8u_compare::ok#1 ← (unumber)(number) 0 Inlining cast (byte) mul8u_compare::ok#2 ← (unumber)(number) 0 @@ -2854,8 +2850,6 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 255 Simplifying constant integer cast 2 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 0 Simplifying constant integer cast 0 @@ -2913,8 +2907,6 @@ Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized signed number type (signed byte) 0 Finalized unsigned number type (byte) 2 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/test-scroll-up.log b/src/test/ref/test-scroll-up.log index a2509db46..24bd9b4de 100644 --- a/src/test/ref/test-scroll-up.log +++ b/src/test/ref/test-scroll-up.log @@ -56,13 +56,13 @@ scrollup2: scope:[scrollup2] from main::@1 (byte*) scrollup2::line1#0 ← (byte*) screen#0 (byte*~) scrollup2::$0 ← (byte*) screen#0 + (number) $28 (byte*) scrollup2::line2#0 ← (byte*~) scrollup2::$0 - (byte) scrollup2::l#0 ← (number) 0 + (byte) scrollup2::l#0 ← (byte) 0 to:scrollup2::@1 scrollup2::@1: scope:[scrollup2] from scrollup2 scrollup2::@3 (byte) scrollup2::l#4 ← phi( scrollup2/(byte) scrollup2::l#0 scrollup2::@3/(byte) scrollup2::l#1 ) (byte*) scrollup2::line1#3 ← phi( scrollup2/(byte*) scrollup2::line1#0 scrollup2::@3/(byte*) scrollup2::line1#4 ) (byte*) scrollup2::line2#3 ← phi( scrollup2/(byte*) scrollup2::line2#0 scrollup2::@3/(byte*) scrollup2::line2#4 ) - (byte) scrollup2::c#0 ← (number) 0 + (byte) scrollup2::c#0 ← (byte) 0 to:scrollup2::@2 scrollup2::@2: scope:[scrollup2] from scrollup2::@1 scrollup2::@2 (byte) scrollup2::l#3 ← phi( scrollup2::@1/(byte) scrollup2::l#4 scrollup2::@2/(byte) scrollup2::l#3 ) @@ -218,8 +218,6 @@ Adding number conversion cast (unumber) $28 in (bool~) scrollup1::$3 ← (byte) Adding number conversion cast (unumber) $28 in (word) scrollup1::line#1 ← (word) scrollup1::line#3 + (number) $28 Adding number conversion cast (unumber) scrollup1::$4 in (bool~) scrollup1::$5 ← (word) scrollup1::line#1 < (number~) scrollup1::$4 Adding number conversion cast (unumber) $28 in (byte*~) scrollup2::$0 ← (byte*) screen#0 + (number) $28 -Adding number conversion cast (unumber) 0 in (byte) scrollup2::l#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) scrollup2::c#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (word) scrollup3::line#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) scrollup3::c#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (number~) scrollup3::$0 ← (word) scrollup3::l2#2 + (number) $28 @@ -232,8 +230,6 @@ Inlining cast (byte*) screen#0 ← (byte*)(number) $400 Inlining cast (word) scrollup1::line#0 ← (unumber)(number) 0 Inlining cast (byte) scrollup1::c#0 ← (unumber)(number) 0 Inlining cast (unumber~) scrollup1::$6 ← (unumber)(number~) scrollup1::$4 -Inlining cast (byte) scrollup2::l#0 ← (unumber)(number) 0 -Inlining cast (byte) scrollup2::c#0 ← (unumber)(number) 0 Inlining cast (word) scrollup3::line#0 ← (unumber)(number) 0 Inlining cast (byte) scrollup3::c#0 ← (unumber)(number) 0 Inlining cast (unumber~) scrollup3::$4 ← (unumber)(number~) scrollup3::$2 @@ -247,8 +243,6 @@ Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $28 Simplifying constant integer cast $28 @@ -261,8 +255,6 @@ Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $28 diff --git a/src/test/ref/test-signed-word-minus-byte.log b/src/test/ref/test-signed-word-minus-byte.log index f23922655..9dde55445 100644 --- a/src/test/ref/test-signed-word-minus-byte.log +++ b/src/test/ref/test-signed-word-minus-byte.log @@ -187,7 +187,7 @@ main::@3: scope:[main] from main (byte*) print_line_cursor#13 ← phi( main/(byte*) print_line_cursor#4 ) (byte*) print_line_cursor#5 ← (byte*) print_line_cursor#13 (byte*) print_char_cursor#16 ← (byte*) print_char_cursor#37 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@3 main::@7 (byte) main::i#6 ← phi( main::@3/(byte) main::i#0 main::@7/(byte) main::i#1 ) @@ -462,7 +462,6 @@ Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f Adding number conversion cast (unumber) $3e8 in (byte*~) print_cls::$0 ← (byte*) print_screen#2 + (number) $3e8 Adding number conversion cast (snumber) $4d2 in (signed word) main::w1#0 ← (number) $4d2 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (snumber) $5b in (number~) main::$1 ← (signed word) main::w1#2 - (number) $5b Adding number conversion cast (snumber) main::$1 in (number~) main::$1 ← (signed word) main::w1#2 - (snumber)(number) $5b Adding number conversion cast (snumber) $29 in (number~) main::$2 ← (signed word) main::w2#0 - (number) $29 @@ -471,7 +470,6 @@ Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Inlining cast (word~) print_sword::$2 ← (word)(signed word) print_sword::w#4 Inlining cast (signed word) main::w1#0 ← (snumber)(number) $4d2 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $28 @@ -480,7 +478,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast $3e8 Simplifying constant integer cast $4d2 -Simplifying constant integer cast 0 Simplifying constant integer cast $5b Simplifying constant integer cast $29 Successful SSA optimization PassNCastSimplification @@ -490,7 +487,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized unsigned number type (word) $3e8 Finalized signed number type (signed word) $4d2 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) $5b Finalized signed number type (signed byte) $29 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/travis1.log b/src/test/ref/travis1.log index ee06f90c2..48d9818c1 100644 --- a/src/test/ref/travis1.log +++ b/src/test/ref/travis1.log @@ -112,7 +112,7 @@ main: scope:[main] from @21 (byte) action_count#17 ← phi( @21/(byte) action_count#16 ) (byte*) print_line_cursor#30 ← phi( @21/(byte*) print_line_cursor#28 ) (byte*) print_char_cursor#36 ← phi( @21/(byte*) print_char_cursor#34 ) - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@2 (byte) main::i#5 ← phi( main/(byte) main::i#0 main::@2/(byte) main::i#1 ) @@ -396,14 +396,12 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) $28 in (byte*~) print_ln::$0 ← (byte*) print_line_cursor#13 + (number) $28 Adding number conversion cast (unumber) 0 in (byte) action_count#0 ← (number) 0 Adding number conversion cast (unumber) 5 in (byte) READY_FRAMES#0 ← (number) 5 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (bool~) game_ready::$0 ← (byte) action_count#9 == (number) 0 Adding number conversion cast (unumber) 0 in (bool~) game_ready::$3 ← (byte) action_count#3 == (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Inlining cast (byte) action_count#0 ← (unumber)(number) 0 Inlining cast (byte) READY_FRAMES#0 ← (unumber)(number) 5 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $28 @@ -411,14 +409,12 @@ Simplifying constant integer cast 0 Simplifying constant integer cast 5 Simplifying constant integer cast 0 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 5 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Inversing boolean not [71] (bool~) game_ready::$1 ← (byte) action_count#9 != (byte) 0 from [70] (bool~) game_ready::$0 ← (byte) action_count#9 == (byte) 0 Successful SSA optimization Pass2UnaryNotSimplification diff --git a/src/test/ref/type-inference.log b/src/test/ref/type-inference.log index 3a790c87f..2ca7f1659 100644 --- a/src/test/ref/type-inference.log +++ b/src/test/ref/type-inference.log @@ -7,7 +7,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (word*) main::screen#0 ← ((word*)) (number) $400 - (byte) main::b#0 ← (number) 0 + (byte) main::b#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::b#2 ← phi( main/(byte) main::b#0 main::@1/(byte) main::b#1 ) @@ -47,18 +47,14 @@ SYMBOL TABLE SSA (word*) main::screen (word*) main::screen#0 -Adding number conversion cast (unumber) 0 in (byte) main::b#0 ← (number) 0 Adding number conversion cast (unumber) -$30 in (number~) main::$0 ← (number) -$30 + (byte) main::b#2 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (unumber)(number) -$30 + (byte) main::b#2 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (word*) main::screen#0 ← (word*)(number) $400 -Inlining cast (byte) main::b#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (word*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast -$30 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) -$30 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$0 ← (byte) -$30 + (byte) main::b#2 diff --git a/src/test/ref/type-mix.log b/src/test/ref/type-mix.log index ae35ecba3..99837d12c 100644 --- a/src/test/ref/type-mix.log +++ b/src/test/ref/type-mix.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA main: scope:[main] from @1 (signed word) main::w#0 ← (number) 0 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -54,21 +54,17 @@ SYMBOL TABLE SSA (signed word) main::w#2 Adding number conversion cast (snumber) 0 in (signed word) main::w#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (snumber) $c in (number~) main::$0 ← (signed word) main::w#2 - (number) $c Adding number conversion cast (snumber) main::$0 in (number~) main::$0 ← (signed word) main::w#2 - (snumber)(number) $c Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (signed word) main::w#0 ← (snumber)(number) 0 Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast $c Successful SSA optimization PassNCastSimplification Finalized signed number type (signed byte) 0 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) $c Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to signed word in (snumber~) main::$0 ← (signed word) main::w#2 - (signed byte) $c diff --git a/src/test/ref/type-signed.log b/src/test/ref/type-signed.log index abb89b556..2acfefd68 100644 --- a/src/test/ref/type-signed.log +++ b/src/test/ref/type-signed.log @@ -153,7 +153,7 @@ main: scope:[main] from @20 (byte*) print_char_cursor#47 ← phi( @20/(byte*) print_char_cursor#45 ) (signed word) main::a#0 ← (number) -$3ff (word) main::b#0 ← (number) $1024 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@6 (byte) main::i#6 ← phi( main/(byte) main::i#0 main::@6/(byte) main::i#1 ) @@ -402,7 +402,6 @@ Adding number conversion cast (unumber) $f in (number~) print_byte::$2 ← (byte Adding number conversion cast (unumber) print_byte::$2 in (number~) print_byte::$2 ← (byte) print_byte::b#3 & (unumber)(number) $f Adding number conversion cast (snumber) -$3ff in (signed word) main::a#0 ← (number) -$3ff Adding number conversion cast (unumber) $1024 in (word) main::b#0 ← (number) $1024 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (snumber) -7 in (signed word) main::a#1 ← (signed word) main::a#2 + (number) -7 Adding number conversion cast (unumber) $141 in (word) main::b#1 ← (word) main::b#2 + (number) $141 Successful SSA optimization PassNAddNumberTypeConversions @@ -410,7 +409,6 @@ Inlining cast (byte*) print_screen#0 ← (byte*)(number) $400 Inlining cast (word~) print_sword::$2 ← (word)(signed word) print_sword::w#3 Inlining cast (signed word) main::a#0 ← (snumber)(number) -$3ff Inlining cast (word) main::b#0 ← (unumber)(number) $1024 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast $28 @@ -419,7 +417,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast $f Simplifying constant integer cast -$3ff Simplifying constant integer cast $1024 -Simplifying constant integer cast 0 Simplifying constant integer cast -7 Simplifying constant integer cast $141 Successful SSA optimization PassNCastSimplification @@ -429,7 +426,6 @@ Finalized unsigned number type (byte) 4 Finalized unsigned number type (byte) $f Finalized signed number type (signed word) -$3ff Finalized unsigned number type (word) $1024 -Finalized unsigned number type (byte) 0 Finalized signed number type (signed byte) -7 Finalized unsigned number type (word) $141 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/typeinference-problem.log b/src/test/ref/typeinference-problem.log index 19f0d026a..8bb437c08 100644 --- a/src/test/ref/typeinference-problem.log +++ b/src/test/ref/typeinference-problem.log @@ -5,7 +5,7 @@ CONTROL FLOW GRAPH SSA (byte[$100]) table#0 ← { fill( $100, 0) } to:@1 main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -42,19 +42,15 @@ SYMBOL TABLE SSA (byte[$100]) table (byte[$100]) table#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $ff in (number~) main::$0 ← (number) $ff - (byte) main::i#2 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (unumber)(number) $ff - (byte) main::i#2 Adding number conversion cast (unumber) 0 in *((byte[$100]) table#0 + (unumber~) main::$0) ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast *((byte[$100]) table#0 + (unumber~) main::$0) ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 Simplifying constant integer cast $ff Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/unroll-screenfill-for-double.log b/src/test/ref/unroll-screenfill-for-double.log index 744c7c60f..3bdb630ac 100644 --- a/src/test/ref/unroll-screenfill-for-double.log +++ b/src/test/ref/unroll-screenfill-for-double.log @@ -7,11 +7,11 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::x#0 ← (number) 0 + (byte) main::x#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::x#4 ← phi( main/(byte) main::x#0 main::@3/(byte) main::x#1 ) - (byte) main::line#0 ← (number) 0 + (byte) main::line#0 ← (byte) 0 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::x#2 ← phi( main::@1/(byte) main::x#4 main::@2/(byte) main::x#2 ) @@ -66,22 +66,14 @@ SYMBOL TABLE SSA (byte) main::x#3 (byte) main::x#4 -Adding number conversion cast (unumber) 0 in (byte) main::x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::line#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (number~) main::$0 ← (byte) main::line#2 * (number) $28 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::line#2 * (unumber)(number) $28 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::x#0 ← (unumber)(number) 0 -Inlining cast (byte) main::line#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$0 ← (byte) main::line#2 * (byte) $28 diff --git a/src/test/ref/unroll-screenfill-for.log b/src/test/ref/unroll-screenfill-for.log index d7c71e534..56cca644c 100644 --- a/src/test/ref/unroll-screenfill-for.log +++ b/src/test/ref/unroll-screenfill-for.log @@ -7,11 +7,11 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::x#0 ← (number) 0 + (byte) main::x#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::x#4 ← phi( main/(byte) main::x#0 main::@3/(byte) main::x#1 ) - (byte) main::line#0 ← (number) 0 + (byte) main::line#0 ← (byte) 0 to:main::@2 main::@2: scope:[main] from main::@1 main::@2 (byte) main::x#2 ← phi( main::@1/(byte) main::x#4 main::@2/(byte) main::x#2 ) @@ -66,22 +66,14 @@ SYMBOL TABLE SSA (byte) main::x#3 (byte) main::x#4 -Adding number conversion cast (unumber) 0 in (byte) main::x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::line#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (number~) main::$0 ← (byte) main::line#2 * (number) $28 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::line#2 * (unumber)(number) $28 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::x#0 ← (unumber)(number) 0 -Inlining cast (byte) main::line#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions Inferred type updated to byte in (unumber~) main::$0 ← (byte) main::line#2 * (byte) $28 diff --git a/src/test/ref/unroll-screenfill-while.log b/src/test/ref/unroll-screenfill-while.log index 7de30b6bf..19a92b901 100644 --- a/src/test/ref/unroll-screenfill-while.log +++ b/src/test/ref/unroll-screenfill-while.log @@ -10,7 +10,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 - (byte) main::x#0 ← (number) 0 + (byte) main::x#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@4 (byte) main::x#5 ← phi( main/(byte) main::x#0 main::@4/(byte) main::x#1 ) @@ -76,24 +76,20 @@ SYMBOL TABLE SSA (byte) main::x#4 (byte) main::x#5 -Adding number conversion cast (unumber) 0 in (byte) main::x#0 ← (number) 0 Adding number conversion cast (unumber) 0 in (byte) main::line#0 ← (number) 0 Adding number conversion cast (unumber) $19 in (bool~) main::$0 ← (byte) main::line#2 != (number) $19 Adding number conversion cast (unumber) $28 in (number~) main::$1 ← (byte) main::line#3 * (number) $28 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (byte) main::line#3 * (unumber)(number) $28 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::x#0 ← (unumber)(number) 0 Inlining cast (byte) main::line#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $19 Simplifying constant integer cast $28 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $19 Finalized unsigned number type (byte) $28 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/unused-vars.log b/src/test/ref/unused-vars.log index 6f6195693..c65256342 100644 --- a/src/test/ref/unused-vars.log +++ b/src/test/ref/unused-vars.log @@ -27,7 +27,7 @@ main::@3: scope:[main] from main (byte) b#7 ← phi( main/(byte) b#5 ) (byte) b#1 ← (byte) b#7 (byte) b#2 ← ++ (byte) b#1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main::@1 main::@3 (byte) b#8 ← phi( main::@1/(byte) b#8 main::@3/(byte) b#2 ) @@ -112,24 +112,20 @@ SYMBOL TABLE SSA Adding number conversion cast (unumber) $0 in (byte) b#0 ← (number~) $0 Adding number conversion cast (unumber) 2 in (byte) main::col#0 ← (number) 2 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 2 in (byte) s::return#1 ← (number) 2 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte) b#0 ← (unumber)(number~) $0 Inlining cast (byte) main::col#0 ← (unumber)(number) 2 Inlining cast (byte*) main::COLS#0 ← (byte*)(number) $d800 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte) s::return#1 ← (unumber)(number) 2 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 2 Simplifying constant pointer cast (byte*) 55296 -Simplifying constant integer cast 0 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 2 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 2 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) b#1 = (byte) b#7 diff --git a/src/test/ref/unusedblockproblem.log b/src/test/ref/unusedblockproblem.log index c7b95d9d2..b20f242cf 100644 --- a/src/test/ref/unusedblockproblem.log +++ b/src/test/ref/unusedblockproblem.log @@ -18,7 +18,7 @@ main::@2: scope:[main] from main::@1 *((byte*) main::SCREEN#0) ← ++ *((byte*) main::SCREEN#0) to:main::@1 main::@3: scope:[main] from main::@1 - (byte) main::line#0 ← (number) 0 + (byte) main::line#0 ← (byte) 0 to:main::@7 main::@7: scope:[main] from main::@3 main::@7 (byte) main::line#2 ← phi( main::@3/(byte) main::line#0 main::@7/(byte) main::line#1 ) @@ -56,16 +56,10 @@ SYMBOL TABLE SSA (byte) main::line#1 (byte) main::line#2 -Adding number conversion cast (unumber) 0 in (byte) main::line#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 -Inlining cast (byte) main::line#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$0 [8] if((byte) main::line#1!=rangelast(0,$18)) goto main::@7 Successful SSA optimization Pass2ConditionalJumpSimplification Constant (const byte*) main::SCREEN#0 = (byte*) 1024 diff --git a/src/test/ref/var-register.log b/src/test/ref/var-register.log index 151d45bdb..5008412c2 100644 --- a/src/test/ref/var-register.log +++ b/src/test/ref/var-register.log @@ -7,16 +7,16 @@ CONTROL FLOW GRAPH SSA @begin: scope:[] from to:@2 main: scope:[main] from @2 - (byte) main::x#0 ← (number) 0 + (byte) main::x#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@5 (byte) main::x#7 ← phi( main/(byte) main::x#0 main::@5/(byte) main::x#1 ) - (byte) main::y#0 ← (number) 0 + (byte) main::y#0 ← (byte) 0 to:main::@2 main::@2: scope:[main] from main::@1 main::@4 (byte) main::y#4 ← phi( main::@1/(byte) main::y#0 main::@4/(byte) main::y#1 ) (byte) main::x#4 ← phi( main::@1/(byte) main::x#7 main::@4/(byte) main::x#6 ) - (byte) main::a#0 ← (number) 0 + (byte) main::a#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@7 (byte) main::y#2 ← phi( main::@2/(byte) main::y#4 main::@7/(byte) main::y#5 ) @@ -119,24 +119,10 @@ SYMBOL TABLE SSA (byte) print::val#0 (byte) print::val#1 -Adding number conversion cast (unumber) 0 in (byte) main::x#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::y#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::a#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::x#0 ← (unumber)(number) 0 -Inlining cast (byte) main::y#0 ← (unumber)(number) 0 -Inlining cast (byte) main::a#0 ← (unumber)(number) 0 Inlining cast (byte*) print::SCREEN#0 ← (byte*)(number) $400 Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant pointer cast (byte*) 1024 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::val1#0 = (byte~) main::$0 Alias (byte) main::a#2 = (byte) main::a#3 Alias (byte) main::x#2 = (byte) main::x#5 (byte) main::x#6 (byte) main::x#3 diff --git a/src/test/ref/voronoi.log b/src/test/ref/voronoi.log index d627358dd..56d27b346 100644 --- a/src/test/ref/voronoi.log +++ b/src/test/ref/voronoi.log @@ -124,12 +124,12 @@ initscreen::@return: scope:[initscreen] from initscreen::@1 to:@return render: scope:[render] from main::@1 (byte*) render::colline#0 ← (byte*) COLORS#0 - (byte) render::y#0 ← (number) 0 + (byte) render::y#0 ← (byte) 0 to:render::@1 render::@1: scope:[render] from render render::@3 (byte*) render::colline#5 ← phi( render/(byte*) render::colline#0 render::@3/(byte*) render::colline#1 ) (byte) render::y#4 ← phi( render/(byte) render::y#0 render::@3/(byte) render::y#1 ) - (byte) render::x#0 ← (number) 0 + (byte) render::x#0 ← (byte) 0 to:render::@2 render::@2: scope:[render] from render::@1 render::@5 (byte*) render::colline#4 ← phi( render::@1/(byte*) render::colline#5 render::@5/(byte*) render::colline#2 ) @@ -594,8 +594,6 @@ Adding number conversion cast (unumber) animate::$18 in (number~) animate::$18 Adding number conversion cast (unumber) 3 in (unumber~) animate::$18 ← *((byte[]) XPOS#0 + (number) 3) - (unumber)(number) $28 Adding number conversion cast (unumber) 3 in *((byte[]) XPOS#0 + (number) 3) ← (unumber~) animate::$18 Adding number conversion cast (unumber) $3e8 in (byte*~) initscreen::$0 ← (byte*) SCREEN#0 + (number) $3e8 -Adding number conversion cast (unumber) 0 in (byte) render::y#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) render::x#0 ← (number) 0 Adding number conversion cast (unumber) $28 in (byte*~) render::$2 ← (byte*) render::colline#3 + (number) $28 Adding number conversion cast (unumber) $ff in (byte) findcol::mindiff#0 ← (number) $ff Adding number conversion cast (unumber) 0 in (byte) findcol::mincol#0 ← (number) 0 @@ -615,8 +613,6 @@ Inlining cast *((byte[]) YPOS#0 + (unumber)(number) 0) ← (unumber)(number) 0 Inlining cast *((byte[]) XPOS#0 + (unumber)(number) 1) ← (unumber)(number) $28 Inlining cast *((byte[]) YPOS#0 + (unumber)(number) 2) ← (unumber)(number) 0 Inlining cast *((byte[]) YPOS#0 + (unumber)(number) 3) ← (unumber)(number) $19 -Inlining cast (byte) render::y#0 ← (unumber)(number) 0 -Inlining cast (byte) render::x#0 ← (unumber)(number) 0 Inlining cast (byte) findcol::mindiff#0 ← (unumber)(number) $ff Inlining cast (byte) findcol::mincol#0 ← (unumber)(number) 0 Inlining cast (byte) findcol::i#0 ← (unumber)(number) 0 @@ -688,8 +684,6 @@ Simplifying constant integer cast 3 Simplifying constant integer cast $28 Simplifying constant integer cast 3 Simplifying constant integer cast $3e8 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Simplifying constant integer cast $28 Simplifying constant integer cast $ff Simplifying constant integer cast 0 @@ -742,8 +736,6 @@ Finalized unsigned number type (byte) 3 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) 3 Finalized unsigned number type (word) $3e8 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) $28 Finalized unsigned number type (byte) $ff Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/wfragment1.log b/src/test/ref/wfragment1.log index 004643fd9..6e9d1eda5 100644 --- a/src/test/ref/wfragment1.log +++ b/src/test/ref/wfragment1.log @@ -32,7 +32,7 @@ CONTROL FLOW GRAPH SSA (word[MAX_OBJECTS#0]) OBJ_WORLD_X#0 ← { fill( MAX_OBJECTS#0, 0) } to:@22 main: scope:[main] from @22 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@3 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@3/(byte) main::i#1 ) @@ -101,18 +101,14 @@ SYMBOL TABLE SSA (bool) move_enemy::return#3 Adding number conversion cast (unumber) $10 in (byte) MAX_OBJECTS#0 ← (number) $10 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in *((word[MAX_OBJECTS#0]) OBJ_WORLD_X#0 + (byte~) move_enemy::$0) ← *((word[MAX_OBJECTS#0]) OBJ_WORLD_X#0 + (byte~) move_enemy::$0) - (number) 1 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte) MAX_OBJECTS#0 ← (unumber)(number) $10 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast $10 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) $10 -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte) main::i#2 = (byte) main::i#3 diff --git a/src/test/ref/word-array-1.log b/src/test/ref/word-array-1.log index 481d12616..d2e57964a 100644 --- a/src/test/ref/word-array-1.log +++ b/src/test/ref/word-array-1.log @@ -9,7 +9,7 @@ main: scope:[main] from @1 (word[]) main::words#0 ← { (number) $3031, (number) $3233, (number) $3435, (number) $3637 } (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 (byte) main::idx#0 ← (number) 0 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::idx#4 ← phi( main/(byte) main::idx#0 main::@1/(byte) main::idx#3 ) @@ -68,13 +68,11 @@ SYMBOL TABLE SSA (word[]) main::words#0 Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (word) to elements in (word[]) main::words#0 ← { (word)(number) $3031, (word)(number) $3233, (word)(number) $3435, (word)(number) $3637 } Successful SSA optimization PassNAddArrayNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast $3031 Simplifying constant integer cast $3233 @@ -82,10 +80,8 @@ Simplifying constant integer cast $3435 Simplifying constant integer cast $3637 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$2 [16] if((byte) main::i#1!=rangelast(0,3)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification diff --git a/src/test/ref/word-array-2.log b/src/test/ref/word-array-2.log index 26307f79b..5374042a2 100644 --- a/src/test/ref/word-array-2.log +++ b/src/test/ref/word-array-2.log @@ -8,7 +8,7 @@ CONTROL FLOW GRAPH SSA (word[$100]) words#0 ← { fill( $100, 0) } to:@1 main: scope:[main] from @1 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -67,26 +67,22 @@ SYMBOL TABLE SSA (word[$100]) words (word[$100]) words#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $100 in (number~) main::$3 ← (word~) main::$2 * (number) $100 Adding number conversion cast (unumber) main::$3 in (number~) main::$3 ← (word~) main::$2 * (unumber)(number) $100 Adding number conversion cast (unumber) main::$4 in (number~) main::$4 ← (unumber~) main::$3 + (byte) main::i#2 Adding number conversion cast (unumber) 0 in (number~) main::$8 ← (number) 0 * (const byte) SIZEOF_WORD Adding number conversion cast (unumber) main::$8 in (number~) main::$8 ← (unumber)(number) 0 * (const byte) SIZEOF_WORD Successful SSA optimization PassNAddNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (word~) main::$1 ← (word)(byte) main::i#2 Inlining cast (word~) main::$2 ← (word)(byte) main::i#2 Inlining cast (word*) main::SCREEN#0 ← (word*)(number) $400 Inlining cast (word~) main::$0 ← (word)(number) $ff Successful SSA optimization Pass2InlineCast -Simplifying constant integer cast 0 Simplifying constant integer cast $100 Simplifying constant pointer cast (word*) 1024 Simplifying constant integer cast $ff Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $100 Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions diff --git a/src/test/ref/word-pointer-compound.log b/src/test/ref/word-pointer-compound.log index 2edb48126..15489d149 100644 --- a/src/test/ref/word-pointer-compound.log +++ b/src/test/ref/word-pointer-compound.log @@ -13,7 +13,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (word[]) main::words#0 ← { (number) $3031, (number) $3233, (number) $3435 } - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -87,7 +87,6 @@ SYMBOL TABLE SSA (word[]) main::words (word[]) main::words#0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) $101 in *((word[]) main::words#0 + (byte~) main::$7) ← *((word[]) main::words#0 + (byte~) main::$7) + (number) $101 Adding number conversion cast (unumber) 0 in (number~) main::$8 ← (number) 0 * (const byte) SIZEOF_WORD Adding number conversion cast (unumber) main::$8 in (number~) main::$8 ← (unumber)(number) 0 * (const byte) SIZEOF_WORD @@ -110,13 +109,11 @@ Adding number conversion cast (unumber) 5 in *((byte*) main::SCREEN#0 + (number) Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (word) to elements in (word[]) main::words#0 ← { (word)(number) $3031, (word)(number) $3233, (word)(number) $3435 } Successful SSA optimization PassNAddArrayNumberTypeConversions -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast $3031 Simplifying constant integer cast $3233 Simplifying constant integer cast $3435 -Simplifying constant integer cast 0 Simplifying constant integer cast $101 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 @@ -132,7 +129,6 @@ Simplifying constant integer cast 4 Simplifying constant integer cast 2 Simplifying constant integer cast 5 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (word) $101 Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 0 diff --git a/src/test/ref/word-pointer-iteration.log b/src/test/ref/word-pointer-iteration.log index 2bda5ab0a..f98ff815f 100644 --- a/src/test/ref/word-pointer-iteration.log +++ b/src/test/ref/word-pointer-iteration.log @@ -10,7 +10,7 @@ main: scope:[main] from @1 (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 (byte) main::idx#0 ← (number) 0 (word*) main::wp#0 ← (word[]) main::words#0 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -73,13 +73,11 @@ SYMBOL TABLE SSA (word*) main::wp#2 Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (word) to elements in (word[]) main::words#0 ← { (word)(number) $3130, (word)(number) $3332, (word)(number) $3534, (word)(number) $3736 } Successful SSA optimization PassNAddArrayNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast $3130 Simplifying constant integer cast $3332 @@ -87,10 +85,8 @@ Simplifying constant integer cast $3534 Simplifying constant integer cast $3736 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (word[]) main::words#0 = (word*) main::wp#0 Successful SSA optimization Pass2AliasElimination diff --git a/src/test/ref/word-pointer-math.log b/src/test/ref/word-pointer-math.log index d26120e9b..99f3cbce8 100644 --- a/src/test/ref/word-pointer-math.log +++ b/src/test/ref/word-pointer-math.log @@ -9,7 +9,7 @@ main: scope:[main] from @1 (word[]) main::words#0 ← { (number) $3130, (number) $3332, (number) $3534, (number) $3736 } (byte*) main::SCREEN#0 ← ((byte*)) (number) $400 (byte) main::idx#0 ← (number) 0 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::idx#4 ← phi( main/(byte) main::idx#0 main::@1/(byte) main::idx#3 ) @@ -70,13 +70,11 @@ SYMBOL TABLE SSA (word[]) main::words#0 Adding number conversion cast (unumber) 0 in (byte) main::idx#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Successful SSA optimization PassNAddNumberTypeConversions Adding number conversion cast (word) to elements in (word[]) main::words#0 ← { (word)(number) $3130, (word)(number) $3332, (word)(number) $3534, (word)(number) $3736 } Successful SSA optimization PassNAddArrayNumberTypeConversions Inlining cast (byte*) main::SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte) main::idx#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast $3130 Simplifying constant integer cast $3332 @@ -84,10 +82,8 @@ Simplifying constant integer cast $3534 Simplifying constant integer cast $3736 Simplifying constant pointer cast (byte*) 1024 Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Simple Condition (bool~) main::$3 [17] if((byte) main::i#1!=rangelast(0,3)) goto main::@1 Successful SSA optimization Pass2ConditionalJumpSimplification diff --git a/src/test/ref/wordexpr.log b/src/test/ref/wordexpr.log index d6d977a8d..fbcaca571 100644 --- a/src/test/ref/wordexpr.log +++ b/src/test/ref/wordexpr.log @@ -5,7 +5,7 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (word) main::b#0 ← (number) 0 - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@1 (byte) main::i#2 ← phi( main/(byte) main::i#0 main::@1/(byte) main::i#1 ) @@ -48,19 +48,15 @@ SYMBOL TABLE SSA (byte) main::i#2 Adding number conversion cast (unumber) 0 in (word) main::b#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) main::$0 in (number~) main::$1 ← (word) main::b#2 + (number~) main::$0 Adding number conversion cast (unumber) main::$1 in (number~) main::$1 ← (word) main::b#2 + (unumber~) main::$3 Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (word) main::b#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Inlining cast (unumber~) main::$3 ← (unumber)(number~) main::$0 Successful SSA optimization Pass2InlineCast Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (word) main::b#1 = (unumber~) main::$1 Successful SSA optimization Pass2AliasElimination diff --git a/src/test/ref/zpparammin.log b/src/test/ref/zpparammin.log index 66d931efc..2353e3031 100644 --- a/src/test/ref/zpparammin.log +++ b/src/test/ref/zpparammin.log @@ -15,7 +15,7 @@ CONTROL FLOW GRAPH SSA to:@3 main: scope:[main] from @3 (byte*) SCREEN2#4 ← phi( @3/(byte*) SCREEN2#5 ) - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@4 (byte*) SCREEN2#3 ← phi( main/(byte*) SCREEN2#4 main::@4/(byte*) SCREEN2#1 ) @@ -161,7 +161,6 @@ SYMBOL TABLE SSA (byte) sum2::return#3 (byte) sum2::return#4 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 Adding number conversion cast (unumber) 1 in (number~) main::$0 ← (byte) main::i#2 + (number) 1 Adding number conversion cast (unumber) main::$0 in (number~) main::$0 ← (byte) main::i#2 + (unumber)(number) 1 Adding number conversion cast (unumber) 2 in (number~) main::$1 ← (byte) main::i#2 + (number) 2 @@ -173,16 +172,13 @@ Adding number conversion cast (unumber) main::$4 in (number~) main::$4 ← (byte Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) SCREEN#0 ← (byte*)(number) $400 Inlining cast (byte*) SCREEN2#0 ← (byte*)(number~) $0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 1024 -Simplifying constant integer cast 0 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Simplifying constant integer cast 1 Simplifying constant integer cast 2 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 Finalized unsigned number type (byte) 1 Finalized unsigned number type (byte) 2 Finalized unsigned number type (byte) 1 diff --git a/src/test/ref/zpptr.log b/src/test/ref/zpptr.log index a119dc210..f8b75bbf3 100644 --- a/src/test/ref/zpptr.log +++ b/src/test/ref/zpptr.log @@ -7,16 +7,16 @@ CONTROL FLOW GRAPH SSA to:@1 main: scope:[main] from @1 (byte*) main::zpptr#0 ← ((byte*)) (number) $1000 - (byte) main::j#0 ← (number) 0 + (byte) main::j#0 ← (byte) 0 to:main::@1 main::@1: scope:[main] from main main::@5 (byte) main::j#6 ← phi( main/(byte) main::j#0 main::@5/(byte) main::j#1 ) - (byte) main::i#0 ← (number) 0 + (byte) main::i#0 ← (byte) 0 to:main::@2 main::@2: scope:[main] from main::@1 main::@4 (byte) main::j#4 ← phi( main::@1/(byte) main::j#6 main::@4/(byte) main::j#5 ) (byte) main::i#4 ← phi( main::@1/(byte) main::i#0 main::@4/(byte) main::i#1 ) - (byte) main::k#0 ← (number) 0 + (byte) main::k#0 ← (byte) 0 to:main::@3 main::@3: scope:[main] from main::@2 main::@3 (byte) main::k#2 ← phi( main::@2/(byte) main::k#0 main::@3/(byte) main::k#1 ) @@ -100,25 +100,11 @@ SYMBOL TABLE SSA (byte*) main::zpptr2#0 (byte*) main::zpptr2#1 -Adding number conversion cast (unumber) 0 in (byte) main::j#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::i#0 ← (number) 0 -Adding number conversion cast (unumber) 0 in (byte) main::k#0 ← (number) 0 -Successful SSA optimization PassNAddNumberTypeConversions Inlining cast (byte*) main::zpptr#0 ← (byte*)(number) $1000 -Inlining cast (byte) main::j#0 ← (unumber)(number) 0 -Inlining cast (byte) main::i#0 ← (unumber)(number) 0 -Inlining cast (byte) main::k#0 ← (unumber)(number) 0 Inlining cast (word~) main::$1 ← (word)(byte) main::j#2 Successful SSA optimization Pass2InlineCast Simplifying constant pointer cast (byte*) 4096 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 -Simplifying constant integer cast 0 Successful SSA optimization PassNCastSimplification -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Finalized unsigned number type (byte) 0 -Successful SSA optimization PassNFinalizeNumberTypeConversions Alias (byte*) main::zpptr2#0 = (byte*~) main::$0 Alias (word) main::w#0 = (word~) main::$1 Alias (byte*) main::zpptr2#1 = (byte*~) main::$2