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

Backport from mainline
2018-06-14  Richard Biener  <rguenther@suse.de>

PR middle-end/86139
* tree-vect-generic.c (build_word_mode_vector_type): Remove
duplicate and harmful type_hash_canon.

2018-06-15  Richard Biener  <rguenther@suse.de>

PR middle-end/86076
* tree-cfg.c (move_stmt_op): unshare invariant addresses
before adjusting their block.

* gcc.dg/pr86076.c: New testcase.

From-SVN: r266458

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/pr86076.c [new file with mode: 0644]
gcc/tree-cfg.c
gcc/tree-vect-generic.c

index 0342b88be687db7e833eeb5ac089a80a58285cec..d057e26662bf6238562492b43f53532a4fe5c1da 100644 (file)
@@ -1,3 +1,18 @@
+2018-11-26  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2018-06-14  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/86139
+       * tree-vect-generic.c (build_word_mode_vector_type): Remove
+       duplicate and harmful type_hash_canon.
+
+       2018-06-15  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/86076
+       * tree-cfg.c (move_stmt_op): unshare invariant addresses
+       before adjusting their block.
+
 2018-11-22  Uros Bizjak  <ubizjak@gmail.com>
 
        Backport from mainline
index 542a9f937235cc197943e74138a4dfdcd1f674d3..b5a5d8654c1ac5cae44774847ce059b294ef7877 100644 (file)
@@ -1,3 +1,11 @@
+2018-11-26  Richard Biener  <rguenther@suse.de>
+
+       Backport from mainline
+       2018-06-15  Richard Biener  <rguenther@suse.de>
+
+       PR middle-end/86076
+       * gcc.dg/pr86076.c: New testcase.
+
 2018-11-26  Matthias Klose  <doko@ubuntu.com>
 
        * jit.dg/test-long-names.c: Fix build with -Wformat-security.
diff --git a/gcc/testsuite/gcc.dg/pr86076.c b/gcc/testsuite/gcc.dg/pr86076.c
new file mode 100644 (file)
index 0000000..390ca47
--- /dev/null
@@ -0,0 +1,26 @@
+/* { dg-do compile { target pthread } }  */
+/* { dg-options "-O2 -ftree-parallelize-loops=2 -fno-tree-dce -fno-tree-pre -fno-tree-vrp --param max-loop-header-insns=1" } */
+
+int __attribute__ ((noinline))
+lv (int tm)
+{
+  (void) tm;
+
+  return 0;
+}
+
+void
+o7 (int uu)
+{
+  while (uu < 1)
+    while (uu != 0)
+      {
+       short int ca;
+
+       ca = lv (0);
+       (void) ca;
+       ++uu;
+      }
+
+  lv (lv (0));
+}
index 4f09c827d9ee22b665c37d5946cb2d7997dc0653..f9d75c5f64dba93d3f7460afa7156308af1f0319 100644 (file)
@@ -6640,7 +6640,16 @@ move_stmt_op (tree *tp, int *walk_subtrees, void *data)
        ;
       else if (block == p->orig_block
               || p->orig_block == NULL_TREE)
-       TREE_SET_BLOCK (t, p->new_block);
+       {
+         /* tree_node_can_be_shared says we can share invariant
+            addresses but unshare_expr copies them anyways.  Make sure
+            to unshare before adjusting the block in place - we do not
+            always see a copy here.  */
+         if (TREE_CODE (t) == ADDR_EXPR
+             && is_gimple_min_invariant (t))
+           *tp = t = unshare_expr (t);
+         TREE_SET_BLOCK (t, p->new_block);
+       }
       else if (flag_checking)
        {
          while (block && TREE_CODE (block) == BLOCK && block != p->orig_block)
index c1b3c24a0b4de526ae8c6752c30ccfd02e0619a3..2e6dbcc0215aff91f0e083eb86f12b7d1dc3fa72 100644 (file)
@@ -89,12 +89,8 @@ build_word_mode_vector_type (int nunits)
       return vector_last_type;
     }
 
-  /* We build a new type, but we canonicalize it nevertheless,
-     because it still saves some memory.  */
   vector_last_nunits = nunits;
-  vector_last_type = type_hash_canon (nunits,
-                                     build_vector_type (vector_inner_type,
-                                                        nunits));
+  vector_last_type = build_vector_type (vector_inner_type, nunits);
   return vector_last_type;
 }