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: [autovect] [patch] generic reduction patterns





> Will be committed as soon as the branch is synched with mainline (later
this
> week).

Retested and bootstrapped (with vectorization enabled) on ppc-linux, and
committed to the branch (updated patch attached below).

dorit

(See attached file: sept21.widen.txt)


>
>
> In http://gcc.gnu.org/ml/gcc-patches/2005-04/msg00532.html I introduced
> support for target specific reduction patterns. These patterns (e.g.
> widening summation, dot product, sum of absolute differences) have
> specialized support across several targets, and therefore we agreed in
that
> thread that it makes sense to introduce these patterns as generic
patterns
> rather than target specific ones. We tried to formulate the semantics of
> these reduction idioms, and specifically idioms that involves widening
(the
> results is at least one machine mode bigger than the argument). The
problem
> was that different targets have different mechanisms to support these
> idioms. E.g., in SSE the result of a widening sum of chars is short,
> whereas in Altivec the result of a widening sum of chars is int. Instead
of
> trying to predefine the width of the result of a widen_sum_optab, we
> decided to check the size of the result directly from the pattern of the
> operation. I.e., we first get
>       icode=widen_sum_optab->handlers[mode].insn_code exsits
> and check if:
>       icode!=CODE_FOR_nothing
> and then get the width of the result:
>       insn_data[icode].operand[0].mode
> and check that it matches the mode of the result in the computation we
want
> to vectorize. This means we're going a bit deeper into the machine
> description than we have so far, but it looks like things like that will
> become unavoidable (see also the vector shifts problem -
> http://gcc.gnu.org/ml/gcc/2005-09/msg00004.html).
>
> This patch includes:
> - new pattern-recognition-function to detect the widen-sum idiom
> - new tree-code and optabs
> - extended the reduction vectorization routines to also support reduction
> patterns
> - removed the previous target specific implementation of this pattern.
>
> Yet to do:
> - support summation of char->short even if a target doesn't support that
> directly, but does support summation of char->int (by truncating the
final
> result).
> - support more reduction patterns (e.g. dot product).
>
> Bootstrapped (with vectorization enabled) on powerpc-suse-linux and
> powerpc-darwin.
>
> Will be committed as soon as the branch is syched with mainline (later
this
> week).
> Also missing in this patch documentation for md.texi, which I will add
> later.
>
> dorit
>
> ChangeLog:
>
>         * expr.c (expand_expr_real_1): Add case WIDEN_SUM_EXPR.
>         * genopinit.c (ssum_widen_optab): Init new optab.
>         (usum_widen_optab): Likewise.
>         * optabs.c (optab_for_tree_code): Add case WIDEN_SUM_EXPR.
>         (expand_widen_pattern_expr): New function.
>         (init_optabs): Initialize new optabs ssum_widen_optab and
>         usum_widen_optab.
>         * optabs.h (OTI_ssum_widen, OTI_usum_widen): New optabs.
>         (ssum_widen_optab,  usum_widen_optab): New optabs.
>         (expand_widen_pattern_expr): New function declaration.
>         * tree-pretty-print.c (dump_generic_node): Add case
WIDEN_SUM_EXPR.
>         (op_prio): Add case WIDEN_SUM_EXPR.
>         (op_symbol): Add case WIDEN_SUM_EXPR.
>         * tree-vect-analyze.c (recog.h): Add include.
>         (vect_pattern_recog_funcs): Add function to initialization.
>         (vect_recog_widen_sum_pattern): New function.
>         (vect_pattern_recog_1): Update documentation.
>         * tree-vect-transform.c (vect_init_vector): Take vectype from the
>         reduction variable instead of STMT_VINFO_VECTYPE.
>         (get_initial_def_for_reduction): Likewise. Also add case
> WIDEN_SUM_EXPR.
>         (vect_create_epilog_for_reduction): Take vectype from the
>         reduction variable instead of STMT_VINFO_VECTYPE. Take code,
>         scalar_dest and scalar_type from orig_stmt if available. Add
> assert.
>         (vectorizable_reduction): Handle reduction patterns.
>         * tree-vectorizer.c (vect_is_simple_reduction): Bring over fix
from
>         mainline.
>         * tree-vectorizer.h (NUM_PATTERNS): Set to 2.
>         (vect_recog_widen_sum_pattern): New function declaration.
>         * tree.def (WIDEN_SUM_EXPR): New tree-code.
>         * config/rs6000/altivec.md (widen_usum<mode>3): New pattern.
>         (widen_ssumv16qi3, widen_ssumv8hi3): New patterns.
>         * config/rs6000/rs6000.c (altivec_builtin_widening_summation):
> Removed.
>         (target_vect_pattern_recog_funcs): Remove initialization.
>         (target_vect_recog_widening_summation_pattern): Function removed.
>         (rs6000_expand_builtin): Removed handling of case
>         ALTIVEC_BUILTIN_WIDENING_SUMMATION.
>         (altivec_init_builtins): Remove initialization of builtin
>         ALTIVEC_BUILTIN_WIDENING_SUMMATION.
>         * config/rs6000/rs6000.h (TARGET_VECT_NUM_PATTERNS): Set to 0.
>
>         * tree-pretty-print.c (op_symbol): Remove case REDUC_PLUS_EXPR.
>         * tree-vect-analyze.c (vect_recog_unsigned_subsat_pattern): Move
>         debug printout.
>
>
> Patch and testcases:
>
> (See attached file: widen-sum.sept6.txt)
>
> (See attached file: vect-reduc-pattern-1.c)(See attached file:
> vect-reduc-pattern-2.c)[attachment "widen-sum.sept6.txt" deleted by
> Dorit Naishlos/Haifa/IBM] [attachment "vect-reduc-pattern-1.c"
> deleted by Dorit Naishlos/Haifa/IBM] [attachment "vect-reduc-
> pattern-2.c" deleted by Dorit Naishlos/Haifa/IBM]

Attachment: sept21.widen.txt
Description: Text document


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