.. java:import:: fr.inria.tapenade.analysis DataFlowAnalyzer .. java:import:: fr.inria.tapenade.representation ILUtils .. java:import:: fr.inria.tapenade.representation Instruction .. java:import:: fr.inria.tapenade.representation SymbolTable .. java:import:: fr.inria.tapenade.representation SymbolTableConstants .. java:import:: fr.inria.tapenade.representation TapEnv .. java:import:: fr.inria.tapenade.representation TapList .. java:import:: fr.inria.tapenade.representation Unit .. java:import:: fr.inria.tapenade.representation ZoneInfo .. java:import:: fr.inria.tapenade.utils TapIntList .. java:import:: fr.inria.tapenade.utils TapPair .. java:import:: fr.inria.tapenade.utils Tree NewBlockGraph ============= .. java:package:: fr.inria.tapenade.differentiation :noindex: .. java:type:: public final class NewBlockGraph Data-dependence graph on the Instructions of a future Block of the differentiated code. This holds a local Data-Dependence Graph of the future instructions, linked by Data-Dependences (NewBlockGraphArrow's). Nodes must be inserted either at the head or at the tail of the existing set of nodes. Data-dependences are set when a new node is inserted: at that moment, we are sure that all node's before (or after when atTail==false) it have been inserted, and only them. The local uses and defs of the new NewBlockGraphNode are required, they are compared to the lists of existing, visible defs and uses of the previous NewBlockGraphNode's, which results in NewBlockGraphArrow's being set or not, and they are finally added to these same lists. A notion of Group level exists, so that whenever we are inside a group, all successively added NewBlockGraphNodes must remain in their exact insertion order. Fields ------ adEnv ^^^^^ .. java:field:: protected DifferentiationEnv adEnv :outertype: NewBlockGraph debug ^^^^^ .. java:field:: protected boolean debug :outertype: NewBlockGraph nodes ^^^^^ .. java:field:: public TapList nodes :outertype: NewBlockGraph Constructors ------------ NewBlockGraph ^^^^^^^^^^^^^ .. java:constructor:: protected NewBlockGraph(DifferentiationEnv adEnv, SymbolTable symbolTable, int nbZones) :outertype: NewBlockGraph Methods ------- addDataDepNode ^^^^^^^^^^^^^^ .. java:method:: protected void addDataDepNode(NewBlockGraphNode newNode, boolean atTail, boolean chain, boolean followPointers, boolean incrementalCondense, TapList localUses, TapList localDefs, TapList localBisUses, TapList localBisDefs) :outertype: NewBlockGraph buildInstructions ^^^^^^^^^^^^^^^^^ .. java:method:: protected void buildInstructions(SymbolTable srcSymbolTable, SymbolTable revSymbolTable, DifferentiationEnv adEnv, Unit diffUnit) :outertype: NewBlockGraph closeGroup ^^^^^^^^^^ .. java:method:: protected void closeGroup() :outertype: NewBlockGraph condense ^^^^^^^^ .. java:method:: protected void condense(Unit unit) :outertype: NewBlockGraph Condenses the nodes of this Graph, performing condensation of the nodes when condensation is defined in their relative classes. Hypotheses: The graph "nodes" is the list of all nodes (e.g. instructions) ordered from the first executed to the last executed. Between these nodes are arrows (e.g. data-deps in their normal direction), i.e. they all go from a node to a node AFTER it in the list. Therefore the graph is a DAG. After condensation has begun, the graph is still a DAG, BUT it may happen that some new arrows go UPWARDS ! existsArrow ^^^^^^^^^^^ .. java:method:: protected static boolean existsArrow(NewBlockGraphNode node1, NewBlockGraphNode node2) :outertype: NewBlockGraph openGroup ^^^^^^^^^ .. java:method:: protected void openGroup() :outertype: NewBlockGraph reset ^^^^^ .. java:method:: protected void reset() :outertype: NewBlockGraph topoSort ^^^^^^^^ .. java:method:: protected TapList topoSort() :outertype: NewBlockGraph :return: the ordered list of all NewBlockGraphNode's.