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);