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] | |
Improve the detection of "unordered" widening-multiplication
(widening-multiplication whose result of is used only in a reduction
computation). Before, we were detecting "unordered" widen-mult only if it
was directly used by a reduction (i.e we checked only the immediate uses).
This patch detects if a def of a stmt in the loop is used only to
(eventually) feed a reduction computation (even if this involves other
stmts on the way). We do that during our bottom-up (uses-to-defs) analysis
to detect relevant/live code in the loop, so we practically get this for
free. For altivec this patch allows generating more efficient code (i.e.
"mul_even"/"mul_odd" instead of "mul_hi"/"mul_lo") for the new added
testcase.
Bootstrapped with vectorization enabled and tested on the vectorizer
testcases on powerpc-linux. Committed to autovect-branch.
dorit
* tree-vect-analyze.c (vect_mark_relevant): Third argument "bool
relevant_p" changed to "enum vect_relevant relevant". Record the
max of STMT_VINFO_RELEVANT and 'relevant' instead of their or.
(vect_stmt_relevant_p): Third argument "bool relevant_p" changed to
"enum vect_relevant relevant". Record the value
"vect_used_in_loop"
instead of "true".
(vect_mark_stmts_to_be_vectorized): Variable "bool relevant_p"
changed
to "enum vect_relevant relevant". For reduction case, set relevant
to
"vect_used_by_reduction" instead of "true".
* tree-vect-transofrm.c (vectorizable_type_promotion): Pass 'stmt'
to
supportable_widening_operation, instead of 'orig_stmt_in_pattern'.
* tree-vectorizer.c (new_stmt_vec_info): STMT_VINFO_RELEVANT_P
replaced
with STMT_VINFO_RELEVANT. Initialize STMT_VINFO_LIVE_P to false
instead
of 0.
(supportable_widening_operation): Check STMT_VINFO_RELEVANT instead
of
checking immediate uses.
* tree-vectorizer.h (vect_relevant): New enum type.
(_stmt_vec_info): Field relevant changed from bool to enum
vect_relevant.
(STMT_VINFO_RELEVANT): New macro to access the field 'relevant'.
(STMT_VINFO_RELEVANT_P): Changed to check the value of field
'relevant'.
(See attached file: patch.oct20.txt)Attachment:
patch.oct20.txt
Description: Text document
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |