Search in sources :

Example 1 with DirectedGraph

use of cx2x.translator.common.topology.DirectedGraph in project claw-compiler by C2SM-RCM.

the class ClawXcodeMlTranslator method reorderTransformations.

private void reorderTransformations() {
    if (_transformer.getGroups().containsKey(ParallelizeForward.class)) {
        TransformationGroup tg = _transformer.getGroups().get(ParallelizeForward.class);
        if (tg.count() <= 1) {
            return;
        }
        DirectedGraph<Transformation> dg = new DirectedGraph<>();
        Map<String, List<Transformation>> fctMap = new HashMap<>();
        for (Transformation t : tg.getTransformations()) {
            ParallelizeForward p = (ParallelizeForward) t;
            dg.addNode(p);
            if (fctMap.containsKey(p.getCallingFctName())) {
                List<Transformation> tList = fctMap.get(p.getCallingFctName());
                tList.add(p);
            } else {
                List<Transformation> tList = new ArrayList<>();
                tList.add(p);
                fctMap.put(p.getCallingFctName(), tList);
            }
        }
        for (Transformation t : tg.getTransformations()) {
            ParallelizeForward p = (ParallelizeForward) t;
            if (p.getCalledFctName() != null) {
                if (fctMap.containsKey(p.getCalledFctName())) {
                    List<Transformation> tList = fctMap.get(p.getCalledFctName());
                    for (Transformation end : tList) {
                        dg.addEdge(p, end);
                    }
                }
            }
        }
        List<Transformation> ordered = TopologicalSort.sort(TopologicalSort.reverseGraph(dg));
        tg.setTransformations(ordered);
    }
}
Also used : Transformation(cx2x.xcodeml.transformation.Transformation) DirectedGraph(cx2x.translator.common.topology.DirectedGraph) TransformationGroup(cx2x.xcodeml.transformation.TransformationGroup) ParallelizeForward(cx2x.translator.transformation.claw.parallelize.ParallelizeForward)

Aggregations

DirectedGraph (cx2x.translator.common.topology.DirectedGraph)1 ParallelizeForward (cx2x.translator.transformation.claw.parallelize.ParallelizeForward)1 Transformation (cx2x.xcodeml.transformation.Transformation)1 TransformationGroup (cx2x.xcodeml.transformation.TransformationGroup)1