[Bug fortran/63247] New: fortran array alignment in omp target map
cesar at codesourcery dot com
gcc-bugzilla@gcc.gnu.org
Fri Sep 12 17:28:00 GMT 2014
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63247
Bug ID: 63247
Summary: fortran array alignment in omp target map
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: fortran
Assignee: unassigned at gcc dot gnu.org
Reporter: cesar at codesourcery dot com
I've noticed that lower_omp_target is not passing the proper pointer alignment
to libgomp for fortran array maps. While this isn't a problem for trunk, it
does affect our nvptx target. Here is a test case:
program test
implicit none
integer a(5)
a = 10;
write (*, '(a,Z16)') 'address of a = ', loc(a)
!$omp target map(a(1:5))
a(1) = 5
a(2) = 5
a(3) = 5
a(4) = 5
a(5) = 5
!$omp end target
end program test
Here's my gdb session:
Breakpoint 5, lower_omp_target (gsi_p=, ctx=) at
../../../gcc/gcc/omp-low.c:10191
10191 CONSTRUCTOR_APPEND_ELT (vkind, purpose,
(gdb) p talign
$10 = 2
(gdb) p ovar
$11 = (tree)
(gdb) pt
warning: Expression is not an assignment (and might have no effect)
<var_decl 0x7ffff630a900 a
type <array_type 0x7ffff643e3f0
type <integer_type 0x7ffff6303690 integer(kind=4) public SI
size <integer_cst 0x7ffff62ffdb0 constant 32>
unit size <integer_cst 0x7ffff62ffdc8 constant 4>
align 32 symtab 0 alias set -1 canonical type 0x7ffff6303690
precision 32 min <integer_cst 0x7ffff62ffd68 -2147483648> max <integer_cst
0x7ffff62ffd80 2147483647>
pointer_to_this <pointer_type 0x7ffff6319738>>
type_2 BLK
size <integer_cst 0x7ffff641b798 constant 160>
unit size <integer_cst 0x7ffff643a300 constant 20>
align 32 symtab 0 alias set -1 canonical type 0x7ffff643e3f0
domain <integer_type 0x7ffff643e738 type <integer_type 0x7ffff63037e0
integer(kind=8)>
DI
size <integer_cst 0x7ffff62ffb70 constant 64>
unit size <integer_cst 0x7ffff62ffb88 constant 8>
align 64 symtab 0 alias set -1 canonical type 0x7ffff643e738
precision 64 min <integer_cst 0x7ffff631d1f8 0> max <integer_cst 0x7ffff643a1f8
4>>
pointer_to_this <pointer_type 0x7ffff643e930>>
addressable used decl_0 BLK file
/home/cphilipp/tools/nvidia/demos/fortran-tests/pointer-align-2.f90 line 4 col
0 size <integer_cst 0x7ffff641b798 160> unit size <integer_cst 0x7ffff643a300
20>
align 32 context <function_decl 0x7ffff643d360 test>>
(gdb) p talign
$12 = 2
How should this issue be resolved? I think the fortran FE behavior is correct.
Should lower_omp_target have something like this
if (tkind == OMP_CLAUSE_MAP_POINTER)
talign = POINTER_SIZE / BITS_PER_UNIT;
or should libgomp correct the alignment for OMP_CLAUSE_MAP_POINTER? It should
be noted the C FE doesn't have this problem with arrays.
Thanks,
Cesar
More information about the Gcc-bugs
mailing list