[gcc r10-11052] Fix VCOND expansion
Eric Botcazou
ebotcazou@gcc.gnu.org
Fri Oct 21 14:10:18 GMT 2022
https://gcc.gnu.org/g:5076eefe23b96279e34351a2a044858bae3251ae
commit r10-11052-g5076eefe23b96279e34351a2a044858bae3251ae
Author: Eric Botcazou <ebotcazou@adacore.com>
Date: Fri Oct 21 15:46:37 2022 +0200
Fix VCOND expansion
Instead of only allowing the signed optab to provide EQ/NE compares, we
allow both here since there seems to be no documented canonicalization.
gcc/
PR target/107336
* optabs.c (expand_vec_cond_expr): Query both VCOND and VCONDU for
EQ and NE.
Diff:
---
gcc/optabs.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 64f23d2c293..93f99423727 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -5902,6 +5902,14 @@ expand_vec_cond_expr (tree vec_cond_type, tree op0, tree op1, tree op2,
GET_MODE_NUNITS (cmp_op_mode)));
icode = get_vcond_icode (mode, cmp_op_mode, unsignedp);
+ /* Some targets do not have vcondeq and only vcond with NE/EQ
+ but not vcondu, so make sure to also try vcond here as
+ vcond_icode_p would canonicalize the optab query to. */
+ if (icode == CODE_FOR_nothing
+ && (tcode == NE_EXPR || tcode == EQ_EXPR)
+ && ((icode = get_vcond_icode (mode, cmp_op_mode, !unsignedp))
+ != CODE_FOR_nothing))
+ unsignedp = !unsignedp;
if (icode == CODE_FOR_nothing)
{
if (tcode == LT_EXPR
More information about the Gcc-cvs
mailing list