tree-optimization/98015 - fix VEC_COND_EXPR lowering condition
authorRichard Biener <rguenther@suse.de>
Thu, 26 Nov 2020 15:11:43 +0000 (16:11 +0100)
committerRichard Biener <rguenther@suse.de>
Thu, 26 Nov 2020 15:17:36 +0000 (16:17 +0100)
This fixes the condition to match the comment and only lower
VECTOR_BOOLEAN_TYPE_P VEC_COND_EXPRs.

2020-11-26  Richard Biener  <rguenther@suse.de>

* gimple-isel.cc (gimple_expand_vec_cond_expr): Only
lower VECTOR_BOOLEAN_TYPE_P VEC_COND_EXPRs.

gcc/gimple-isel.cc

index 83281c0cbf9c8724118af8d8071be317e45fec8e..048b407bd11b508379230b4990f57fd8d8020a55 100644 (file)
@@ -139,10 +139,10 @@ gimple_expand_vec_cond_expr (gimple_stmt_iterator *gsi,
      Those can end up generated by folding and at least for integer mode masks
      we cannot expect vcond expanders to exist.  We lower a ? b : c
      to (b & a) | (c & ~a).  */
-  if (!VECTOR_MODE_P (mode))
+  if (VECTOR_BOOLEAN_TYPE_P (TREE_TYPE (lhs))
+      && !VECTOR_MODE_P (mode))
     {
-      gcc_assert (VECTOR_BOOLEAN_TYPE_P (TREE_TYPE (lhs))
-                 && types_compatible_p (TREE_TYPE (op0), TREE_TYPE (op1)));
+      gcc_assert (types_compatible_p (TREE_TYPE (op0), TREE_TYPE (op1)));
       gimple_seq stmts = NULL;
       tree type = TREE_TYPE (lhs);
       location_t loc = gimple_location (stmt);