]> gcc.gnu.org Git - gcc.git/commitdiff
backport: re PR middle-end/85594 (ICE during expand when compiling with -fwrapv ...
authorJakub Jelinek <jakub@redhat.com>
Fri, 30 Aug 2019 11:23:16 +0000 (13:23 +0200)
committerJakub Jelinek <jakub@gcc.gnu.org>
Fri, 30 Aug 2019 11:23:16 +0000 (13:23 +0200)
Backported from mainline
2018-12-21  Jakub Jelinek  <jakub@redhat.com>

PR middle-end/85594
PR middle-end/88553
* omp-expand.c (extract_omp_for_update_vars): Regimplify the condition
if needed.
(expand_omp_for_generic): Don't clobber t temporary for ordered loops.

* gcc.dg/gomp/pr85594.c: New test.
* gcc.dg/gomp/pr88553.c: New test.

From-SVN: r275082

gcc/ChangeLog
gcc/omp-expand.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/gomp/pr85594.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/gomp/pr88553.c [new file with mode: 0644]

index 0cc2c4b1540a699ce29faede8d1fab5bca2ce956..12bac130d6140fc40d26b4a454373cab9d301ae5 100644 (file)
@@ -3,6 +3,12 @@
        Backported from mainline
        2018-12-21  Jakub Jelinek  <jakub@redhat.com>
 
+       PR middle-end/85594
+       PR middle-end/88553
+       * omp-expand.c (extract_omp_for_update_vars): Regimplify the condition
+       if needed.
+       (expand_omp_for_generic): Don't clobber t temporary for ordered loops.
+
        PR rtl-optimization/88563
        * expr.c (expand_expr_real_2) <case WIDEN_MULT_EXPR>: Swap innermode
        and mode arguments to convert_modes.  Likewise swap mode and word_mode
index 549a5db000a44b4eebf4d1740312c520d510bbf8..74902bfd05f9c3008c4efd2e502c67acbdec2fd3 100644 (file)
@@ -1960,6 +1960,11 @@ extract_omp_for_update_vars (struct omp_for_data *fd, basic_block cont_bb,
          t = fold_build2 (fd->loops[i].cond_code, boolean_type_node, v, t);
          stmt = gimple_build_cond_empty (t);
          gsi_insert_after (&gsi, stmt, GSI_CONTINUE_LINKING);
+         if (walk_tree (gimple_cond_lhs_ptr (as_a <gcond *> (stmt)),
+                        expand_omp_regimplify_p, NULL, NULL)
+             || walk_tree (gimple_cond_rhs_ptr (as_a <gcond *> (stmt)),
+                           expand_omp_regimplify_p, NULL, NULL))
+           gimple_regimplify_operands (stmt, &gsi);
          e = make_edge (bb, body_bb, EDGE_TRUE_VALUE);
          e->probability = REG_BR_PROB_BASE * 7 / 8;
        }
@@ -3042,20 +3047,21 @@ expand_omp_for_generic (struct omp_region *region,
 
          if (fd->ordered && counts[fd->collapse - 1] == NULL_TREE)
            {
+             tree tem;
              if (fd->collapse > 1)
-               t = fd->loop.v;
+               tem = fd->loop.v;
              else
                {
-                 t = fold_build2 (MINUS_EXPR, TREE_TYPE (fd->loops[0].v),
-                                  fd->loops[0].v, fd->loops[0].n1);
-                 t = fold_convert (fd->iter_type, t);
+                 tem = fold_build2 (MINUS_EXPR, TREE_TYPE (fd->loops[0].v),
+                                    fd->loops[0].v, fd->loops[0].n1);
+                 tem = fold_convert (fd->iter_type, tem);
                }
              tree aref = build4 (ARRAY_REF, fd->iter_type,
                                  counts[fd->ordered], size_zero_node,
                                  NULL_TREE, NULL_TREE);
-             t = force_gimple_operand_gsi (&gsi, t, true, NULL_TREE,
-                                           true, GSI_SAME_STMT);
-             expand_omp_build_assign (&gsi, aref, t);
+             tem = force_gimple_operand_gsi (&gsi, tem, true, NULL_TREE,
+                                             true, GSI_SAME_STMT);
+             expand_omp_build_assign (&gsi, aref, tem);
            }
 
          t = build2 (fd->loop.cond_code, boolean_type_node,
index fbf21ce95fe4c810f6daa2bf62748453a10ff456..41349ce895313d1b3def214cf25618528231c4ed 100644 (file)
@@ -3,6 +3,11 @@
        Backported from mainline
        2018-12-21  Jakub Jelinek  <jakub@redhat.com>
 
+       PR middle-end/85594
+       PR middle-end/88553
+       * gcc.dg/gomp/pr85594.c: New test.
+       * gcc.dg/gomp/pr88553.c: New test.
+
        PR rtl-optimization/88563
        * gcc.dg/pr88563.c: New test.
 
diff --git a/gcc/testsuite/gcc.dg/gomp/pr85594.c b/gcc/testsuite/gcc.dg/gomp/pr85594.c
new file mode 100644 (file)
index 0000000..5577a33
--- /dev/null
@@ -0,0 +1,5 @@
+/* PR middle-end/85594 */
+/* { dg-do compile } */
+/* { dg-additional-options "-fwrapv" } */
+
+#include "pr81768-2.c"
diff --git a/gcc/testsuite/gcc.dg/gomp/pr88553.c b/gcc/testsuite/gcc.dg/gomp/pr88553.c
new file mode 100644 (file)
index 0000000..6252def
--- /dev/null
@@ -0,0 +1,5 @@
+/* PR middle-end/88553 */
+/* { dg-do compile } */
+/* { dg-additional-options "-O1 -ftree-loop-vectorize -fwrapv" } */
+
+#include "pr81768-2.c"
This page took 0.111477 seconds and 5 git commands to generate.