From: Jakub Jelinek Date: Tue, 30 May 2017 08:25:50 +0000 (+0200) Subject: backport: re PR libgomp/80394 (Empty OpenMP task is wrongly removed when optimizing) X-Git-Tag: releases/gcc-5.5.0~242 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=da086d5e0c0e96189d45aa80b9456d9f3ace6103;p=thirdparty%2Fgcc.git backport: re PR libgomp/80394 (Empty OpenMP task is wrongly removed when optimizing) Backported from mainline 2017-04-11 Jakub Jelinek PR libgomp/80394 * omp-low.c (scan_omp_task): Don't optimize away empty tasks if they have any depend clauses. * testsuite/libgomp.c/pr80394.c: New test. From-SVN: r248671 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 32e6d75a790f..24ddc3397a5c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,12 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2017-04-11 Jakub Jelinek + + PR libgomp/80394 + * omp-low.c (scan_omp_task): Don't optimize away empty tasks + if they have any depend clauses. + 2017-04-04 Jakub Jelinek PR target/80286 diff --git a/gcc/omp-low.c b/gcc/omp-low.c index 945b9c733d6a..907a728417b8 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -2378,9 +2378,11 @@ scan_omp_task (gimple_stmt_iterator *gsi, omp_context *outer_ctx) tree name, t; gomp_task *stmt = as_a (gsi_stmt (*gsi)); - /* Ignore task directives with empty bodies. */ + /* Ignore task directives with empty bodies, unless they have depend + clause. */ if (optimize > 0 - && empty_body_p (gimple_omp_body (stmt))) + && empty_body_p (gimple_omp_body (stmt)) + && !find_omp_clause (gimple_omp_task_clauses (stmt), OMP_CLAUSE_DEPEND)) { gsi_replace (gsi, gimple_build_nop (), false); return; diff --git a/libgomp/ChangeLog b/libgomp/ChangeLog index bae1441dabf1..b602cf16998e 100644 --- a/libgomp/ChangeLog +++ b/libgomp/ChangeLog @@ -1,6 +1,11 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2017-04-11 Jakub Jelinek + + PR libgomp/80394 + * testsuite/libgomp.c/pr80394.c: New test. + 2017-03-30 Jakub Jelinek * env.c (initialize_env): Initialize stacksize to 0. diff --git a/libgomp/testsuite/libgomp.c/pr80394.c b/libgomp/testsuite/libgomp.c/pr80394.c new file mode 100644 index 000000000000..6c5a74018515 --- /dev/null +++ b/libgomp/testsuite/libgomp.c/pr80394.c @@ -0,0 +1,22 @@ +/* PR libgomp/80394 */ + +int +main () +{ + int x = 0; + #pragma omp parallel shared(x) + #pragma omp single + { + #pragma omp task depend(inout: x) + { + for (int i = 0; i < 100000; i++) + asm volatile ("" : : : "memory"); + x += 5; + } + #pragma omp task if (0) depend(inout: x) + ; + if (x != 5) + __builtin_abort (); + } + return 0; +}