re PR ipa/78027 (ICE in new_oacc_loop_routine, at omp-low.c:19000)
authorCesar Philippidis <cesar@codesourcery.com>
Fri, 9 Dec 2016 14:45:54 +0000 (06:45 -0800)
committerCesar Philippidis <cesar@gcc.gnu.org>
Fri, 9 Dec 2016 14:45:54 +0000 (06:45 -0800)
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

gcc/ChangeLog
gcc/ipa-icf.c
gcc/testsuite/ChangeLog
gcc/testsuite/c-c++-common/goacc/acc-icf.c [new file with mode: 0644]
gcc/testsuite/gfortran.dg/goacc/pr78027.f90 [new file with mode: 0644]

index 91dfc18bf9f56c012efa45485a5a49321c8ad620..2cf9595aebfe2d495beaca185d26c8f7053f304e 100644 (file)
@@ -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
index 553b81ee38c40301d2d6faec509e63508b4e6ea9..31061e9d89b2df470ffd47046738f2a11ad0d6f2 100644 (file)
@@ -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))
index 6390bdaa3426df7e7c0bbf4988ab1982beec2200..6c41c41acb339da772ca3e6deecff81cc6dfa6b2 100644 (file)
@@ -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 (file)
index 0000000..ecfe3f2
--- /dev/null
@@ -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 (file)
index 0000000..db65063
--- /dev/null
@@ -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" } }