This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [patch]Fix the aliasing on vector replacements to match the originalscalar array


Diego Novillo <dnovillo@redhat.com> wrote on 05/25/2005 08:26:03 AM:

> On Wed, May 25, 2005 at 02:14:22AM -0500, Keith Besaw wrote:
> > /* NEXT_PASS (pass_may_alias) cannot be done again because the
> >    vectorizer creates alias relations that are not supported by
> >    pass_may_alias.  */
> > 
> Yes.
> 

Attached is a replacement patch addressing your comments including
the above comment in init_tree_optimization_passes in tree_optimize.c.

The following function and arguments description has been added for
procedure new_type_alias (tree ptr, tree var):

+/* Create a type tag for PTR.  Construct the may-alias list of this type 
tag
+   so that it has the aliasing of VAR.  */

In tree-vect-transform.c vectorizable_store has been changed to use
the more compact:

      FOR_EACH_SSA_TREE_OPERAND (def, stmt, iter, SSA_OP_VMAYDEF)

The following comment has been added in vectorizable_store to describe
why the call mark_sym_for_renaming is needed:

+      /* If this virtual def has a use outside the loop and a loop peel 
is performed
+         then the def may be renamed by the peel.  Mark it for renaming 
so the
+         later use will also be renamed.  */

tested on ppc

OK for mainline?

Keith

Changelog:

      2005-05-10  Keith Besaw  <kbesaw@us.ibm.com>

      * tree-ssa-alias.c (new_type_alias): New procedure to
        create a type memory tag for a pointer with a may-alias
        set determined from a variable declaration.
      * tree-flow.h: export declaration of new_type_alias
      * tree-optimize.c (init_tree_optimization_passes): document
      that pass_may_alias cannot be called after pass_vectorize.
      * tree-vect-transform (vect_create_data_ref_ptr): Call
      new_type_alias when an type memory tag isn't available
      for a reference.
      (vectorizable_store): Use copy_virtual_operands to update
      virtual defs in place (so that loop_version can be called).
      Call mark_for_renaming for the virtual defs in case peeling
      is done and virtual uses outside the loop need to be updated.

Patch:

Attachment: vect.5-26m.diff
Description: Binary data


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]