From: Jakub Jelinek Date: Wed, 18 Nov 2020 08:40:45 +0000 (+0100) Subject: openmp: Fix ICE on non-rectangular loop with known 0 iterations X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7bfdb5a1c694cb9006e0478941e4443b230f5b98;p=thirdparty%2Fgcc.git openmp: Fix ICE on non-rectangular loop with known 0 iterations The loops in the testcase are non-rectangular and have 0 iterations (the outer loop iterates, but the inner one never). In this case we just have the overall number of iterations computed (0), and don't have factor and other values computed. We never need to map logical iterations to the individual iterations in that case, and we were crashing during expansion of that code. 2020-11-18 Jakub Jelinek PR middle-end/97862 * omp-expand.c (expand_omp_for_init_vars): Don't use the sqrt path if number of iterations is constant 0. * c-c++-common/gomp/pr97862.c: New test. (cherry picked from commit ba009860aec4619f2424f5bdee812f14572dc3cc) --- diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp index 94c0957318b2..029e13d18552 100644 --- a/gcc/ChangeLog.omp +++ b/gcc/ChangeLog.omp @@ -1,3 +1,12 @@ +2021-02-09 Kwok Cheung Yeung + + Backport from mainline + 2020-11-18 Jakub Jelinek + + PR middle-end/97862 + * omp-expand.c (expand_omp_for_init_vars): Don't use the sqrt path + if number of iterations is constant 0. + 2021-02-09 Kwok Cheung Yeung Backport from mainline diff --git a/gcc/omp-expand.c b/gcc/omp-expand.c index 71bf80308c97..e4a2f3a7d551 100644 --- a/gcc/omp-expand.c +++ b/gcc/omp-expand.c @@ -2566,7 +2566,8 @@ expand_omp_for_init_vars (struct omp_for_data *fd, gimple_stmt_iterator *gsi, && (TREE_CODE (fd->loop.n2) == INTEGER_CST || fd->first_inner_iterations) && (optab_handler (sqrt_optab, TYPE_MODE (double_type_node)) - != CODE_FOR_nothing)) + != CODE_FOR_nothing) + && !integer_zerop (fd->loop.n2)) { tree outer_n1 = fd->adjn1 ? fd->adjn1 : fd->loops[i - 1].n1; tree itype = TREE_TYPE (fd->loops[i].v); diff --git a/gcc/testsuite/ChangeLog.omp b/gcc/testsuite/ChangeLog.omp index 4108b4b61132..4aa93123e6af 100644 --- a/gcc/testsuite/ChangeLog.omp +++ b/gcc/testsuite/ChangeLog.omp @@ -1,3 +1,11 @@ +2021-02-09 Kwok Cheung Yeung + + Backport from mainline + 2020-11-18 Jakub Jelinek + + PR middle-end/97862 + * c-c++-common/gomp/pr97862.c: New test. + 2021-02-09 Kwok Cheung Yeung Backport from mainline diff --git a/gcc/testsuite/c-c++-common/gomp/pr97862.c b/gcc/testsuite/c-c++-common/gomp/pr97862.c new file mode 100644 index 000000000000..21aad3f5b292 --- /dev/null +++ b/gcc/testsuite/c-c++-common/gomp/pr97862.c @@ -0,0 +1,15 @@ +/* PR middle-end/97862 */ + +void +foo (void) +{ + int i, j; +#pragma omp for collapse(2) + for (i = 0; i < 1; ++i) + for (j = 0; j < i; ++j) + ; +#pragma omp for collapse(2) + for (i = 0; i < 20; i++) + for (j = 0; j < i - 19; j += 1) + ; +}