projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
split irg and irp resources, add IRP_RESOURCE_TYPE_LINK
[libfirm]
/
ir
/
opt
/
ldstopt.c
diff --git
a/ir/opt/ldstopt.c
b/ir/opt/ldstopt.c
index
5770288
..
156293d
100644
(file)
--- a/
ir/opt/ldstopt.c
+++ b/
ir/opt/ldstopt.c
@@
-74,7
+74,7
@@
typedef struct walk_env_t {
/** A Load/Store info. */
typedef struct ldst_info_t {
/** A Load/Store info. */
typedef struct ldst_info_t {
- ir_node *projs[MAX_PROJ
];
/**< list of Proj's of this node */
+ ir_node *projs[MAX_PROJ
+1];
/**< list of Proj's of this node */
ir_node *exc_block; /**< the exception block if available */
int exc_idx; /**< predecessor index in the exception block */
unsigned visited; /**< visited counter for breaking loops */
ir_node *exc_block; /**< the exception block if available */
int exc_idx; /**< predecessor index in the exception block */
unsigned visited; /**< visited counter for breaking loops */
@@
-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 */
@@
-913,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]) {
@@
-1019,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]) {
@@
-1156,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;
}
@@
-1191,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;
}
@@
-1480,7
+1480,10
@@
static unsigned optimize_store(ir_node *store)
static unsigned optimize_phi(ir_node *phi, walk_env_t *wenv)
{
int i, n;
static unsigned optimize_phi(ir_node *phi, walk_env_t *wenv)
{
int i, n;
- ir_node *store, *old_store, *ptr, *block, *phi_block, *phiM, *phiD, *exc, *projM;
+ ir_node *store, *ptr, *block, *phi_block, *phiM, *phiD, *exc, *projM;
+#ifdef DO_CACHEOPT
+ ir_node *old_store;
+#endif
ir_mode *mode;
ir_node **inM, **inD, **projMs;
int *idx;
ir_mode *mode;
ir_node **inM, **inD, **projMs;
int *idx;
@@
-1503,16
+1506,14
@@
static unsigned optimize_phi(ir_node *phi, walk_env_t *wenv)
return 0;
store = skip_Proj(projM);
return 0;
store = skip_Proj(projM);
+#ifdef DO_CACHEOPT
old_store = store;
old_store = store;
+#endif
if (!is_Store(store))
return 0;
block = get_nodes_block(store);
if (!is_Store(store))
return 0;
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);
@@
-1548,10
+1549,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
@@
-1680,7
+1678,7
@@
static void do_load_store_optimize(ir_node *n, void *env)
break;
default:
break;
default:
- ;
+
break
;
}
} /* do_load_store_optimize */
}
} /* do_load_store_optimize */
@@
-1821,7
+1819,6
@@
static unsigned hash_cache_entry(const avail_entry_t *entry)
static void move_loads_out_of_loops(scc *pscc, loop_env *env)
{
ir_node *phi, *load, *next, *other, *next_other;
static void move_loads_out_of_loops(scc *pscc, loop_env *env)
{
ir_node *phi, *load, *next, *other, *next_other;
- ir_entity *ent;
int j;
phi_entry *phi_list = NULL;
set *avail;
int j;
phi_entry *phi_list = NULL;
set *avail;
@@
-1877,7
+1874,6
@@
static void move_loads_out_of_loops(scc *pscc, loop_env *env)
/* for now, we can only move Load(Global) */
if (! is_Global(ptr))
continue;
/* for now, we can only move Load(Global) */
if (! is_Global(ptr))
continue;
- ent = get_Global_entity(ptr);
load_mode = get_Load_mode(load);
for (other = pscc->head; other != NULL; other = next_other) {
node_entry *ne = get_irn_ne(other, env);
load_mode = get_Load_mode(load);
for (other = pscc->head; other != NULL; other = next_other) {
node_entry *ne = get_irn_ne(other, env);
@@
-2200,15
+2196,15
@@
static void do_dfs(ir_graph *irg, loop_env *env)
ir_node *pred = get_Block_cfgpred(endblk, i);
pred = skip_Proj(pred);
ir_node *pred = get_Block_cfgpred(endblk, i);
pred = skip_Proj(pred);
- if (is_Return(pred))
+ if (is_Return(pred))
{
dfs(get_Return_mem(pred), env);
dfs(get_Return_mem(pred), env);
- else if (is_Raise(pred))
+ } else if (is_Raise(pred)) {
dfs(get_Raise_mem(pred), env);
dfs(get_Raise_mem(pred), env);
- else if (is_fragile_op(pred))
+ } else if (is_fragile_op(pred)) {
dfs(get_fragile_op_mem(pred), env);
dfs(get_fragile_op_mem(pred), env);
- else if (is_Bad(pred))
- /* ignore non-optimized block predecessor */
;
- else {
+ } else if (is_Bad(pred)) {
+ /* ignore non-optimized block predecessor */
+
}
else {
assert(0 && "Unknown EndBlock predecessor");
}
}
assert(0 && "Unknown EndBlock predecessor");
}
}
@@
-2290,8
+2286,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) {