aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-02-26 16:53:43 +0100
committerJakub Jelinek <jakub@gcc.gnu.org>2016-02-26 16:53:43 +0100
commita2ad54a07a7336103ff30140b591b4d6eb348dfd (patch)
treeae1cf61ff668028960dbbf5e7352ada2e17af643
parent0884062c2cf3ee1a489591b89350478c4cca2db3 (diff)
downloadgcc-a2ad54a07a7336103ff30140b591b4d6eb348dfd.zip
gcc-a2ad54a07a7336103ff30140b591b4d6eb348dfd.tar.gz
gcc-a2ad54a07a7336103ff30140b591b4d6eb348dfd.tar.bz2
re PR rtl-optimization/69891 (wrong code with -mstringop-strategy=libcall @ i686)
PR rtl-optimization/69891 * dse.c (scan_insn): If we can't figure out memset arguments or they are non-constant, call clear_rhs_from_active_local_stores. * gcc.target/i386/pr69891.c: New test. Co-Authored-By: Eric Botcazou <ebotcazou@adacore.com> From-SVN: r233743
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/dse.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.target/i386/pr69891.c30
4 files changed, 44 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 4f24b30..520275a 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2016-02-26 Jakub Jelinek <jakub@redhat.com>
+ Eric Botcazou <ebotcazou@adacore.com>
+
+ PR rtl-optimization/69891
+ * dse.c (scan_insn): If we can't figure out memset arguments
+ or they are non-constant, call clear_rhs_from_active_local_stores.
+
2016-02-26 Martin Liska <mliska@suse.cz>
* doc/extend.texi: Mention clog10, clog10f an clog10l
diff --git a/gcc/dse.c b/gcc/dse.c
index 99f23ca..eef5644 100644
--- a/gcc/dse.c
+++ b/gcc/dse.c
@@ -2556,6 +2556,8 @@ scan_insn (bb_info_t bb_info, rtx_insn *insn)
active_local_stores = insn_info;
}
}
+ else
+ clear_rhs_from_active_local_stores ();
}
}
else if (SIBLING_CALL_P (insn) && reload_completed)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 693e77d..c03759f 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-02-26 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/69891
+ * gcc.target/i386/pr69891.c: New test.
+
2016-02-26 Michael Meissner <meissner@linux.vnet.ibm.com>
Bill Schmidt <wschmidt@linux.vnet.ibm.com>
diff --git a/gcc/testsuite/gcc.target/i386/pr69891.c b/gcc/testsuite/gcc.target/i386/pr69891.c
new file mode 100644
index 0000000..2c5e863
--- /dev/null
+++ b/gcc/testsuite/gcc.target/i386/pr69891.c
@@ -0,0 +1,30 @@
+/* PR rtl-optimization/69891 */
+/* { dg-do run } */
+/* { dg-options "-O -fno-tree-fre -mstringop-strategy=libcall -Wno-psabi" } */
+/* { dg-additional-options "-mno-sse" { target ia32 } } */
+
+typedef unsigned short A;
+typedef unsigned short B __attribute__ ((vector_size (32)));
+typedef unsigned int C;
+typedef unsigned int D __attribute__ ((vector_size (32)));
+typedef unsigned long long E;
+typedef unsigned long long F __attribute__ ((vector_size (32)));
+
+__attribute__((noinline, noclone)) unsigned
+foo(D a, B b, D c, F d)
+{
+ b /= (B) {1, -c[0]} | 1;
+ c[0] |= 7;
+ a %= c | 1;
+ c ^= c;
+ return a[0] + b[15] + c[0] + d[3];
+}
+
+int
+main ()
+{
+ unsigned x = foo ((D) {}, (B) {}, (D) {}, (F) {});
+ if (x != 0)
+ __builtin_abort ();
+ return 0;
+}