* Fix vec_cmp comparison mode
@ 2016-11-15 16:49 Richard Sandiford
2016-11-15 20:50 ` Jeff Law
0 siblings, 1 reply; 2+ messages in thread
From: Richard Sandiford @ 2016-11-15 16:49 UTC (permalink / raw)
To: gcc-patches
vec_cmps assign the result of a vector comparison to a mask.
The optab was called with the destination having mode mask_mode
but with the source (the comparison) having mode VOIDmode,
which led to invalid rtl if the source operand was used directly.
Tested on aarch64-linux-gnu and x86_64-linux-gnu. OK to install?
Thanks,
Richard
[ This patch is part of the SVE series posted here:
https://gcc.gnu.org/ml/gcc/2016-11/msg00030.html ]
gcc/
2016-11-15 Richard Sandiford <richard.sandiford@arm.com>
Alan Hayward <alan.hayward@arm.com>
David Sherwood <david.sherwood@arm.com>
* optabs.c (vector_compare_rtx): Add a cmp_mode parameter
and use it in the final call to gen_rtx_fmt_ee.
(expand_vec_cond_expr): Update accordingly.
(expand_vec_cmp_expr): Likewise.
diff --git a/gcc/optabs.c b/gcc/optabs.c
index 7a1f025..b135c9b 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -5283,14 +5283,15 @@ get_rtx_code (enum tree_code tcode, bool unsignedp)
return code;
}
-/* Return comparison rtx for COND. Use UNSIGNEDP to select signed or
- unsigned operators. OPNO holds an index of the first comparison
- operand in insn with code ICODE. Do not generate compare instruction. */
+/* Return a comparison rtx of mode CMP_MODE for COND. Use UNSIGNEDP to
+ select signed or unsigned operators. OPNO holds the index of the
+ first comparison operand for insn ICODE. Do not generate the
+ compare instruction itself. */
static rtx
-vector_compare_rtx (enum tree_code tcode, tree t_op0, tree t_op1,
- bool unsignedp, enum insn_code icode,
- unsigned int opno)
+vector_compare_rtx (machine_mode cmp_mode, enum tree_code tcode,
+ tree t_op0, tree t_op1, bool unsignedp,
+ enum insn_code icode, unsigned int opno)
{
struct expand_operand ops[2];
rtx rtx_op0, rtx_op1;
@@ -5318,7 +5319,7 @@ vector_compare_rtx (enum tree_code tcode, tree t_op0, tree t_op1,
create_input_operand (&ops[1], rtx_op1, m1);
if (!maybe_legitimize_operands (icode, opno, 2, ops))
gcc_unreachable ();
- return gen_rtx_fmt_ee (rcode, VOIDmode, ops[0].value, ops[1].value);
+ return gen_rtx_fmt_ee (rcode, cmp_mode, ops[0].value, ops[1].value);
}
/* Checks if vec_perm mask SEL is a constant equivalent to a shift of the first
@@ -5644,7 +5645,8 @@ expand_vec_cond_expr (tree vec_cond_type, tree op0, tree op1, tree op2,
return 0;
}
- comparison = vector_compare_rtx (tcode, op0a, op0b, unsignedp, icode, 4);
+ comparison = vector_compare_rtx (VOIDmode, tcode, op0a, op0b, unsignedp,
+ icode, 4);
rtx_op1 = expand_normal (op1);
rtx_op2 = expand_normal (op2);
@@ -5688,7 +5690,8 @@ expand_vec_cmp_expr (tree type, tree exp, rtx target)
return 0;
}
- comparison = vector_compare_rtx (tcode, op0a, op0b, unsignedp, icode, 2);
+ comparison = vector_compare_rtx (mask_mode, tcode, op0a, op0b,
+ unsignedp, icode, 2);
create_output_operand (&ops[0], target, mask_mode);
create_fixed_operand (&ops[1], comparison);
create_fixed_operand (&ops[2], XEXP (comparison, 0));
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: Fix vec_cmp comparison mode
2016-11-15 16:49 Fix vec_cmp comparison mode Richard Sandiford
@ 2016-11-15 20:50 ` Jeff Law
0 siblings, 0 replies; 2+ messages in thread
From: Jeff Law @ 2016-11-15 20:50 UTC (permalink / raw)
To: gcc-patches, richard.sandiford
On 11/15/2016 09:49 AM, Richard Sandiford wrote:
> vec_cmps assign the result of a vector comparison to a mask.
> The optab was called with the destination having mode mask_mode
> but with the source (the comparison) having mode VOIDmode,
> which led to invalid rtl if the source operand was used directly.
>
> Tested on aarch64-linux-gnu and x86_64-linux-gnu. OK to install?
>
> Thanks,
> Richard
>
>
> [ This patch is part of the SVE series posted here:
> https://gcc.gnu.org/ml/gcc/2016-11/msg00030.html ]
>
> gcc/
> 2016-11-15 Richard Sandiford <richard.sandiford@arm.com>
> Alan Hayward <alan.hayward@arm.com>
> David Sherwood <david.sherwood@arm.com>
>
> * optabs.c (vector_compare_rtx): Add a cmp_mode parameter
> and use it in the final call to gen_rtx_fmt_ee.
> (expand_vec_cond_expr): Update accordingly.
> (expand_vec_cmp_expr): Likewise.
OK.
jeff
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-11-15 20:50 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-15 16:49 Fix vec_cmp comparison mode Richard Sandiford
2016-11-15 20:50 ` Jeff Law
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).