From e847e15bf882c2ab92755145cfb880cde8a02f33 Mon Sep 17 00:00:00 2001 From: ienkovich Date: Mon, 23 Nov 2015 10:01:51 +0000 Subject: [PATCH] gcc/ PR tree-optimization/68327 * tree-vect-loop.c (vect_determine_vectorization_factor): Don't compute vectype for non-relevant mask producers. * gcc/tree-vect-stmts.c (vectorizable_comparison): Check stmt relevance earlier. gcc/testsuite/ PR tree-optimization/68327 * gcc.dg/pr68327.c: New test. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@230743 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 9 +++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.dg/pr68327.c | 15 +++++++++++++++ gcc/tree-vect-loop.c | 3 ++- gcc/tree-vect-stmts.c | 6 +++--- 5 files changed, 34 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/gcc.dg/pr68327.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0b7f5d4..530cf78 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2015-11-23 Ilya Enkovich + Richard Biener + + PR tree-optimization/68327 + * tree-vect-loop.c (vect_determine_vectorization_factor): Don't + compute vectype for non-relevant mask producers. + * gcc/tree-vect-stmts.c (vectorizable_comparison): Check stmt + relevance earlier. + 2015-11-23 Tom de Vries PR tree-optimization/68460 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2861d00..142347d 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2015-11-23 Ilya Enkovich + + PR tree-optimization/68327 + * gcc.dg/pr68327.c: New test. + 2015-11-23 Tom de Vries PR tree-optimization/68460 diff --git a/gcc/testsuite/gcc.dg/pr68327.c b/gcc/testsuite/gcc.dg/pr68327.c new file mode 100644 index 0000000..c3e6a94 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr68327.c @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O3" } */ + +int a, d; +char b, c; + +void +fn1 () +{ + int i = 0; + for (; i < 1; i++) + d = 1; + for (; b; b++) + a = 1 && (d & b); +} diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index 41e5031..cc272b2 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -439,7 +439,8 @@ vect_determine_vectorization_factor (loop_vec_info loop_vinfo) compute a factor. */ if (TREE_CODE (scalar_type) == BOOLEAN_TYPE) { - mask_producers.safe_push (stmt_info); + if (STMT_VINFO_RELEVANT_P (stmt_info)) + mask_producers.safe_push (stmt_info); bool_result = true; if (gimple_code (stmt) == GIMPLE_ASSIGN diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 4bb58b9..687f982 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -7590,6 +7590,9 @@ vectorizable_comparison (gimple *stmt, gimple_stmt_iterator *gsi, tree mask_type; tree mask; + if (!STMT_VINFO_RELEVANT_P (stmt_info) && !bb_vinfo) + return false; + if (!VECTOR_BOOLEAN_TYPE_P (vectype)) return false; @@ -7602,9 +7605,6 @@ vectorizable_comparison (gimple *stmt, gimple_stmt_iterator *gsi, ncopies = LOOP_VINFO_VECT_FACTOR (loop_vinfo) / nunits; gcc_assert (ncopies >= 1); - 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)) -- 2.7.4