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 <ja...@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 <rguent...@suse.de> SUSE Software Solutions Germany GmbH, Maxfeldstrasse 5, 90409 Nuernberg, Germany; GF: Felix Imendörffer; HRB 36809 (AG Nuernberg)