From 07fc54f7f09b79133e296cbdf87a2e6dd02e4eda Mon Sep 17 00:00:00 2001 From: Frederik Harwath Date: Thu, 4 May 2023 18:09:23 +0200 Subject: [PATCH] openmp: Fix initialization for 'unroll full' The index variable initialization for the 'omp unroll' directive with 'full' clause got lost and the testsuite did not catch it. Add the initialization and add -Wall to some tests to detect uninitialized variable uses and other potential problems in the code generation. gcc/ChangeLog: * omp-transform-loops.cc (full_unroll): Add initialization of index variable. libgomp/ChangeLog: * testsuite/libgomp.c-c++-common/loop-transforms/matrix-no-directive-unroll-full-1.c: Use -Wall and add -Wno-unknown-pragmas to disable warnings about empty pragmas. Use -O2. * testsuite/libgomp.c++/loop-transforms/matrix-no-directive-unroll-full-1.C: Copy of testsuite/libgomp.c-c++-common/matrix-no-directive-unroll-full-1.c, but using -O0 which works only for C++. * testsuite/libgomp.c-c++-common/loop-transforms/matrix-no-directive-1.c: Use -Wall and use -Wno-unknown-pragmas to disable warnings about empty pragmas. * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-distribute-parallel-for-1.c: Likewise. * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-for-1.c: Likewise. * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-for-1.c: Likewise. * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-masked-taskloop-1.c: Likewise. * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-masked-taskloop-simd-1.c: Likewise. * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-target-parallel-for-1.c: Likewise. * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-target-teams-distribute-parallel-for-1.c: Likewise. * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-taskloop-1.c: Likewise. * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-teams-distribute-parallel-for-1.c: Likewise. * testsuite/libgomp.c-c++-common/loop-transforms/matrix-simd-1.c: Likewise. * testsuite/libgomp.c-c++-common/loop-transforms/unroll-non-rect-1.c: Likewise. * testsuite/libgomp.c-c++-common/loop-transforms/unroll-1.c: Likewise and fix broken function calls found by -Wall. --- gcc/ChangeLog.omp | 4 +++ gcc/omp-transform-loops.cc | 1 + libgomp/ChangeLog.omp | 35 +++++++++++++++++++ .../matrix-no-directive-unroll-full-1.C | 13 +++++++ .../loop-transforms/matrix-no-directive-1.c | 2 +- .../matrix-no-directive-unroll-full-1.c | 2 +- .../matrix-omp-distribute-parallel-for-1.c | 2 ++ .../loop-transforms/matrix-omp-for-1.c | 2 +- .../matrix-omp-parallel-for-1.c | 2 +- .../matrix-omp-parallel-masked-taskloop-1.c | 2 ++ ...trix-omp-parallel-masked-taskloop-simd-1.c | 2 ++ .../matrix-omp-target-parallel-for-1.c | 2 +- ...p-target-teams-distribute-parallel-for-1.c | 2 ++ .../loop-transforms/matrix-omp-taskloop-1.c | 2 ++ ...trix-omp-teams-distribute-parallel-for-1.c | 2 ++ .../loop-transforms/matrix-simd-1.c | 2 ++ .../loop-transforms/unroll-1.c | 8 +++-- .../loop-transforms/unroll-non-rect-1.c | 2 ++ 18 files changed, 79 insertions(+), 8 deletions(-) create mode 100644 libgomp/testsuite/libgomp.c++/loop-transforms/matrix-no-directive-unroll-full-1.C diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp index c8a12d108840..d70e905d36e3 100644 --- a/gcc/ChangeLog.omp +++ b/gcc/ChangeLog.omp @@ -1,3 +1,7 @@ +2023-05-04 Frederik Harwath + + * omp-transform-loops.cc (full_unroll): Add initialization of index variable. + 2023-04-27 Andrew Stubbs * config/gcn/gcn-valu.md (cmul3): Use gcn_gen_undef. diff --git a/gcc/omp-transform-loops.cc b/gcc/omp-transform-loops.cc index ce8e8f3d0931..f589c31519f4 100644 --- a/gcc/omp-transform-loops.cc +++ b/gcc/omp-transform-loops.cc @@ -542,6 +542,7 @@ full_unroll (gomp_for *omp_for, location_t loc, walk_ctx *ctx ATTRIBUTE_UNUSED) gimple_seq unrolled = NULL; gimple_seq_add_seq (&unrolled, gimple_omp_for_pre_body (omp_for)); + gimplify_assign (index, init, &unrolled); push_gimplify_context (); gimple_seq_add_seq (&unrolled, build_unroll_body (body, unroll_factor, index, incr)); diff --git a/libgomp/ChangeLog.omp b/libgomp/ChangeLog.omp index 9cca6a97666d..39346957c6fb 100644 --- a/libgomp/ChangeLog.omp +++ b/libgomp/ChangeLog.omp @@ -1,3 +1,38 @@ +2023-05-04 Frederik Harwath + + * testsuite/libgomp.c-c++-common/loop-transforms/matrix-no-directive-unroll-full-1.c: + Use -Wall and add -Wno-unknown-pragmas to disable warnings about empty pragmas. + Use -O2. + * testsuite/libgomp.c++/loop-transforms/matrix-no-directive-unroll-full-1.C: + Copy of testsuite/libgomp.c-c++-common/matrix-no-directive-unroll-full-1.c, + but using -O0 which works only for C++. + * testsuite/libgomp.c-c++-common/loop-transforms/matrix-no-directive-1.c: Use -Wall + and use -Wno-unknown-pragmas to disable warnings about empty pragmas. + * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-distribute-parallel-for-1.c: + Likewise. + * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-for-1.c: + Likewise. + * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-for-1.c: + Likewise. + * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-masked-taskloop-1.c: + Likewise. + * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-masked-taskloop-simd-1.c: + Likewise. + * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-target-parallel-for-1.c: + Likewise. + * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-target-teams-distribute-parallel-for-1.c: + Likewise. + * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-taskloop-1.c: + Likewise. + * testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-teams-distribute-parallel-for-1.c: + Likewise. + * testsuite/libgomp.c-c++-common/loop-transforms/matrix-simd-1.c: + Likewise. + * testsuite/libgomp.c-c++-common/loop-transforms/unroll-non-rect-1.c: + Likewise. + * testsuite/libgomp.c-c++-common/loop-transforms/unroll-1.c: + Likewise and fix broken function calls found by -Wall. + 2023-04-25 Frederik Harwath * testsuite/libgomp.fortran/loop-transforms/tile-2.f90: Add reduction clause. diff --git a/libgomp/testsuite/libgomp.c++/loop-transforms/matrix-no-directive-unroll-full-1.C b/libgomp/testsuite/libgomp.c++/loop-transforms/matrix-no-directive-unroll-full-1.C new file mode 100644 index 000000000000..3a6842196279 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/loop-transforms/matrix-no-directive-unroll-full-1.C @@ -0,0 +1,13 @@ +/* { dg-additional-options { -O0 -fdump-tree-original -Wall -Wno-unknown-pragmas } } */ + +#define COMMON_DIRECTIVE +#define COMMON_TOP_TRANSFORM omp unroll full +#define COLLAPSE_1 +#define COLLAPSE_2 +#define COLLAPSE_3 +#define IMPLEMENTATION_FILE "../../libgomp.c-c++-common/loop-transforms/matrix-constant-iter.h" + +#include "../../libgomp.c-c++-common/loop-transforms/matrix-transform-variants-1.h" + +/* A consistency check to prevent broken macro usage. */ +/* { dg-final { scan-tree-dump-times "unroll_full" 13 "original" } } */ diff --git a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-no-directive-1.c b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-no-directive-1.c index 9f7f02041b00..7904a5617f3f 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-no-directive-1.c +++ b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-no-directive-1.c @@ -1,4 +1,4 @@ -/* { dg-additional-options {-fdump-tree-original} } */ +/* { dg-additional-options { -fdump-tree-original -Wall -Wno-unknown-pragmas } } */ #define COMMON_DIRECTIVE #define COLLAPSE_1 collapse(1) diff --git a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-no-directive-unroll-full-1.c b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-no-directive-unroll-full-1.c index 5dd0b5d29899..bd431a251020 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-no-directive-unroll-full-1.c +++ b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-no-directive-unroll-full-1.c @@ -1,4 +1,4 @@ -/* { dg-additional-options {-fdump-tree-original} } */ +/* { dg-additional-options { -O2 -fdump-tree-original -Wall -Wno-unknown-pragmas } } */ #define COMMON_DIRECTIVE #define COMMON_TOP_TRANSFORM omp unroll full diff --git a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-distribute-parallel-for-1.c b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-distribute-parallel-for-1.c index d855857e5ee3..3875014dc967 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-distribute-parallel-for-1.c +++ b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-distribute-parallel-for-1.c @@ -1,3 +1,5 @@ +/* { dg-additional-options { -Wall -Wno-unknown-pragmas } } */ + #define COMMON_DIRECTIVE "omp teams distribute parallel for" #define COLLAPSE_1 "collapse(1)" #define COLLAPSE_2 "collapse(2)" diff --git a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-for-1.c b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-for-1.c index f2a2b80b2fd2..671396cd5330 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-for-1.c +++ b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-for-1.c @@ -1,4 +1,4 @@ -/* { dg-additional-options {-fdump-tree-original} } */ +/* { dg-additional-options { -fdump-tree-original -Wall -Wno-unknown-pragmas } } */ #define COMMON_DIRECTIVE omp for #define COLLAPSE_1 collapse(1) diff --git a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-for-1.c b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-for-1.c index 2c5701efca42..cc66df42679e 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-for-1.c +++ b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-for-1.c @@ -1,4 +1,4 @@ -/* { dg-additional-options {-fdump-tree-original} } */ +/* { dg-additional-options { -fdump-tree-original -Wall -Wno-unknown-pragmas } } */ #define COMMON_DIRECTIVE omp parallel for #define COLLAPSE_1 collapse(1) diff --git a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-masked-taskloop-1.c b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-masked-taskloop-1.c index e2def212725a..890b460f374f 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-masked-taskloop-1.c +++ b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-masked-taskloop-1.c @@ -1,3 +1,5 @@ +/* { dg-additional-options { -Wall -Wno-unknown-pragmas } } */ + #define COMMON_DIRECTIVE omp parallel masked taskloop #define COLLAPSE_1 collapse(1) #define COLLAPSE_2 collapse(2) diff --git a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-masked-taskloop-simd-1.c b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-masked-taskloop-simd-1.c index ce601555cfb4..74f6271504a2 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-masked-taskloop-simd-1.c +++ b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-parallel-masked-taskloop-simd-1.c @@ -1,3 +1,5 @@ +/* { dg-additional-options { -Wall -Wno-unknown-pragmas } } */ + #define COMMON_DIRECTIVE omp parallel masked taskloop simd #define COLLAPSE_1 collapse(1) #define COLLAPSE_2 collapse(2) diff --git a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-target-parallel-for-1.c b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-target-parallel-for-1.c index 365b39ba3856..8138ea57f382 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-target-parallel-for-1.c +++ b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-target-parallel-for-1.c @@ -1,4 +1,4 @@ -/* { dg-additional-options {-fdump-tree-original} } */ +/* { dg-additional-options { -fdump-tree-original -Wall -Wno-unknown-pragmas } } */ #define COMMON_DIRECTIVE omp target parallel for map(tofrom:result[0:dim0*dim1]) map(to:matrix1[0:dim0*dim1], matrix2[0:dim0*dim1]) #define COLLAPSE_1 collapse(1) diff --git a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-target-teams-distribute-parallel-for-1.c b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-target-teams-distribute-parallel-for-1.c index 8afe34874c9e..d4d162d9c2b7 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-target-teams-distribute-parallel-for-1.c +++ b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-target-teams-distribute-parallel-for-1.c @@ -1,3 +1,5 @@ +/* { dg-additional-options { -Wall -Wno-unknown-pragmas } } */ + #define COMMON_DIRECTIVE omp target teams distribute parallel for map(tofrom:result[:dim0*dim1]) map(to:matrix1[0:dim0*dim1], matrix2[0:dim0*dim1]) #define COLLAPSE_1 collapse(1) #define COLLAPSE_2 collapse(2) diff --git a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-taskloop-1.c b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-taskloop-1.c index bbc78b39db09..28edb6ce83e6 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-taskloop-1.c +++ b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-taskloop-1.c @@ -1,3 +1,5 @@ +/* { dg-additional-options { -Wall -Wno-unknown-pragmas } } */ + #define COMMON_DIRECTIVE omp taskloop #define COLLAPSE_1 collapse(1) #define COLLAPSE_2 collapse(2) diff --git a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-teams-distribute-parallel-for-1.c b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-teams-distribute-parallel-for-1.c index 3a58e4793748..481a20a18d0b 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-teams-distribute-parallel-for-1.c +++ b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-omp-teams-distribute-parallel-for-1.c @@ -1,3 +1,5 @@ +/* { dg-additional-options { -Wall -Wno-unknown-pragmas } } */ + #define COMMON_DIRECTIVE omp teams distribute parallel for #define COLLAPSE_1 collapse(1) #define COLLAPSE_2 collapse(2) diff --git a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-simd-1.c b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-simd-1.c index e5155dcf76d1..200ddd859f5e 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-simd-1.c +++ b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/matrix-simd-1.c @@ -1,3 +1,5 @@ +/* { dg-additional-options { -Wall -Wno-unknown-pragmas } } */ + #define COMMON_DIRECTIVE omp simd #define COLLAPSE_1 collapse(1) #define COLLAPSE_2 collapse(2) diff --git a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/unroll-1.c b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/unroll-1.c index 2ac0fff16af8..eb5d3d77eb84 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/unroll-1.c +++ b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/unroll-1.c @@ -1,3 +1,5 @@ +/* { dg-additional-options { -Wall -Wno-unknown-pragmas } } */ + #include int compute_sum1 () @@ -11,7 +13,7 @@ int compute_sum1 () sum++; if (j != 7) - __builtin_abort; + __builtin_abort (); return sum; } @@ -27,7 +29,7 @@ int compute_sum2() sum++; if (j != 7) - __builtin_abort; + __builtin_abort (); return sum; } @@ -43,7 +45,7 @@ int compute_sum3() sum++; if (j != 7) - __builtin_abort; + __builtin_abort (); return sum; } diff --git a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/unroll-non-rect-1.c b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/unroll-non-rect-1.c index 2f9924aea1f6..7bd9b9062354 100644 --- a/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/unroll-non-rect-1.c +++ b/libgomp/testsuite/libgomp.c-c++-common/loop-transforms/unroll-non-rect-1.c @@ -1,3 +1,5 @@ +/* { dg-additional-options { -Wall -Wno-unknown-pragmas } } */ + #include #include -- 2.47.2