re PR middle-end/65597 (ICE in build_outer_var_ref, at omp-low.c:1043)
PR fortran/65597 * trans-openmp.c (gfc_trans_omp_do): For !simple simd with explicit linear clause for the iterator set OMP_CLAUSE_LINEAR_NO_COPYIN. For implcitly added !simple OMP_CLAUSE_LINEAR set it too. Use step 1 instead of the original step on the new iterator - count. * testsuite/libgomp.fortran/pr65597.f90: New test. From-SVN: r221776
This commit is contained in:
parent
744e26e71e
commit
6c384511a3
@ -1,3 +1,11 @@
|
||||
2015-03-30 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR fortran/65597
|
||||
* trans-openmp.c (gfc_trans_omp_do): For !simple simd with explicit
|
||||
linear clause for the iterator set OMP_CLAUSE_LINEAR_NO_COPYIN.
|
||||
For implcitly added !simple OMP_CLAUSE_LINEAR set it too. Use step 1
|
||||
instead of the original step on the new iterator - count.
|
||||
|
||||
2015-03-25 Mikael Morin <mikael@gcc.gnu.org>
|
||||
|
||||
PR fortran/64952
|
||||
|
@ -3255,6 +3255,19 @@ gfc_trans_omp_do (gfc_code *code, gfc_exec_op op, stmtblock_t *pblock,
|
||||
inits.safe_push (e);
|
||||
}
|
||||
|
||||
if (dovar_found == 2
|
||||
&& op == EXEC_OMP_SIMD
|
||||
&& collapse == 1
|
||||
&& !simple)
|
||||
{
|
||||
for (tmp = omp_clauses; tmp; tmp = OMP_CLAUSE_CHAIN (tmp))
|
||||
if (OMP_CLAUSE_CODE (tmp) == OMP_CLAUSE_LINEAR
|
||||
&& OMP_CLAUSE_DECL (tmp) == dovar)
|
||||
{
|
||||
OMP_CLAUSE_LINEAR_NO_COPYIN (tmp) = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (!dovar_found)
|
||||
{
|
||||
if (op == EXEC_OMP_SIMD)
|
||||
@ -3263,6 +3276,7 @@ gfc_trans_omp_do (gfc_code *code, gfc_exec_op op, stmtblock_t *pblock,
|
||||
{
|
||||
tmp = build_omp_clause (input_location, OMP_CLAUSE_LINEAR);
|
||||
OMP_CLAUSE_LINEAR_STEP (tmp) = step;
|
||||
OMP_CLAUSE_LINEAR_NO_COPYIN (tmp) = 1;
|
||||
}
|
||||
else
|
||||
tmp = build_omp_clause (input_location, OMP_CLAUSE_LASTPRIVATE);
|
||||
@ -3330,7 +3344,7 @@ gfc_trans_omp_do (gfc_code *code, gfc_exec_op op, stmtblock_t *pblock,
|
||||
else if (collapse == 1)
|
||||
{
|
||||
tmp = build_omp_clause (input_location, OMP_CLAUSE_LINEAR);
|
||||
OMP_CLAUSE_LINEAR_STEP (tmp) = step;
|
||||
OMP_CLAUSE_LINEAR_STEP (tmp) = build_int_cst (type, 1);
|
||||
OMP_CLAUSE_LINEAR_NO_COPYIN (tmp) = 1;
|
||||
OMP_CLAUSE_LINEAR_NO_COPYOUT (tmp) = 1;
|
||||
}
|
||||
|
@ -1,3 +1,8 @@
|
||||
2015-03-30 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR fortran/65597
|
||||
* testsuite/libgomp.fortran/pr65597.f90: New test.
|
||||
|
||||
2015-03-27 Tom de Vries <tom@codesourcery.com>
|
||||
|
||||
PR testsuite/65594
|
||||
|
21
libgomp/testsuite/libgomp.fortran/pr65597.f90
Normal file
21
libgomp/testsuite/libgomp.fortran/pr65597.f90
Normal file
@ -0,0 +1,21 @@
|
||||
! PR fortran/65597
|
||||
! { dg-do run }
|
||||
|
||||
integer :: i, a(151)
|
||||
a(:) = 0
|
||||
!$omp do simd
|
||||
do i = 1, 151, 31
|
||||
a(i) = a(i) + 1
|
||||
end do
|
||||
!$omp do simd linear (i: 31)
|
||||
do i = 1, 151, 31
|
||||
a(i) = a(i) + 1
|
||||
end do
|
||||
do i = 1, 151
|
||||
if (mod (i, 31) .eq. 1) then
|
||||
if (a(i) .ne. 2) call abort
|
||||
else
|
||||
if (a(i) .ne. 0) call abort
|
||||
end if
|
||||
end do
|
||||
end
|
Loading…
Reference in New Issue
Block a user