projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
panic() instead of assert(0).
[libfirm]
/
ir
/
opt
/
ldstopt.c
diff --git
a/ir/opt/ldstopt.c
b/ir/opt/ldstopt.c
index
39ce34c
..
91347a7
100644
(file)
--- a/
ir/opt/ldstopt.c
+++ b/
ir/opt/ldstopt.c
@@
-386,11
+386,12
@@
static compound_graph_path *rec_get_accessed_path(ir_node *ptr, int depth) {
set_compound_graph_path_array_index(res, pos, get_Sel_array_index_long(ptr, 0));
}
} else if (is_Add(ptr)) {
set_compound_graph_path_array_index(res, pos, get_Sel_array_index_long(ptr, 0));
}
} else if (is_Add(ptr)) {
- ir_node *l = get_Add_left(ptr);
- ir_node *r = get_Add_right(ptr);
- ir_mode *mode;
+ ir_node *l = get_Add_left(ptr);
+ ir_node *r = get_Add_right(ptr);
+ ir_mode *mode = get_irn_mode(ptr);
+ tarval *tmp;
- if (is_Const(r)) {
+ if (is_Const(r)
&& get_irn_mode(l) == mode
) {
ptr = l;
tv = get_Const_tarval(r);
} else {
ptr = l;
tv = get_Const_tarval(r);
} else {
@@
-399,6
+400,7
@@
static compound_graph_path *rec_get_accessed_path(ir_node *ptr, int depth) {
}
ptr_arith:
mode = get_tarval_mode(tv);
}
ptr_arith:
mode = get_tarval_mode(tv);
+ tmp = tv;
/* ptr must be a Sel or a SymConst, this was checked in find_constant_entity() */
if (is_Sel(ptr)) {
/* ptr must be a Sel or a SymConst, this was checked in find_constant_entity() */
if (is_Sel(ptr)) {
@@
-419,10
+421,10
@@
ptr_arith:
size = get_type_size_bytes(get_entity_type(ent));
sz = new_tarval_from_long(size, mode);
size = get_type_size_bytes(get_entity_type(ent));
sz = new_tarval_from_long(size, mode);
- tv_index = tarval_div(t
v
, sz);
- t
v = tarval_mod(tv
, sz);
+ tv_index = tarval_div(t
mp
, sz);
+ t
mp = tarval_mod(tmp
, sz);
- if (tv_index == tarval_bad || t
v
== tarval_bad)
+ if (tv_index == tarval_bad || t
mp
== tarval_bad)
return NULL;
assert(get_array_n_dimensions(tp) == 1 && "multiarrays not implemented");
return NULL;
assert(get_array_n_dimensions(tp) == 1 && "multiarrays not implemented");
@@
-442,7
+444,7
@@
ptr_arith:
/* ok, bounds check finished */
++idx;
}
/* ok, bounds check finished */
++idx;
}
- if (! tarval_is_null(t
v
)) {
+ if (! tarval_is_null(t
mp
)) {
/* access to some struct/union member */
return NULL;
}
/* access to some struct/union member */
return NULL;
}
@@
-500,7
+502,8
@@
ptr_arith:
* valid, if the graph is in phase_high and _no_ address computation is used.
*/
static compound_graph_path *get_accessed_path(ir_node *ptr) {
* valid, if the graph is in phase_high and _no_ address computation is used.
*/
static compound_graph_path *get_accessed_path(ir_node *ptr) {
- return rec_get_accessed_path(ptr, 0);
+ compound_graph_path *gr = rec_get_accessed_path(ptr, 0);
+ return gr;
} /* get_accessed_path */
typedef struct path_entry {
} /* get_accessed_path */
typedef struct path_entry {
@@
-1188,6
+1191,7
@@
static unsigned optimize_load(ir_node *load)
assert(is_proper_compound_graph_path(path, get_compound_graph_path_length(path)-1));
value = get_compound_ent_value_by_path(ent, path);
assert(is_proper_compound_graph_path(path, get_compound_graph_path_length(path)-1));
value = get_compound_ent_value_by_path(ent, path);
+ DB((dbg, LEVEL_1, " Constant access at %F%F resulted in %+F\n", ent, path, value));
free_compound_graph_path(path);
}
}
free_compound_graph_path(path);
}
}