From b6268016bf46dd63227dcbb73d13c30a3b4b9d2a Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Tue, 25 Feb 2020 19:20:58 +0000 Subject: optabs: Don't use scalar conversions for vectors [PR93843] In this PR we had a conversion between two integer vectors that both had scalar integer modes. We then tried to implement the conversion using the scalar optab for those modes, instead of doing the conversion elementwise. I wondered about letting through scalar modes for single-element vectors, but I don't have any evidence that that's useful/necessary, so it seemed better to keep things simple. 2020-02-26 Richard Sandiford gcc/ PR middle-end/93843 * optabs-tree.c (supportable_convert_operation): Reject types with scalar modes. gcc/testsuite/ PR middle-end/93843 * gcc.dg/vect/pr93843-1.c: New test. * gcc.dg/vect/pr93843-2.c: Likewise. --- gcc/optabs-tree.c | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'gcc/optabs-tree.c') diff --git a/gcc/optabs-tree.c b/gcc/optabs-tree.c index 3d829c2..badd30b 100644 --- a/gcc/optabs-tree.c +++ b/gcc/optabs-tree.c @@ -284,9 +284,14 @@ supportable_convert_operation (enum tree_code code, machine_mode m1,m2; bool truncp; + gcc_assert (VECTOR_TYPE_P (vectype_out) && VECTOR_TYPE_P (vectype_in)); + m1 = TYPE_MODE (vectype_out); m2 = TYPE_MODE (vectype_in); + if (!VECTOR_MODE_P (m1) || !VECTOR_MODE_P (m2)) + return false; + /* First check if we can done conversion directly. */ if ((code == FIX_TRUNC_EXPR && can_fix_p (m1,m2,TYPE_UNSIGNED (vectype_out), &truncp) -- cgit v1.1