From: Tom de Vries Date: Tue, 16 Feb 2016 16:22:18 +0000 (+0000) Subject: backport "Fix ICE for SIMD clones usage in LTO" X-Git-Tag: releases/gcc-4.9.4~321 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=50b2337698ec1d8737f326b5c40bb5fe5150a67f;p=thirdparty%2Fgcc.git backport "Fix ICE for SIMD clones usage in LTO" 2016-02-16 Tom de Vries backport from trunk: 2015-10-21 Ilya Enkovich * omp-low.c (simd_clone_create): Set in_other_partition for created clones. * gcc.dg/lto/simd-function_0.c: New test. From-SVN: r233464 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 320a9e846fab..68f9d8def6cf 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,11 @@ +2016-02-16 Tom de Vries + + backport from trunk: + 2015-10-21 Ilya Enkovich + + * omp-low.c (simd_clone_create): Set in_other_partition + for created clones. + 2016-02-13 Oleg Endo Backport from mainline diff --git a/gcc/omp-low.c b/gcc/omp-low.c index b6ddf4883cbc..f105529e54ea 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -11192,6 +11192,8 @@ simd_clone_create (struct cgraph_node *old_node) DECL_STATIC_DESTRUCTOR (new_decl) = 0; new_node = cgraph_copy_node_for_versioning (old_node, new_decl, vNULL, NULL); + if (old_node->in_other_partition) + new_node->in_other_partition = 1; cgraph_call_function_insertion_hooks (new_node); } if (new_node == NULL) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8a19de5cc789..0c5c2f2ecf29 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2016-02-16 Tom de Vries + + backport from trunk: + 2015-10-21 Ilya Enkovich + + * gcc.dg/lto/simd-function_0.c: New test. + 2016-02-13 Oleg Endo Backport from mainline diff --git a/gcc/testsuite/gcc.dg/lto/simd-function_0.c b/gcc/testsuite/gcc.dg/lto/simd-function_0.c new file mode 100644 index 000000000000..cda31aafb2e4 --- /dev/null +++ b/gcc/testsuite/gcc.dg/lto/simd-function_0.c @@ -0,0 +1,34 @@ +/* { dg-lto-do link } */ +/* { dg-require-effective-target avx2 } */ +/* { dg-lto-options { { -fopenmp-simd -O3 -ffast-math -mavx2 -flto -flto-partition=max } } } */ + +#define SIZE 4096 +float x[SIZE]; + + +#pragma omp declare simd +float +__attribute__ ((noinline)) +my_mul (float x, float y) { + return x * y; +} + +__attribute__ ((noinline)) +int foo () +{ + int i = 0; +#pragma omp simd safelen (16) + for (i = 0; i < SIZE; i++) + x[i] = my_mul ((float)i, 9932.3323); + return (int)x[0]; +} + +int main () +{ + int i = 0; + for (i = 0; i < SIZE; i++) + x[i] = my_mul ((float) i, 9932.3323); + foo (); + return (int)x[0]; +} +