aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCesar Philippidis <cesar@codesourcery.com>2016-12-09 06:45:54 -0800
committerCesar Philippidis <cesar@gcc.gnu.org>2016-12-09 06:45:54 -0800
commit97ad3aef459c78ceca7c42f214dfd618db174d82 (patch)
tree9dfe62e3f7f29e7c6ffe9c39f067e11ac12765e4
parent6bd8a5c78f6c9b480936e88eff6b44e9ea0ed577 (diff)
downloadgcc-97ad3aef459c78ceca7c42f214dfd618db174d82.zip
gcc-97ad3aef459c78ceca7c42f214dfd618db174d82.tar.gz
gcc-97ad3aef459c78ceca7c42f214dfd618db174d82.tar.bz2
re PR ipa/78027 (ICE in new_oacc_loop_routine, at omp-low.c:19000)
PR ipa/78027 gcc/ * ipa-icf.c (sem_function::parse): Don't process functions with oacc decl attributes, as they may be OpenACC routines. gcc/testsuite/ * c-c++-common/goacc/acc-icf.c: New test. * gfortran.dg/goacc/pr78027.f90: New test. From-SVN: r243488
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/ipa-icf.c4
-rw-r--r--gcc/testsuite/ChangeLog6
-rw-r--r--gcc/testsuite/c-c++-common/goacc/acc-icf.c49
-rw-r--r--gcc/testsuite/gfortran.dg/goacc/pr78027.f9020
5 files changed, 85 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 91dfc18..2cf9595 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2016-12-09 Cesar Philippidis <cesar@codesourcery.com>
+
+ PR ipa/78027
+ * ipa-icf.c (sem_function::parse): Don't process functions with
+ oacc decl attributes, as they may be OpenACC routines.
+
2016-12-09 David Malcolm <dmalcolm@redhat.com>
* rtl.h (get_mem_attrs): Add "const" qualifier to returned
diff --git a/gcc/ipa-icf.c b/gcc/ipa-icf.c
index 553b81e..31061e9 100644
--- a/gcc/ipa-icf.c
+++ b/gcc/ipa-icf.c
@@ -1689,6 +1689,10 @@ sem_function::parse (cgraph_node *node, bitmap_obstack *stack)
if (lookup_attribute_by_prefix ("omp ", DECL_ATTRIBUTES (node->decl)) != NULL)
return NULL;
+ if (lookup_attribute_by_prefix ("oacc ",
+ DECL_ATTRIBUTES (node->decl)) != NULL)
+ return NULL;
+
/* PR ipa/70306. */
if (DECL_STATIC_CONSTRUCTOR (node->decl)
|| DECL_STATIC_DESTRUCTOR (node->decl))
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 6390bda..6c41c41 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2016-12-09 Cesar Philippidis <cesar@codesourcery.com>
+
+ PR ipa/78027
+ * c-c++-common/goacc/acc-icf.c: New test.
+ * gfortran.dg/goacc/pr78027.f90: New test.
+
2015-12-09 Wilco Dijkstra <wdijkstr@arm.com>
PR target/78733
diff --git a/gcc/testsuite/c-c++-common/goacc/acc-icf.c b/gcc/testsuite/c-c++-common/goacc/acc-icf.c
new file mode 100644
index 0000000..ecfe3f2
--- /dev/null
+++ b/gcc/testsuite/c-c++-common/goacc/acc-icf.c
@@ -0,0 +1,49 @@
+/* Ensure that IPA-ICF is disabled on OpenACC routines. */
+
+/* { dg-additional-options "-fopenacc -O2 -fdump-ipa-icf" } */
+
+#pragma acc routine gang
+int
+routine1 (int n)
+{
+ int i;
+
+ #pragma acc loop
+ for (i = 0; i < n; i++)
+ ;
+
+ return n + 1;
+}
+
+#pragma acc routine gang
+int
+routine2 (int n)
+{
+ int i;
+
+ #pragma acc loop
+ for (i = 0; i < n; i++)
+ ;
+
+ return n + 1;
+}
+
+int
+main ()
+{
+ int i;
+
+ #pragma acc parallel loop
+ for (i = 0; i < 8; i++)
+ ;
+
+ #pragma acc parallel loop
+ for (i = 0; i < 8; i++)
+ ;
+
+ return 0;
+}
+
+/* { dg-final { scan-ipa-dump-times "Not parsed function:" 4 "icf" } } */
+/* { dg-final { scan-ipa-dump "Parsed function:main" "icf" } } */
+
diff --git a/gcc/testsuite/gfortran.dg/goacc/pr78027.f90 b/gcc/testsuite/gfortran.dg/goacc/pr78027.f90
new file mode 100644
index 0000000..db65063
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/goacc/pr78027.f90
@@ -0,0 +1,20 @@
+! { dg-additional-options "-fopenmp -O2 -fdump-ipa-icf" }
+
+real function f()
+ !$omp declare target(f)
+ f = 1.
+ !$acc parallel
+ !$acc loop
+ do i = 1, 8
+ end do
+ !$acc end parallel
+ !$acc parallel
+ !$acc loop
+ do i = 1, 8
+ end do
+ !$acc end parallel
+ end
+
+! { dg-final { scan-ipa-dump "Not parsed function:f_._omp_fn.1" "icf" } }
+! { dg-final { scan-ipa-dump "Not parsed function:f_._omp_fn.0" "icf" } }
+! { dg-final { scan-ipa-dump "Not parsed function:f_" "icf" } }