*
* @param blk the extended basic block
*/
-unsigned long get_extbb_visited(const ir_extblk *blk);
+ir_visited_t get_extbb_visited(const ir_extblk *blk);
/**
* Sets the visited counter of an extended block.
*
* @param blk the extended basic block
*/
-void set_extbb_visited(ir_extblk *blk, unsigned long visited);
+void set_extbb_visited(ir_extblk *blk, ir_visited_t visited);
/**
* Mark an extended block as visited in a graph.
/** Increments visited flag by one.
* @see also: get_irn_visited() get_irg_block_visited(). */
-void inc_irg_visited(ir_graph *irg);
-unsigned long get_irg_visited(const ir_graph *irg);
-void set_irg_visited(ir_graph *irg, unsigned long i);
+void inc_irg_visited(ir_graph *irg);
+ir_visited_t get_irg_visited(const ir_graph *irg);
+void set_irg_visited(ir_graph *irg, ir_visited_t i);
/** An interprocedural flag valid for all irgs.
* @see also: get_irn_visited() get_irg_block_visited(). */
-unsigned long get_max_irg_visited(void);
-void set_max_irg_visited(int val);
-unsigned long inc_max_irg_visited(void);
+ir_visited_t get_max_irg_visited(void);
+void set_max_irg_visited(int val);
+ir_visited_t inc_max_irg_visited(void);
/** Increments block_visited by one.
* @see also: get_irn_visited() get_irg_block_visited(). */
-void inc_irg_block_visited(ir_graph *irg);
-unsigned long get_irg_block_visited(const ir_graph *irg);
-void set_irg_block_visited(ir_graph *irg, unsigned long i);
+void inc_irg_block_visited(ir_graph *irg);
+ir_visited_t get_irg_block_visited(const ir_graph *irg);
+void set_irg_block_visited(ir_graph *irg, ir_visited_t i);
/**
* Debug helpers: You can indicate whether you are currently using visited or
/** If arg is an argument of the node, returns it's position, -1 otherwise */
int get_irn_pred_pos(ir_node *node, ir_node *arg);
/** Gets the visited counter of a node. */
-unsigned long get_irn_visited(const ir_node *node);
+ir_visited_t get_irn_visited(const ir_node *node);
/** Sets the visited counter of a node. */
-void set_irn_visited(ir_node *node, unsigned long visited);
+void set_irn_visited(ir_node *node, ir_visited_t visited);
/** Sets visited to get_irg_visited(current_ir_graph). */
void mark_irn_visited(ir_node *node);
/** Returns 1 if visited < get_irg_visited(current_ir_graph). */
/** A visited flag only for block nodes.
* @see also: get_irn_visited() inc_irg_visited() inc_irg_block_visited()*/
-unsigned long get_Block_block_visited(const ir_node *node);
-void set_Block_block_visited(ir_node *node, unsigned long visit);
+ir_visited_t get_Block_block_visited(const ir_node *node);
+void set_Block_block_visited(ir_node *node, ir_visited_t visit);
/**
* Marks a block as dead but do not replace it with a Bad node.
long get_entity_nr(const ir_entity *ent);
/** Returns the entities visited count. */
-unsigned long get_entity_visited(ir_entity *ent);
+ir_visited_t get_entity_visited(ir_entity *ent);
/** Sets the entities visited count. */
-void set_entity_visited(ir_entity *ent, unsigned long num);
+void set_entity_visited(ir_entity *ent, ir_visited_t num);
/** Sets visited field in entity to entity_visited. */
void mark_entity_visited(ir_entity *ent);
void set_type_alignment_bytes(ir_type *tp, unsigned align);
/** Returns the visited count of a type. */
-unsigned long get_type_visited(const ir_type *tp);
+ir_visited_t get_type_visited(const ir_type *tp);
/** Sets the visited count of a type to num. */
-void set_type_visited(ir_type *tp, unsigned long num);
+void set_type_visited(ir_type *tp, ir_visited_t num);
/** Sets visited field in type to type_visited. */
void mark_type_visited(ir_type *tp);
/** Returns non-zero if the type is already visited */
*
* @see typewalk
*/
-void set_master_type_visited(unsigned long val);
-unsigned long get_master_type_visited(void);
-void inc_master_type_visited(void);
+void set_master_type_visited(ir_visited_t val);
+ir_visited_t get_master_type_visited(void);
+void inc_master_type_visited(void);
/**
* Sets the debug information of a type.
#include "irgwalk.h"
-static unsigned long master_cg_visited = 0;
-static INLINE int cg_irg_visited (ir_graph *n);
+static ir_visited_t master_cg_visited = 0;
+static INLINE int cg_irg_visited (ir_graph *n);
static INLINE void mark_cg_irg_visited(ir_graph *n);
-static INLINE void set_cg_irg_visited (ir_graph *n, unsigned long i);
+static INLINE void set_cg_irg_visited (ir_graph *n, ir_visited_t i);
/** Returns the callgraph state of the program representation. */
irp_callgraph_state get_irp_callgraph_state(void) {
/**
* Set a graphs visited flag to i.
*/
-static INLINE void set_cg_irg_visited(ir_graph *irg, unsigned long i) {
+static INLINE void set_cg_irg_visited(ir_graph *irg, ir_visited_t i) {
irg->self_visited = i;
}
/**
* Returns the visited flag of a graph.
*/
-static INLINE unsigned long get_cg_irg_visited(ir_graph *irg) {
+static INLINE ir_visited_t get_cg_irg_visited(ir_graph *irg) {
return irg->self_visited;
}
static void compute_loop_depth(ir_graph *irg, void *env) {
int current_nesting = *(int *) env;
int old_nesting = irg->callgraph_loop_depth;
- unsigned long old_visited = get_cg_irg_visited(irg);
+ ir_visited_t old_visited = get_cg_irg_visited(irg);
int i, n_callees;
//return ;
}
/* Gets the visited counter of an extended block. */
-unsigned long (get_extbb_visited)(const ir_extblk *blk) {
+ir_visited_t (get_extbb_visited)(const ir_extblk *blk) {
return _get_extbb_visited(blk);
}
/* Sets the visited counter of an extended block. */
-void (set_extbb_visited)(ir_extblk *blk, unsigned long visited) {
+void (set_extbb_visited)(ir_extblk *blk, ir_visited_t visited) {
_set_extbb_visited(blk, visited);
}
*/
struct _ir_extblk {
firm_kind kind; /**< k_ir_extblk */
- unsigned long visited; /**< visited flag */
+ ir_visited_t visited; /**< visited flag */
ir_node **blks; /**< blocks belonging to this extended block */
void *link; /**< private link field */
};
* Gets the visited counter of an extended block.
* Internal version for libFirm.
*/
-static INLINE unsigned long
+static INLINE ir_visited_t
_get_extbb_visited(const ir_extblk *blk) {
assert(blk);
return blk->visited;
* Internal version for libFirm.
*/
static INLINE void
-_set_extbb_visited(ir_extblk *blk, unsigned long visited) {
+_set_extbb_visited(ir_extblk *blk, ir_visited_t visited) {
assert(blk);
blk->visited = visited;
}
}
#if 0
-static int compute_height(mris_env_t *env, ir_node *irn, unsigned long visited)
+static int compute_height(mris_env_t *env, ir_node *irn, ir_visited_t visited)
{
mris_irn_t *mi = get_mris_irn(env, irn);
static void compute_heights(mris_env_t *env)
{
const ir_edge_t *edge;
- unsigned long visited;
+ ir_visited_t visited;
visited = get_irg_visited(env->irg) + 1;
set_irg_visited(env->irg, visited);
}
#if 0
-static void reaches_walker(mris_env_t *env, ir_node *irn, ir_node *tgt, int *found, unsigned long visited)
+static void reaches_walker(mris_env_t *env, ir_node *irn, ir_node *tgt, int *found, ir_visited_t visited)
{
if(get_irn_visited(irn) < visited && get_nodes_block(irn) == env->bl) {
static int reaches(mris_env_t *env, ir_node *src, ir_node *tgt)
{
int found = 0;
- unsigned long visited = get_irg_visited(env->irg) + 1;
+ ir_visited_t visited = get_irg_visited(env->irg) + 1;
set_irg_visited(env->irg, visited);
reaches_walker(env, src, tgt, &found, visited);
struct worklist_t {
struct list_head live_values;
size_t n_live_values;
- unsigned long visited;
+ ir_visited_t visited;
};
typedef struct block_info_t block_info_t;
static bool should_have_reached_fixpoint;
static bool do_push_unused_livethroughs;
static ir_exec_freq *exec_freq;
-static unsigned long worklist_visited;
+static ir_visited_t worklist_visited;
static worklist_t *new_worklist(void)
{
/** dump edges to our inputs */
static void dump_ir_data_edges(FILE *F, ir_node *n) {
int i, num;
- unsigned long visited = get_irn_visited(n);
+ ir_visited_t visited = get_irn_visited(n);
if (!dump_keepalive && is_End(n)) {
/* the End node has only keep-alive edges */
return _get_irg_link(irg);
}
-unsigned long
+ir_visited_t
(get_irg_visited)(const ir_graph *irg) {
return _get_irg_visited(irg);
}
#ifdef INTERPROCEDURAL_VIEW
/** maximum visited flag content of all ir_graph visited fields. */
-static unsigned long max_irg_visited = 0;
+static ir_visited_t max_irg_visited = 0;
#endif /* INTERPROCEDURAL_VIEW */
void
-set_irg_visited(ir_graph *irg, unsigned long visited) {
+set_irg_visited(ir_graph *irg, ir_visited_t visited) {
irg->visited = visited;
#ifdef INTERPROCEDURAL_VIEW
if (irg->visited > max_irg_visited) {
}
#ifdef INTERPROCEDURAL_VIEW
-unsigned long
+ir_visited_t
get_max_irg_visited(void) {
- /*
+#ifndef NDEBUG
int i;
for(i = 0; i < get_irp_n_irgs(); i++)
- assert(max_irg_visited >= get_irg_visited(get_irp_irg(i)));
- */
+ assert(max_irg_visited >= get_irg_visited(get_irp_irg(i)));
+#endif
return max_irg_visited;
}
max_irg_visited = val;
}
-unsigned long
+ir_visited_t
inc_max_irg_visited(void) {
- /*
+#ifndef NDEBUG
int i;
for(i = 0; i < get_irp_n_irgs(); i++)
- assert(max_irg_visited >= get_irg_visited(get_irp_irg(i)));
- */
+ assert(max_irg_visited >= get_irg_visited(get_irp_irg(i)));
+#endif
return ++max_irg_visited;
}
#endif /* INTERPROCEDURAL_VIEW */
-unsigned long
+ir_visited_t
(get_irg_block_visited)(const ir_graph *irg) {
return _get_irg_block_visited(irg);
}
void
-(set_irg_block_visited)(ir_graph *irg, unsigned long visited) {
+(set_irg_block_visited)(ir_graph *irg, ir_visited_t visited) {
_set_irg_block_visited(irg, visited);
}
return irg->link;
}
-static INLINE unsigned long
+static INLINE ir_visited_t
_get_irg_visited(const ir_graph *irg) {
return irg->visited;
}
-static INLINE unsigned long
+static INLINE ir_visited_t
_get_irg_block_visited(const ir_graph *irg) {
return irg->block_visited;
}
static INLINE void
-_set_irg_block_visited(ir_graph *irg, unsigned long visited) {
+_set_irg_block_visited(ir_graph *irg, ir_visited_t visited) {
irg->block_visited = visited;
}
* Walk over an interprocedural graph (callgraph).
* Visits only graphs in irg_set.
*/
-static void irg_walk_cg(ir_node * node, unsigned long visited,
+static void irg_walk_cg(ir_node * node, ir_visited_t visited,
pset_new_t *irg_set, irg_walk_func *pre,
irg_walk_func *post, void * env) {
int i;
if (get_interprocedural_view()) {
pset_new_t irg_set;
pset_new_iterator_t iter;
- unsigned long visited;
+ ir_visited_t visited;
ir_graph *irg;
assert(get_irp_ip_view_state() == ip_view_valid);
return node->op->name;
}
-unsigned long (get_irn_visited)(const ir_node *node) {
+ir_visited_t (get_irn_visited)(const ir_node *node) {
return _get_irn_visited(node);
}
-void (set_irn_visited)(ir_node *node, unsigned long visited) {
+void (set_irn_visited)(ir_node *node, ir_visited_t visited) {
_set_irn_visited(node, visited);
}
node->attr.block.is_matured = matured;
}
-unsigned long (get_Block_block_visited)(const ir_node *node) {
+ir_visited_t (get_Block_block_visited)(const ir_node *node) {
return _get_Block_block_visited(node);
}
-void (set_Block_block_visited)(ir_node *node, unsigned long visit) {
+void (set_Block_block_visited)(ir_node *node, ir_visited_t visit) {
_set_Block_block_visited(node, visit);
}
* Gets the visited counter of a node.
* Intern version for libFirm.
*/
-static INLINE unsigned long
+static INLINE ir_visited_t
_get_irn_visited(const ir_node *node) {
assert(node);
return node->visited;
* Intern version for libFirm.
*/
static INLINE void
-_set_irn_visited(ir_node *node, unsigned long visited) {
+_set_irn_visited(ir_node *node, ir_visited_t visited) {
assert(node);
node->visited = visited;
}
return res;
}
-static INLINE unsigned long
+static INLINE ir_visited_t
_get_Block_block_visited(const ir_node *node) {
assert(node->op == op_Block);
return node->attr.block.block_visited;
}
static INLINE void
-_set_Block_block_visited(ir_node *node, unsigned long visit) {
+_set_Block_block_visited(ir_node *node, ir_visited_t visit) {
assert(node->op == op_Block);
node->attr.block.block_visited = visit;
}
typedef struct {
/* General attributes */
ir_graph *irg; /**< The graph this block belongs to. */
- unsigned long block_visited; /**< For the walker that walks over all blocks. */
+ ir_visited_t block_visited; /**< For the walker that walks over all blocks. */
/* Attributes private to construction: */
unsigned is_matured:1; /**< If set, all in-nodes of the block are fixed. */
unsigned is_dead:1; /**< If set, the block is dead (and could be replace by a Bad. */
ir_op *op; /**< The Opcode of this node. */
ir_mode *mode; /**< The Mode of this node. */
struct ir_node **in; /**< The array of predecessors / operands. */
- unsigned long visited; /**< The visited counter for walks of the graph. */
+ ir_visited_t visited; /**< The visited counter for walks of the graph. */
void *link; /**< To attach additional information to the node, e.g.
used while construction to link Phi0 nodes and
during optimization to link to nodes that
ir_loop *l; /**< For callgraph analysis. */
/* -- Fields for Walking the graph -- */
- unsigned long visited; /**< this flag is an identifier for
+ ir_visited_t visited; /**< this flag is an identifier for
ir walk. it will be incremented
every time someone walks through
the graph */
- unsigned long block_visited; /**< same as visited, for a complete block */
+ ir_visited_t block_visited; /**< same as visited, for a complete block */
- unsigned long self_visited; /**< visited flag of the irg */
+ ir_visited_t self_visited; /**< visited flag of the irg */
unsigned estimated_node_count; /**< estimated number of nodes in this graph,
updated after every walk */
pn_Cmp pnc; /**< The Compare mode of the Compare node. */
ir_node *cnst;
tarval *tv;
- unsigned long visited_nr;
+ ir_visited_t visited_nr;
ir_node *cnst_pred; /**< the block before the constant */
int cnst_pos; /**< the pos to the constant block (needed to
} /* equal_entity */
-unsigned long (get_entity_visited)(ir_entity *ent) {
+ir_visited_t (get_entity_visited)(ir_entity *ent) {
return _get_entity_visited(ent);
} /* get_entity_visited */
-void (set_entity_visited)(ir_entity *ent, unsigned long num) {
+void (set_entity_visited)(ir_entity *ent, ir_visited_t num) {
_set_entity_visited(ent, num);
} /* set_entity_visited */
/**< If the entity is a bit field, this is the offset of
the start of the bit field within the byte specified
by offset. */
- unsigned long visit; /**< visited counter for walks of the type information. */
+ ir_visited_t visit; /**< visited counter for walks of the type information. */
struct dbg_info *dbi; /**< A pointer to information for debug support. */
void *link; /**< To store some intermediate information. */
ir_type *repr_class; /**< If this entity represents a class info, the associated class. */
return irg;
}
-static INLINE unsigned long
+static INLINE ir_visited_t
_get_entity_visited(ir_entity *ent) {
assert(ent && ent->kind == k_entity);
return ent->visit;
}
static INLINE void
-_set_entity_visited(ir_entity *ent, unsigned long num) {
+_set_entity_visited(ir_entity *ent, ir_visited_t num) {
assert(ent && ent->kind == k_entity);
ent->visit = num;
}
static void compute_down_closure(ir_type *tp) {
pset *myset, *subset;
int i, n_subtypes, n_members, n_supertypes;
- unsigned long master_visited = get_master_type_visited();
+ ir_visited_t master_visited = get_master_type_visited();
assert(is_Class_type(tp));
static void compute_up_closure(ir_type *tp) {
pset *myset, *subset;
int i, n_subtypes, n_members, n_supertypes;
- unsigned long master_visited = get_master_type_visited();
+ ir_visited_t master_visited = get_master_type_visited();
assert(is_Class_type(tp));
}
/** the global type visited flag */
-unsigned long firm_type_visited;
+ir_visited_t firm_type_visited;
-void (set_master_type_visited)(unsigned long val) { _set_master_type_visited(val); }
-unsigned long (get_master_type_visited)(void) { return _get_master_type_visited(); }
-void (inc_master_type_visited)(void) { _inc_master_type_visited(); }
+void (set_master_type_visited)(ir_visited_t val) { _set_master_type_visited(val); }
+ir_visited_t (get_master_type_visited)(void) { return _get_master_type_visited(); }
+void (inc_master_type_visited)(void) { _inc_master_type_visited(); }
/*
* Creates a new type representation.
tp->flags &= ~tf_layout_fixed;
}
-unsigned long (get_type_visited)(const ir_type *tp) {
+ir_visited_t (get_type_visited)(const ir_type *tp) {
return _get_type_visited(tp);
}
-void (set_type_visited)(ir_type *tp, unsigned long num) {
+void (set_type_visited)(ir_type *tp, ir_visited_t num) {
_set_type_visited(tp, num);
}
calculated automatically by get_type_alignment().
Alignment must be given in bytes. */
ir_mode *mode; /**< The mode for atomic types */
- unsigned long visit; /**< visited counter for walks of the type information */
+ ir_visited_t visit; /**< visited counter for walks of the type information */
void *link; /**< holds temporary data - like in irnode_t.h */
struct dbg_info *dbi; /**< A pointer to information for debug support. */
ir_type *assoc_type; /**< The associated lowered/unlowered type */
* inline functions *
* ------------------- */
-extern unsigned long firm_type_visited;
+extern ir_visited_t firm_type_visited;
-static INLINE void _set_master_type_visited(unsigned long val) { firm_type_visited = val; }
-static INLINE unsigned long _get_master_type_visited(void) { return firm_type_visited; }
-static INLINE void _inc_master_type_visited(void) { ++firm_type_visited; }
+static INLINE void _set_master_type_visited(ir_visited_t val) { firm_type_visited = val; }
+static INLINE ir_visited_t _get_master_type_visited(void) { return firm_type_visited; }
+static INLINE void _inc_master_type_visited(void) { ++firm_type_visited; }
static INLINE void *
_get_type_link(const ir_type *tp) {
return tp->flags & tf_layout_fixed ? layout_fixed : layout_undefined;
}
-static INLINE unsigned long
+static INLINE ir_visited_t
_get_type_visited(const ir_type *tp) {
assert(tp && tp->kind == k_type);
return tp->visit;
}
static INLINE void
-_set_type_visited(ir_type *tp, unsigned long num) {
+_set_type_visited(ir_type *tp, ir_visited_t num) {
assert(tp && tp->kind == k_type);
tp->visit = num;
}