Hi!

On Wed, 4 Oct 2017 10:01:10 +0200, Jakub Jelinek <ja...@redhat.com> wrote:
> This patch propagates attributes, including opt and target nodes, from
> the containing function to the OMP/OACC outlined region functions.
> 
> Bootstrapped/regtested on x86_64-linux and i686-linux, committed to trunk.

Hmm, in your testing, why didn't you observe this breaking a few OpenACC
test cases?  Committed to trunk r253402, as obvious:

commit da7a1a683a84d32e9d7be6a5d00925fdfa125430
Author: tschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Wed Oct 4 11:13:24 2017 +0000

    Adjust test cases for attributes propagation changes for OMP outlined 
regions
    
            PR tree-optimization/82374
            * c-c++-common/goacc/kernels-double-reduction-n.c: Adjust for
            attributes propagation changes for OMP outlined regions.
            * c-c++-common/goacc/kernels-double-reduction.c: Likewise.
            * c-c++-common/goacc/kernels-reduction.c: Likewise.
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@253402 
138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/testsuite/ChangeLog                                       | 8 ++++++++
 gcc/testsuite/c-c++-common/goacc/kernels-double-reduction-n.c | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-double-reduction.c   | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-reduction.c          | 2 +-
 4 files changed, 11 insertions(+), 3 deletions(-)

diff --git gcc/testsuite/ChangeLog gcc/testsuite/ChangeLog
index 2c96f3a..4ac50d0 100644
--- gcc/testsuite/ChangeLog
+++ gcc/testsuite/ChangeLog
@@ -1,3 +1,11 @@
+2017-10-04  Thomas Schwinge  <tho...@codesourcery.com>
+
+       PR tree-optimization/82374
+       * c-c++-common/goacc/kernels-double-reduction-n.c: Adjust for
+       attributes propagation changes for OMP outlined regions.
+       * c-c++-common/goacc/kernels-double-reduction.c: Likewise.
+       * c-c++-common/goacc/kernels-reduction.c: Likewise.
+
 2017-10-04  Richard Sandiford  <richard.sandif...@linaro.org>
 
        PR tree-optimization/82413
diff --git gcc/testsuite/c-c++-common/goacc/kernels-double-reduction-n.c 
gcc/testsuite/c-c++-common/goacc/kernels-double-reduction-n.c
index 27ea2e9..10b364b 100644
--- gcc/testsuite/c-c++-common/goacc/kernels-double-reduction-n.c
+++ gcc/testsuite/c-c++-common/goacc/kernels-double-reduction-n.c
@@ -27,7 +27,7 @@ foo (unsigned int n)
 
 /* Check that only one loop is analyzed, and that it can be parallelized.  */
 /* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 1 
"parloops1" } } */
-/* { dg-final { scan-tree-dump-times "(?n)__attribute__\\(\\(oacc kernels 
parallelized, oacc function \\(, , \\), oacc kernels, omp target 
entrypoint\\)\\)" 1 "parloops1" } } */
+/* { dg-final { scan-tree-dump-times "(?n)__attribute__\\(\\(oacc kernels 
parallelized, oacc function \\(, , \\), oacc kernels, omp target entrypoint, 
noclone, noinline\\)\\)" 1 "parloops1" } } */
 /* { dg-final { scan-tree-dump-not "FAILED:" "parloops1" } } */
 /* { dg-final { scan-tree-dump-times "parallelizing outer loop" 1 "parloops1" 
} } */
 
diff --git gcc/testsuite/c-c++-common/goacc/kernels-double-reduction.c 
gcc/testsuite/c-c++-common/goacc/kernels-double-reduction.c
index 0841e90..c026346 100644
--- gcc/testsuite/c-c++-common/goacc/kernels-double-reduction.c
+++ gcc/testsuite/c-c++-common/goacc/kernels-double-reduction.c
@@ -27,7 +27,7 @@ foo (void)
 
 /* Check that only one loop is analyzed, and that it can be parallelized.  */
 /* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 1 
"parloops1" } } */
-/* { dg-final { scan-tree-dump-times "(?n)__attribute__\\(\\(oacc kernels 
parallelized, oacc function \\(, , \\), oacc kernels, omp target 
entrypoint\\)\\)" 1 "parloops1" } } */
+/* { dg-final { scan-tree-dump-times "(?n)__attribute__\\(\\(oacc kernels 
parallelized, oacc function \\(, , \\), oacc kernels, omp target entrypoint, 
noclone, noinline\\)\\)" 1 "parloops1" } } */
 /* { dg-final { scan-tree-dump-not "FAILED:" "parloops1" } } */
 /* { dg-final { scan-tree-dump-times "parallelizing outer loop" 1 "parloops1" 
} } */
 
