/** * Returns all output blades of a given graph * @param graph The graph * @param usedAlgebra The used algebra * @return The output blades */ public static HashSet<VariableComponent> getAllOutputBlades(ControlFlowGraph graph, UseAlgebra usedAlgebra) { HashSet<VariableComponent> result = new HashSet<VariableComponent>(); // mark output vars as tabu for (String output : graph.getPragmaOutputVariables()) { String[] parts = output.split("\\$"); result.add(new VariableComponent(parts[0], Integer.parseInt(parts[1]), null)); } FindStoreOutputNodes storeResultNodes = new FindStoreOutputNodes(); graph.accept(storeResultNodes); for (StoreResultNode curSRNode : storeResultNodes.getNodes()) { String name = curSRNode.getValue().getName(); int bladeCount = usedAlgebra.getBladeCount(); for (int blade = 0; blade < bladeCount; blade++) { result.add(new VariableComponent(name, blade, null)); } } return result; } }
/** * Should be called to notify the graph builder that the parsing process has finished. If needed, post-processing of * the graph can be performed here. */ public void finish() { // for (Variable v : graph.getIgnoreVariables()) { // graph.removeLocalVariable(v); // } FindStoreOutputNodes outputNodes = new FindStoreOutputNodes(); graph.accept(outputNodes); //if (outputNodes.getNodes().isEmpty()) { // throw new RuntimeException("There are no lines marked for optimization ('?')"); //} SetCallerVisitor visitor = new SetCallerVisitor(); graph.accept(visitor); SetLocalAndInputVariables inputFinder = new SetLocalAndInputVariables(); graph.accept(inputFinder); }
protected void createVectorSet (FindStoreOutputNodes findOutput) { for (Variable var : graph.getInputVariables()) { FieldsUsedVisitor fieldVisitor = new FieldsUsedVisitor(var.getName()); graph.accept(fieldVisitor); vectorSet.add(fieldVisitor.getMultiVector()); } for (Variable var : graph.getLocalVariables()) { FieldsUsedVisitor fieldVisitor = new FieldsUsedVisitor(var.getName()); graph.accept(fieldVisitor); vectorSet.add(fieldVisitor.getMultiVector()); } for (StoreResultNode var : findOutput.getNodes()) { FieldsUsedVisitor fieldVisitor = new FieldsUsedVisitor(var.getValue().getName()); graph.accept(fieldVisitor); vectorSet.add(fieldVisitor.getMultiVector()); } }
graph = node.getGraph(); FindStoreOutputNodes findOutput = new FindStoreOutputNodes(); graph.accept(findOutput); for (StoreResultNode var : findOutput.getNodes()) { String outputName = var.getValue().getName() + suffix; for (StoreResultNode var : findOutput.getNodes()) { code.append(variableType).append(" **"); printVarName(outputNamesMap.get(var)); if (!graph.getInputVariables().isEmpty() || !findOutput.getNodes().isEmpty()) { code.setLength(code.length() - 2); for (StoreResultNode var : findOutput.getNodes()) { FieldsUsedVisitor fieldVisitor = new FieldsUsedVisitor(var.getValue().getName()); graph.accept(fieldVisitor);
@Override public void transform(ControlFlowGraph graph) throws OptimizationException { FindStoreOutputNodes outputNodes = new FindStoreOutputNodes(); graph.accept(outputNodes); if (outputNodes.getNodes().isEmpty()) { throw new OptimizationException("There are no lines marked for optimization ('?')", graph);