From 9e340bd26f507ca01857931b58fe20cb219c3abe Mon Sep 17 00:00:00 2001 From: Alcides Fonseca Date: Sat, 15 Oct 2016 16:10:41 +0100 Subject: [PATCH] Fixed feature collection --- .../ExpressionEstimatorVisitor.java | 68 ++++++++++++++++--- 1 file changed, 59 insertions(+), 9 deletions(-) diff --git a/compiler-src/aeminium/gpu/compiler/processing/estimation/ExpressionEstimatorVisitor.java b/compiler-src/aeminium/gpu/compiler/processing/estimation/ExpressionEstimatorVisitor.java index cf4800b..b892024 100644 --- a/compiler-src/aeminium/gpu/compiler/processing/estimation/ExpressionEstimatorVisitor.java +++ b/compiler-src/aeminium/gpu/compiler/processing/estimation/ExpressionEstimatorVisitor.java @@ -112,6 +112,10 @@ public class ExpressionEstimatorVisitor implements CtVisitor { funs.put("div", basic); funs.put("eq", basic); funs.put("le", basic); + funs.put("lt", basic); + funs.put("gt", basic); + funs.put("ge", basic); + funs.put("ne", basic); funs.put("mod", basic); funs.put("minus", basic); funs.put("postinc", basic); @@ -138,11 +142,29 @@ private void incFeature(int n) { } private void incVariable(String var) { - incVariable(var, 0); + incVariable(var, false, false); } - private void incVariable(String var, int rw) { - System.out.println("feat: var: " + var + " rw: " + rw); + private void incVariable(String var, boolean rw) { + incVariable(var, rw, false); + } + + private void incVariable(String var, boolean rw, boolean global) { + if (global) { + System.out.println("Global"); + if (rw) { + incFeature(12); + } else { + incFeature(3); + } + } else { + if (rw) { + incFeature(9); + } else { + incFeature(0); + } + } + } private void incFun(String code) { @@ -211,10 +233,21 @@ public void visitCtAssert(CtAssert asserted) { @Override public void visitCtAssignment( - CtAssignment assignement) { - incVariable(assignement.getAssigned().toString(), 1); - scan(assignement.getAssigned()); - scan(assignement.getAssignment()); + CtAssignment assignment) { + + boolean recorded = false; + if (assignment.getAssigned() instanceof CtVariableAccess) { + CtVariableAccess acc = (CtVariableAccess) assignment.getAssigned(); + if (acc.getVariable().getDeclaration() instanceof CtParameter) { + incVariable(assignment.getAssigned().toString(), true, true); + recorded = true; + } + } + if (!recorded) + incVariable(assignment.getAssigned().toString(), true); + + scan(assignment.getAssigned()); + scan(assignment.getAssignment()); } @Override @@ -412,8 +445,20 @@ public void visitCtNewClass(CtNewClass newClass) { public void visitCtOperatorAssignement( CtOperatorAssignment assignment) { incFun(assignment.getKind().toString().toLowerCase()); - incVariable(assignment.getAssigned().toString(), 1); estimation.addEstimation(assignment.getKind().toString().toLowerCase(), multiplier); + + boolean recorded = false; + if (assignment.getAssigned() instanceof CtVariableAccess) { + CtVariableAccess acc = (CtVariableAccess) assignment.getAssigned(); + if (acc.getVariable().getDeclaration() instanceof CtParameter) { + incVariable(assignment.getAssigned().toString(), true, true); + recorded = true; + } + } + if (!recorded) + incVariable(assignment.getAssigned().toString(), true); + + scan(assignment.getAssigned()); scan(assignment.getAssignment()); } @@ -489,7 +534,12 @@ public void visitCtUnaryOperator(CtUnaryOperator operator) { @Override public void visitCtVariableAccess(CtVariableAccess variableAccess) { - incVariable(variableAccess.getVariable().toString()); + + if (variableAccess.getVariable().getDeclaration() instanceof CtParameter) { + incVariable(variableAccess.getVariable().toString(), false, true); + } else { + incVariable(variableAccess.getVariable().toString()); + } scan(variableAccess.getVariable()); }