[Bug tree-optimization/43430] Missed vectorization: "stmt not supported: cond_expr"
spop at gcc dot gnu dot org
gcc-bugzilla@gcc.gnu.org
Fri Mar 26 20:49:00 GMT 2010
------- Comment #4 from spop at gcc dot gnu dot org 2010-03-26 20:49 -------
This cleanup of vectorizable_condition allows this testcase to be vectorized:
typedef int uint8_t;
vsad16_c (void *c, uint8_t * s1, uint8_t * s2, int stride, int h)
{
int score = 0;
int x, y;
for (x = 0; x < 16; x++)
score += ((s1[x] - s1[x + stride] + s2[x + stride]) >= 0 ?
s1[x] + s2[x + stride] :
s2[x + stride]);
return score;
}
diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c
index 4bce61a..cfb1471 100644
--- a/gcc/tree-vect-stmts.c
+++ b/gcc/tree-vect-stmts.c
@@ -3865,7 +3865,8 @@ vectorizable_condition (gimple stmt, gimple_stmt_iterator
*gsi,
/* We do not handle two different vector types for the condition
and the values. */
- if (TREE_TYPE (TREE_OPERAND (cond_expr, 0)) != TREE_TYPE (vectype))
+ if (!useless_type_conversion_p (TREE_TYPE (TREE_OPERAND (cond_expr, 0)),
+ TREE_TYPE (vectype)))
return false;
if (TREE_CODE (then_clause) == SSA_NAME)
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43430
More information about the Gcc-bugs
mailing list