Dominators.xcc

Benoit Dupont de Dinechin (Benoit.Dupont-de-Dinechin@st.com).

Copyright 2002 - 2007 STMicroelectronics. Copyright 1995 - 1998 Commissariat a l'Energie Atomique.

This program is free software; you can redistribute it and/or modify it under the terms of either (at your option): the GNU General Public License (GPL) version 2; the GNU Lesser General Public License (LGPL) version 2.1; any later version of these licences as published by the Free Software Foundation.

Dominators— Maintain dominance information.
struct Dominators_;
Dominators_nodeOf— This Dominators NODEOF array.
DGraphNode *
Dominators_nodeOf(Dominators this);
Dominators_nodeIDOM— Return the IDOM of a DGraphNode.
int32_t
Dominators_nodeIDOM(Dominators this, DGraphNode node);
Dominators_nodeDOMS— Return the DOMS IETree of a DGraphNode.
IETree
Dominators_nodeDOMS(Dominators this, DGraphNode node);
Dominators_DOMS_FOREACH— Iterate over a DGraphNode DOMS DGraphNodes.
#define Dominators_DOMS_FOREACH(this, node, Type, succ) { \
  DGraphNode *Dominators_NODEOF = Dominators_nodeOf(this); \
  IETree Dominators_NODEDOMS = Dominators_nodeDOMS(this, node); \
  IETree_FOREACH(Dominators_NODEDOMS, Dominators_ITER) { \
    Type *(succ) = (Type *)Dominators_NODEOF[(int32_t)Dominators_ITER];
#define Dominators_DOMS_ENDEACH \
  } IETree_ENDEACH \
}
Dominators_nodeDOMN— Return the DOMN of a DGraphNode.
int32_t
Dominators_nodeDOMN(Dominators this, DGraphNode node);
Dominators_hasDOMF— True is this Dominators has DOMF.
bool
Dominators_hasDOMF(Dominators this);
Dominators_nodeDOMF— Return the DOMF IETree of a DGraphNode.
IETree
Dominators_nodeDOMF(Dominators this, DGraphNode node);
Dominators_DOMF_FOREACH— Iterate over a DGraphNode DOMF DGraphNodes.
#define Dominators_DOMF_FOREACH(this, node, Type, succ) { \
  DGraphNode *Dominators_NODEOF = Dominators_nodeOf(this); \
  IETree Dominators_NODEDOMF = Dominators_nodeDOMF(this, node); \
  IETree_FOREACH(Dominators_NODEDOMF, Dominators_ITER) { \
    Type *(succ) = (Type *)Dominators_NODEOF[(int32_t)Dominators_ITER];
#define Dominators_DOMF_ENDEACH \
  } IETree_ENDEACH \
}
Dominators_dominates— Test dominance relation between two DGraphNodes.

Application of the (not so) well-known properties of DFS numbering.

bool
Dominators_dominates(Dominators this, DGraphNode this_node, DGraphNode that_node);
Dominators_makeFrontiers— Make the dominance frontiers.

Implementation from "A Simple, Fast Dominators Algorithm", Software Practice and Experience, Vol 4, 2001, by K. D. Cooper, T. J. Harvey, K. Kennedy.

void
Dominators_makeFrontiers(Dominators this);
Dominators_pretty— Pretty-print this Dominators.
bool
Dominators_pretty(Dominators this, FILE *file);