re PR tree-optimization/33614 (ICE on semi-constant vector CONSTRUCTORs)
gcc/ PR tree-optimization/33614 * gimplify.c (gimplify_init_constructor): Gimplify vector constructors if they can't be reduced to VECTOR_CSTs and aren't legitimate initializer constants. gcc/testsuite/ PR tree-optimization/33614 * gcc.c-torture/compile/pr33614.c: New test. From-SVN: r129739
This commit is contained in:
parent
5a347f2b40
commit
9f1da821e6
@ -1,3 +1,10 @@
|
||||
2007-10-29 Richard Sandiford <rsandifo@nildram.co.uk>
|
||||
|
||||
PR tree-optimization/33614
|
||||
* gimplify.c (gimplify_init_constructor): Gimplify vector constructors
|
||||
if they can't be reduced to VECTOR_CSTs and aren't legitimate
|
||||
initializer constants.
|
||||
|
||||
2007-10-29 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/33870
|
||||
|
@ -3290,8 +3290,9 @@ gimplify_init_constructor (tree *expr_p, tree *pre_p,
|
||||
tree value;
|
||||
|
||||
/* Even when ctor is constant, it might contain non-*_CST
|
||||
elements (e.g. { 1.0/0.0 - 1.0/0.0, 0.0 }) and those don't
|
||||
belong into VECTOR_CST nodes. */
|
||||
elements, such as addresses or trapping values like
|
||||
1.0/0.0 - 1.0/0.0. Such expressions don't belong
|
||||
in VECTOR_CST nodes. */
|
||||
FOR_EACH_CONSTRUCTOR_VALUE (elts, ix, value)
|
||||
if (!CONSTANT_CLASS_P (value))
|
||||
{
|
||||
@ -3305,10 +3306,14 @@ gimplify_init_constructor (tree *expr_p, tree *pre_p,
|
||||
break;
|
||||
}
|
||||
|
||||
/* Don't reduce a TREE_CONSTANT vector ctor even if we can't
|
||||
/* Don't reduce an initializer constant 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;
|
||||
if (initializer_constant_valid_p (ctor, type))
|
||||
break;
|
||||
|
||||
TREE_CONSTANT (ctor) = 0;
|
||||
TREE_INVARIANT (ctor) = 0;
|
||||
}
|
||||
|
||||
/* Vector types use CONSTRUCTOR all the way through gimple
|
||||
|
@ -1,3 +1,8 @@
|
||||
2007-10-29 Richard Sandiford <rsandifo@nildram.co.uk>
|
||||
|
||||
PR tree-optimization/33614
|
||||
* gcc.c-torture/compile/pr33614.c: New test.
|
||||
|
||||
2007-10-29 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
PR tree-optimization/33870
|
||||
|
9
gcc/testsuite/gcc.c-torture/compile/pr33614.c
Normal file
9
gcc/testsuite/gcc.c-torture/compile/pr33614.c
Normal file
@ -0,0 +1,9 @@
|
||||
typedef float V2SF __attribute__ ((vector_size (8)));
|
||||
|
||||
V2SF
|
||||
foo (int x, V2SF a)
|
||||
{
|
||||
while (x--)
|
||||
a += (V2SF) {1.0f/0.0f - 1.0f/0.0f, 1.0f/0.0f - 1.0f/0.0f};
|
||||
return a;
|
||||
}
|
Loading…
Reference in New Issue
Block a user