From bb0c55f6ee50d62e355558db86ebeb7d6ec04d70 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Mon, 21 Jan 2008 16:21:45 +0000 Subject: [PATCH] re PR target/34856 (ICE with some constant vectors) 2008-01-21 Richard Guenther 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 --- gcc/ChangeLog | 9 +++++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gcc.c-torture/compile/pr34856.c | 17 +++++++++++++++++ gcc/tree-cfg.c | 2 +- gcc/tree-ssa-loop-im.c | 1 + gcc/tree-ssa-sccvn.c | 1 + 6 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gcc.c-torture/compile/pr34856.c diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4263dab1c0c..27865796e17 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,12 @@ +2008-01-21 Richard Guenther + + 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 * regmove.c (fixup_match_1): Update call crossed frequencies. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 42a24a97ede..8d8bc99cc76 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-01-21 Richard Guenther + + PR middle-end/34856 + * gcc.c-torture/compile/pr34856.c: New testcase. + 2008-01-21 Richard Guenther PR c/34885 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 00000000000..a2f43690990 --- /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 c702502f1a7..ffb4983744e 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 83ad70c2890..262ad972da8 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 d7b8c8a72d7..8380ebb35f2 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: