From: Jakub Jelinek Date: Tue, 30 May 2017 07:28:40 +0000 (+0200) Subject: backport: re PR tree-optimization/77665 (ICE in expand_GOMP_SIMD_VF, at internal... X-Git-Tag: releases/gcc-5.5.0~298 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a3768d48904d3f62edde679bf0e39414445f449a;p=thirdparty%2Fgcc.git backport: re PR tree-optimization/77665 (ICE in expand_GOMP_SIMD_VF, at internal-fn.c:172) Backported from mainline 2016-09-22 Jakub Jelinek PR fortran/77665 * tree-inline.c (remap_gimple_stmt): Set has_simduid_loops for all IFN_GOMP_SIMD_* internal fns. * gfortran.dg/gomp/pr77665.f90: New test. From-SVN: r248612 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index df789e32f24f..2469b119dd49 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,12 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2016-09-22 Jakub Jelinek + + PR fortran/77665 + * tree-inline.c (remap_gimple_stmt): Set has_simduid_loops + for all IFN_GOMP_SIMD_* internal fns. + 2016-09-20 Jakub Jelinek PR middle-end/77624 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0192f663886a..01905bceff81 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2017-05-30 Jakub Jelinek Backported from mainline + 2016-09-22 Jakub Jelinek + + PR fortran/77665 + * gfortran.dg/gomp/pr77665.f90: New test. + 2016-09-20 Jakub Jelinek PR c++/77637 diff --git a/gcc/testsuite/gfortran.dg/gomp/pr77665.f90 b/gcc/testsuite/gfortran.dg/gomp/pr77665.f90 new file mode 100644 index 000000000000..50183cbce6dd --- /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 60f79336cd7e..ce961d665ab0 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -1644,6 +1644,17 @@ 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)) + switch (gimple_call_internal_fn (call_stmt)) + { + case IFN_GOMP_SIMD_LANE: + case IFN_GOMP_SIMD_VF: + case IFN_GOMP_SIMD_LAST_LANE: + DECL_STRUCT_FUNCTION (id->dst_fn)->has_simduid_loops = true; + break; + default: + break; + } } /* Remap the region numbers for __builtin_eh_{pointer,filter},