package net.sf.orcc.backends.c.dal; import java.util.ArrayList; import java.util.List; import java.util.SortedSet; import net.sf.orcc.ir.ExprVar; import net.sf.orcc.ir.InstAssign; import net.sf.orcc.ir.Var; import net.sf.orcc.ir.util.AbstractIrVisitor; import net.sf.orcc.util.OrccLogger; public class ConstraintValidator { private List<Var> varList; private class LoadDetector extends AbstractIrVisitor<Void> { public LoadDetector() { super(true); } @Override public Void caseExprVar(ExprVar expr) { varList.add(expr.getUse().getVariable()); return null; } } private boolean findVar(String var, SortedSet<Token> tokens) { boolean found = false; for (Token t : tokens) { if (t.getTargetVar().getName().equals(var)) { found = true; } } return found; } public boolean validate(InstAssign compute, SortedSet<Token> tokens) { boolean constraintsOk = true; varList = new ArrayList<Var>(); LoadDetector detector = new LoadDetector(); detector.doSwitch(compute.getValue()); for (Var v : varList) { if(!findVar(v.getName(), tokens)) { OrccLogger.warnln("Attempting to solve constraint " + compute.toString() + " but token " + v.getName() + " is not available"); constraintsOk = false; } } return constraintsOk; } }