aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIra Rosen <irar@il.ibm.com>2008-04-24 09:21:55 +0000
committerIra Rosen <irar@gcc.gnu.org>2008-04-24 09:21:55 +0000
commit0e37a1c243896f03ad5fbfd4d3306802e20bc564 (patch)
tree6da8818892868ea6e31da744a2b72643dcd5eb34
parentf9f9640f8464328726ca641a942366145504a7bd (diff)
downloadgcc-0e37a1c243896f03ad5fbfd4d3306802e20bc564.zip
gcc-0e37a1c243896f03ad5fbfd4d3306802e20bc564.tar.gz
gcc-0e37a1c243896f03ad5fbfd4d3306802e20bc564.tar.bz2
re PR target/35982 (ICE while building mplayer on ppc with -O3 -ffast-math -mcpu=970)
PR tree-optimization/35982 * tree-vect-analyze.c (vect_check_interleaving): Check that the interleaved data-refs are of the same type. From-SVN: r134624
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/vect/fast-math-pr35982.c25
-rw-r--r--gcc/tree-vect-analyze.c4
4 files changed, 39 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 1c9599e..b567b49 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2008-04-24 Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/35982
+ * tree-vect-analyze.c (vect_check_interleaving): Check that the
+ interleaved data-refs are of the same type.
+
2008-04-24 Danny Smith <dannysmith@users.net>
* c-format.c (check_format_info_main): Use strncmp rather than a magic prefix
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b533b93..187c8a9 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-04-24 Ira Rosen <irar@il.ibm.com>
+
+ PR tree-optimization/35982
+ * gcc.dg/vect/fast-math-pr35982.c: New.
+
2008-04-24 Danny Smith <dannysmith@users.net>
* gcc.dg/format/ms-warnI64-1.c: New file.
diff --git a/gcc/testsuite/gcc.dg/vect/fast-math-pr35982.c b/gcc/testsuite/gcc.dg/vect/fast-math-pr35982.c
new file mode 100644
index 0000000..d21c61d
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/fast-math-pr35982.c
@@ -0,0 +1,25 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target vect_float } */
+/* { dg-require-effective-target vect_int } */
+
+struct mem
+{
+ float avg;
+ int len;
+};
+
+float method2_int16 (struct mem *mem)
+{
+ int i;
+ float avg;
+
+ for (i = 0; i < 100; ++i)
+ avg += mem[i].avg * (float) mem[i].len;
+
+ return avg;
+}
+
+/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target vect_extract_even_odd } } } */
+/* { dg-final { scan-tree-dump-times "vectorized 0 loops" 1 "vect" { xfail vect_extract_even_odd } } } */
+/* { dg-final { cleanup-tree-dump "vect" } } */
+
diff --git a/gcc/tree-vect-analyze.c b/gcc/tree-vect-analyze.c
index 9f9ea82..26d8799 100644
--- a/gcc/tree-vect-analyze.c
+++ b/gcc/tree-vect-analyze.c
@@ -1060,7 +1060,9 @@ vect_check_interleaving (struct data_reference *dra,
type_size_b = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (DR_REF (drb))));
if (type_size_a != type_size_b
- || tree_int_cst_compare (DR_STEP (dra), DR_STEP (drb)))
+ || tree_int_cst_compare (DR_STEP (dra), DR_STEP (drb))
+ || !types_compatible_p (TREE_TYPE (DR_REF (dra)),
+ TREE_TYPE (DR_REF (drb))))
return;
init_a = TREE_INT_CST_LOW (DR_INIT (dra));