From 8d494cb58710f20b6befd3b375ecdf263ef01bfb Mon Sep 17 00:00:00 2001 From: jespergravgaard Date: Sun, 3 Nov 2019 20:41:07 +0100 Subject: [PATCH] Removed early const data structure. --- src/main/java/dk/camelot64/kickc/model/Program.java | 11 ----------- .../kickc/passes/Pass0GenerateStatementSequence.java | 6 ++---- .../passes/Pass1EarlyConstantIdentification.java | 6 ------ .../Pass1GenerateSingleStaticAssignmentForm.java | 6 ++---- .../kickc/passes/PassNAssertConstantModification.java | 5 +---- 5 files changed, 5 insertions(+), 29 deletions(-) diff --git a/src/main/java/dk/camelot64/kickc/model/Program.java b/src/main/java/dk/camelot64/kickc/model/Program.java index 598eb5ad5..3284f58c7 100644 --- a/src/main/java/dk/camelot64/kickc/model/Program.java +++ b/src/main/java/dk/camelot64/kickc/model/Program.java @@ -60,8 +60,6 @@ public class Program { /** The initial statement sequence generated by the parser. PASS 1 (STATIC) */ private StatementSequence statementSequence; - /** Constants identified during pass 1. PASS 1 (STATIC) */ - private Collection earlyIdentifiedConstants; /** Variables modified inside procedures. PASS 1 (STATIC) */ private ProcedureModifiedVars procedureModifiedVars; /** Struct values unwound to individual variables. PASS 1 (STATIC) */ @@ -120,7 +118,6 @@ public class Program { this.importPaths = null; this.imported = null; this.statementSequence = null; - this.earlyIdentifiedConstants = null; this.procedureModifiedVars = null; this.structUnwinding = null; } @@ -438,14 +435,6 @@ public class Program { this.registerPotentials = registerPotentials; } - public Collection getEarlyIdentifiedConstants() { - return earlyIdentifiedConstants; - } - - public void setEarlyIdentifiedConstants(Collection earlyIdentifiedConstants) { - this.earlyIdentifiedConstants = earlyIdentifiedConstants; - } - public void setFileName(String fileName) { this.fileName = fileName; diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java index ba0bef54e..82e1a96ec 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass0GenerateStatementSequence.java @@ -1406,12 +1406,10 @@ public class Pass0GenerateStatementSequence extends KickCParserBaseVisitor aliases = new HashMap<>(); List removeStmt = new ArrayList<>(); - Collection earlyConstants = new ArrayList<>(); for(Variable variable : getProgram().getScope().getAllVariables(true)) { SymbolVariableRef variableRef = variable.getRef(); if(!variable.isDeclaredConst() && !variable.isVolatile() && !variableRef.isIntermediate()) { @@ -53,15 +52,11 @@ public class Pass1EarlyConstantIdentification extends Pass1Base { StatementAssignment assign = (StatementAssignment) assignment; if(assign.getrValue1() == null && assign.getOperator() == null && assign.getrValue2() instanceof ConstantValue) { getLog().append("Identified constant variable " + variable.toString(getProgram())); - earlyConstants.add(variableRef); - //variable.setKind(Variable.Kind.CONSTANT); ConstantValue constantValue = (ConstantValue) assign.getrValue2(); convertToConst(variable, constantValue, assign, aliases); removeStmt.add(assign); } else if(assign.getrValue1() == null && assign.getOperator() instanceof OperatorCastPtr && assign.getrValue2() instanceof ConstantValue) { getLog().append("Identified constant variable " + variable.toString(getProgram())); - earlyConstants.add(variableRef); - variable.setKind(Variable.Kind.CONSTANT); ConstantValue constantValue = new ConstantCastValue(((OperatorCastPtr) assign.getOperator()).getToType(), (ConstantValue) assign.getrValue2()); convertToConst(variable, constantValue, assign, aliases); removeStmt.add(assign); @@ -77,7 +72,6 @@ public class Pass1EarlyConstantIdentification extends Pass1Base { } // Replace all variable refs with constant refs ProgramValueIterator.execute(getProgram(), new AliasReplacer(aliases)); - getProgram().setEarlyIdentifiedConstants(earlyConstants); return false; } diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1GenerateSingleStaticAssignmentForm.java b/src/main/java/dk/camelot64/kickc/passes/Pass1GenerateSingleStaticAssignmentForm.java index fe242fc78..7a15ef97a 100644 --- a/src/main/java/dk/camelot64/kickc/passes/Pass1GenerateSingleStaticAssignmentForm.java +++ b/src/main/java/dk/camelot64/kickc/passes/Pass1GenerateSingleStaticAssignmentForm.java @@ -76,10 +76,9 @@ public class Pass1GenerateSingleStaticAssignmentForm extends Pass1Base { * @param source The statement source - usable for error messages */ private void versionAssignment(VariableRef lValueRef, ProgramValue programLValue, StatementSource source) { - Collection earlyIdentifiedConstants = getProgram().getEarlyIdentifiedConstants(); Variable assignedVar = getScope().getVariable(lValueRef); if(assignedVar.isKindPhiMaster()) { - if(assignedVar.isDeclaredConst() || earlyIdentifiedConstants.contains(assignedVar.getRef())) + if(assignedVar.isDeclaredConst()) throw new InternalError("Error! Constants can not be versioned ", source); Variable version = assignedVar.createVersion(); programLValue.set(version.getRef()); @@ -164,14 +163,13 @@ public class Pass1GenerateSingleStaticAssignmentForm extends Pass1Base { Value rValue, Map blockVersions, Map blockNewPhis) { - Collection earlyIdentifiedConstants = getProgram().getEarlyIdentifiedConstants(); Variable version = null; if(rValue instanceof VariableRef) { Variable rValueVar = getScope().getVariable((VariableRef) rValue); if(rValueVar.isKindPhiMaster()) { // rValue needs versioning - look for version in statements Variable rSymbol = rValueVar; - if(rSymbol.isDeclaredConst() || earlyIdentifiedConstants.contains(rSymbol.getRef())) { + if(rSymbol.isDeclaredConst()) { // A constant - find the single created version Scope scope = rSymbol.getScope(); Collection versions = scope.getVersions(rSymbol); diff --git a/src/main/java/dk/camelot64/kickc/passes/PassNAssertConstantModification.java b/src/main/java/dk/camelot64/kickc/passes/PassNAssertConstantModification.java index 383a917f6..1597bf253 100644 --- a/src/main/java/dk/camelot64/kickc/passes/PassNAssertConstantModification.java +++ b/src/main/java/dk/camelot64/kickc/passes/PassNAssertConstantModification.java @@ -7,10 +7,8 @@ import dk.camelot64.kickc.model.statements.Statement; import dk.camelot64.kickc.model.statements.StatementLValue; import dk.camelot64.kickc.model.symbols.Variable; import dk.camelot64.kickc.model.values.LValue; -import dk.camelot64.kickc.model.values.SymbolVariableRef; import dk.camelot64.kickc.model.values.VariableRef; -import java.util.Collection; import java.util.HashSet; import java.util.Set; @@ -25,7 +23,6 @@ public class PassNAssertConstantModification extends Pass2SsaOptimization { @Override public boolean step() { - Collection earlyIdentifiedConstants = getProgram().getEarlyIdentifiedConstants(); Set assigned = new HashSet<>(); for(ControlFlowBlock block : getGraph().getAllBlocks()) { for(Statement statement : block.getStatements()) { @@ -34,7 +31,7 @@ public class PassNAssertConstantModification extends Pass2SsaOptimization { if(lValue instanceof VariableRef) { VariableRef variableRef = (VariableRef) lValue; Variable variable = getScope().getVariable(variableRef); - if(variable.isKindConstant() || earlyIdentifiedConstants.contains(variableRef)) { + if(variable.isKindConstant() ) { if(assigned.contains(variableRef)) { throw new CompileError("Error! Constants can not be modified", statement.getSource()); } else {