diff options
author | Alan Hayward <alan.hayward@arm.com> | 2015-10-23 12:40:33 +0000 |
---|---|---|
committer | Alan Hayward <alahay01@gcc.gnu.org> | 2015-10-23 12:40:33 +0000 |
commit | af29617a50b430ad3e9f2842fe31335d4488d1d3 (patch) | |
tree | ec11a15022b2040f90b22b7cbb903f7113eb29ec /gcc/tree-vect-stmts.c | |
parent | f3bf0d9a5805754b9cc449b8d8d5c64d9e98361a (diff) | |
download | gcc-af29617a50b430ad3e9f2842fe31335d4488d1d3.zip gcc-af29617a50b430ad3e9f2842fe31335d4488d1d3.tar.gz gcc-af29617a50b430ad3e9f2842fe31335d4488d1d3.tar.bz2 |
Support for vectorizing conditional expressions
2015-10-23 Alan Hayward <alan.hayward@arm.com>
gcc/
PR tree-optimization/65947
* tree-vect-loop.c
(vect_is_simple_reduction_1): Find condition reductions.
(vect_model_reduction_cost): Add condition reduction costs.
(get_initial_def_for_reduction): Add condition reduction initial var.
(vect_create_epilog_for_reduction): Add condition reduction epilog.
(vectorizable_reduction): Condition reduction support.
* tree-vect-stmts.c (vectorizable_condition): Add vect reduction arg
* doc/sourcebuild.texi (Vector-specific attributes): Document
vect_max_reduc
gcc/testsuite
PR tree-optimization/65947
* lib/target-supports.exp
(check_effective_target_vect_max_reduc): Add.
* gcc.dg/vect/pr65947-1.c: New test.
* gcc.dg/vect/pr65947-2.c: New test.
* gcc.dg/vect/pr65947-3.c: New test.
* gcc.dg/vect/pr65947-4.c: New test.
* gcc.dg/vect/pr65947-5.c: New test.
* gcc.dg/vect/pr65947-6.c: New test.
* gcc.dg/vect/pr65947-7.c: New test.
* gcc.dg/vect/pr65947-8.c: New test.
* gcc.dg/vect/pr65947-9.c: New test.
* gcc.dg/vect/pr65947-10.c: New test.
* gcc.dg/vect/pr65947-11.c: New test.
From-SVN: r229245
Diffstat (limited to 'gcc/tree-vect-stmts.c')
-rw-r--r-- | gcc/tree-vect-stmts.c | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 19f62d0..82fca0c 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -7202,21 +7202,24 @@ vectorizable_condition (gimple *stmt, gimple_stmt_iterator *gsi, if (reduc_index && STMT_SLP_TYPE (stmt_info)) return false; - if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo) - return false; + if (STMT_VINFO_VEC_REDUCTION_TYPE (stmt_info) == TREE_CODE_REDUCTION) + { + if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo) + return false; - if (STMT_VINFO_DEF_TYPE (stmt_info) != vect_internal_def - && !(STMT_VINFO_DEF_TYPE (stmt_info) == vect_nested_cycle - && reduc_def)) - return false; + if (STMT_VINFO_DEF_TYPE (stmt_info) != vect_internal_def + && !(STMT_VINFO_DEF_TYPE (stmt_info) == vect_nested_cycle + && reduc_def)) + return false; - /* FORNOW: not yet supported. */ - if (STMT_VINFO_LIVE_P (stmt_info)) - { - if (dump_enabled_p ()) - dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, - "value used after loop.\n"); - return false; + /* FORNOW: not yet supported. */ + if (STMT_VINFO_LIVE_P (stmt_info)) + { + if (dump_enabled_p ()) + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "value used after loop.\n"); + return false; + } } /* Is vectorizable conditional operation? */ @@ -7865,6 +7868,7 @@ new_stmt_vec_info (gimple *stmt, vec_info *vinfo) STMT_VINFO_RELATED_STMT (res) = NULL; STMT_VINFO_PATTERN_DEF_SEQ (res) = NULL; STMT_VINFO_DATA_REF (res) = NULL; + STMT_VINFO_VEC_REDUCTION_TYPE (res) = TREE_CODE_REDUCTION; STMT_VINFO_DR_BASE_ADDRESS (res) = NULL; STMT_VINFO_DR_OFFSET (res) = NULL; @@ -8118,8 +8122,8 @@ vect_is_simple_use (tree operand, vec_info *vinfo, if (TREE_CODE (operand) != SSA_NAME) { if (dump_enabled_p ()) - dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, - "not ssa-name.\n"); + dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, + "not ssa-name.\n"); return false; } |