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] Support vectorization of double reduction


On Sun, Jul 12, 2009 at 12:10 AM, Ira Rosen <IRAR@il.ibm.com> wrote:
>
> Hi,
>
> This patch enables vectorization of outer loops with double reduction,
> e.g.,
>
> ?s = 0;
> ?for i
> ? ?for j
> ? ? ?s += a[j][i];
> ?use (s)
>
> i.e., the reduction is used only outside the outer loop.
>
>
> Bootstrapped with vectorization enabled and tested on x86_64-suse-linux.
> Committed revision 149526.
>
> Ira
>
> ChangeLog:
>
> ? ? ?* tree-parloops.c (loop_parallel_p): Call vect_is_simple_reduction
> ? ? ?with additional argument.
> ? ? ?* tree-vectorizer.h (enum vect_def_type): Add
> ? ? ?vect_double_reduction_def.
> ? ? ?(vect_is_simple_reduction): Add argument.
> ? ? ?* tree-vect-loop.c (vect_determine_vectorization_factor): Fix
> ? ? ?indentation.
> ? ? ?(vect_analyze_scalar_cycles_1): Detect double reduction. Call
> ? ? ?vect_is_simple_reduction with additional argument.
> ? ? ?(vect_analyze_loop_operations): Handle exit phi nodes in case of
> ? ? ?double reduction.
> ? ? ?(reduction_code_for_scalar_code): Handle additional codes by
> ? ? ?returning ERROR_MARK for them. Fix comment and indentation.
> ? ? ?(vect_is_simple_reduction): Fix comment, add argument to specify
> ? ? ?double reduction. Detect double reduction.
> ? ? ?(get_initial_def_for_induction): Fix indentation.
> ? ? ?(get_initial_def_for_reduction): Fix comment and indentation.
> ? ? ?Handle double reduction. Create initial definitions that do not
> ? ? ?require adjustment if ADJUSTMENT_DEF is NULL. Handle additional
> cases.
> ? ? ?(vect_create_epilog_for_reduction): Fix comment, add argument to
> ? ? ?handle double reduction. Use PLUS_EXPR in case of MINUS_EXPR in
> ? ? ?epilogue result extraction. Create double reduction phi node and
> ? ? ?replace relevant uses.
> ? ? ?(vectorizable_reduction): Call vect_is_simple_reduction with
> ? ? ?additional argument. Fix indentation. Update epilogue code treatment
> ? ? ?according to the changes in reduction_code_for_scalar_code. Check
> ? ? ?for double reduction. Call vect_create_epilog_for_reduction with
> ? ? ?additional argument.
> ? ? ?* tree-vect-stmts.c (process_use): Handle double reduction, update
> ? ? ?documentation.
> ? ? ?(vect_mark_stmts_to_be_vectorized): Handle double reduction.
> ? ? ?(vect_get_vec_def_for_operand): Likewise.
>

This caused:

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=44507

-- 
H.J.


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