aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2016-09-22 13:17:24 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2016-09-22 13:17:24 +0200
commitcf352092e2ec219b0c841cb6e49d876a4b312bca (patch)
tree8f7885ede46d699c3f4c553dd975517f72352e04 /gcc
parent8a4c4f1273679f493dd513b3dc0e9e1952459bd4 (diff)
downloadgcc-cf352092e2ec219b0c841cb6e49d876a4b312bca.zip
gcc-cf352092e2ec219b0c841cb6e49d876a4b312bca.tar.gz
gcc-cf352092e2ec219b0c841cb6e49d876a4b312bca.tar.bz2
re PR tree-optimization/77665 (ICE in expand_GOMP_SIMD_VF, at internal-fn.c:172)
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_*. * gfortran.dg/gomp/pr77665.f90: New test. From-SVN: r240348
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/pr77665.f9018
-rw-r--r--gcc/tree-inline.c18
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},