Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Zwinkau
libfirm
Commits
d584ba3f
Commit
d584ba3f
authored
Sep 21, 2008
by
Michael Beck
Browse files
- BugFix: fixed -r22093
- add additional debug output [r22159]
parent
c210aa27
Changes
1
Hide whitespace changes
Inline
Side-by-side
ir/opt/ldstopt.c
View file @
d584ba3f
...
...
@@ -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
))
{
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
{
...
...
@@ -399,6 +400,7 @@ static compound_graph_path *rec_get_accessed_path(ir_node *ptr, int depth) {
}
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
))
{
...
...
@@ -419,10 +421,10 @@ ptr_arith:
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
(
t
v
,
sz
);
tv_index
=
tarval_div
(
t
mp
,
sz
);
t
mp
=
tarval_mod
(
t
mp
,
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"
);
...
...
@@ -442,7 +444,7 @@ ptr_arith:
/* 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
;
}
...
...
@@ -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
)
{
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
{
...
...
@@ -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
);
DB
((
dbg
,
LEVEL_1
,
" Constant access at %F%F resulted in %+F
\n
"
,
ent
,
path
,
value
));
free_compound_graph_path
(
path
);
}
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment