This is the mail archive of the 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]

[autovect] [committed] vectorizer idiom recognition support and saturatingsubtraction

This patch adds an analysis pass that searches for computation idioms in
the program. It is a tentative implementation, that invokes the
pattern-recognition pass from within the vectorizer, only on loops that are
candidate for vectorization. The pattern is replaced only if it can be
vectorized. We may want instead to invoke it as a general pass independent
of the vectorizer that searches for such idioms anywhere in the program (as
part of a tree-combine pass?).

Patterns are detected by invoking a set of pattern recognition functions.
Currently I implemented one such function - that detects unsigned
saturating subtraction. Additional patterns can and will be added (I will
probably take it out of tree-vectorizer.c into a separate file as they are
independent of the vectorizer).

Comments are welcome




        * tree.def (SAT_MINUS_EXPR): New tree code.
        * expr.c (expand_expr_real_1): Add SAT_MINUS_EXPR case.
        * tree-pretty-print.c (dump_generic_node): Likewise.
        (op_prio, op_symbol): Likewise.
        * optabs.c (optab_for_tree_code): Likewise.
        (init_optabs): Initializae ssat_sub_optab, usat_sub_optab.
        * optabs.h (OTI_ssat_sub, OTI_usat_sub): New.
        (ssat_sub_optab, usat_sub_optab): New.
        * genopinit.c (ssat_sub_optab, usat_sub_optab): New optabs.
        * tree-vectorizer.c (vect_pattern_recog): New function.
        (vect_pattern_recog_1): New function.
        (vect_recog_unsigned_subsat_pattern): New function.
        (new_stmt_vec_info): Initialize new fields IN_PATTERN_P and
        (vectorizable_operation): Handle the case that the stmt to be
vectorized is a
        new stmt that was added to replace a pattern.
        (vect_mark_relevant): Hanlde stmts that are marked as IN_PATTERN.
        (vect_mark_stmts_to_be_vectorized): Don't reset to 0.
        (vect_analyze_loop): Call vect_pattern_recog.
        * tree-vectorizer.h (in_pattern_p, related_stmt): New fields in
access the
        new fields.
        (vect_pattern_recog_func): New array of pattern recognition
        * config/rs6000/ (usat_subv16qi3, usat_subv8hi3,
usat_subv4si3): New.

(See attached file: patch.subsat)

Attachment: patch.subsat
Description: Binary data

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