diff options
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/gomp/pr77665.f90 | 18 | ||||
-rw-r--r-- | gcc/tree-inline.c | 18 |
4 files changed, 43 insertions, 5 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 816ca50..0b689ab 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2016-09-22 Jakub Jelinek <jakub@redhat.com> + + PR fortran/77665 + * tree-inline.c (remap_gimple_stmt): Set has_simduid_loops + for all IFN_GOMP_SIMD_* internal fns, not just for + IFN_GOMP_SIMD_ORDERED_*. + 2016-09-21 Michael Meissner <meissner@linux.vnet.ibm.com> PR target/77670 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c354612..0891121 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2016-09-22 Jakub Jelinek <jakub@redhat.com> + + PR fortran/77665 + * gfortran.dg/gomp/pr77665.f90: New test. + 2016-09-22 Paul Thomas <pault@gcc.gnu.org> * gfortran.dg/dtio_11.f90: Correct for changed error messages. diff --git a/gcc/testsuite/gfortran.dg/gomp/pr77665.f90 b/gcc/testsuite/gfortran.dg/gomp/pr77665.f90 new file mode 100644 index 0000000..50183cb --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/pr77665.f90 @@ -0,0 +1,18 @@ +! PR fortran/77665 +! { dg-do compile } +! { dg-additional-options "-O2" } + +program pr77665 + type t + integer :: a = 0 + end type + type(t) :: x + integer :: i + !$omp declare reduction (+:t: omp_out%a = omp_out%a + omp_in%a) + !$omp simd reduction(+:x) + do i = 1, 8 + if (abs(i) < 5) call abort + x%a = x%a + 1 + end do + print *, x%a +end diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 83ba423..8a06e29 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -1644,11 +1644,19 @@ remap_gimple_stmt (gimple *stmt, copy_body_data *id) gimple_call_set_tail (call_stmt, false); if (gimple_call_from_thunk_p (call_stmt)) gimple_call_set_from_thunk (call_stmt, false); - if (gimple_call_internal_p (call_stmt) - && IN_RANGE (gimple_call_internal_fn (call_stmt), - IFN_GOMP_SIMD_ORDERED_START, - IFN_GOMP_SIMD_ORDERED_END)) - DECL_STRUCT_FUNCTION (id->dst_fn)->has_simduid_loops = true; + if (gimple_call_internal_p (call_stmt)) + switch (gimple_call_internal_fn (call_stmt)) + { + case IFN_GOMP_SIMD_LANE: + case IFN_GOMP_SIMD_VF: + case IFN_GOMP_SIMD_LAST_LANE: + case IFN_GOMP_SIMD_ORDERED_START: + case IFN_GOMP_SIMD_ORDERED_END: + DECL_STRUCT_FUNCTION (id->dst_fn)->has_simduid_loops = true; + break; + default: + break; + } } /* Remap the region numbers for __builtin_eh_{pointer,filter}, |