aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2023-05-25 12:55:11 +0200
committerRichard Biener <rguenther@suse.de>2023-05-25 12:59:25 +0200
commitf97572c2aeddc71b01686993b978895e55890ab6 (patch)
treee05cef14d919a1e791486eca1b1899d765cc8227 /gcc
parent9e264ef6856a0e05834bc52f5774b4d1779913d5 (diff)
downloadgcc-f97572c2aeddc71b01686993b978895e55890ab6.zip
gcc-f97572c2aeddc71b01686993b978895e55890ab6.tar.gz
gcc-f97572c2aeddc71b01686993b978895e55890ab6.tar.bz2
target/109955 - handle pattern generated COND_EXPR without vcond
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/tree-vect-stmts.cc7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcc/tree-vect-stmts.cc b/gcc/tree-vect-stmts.cc
index 127b987..bd3b07a 100644
--- a/gcc/tree-vect-stmts.cc
+++ b/gcc/tree-vect-stmts.cc
@@ -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