projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
reindent escape_ana.c in firm style
[libfirm]
/
ir
/
opt
/
ldstopt.c
diff --git
a/ir/opt/ldstopt.c
b/ir/opt/ldstopt.c
index
fe175a9
..
c8552d6
100644
(file)
--- a/
ir/opt/ldstopt.c
+++ b/
ir/opt/ldstopt.c
@@
-215,7
+215,7
@@
static void collect_nodes(ir_node *node, void *env)
if (is_Proj(proj)) {
pred = get_Proj_pred(proj);
if (is_Proj(proj)) {
pred = get_Proj_pred(proj);
- is_exc =
get_Proj_proj(proj) == pn_Generic_X_except
;
+ is_exc =
is_x_except_Proj(proj)
;
}
/* ignore Bad predecessors, they will be removed later */
}
/* ignore Bad predecessors, they will be removed later */
@@
-709,8
+709,7
@@
static void handle_load_update(ir_node *load)
ir_node *mem = get_Load_mem(load);
/* a Load whose value is neither used nor exception checked, remove it */
ir_node *mem = get_Load_mem(load);
/* a Load whose value is neither used nor exception checked, remove it */
- if (info->projs[pn_Load_M])
- exchange(info->projs[pn_Load_M], mem);
+ exchange(info->projs[pn_Load_M], mem);
if (info->projs[pn_Load_X_regular])
exchange(info->projs[pn_Load_X_regular], new_r_Jmp(get_nodes_block(load)));
kill_node(load);
if (info->projs[pn_Load_X_regular])
exchange(info->projs[pn_Load_X_regular], new_r_Jmp(get_nodes_block(load)));
kill_node(load);
@@
-914,7
+913,7
@@
static int try_load_after_store(ir_node *load,
/* no exception */
if (info->projs[pn_Load_X_except]) {
ir_graph *irg = get_irn_irg(load);
/* no exception */
if (info->projs[pn_Load_X_except]) {
ir_graph *irg = get_irn_irg(load);
- exchange( info->projs[pn_Load_X_except], new_r_Bad(irg));
+ exchange( info->projs[pn_Load_X_except], new_r_Bad(irg
, mode_X
));
res |= CF_CHANGED;
}
if (info->projs[pn_Load_X_regular]) {
res |= CF_CHANGED;
}
if (info->projs[pn_Load_X_regular]) {
@@
-1020,7
+1019,7
@@
static unsigned follow_Mem_chain(ir_node *load, ir_node *curr)
/* no exception */
if (info->projs[pn_Load_X_except]) {
ir_graph *irg = get_irn_irg(load);
/* no exception */
if (info->projs[pn_Load_X_except]) {
ir_graph *irg = get_irn_irg(load);
- exchange(info->projs[pn_Load_X_except], new_r_Bad(irg));
+ exchange(info->projs[pn_Load_X_except], new_r_Bad(irg
, mode_X
));
res |= CF_CHANGED;
}
if (info->projs[pn_Load_X_regular]) {
res |= CF_CHANGED;
}
if (info->projs[pn_Load_X_regular]) {
@@
-1157,7
+1156,7
@@
static unsigned optimize_load(ir_node *load)
/* no exception, clear the info field as it might be checked later again */
if (info->projs[pn_Load_X_except]) {
ir_graph *irg = get_irn_irg(load);
/* no exception, clear the info field as it might be checked later again */
if (info->projs[pn_Load_X_except]) {
ir_graph *irg = get_irn_irg(load);
- exchange(info->projs[pn_Load_X_except], new_r_Bad(irg));
+ exchange(info->projs[pn_Load_X_except], new_r_Bad(irg
, mode_X
));
info->projs[pn_Load_X_except] = NULL;
res |= CF_CHANGED;
}
info->projs[pn_Load_X_except] = NULL;
res |= CF_CHANGED;
}
@@
-1192,7
+1191,7
@@
static unsigned optimize_load(ir_node *load)
/* we completely replace the load by this value */
if (info->projs[pn_Load_X_except]) {
ir_graph *irg = get_irn_irg(load);
/* we completely replace the load by this value */
if (info->projs[pn_Load_X_except]) {
ir_graph *irg = get_irn_irg(load);
- exchange(info->projs[pn_Load_X_except], new_r_Bad(irg));
+ exchange(info->projs[pn_Load_X_except], new_r_Bad(irg
, mode_X
));
info->projs[pn_Load_X_except] = NULL;
res |= CF_CHANGED;
}
info->projs[pn_Load_X_except] = NULL;
res |= CF_CHANGED;
}
@@
-1510,10
+1509,6
@@
static unsigned optimize_phi(ir_node *phi, walk_env_t *wenv)
block = get_nodes_block(store);
block = get_nodes_block(store);
- /* abort on dead blocks */
- if (is_Block_dead(block))
- return 0;
-
/* check if the block is post dominated by Phi-block
and has no exception exit */
bl_info = (block_info_t*)get_irn_link(block);
/* check if the block is post dominated by Phi-block
and has no exception exit */
bl_info = (block_info_t*)get_irn_link(block);
@@
-1549,10
+1544,7
@@
static unsigned optimize_phi(ir_node *phi, walk_env_t *wenv)
if (exc != info->exc_block)
return 0;
if (exc != info->exc_block)
return 0;
- /* abort on dead blocks */
block = get_nodes_block(pred);
block = get_nodes_block(pred);
- if (is_Block_dead(block))
- return 0;
/* check if the block is post dominated by Phi-block
and has no exception exit. Note that block must be different from
/* check if the block is post dominated by Phi-block
and has no exception exit. Note that block must be different from
@@
-1927,7
+1919,12
@@
static void move_loads_out_of_loops(scc *pscc, loop_env *env)
ninfo = get_ldst_info(irn, phase_obst(&env->ph));
ninfo->projs[pn_Load_M] = mem = new_r_Proj(irn, mode_M, pn_Load_M);
ninfo = get_ldst_info(irn, phase_obst(&env->ph));
ninfo->projs[pn_Load_M] = mem = new_r_Proj(irn, mode_M, pn_Load_M);
- set_Phi_pred(phi, pos, mem);
+ if (res == NULL) {
+ /* irn is from cache, so do not set phi pred again.
+ * There might be other Loads between phi and irn already.
+ */
+ set_Phi_pred(phi, pos, mem);
+ }
ninfo->projs[pn_Load_res] = new_r_Proj(irn, load_mode, pn_Load_res);
}
ninfo->projs[pn_Load_res] = new_r_Proj(irn, load_mode, pn_Load_res);
}
@@
-2286,8
+2283,8
@@
int optimize_load_store(ir_graph *irg)
/* Handle graph state */
if (env.changes) {
/* Handle graph state */
if (env.changes) {
- set_irg_outs_inconsistent(irg);
set_irg_entity_usage_state(irg, ir_entity_usage_not_computed);
set_irg_entity_usage_state(irg, ir_entity_usage_not_computed);
+ edges_deactivate(irg);
}
if (env.changes & CF_CHANGED) {
}
if (env.changes & CF_CHANGED) {