Hi!

On Wed, 19 Apr 2017 11:11:39 -0700, Cesar Philippidis <ce...@codesourcery.com> 
wrote:
> I've applied this patch to gomp-4_0-branch to add support for fortran
> allocatable scalars inside OpenACC declare constructs.

Thanks!


> Included in this patch is a bug fix for non-declared allocatable
> scalars. [...]

Please, bug fixes as work items/patches/commits separate from new
features.  (As long as that makes sense.)


I have not reviewed your changes in detail; just a few comments here:

> --- a/gcc/fortran/trans-openmp.c
> +++ b/gcc/fortran/trans-openmp.c
> @@ -3336,6 +3336,18 @@ gfc_trans_oacc_executable_directive (gfc_code *code)
>    gfc_start_block (&block);
>    oacc_clauses = gfc_trans_omp_clauses (&block, code->ext.omp_clauses,
>                                       code->loc);
> +
> +  /* Promote GOMP_MAP_FIRSTPRIVATE_POINTER to GOMP_MAP_ALWAYS_POINTER for
> +     variables inside OpenACC update directives.  */

Well, that's quite obvious from the following few lines of code ;-) --
would be more helpful in such cases to describe in source code comments
*why* something is being done.

> +  if (code->op == EXEC_OACC_UPDATE)
> +    for (tree c = oacc_clauses; c; c = OMP_CLAUSE_CHAIN (c))
> +      {
> +        if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
> +         && OMP_CLAUSE_MAP_KIND (c) == GOMP_MAP_FIRSTPRIVATE_POINTER)
> +       OMP_CLAUSE_SET_MAP_KIND (c, GOMP_MAP_ALWAYS_POINTER);
> +      }

> --- a/gcc/testsuite/gfortran.dg/goacc/declare-allocatable-1.f90
> +++ b/gcc/testsuite/gfortran.dg/goacc/declare-allocatable-1.f90
> @@ -6,20 +6,20 @@
>  
>  program allocate
>    implicit none
> -  integer, allocatable :: a(:)
> +  integer, allocatable :: a(:), b
>    integer, parameter :: n = 100
>    integer i
> -  !$acc declare create(a)
> +  !$acc declare create(a,b)
>  
> -  allocate (a(n))
> +  allocate (a(n), b)
>  
> -  !$acc parallel loop copyout(a)
> +  !$acc parallel loop copyout(a, b)
>    do i = 1, n
> -     a(i) = i
> +     a(i) = b
>    end do

That "a(i) = b" assignment is reading uninitialized data ("copyout(b)").
Did you mean to specify "copyin(b)" or (implicit?) "firstprivate(b)", and
set "b" to a defined value before the region?

>  
> -  deallocate (a)
> +  deallocate (a, b)
>  end program allocate
>  
> -! { dg-final { scan-tree-dump-times "pragma acc enter data 
> map.declare_allocate" 1 "original" } }
> -! { dg-final { scan-tree-dump-times "pragma acc exit data 
> map.declare_deallocate" 1 "original" } }
> +! { dg-final { scan-tree-dump-times "pragma acc enter data 
> map.declare_allocate" 2 "original" } }
> +! { dg-final { scan-tree-dump-times "pragma acc exit data 
> map.declare_deallocate" 2 "original" } }

> --- /dev/null
> +++ b/libgomp/testsuite/libgomp.oacc-fortran/allocatable-scalar.f90
> @@ -0,0 +1,30 @@

Missing "{ dg-do run }" to exercise torture testing -- or is that
intentionally not done here?

> +program main
> +  implicit none
> +  integer, parameter :: n = 100
> +  integer, allocatable :: a, c
> +  integer :: i, b(n)
> +
> +  allocate (a)
> +
> +  a = 50
> +
> +  !$acc parallel loop
> +  do i = 1, n;
> +     b(i) = a
> +  end do
> +
> +  do i = 1, n
> +     if (b(i) /= a) call abort
> +  end do
> +
> +  allocate (c)
> +
> +  print *, loc (c)
> +  !$acc parallel copyout(c) num_gangs(1)
> +  c = a
> +  !$acc end parallel
> +
> +  if (c /= a) call abort
> +
> +  deallocate (a, c)
> +end program main


Additionally, I'm seeing one regression:

    [-PASS:-]{+FAIL: gfortran.dg/goacc/pr77371-1.f90   -O  (internal compiler 
error)+}
    {+FAIL:+} gfortran.dg/goacc/pr77371-1.f90   -O  (test for excess errors)

    [...]/gcc/testsuite/gfortran.dg/goacc/pr77371-1.f90:5:0: internal compiler 
error: in force_constant_size, at gimplify.c:664
    0x87c57b force_constant_size
            [...]/gcc/gimplify.c:664
    0x87e687 gimple_add_tmp_var(tree_node*)
            [...]/gcc/gimplify.c:702
    0x867f3d create_tmp_var(tree_node*, char const*)
            [...]/gcc/gimple-expr.c:476
    0x9a1b95 lower_omp_target
            [...]/gcc/omp-low.c:16875
    [...]


Grüße
 Thomas

Reply via email to