* @brief Global Value Numbering Partial Redundancy Elimination
* (VanDrunen Hosking 2004)
* @author Michael Beck
- * @version $Id$
* @brief
*/
#include "config.h"
#include "ircons.h"
#include "irgmod.h"
#include "valueset.h"
-#include "irnodemap.h"
+#include "irnodehashmap.h"
#include "irnodeset.h"
#include "iredges.h"
#include "iropt_dbg.h"
char first_iter; /**< non-zero for first iteration */
} pre_env;
-static ir_nodemap_t value_map;
+static ir_nodehashmap_t value_map;
/** The debug module handle. */
DEBUG_ONLY(static firm_dbg_module_t *dbg;)
}
}
v = identify_remember(v);
- ir_nodemap_insert(&value_map, e, v);
+ ir_nodehashmap_insert(&value_map, e, v);
return v;
} /* add */
*/
static ir_node *lookup(ir_node *e)
{
- ir_node *value = (ir_node*)ir_nodemap_get(&value_map, e);
+ ir_node *value = (ir_node*)ir_nodehashmap_get(&value_map, e);
if (value != NULL)
return identify_remember(value);
return NULL;
if (!mode_is_data(mode)) {
if (! is_Div(n) && ! is_Mod(n))
return 0;
- if (! is_NoMem(get_fragile_op_mem(n)))
+ if (! is_NoMem(get_memop_mem(n)))
return 0;
}
return 1;
static void insert_nodes(ir_node *block, void *ctx)
{
pre_env *env = (pre_env*)ctx;
- ir_node *value, *expr, *idom, *first_s, *worklist;
+ ir_node *value, *expr, *idom, *first_s;
block_info *curr_info, *idom_info;
int pos, arity = get_irn_arity(block);
int all_same, by_some, updated;
/* convert the set into a list. This allows the removal of
* elements from the set */
- worklist = NULL;
foreach_valueset(curr_info->antic_in, value, expr, iter) {
ir_mode *mode;
/* ignore bad blocks. */
if (is_Bad(pred_blk)) {
ir_graph *irg = get_irn_irg(pred_blk);
- in[pos] = new_r_Bad(irg);
+ in[pos] = new_r_Bad(irg, mode_X);
continue;
}
edges_deactivate(irg);
new_identities(irg);
- ir_nodemap_init(&value_map);
+ ir_nodehashmap_init(&value_map);
obstack_init(&obst);
a_env.obst = &obst;
if (bl_info->new_set)
ir_valueset_del(bl_info->new_set);
}
- ir_nodemap_destroy(&value_map);
+ ir_nodehashmap_destroy(&value_map);
obstack_free(&obst, NULL);
/* pin the graph again: This is needed due to the use of set_opt_global_cse(1) */
set_irg_pinned(irg, op_pin_state_pinned);
restore_optimization_state(&state);
-
- if (a_env.pairs) {
- set_irg_outs_inconsistent(irg);
- set_irg_loopinfo_inconsistent(irg);
- }
} /* do_gvn_pre */
/* Creates an ir_graph pass for do_gvn_pre. */