+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
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))
+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
--- /dev/null
+/* 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" } } */
+
--- /dev/null
+! { 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" } }