X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fana%2Firlivechk.c;h=d4c4efb8bc436255f2aeb03b8f6cb49717490918;hb=f8ead9acbe48af00885e64a6f2f895d1b6cae434;hp=34c89c7e9cc3e8e751f873dc1cce0ce243097b61;hpb=31d36dd3e8a2b7b513958f005cc555e01b9c3d5b;p=libfirm diff --git a/ir/ana/irlivechk.c b/ir/ana/irlivechk.c index 34c89c7e9..d4c4efb8b 100644 --- a/ir/ana/irlivechk.c +++ b/ir/ana/irlivechk.c @@ -40,6 +40,9 @@ #include +/* statev is expensive here, only enable when needed */ +#define DISABLE_STATEV + #include "irgraph_t.h" #include "irnode_t.h" #include "irnodemap.h" @@ -55,7 +58,7 @@ #include "irlivechk.h" -#include "statev.h" +#include "statev_t.h" typedef struct bl_info_t { const ir_node *block; /**< The block. */ @@ -85,7 +88,7 @@ struct lv_chk_t { static bl_info_t *get_block_info(lv_chk_t *lv, const ir_node *block) { - bl_info_t *info = (bl_info_t*)ir_nodemap_get(&lv->block_infos, block); + bl_info_t *info = ir_nodemap_get(bl_info_t, &lv->block_infos, block); if (info == NULL) { info = OALLOC(&lv->obst, bl_info_t); info->id = get_Block_dom_tree_pre_num(block); @@ -98,26 +101,6 @@ static bl_info_t *get_block_info(lv_chk_t *lv, const ir_node *block) return info; } -/** - * Filter function to select all nodes for which liveness is computed. - * @param irn A node. - * @return 1 if the node shall be considered in liveness, 0 if not. - */ -static inline int is_liveness_node(const ir_node *irn) -{ - switch (get_irn_opcode(irn)) { - case iro_Block: - case iro_Bad: - case iro_End: - case iro_Anchor: - return 0; - default: - break; - } - - return 1; -} - /** * Compute the transitive closure on the reduced graph. * The reduced graph is the original graph without back edges. @@ -135,8 +118,6 @@ static void red_trans_closure(lv_chk_t *lv) const ir_node *bl = (const ir_node*) dfs_get_post_num_node(lv->dfs, i); bl_info_t *bi = get_block_info(lv, bl); - const ir_edge_t *edge; - bitset_set(bi->red_reachable, bi->id); foreach_block_succ (bl, edge) { ir_node *succ = get_edge_src_irn(edge); @@ -168,8 +149,6 @@ static void compute_back_edge_chain(lv_chk_t *lv, const ir_node *bl) bitset_t *tmp = bitset_alloca(lv->n_blocks); bl_info_t *bi = get_block_info(lv, bl); - size_t elm; - DBG((lv->dbg, LEVEL_2, "computing T_%d\n", bi->id)); /* put all back edge sources reachable (reduced) from here in tmp */ @@ -183,7 +162,6 @@ static void compute_back_edge_chain(lv_chk_t *lv, const ir_node *bl) /* iterate over them ... */ bitset_foreach(tmp, elm) { bl_info_t *si = lv->map[elm]; - const ir_edge_t *edge; /* and find back edge targets which are not reduced reachable from bl */ foreach_block_succ (si->block, edge) { @@ -205,7 +183,6 @@ static void compute_back_edge_chain(lv_chk_t *lv, const ir_node *bl) static inline void compute_back_edge_chains(lv_chk_t *lv) { - size_t elm; int i, n; DBG((lv->dbg, LEVEL_2, "back edge sources: %B\n", lv->back_edge_src)); @@ -217,8 +194,6 @@ static inline void compute_back_edge_chains(lv_chk_t *lv) const ir_node *bl = (const ir_node*) dfs_get_post_num_node(lv->dfs, i); bl_info_t *bi = get_block_info(lv, bl); - const ir_edge_t *edge; - if (!bitset_is_set(lv->back_edge_tgt, bi->id)) { foreach_block_succ (bl, edge) { ir_node *succ = get_edge_src_irn(edge); @@ -328,8 +303,6 @@ unsigned lv_chk_bl_xxx(lv_chk_t *lv, const ir_node *bl, const ir_node *var) * the algorithm is simple. Just check for uses not inside this block. */ if (def_bl == bl) { - const ir_edge_t *edge; - stat_ev("lv_chk_def_block"); DBG((lv->dbg, LEVEL_2, "lv check same block %+F in %+F\n", var, bl)); foreach_out_edge (var, edge) { @@ -376,7 +349,6 @@ unsigned lv_chk_bl_xxx(lv_chk_t *lv, const ir_node *bl, const ir_node *var) size_t i; unsigned min_dom, max_dom; - const ir_edge_t *edge; /* if the block has no DFS info, it cannot be reached. * This can happen in functions with endless loops.