diff --git gcc/testsuite/c-c++-common/goacc/kernels-reduction.c 
gcc/testsuite/c-c++-common/goacc/kernels-reduction.c
index 4a18272..5921b88 100644
--- gcc/testsuite/c-c++-common/goacc/kernels-reduction.c
+++ gcc/testsuite/c-c++-common/goacc/kernels-reduction.c
@@ -26,7 +26,7 @@ foo (void)
 
 /* Check that only one loop is analyzed, and that it can be parallelized.  */
 /* { dg-final { scan-tree-dump-times "SUCCESS: may be parallelized" 1 
"parloops1" } } */
-/* { dg-final { scan-tree-dump-times "(?n)__attribute__\\(\\(oacc kernels 
parallelized, oacc function \\(, , \\), oacc kernels, omp target 
entrypoint\\)\\)" 1 "parloops1" } } */
+/* { dg-final { scan-tree-dump-times "(?n)__attribute__\\(\\(oacc kernels 
parallelized, oacc function \\(, , \\), oacc kernels, omp target entrypoint, 
noclone, noinline\\)\\)" 1 "parloops1" } } */
 /* { dg-final { scan-tree-dump-not "FAILED:" "parloops1" } } */
 
 /* Check that the loop has been split off into a function.  */


Grüße
 Thomas


> 2017-10-04  Jakub Jelinek  <ja...@redhat.com>
> 
>       PR tree-optimization/82374
>       * omp-low.c (create_omp_child_function): Copy DECL_ATTRIBUTES,
>       DECL_FUNCTION_SPECIFIC_OPTIMIZATION,
>       DECL_FUNCTION_SPECIFIC_TARGET and DECL_FUNCTION_VERSIONED from
>       current_function_decl to the new decl.
> 
>       * gcc.dg/gomp/pr82374.c: New test.
> 
> --- gcc/omp-low.c.jj  2017-09-05 23:32:02.000000000 +0200
> +++ gcc/omp-low.c     2017-10-03 12:25:13.956261522 +0200
> @@ -1626,6 +1626,14 @@ create_omp_child_function (omp_context *
>    DECL_CONTEXT (decl) = NULL_TREE;
>    DECL_INITIAL (decl) = make_node (BLOCK);
>    BLOCK_SUPERCONTEXT (DECL_INITIAL (decl)) = decl;
> +  DECL_ATTRIBUTES (decl) = DECL_ATTRIBUTES (current_function_decl);
> +  DECL_FUNCTION_SPECIFIC_OPTIMIZATION (decl)
> +    = DECL_FUNCTION_SPECIFIC_OPTIMIZATION (current_function_decl);
> +  DECL_FUNCTION_SPECIFIC_TARGET (decl)
> +    = DECL_FUNCTION_SPECIFIC_TARGET (current_function_decl);
> +  DECL_FUNCTION_VERSIONED (decl)
> +    = DECL_FUNCTION_VERSIONED (current_function_decl);
> +
>    if (omp_maybe_offloaded_ctx (ctx))
>      {
>        cgraph_node::get_create (decl)->offloadable = 1;
> --- gcc/testsuite/gcc.dg/gomp/pr82374.c.jj    2017-10-03 13:09:15.515879118 
> +0200
> +++ gcc/testsuite/gcc.dg/gomp/pr82374.c       2017-10-03 13:08:56.000000000 
> +0200
> @@ -0,0 +1,31 @@
> +/* PR tree-optimization/82374 */
> +/* { dg-do compile } */
> +/* { dg-options "-O2 -fno-tree-vectorize -fdump-tree-vect-details" } */
> +/* { dg-additional-options "-mavx -mno-avx2" { target i?86-*-* x86_64-*-* } 
> } */
> +/* { dg-additional-options "-mvsx" { target powerpc_vsx_ok } } */
> +
> +#define SIZE (1024 * 1024 * 1024)
> +
> +float a[SIZE];
> +float b[SIZE];
> +float c[SIZE];
> +float d[SIZE];
> +
> +__attribute__((optimize ("O2", "tree-vectorize"))) void
> +foo (void)
> +{
> +  int i;
> +#pragma omp parallel for
> +  for (i = 0; i < SIZE; i++)
> +    c[i] = a[i] + b[i];
> +}
> +
> +__attribute__((optimize ("O2", "tree-vectorize"))) void
> +bar (void)
> +{
> +  int i;
> +  for (i = 0; i < SIZE; i++)
> +    d[i] = a[i] + b[i];
> +}
> +
> +/* { dg-final { scan-tree-dump-times "vectorized 1 loops" 2 "vect" { target 
> { { i?86-*-* x86_64-*-* } || { powerpc_vsx_ok } } } } } */
> 
>       Jakub

Reply via email to