re PR target/34856 (ICE with some constant vectors)

2008-01-21  Richard Guenther  <rguenther@suse.de>

	PR middle-end/34856
	* tree-cfg.c (verify_expr): Allow all invariant expressions
	instead of just constant class ones as reference argument.
	* tree-ssa-loop-im.c (for_each_index): Handle CONSTRUCTOR
	like any other constant.
	* tree-ssa-sccvn.c (copy_reference_ops_from_ref): Likewise.

	* gcc.c-torture/compile/pr34856.c: New testcase.

From-SVN: r131696
This commit is contained in:
Richard Guenther 2008-01-21 16:21:45 +00:00 committed by Richard Biener
parent 94c54fea1a
commit bb0c55f6ee
6 changed files with 34 additions and 1 deletions

View File

@ -1,3 +1,12 @@
2008-01-21 Richard Guenther <rguenther@suse.de>
PR middle-end/34856
* tree-cfg.c (verify_expr): Allow all invariant expressions
instead of just constant class ones as reference argument.
* tree-ssa-loop-im.c (for_each_index): Handle CONSTRUCTOR
like any other constant.
* tree-ssa-sccvn.c (copy_reference_ops_from_ref): Likewise.
2008-01-21 H.J. Lu <hongjiu.lu@intel.com>
* regmove.c (fixup_match_1): Update call crossed frequencies.

View File

@ -1,3 +1,8 @@
2008-01-21 Richard Guenther <rguenther@suse.de>
PR middle-end/34856
* gcc.c-torture/compile/pr34856.c: New testcase.
2008-01-21 Richard Guenther <rguenther@suse.de>
PR c/34885

View File

@ -0,0 +1,17 @@
#undef __vector
#define __vector __attribute__((vector_size(16) ))
typedef __vector signed char qword;
typedef __vector unsigned int VU32;
extern short g[192 +16];
void f(qword);
void f1 (unsigned ctr)
{
VU32 pin;
pin = (VU32){(__SIZE_TYPE__)&g[16]};
do {
f((qword)pin);
ctr--;
}
while(ctr);
}

View File

@ -3304,7 +3304,7 @@ verify_expr (tree *tp, int *walk_subtrees, void *data ATTRIBUTE_UNUSED)
t = TREE_OPERAND (t, 0);
}
if (!CONSTANT_CLASS_P (t) && !is_gimple_lvalue (t))
if (!is_gimple_min_invariant (t) && !is_gimple_lvalue (t))
{
error ("invalid reference prefix");
return t;

View File

@ -205,6 +205,7 @@ for_each_index (tree *addr_p, bool (*cbck) (tree, tree *, void *), void *data)
case INTEGER_CST:
case REAL_CST:
case FIXED_CST:
case CONSTRUCTOR:
return true;
case TARGET_MEM_REF:

View File

@ -552,6 +552,7 @@ copy_reference_ops_from_ref (tree ref, VEC(vn_reference_op_s, heap) **result)
case COMPLEX_CST:
case VECTOR_CST:
case REAL_CST:
case CONSTRUCTOR:
case VALUE_HANDLE:
case VAR_DECL:
case PARM_DECL: