Dependence.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.

DependenceKind— Enumerates the Dependence kinds.
typedef enum {
  DependenceKind_Flow,          // Flow memory dependence arc.
  DependenceKind_Anti,          // Anti memory dependence arc.
  DependenceKind_Input,         // Input memory dependence arc.
  DependenceKind_Output,        // Output memory dependence arc.
  DependenceKind_Spill,         // Spill memory dependence arc.
  DependenceKind_Other,         // Other memory dependence arc.
  DependenceKind_Relax,         // Induction relaxed dependence arc.
  DependenceKind_RAW,           // Register Read After Write dependence arc.
  DependenceKind_WAR,           // Register Write After Read dependence arc.
  DependenceKind_WAW,           // Register Write After Write dependence arc.
  DependenceKind_Life,          // Register consumer node to its lifetime node.
  DependenceKind_Link,          // Register producer node to its lifetime node.
  DependenceKind_Reuse,         // Register reuse arc.
  DependenceKind_Some,          // Inserted by DepGraph_complete.
  DependenceKind_Margin,        // Inserted by DepGraph_complete.
  DependenceKind__,
  DependenceKind_Definite = 16,
} enum_DependenceKind;
typedef uint8_t DependenceKind;
extern const char *
DependenceKind_name_(DependenceKind this);
#define DependenceKind(kind) ((kind) & (DependenceKind_Definite - 1))
#define DependenceKind_mayAdjust(kind) ((kind) <= DependenceKind_WAW)
#define DependenceKind_mayRefine(kind) ((kind) <= DependenceKind_Spill)

Representation of a Dependence node.

typedef void *DependenceNode;
DependenceArc— Representation of a dependence arc.
struct DependenceArc_ {
  //@args       struct Operation_ *tail, struct Operation_ *head,
  //@args       int latency, int omega, DependenceKind kind
  struct Operation_ *TAIL;
  struct Operation_ *HEAD;
  int16_t LATENCY;
  int8_t OMEGA;
  DependenceKind KIND;
};
DependenceTable— Maintains DependenceNode(s) and DependenceArc(s).
struct DependenceTable_ {
  //@args       Memory memory
  PtrSet_ NODES_;
  //@access NODES       DependenceTable__NODES_(this)
  //@access MEMORY      PtrSet_memory(DependenceTable_NODES(this))
  IBList_ ARCS_;
  //@access ARCS        DependenceTable__ARCS_(this)
  //@access ARCCOUNT    (IBList_count(DependenceTable_ARCS(this)))
};
DependenceTable_nodes— For use by DependenceTable_FOREACH_DependenceNode
static inline const_PtrSet
DependenceTable_nodes(const_DependenceTable this)
{
  return DependenceTable_NODES(this);
}
DependenceTable_enterNode— Enter a DependenceNode in this DependenceTable.
static inline DependenceNode
DependenceTable_enterNode(DependenceTable this, DependenceNode node)
{
  PtrSet_insert(DependenceTable_NODES(this), node);
  return node;
}
DependenceTable_isEmpty— True iff DependenceTable has no DependenceNode(s).
static inline bool
DependenceTable_isEmpty(const_DependenceTable this)
{
  return PtrSet_isEmpty(DependenceTable_NODES(this));
}
DependenceTable_isNode— True iff Dependence node in this DependenceTable.
static inline bool
DependenceTable_isNode(const_DependenceTable this, DependenceNode node)
{
  return PtrSet_contains(DependenceTable_NODES(this), node);
}
DependenceTable_arcs— For use by DependenceTable_FOREACH_DependenceArc
static inline const_IBList
DependenceTable_arcs(const_DependenceTable this)
{
  return DependenceTable_ARCS(this);
}
DependenceTable_FOREACH_DependenceArc— Iterate this DependenceTable DependenceArc(s).
#define DependenceTable_FOREACH_DependenceArc(this, arc) \
  IBList_FOREACH(DependenceTable_arcs(this), DependenceArc_, arc)
#define DependenceTable_ENDEACH_DependenceArc \
  IBList_ENDEACH;
DependenceTable_makeArc— Make a new DependenceArc in this DependenceTable.
DependenceArc
DependenceTable_makeArc(DependenceTable this,
                        Operation tail_operation, Operation head_operation,
                        int latency, int omega, DependenceKind kind);