re PR tree-optimization/82387 (wrong code at -O1 and -Os on x86_64-linux-gnu in 64...
authorJakub Jelinek <jakub@redhat.com>
Mon, 2 Oct 2017 15:44:10 +0000 (17:44 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Mon, 2 Oct 2017 15:44:10 +0000 (17:44 +0200)
PR tree-optimization/82387
PR tree-optimization/82388
PR tree-optimization/82389
* tree-ssa-dse.c (dse_classify_store): Test byte_tracking_enabled
instead of live_bytes non-NULL.

* gcc.c-torture/compile/pr82389.c: New test.
* gcc.c-torture/execute/pr82387.c: New test.
* gcc.c-torture/execute/pr82388.c: New test.

From-SVN: r253356

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.c-torture/compile/pr82389.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr82387.c [new file with mode: 0644]
gcc/testsuite/gcc.c-torture/execute/pr82388.c [new file with mode: 0644]
gcc/tree-ssa-dse.c

index 8abda0a7bdb148777a9f88057c0953329857686b..7ee72e4708e0dd6c69104b897fe13806533ef898 100644 (file)
@@ -1,3 +1,11 @@
+2017-10-02  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/82387
+       PR tree-optimization/82388
+       PR tree-optimization/82389
+       * tree-ssa-dse.c (dse_classify_store): Test byte_tracking_enabled
+       instead of live_bytes non-NULL.
+
 2017-10-02  Georg-Johann Lay  <avr@gjlay.de>
 
        PR target/41076
index 405a4b0c39d66105e5ab485d742ccc9e414ca47b..2b75536209a771be0e4103ee992c1367bc9cd853 100644 (file)
@@ -1,3 +1,12 @@
+2017-10-02  Jakub Jelinek  <jakub@redhat.com>
+
+       PR tree-optimization/82387
+       PR tree-optimization/82388
+       PR tree-optimization/82389
+       * gcc.c-torture/compile/pr82389.c: New test.
+       * gcc.c-torture/execute/pr82387.c: New test.
+       * gcc.c-torture/execute/pr82388.c: New test.
+
 2017-10-02  Paolo Carlini  <paolo.carlini@oracle.com>
 
        PR c++/79180
diff --git a/gcc/testsuite/gcc.c-torture/compile/pr82389.c b/gcc/testsuite/gcc.c-torture/compile/pr82389.c
new file mode 100644 (file)
index 0000000..798bd84
--- /dev/null
@@ -0,0 +1,13 @@
+/* PR tree-optimization/82389 */
+
+void bar (short);
+
+void
+foo (void)
+{
+  short a[5];
+  int b;
+  for (b = -1290603998; b < 5; b++)
+    a[b] = 0;
+  bar (a[3]);
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr82387.c b/gcc/testsuite/gcc.c-torture/execute/pr82387.c
new file mode 100644 (file)
index 0000000..ead1a2a
--- /dev/null
@@ -0,0 +1,27 @@
+/* PR tree-optimization/82387 */
+
+struct A { int b; };
+int f = 1;
+
+struct A
+foo (void)
+{
+  struct A h[] = { 
+    {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, 
+    {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, 
+    {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, 
+    {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, 
+    {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, 
+    {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, 
+    {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, {1}, 
+  };
+  return h[24];
+}
+
+int
+main ()
+{
+  struct A i = foo (), j = i;
+  j.b && (f = 0);
+  return f; 
+}
diff --git a/gcc/testsuite/gcc.c-torture/execute/pr82388.c b/gcc/testsuite/gcc.c-torture/execute/pr82388.c
new file mode 100644 (file)
index 0000000..51e30f8
--- /dev/null
@@ -0,0 +1,17 @@
+/* PR tree-optimization/82388 */
+
+struct A { int b; int c; int d; } e;
+
+struct A
+foo (void)
+{
+  struct A h[30] = {{0,0,0}};
+  return h[29]; 
+}
+
+int
+main ()
+{
+  e = foo ();
+  return e.b; 
+}
index 1eca740598fc325554da3a359098268fa28fafac..6f58fffc6938e2c8dade8668e7e212c921e570af 100644 (file)
@@ -577,10 +577,10 @@ dse_classify_store (ao_ref *ref, gimple *stmt, gimple **use_stmt,
          /* If the statement is a use the store is not dead.  */
          else if (ref_maybe_used_by_stmt_p (use_stmt, ref))
            {
-             /* Handle common cases where we can easily build a ao_ref
+             /* Handle common cases where we can easily build an ao_ref
                 structure for USE_STMT and in doing so we find that the
                 references hit non-live bytes and thus can be ignored.  */
-             if (live_bytes && (!gimple_vdef (use_stmt) || !temp))
+             if (byte_tracking_enabled && (!gimple_vdef (use_stmt) || !temp))
                {
                  if (is_gimple_assign (use_stmt))
                    {