[Bug tree-optimization/55334] mgrid regression (ipa-cp disables vectorization)
hubicka at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Nov 15 11:42:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=55334
Jan Hubicka <hubicka at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|UNCONFIRMED |NEW
Last reconfirmed| |2012-11-15
Ever Confirmed|0 |1
--- Comment #3 from Jan Hubicka <hubicka at gcc dot gnu.org> 2012-11-15 11:42:21 UTC ---
OK, it is not base_address, but base_object
Creating dr for MEM[(real(kind=8)[4] *)&x + 58071104B][0]
analyze_innermost: success.
base_address: &x
offset from base address: 0
constant offset from base address: 58071104
step: 0
aligned to: 128
base_object: MEM[(real(kind=8)[4] *)&x + 58071104B]
Access function 0: 0
I do not see why we need to keep the base object to be offsetted.
While it is first time I see the code, i think it is trying to look for
MEM_REFs and remember the fact that after putting it to 0 the offset may go
across the type boundry, since we changed the type via MEM_REF. For
non-envolving mem-refs this however is not a problem.
I am testing the following that simply removes the constant from MEM_REF
Index: tree-data-ref.c
===================================================================
--- tree-data-ref.c (revision 193503)
+++ tree-data-ref.c (working copy)
@@ -922,6 +922,16 @@ dr_analyze_indices (struct data_referenc
DR_UNCONSTRAINED_BASE (dr) = true;
VEC_safe_push (tree, heap, access_fns, access_fn);
}
+ else
+ {
+ if (!integer_zerop (TREE_OPERAND (ref, 1)))
+ ref = fold_build2_loc (EXPR_LOCATION (ref),
+ MEM_REF, TREE_TYPE (ref),
+ op,
+ build_int_cst (TREE_TYPE (TREE_OPERAND (ref,
+ 1)),
+ 0));
+ }
}
else if (DECL_P (ref))
{
More information about the Gcc-bugs
mailing list