diff options
author | Richard Guenther <rguenther@suse.de> | 2008-01-21 16:21:45 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2008-01-21 16:21:45 +0000 |
commit | bb0c55f6ee50d62e355558db86ebeb7d6ec04d70 (patch) | |
tree | aab122eb2a7f9b6f99a39bb28eee3b362934fa73 | |
parent | 94c54fea1a1344374593ba23b4fdd34cdbc476c4 (diff) | |
download | gcc-bb0c55f6ee50d62e355558db86ebeb7d6ec04d70.zip gcc-bb0c55f6ee50d62e355558db86ebeb7d6ec04d70.tar.gz gcc-bb0c55f6ee50d62e355558db86ebeb7d6ec04d70.tar.bz2 |
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
-rw-r--r-- | gcc/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.c-torture/compile/pr34856.c | 17 | ||||
-rw-r--r-- | gcc/tree-cfg.c | 2 | ||||
-rw-r--r-- | gcc/tree-ssa-loop-im.c | 1 | ||||
-rw-r--r-- | gcc/tree-ssa-sccvn.c | 1 |
6 files changed, 34 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4263dab..2786579 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -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. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 42a24a9..8d8bc99 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 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 * gcc.c-torture/compile/pr34885.c: New testcase. diff --git a/gcc/testsuite/gcc.c-torture/compile/pr34856.c b/gcc/testsuite/gcc.c-torture/compile/pr34856.c new file mode 100644 index 0000000..a2f4369 --- /dev/null +++ b/gcc/testsuite/gcc.c-torture/compile/pr34856.c @@ -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); +} + diff --git a/gcc/tree-cfg.c b/gcc/tree-cfg.c index c702502..ffb4983 100644 --- a/gcc/tree-cfg.c +++ b/gcc/tree-cfg.c @@ -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; diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c index 83ad70c..262ad97 100644 --- a/gcc/tree-ssa-loop-im.c +++ b/gcc/tree-ssa-loop-im.c @@ -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: diff --git a/gcc/tree-ssa-sccvn.c b/gcc/tree-ssa-sccvn.c index d7b8c8a..8380ebb 100644 --- a/gcc/tree-ssa-sccvn.c +++ b/gcc/tree-ssa-sccvn.c @@ -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: |