public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [gomp4, committed] expand oacc kernels region at same time as oacc parallel region
@ 2015-11-05 10:17 Tom de Vries
  2015-11-05 10:33 ` [gomp4, committed, 1/9] Move expansion of kernels region back to first omp-expand Tom de Vries
                   ` (8 more replies)
  0 siblings, 9 replies; 10+ messages in thread
From: Tom de Vries @ 2015-11-05 10:17 UTC (permalink / raw)
  To: gcc-patches; +Cc: Jakub Jelinek

Hi,

now that we have committed -foffload-alias in gomp-4_0-branch ( 
https://gcc.gnu.org/ml/gcc-patches/2015-11/msg00214.html ), we no longer 
need the kernels region to be a part of the original function when doing 
alias analysis.

So, we no longer have the need to postpone splitting off the kernels 
region into a seperate function until after alias analysis, but we can 
do this at the same time as when we expand the parallel region.

The following patch series implements that:

      1	Move expansion of kernels region back to first omp-expand
      2	Update gate_oacc_kernels to handle oacc function
      3	Revert "Add skip_stmt parm to pass_dominator::get_sese ()"
      4	Revert "Add pass_dominator::sese_mode_p ()"
      5	Handle oacc function in parloops
      6	Update goacc kernels C testcases
      7	Update goacc kernels Fortran testcases
      8	Release_defs in expand_omp_atomic_fetch_op
      9	Remove BUILT_IN_GOACC_KERNELS_INTERNAL

[ The patch series is broken up into logical bits, but intended as 
single commit. Various things in kernels support will be broken in 
intermediate stages. ]

Committed to gomp-4_0-branch.

I'll post the patches in reply to this message.

Thanks,
- Tom

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [gomp4, committed, 1/9] Move expansion of kernels region back to first omp-expand
  2015-11-05 10:17 [gomp4, committed] expand oacc kernels region at same time as oacc parallel region Tom de Vries
@ 2015-11-05 10:33 ` Tom de Vries
  2015-11-05 10:40 ` [gomp4, committed, 2/9] Update gate_oacc_kernels to handle oacc function Tom de Vries
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Tom de Vries @ 2015-11-05 10:33 UTC (permalink / raw)
  To: gcc-patches; +Cc: Jakub Jelinek

[-- Attachment #1: Type: text/plain, Size: 1729 bytes --]

On 05/11/15 11:16, Tom de Vries wrote:
> Hi,
>
> now that we have committed -foffload-alias in gomp-4_0-branch (
> https://gcc.gnu.org/ml/gcc-patches/2015-11/msg00214.html ), we no longer
> need the kernels region to be a part of the original function when doing
> alias analysis.
>
> So, we no longer have the need to postpone splitting off the kernels
> region into a seperate function until after alias analysis, but we can
> do this at the same time as when we expand the parallel region.
>
> The following patch series implements that:
>
>       1    Move expansion of kernels region back to first omp-expand
>       2    Update gate_oacc_kernels to handle oacc function
>       3    Revert "Add skip_stmt parm to pass_dominator::get_sese ()"
>       4    Revert "Add pass_dominator::sese_mode_p ()"
>       5    Handle oacc function in parloops
>       6    Update goacc kernels C testcases
>       7    Update goacc kernels Fortran testcases
>       8    Release_defs in expand_omp_atomic_fetch_op
>       9    Remove BUILT_IN_GOACC_KERNELS_INTERNAL
>
> [ The patch series is broken up into logical bits, but intended as
> single commit. Various things in kernels support will be broken in
> intermediate stages. ]
>
> Committed to gomp-4_0-branch.
>
> I'll post the patches in reply to this message.
>

This patch moves expansion of the kernels region back to the first 
omp-expand pass, before ssa.

There's no longer a need for the region-replacing call to expand into 
BUILT_IN_GOACC_KERNELS_INTERNAL and subsequently map onto 
BUILT_IN_GOACC_PARALLEL during the second omp-expand pass.  The 
BUILT_IN_GOACC_KERNELS_INTERNAL call was modeled transparant to alias 
analysis, and that's no longer needed.

Thanks,
- Tom

[-- Attachment #2: 0001-Move-expansion-of-kernels-region-back-to-first-omp-e.patch --]
[-- Type: text/x-patch, Size: 4106 bytes --]

Move expansion of kernels region back to first omp-expand

2015-11-04  Tom de Vries  <tom@codesourcery.com>

	* omp-low.c (expand_omp_target): Remove do_emit_library_call variable,
	assume true.  Remove do_splitoff variable, assume true.  Remove
	BUILT_IN_GOACC_KERNELS_INTERNAL handling.  Replace kernels region with a
	BUILT_IN_GOACC_PARALLEL call.
---
 gcc/omp-low.c | 57 ++++-----------------------------------------------------
 1 file changed, 4 insertions(+), 53 deletions(-)

diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index 6bac074..ac8c8d0 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -12563,8 +12563,6 @@ expand_omp_target (struct omp_region *region)
   gimple *stmt;
   edge e;
   bool offloaded, data_region;
-  bool do_emit_library_call = true;
-  bool do_splitoff = true;
 
   entry_stmt = as_a <gomp_target *> (last_stmt (region->entry));
 
@@ -12608,43 +12606,7 @@ expand_omp_target (struct omp_region *region)
   exit_bb = region->exit;
 
   if (gimple_omp_target_kind (entry_stmt) == GF_OMP_TARGET_KIND_OACC_KERNELS)
-    {
-      if (!gimple_in_ssa_p (cfun))
-	{
-	  /* We need to do analysis and optimizations on the kernels region
-	     before splitoff.  Since that's hard to do on low gimple, we
-	     postpone the splitoff until we're in SSA.
-	     However, we do the emit of the corresponding function call already,
-	     in order to keep the arguments of the call alive until the
-	     splitoff.
-	     Since at this point the function that is called is empty, we can
-	     model the function as BUILT_IN_GOACC_KERNELS_INTERNAL, which marks
-	     some of it's function arguments as non-escaping, so it acts less
-	     as an optimization barrier.  */
-	  do_splitoff = false;
-	  cfun->curr_properties &= ~PROP_gimple_eomp;
-
-	  mark_loops_in_oacc_kernels_region (region->entry, region->exit);
-	}
-      else
-	{
-	  /* Don't emit the library call.  We've already done that.  */
-	  do_emit_library_call = false;
-	  /* Transform BUILT_IN_GOACC_KERNELS_INTERNAL into
-	     BUILT_IN_GOACC_PARALLELL.  Now that the function
-	     body will be split off, we can no longer regard the
-	     omp_data_array reference as non-escaping.  */
-	  gsi = gsi_last_bb (entry_bb);
-	  gsi_prev (&gsi);
-	  gcall *call = as_a <gcall *> (gsi_stmt (gsi));
-	  gcc_assert (gimple_call_builtin_p
-		      (call, BUILT_IN_GOACC_KERNELS_INTERNAL));
-	  tree fndecl = builtin_decl_explicit (BUILT_IN_GOACC_PARALLEL);
-	  gimple_call_set_fndecl (call, fndecl);
-	  gimple_call_set_fntype (call, TREE_TYPE (fndecl));
-	  gimple_call_reset_alias_info (call);
-	}
-    }
+    mark_loops_in_oacc_kernels_region (region->entry, region->exit);
 
   basic_block entry_succ_bb = single_succ (entry_bb);
   if (offloaded && !gimple_in_ssa_p (cfun))
@@ -12654,8 +12616,7 @@ expand_omp_target (struct omp_region *region)
 	gsi_remove (&gsi, true);
     }
 
-  if (offloaded
-      && do_splitoff)
+  if (offloaded)
     {
       unsigned srcidx, dstidx, num;
 
@@ -12852,13 +12813,6 @@ expand_omp_target (struct omp_region *region)
       pop_cfun ();
     }
 
-  if (!do_emit_library_call)
-    {
-      if (gimple_in_ssa_p (cfun))
-	update_ssa (TODO_update_ssa_only_virtuals);
-      return;
-    }
-
   /* Emit a library call to launch the offloading region, or do data
      transfers.  */
   tree t1, t2, t3, t4, device, cond, depend, c, clauses;
@@ -12885,10 +12839,8 @@ expand_omp_target (struct omp_region *region)
       flags_i |= GOMP_TARGET_FLAG_EXIT_DATA;
       break;
     case GF_OMP_TARGET_KIND_OACC_PARALLEL:
-      start_ix = BUILT_IN_GOACC_PARALLEL;
-      break;
     case GF_OMP_TARGET_KIND_OACC_KERNELS:
-      start_ix = BUILT_IN_GOACC_KERNELS_INTERNAL;
+      start_ix = BUILT_IN_GOACC_PARALLEL;
       break;
     case GF_OMP_TARGET_KIND_OACC_DATA:
       start_ix = BUILT_IN_GOACC_DATA_START;
@@ -12951,8 +12903,7 @@ expand_omp_target (struct omp_region *region)
       tree tmp_var;
 
       tmp_var = create_tmp_var (TREE_TYPE (device));
-      if (offloaded
-	  && do_splitoff)
+      if (offloaded)
 	e = split_block_after_labels (new_bb);
       else
 	{
-- 
1.9.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [gomp4, committed, 2/9] Update gate_oacc_kernels to handle oacc function
  2015-11-05 10:17 [gomp4, committed] expand oacc kernels region at same time as oacc parallel region Tom de Vries
  2015-11-05 10:33 ` [gomp4, committed, 1/9] Move expansion of kernels region back to first omp-expand Tom de Vries
@ 2015-11-05 10:40 ` Tom de Vries
  2015-11-05 10:46 ` [gomp4, committed, 3/9] Revert "Add skip_stmt parm to pass_dominator::get_sese ()" Tom de Vries
                   ` (6 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Tom de Vries @ 2015-11-05 10:40 UTC (permalink / raw)
  To: gcc-patches; +Cc: Jakub Jelinek

[-- Attachment #1: Type: text/plain, Size: 1846 bytes --]

On 05/11/15 11:16, Tom de Vries wrote:
> Hi,
>
> now that we have committed -foffload-alias in gomp-4_0-branch (
> https://gcc.gnu.org/ml/gcc-patches/2015-11/msg00214.html ), we no longer
> need the kernels region to be a part of the original function when doing
> alias analysis.
>
> So, we no longer have the need to postpone splitting off the kernels
> region into a seperate function until after alias analysis, but we can
> do this at the same time as when we expand the parallel region.
>
> The following patch series implements that:
>
>       1    Move expansion of kernels region back to first omp-expand
>       2    Update gate_oacc_kernels to handle oacc function
>       3    Revert "Add skip_stmt parm to pass_dominator::get_sese ()"
>       4    Revert "Add pass_dominator::sese_mode_p ()"
>       5    Handle oacc function in parloops
>       6    Update goacc kernels C testcases
>       7    Update goacc kernels Fortran testcases
>       8    Release_defs in expand_omp_atomic_fetch_op
>       9    Remove BUILT_IN_GOACC_KERNELS_INTERNAL
>
> [ The patch series is broken up into logical bits, but intended as
> single commit. Various things in kernels support will be broken in
> intermediate stages. ]
>
> Committed to gomp-4_0-branch.
>
> I'll post the patches in reply to this message.

This patch updates the kernels pass group gate function.

Before, it needed to trigger on functions containing kernel regions.
Now, it needs to trigger on oacc functions that used to be kernels 
regions before they were split off.

Furthermore, I've duplicated the parloops gate here 
(flag_tree_parallelize_loops > 1).  There's not much sense in running 
the pass group unless we're trying to parallelize.

Consequently, I needed to add a "-ftree-parallelize-loops=32" settting 
to a testcase which missed that setting.

Thanks,
- Tom


[-- Attachment #2: 0002-Update-gate_oacc_kernels-to-handle-oacc-function.patch --]
[-- Type: text/x-patch, Size: 2203 bytes --]

Update gate_oacc_kernels to handle oacc function

2015-11-04  Tom de Vries  <tom@codesourcery.com>

	* tree-ssa-loop.c: Include omp-low.h.
	(gate_oacc_kernels): Test for flag_tree_parallelize_loops.  Test for
	oacc function attribute.  Test for loop with in_oacc_kernels_region.

	* c-c++-common/goacc/kernels-counter-var-redundant-load.c: Run with
	-ftree-parallelize-loops=32.
---
 .../goacc/kernels-counter-var-redundant-load.c     |  1 +
 gcc/tree-ssa-loop.c                                | 22 +++++++++++++++++++++-
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-counter-var-redundant-load.c b/gcc/testsuite/c-c++-common/goacc/kernels-counter-var-redundant-load.c
index c4ffc1d..bf59838 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-counter-var-redundant-load.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-counter-var-redundant-load.c
@@ -1,4 +1,5 @@
 /* { dg-additional-options "-O2" } */
+/* { dg-additional-options "-ftree-parallelize-loops=32" } */
 /* { dg-additional-options "-fdump-tree-dom_oacc_kernels3" } */
 
 #include <stdlib.h>
diff --git a/gcc/tree-ssa-loop.c b/gcc/tree-ssa-loop.c
index 5e0b5a5..344c6c7 100644
--- a/gcc/tree-ssa-loop.c
+++ b/gcc/tree-ssa-loop.c
@@ -40,6 +40,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree-inline.h"
 #include "tree-scalar-evolution.h"
 #include "tree-vectorizer.h"
+#include "omp-low.h"
 
 
 /* A pass making sure loops are fixed up.  */
@@ -151,7 +152,26 @@ make_pass_tree_loop (gcc::context *ctxt)
 static bool
 gate_oacc_kernels (function *fn)
 {
-  return (fn->curr_properties & PROP_gimple_eomp) == 0;
+  if (flag_tree_parallelize_loops <= 1)
+    return false;
+
+  tree oacc_function_attr = get_oacc_fn_attrib (fn->decl);
+  if (oacc_function_attr == NULL_TREE)
+    return false;
+
+  tree val = TREE_VALUE (oacc_function_attr);
+  while (val != NULL_TREE && TREE_VALUE (val) == NULL_TREE)
+    val = TREE_CHAIN (val);
+
+  if (val != NULL_TREE)
+    return false;
+
+  struct loop *loop;
+  FOR_EACH_LOOP (loop, 0)
+    if (loop->in_oacc_kernels_region)
+      return true;
+
+  return false;
 }
 
 /* The oacc kernels superpass.  */
-- 
1.9.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [gomp4, committed, 3/9] Revert "Add skip_stmt parm to pass_dominator::get_sese ()"
  2015-11-05 10:17 [gomp4, committed] expand oacc kernels region at same time as oacc parallel region Tom de Vries
  2015-11-05 10:33 ` [gomp4, committed, 1/9] Move expansion of kernels region back to first omp-expand Tom de Vries
  2015-11-05 10:40 ` [gomp4, committed, 2/9] Update gate_oacc_kernels to handle oacc function Tom de Vries
@ 2015-11-05 10:46 ` Tom de Vries
  2015-11-05 10:50 ` [gomp4, committed, 4/9] Revert "Add pass_dominator::sese_mode_p ()" Tom de Vries
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Tom de Vries @ 2015-11-05 10:46 UTC (permalink / raw)
  To: gcc-patches; +Cc: Jakub Jelinek

[-- Attachment #1: Type: text/plain, Size: 1640 bytes --]

On 05/11/15 11:16, Tom de Vries wrote:
> Hi,
>
> now that we have committed -foffload-alias in gomp-4_0-branch (
> https://gcc.gnu.org/ml/gcc-patches/2015-11/msg00214.html ), we no longer
> need the kernels region to be a part of the original function when doing
> alias analysis.
>
> So, we no longer have the need to postpone splitting off the kernels
> region into a seperate function until after alias analysis, but we can
> do this at the same time as when we expand the parallel region.
>
> The following patch series implements that:
>
>       1    Move expansion of kernels region back to first omp-expand
>       2    Update gate_oacc_kernels to handle oacc function
>       3    Revert "Add skip_stmt parm to pass_dominator::get_sese ()"
>       4    Revert "Add pass_dominator::sese_mode_p ()"
>       5    Handle oacc function in parloops
>       6    Update goacc kernels C testcases
>       7    Update goacc kernels Fortran testcases
>       8    Release_defs in expand_omp_atomic_fetch_op
>       9    Remove BUILT_IN_GOACC_KERNELS_INTERNAL
>
> [ The patch series is broken up into logical bits, but intended as
> single commit. Various things in kernels support will be broken in
> intermediate stages. ]
>
> Committed to gomp-4_0-branch.
>
> I'll post the patches in reply to this message.
>

We were using the skip_stmt functionality in pass_dominator to skip over 
a statement '.omp_data_i = &.omp_data_arr' in the kernels region.  That 
statement is removed during function split-off, so we no longer 
encounter that statement in the kernels pass group.

This patch reverts the stip_stmt functionality.

Thanks,
- Tom


[-- Attachment #2: 0003-Revert-Add-skip_stmt-parm-to-pass_dominator-get_sese.patch --]
[-- Type: text/x-patch, Size: 3400 bytes --]

Revert "Add skip_stmt parm to pass_dominator::get_sese ()"

2015-11-04  Tom de Vries  <tom@codesourcery.com>

	Revert:
	2015-10-12  Tom de Vries  <tom@codesourcery.com>

	* tree-ssa-dom.c (dom_opt_dom_walker::set_skip_stmt): New function.
	(dom_opt_dom_walker::m_skip_stmt): New private var.
	(pass_dominator::get_sese): Add skip_stmt parameters.
	(pass_dominator::execute): Call set_skip_stmt with statement to skip for
	sese.
	(dom_opt_dom_walker::before_dom_children): Handle m_skip_stmt.
---
 gcc/tree-ssa-dom.c | 27 +++++----------------------
 1 file changed, 5 insertions(+), 22 deletions(-)

diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c
index 6688a79..e1cf38b 100644
--- a/gcc/tree-ssa-dom.c
+++ b/gcc/tree-ssa-dom.c
@@ -505,7 +505,6 @@ public:
 
   virtual void before_dom_children (basic_block);
   virtual void after_dom_children (basic_block);
-  void set_skip_stmt (gimple *skip_stmt) { m_skip_stmt = skip_stmt; }
 
 private:
   void thread_across_edge (edge);
@@ -516,7 +515,6 @@ private:
 
   gcond *m_dummy_cond;
   bool m_jump_threading_p;
-  gimple *m_skip_stmt;
 };
 
 /* Jump threading, redundancy elimination and const/copy propagation.
@@ -544,11 +542,9 @@ class dominator_base : public gimple_opt_pass
   virtual bool sese_mode_p (void) { return false; }
 
   /* In sese mode, return true if there's another sese to visit.  Return the
-     sese to visit in SESE_ENTRY and SESE_EXIT.  If a stmt in the sese should
-     not be optimized, return it in SKIP_STMT.  */
+     sese to visit in SESE_ENTRY and SESE_EXIT.  */
   virtual bool get_sese (basic_block *sese_entry ATTRIBUTE_UNUSED,
-			 basic_block *sese_exit ATTRIBUTE_UNUSED,
-			 gimple **skip_stmt ATTRIBUTE_UNUSED)
+			 basic_block *sese_exit ATTRIBUTE_UNUSED)
     { gcc_unreachable (); }
 }; // class dominator_base
 
@@ -640,11 +636,8 @@ dominator_base::execute (function *fun)
   else
     {
       basic_block sese_entry, sese_exit;
-      gimple *skip_stmt = NULL;
-      while (get_sese (&sese_entry, &sese_exit, &skip_stmt))
+      while (get_sese (&sese_entry, &sese_exit))
 	{
-	  walker.set_skip_stmt (skip_stmt);
-
 	  threadedge_initialize_values ();
 	  avail_exprs_stack->push_marker ();
 	  const_and_copies->push_marker ();
@@ -797,8 +790,7 @@ public:
 protected:
   /* dominator_base methods: */
   virtual bool sese_mode_p (void) { return true; }
-  virtual bool get_sese (basic_block *sese_entry, basic_block *sese_exit,
-			 gimple **skip_stmt)
+  virtual bool get_sese (basic_block *sese_entry, basic_block *sese_exit)
   {
     if (m_regions == NULL)
       {
@@ -821,10 +813,6 @@ protected:
     *sese_entry = BASIC_BLOCK_FOR_FN (cfun, index);
     *sese_exit = get_oacc_kernels_region_exit (*sese_entry);
 
-    tree omp_data_i = get_omp_data_i (single_pred (*sese_entry));
-    if (omp_data_i != NULL_TREE)
-      *skip_stmt = SSA_NAME_DEF_STMT (omp_data_i);
-
     return true;
   }
 
@@ -1446,12 +1434,7 @@ dom_opt_dom_walker::before_dom_children (basic_block bb)
   m_avail_exprs_stack->pop_to_marker ();
 
   for (gsi = gsi_start_bb (bb); !gsi_end_p (gsi); gsi_next (&gsi))
-    {
-      if (gsi_stmt (gsi) == m_skip_stmt)
-	continue;
-
-      optimize_stmt (bb, gsi, m_const_and_copies, m_avail_exprs_stack);
-    }
+    optimize_stmt (bb, gsi, m_const_and_copies, m_avail_exprs_stack);
 
   /* Now prepare to process dominated blocks.  */
   if (m_jump_threading_p)
-- 
1.9.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [gomp4, committed, 4/9] Revert "Add pass_dominator::sese_mode_p ()"
  2015-11-05 10:17 [gomp4, committed] expand oacc kernels region at same time as oacc parallel region Tom de Vries
                   ` (2 preceding siblings ...)
  2015-11-05 10:46 ` [gomp4, committed, 3/9] Revert "Add skip_stmt parm to pass_dominator::get_sese ()" Tom de Vries
@ 2015-11-05 10:50 ` Tom de Vries
  2015-11-05 10:57 ` [gomp4, committed, 5/9] Handle oacc function in parloops Tom de Vries
                   ` (4 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Tom de Vries @ 2015-11-05 10:50 UTC (permalink / raw)
  To: gcc-patches; +Cc: Jakub Jelinek

[-- Attachment #1: Type: text/plain, Size: 1655 bytes --]

On 05/11/15 11:16, Tom de Vries wrote:
> Hi,
>
> now that we have committed -foffload-alias in gomp-4_0-branch (
> https://gcc.gnu.org/ml/gcc-patches/2015-11/msg00214.html ), we no longer
> need the kernels region to be a part of the original function when doing
> alias analysis.
>
> So, we no longer have the need to postpone splitting off the kernels
> region into a seperate function until after alias analysis, but we can
> do this at the same time as when we expand the parallel region.
>
> The following patch series implements that:
>
>       1    Move expansion of kernels region back to first omp-expand
>       2    Update gate_oacc_kernels to handle oacc function
>       3    Revert "Add skip_stmt parm to pass_dominator::get_sese ()"
>       4    Revert "Add pass_dominator::sese_mode_p ()"
>       5    Handle oacc function in parloops
>       6    Update goacc kernels C testcases
>       7    Update goacc kernels Fortran testcases
>       8    Release_defs in expand_omp_atomic_fetch_op
>       9    Remove BUILT_IN_GOACC_KERNELS_INTERNAL
>
> [ The patch series is broken up into logical bits, but intended as
> single commit. Various things in kernels support will be broken in
> intermediate stages. ]
>
> Committed to gomp-4_0-branch.
>
> I'll post the patches in reply to this message.

We needed the sese_mode_p functionality in the dominators pass to limit 
optimization scope to kernels regions. Now we no longer encounter 
kernels region in the kernels pass group, but split-off function that 
used to be  kernels region. So we no longer need this functionality.

This patch reverts the sese_mode_p functionality.

Thanks,
- Tom

[-- Attachment #2: 0004-Revert-Add-pass_dominator-sese_mode_p.patch --]
[-- Type: text/x-patch, Size: 4566 bytes --]

Revert "Add pass_dominator::sese_mode_p ()"

2015-11-04  Tom de Vries  <tom@codesourcery.com>

	revert:
	2015-10-12  Tom de Vries  <tom@codesourcery.com>

	* tree-ssa-dom.c (pass_dominator::jump_threading_p): Handle sese_mode_p.
	(pass_dominator::sese_mode_p, pass_dominator::get_sese): New protected
	virtual function.
	(pass_dominator::execute): Handle sese_mode_p.
---
 gcc/tree-ssa-dom.c | 78 ++++++------------------------------------------------
 1 file changed, 8 insertions(+), 70 deletions(-)

diff --git a/gcc/tree-ssa-dom.c b/gcc/tree-ssa-dom.c
index e1cf38b..44253bf 100644
--- a/gcc/tree-ssa-dom.c
+++ b/gcc/tree-ssa-dom.c
@@ -44,7 +44,6 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree-ssa-dom.h"
 #include "gimplify.h"
 #include "tree-cfgcleanup.h"
-#include "cfgcleanup.h"
 #include "omp-low.h"
 
 /* This file implements optimizations on the dominator tree.  */
@@ -535,17 +534,7 @@ class dominator_base : public gimple_opt_pass
   unsigned int execute (function *);
 
   /* Return true if pass should perform jump threading.  */
-  virtual bool jump_threading_p (void) { return !sese_mode_p (); }
-
-  /* Return true if pass should visit a series of seses rather than the whole
-     dominator tree.  */
-  virtual bool sese_mode_p (void) { return false; }
-
-  /* In sese mode, return true if there's another sese to visit.  Return the
-     sese to visit in SESE_ENTRY and SESE_EXIT.  */
-  virtual bool get_sese (basic_block *sese_entry ATTRIBUTE_UNUSED,
-			 basic_block *sese_exit ATTRIBUTE_UNUSED)
-    { gcc_unreachable (); }
+  virtual bool jump_threading_p (void) { return true; }
 }; // class dominator_base
 
 const pass_data pass_data_dominator =
@@ -602,14 +591,11 @@ dominator_base::execute (function *fun)
      LOOPS_HAVE_PREHEADERS won't be needed here.  */
   loop_optimizer_init (LOOPS_HAVE_PREHEADERS | LOOPS_HAVE_SIMPLE_LATCHES);
 
-  if (!sese_mode_p ())
-    /* Initialize the value-handle array.  */
-    threadedge_initialize_values ();
+  /* Initialize the value-handle array.  */
+  threadedge_initialize_values ();
 
   if (jump_threading_p ())
     {
-      gcc_assert (!sese_mode_p ());
-
       /* We need accurate information regarding back edges in the CFG
 	 for jump threading; this may include back edges that are not part of
 	 a single loop.  */
@@ -631,29 +617,7 @@ dominator_base::execute (function *fun)
 			     const_and_copies,
 			     avail_exprs_stack,
 			     jump_threading_p ());
-  if (!sese_mode_p ())
-    walker.walk (fun->cfg->x_entry_block_ptr);
-  else
-    {
-      basic_block sese_entry, sese_exit;
-      while (get_sese (&sese_entry, &sese_exit))
-	{
-	  threadedge_initialize_values ();
-	  avail_exprs_stack->push_marker ();
-	  const_and_copies->push_marker ();
-
-	  walker.walk_until (sese_entry, sese_exit, true);
-
-	  avail_exprs_stack->pop_to_marker ();
-	  const_and_copies->pop_to_marker ();
-	  threadedge_finalize_values ();
-
-	  /* KLUDGE: The dom_walker does not allow unreachable blocks when
-	     starting the walk, and during the dom_opt_dom_walker walk we may
-	     produce unreachable blocks, so we need to clean them up here.  */
-	  delete_unreachable_blocks ();
-	}
-    }
+  walker.walk (fun->cfg->x_entry_block_ptr);
 
   {
     gimple_stmt_iterator gsi;
@@ -753,9 +717,8 @@ dominator_base::execute (function *fun)
   delete avail_exprs_stack;
   delete const_and_copies;
 
-  if (!sese_mode_p ())
-    /* Free the value-handle array.  */
-    threadedge_finalize_values ();
+  /* Free the value-handle array.  */
+  threadedge_finalize_values ();
 
   return 0;
 }
@@ -789,33 +752,8 @@ public:
 
 protected:
   /* dominator_base methods: */
-  virtual bool sese_mode_p (void) { return true; }
-  virtual bool get_sese (basic_block *sese_entry, basic_block *sese_exit)
-  {
-    if (m_regions == NULL)
-      {
-	m_regions = BITMAP_ALLOC (NULL);
-	basic_block bb;
-	FOR_EACH_BB_FN (bb, cfun)
-	  if (oacc_kernels_region_entry_p (bb, NULL))
-	    bitmap_set_bit (m_regions, bb->index);
-      }
-
-    if (bitmap_empty_p (m_regions))
-      {
-	BITMAP_FREE (m_regions);
-	return false;
-      }
-
-    unsigned int index = bitmap_first_set_bit (m_regions);
-    bitmap_clear_bit (m_regions, index);
-
-    *sese_entry = BASIC_BLOCK_FOR_FN (cfun, index);
-    *sese_exit = get_oacc_kernels_region_exit (*sese_entry);
-
-    return true;
-  }
-
+  /* Return true if pass should perform jump threading.  */
+  virtual bool jump_threading_p (void) { return false; }
 }; // class pass_dominator_oacc_kernels
 
 } // anon namespace
-- 
1.9.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [gomp4, committed, 5/9] Handle oacc function in parloops
  2015-11-05 10:17 [gomp4, committed] expand oacc kernels region at same time as oacc parallel region Tom de Vries
                   ` (3 preceding siblings ...)
  2015-11-05 10:50 ` [gomp4, committed, 4/9] Revert "Add pass_dominator::sese_mode_p ()" Tom de Vries
@ 2015-11-05 10:57 ` Tom de Vries
  2015-11-05 10:59 ` [gomp4, committed, 6/9] Update goacc kernels C testcases Tom de Vries
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Tom de Vries @ 2015-11-05 10:57 UTC (permalink / raw)
  To: gcc-patches; +Cc: Jakub Jelinek

[-- Attachment #1: Type: text/plain, Size: 1635 bytes --]

On 05/11/15 11:16, Tom de Vries wrote:
> Hi,
>
> now that we have committed -foffload-alias in gomp-4_0-branch (
> https://gcc.gnu.org/ml/gcc-patches/2015-11/msg00214.html ), we no longer
> need the kernels region to be a part of the original function when doing
> alias analysis.
>
> So, we no longer have the need to postpone splitting off the kernels
> region into a seperate function until after alias analysis, but we can
> do this at the same time as when we expand the parallel region.
>
> The following patch series implements that:
>
>       1    Move expansion of kernels region back to first omp-expand
>       2    Update gate_oacc_kernels to handle oacc function
>       3    Revert "Add skip_stmt parm to pass_dominator::get_sese ()"
>       4    Revert "Add pass_dominator::sese_mode_p ()"
>       5    Handle oacc function in parloops
>       6    Update goacc kernels C testcases
>       7    Update goacc kernels Fortran testcases
>       8    Release_defs in expand_omp_atomic_fetch_op
>       9    Remove BUILT_IN_GOACC_KERNELS_INTERNAL
>
> [ The patch series is broken up into logical bits, but intended as
> single commit. Various things in kernels support will be broken in
> intermediate stages. ]
>
> Committed to gomp-4_0-branch.
>
> I'll post the patches in reply to this message.

This patch removes handling of kernels regions in tree-parloops.c, and 
adds handling of oacc functions that used to be kernels regions before 
they were split off.

That means we no longer add a parallel pragma. OTOH, we now have to 
clear PROP_gimple_eomp in order to trigger the subsequent omp-expand pass.

Thanks,
- Tom


[-- Attachment #2: 0005-Handle-oacc-function-in-parloops.patch --]
[-- Type: text/x-patch, Size: 10360 bytes --]

Handle oacc function in parloops

2015-11-04  Tom de Vries  <tom@codesourcery.com>

	* omp-low.c (set_oacc_fn_attrib): Remove static.
	* omp-low.h (set_oacc_fn_attrib): Declare.
	* tree-parloops.c (create_parallel_loop): Remove region_entry parameter.
	Remove handling of oacc kernels pragma and GOACC_kernels_internal call.
	Remove insertion of oacc parallel pragma.  Set oacc function attributes.
	(gen_parallel_loop): Remove region_entry parameter.
	(get_omp_data_i_param): New function.
	(try_create_reduction_list): Use get_omp_data_i_param instead of
	gimple_stmt_omp_data_i_init_p.
	(ref_conflicts_with_region): Handle GIMPLE_RETURN.
	(oacc_entry_exit_ok_1): Same.  Add missing is_gimple_call test before
	gimple_call_internal_p test.
	(oacc_entry_exit_ok): Remove region_entry parameter.  Use
	get_omp_data_i_param instead of get_omp_data_i.  Set region_bbs to all
	bbs in function.  Use function entry as region entry.
	(parallelize_loops): Allow oacc functions and parallelized function if
	oacc_kernels_p.  Remove	region_entry variable.
	(pass_parallelize_loops_oacc_kernels::execute): Clear PROP_gimple_eomp
	if a loop was parallelized.
---
 gcc/omp-low.c       |   2 +-
 gcc/omp-low.h       |   1 +
 gcc/tree-parloops.c | 119 ++++++++++++++++++++++------------------------------
 3 files changed, 51 insertions(+), 71 deletions(-)

diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index ac8c8d0..58cb959 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -12456,7 +12456,7 @@ replace_oacc_fn_attrib (tree fn, tree dims)
    function attribute.  Push any that are non-constant onto the ARGS
    list, along with an appropriate GOMP_LAUNCH_DIM tag.  */
 
-static void
+void
 set_oacc_fn_attrib (tree fn, tree clauses, vec<tree> *args)
 {
   /* Must match GOMP_DIM ordering.  */
diff --git a/gcc/omp-low.h b/gcc/omp-low.h
index 7c9efdc..673b470 100644
--- a/gcc/omp-low.h
+++ b/gcc/omp-low.h
@@ -40,6 +40,7 @@ extern vec<basic_block> get_bbs_in_oacc_kernels_region (basic_block,
 extern void replace_oacc_fn_attrib (tree, tree);
 extern tree build_oacc_routine_dims (tree);
 extern tree get_oacc_fn_attrib (tree);
+extern void set_oacc_fn_attrib (tree, tree, vec<tree> *);
 
 extern GTY(()) vec<tree, va_gc> *offload_funcs;
 extern GTY(()) vec<tree, va_gc> *offload_vars;
diff --git a/gcc/tree-parloops.c b/gcc/tree-parloops.c
index f14cf8a..c038dfe 100644
--- a/gcc/tree-parloops.c
+++ b/gcc/tree-parloops.c
@@ -2017,7 +2017,7 @@ transform_to_exit_first_loop (struct loop *loop,
 static void
 create_parallel_loop (struct loop *loop, tree loop_fn, tree data,
 		      tree new_data, unsigned n_threads, location_t loc,
-		      basic_block region_entry, bool oacc_kernels_p)
+		      bool oacc_kernels_p)
 {
   gimple_stmt_iterator gsi;
   basic_block bb, paral_bb, for_bb, ex_bb, continue_bb;
@@ -2039,10 +2039,6 @@ create_parallel_loop (struct loop *loop, tree loop_fn, tree data,
       paral_bb = single_pred (bb);
       gsi = gsi_last_bb (paral_bb);
     }
-  else
-    /* Make sure the oacc parallel is inserted on top of the oacc kernels
-       region.  */
-    gsi = gsi_last_bb (region_entry);
 
   if (!oacc_kernels_p)
     {
@@ -2056,50 +2052,10 @@ create_parallel_loop (struct loop *loop, tree loop_fn, tree data,
     }
   else
     {
-      /* Create oacc parallel pragma based on oacc kernels pragma and
-	 GOACC_kernels_internal call.  */
-      gomp_target *kernels = as_a <gomp_target *> (gsi_stmt (gsi));
-
-      tree clauses = gimple_omp_target_clauses (kernels);
-      /* FIXME: We need a more intelligent mapping onto vector, gangs,
-	 workers.  */
-      if (1)
-	{
-	  tree clause = build_omp_clause (gimple_location (kernels),
-					  OMP_CLAUSE_NUM_GANGS);
-	  OMP_CLAUSE_NUM_GANGS_EXPR (clause) 
-	    = build_int_cst (integer_type_node, n_threads);
-	  OMP_CLAUSE_CHAIN (clause) = clauses;
-	  clauses = clause;
-	}
-      gomp_target *stmt
-	= gimple_build_omp_target (NULL, GF_OMP_TARGET_KIND_OACC_PARALLEL,
-				   clauses);
-      tree child_fn = gimple_omp_target_child_fn (kernels);
-      gimple_omp_target_set_child_fn (stmt, child_fn);
-      tree data_arg = gimple_omp_target_data_arg (kernels);
-      gimple_omp_target_set_data_arg (stmt, data_arg);
-
-      gimple_set_location (stmt, loc);
-
-      /* Insert oacc parallel pragma after the oacc kernels pragma.  */
-      {
-	gimple_stmt_iterator gsi2;
-	gsi = gsi_last_bb (region_entry);
-	gsi2 = gsi;
-	gsi_prev (&gsi2);
-
-	/* Insert pragma acc parallel.  */
-	gsi_insert_after (&gsi, stmt, GSI_NEW_STMT);
-
-	/* Remove GOACC_kernels_internal call.  */
-	replace_uses_by (gimple_vdef (gsi_stmt (gsi2)),
-			 gimple_vuse (gsi_stmt (gsi2)));
-	gsi_remove (&gsi2, true);
-
-	/* Remove pragma acc kernels.  */
-	gsi_remove (&gsi2, true);
-      }
+      tree clause = build_omp_clause (loc, OMP_CLAUSE_NUM_GANGS);
+      OMP_CLAUSE_NUM_GANGS_EXPR (clause)
+	= build_int_cst (integer_type_node, n_threads);
+      set_oacc_fn_attrib (cfun->decl, clause, NULL);
     }
 
   /* Initialize NEW_DATA.  */
@@ -2274,7 +2230,7 @@ static void
 gen_parallel_loop (struct loop *loop,
 		   reduction_info_table_type *reduction_list,
 		   unsigned n_threads, struct tree_niter_desc *niter,
-		   basic_block region_entry, bool oacc_kernels_p)
+		   bool oacc_kernels_p)
 {
   tree many_iterations_cond, type, nit;
   tree arg_struct, new_arg_struct;
@@ -2457,7 +2413,7 @@ gen_parallel_loop (struct loop *loop,
   if (cond_stmt)
     loc = gimple_location (cond_stmt);
   create_parallel_loop (loop, create_loop_fn (loc), arg_struct, new_arg_struct,
-			n_threads, loc, region_entry, oacc_kernels_p);
+			n_threads, loc, oacc_kernels_p);
   if (reduction_list->elements () > 0)
     create_call_for_reduction (loop, reduction_list, &clsn_data);
 
@@ -2650,6 +2606,22 @@ try_get_loop_niter (loop_p loop, struct tree_niter_desc *niter)
   return true;
 }
 
+static tree
+get_omp_data_i_param (void)
+{
+  tree decl = DECL_ARGUMENTS (cfun->decl);
+  gcc_assert (DECL_CHAIN (decl) == NULL_TREE);
+  for (unsigned int i = 0; i < num_ssa_names; ++i)
+    {
+      tree name = ssa_name (i);
+      if (name != NULL_TREE
+	  && SSA_NAME_VAR (name) == decl)
+	return name;
+    }
+
+  gcc_unreachable ();
+}
+
 /* Try to initialize REDUCTION_LIST for code generation part.
    REDUCTION_LIST describes the reductions.  */
 
@@ -2795,7 +2767,7 @@ try_create_reduction_list (loop_p loop,
 		return false;
 	      addr2 = TREE_OPERAND (addr2, 0);
 	      if (TREE_CODE (addr2) != SSA_NAME
-		  || !gimple_stmt_omp_data_i_init_p (SSA_NAME_DEF_STMT (addr2)))
+		  || addr2 != get_omp_data_i_param ())
 		return false;
 	      red->reduc_addr = addr;
 	    }
@@ -2849,6 +2821,9 @@ ref_conflicts_with_region (gimple_stmt_iterator gsi, ao_ref *ref,
 	      && !gimple_vuse (stmt))
 	    continue;
 
+	  if (gimple_code (stmt) == GIMPLE_RETURN)
+	    continue;
+
 	  if (ref_is_store)
 	    {
 	      if (dead_load_p (stmt))
@@ -2989,9 +2964,12 @@ oacc_entry_exit_ok_1 (bitmap in_loop_bbs, vec<basic_block> region_bbs,
 		   && !gimple_vdef (stmt)
 		   && !gimple_vuse (stmt))
 	    continue;
-	  else if (gimple_call_internal_p (stmt)
+	  else if (is_gimple_call (stmt)
+		   && gimple_call_internal_p (stmt)
 		   && gimple_call_internal_fn (stmt) == IFN_GOACC_DIM_POS)
 	    continue;
+	  else if (gimple_code (stmt) == GIMPLE_RETURN)
+	    continue;
 	  else
 	    {
 	      if (dump_file)
@@ -3119,19 +3097,17 @@ oacc_entry_exit_single_gang (bitmap in_loop_bbs, vec<basic_block> region_bbs,
 }
 
 static bool
-oacc_entry_exit_ok (struct loop *loop, basic_block region_entry,
+oacc_entry_exit_ok (struct loop *loop,
 		    reduction_info_table_type *reduction_list)
 {
   basic_block *loop_bbs = get_loop_body_in_dom_order (loop);
-  basic_block region_exit
-    = get_oacc_kernels_region_exit (single_succ (region_entry));
-  vec<basic_block> region_bbs
-    = get_bbs_in_oacc_kernels_region (region_entry, region_exit);
-  tree omp_data_i = get_omp_data_i (region_entry);
+  tree omp_data_i = get_omp_data_i_param ();
   gcc_assert (omp_data_i != NULL_TREE);
+  vec<basic_block> region_bbs
+    = get_all_dominated_blocks (CDI_DOMINATORS, ENTRY_BLOCK_PTR_FOR_FN (cfun));
 
-  gimple_stmt_iterator gsi = gsi_for_stmt (SSA_NAME_DEF_STMT (omp_data_i));
-  gsi_next_nondebug (&gsi);
+  gimple_stmt_iterator gsi
+    = gsi_start_bb (single_succ (ENTRY_BLOCK_PTR_FOR_FN (cfun)));
   gimple *stmt = gsi_stmt (gsi);
   gcc_assert (gimple_call_internal_p (stmt)
 	      && gimple_call_internal_fn (stmt) == IFN_GOACC_DIM_POS);
@@ -3182,15 +3158,16 @@ parallelize_loops (bool oacc_kernels_p)
   struct obstack parloop_obstack;
   HOST_WIDE_INT estimated;
   source_location loop_loc;
-  basic_block region_entry = NULL;
 
   /* Do not parallelize loops in the functions created by parallelization.  */
-  if (parallelized_function_p (cfun->decl))
+  if (!oacc_kernels_p
+      && parallelized_function_p (cfun->decl))
     return false;
 
   /* Do not parallelize loops in offloaded functions.  */
-  if (get_oacc_fn_attrib (cfun->decl) != NULL)
-    return false;
+  if (!oacc_kernels_p
+      && get_oacc_fn_attrib (cfun->decl) != NULL)
+     return false;
 
   if (cfun->has_nonlocal_label)
     return false;
@@ -3231,8 +3208,6 @@ parallelize_loops (bool oacc_kernels_p)
 	    fprintf (dump_file,
 		     "Trying loop %d with header bb %d in oacc kernels region\n",
 		     loop->num, loop->header->index);
-
-	  region_entry = loop_get_oacc_kernels_region_entry (loop);
 	}
 
       if (dump_file && (dump_flags & TDF_DETAILS))
@@ -3309,7 +3284,7 @@ parallelize_loops (bool oacc_kernels_p)
 	}
 
       if (oacc_kernels_p
-	  && !oacc_entry_exit_ok (loop, region_entry, &reduction_list))
+	&& !oacc_entry_exit_ok (loop, &reduction_list))
 	{
 	  if (dump_file)
 	    fprintf (dump_file, "entry/exit not ok: FAILED\n");
@@ -3332,7 +3307,7 @@ parallelize_loops (bool oacc_kernels_p)
       }
 
       gen_parallel_loop (loop, &reduction_list,
-			 n_threads, &niter_desc, region_entry, oacc_kernels_p);
+			 n_threads, &niter_desc, oacc_kernels_p);
     }
 
   obstack_free (&parloop_obstack, NULL);
@@ -3437,7 +3412,11 @@ pass_parallelize_loops_oacc_kernels::execute (function *fun)
     return 0;
 
   if (parallelize_loops (true))
-    return TODO_update_ssa;
+    {
+      fun->curr_properties &= ~(PROP_gimple_eomp);
+
+      return TODO_update_ssa;
+    }
 
   return 0;
 }
-- 
1.9.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [gomp4, committed, 6/9] Update goacc kernels C testcases
  2015-11-05 10:17 [gomp4, committed] expand oacc kernels region at same time as oacc parallel region Tom de Vries
                   ` (4 preceding siblings ...)
  2015-11-05 10:57 ` [gomp4, committed, 5/9] Handle oacc function in parloops Tom de Vries
@ 2015-11-05 10:59 ` Tom de Vries
  2015-11-05 11:01 ` [gomp4, committed, 7/9] Update goacc kernels Fortran testcases Tom de Vries
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 10+ messages in thread
From: Tom de Vries @ 2015-11-05 10:59 UTC (permalink / raw)
  To: gcc-patches; +Cc: Jakub Jelinek

[-- Attachment #1: Type: text/plain, Size: 1377 bytes --]

On 05/11/15 11:16, Tom de Vries wrote:
> Hi,
>
> now that we have committed -foffload-alias in gomp-4_0-branch (
> https://gcc.gnu.org/ml/gcc-patches/2015-11/msg00214.html ), we no longer
> need the kernels region to be a part of the original function when doing
> alias analysis.
>
> So, we no longer have the need to postpone splitting off the kernels
> region into a seperate function until after alias analysis, but we can
> do this at the same time as when we expand the parallel region.
>
> The following patch series implements that:
>
>       1    Move expansion of kernels region back to first omp-expand
>       2    Update gate_oacc_kernels to handle oacc function
>       3    Revert "Add skip_stmt parm to pass_dominator::get_sese ()"
>       4    Revert "Add pass_dominator::sese_mode_p ()"
>       5    Handle oacc function in parloops
>       6    Update goacc kernels C testcases
>       7    Update goacc kernels Fortran testcases
>       8    Release_defs in expand_omp_atomic_fetch_op
>       9    Remove BUILT_IN_GOACC_KERNELS_INTERNAL
>
> [ The patch series is broken up into logical bits, but intended as
> single commit. Various things in kernels support will be broken in
> intermediate stages. ]
>
> Committed to gomp-4_0-branch.
>
> I'll post the patches in reply to this message.
>

This patch updates the goacc kernels C testcases.

Thanks,
- Tom


[-- Attachment #2: 0006-Update-goacc-kernels-C-testcases.patch --]
[-- Type: text/x-patch, Size: 22435 bytes --]

Update goacc kernels C testcases

2015-11-04  Tom de Vries  <tom@codesourcery.com>

	* c-c++-common/goacc/kernels-acc-loop-reduction.c: Scan for oacc
	function instead of oacc_parallel.
	* c-c++-common/goacc/kernels-acc-loop-smaller-equal.c: Same.
	* c-c++-common/goacc/kernels-counter-vars-function-scope.c: Same.
	* c-c++-common/goacc/kernels-double-reduction.c: Same.
	* c-c++-common/goacc/kernels-independent.c: Same.
	* c-c++-common/goacc/kernels-loop-2-acc-loop.c:  Same.
	* c-c++-common/goacc/kernels-loop-2.c:  Same.
	* c-c++-common/goacc/kernels-loop-3-acc-loop.c: Same.
	* c-c++-common/goacc/kernels-loop-3.c: Same.
	* c-c++-common/goacc/kernels-loop-acc-loop.c: Same.
	* c-c++-common/goacc/kernels-loop-data-2.c: Same.
	* c-c++-common/goacc/kernels-loop-data-enter-exit-2.c: Same.
	* c-c++-common/goacc/kernels-loop-data-enter-exit.c: Same.
	* c-c++-common/goacc/kernels-loop-data-update.c: Same.
	* c-c++-common/goacc/kernels-loop-data.c: Same.
	* c-c++-common/goacc/kernels-loop-g.c: Same.
	* c-c++-common/goacc/kernels-loop-mod-not-zero.c: Same.
	* c-c++-common/goacc/kernels-loop-n-acc-loop.c: Same.
	* c-c++-common/goacc/kernels-loop-n.c: Same.
	* c-c++-common/goacc/kernels-loop-nest-independent.c: Same.
	* c-c++-common/goacc/kernels-loop-nest.c: Same.
	* c-c++-common/goacc/kernels-loop.c: Same.
	* c-c++-common/goacc/kernels-one-counter-var.c: Same.
	* c-c++-common/goacc/kernels-parallel-loop-data-enter-exit.c: Same.
	* c-c++-common/goacc/kernels-reduction.c: Same.
	* c-c++-common/goacc/kernels-counter-var-redundant-load.c: Same.  Update
	scan.
---
 gcc/testsuite/c-c++-common/goacc/kernels-acc-loop-reduction.c      | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-acc-loop-smaller-equal.c  | 2 +-
 .../c-c++-common/goacc/kernels-counter-var-redundant-load.c        | 7 +++----
 .../c-c++-common/goacc/kernels-counter-vars-function-scope.c       | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-double-reduction.c        | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-independent.c             | 3 ++-
 gcc/testsuite/c-c++-common/goacc/kernels-loop-2-acc-loop.c         | 3 ++-
 gcc/testsuite/c-c++-common/goacc/kernels-loop-2.c                  | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-loop-3-acc-loop.c         | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-loop-3.c                  | 3 ++-
 gcc/testsuite/c-c++-common/goacc/kernels-loop-acc-loop.c           | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-loop-data-2.c             | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-loop-data-enter-exit-2.c  | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-loop-data-enter-exit.c    | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-loop-data-update.c        | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-loop-data.c               | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-loop-g.c                  | 3 ++-
 gcc/testsuite/c-c++-common/goacc/kernels-loop-mod-not-zero.c       | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-loop-n-acc-loop.c         | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-loop-n.c                  | 3 ++-
 gcc/testsuite/c-c++-common/goacc/kernels-loop-nest-independent.c   | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-loop-nest.c               | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-loop.c                    | 3 ++-
 gcc/testsuite/c-c++-common/goacc/kernels-one-counter-var.c         | 3 ++-
 .../c-c++-common/goacc/kernels-parallel-loop-data-enter-exit.c     | 2 +-
 gcc/testsuite/c-c++-common/goacc/kernels-reduction.c               | 3 ++-
 26 files changed, 36 insertions(+), 29 deletions(-)

diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-acc-loop-reduction.c b/gcc/testsuite/c-c++-common/goacc/kernels-acc-loop-reduction.c
index f3aa4e7..dcc5891 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-acc-loop-reduction.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-acc-loop-reduction.c
@@ -22,4 +22,4 @@ foo (int n, unsigned int *a)
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*foo.*\\._omp_fn\\.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-acc-loop-smaller-equal.c b/gcc/testsuite/c-c++-common/goacc/kernels-acc-loop-smaller-equal.c
index ba7414a..c05c694 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-acc-loop-smaller-equal.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-acc-loop-smaller-equal.c
@@ -22,4 +22,4 @@ foo (int n)
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*foo.*\\._omp_fn\\.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-counter-var-redundant-load.c b/gcc/testsuite/c-c++-common/goacc/kernels-counter-var-redundant-load.c
index bf59838..ad101dd 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-counter-var-redundant-load.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-counter-var-redundant-load.c
@@ -29,9 +29,8 @@ foo (unsigned int *c)
    _15 = .omp_data_i_10->c;
    c.1_16 = *_15;
 
-   Check that there are two loads from anonymous ssa-names, which we assume to
+   Check that there is one load from anonymous ssa-name, which we assume to
    be:
-   - the one to read c
-   - the one to read ii after the kernels region.  */
+   - the one to read c.  */
 
-/* { dg-final { scan-tree-dump-times "(?n)\\*_\[0-9\]\[0-9\]*;$" 2 "dom_oacc_kernels3" } } */
+/* { dg-final { scan-tree-dump-times "(?n)\\*_\[0-9\]\[0-9\]*;$" 1 "dom_oacc_kernels3" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-counter-vars-function-scope.c b/gcc/testsuite/c-c++-common/goacc/kernels-counter-vars-function-scope.c
index 38b677d..650fb8ca 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-counter-vars-function-scope.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-counter-vars-function-scope.c
@@ -51,4 +51,4 @@ main (void)
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-double-reduction.c b/gcc/testsuite/c-c++-common/goacc/kernels-double-reduction.c
index 81467a9..da20f34 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-double-reduction.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-double-reduction.c
@@ -34,4 +34,4 @@ foo (void)
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*foo.*._omp_fn.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-independent.c b/gcc/testsuite/c-c++-common/goacc/kernels-independent.c
index 2f086b6..1f36323 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-independent.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-independent.c
@@ -37,4 +37,5 @@ foo (unsigned int *a,  unsigned int *b,  unsigned int *c)
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*foo.*\\._omp_fn\\.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
+
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-2-acc-loop.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-2-acc-loop.c
index c041ca5..6a4fb1f 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-2-acc-loop.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-2-acc-loop.c
@@ -17,4 +17,5 @@
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.1" 1 "optimized" } } */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.2" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 3 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 3 "parloops_oacc_kernels" } } */
+
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-2.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-2.c
index d3f8805..514591e 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-2.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-2.c
@@ -67,4 +67,4 @@ main (void)
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.1" 1 "optimized" } } */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.2" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 3 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 3 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-3-acc-loop.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-3-acc-loop.c
index 7e748c0..a9e81ee 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-3-acc-loop.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-3-acc-loop.c
@@ -14,4 +14,4 @@
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-3.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-3.c
index 2620075..790add9 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-3.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-3.c
@@ -45,4 +45,5 @@ main (void)
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
+
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-acc-loop.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-acc-loop.c
index 5b4e860..516598f 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-acc-loop.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-acc-loop.c
@@ -14,4 +14,4 @@
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-data-2.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-data-2.c
index 5dfe9bd..095ed6c 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-data-2.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-data-2.c
@@ -67,4 +67,4 @@ main (void)
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.1" 1 "optimized" } } */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.2" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 3 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 3 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-data-enter-exit-2.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-data-enter-exit-2.c
index 148094a..9efffac 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-data-enter-exit-2.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-data-enter-exit-2.c
@@ -65,4 +65,4 @@ main (void)
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.1" 1 "optimized" } } */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.2" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 3 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 3 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-data-enter-exit.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-data-enter-exit.c
index 79578f1..2da20b4 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-data-enter-exit.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-data-enter-exit.c
@@ -62,4 +62,4 @@ main (void)
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.1" 1 "optimized" } } */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.2" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 3 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 3 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-data-update.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-data-update.c
index bcd2c60..09b63e5 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-data-update.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-data-update.c
@@ -62,4 +62,4 @@ main (void)
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.1" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 2 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 2 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-data.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-data.c
index 92258c8..437fd73 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-data.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-data.c
@@ -61,4 +61,4 @@ main (void)
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.1" 1 "optimized" } } */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.2" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 3 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 3 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-g.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-g.c
index 4171945..27e23f8 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-g.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-g.c
@@ -13,4 +13,5 @@
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
+
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-mod-not-zero.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-mod-not-zero.c
index c0cce6c..940341d 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-mod-not-zero.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-mod-not-zero.c
@@ -49,4 +49,4 @@ main (void)
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-n-acc-loop.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-n-acc-loop.c
index 5e4a993..64e59a2 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-n-acc-loop.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-n-acc-loop.c
@@ -14,4 +14,4 @@
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*foo.*._omp_fn.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-n.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-n.c
index 411959e..73c6142 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-n.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-n.c
@@ -52,4 +52,5 @@ foo (COUNTERTYPE n)
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*foo.*._omp_fn.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
+
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-nest-independent.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-nest-independent.c
index 4486b6a..1996865 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-nest-independent.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-nest-independent.c
@@ -37,4 +37,4 @@ main (void)
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop-nest.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop-nest.c
index e8eebaa..d2aeda6 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop-nest.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop-nest.c
@@ -36,4 +36,4 @@ main (void)
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-loop.c b/gcc/testsuite/c-c++-common/goacc/kernels-loop.c
index ecc5aef..925a84e 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-loop.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-loop.c
@@ -52,4 +52,5 @@ main (void)
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
+
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-one-counter-var.c b/gcc/testsuite/c-c++-common/goacc/kernels-one-counter-var.c
index 9e315c6..b000a8c 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-one-counter-var.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-one-counter-var.c
@@ -50,4 +50,5 @@ main (void)
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
+
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-parallel-loop-data-enter-exit.c b/gcc/testsuite/c-c++-common/goacc/kernels-parallel-loop-data-enter-exit.c
index 1657c90..31b06bd 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-parallel-loop-data-enter-exit.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-parallel-loop-data-enter-exit.c
@@ -63,4 +63,4 @@ main (void)
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.1" 1 "optimized" } } */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*main._omp_fn.2" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 2 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 2 "parloops_oacc_kernels" } } */
diff --git a/gcc/testsuite/c-c++-common/goacc/kernels-reduction.c b/gcc/testsuite/c-c++-common/goacc/kernels-reduction.c
index 155f48b..6a0b7a2 100644
--- a/gcc/testsuite/c-c++-common/goacc/kernels-reduction.c
+++ b/gcc/testsuite/c-c++-common/goacc/kernels-reduction.c
@@ -32,4 +32,5 @@ foo (void)
 /* Check that the loop has been split off into a function.  */
 /* { dg-final { scan-tree-dump-times "(?n);; Function .*foo.*._omp_fn.0" 1 "optimized" } } */
 
-/* { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } } */
+/* { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } } */
+
-- 
1.9.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [gomp4, committed, 7/9] Update goacc kernels Fortran testcases
  2015-11-05 10:17 [gomp4, committed] expand oacc kernels region at same time as oacc parallel region Tom de Vries
                   ` (5 preceding siblings ...)
  2015-11-05 10:59 ` [gomp4, committed, 6/9] Update goacc kernels C testcases Tom de Vries
@ 2015-11-05 11:01 ` Tom de Vries
  2015-11-05 11:26 ` [gomp4, committed, 8/9] Release_defs in expand_omp_atomic_fetch_op Tom de Vries
  2015-11-05 11:30 ` [gomp4, committed, 9/9] Remove BUILT_IN_GOACC_KERNELS_INTERNAL Tom de Vries
  8 siblings, 0 replies; 10+ messages in thread
From: Tom de Vries @ 2015-11-05 11:01 UTC (permalink / raw)
  To: gcc-patches; +Cc: Jakub Jelinek

[-- Attachment #1: Type: text/plain, Size: 1380 bytes --]

On 05/11/15 11:16, Tom de Vries wrote:
> Hi,
>
> now that we have committed -foffload-alias in gomp-4_0-branch (
> https://gcc.gnu.org/ml/gcc-patches/2015-11/msg00214.html ), we no longer
> need the kernels region to be a part of the original function when doing
> alias analysis.
>
> So, we no longer have the need to postpone splitting off the kernels
> region into a seperate function until after alias analysis, but we can
> do this at the same time as when we expand the parallel region.
>
> The following patch series implements that:
>
>       1    Move expansion of kernels region back to first omp-expand
>       2    Update gate_oacc_kernels to handle oacc function
>       3    Revert "Add skip_stmt parm to pass_dominator::get_sese ()"
>       4    Revert "Add pass_dominator::sese_mode_p ()"
>       5    Handle oacc function in parloops
>       6    Update goacc kernels C testcases
>       7    Update goacc kernels Fortran testcases
>       8    Release_defs in expand_omp_atomic_fetch_op
>       9    Remove BUILT_IN_GOACC_KERNELS_INTERNAL
>
> [ The patch series is broken up into logical bits, but intended as
> single commit. Various things in kernels support will be broken in
> intermediate stages. ]
>
> Committed to gomp-4_0-branch.
>
> I'll post the patches in reply to this message.

This patch updates the goacc kernels Fortran testcases

Thanks,
- Tom


[-- Attachment #2: 0007-Update-goacc-kernels-Fortran-testcases.patch --]
[-- Type: text/x-patch, Size: 7933 bytes --]

Update goacc kernels Fortran testcases

2015-11-04  Tom de Vries  <tom@codesourcery.com>

	* gfortran.dg/goacc/kernels-loop-2.f95: Scan for oacc function instead
	of oacc_parallel.
	* gfortran.dg/goacc/kernels-loop-data-2.f95:
	* gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f95:
	* gfortran.dg/goacc/kernels-loop-data-enter-exit.f95:
	* gfortran.dg/goacc/kernels-loop-data-update.f95:
	* gfortran.dg/goacc/kernels-loop-data.f95:
	* gfortran.dg/goacc/kernels-loop-nest-independent.f95:
	* gfortran.dg/goacc/kernels-loop.f95:
	* gfortran.dg/goacc/kernels-parallel-loop-data-enter-exit.f95:
---
 gcc/testsuite/gfortran.dg/goacc/kernels-loop-2.f95                      | 2 +-
 gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-2.f95                 | 2 +-
 gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f95      | 2 +-
 gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit.f95        | 2 +-
 gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-update.f95            | 2 +-
 gcc/testsuite/gfortran.dg/goacc/kernels-loop-data.f95                   | 2 +-
 gcc/testsuite/gfortran.dg/goacc/kernels-loop-nest-independent.f95       | 2 +-
 gcc/testsuite/gfortran.dg/goacc/kernels-loop.f95                        | 2 +-
 .../gfortran.dg/goacc/kernels-parallel-loop-data-enter-exit.f95         | 2 +-
 9 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-2.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-2.f95
index ccfc3ae..7fd6d4e 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-2.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-2.f95
@@ -42,4 +42,4 @@ end program main
 ! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.1 " 1 "optimized" } }
 ! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.2 " 1 "optimized" } }
 
-! { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 3 "parloops_oacc_kernels" } }
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 3 "parloops_oacc_kernels" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-2.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-2.f95
index 2f46c6d..f788f67 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-2.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-2.f95
@@ -48,4 +48,4 @@ end program main
 ! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.1 " 1 "optimized" } }
 ! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.2 " 1 "optimized" } }
 
-! { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 3 "parloops_oacc_kernels" } }
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 3 "parloops_oacc_kernels" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f95
index 34b4a06..3599052 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit-2.f95
@@ -48,4 +48,4 @@ end program main
 ! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.1 " 1 "optimized" } }
 ! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.2 " 1 "optimized" } }
 
-! { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 3 "parloops_oacc_kernels" } }
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 3 "parloops_oacc_kernels" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit.f95
index 06c9f90..562422e 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-enter-exit.f95
@@ -46,4 +46,4 @@ end program main
 ! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.1 " 1 "optimized" } }
 ! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.2 " 1 "optimized" } }
 
-! { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 3 "parloops_oacc_kernels" } }
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 3 "parloops_oacc_kernels" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-update.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-update.f95
index fda393d..ed18fe1 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-update.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data-update.f95
@@ -45,4 +45,4 @@ end program main
 ! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.0 " 1 "optimized" } }
 ! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.1 " 1 "optimized" } }
 
-! { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 2 "parloops_oacc_kernels" } }
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 2 "parloops_oacc_kernels" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data.f95
index 6715c16..177aa64 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-data.f95
@@ -46,4 +46,4 @@ end program main
 ! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.1 " 1 "optimized" } }
 ! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.2 " 1 "optimized" } }
 
-! { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 3 "parloops_oacc_kernels" } }
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 3 "parloops_oacc_kernels" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-nest-independent.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-nest-independent.f95
index 436048e..af151ca 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-loop-nest-independent.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop-nest-independent.f95
@@ -38,4 +38,4 @@ end program main
 ! Check that the loop has been split off into a function.
 ! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.0 " 1 "optimized" } }
 
-! { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } }
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-loop.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-loop.f95
index c86d89d..c9364dd 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-loop.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-loop.f95
@@ -36,4 +36,4 @@ end program main
 ! Check that the loop has been split off into a function.
 ! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.0 " 1 "optimized" } }
 
-! { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 1 "parloops_oacc_kernels" } }
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 1 "parloops_oacc_kernels" } }
diff --git a/gcc/testsuite/gfortran.dg/goacc/kernels-parallel-loop-data-enter-exit.f95 b/gcc/testsuite/gfortran.dg/goacc/kernels-parallel-loop-data-enter-exit.f95
index b993966..d805938 100644
--- a/gcc/testsuite/gfortran.dg/goacc/kernels-parallel-loop-data-enter-exit.f95
+++ b/gcc/testsuite/gfortran.dg/goacc/kernels-parallel-loop-data-enter-exit.f95
@@ -47,4 +47,4 @@ end program main
 ! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.1 " 1 "optimized" } }
 ! { dg-final { scan-tree-dump-times "(?n);; Function MAIN__._omp_fn.2 " 1 "optimized" } }
 
-! { dg-final { scan-tree-dump-times "(?n)pragma omp target oacc_parallel.*num_gangs\\(32\\)" 2 "parloops_oacc_kernels" } }
+! { dg-final { scan-tree-dump-times "(?n)oacc function \\(32," 2 "parloops_oacc_kernels" } }
-- 
1.9.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [gomp4, committed, 8/9] Release_defs in expand_omp_atomic_fetch_op
  2015-11-05 10:17 [gomp4, committed] expand oacc kernels region at same time as oacc parallel region Tom de Vries
                   ` (6 preceding siblings ...)
  2015-11-05 11:01 ` [gomp4, committed, 7/9] Update goacc kernels Fortran testcases Tom de Vries
@ 2015-11-05 11:26 ` Tom de Vries
  2015-11-05 11:30 ` [gomp4, committed, 9/9] Remove BUILT_IN_GOACC_KERNELS_INTERNAL Tom de Vries
  8 siblings, 0 replies; 10+ messages in thread
From: Tom de Vries @ 2015-11-05 11:26 UTC (permalink / raw)
  To: gcc-patches; +Cc: Jakub Jelinek

[-- Attachment #1: Type: text/plain, Size: 2493 bytes --]

On 05/11/15 11:16, Tom de Vries wrote:
> Hi,
>
> now that we have committed -foffload-alias in gomp-4_0-branch (
> https://gcc.gnu.org/ml/gcc-patches/2015-11/msg00214.html ), we no longer
> need the kernels region to be a part of the original function when doing
> alias analysis.
>
> So, we no longer have the need to postpone splitting off the kernels
> region into a seperate function until after alias analysis, but we can
> do this at the same time as when we expand the parallel region.
>
> The following patch series implements that:
>
>       1    Move expansion of kernels region back to first omp-expand
>       2    Update gate_oacc_kernels to handle oacc function
>       3    Revert "Add skip_stmt parm to pass_dominator::get_sese ()"
>       4    Revert "Add pass_dominator::sese_mode_p ()"
>       5    Handle oacc function in parloops
>       6    Update goacc kernels C testcases
>       7    Update goacc kernels Fortran testcases
>       8    Release_defs in expand_omp_atomic_fetch_op
>       9    Remove BUILT_IN_GOACC_KERNELS_INTERNAL
>
> [ The patch series is broken up into logical bits, but intended as
> single commit. Various things in kernels support will be broken in
> intermediate stages. ]
>
> Committed to gomp-4_0-branch.
>
> I'll post the patches in reply to this message.
>

The parloops pass constructs an atomic update:
...
   #pragma omp atomic_load
   D.1839_59 = *&.paral_data_load.33_51->reduction.23;
   D.1840_60 = sum.27_56 + D.1839_59;
   #pragma omp atomic_store (D.1840_60);
...

The expand_omp_atomic_fetch_op function removes the update statement but 
doesn't release the ssa-name D.1840_60 defined by the update statement.

This causes an error when running ccp in lto1. We run into trouble here 
for this unreleased ssa-name, because SSA_NAME_VAR (var) == NULL_TREE 
and TREE_CODE (NULL_TREE) causes a sigsegv:
...
get_default_value (tree var)
{
   ccp_prop_value_t val = { UNINITIALIZED, NULL_TREE, 0 };
   gimple *stmt;

   stmt = SSA_NAME_DEF_STMT (var);

   if (gimple_nop_p (stmt))
     {
       /* Variables defined by an empty statement are those used
	 before being initialized.  If VAR is a local variable, we
	 can assume initially that it is UNDEFINED, otherwise we must
	 consider it VARYING.  */
       if (!virtual_operand_p (var)
	  && TREE_CODE (SSA_NAME_VAR (var)) == VAR_DECL)
	val.lattice_val = UNDEFINED;
...

This patch fixes the problem by releasing the ssa-name in 
expand_omp_atomic_fetch_op function.

Thanks,
- Tom

[-- Attachment #2: 0008-Release_defs-in-expand_omp_atomic_fetch_op.patch --]
[-- Type: text/x-patch, Size: 815 bytes --]

Release_defs in expand_omp_atomic_fetch_op

2015-11-04  Tom de Vries  <tom@codesourcery.com>

	* omp-low.c (expand_omp_atomic_fetch_op):  Release defs of update stmt.
---
 gcc/omp-low.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index 58cb959..84accd9 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -11914,10 +11914,14 @@ expand_omp_atomic_fetch_op (basic_block load_bb,
   gcc_assert (gimple_code (gsi_stmt (gsi)) == GIMPLE_OMP_ATOMIC_STORE);
   gsi_remove (&gsi, true);
   gsi = gsi_last_bb (store_bb);
+  stmt = gsi_stmt (gsi);
   gsi_remove (&gsi, true);
 
   if (gimple_in_ssa_p (cfun))
-    update_ssa (TODO_update_ssa_no_phi);
+    {
+      release_defs (stmt);
+      update_ssa (TODO_update_ssa_no_phi);
+    }
 
   return true;
 }
-- 
1.9.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

* [gomp4, committed, 9/9] Remove BUILT_IN_GOACC_KERNELS_INTERNAL
  2015-11-05 10:17 [gomp4, committed] expand oacc kernels region at same time as oacc parallel region Tom de Vries
                   ` (7 preceding siblings ...)
  2015-11-05 11:26 ` [gomp4, committed, 8/9] Release_defs in expand_omp_atomic_fetch_op Tom de Vries
@ 2015-11-05 11:30 ` Tom de Vries
  8 siblings, 0 replies; 10+ messages in thread
From: Tom de Vries @ 2015-11-05 11:30 UTC (permalink / raw)
  To: gcc-patches; +Cc: Jakub Jelinek

[-- Attachment #1: Type: text/plain, Size: 1407 bytes --]

On 05/11/15 11:16, Tom de Vries wrote:
> Hi,
>
> now that we have committed -foffload-alias in gomp-4_0-branch (
> https://gcc.gnu.org/ml/gcc-patches/2015-11/msg00214.html ), we no longer
> need the kernels region to be a part of the original function when doing
> alias analysis.
>
> So, we no longer have the need to postpone splitting off the kernels
> region into a seperate function until after alias analysis, but we can
> do this at the same time as when we expand the parallel region.
>
> The following patch series implements that:
>
>       1    Move expansion of kernels region back to first omp-expand
>       2    Update gate_oacc_kernels to handle oacc function
>       3    Revert "Add skip_stmt parm to pass_dominator::get_sese ()"
>       4    Revert "Add pass_dominator::sese_mode_p ()"
>       5    Handle oacc function in parloops
>       6    Update goacc kernels C testcases
>       7    Update goacc kernels Fortran testcases
>       8    Release_defs in expand_omp_atomic_fetch_op
>       9    Remove BUILT_IN_GOACC_KERNELS_INTERNAL
>
> [ The patch series is broken up into logical bits, but intended as
> single commit. Various things in kernels support will be broken in
> intermediate stages. ]
>
> Committed to gomp-4_0-branch.
>
> I'll post the patches in reply to this message.

This patch removes the no longer needed BUILT_IN_GOACC_KERNELS_INTERNAL 
builtin.

Thanks,
- Tom


[-- Attachment #2: 0009-Remove-BUILT_IN_GOACC_KERNELS_INTERNAL.patch --]
[-- Type: text/x-patch, Size: 1509 bytes --]

Remove BUILT_IN_GOACC_KERNELS_INTERNAL

2015-11-04  Tom de Vries  <tom@codesourcery.com>

	* omp-builtins.def (BUILT_IN_GOACC_KERNELS_INTERNAL): Remove
	DEF_GOACC_BUILTIN_FNSPEC.
	* omp-low.c (expand_omp_target): Remove handling of
	BUILT_IN_GOACC_KERNELS_INTERNAL.
---
 gcc/omp-builtins.def | 5 -----
 gcc/omp-low.c        | 1 -
 2 files changed, 6 deletions(-)

diff --git a/gcc/omp-builtins.def b/gcc/omp-builtins.def
index 0478eaf..6908f94 100644
--- a/gcc/omp-builtins.def
+++ b/gcc/omp-builtins.def
@@ -43,11 +43,6 @@ DEF_GOACC_BUILTIN_FNSPEC (BUILT_IN_GOACC_ENTER_EXIT_DATA,
 			  BT_FN_VOID_INT_SIZE_PTR_PTR_PTR_INT_INT_VAR,
 			  ATTR_FNSPEC_DOT_DOT_DOT_r_r_r_NOTHROW_LIST,
 			  ATTR_NOTHROW_LIST, "...rrr")
-DEF_GOACC_BUILTIN_FNSPEC (BUILT_IN_GOACC_KERNELS_INTERNAL,
-			  "GOACC_kernels_internal",
-			  BT_FN_VOID_INT_OMPFN_SIZE_PTR_PTR_PTR_VAR,
-			  ATTR_FNSPEC_DOT_DOT_DOT_r_r_r_NOTHROW_LIST,
-			  ATTR_NOTHROW_LIST, "...rrr")
 DEF_GOACC_BUILTIN (BUILT_IN_GOACC_PARALLEL, "GOACC_parallel_keyed",
 		   BT_FN_VOID_INT_OMPFN_SIZE_PTR_PTR_PTR_VAR,
 		   ATTR_NOTHROW_LIST)
diff --git a/gcc/omp-low.c b/gcc/omp-low.c
index 84accd9..643d017 100644
--- a/gcc/omp-low.c
+++ b/gcc/omp-low.c
@@ -12994,7 +12994,6 @@ expand_omp_target (struct omp_region *region)
 	depend = build_int_cst (ptr_type_node, 0);
       args.quick_push (depend);
       break;
-    case BUILT_IN_GOACC_KERNELS_INTERNAL:
     case BUILT_IN_GOACC_PARALLEL:
       {
 	set_oacc_fn_attrib (child_fn, clauses, &args);
-- 
1.9.1


^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2015-11-05 11:30 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-11-05 10:17 [gomp4, committed] expand oacc kernels region at same time as oacc parallel region Tom de Vries
2015-11-05 10:33 ` [gomp4, committed, 1/9] Move expansion of kernels region back to first omp-expand Tom de Vries
2015-11-05 10:40 ` [gomp4, committed, 2/9] Update gate_oacc_kernels to handle oacc function Tom de Vries
2015-11-05 10:46 ` [gomp4, committed, 3/9] Revert "Add skip_stmt parm to pass_dominator::get_sese ()" Tom de Vries
2015-11-05 10:50 ` [gomp4, committed, 4/9] Revert "Add pass_dominator::sese_mode_p ()" Tom de Vries
2015-11-05 10:57 ` [gomp4, committed, 5/9] Handle oacc function in parloops Tom de Vries
2015-11-05 10:59 ` [gomp4, committed, 6/9] Update goacc kernels C testcases Tom de Vries
2015-11-05 11:01 ` [gomp4, committed, 7/9] Update goacc kernels Fortran testcases Tom de Vries
2015-11-05 11:26 ` [gomp4, committed, 8/9] Release_defs in expand_omp_atomic_fetch_op Tom de Vries
2015-11-05 11:30 ` [gomp4, committed, 9/9] Remove BUILT_IN_GOACC_KERNELS_INTERNAL Tom de Vries

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).