aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2008-01-21 16:21:45 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2008-01-21 16:21:45 +0000
commitbb0c55f6ee50d62e355558db86ebeb7d6ec04d70 (patch)
treeaab122eb2a7f9b6f99a39bb28eee3b362934fa73
parent94c54fea1a1344374593ba23b4fdd34cdbc476c4 (diff)
downloadgcc-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/ChangeLog9
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.c-torture/compile/pr34856.c17
-rw-r--r--gcc/tree-cfg.c2
-rw-r--r--gcc/tree-ssa-loop-im.c1
-rw-r--r--gcc/tree-ssa-sccvn.c1
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: