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] Rewrite store-motion and invariant motion to use an alias oracle


On Tue, 25 Mar 2008, Diego Novillo wrote:

> On Tue, Mar 25, 2008 at 08:15, Richard Guenther <rguenther@suse.de> wrote:
> 
> >  2008-03-19  Zdenek Dvorak  <ook@ucw.cz>
> >
> >         * tree-affine.h (aff_combination_expand): Declare.
> >         (get_inner_reference_aff): Likewise.
> >         * tree-affine.c (aff_combination_expand): Split out from
> >         tree_to_aff_combination_expand.
> >         (get_inner_reference_aff): New function.
> >         * Makefile.in (tree-ssa-loop-im.o): Add tree-affine.h and
> >         pointer-set.h dependencies.
> >
> >         * tree-parloops.c (loop_parallel_p): Free vectorizer info.
> >
> >         * tree-ssa-loop-im.c: Include tree-affine.h and pointer-set.h.
> >         (struct lim_aux_data): sm_done field removed.
> >         (mem_ref_loc_p, mem_ref_locs_p): New types.
> >         (struct mem_ref): Added id, stored, accesses_in_loop,
> >         indep_loop, dep_loop, indep_ref, dep_ref fields.
> >         Removed is_stored, locs and next fields.
> >         (memory_accesses): New variable.
> >         (movement_possibility): Do not allow moving statements
> >         that store to memory.
> >         (outermost_indep_loop, simple_mem_ref_in_stmt, mem_ref_in_stmt):
> >         New functions.
> >         (determine_max_movement): For statements with memory references,
> >         find the outermost loop in that the reference is independent.
> >         (move_computations_stmt): Mark the virtual operands for
> >         renaming.
> >         (memref_free, mem_ref_alloc, mem_ref_locs_alloc, mark_ref_stored,
> >         gather_mem_refs_stmt, gather_mem_refs_in_loops, vtoe_hash, vtoe_eq,
> >         vtoe_free, record_vop_access, get_vop_accesses, get_vop_stores,
> >         add_vop_ref_mapping, create_vop_ref_mapping_loop,
> >         create_vop_ref_mapping, analyze_memory_references,
> >         cannot_overlap_p, mem_refs_may_alias_p, rewrite_mem_ref_loc,
> >         get_all_locs_in_loop, ref_always_accessed_p,
> >         refs_independent_p, record_indep_loop, ref_indep_loop_p_1,
> >         ref_indep_loop_p, can_sm_ref_p, find_refs_for_sm,
> >         store_motion_loop, store_motion): New functions.
> >         (struct vop_to_refs_elt): New type.
> >         (record_mem_ref_loc, free_mem_ref_locs, rewrite_mem_refs,
> >         memref_hash, memref_eq, hoist_memory_references): Rewritten.
> >         (schedule_sm): Replaced by...
> >         (execute_sm): ... this.
> >         (determine_lsm_ref, hoist_memory_references,
> >         loop_suitable_for_sm, gather_mem_refs_stmt, gather_mem_refs,
> >         find_more_ref_vops, free_mem_ref, free_mem_refs,
> >         determine_lsm_loop, determine_lsm): Removed.
> >         (tree_ssa_lim_finalize): Free data structures used by store
> >         motion.
> >         (tree_ssa_lim): Call analyze_memory_references.  Use
> >         store_motion instead of determine_lsm.
> >
> >         * gcc.dg/tree-ssa/loop-32.c: New testcase.
> >         * gcc.dg/tree-ssa/loop-33.c: Likewise.
> 
> OK.  One question: would it make sense to move mem_refs_may_alias_p to
> some common place like tree-ssa-alias.c?

In its current form it depends on the side-information compiled by
the store sinking code, so I think not.

But I though about merging refs_may_alias_p (from the SCCVN patch) with
nonoverlapping_memrefs_p (from alias.c).  At least there seems to be
opportunity to factor out common code.

Thanks,
Richard.


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