From 0876603ca750eedf122d5d6c4145b1c9c8d34a86 Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Fri, 17 May 2019 08:55:04 +0200 Subject: [PATCH] Working on casts --- src/main/java/dk/camelot64/kickc/Compiler.java | 4 ++-- .../camelot64/kickc/model/operators/OperatorShiftLeft.java | 4 ---- .../camelot64/kickc/model/operators/OperatorShiftRight.java | 4 ---- .../kickc/passes/Pass2MultiplyToShiftRewriting.java | 5 +++-- src/test/java/dk/camelot64/kickc/test/TestPrograms.java | 2 +- 5 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java index 19d962e42..577463f7f 100644 --- a/src/main/java/dk/camelot64/kickc/Compiler.java +++ b/src/main/java/dk/camelot64/kickc/Compiler.java @@ -261,12 +261,11 @@ public class Compiler { optimizations.add(new Pass2TypeInference(program)); optimizations.add(new PassNEliminateUnusedVars(program, true)); optimizations.add(new Pass2EliminateRedundantCasts(program)); - optimizations.add(new Pass2NopCastElimination(program)); + //optimizations.add(new Pass2NopCastElimination(program)); optimizations.add(new Pass2EliminateUnusedBlocks(program)); optimizations.add(new Pass2RangeResolving(program)); optimizations.add(new Pass2ComparisonOptimization(program)); optimizations.add(new Pass2ConstantCallPointerIdentification(program)); - optimizations.add(new Pass2MultiplyToShiftRewriting(program)); optimizations.add(new Pass2SizeOfSimplification(program)); optimizations.add(new Pass2InlineDerefIdx(program)); optimizations.add(new Pass2DeInlineWordDerefIdx(program)); @@ -303,6 +302,7 @@ public class Compiler { private void pass2InlineConstants() { // Constant inlining optimizations - as the last step to ensure that constant identification has been completed List constantOptimizations = new ArrayList<>(); + constantOptimizations.add(new Pass2MultiplyToShiftRewriting(program)); constantOptimizations.add(new Pass2AliasElimination(program)); constantOptimizations.add(new Pass2ConstantInlining(program)); constantOptimizations.add(new Pass2ConstantStringConsolidation(program)); diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorShiftLeft.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorShiftLeft.java index c6c7f3f72..3350f82f7 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorShiftLeft.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorShiftLeft.java @@ -26,11 +26,7 @@ public class OperatorShiftLeft extends OperatorBinary { @Override public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { - if(SymbolType.isInteger(left) && SymbolType.isInteger(right)) { - return SymbolTypeConversion.convertedMathType( (SymbolTypeInteger) left, (SymbolTypeInteger)right); - } else { return left; - } } } diff --git a/src/main/java/dk/camelot64/kickc/model/operators/OperatorShiftRight.java b/src/main/java/dk/camelot64/kickc/model/operators/OperatorShiftRight.java index dc9c66a69..2f8a9dca0 100644 --- a/src/main/java/dk/camelot64/kickc/model/operators/OperatorShiftRight.java +++ b/src/main/java/dk/camelot64/kickc/model/operators/OperatorShiftRight.java @@ -25,11 +25,7 @@ public class OperatorShiftRight extends OperatorBinary { @Override public SymbolType inferType(SymbolTypeSimple left, SymbolTypeSimple right) { - if(SymbolType.isInteger(left) && SymbolType.isInteger(right)) { - return SymbolTypeConversion.convertedMathType( (SymbolTypeInteger) left, (SymbolTypeInteger)right); - } else { return left; - } } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass2MultiplyToShiftRewriting.java b/src/main/java/dk/camelot64/kickc/passes/Pass2MultiplyToShiftRewriting.java index cad43daf9..5664593e6 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass2MultiplyToShiftRewriting.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass2MultiplyToShiftRewriting.java @@ -6,6 +6,7 @@ import dk.camelot64.kickc.model.Program; 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.types.SymbolType; import dk.camelot64.kickc.model.values.*; import java.util.ListIterator; @@ -44,12 +45,12 @@ public class Pass2MultiplyToShiftRewriting extends Pass2SsaOptimization { if(Operators.MULTIPLY.equals(assignment.getOperator())) { getLog().append("Rewriting multiplication to use shift "+statement.toString(getProgram(), false)); assignment.setOperator(Operators.SHIFT_LEFT); - assignment.setrValue2(new ConstantInteger((long)power2)); + assignment.setrValue2(new ConstantInteger((long)power2, SymbolType.BYTE)); optimized = true; } else if(Operators.DIVIDE.equals(assignment.getOperator())) { getLog().append("Rewriting division to use shift "+statement.toString(getProgram(), false)); assignment.setOperator(Operators.SHIFT_RIGHT); - assignment.setrValue2(new ConstantInteger((long)power2)); + assignment.setrValue2(new ConstantInteger((long)power2, SymbolType.BYTE)); optimized = true; } } diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java index 4c242b507..66978362f 100644 --- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java +++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java @@ -333,7 +333,7 @@ public class TestPrograms { @Test public void testPointerCast2() throws IOException, URISyntaxException { - compileAndCompare("pointer-cast-2"); + compileAndCompare("pointer-cast-2", log()); } @Test