[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