target-insns.def (oacc_fork, oacc_join): Define.
authorNathan Sidwell <nathan@codesourcery.com>
Tue, 27 Oct 2015 22:16:19 +0000 (22:16 +0000)
committerNathan Sidwell <nathan@gcc.gnu.org>
Tue, 27 Oct 2015 22:16:19 +0000 (22:16 +0000)
* target-insns.def (oacc_fork, oacc_join): Define.
* target.def (goacc.validate_dims): Adjust doc to avoid warning.
(goacc.fork_join): New GOACC hook.
* targhooks.h (default_goacc_fork_join): Declare.
* omp-low.c (default_goacc_forkjoin): New.
* doc/tm.texi.in (TARGET_GOACC_FORK_JOIN): Add.
* doc/tm.texi: Regenerate.

From-SVN: r229465

gcc/ChangeLog
gcc/doc/tm.texi
gcc/doc/tm.texi.in
gcc/omp-low.c
gcc/target-insns.def
gcc/target.def
gcc/targhooks.h

index c3a8e3b81c970a49359bb811b89dba4ec67e1a3c..5011cafeed84a2c9723d940162eefbe3e479f287 100644 (file)
@@ -1,3 +1,13 @@
+2015-10-27  Nathan Sidwell  <nathan@codesourcery.com>
+
+       * target-insns.def (oacc_fork, oacc_join): Define.
+       * target.def (goacc.validate_dims): Adjust doc to avoid warning.
+       (goacc.fork_join): New GOACC hook.
+       * targhooks.h (default_goacc_fork_join): Declare.
+       * omp-low.c (default_goacc_forkjoin): New.
+       * doc/tm.texi.in (TARGET_GOACC_FORK_JOIN): Add.
+       * doc/tm.texi: Regenerate.
+
 2015-10-27  Nathan Sidwell  <nathan@codesourcery.com>
 
        * omp-low.c (oacc_init_rediction_array): New.
index 606ddb672f8dd6a8d2fcc70aa894f97b39956c1b..4d23c23bc9c486120e13b7c931062de214a18edd 100644 (file)
@@ -5765,7 +5765,7 @@ usable.  In that case, the smaller the number is, the more desirable it is
 to use it.
 @end deftypefn
 
-@deftypefn {Target Hook} bool TARGET_GOACC_VALIDATE_DIMS (tree @var{decl}, int @var{dims[]}, int @var{fn_level})
+@deftypefn {Target Hook} bool TARGET_GOACC_VALIDATE_DIMS (tree @var{decl}, int *@var{dims}, int @var{fn_level})
 This hook should check the launch dimensions provided for an OpenACC
 compute region, or routine.  Defaulted values are represented as -1
 and non-constant values as 0. The @var{fn_level} is negative for the
@@ -5777,6 +5777,14 @@ true, if changes have been made.  You must override this hook to
 provide dimensions larger than 1.
 @end deftypefn
 
+@deftypefn {Target Hook} bool TARGET_GOACC_FORK_JOIN (gcall *@var{call}, const int *@var{dims}, bool @var{is_fork})
+This hook should convert IFN_GOACC_FORK and IFN_GOACC_JOIN function
+calls to target-specific gimple.  It is executed during the
+oacc_device_lower pass.  It should return true, if the functions
+should be deleted.  The default hook returns true, if there are no
+RTL expanders for them.
+@end deftypefn
+
 @node Anchored Addresses
 @section Anchored Addresses
 @cindex anchored addresses
index 93620ebd325cd343b38296212127e0e534790f06..afa00f7cd49eb20ddcccc95c781b6579050d06db 100644 (file)
@@ -4262,6 +4262,8 @@ address;  but often a machine-dependent strategy can generate better code.
 
 @hook TARGET_GOACC_VALIDATE_DIMS
 
+@hook TARGET_GOACC_FORK_JOIN
+
 @node Anchored Addresses
 @section Anchored Addresses
 @cindex anchored addresses
index f06daa1444a00612b174ca31246804917bf89cf3..ea6ccfe99025d559fbaae6f4fcfd1e1ccb88ebc4 100644 (file)
@@ -17642,6 +17642,19 @@ oacc_validate_dims (tree fn, tree attrs, int *dims)
   return fn_level;
 }
 
+/* Default fork/join early expander.  Delete the function calls if
+   there is no RTL expander.  */
+
+bool
+default_goacc_fork_join (gcall *ARG_UNUSED (call),
+                        const int *ARG_UNUSED (dims), bool is_fork)
+{
+  if (is_fork)
+    return targetm.have_oacc_fork ();
+  else
+    return targetm.have_oacc_join ();
+}
+
 /* Main entry point for oacc transformations which run on the device
    compiler after LTO, so we know what the target device is at this
    point (including the host fallback).  */
index d79fdf21db890ab341cddfb7e899dcf8bb816ced..41d488a16f920c88e67518533e55b18a38481fe6 100644 (file)
@@ -64,6 +64,8 @@ DEF_TARGET_INSN (memory_barrier, (void))
 DEF_TARGET_INSN (movstr, (rtx x0, rtx x1, rtx x2))
 DEF_TARGET_INSN (nonlocal_goto, (rtx x0, rtx x1, rtx x2, rtx x3))
 DEF_TARGET_INSN (nonlocal_goto_receiver, (void))
+DEF_TARGET_INSN (oacc_fork, (rtx x0, rtx x1, rtx x2))
+DEF_TARGET_INSN (oacc_join, (rtx x0, rtx x1, rtx x2))
 DEF_TARGET_INSN (prefetch, (rtx x0, rtx x1, rtx x2))
 DEF_TARGET_INSN (probe_stack, (rtx x0))
 DEF_TARGET_INSN (probe_stack_address, (rtx x0))
index b74887d733179ffd9a8bf75ad26d4885e0039e53..bc4b5bd088534f896bb857acf216821b6e9ef87c 100644 (file)
@@ -1655,9 +1655,19 @@ should fill in anything that needs to default to non-unity and verify\n\
 non-defaults.  Diagnostics should be issued as appropriate.  Return\n\
 true, if changes have been made.  You must override this hook to\n\
 provide dimensions larger than 1.",
-bool, (tree decl, int dims[], int fn_level),
+bool, (tree decl, int *dims, int fn_level),
 default_goacc_validate_dims)
 
+DEFHOOK
+(fork_join,
+"This hook should convert IFN_GOACC_FORK and IFN_GOACC_JOIN function\n\
+calls to target-specific gimple.  It is executed during the\n\
+oacc_device_lower pass.  It should return true, if the functions\n\
+should be deleted.  The default hook returns true, if there are no\n\
+RTL expanders for them.",
+bool, (gcall *call, const int *dims, bool is_fork),
+default_goacc_fork_join)
+
 HOOK_VECTOR_END (goacc)
 
 /* Functions relating to vectorization.  */
index e13e0874834ac29fc37dbab228936a895ecf67ac..36715c3893e813a8827c211da352da172ad09c6d 100644 (file)
@@ -110,6 +110,7 @@ extern void default_destroy_cost_data (void *);
 
 /* OpenACC hooks.  */
 extern bool default_goacc_validate_dims (tree, int [], int);
+extern bool default_goacc_fork_join (gcall *, const int [], bool);
 
 /* These are here, and not in hooks.[ch], because not all users of
    hooks.h include tm.h, and thus we don't have CUMULATIVE_ARGS.  */