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:
Jakub Jelinek 2015-03-30 19:54:05 +02:00 committed by Jakub Jelinek
parent 744e26e71e
commit 6c384511a3
4 changed files with 49 additions and 1 deletions

View File

@ -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

View File

@ -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;
}

View File

@ -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

View 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