From: Jakub Jelinek Date: Fri, 30 Aug 2019 11:23:16 +0000 (+0200) Subject: backport: re PR middle-end/85594 (ICE during expand when compiling with -fwrapv ... X-Git-Tag: releases/gcc-7.5.0~279 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=81b669729b5a7f3bff32393ffb16be4d617ebbf0;p=thirdparty%2Fgcc.git backport: re PR middle-end/85594 (ICE during expand when compiling with -fwrapv -fopenmp) Backported from mainline 2018-12-21 Jakub Jelinek 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 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 0cc2c4b1540a..12bac130d614 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -3,6 +3,12 @@ Backported from mainline 2018-12-21 Jakub Jelinek + 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) : Swap innermode and mode arguments to convert_modes. Likewise swap mode and word_mode diff --git a/gcc/omp-expand.c b/gcc/omp-expand.c index 549a5db000a4..74902bfd05f9 100644 --- a/gcc/omp-expand.c +++ b/gcc/omp-expand.c @@ -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 (stmt)), + expand_omp_regimplify_p, NULL, NULL) + || walk_tree (gimple_cond_rhs_ptr (as_a (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, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index fbf21ce95fe4..41349ce89531 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -3,6 +3,11 @@ Backported from mainline 2018-12-21 Jakub Jelinek + 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 index 000000000000..5577a33eb184 --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/pr85594.c @@ -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 index 000000000000..6252defef9bc --- /dev/null +++ b/gcc/testsuite/gcc.dg/gomp/pr88553.c @@ -0,0 +1,5 @@ +/* PR middle-end/88553 */ +/* { dg-do compile } */ +/* { dg-additional-options "-O1 -ftree-loop-vectorize -fwrapv" } */ + +#include "pr81768-2.c"