projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
rename tarval to ir_tarval
[libfirm]
/
ir
/
opt
/
gvn_pre.c
diff --git
a/ir/opt/gvn_pre.c
b/ir/opt/gvn_pre.c
index
0c5dba6
..
c13e4bb
100644
(file)
--- a/
ir/opt/gvn_pre.c
+++ b/
ir/opt/gvn_pre.c
@@
-27,6
+27,7
@@
*/
#include "config.h"
*/
#include "config.h"
+#include "iroptimize.h"
#include "irflag.h"
#include "irdom.h"
#include "irouts.h"
#include "irflag.h"
#include "irdom.h"
#include "irouts.h"
@@
-82,7
+83,6
@@
typedef struct pre_env {
char first_iter; /**< non-zero for first iteration */
} pre_env;
char first_iter; /**< non-zero for first iteration */
} pre_env;
-static pset *value_table;
static ir_nodemap_t value_map;
/** The debug module handle. */
static ir_nodemap_t value_map;
/** The debug module handle. */
@@
-116,14
+116,14
@@
static ir_node *add(ir_node *e, ir_node *v)
{
if (is_Proj(v)) {
ir_node *pred = get_Proj_pred(v);
{
if (is_Proj(v)) {
ir_node *pred = get_Proj_pred(v);
- ir_node *v_pred = identify_remember(
value_table,
pred);
+ ir_node *v_pred = identify_remember(pred);
if (v_pred != pred) {
/* must create a new value here */
v = new_r_Proj(v_pred, get_irn_mode(v), get_Proj_proj(v));
}
}
if (v_pred != pred) {
/* must create a new value here */
v = new_r_Proj(v_pred, get_irn_mode(v), get_Proj_proj(v));
}
}
- v = identify_remember(v
alue_table, v
);
+ v = identify_remember(v);
ir_nodemap_insert(&value_map, e, v);
return v;
} /* add */
ir_nodemap_insert(&value_map, e, v);
return v;
} /* add */
@@
-140,7
+140,7
@@
static ir_node *lookup(ir_node *e)
{
ir_node *value = ir_nodemap_get(&value_map, e);
if (value != NULL)
{
ir_node *value = ir_nodemap_get(&value_map, e);
if (value != NULL)
- return identify_remember(value
_table, value
);
+ return identify_remember(value);
return NULL;
} /* lookup */
return NULL;
} /* lookup */
@@
-372,11
+372,11
@@
static ir_node *phi_translate(ir_node *node, ir_node *block, int pos, ir_valuese
return node;
}
return node;
}
- arity = get_irn_
intra_
arity(node);
+ arity = get_irn_arity(node);
/* check if the node has at least one Phi predecessor */
for (i = 0; i < arity; ++i) {
/* check if the node has at least one Phi predecessor */
for (i = 0; i < arity; ++i) {
- ir_node *pred = get_irn_
intra_
n(node, i);
+ ir_node *pred = get_irn_n(node, i);
ir_node *leader = lookup(pred);
ir_node *trans;
ir_node *leader = lookup(pred);
ir_node *trans;
@@
-394,7
+394,7
@@
static ir_node *phi_translate(ir_node *node, ir_node *block, int pos, ir_valuese
nn = new_ir_node(
get_irn_dbg_info(node),
current_ir_graph,
nn = new_ir_node(
get_irn_dbg_info(node),
current_ir_graph,
-
NULL
,
+
get_nodes_block(node)
,
get_irn_op(node),
get_irn_mode(node),
arity,
get_irn_op(node),
get_irn_mode(node),
arity,
@@
-403,9
+403,8
@@
static ir_node *phi_translate(ir_node *node, ir_node *block, int pos, ir_valuese
node might depend on that. */
copy_node_attr(current_ir_graph, node, nn);
node might depend on that. */
copy_node_attr(current_ir_graph, node, nn);
- set_nodes_block(nn, get_nodes_block(node));
for (i = 0; i < arity; ++i) {
for (i = 0; i < arity; ++i) {
- ir_node *pred = get_irn_
intra_
n(node, i);
+ ir_node *pred = get_irn_n(node, i);
ir_node *leader = lookup(pred);
ir_node *trans;
ir_node *leader = lookup(pred);
ir_node *trans;
@@
-540,7
+539,7
@@
static void insert_nodes(ir_node *block, void *ctx)
pre_env *env = ctx;
ir_node *value, *expr, *idom, *first_s, *worklist;
block_info *curr_info, *idom_info;
pre_env *env = ctx;
ir_node *value, *expr, *idom, *first_s, *worklist;
block_info *curr_info, *idom_info;
- int pos, arity = get_irn_
intra_
arity(block);
+ int pos, arity = get_irn_arity(block);
int all_same, by_some, updated;
ir_valueset_iterator_t iter;
int all_same, by_some, updated;
ir_valueset_iterator_t iter;
@@
-640,7
+639,8
@@
static void insert_nodes(ir_node *block, void *ctx)
/* ignore bad blocks. */
if (is_Bad(pred_blk)) {
/* ignore bad blocks. */
if (is_Bad(pred_blk)) {
- in[pos] = new_Bad();
+ ir_graph *irg = get_irn_irg(pred_blk);
+ in[pos] = new_r_Bad(irg);
continue;
}
continue;
}
@@
-718,7
+718,7
@@
static void eliminate(ir_node *irn, void *ctx)
{
pre_env *env = ctx;
{
pre_env *env = ctx;
- if (
is_no
_Block(irn)) {
+ if (
!is
_Block(irn)) {
ir_node *block = get_nodes_block(irn);
block_info *bl = get_block_info(block);
ir_node *value = lookup(irn);
ir_node *block = get_nodes_block(irn);
block_info *bl = get_block_info(block);
ir_node *value = lookup(irn);
@@
-762,7
+762,7
@@
static void eliminate_nodes(elim_pair *pairs)
int i;
ir_node *res = NULL;
int i;
ir_node *res = NULL;
- for (i = get_irn_
intra_
arity(p->new_node) - 1; i >= 0; --i) {
+ for (i = get_irn_arity(p->new_node) - 1; i >= 0; --i) {
ir_node *pred = get_irn_n(p->new_node, i);
if (pred != p->old_node) {
ir_node *pred = get_irn_n(p->new_node, i);
if (pred != p->old_node) {
@@
-806,7
+806,7
@@
void do_gvn_pre(ir_graph *irg)
/* edges will crash if enabled due to our allocate on other obstack trick */
edges_deactivate(irg);
/* edges will crash if enabled due to our allocate on other obstack trick */
edges_deactivate(irg);
-
value_table = new_identities(
);
+
new_identities(irg
);
ir_nodemap_init(&value_map);
obstack_init(&obst);
ir_nodemap_init(&value_map);
obstack_init(&obst);
@@
-816,10
+816,6
@@
void do_gvn_pre(ir_graph *irg)
a_env.end_block = get_irg_end_block(irg);
a_env.pairs = NULL;
a_env.end_block = get_irg_end_block(irg);
a_env.pairs = NULL;
- /* Move Proj's into the same block as their args,
- else we would assign the result to wrong blocks */
- normalize_proj_nodes(irg);
-
/* critical edges MUST be removed */
remove_critical_cf_edges(irg);
/* critical edges MUST be removed */
remove_critical_cf_edges(irg);
@@
-890,10
+886,8
@@
void do_gvn_pre(ir_graph *irg)
if (bl_info->new_set)
ir_valueset_del(bl_info->new_set);
}
if (bl_info->new_set)
ir_valueset_del(bl_info->new_set);
}
- del_identities(value_table);
ir_nodemap_destroy(&value_map);
obstack_free(&obst, NULL);
ir_nodemap_destroy(&value_map);
obstack_free(&obst, NULL);
- value_table = 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);
/* 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);