]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: [multiple changes]
authorRichard Biener <rguenther@suse.de>
Tue, 20 Nov 2018 14:47:49 +0000 (14:47 +0000)
committerRichard Biener <rguenth@gcc.gnu.org>
Tue, 20 Nov 2018 14:47:49 +0000 (14:47 +0000)
2018-11-20  Richard Biener  <rguenther@suse.de>

Backport from mainline
2018-03-12  Richard Biener  <rguenther@suse.de>

PR tree-optimization/84777
* tree-ssa-loop-ch.c (should_duplicate_loop_header_p): For
force-vectorize loops ignore whether we are optimizing for size.

2018-01-26  Richard Biener  <rguenther@suse.de>

PR rtl-optimization/84003
* dse.c (record_store): Only record redundant stores when
the earlier store aliases at least all accesses the later one does.

* g++.dg/torture/pr77745.C: Mark foo noinline to trigger
latent bug in DSE if NOINLINE is appropriately defined.
* g++.dg/torture/pr77745-2.C: New testcase including pr77745.C
and defining NOINLINE.

From-SVN: r266318

gcc/ChangeLog
gcc/dse.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/torture/pr77745-2.C [new file with mode: 0644]
gcc/testsuite/g++.dg/torture/pr77745.C
gcc/tree-ssa-loop-ch.c

index 2ab631f9c1fee6c82cb7033a1117b4d210694f65..ac62043af560d833d38bbd6ad0846bd2b43832aa 100644 (file)
@@ -1,3 +1,18 @@
+2018-11-20  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2018-03-12  Richard Biener  <rguenther@suse.de>
+
+       PR tree-optimization/84777
+       * tree-ssa-loop-ch.c (should_duplicate_loop_header_p): For
+       force-vectorize loops ignore whether we are optimizing for size.
+
+       2018-01-26  Richard Biener  <rguenther@suse.de>
+
+       PR rtl-optimization/84003
+       * dse.c (record_store): Only record redundant stores when
+       the earlier store aliases at least all accesses the later one does.
+
 2018-11-20  Xuepeng Guo  <xuepeng.guo@intel.com>
 
        Backport from mainline
index 174865bbc40bc0243406aad65514c32474b6dbba..f638f38a403efeb4f93834bb8d3aaaad169e9579 100644 (file)
--- a/gcc/dse.c
+++ b/gcc/dse.c
@@ -1450,7 +1450,12 @@ record_store (rtx body, bb_info_t bb_info)
              && offset >= s_info->begin
              && offset + width <= s_info->end
              && all_positions_needed_p (s_info, offset - s_info->begin,
-                                        width))
+                                        width)
+             /* We can only remove the later store if the earlier aliases
+                at least all accesses the later one.  */
+             && (MEM_ALIAS_SET (mem) == MEM_ALIAS_SET (s_info->mem)
+                 || alias_set_subset_of (MEM_ALIAS_SET (mem),
+                                         MEM_ALIAS_SET (s_info->mem))))
            {
              if (GET_MODE (mem) == BLKmode)
                {
index c8dabcce523b7870f77a1ea8ff9792cf6daf61e4..244e42dfd54c68dda6b0d0566334318966f7ed56 100644 (file)
@@ -1,3 +1,14 @@
+2018-11-20  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2018-01-26  Richard Biener  <rguenther@suse.de>
+
+       PR rtl-optimization/84003
+       * g++.dg/torture/pr77745.C: Mark foo noinline to trigger
+       latent bug in DSE if NOINLINE is appropriately defined.
+       * g++.dg/torture/pr77745-2.C: New testcase including pr77745.C
+       and defining NOINLINE.
+
 2018-11-20  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc.c-torture/execute/20181120-1.c: New test.
diff --git a/gcc/testsuite/g++.dg/torture/pr77745-2.C b/gcc/testsuite/g++.dg/torture/pr77745-2.C
new file mode 100644 (file)
index 0000000..7861089
--- /dev/null
@@ -0,0 +1,4 @@
+// { dg-do run }
+
+#define NOINLINE __attribute__((noinline))
+#include "pr77745.C"
index 59d86b5c501ef38f52c20010fce6f7042ca6840a..6285bc14a43ba7bd9ab7387dc51588a352357ed9 100644 (file)
@@ -1,8 +1,12 @@
 // { dg-do run }
 
+#ifndef NOINLINE
+#define NOINLINE /* */
+#endif
+
 inline void* operator new(__SIZE_TYPE__, void* __p) noexcept { return __p; }
 
-long foo(char *c1, char *c2)
+long NOINLINE foo(char *c1, char *c2)
 {
   long *p1 = new (c1) long;
   *p1 = 100;
index 86be34a1ac7159ae234bf9f6ffcbc87158983c7c..923efa42a69d9102b812b2272f37e9512caabfd3 100644 (file)
@@ -57,7 +57,8 @@ should_duplicate_loop_header_p (basic_block header, struct loop *loop,
      be true, since quite often it is possible to verify that the condition is
      satisfied in the first iteration and therefore to eliminate it.  Jump
      threading handles these cases now.  */
-  if (optimize_loop_for_size_p (loop))
+  if (optimize_loop_for_size_p (loop)
+      && !loop->force_vectorize)
     {
       if (dump_file && (dump_flags & TDF_DETAILS))
        fprintf (dump_file,