]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
target/109955 - handle pattern generated COND_EXPR without vcond
authorRichard Biener <rguenther@suse.de>
Thu, 25 May 2023 10:55:11 +0000 (12:55 +0200)
committerRichard Biener <rguenther@suse.de>
Thu, 25 May 2023 10:59:25 +0000 (12:59 +0200)
The following properly handles pattern matching generated COND_EXPRs
which can still have embedded compares in vectorizable_condition
which will always code generate the masked vector variant.  We
were requiring vcond with embedded comparisons instead of also
allowing (as code generated) split compare and VEC_COND_EXPR.

This fixes some of the fallout when removing vcond{,u,eq} expanders
from the x86 backend.

PR target/109955
* tree-vect-stmts.cc (vectorizable_condition): For
embedded comparisons also handle the case when the target
only provides vec_cmp and vcond_mask.

gcc/tree-vect-stmts.cc

index 127b987cd624dc0ce8459071fe72a6ed5a24866b..bd3b07a3aa12b94e3edf91b3a5b0168d3aa21c39 100644 (file)
@@ -10836,7 +10836,12 @@ vectorizable_condition (vec_info *vinfo,
       if (reduction_type == EXTRACT_LAST_REDUCTION)
        /* Count one reduction-like operation per vector.  */
        kind = vec_to_scalar;
-      else if (!expand_vec_cond_expr_p (vectype, comp_vectype, cond_code))
+      else if (!expand_vec_cond_expr_p (vectype, comp_vectype, cond_code)
+              && (masked
+                  || (!expand_vec_cmp_expr_p (comp_vectype, vec_cmp_type,
+                                              cond_code)
+                      || !expand_vec_cond_expr_p (vectype, vec_cmp_type,
+                                                  ERROR_MARK))))
        return false;
 
       if (slp_node