projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Added assertion to assure that we don't run into an endless loop.
[libfirm]
/
ir
/
opt
/
scalar_replace.c
diff --git
a/ir/opt/scalar_replace.c
b/ir/opt/scalar_replace.c
index
a4cd2ab
..
eaa8ee6
100644
(file)
--- a/
ir/opt/scalar_replace.c
+++ b/
ir/opt/scalar_replace.c
@@
-131,7
+131,7
@@
static int is_const_sel(ir_node *sel) {
for (i = 0; i < n; ++i) {
ir_node *idx = get_Sel_index(sel, i);
for (i = 0; i < n; ++i) {
ir_node *idx = get_Sel_index(sel, i);
- if (
get_irn_op(idx) != op_Const
)
+ if (
!is_Const(idx)
)
return 0;
}
return 1;
return 0;
}
return 1;
@@
-301,7
+301,7
@@
static int find_possible_replacements(ir_graph *irg) {
int i;
int res = 0;
int i;
int res = 0;
-
set_using_irn_visited(irg
);
+
ir_reserve_resources(irg, IR_RESOURCE_IRN_VISITED
);
inc_irg_visited(irg);
/*
inc_irg_visited(irg);
/*
@@
-358,7
+358,7
@@
static int find_possible_replacements(ir_graph *irg) {
}
}
}
}
-
clear_using_irn_visited(irg
);
+
ir_free_resources(irg, IR_RESOURCE_IRN_VISITED
);
return res;
}
return res;
}
@@
-488,12
+488,11
@@
typedef struct _env_t {
*/
static void topologic_walker(ir_node *node, void *ctx) {
env_t *env = ctx;
*/
static void topologic_walker(ir_node *node, void *ctx) {
env_t *env = ctx;
- ir_op *op = get_irn_op(node);
ir_node *adr, *block, *mem, *val;
ir_mode *mode;
unsigned vnum;
ir_node *adr, *block, *mem, *val;
ir_mode *mode;
unsigned vnum;
- if (
op == op_Load
) {
+ if (
is_Load(node)
) {
/* a load, check if we can resolve it */
adr = get_Load_ptr(node);
/* a load, check if we can resolve it */
adr = get_Load_ptr(node);
@@
-514,6
+513,9
@@
static void topologic_walker(ir_node *node, void *ctx) {
DB((dbg, SET_LEVEL_3, "replacing by value %u\n", vnum));
DB((dbg, SET_LEVEL_3, "replacing by value %u\n", vnum));
+ block = get_nodes_block(node);
+ set_cur_block(block);
+
/* check, if we can replace this Load */
val = get_value(vnum, env->modes[vnum]);
/* check, if we can replace this Load */
val = get_value(vnum, env->modes[vnum]);
@@
-529,13
+531,12
@@
static void topologic_walker(ir_node *node, void *ctx) {
val = new_d_Conv(get_irn_dbg_info(node), val, mode);
mem = get_Load_mem(node);
val = new_d_Conv(get_irn_dbg_info(node), val, mode);
mem = get_Load_mem(node);
- block = get_nodes_block(node);
turn_into_tuple(node, pn_Load_max);
set_Tuple_pred(node, pn_Load_M, mem);
set_Tuple_pred(node, pn_Load_res, val);
turn_into_tuple(node, pn_Load_max);
set_Tuple_pred(node, pn_Load_M, mem);
set_Tuple_pred(node, pn_Load_res, val);
- set_Tuple_pred(node, pn_Load_X_regular, new_
r_Jmp(current_ir_graph, block
));
+ set_Tuple_pred(node, pn_Load_X_regular, new_
Jmp(
));
set_Tuple_pred(node, pn_Load_X_except, new_Bad());
set_Tuple_pred(node, pn_Load_X_except, new_Bad());
- } else if (
op == op_Store
) {
+ } else if (
is_Store(node)
) {
DB((dbg, SET_LEVEL_3, " checking %+F for replacement ", node));
/* a Store always can be replaced */
DB((dbg, SET_LEVEL_3, " checking %+F for replacement ", node));
/* a Store always can be replaced */
@@
-560,14
+561,15
@@
static void topologic_walker(ir_node *node, void *ctx) {
val = get_Store_value(node);
if (get_irn_mode(val) != env->modes[vnum])
val = new_d_Conv(get_irn_dbg_info(node), val, env->modes[vnum]);
val = get_Store_value(node);
if (get_irn_mode(val) != env->modes[vnum])
val = new_d_Conv(get_irn_dbg_info(node), val, env->modes[vnum]);
- set_value(vnum, val);
- mem = get_Store_mem(node);
block = get_nodes_block(node);
block = get_nodes_block(node);
+ set_cur_block(block);
+ set_value(vnum, val);
+ mem = get_Store_mem(node);
turn_into_tuple(node, pn_Store_max);
set_Tuple_pred(node, pn_Store_M, mem);
turn_into_tuple(node, pn_Store_max);
set_Tuple_pred(node, pn_Store_M, mem);
- set_Tuple_pred(node, pn_Store_X_regular, new_
r_Jmp(current_ir_graph, block
));
+ set_Tuple_pred(node, pn_Store_X_regular, new_
Jmp(
));
set_Tuple_pred(node, pn_Store_X_except, new_Bad());
}
}
set_Tuple_pred(node, pn_Store_X_except, new_Bad());
}
}