[PATCH] veclower: Don't ICE on .VEC_CONVERT calls with no lhs [PR96426]

Richard Biener rguenther@suse.de
Tue Aug 4 09:11:45 GMT 2020


On Tue, 4 Aug 2020, Jakub Jelinek wrote:

> Hi!
> 
> .VEC_CONVERT is a const internal call, so normally if the lhs is not used,
> we'd DCE it far before getting to veclower, but with -O0 (or perhaps
> -fno-tree-dce and some other -fno-* options) it can happen.
> But as the internal fn needs the lhs to know the type to which the
> conversion is done (and I think that is a reasonable representation, having
> some magic another argument and having to create constants with that type
> looks overkill to me), we just should DCE those calls ourselves.
> During veclower, we can't really remove insns, as the callers would be
> upset, so this just replaces it with a GIMPLE_NOP.
> 
> Bootstrapped/regtested on x86_64-linux, ok for trunk?

OK.

Richard.

> 2020-08-04  Jakub Jelinek  <jakub@redhat.com>
> 
> 	PR middle-end/96426
> 	* tree-vect-generic.c (expand_vector_conversion): Replace .VEC_CONVERT
> 	call with GIMPLE_NOP if there is no lhs.
> 
> 	* gcc.c-torture/compile/pr96426.c: New test.
> 
> --- gcc/tree-vect-generic.c.jj	2020-07-28 15:39:10.081755224 +0200
> +++ gcc/tree-vect-generic.c	2020-08-03 12:34:32.193423693 +0200
> @@ -1775,6 +1775,12 @@ expand_vector_conversion (gimple_stmt_it
>    gimple *stmt = gsi_stmt (*gsi);
>    gimple *g;
>    tree lhs = gimple_call_lhs (stmt);
> +  if (lhs == NULL_TREE)
> +    {
> +      g = gimple_build_nop ();
> +      gsi_replace (gsi, g, false);
> +      return;
> +    }
>    tree arg = gimple_call_arg (stmt, 0);
>    tree ret_type = TREE_TYPE (lhs);
>    tree arg_type = TREE_TYPE (arg);
> --- gcc/testsuite/gcc.c-torture/compile/pr96426.c.jj	2020-08-03 12:40:23.442449729 +0200
> +++ gcc/testsuite/gcc.c-torture/compile/pr96426.c	2020-08-03 12:40:09.458647750 +0200
> @@ -0,0 +1,10 @@
> +/* PR middle-end/96426 */
> +
> +typedef long long V __attribute__((vector_size(16)));
> +typedef double W __attribute__((vector_size(16)));
> +
> +void
> +foo (V *v)
> +{
> +  __builtin_convertvector (*v, W);
> +}
> 
> 	Jakub
> 
> 

-- 
Richard Biener <rguenther@suse.de>
SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg,
Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)


More information about the Gcc-patches mailing list