public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc/devel/omp/gcc-12] [og12] amdgcn: Use FLAT addressing for all functions with pointer arguments
@ 2022-10-14 13:43 Julian Brown
  0 siblings, 0 replies; only message in thread
From: Julian Brown @ 2022-10-14 13:43 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:2bccd60658a168138f49578007cb0508deb4f793

commit 2bccd60658a168138f49578007cb0508deb4f793
Author: Julian Brown <julian@codesourcery.com>
Date:   Fri Oct 14 11:06:07 2022 +0000

    [og12] amdgcn: Use FLAT addressing for all functions with pointer arguments
    
    The GCN backend uses a heuristic to determine whether to use FLAT or
    GLOBAL addressing in a particular (offload) function: namely, if a
    function takes a pointer-to-scalar parameter, it is assumed that the
    pointer may refer to "flat scratch" space, and thus FLAT addressing must
    be used instead of GLOBAL.
    
    I came up with this heuristic initially whilst working on support for
    moving OpenACC gang-private variables into local-data share (scratch)
    memory. The assumption that only scalar variables would be transformed in
    that way turned out to be wrong.  For example, prior to the next patch in
    the series, Fortran compiler-generated temporary structures were treated
    as gang private and moved to LDS space, typically overflowing the region
    allocated for such variables.  That will no longer happen after that
    patch is applied, but there may be other cases of structs moving to LDS
    space now or in the future that this patch may be needed for.
    
    2022-10-14  Julian Brown  <julian@codesourcery.com>
    
    gcc/
            * config/gcn/gcn.cc (gcn_detect_incoming_pointer_arg): Any pointer
            argument forces FLAT addressing mode, not just
            pointer-to-non-aggregate.

Diff:
---
 gcc/ChangeLog.omp     |  6 ++++++
 gcc/config/gcn/gcn.cc | 15 +++++++++------
 2 files changed, 15 insertions(+), 6 deletions(-)

diff --git a/gcc/ChangeLog.omp b/gcc/ChangeLog.omp
index d296eb137e8..ceed4da9799 100644
--- a/gcc/ChangeLog.omp
+++ b/gcc/ChangeLog.omp
@@ -1,3 +1,9 @@
+2022-10-14  Julian Brown  <julian@codesourcery.com>
+
+	* config/gcn/gcn.cc (gcn_detect_incoming_pointer_arg): Any pointer
+	argument forces FLAT addressing mode, not just
+	pointer-to-non-aggregate.
+
 2022-10-12  Andrew Stubbs  <ams@codesourcery.com>
 
 	* config/gcn/gcn.cc (gcn_expand_builtin_1): Change gcn_full_exec_reg
diff --git a/gcc/config/gcn/gcn.cc b/gcc/config/gcn/gcn.cc
index 1f8d8e19971..b01131c0dc2 100644
--- a/gcc/config/gcn/gcn.cc
+++ b/gcc/config/gcn/gcn.cc
@@ -2819,10 +2819,14 @@ gcn_arg_partial_bytes (cumulative_args_t cum_v, const function_arg_info &arg)
   return (NUM_PARM_REGS - cum_num) * regsize;
 }
 
-/* A normal function which takes a pointer argument (to a scalar) may be
-   passed a pointer to LDS space (via a high-bits-set aperture), and that only
-   works with FLAT addressing, not GLOBAL.  Force FLAT addressing if the
-   function has an incoming pointer-to-scalar parameter.  */
+/* A normal function which takes a pointer argument may be passed a pointer to
+   LDS space (via a high-bits-set aperture), and that only works with FLAT
+   addressing, not GLOBAL.  Force FLAT addressing if the function has an
+   incoming pointer parameter.  NOTE: This is a heuristic that works in the
+   offloading case, but in general, a function might read global pointer
+   variables, etc. that may refer to LDS space or other special memory areas
+   not supported by GLOBAL instructions, and then this argument check would not
+   suffice.  */
 
 static void
 gcn_detect_incoming_pointer_arg (tree fndecl)
@@ -2832,8 +2836,7 @@ gcn_detect_incoming_pointer_arg (tree fndecl)
   for (tree arg = TYPE_ARG_TYPES (TREE_TYPE (fndecl));
        arg;
        arg = TREE_CHAIN (arg))
-    if (POINTER_TYPE_P (TREE_VALUE (arg))
-	&& !AGGREGATE_TYPE_P (TREE_TYPE (TREE_VALUE (arg))))
+    if (POINTER_TYPE_P (TREE_VALUE (arg)))
       cfun->machine->use_flat_addressing = true;
 }

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2022-10-14 13:43 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-14 13:43 [gcc/devel/omp/gcc-12] [og12] amdgcn: Use FLAT addressing for all functions with pointer arguments Julian Brown

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).