This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: PR tree-opt/33614: ICE when optimising a "constant" vector constructor
- From: "Andrew Pinski" <pinskia at gmail dot com>
- To: gcc-patches at gcc dot gnu dot org, rsandifo at nildram dot co dot uk
- Date: Mon, 1 Oct 2007 15:52:12 -0700
- Subject: Re: PR tree-opt/33614: ICE when optimising a "constant" vector constructor
- References: <87ejgee9ys.fsf@firetop.home>
On 10/1/07, Richard Sandiford <rsandifo@nildram.co.uk> wrote:
> Index: gcc/gimplify.c
> ===================================================================
> --- gcc/gimplify.c 2007-10-01 23:23:20.000000000 +0100
> +++ gcc/gimplify.c 2007-10-01 23:24:13.000000000 +0100
> @@ -3291,10 +3291,8 @@ gimplify_init_constructor (tree *expr_p,
> break;
> }
>
> - /* Don't reduce a TREE_CONSTANT vector ctor even if we can't
> - make a VECTOR_CST. It won't do anything for us, and it'll
> - prevent us from representing it as a single constant. */
> - break;
> + TREE_CONSTANT (ctor) = 0;
> + TREE_INVARIANT (ctor) = 0;
> }
>
> /* Vector types use CONSTRUCTOR all the way through gimple
Doing this will loose some optimizations with vectors. The main
reason why is because &a is not a CONSTANT_CLASS but still can be
constant..
Also can you look at the following testcase (with -O2 -msse):
int t[4];
__attribute__((vector_size(16))) int f(void)
{
__attribute__((vector_size(16))) int t1 = {(int)&t[0], (int)&t[1], (int)&t[2],
(int)&t[3]};
return t1;
}
And make sure we don't regress.
Right now we get:
f:
pushl %ebp
movdqa .LC0, %xmm0
popl %ebp
ret
.LC0:
.long t
.long t+4
.long t+8
.long t+12
Which is better than what we got in 4.0.2.