public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Julian Brown <julian@codesourcery.com>
To: Jakub Jelinek <jakub@redhat.com>
Cc: gcc-patches <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH, OpenMP, C/C++] Handle array reference base-pointers in array sections
Date: Thu, 5 May 2022 12:46:29 +0100	[thread overview]
Message-ID: <20220505124629.10ff0d33@squid.athome> (raw)
In-Reply-To: <YnOQadPHUl+/pWUK@tucnak>

On Thu, 5 May 2022 10:52:57 +0200
Jakub Jelinek via Gcc-patches <gcc-patches@gcc.gnu.org> wrote:

> On Mon, Feb 21, 2022 at 11:18:57PM +0800, Chung-Lin Tang wrote:
> > as encountered in cases where a program constructs its own
> > deep-copying for arrays-of-pointers, e.g:
> > 
> >    #pragma omp target enter data map(to:level->vectors[:N])
> >    for (i = 0; i < N; i++)
> >      #pragma omp target enter data map(to:level->vectors[i][:N])
> > 
> > We need to treat the part of the array reference before the array
> > section as a base-pointer (here 'level->vectors[i]'), providing
> > pointer-attachment behavior.
> > 
> > This patch adds this inside handle_omp_array_sections(), tracing
> > the whole sequence of array dimensions, creating a whole
> > base-pointer reference iteratively using build_array_ref(). The
> > conditions are that each of the "absorbed" dimensions must be
> > length==1, and the final reference must be of pointer-type (so that
> > pointer attachment makes sense).
> > 
> > There's also a little patch in gimplify_scan_omp_clauses(), to make
> > sure the array-ref base-pointer goes down the right path.
> > 
> > This case was encountered when working to make 534.hpgmgfv_t from
> > SPEChpc 2021 properly compile. Tested without regressions on trunk.
> > Okay to go in once stage1 opens?  
> 
> I'm afraid this is going in the wrong direction.  The OpenMP 5.0
> change that:
> "A locator list item is any lvalue expression, including variables,
> or an array section."
> is much more general than just allowing -> in the expressions, there
> can be function calls and many other.  So, the more code like this
> patch we add, the more we'll need to throw away again.  And as it is
> in OpenMP 5.0, we really need to throw it away in the GCC 13 cycle.
> 
> So, what we really need is add OMP_ARRAY_SECTION tree code, some
> parser flag to know that we are inside of an OpenMP clause that
> allows array sections, and just where we normally parse ARRAY_REFs if
> that flag is on also parse array sections and parse the map/to/from
> clauses just as normal expressions.

All the above (at least) has been done as part of the patch series
posted here:

https://gcc.gnu.org/pipermail/gcc-patches/2022-March/591973.html

> At least for the C FE maybe we'll
> need to arrange for less folding to be done because C still folds too
> much stuff prematurely. Then when finishing clauses verify that
> OMP_ARRAY_SECTION trees appear only where we allow them and not
> elsewhere (say foo (1, 2, 3)[:36]
> would be ok if foo returns a pointer, but
> foo (ptr[0:13], 2, 3)
> would not) and then need to differentiate between the cases listed in
> the standard which we handle for each . -> [idx] when starting from a
> var (in such a case I vaguely recall there are rules for pointer
> attachments etc.) or other arbitrary expressions (in that case we
> just evaluate those expressions and e.g. in the foo (1, 2, 3)[:36]
> case basically do tmp = foo (1, 2, 3);
> and mapping of tmp[:36].

...which also changes/refactors quite a lot regarding how lowering
clauses into mapping nodes works (the "address inspector" bits).
"Weird" cases like mapping the return value from functions doesn't
necessarily DTRT yet -- it wasn't entirely clear how that should/could
work, I don't think.

HTH,

Julian

WARNING: multiple messages have this Message-ID
From: Julian Brown <julian@codesourcery.com>
To: gcc-patches@gcc.gnu.org
Cc: gcc-patches <gcc-patches@gcc.gnu.org>
Subject: Re: [PATCH, OpenMP, C/C++] Handle array reference base-pointers in array sections
Date: Thu, 5 May 2022 12:46:29 +0100	[thread overview]
Message-ID: <20220505124629.10ff0d33@squid.athome> (raw)
Message-ID: <20220505114629.5ggKyOKazGTYkg0C0B3_CSpTNMlkIfLCqbPBHhRmTvA@z> (raw)
In-Reply-To: <YnOQadPHUl+/pWUK@tucnak>

On Thu, 5 May 2022 10:52:57 +0200
Jakub Jelinek via Gcc-patches <gcc-patches@gcc.gnu.org> wrote:

> On Mon, Feb 21, 2022 at 11:18:57PM +0800, Chung-Lin Tang wrote:
> > as encountered in cases where a program constructs its own
> > deep-copying for arrays-of-pointers, e.g:
> > 
> >    #pragma omp target enter data map(to:level->vectors[:N])
> >    for (i = 0; i < N; i++)
> >      #pragma omp target enter data map(to:level->vectors[i][:N])
> > 
> > We need to treat the part of the array reference before the array
> > section as a base-pointer (here 'level->vectors[i]'), providing
> > pointer-attachment behavior.
> > 
> > This patch adds this inside handle_omp_array_sections(), tracing
> > the whole sequence of array dimensions, creating a whole
> > base-pointer reference iteratively using build_array_ref(). The
> > conditions are that each of the "absorbed" dimensions must be
> > length==1, and the final reference must be of pointer-type (so that
> > pointer attachment makes sense).
> > 
> > There's also a little patch in gimplify_scan_omp_clauses(), to make
> > sure the array-ref base-pointer goes down the right path.
> > 
> > This case was encountered when working to make 534.hpgmgfv_t from
> > SPEChpc 2021 properly compile. Tested without regressions on trunk.
> > Okay to go in once stage1 opens?  
> 
> I'm afraid this is going in the wrong direction.  The OpenMP 5.0
> change that:
> "A locator list item is any lvalue expression, including variables,
> or an array section."
> is much more general than just allowing -> in the expressions, there
> can be function calls and many other.  So, the more code like this
> patch we add, the more we'll need to throw away again.  And as it is
> in OpenMP 5.0, we really need to throw it away in the GCC 13 cycle.
> 
> So, what we really need is add OMP_ARRAY_SECTION tree code, some
> parser flag to know that we are inside of an OpenMP clause that
> allows array sections, and just where we normally parse ARRAY_REFs if
> that flag is on also parse array sections and parse the map/to/from
> clauses just as normal expressions.

All the above (at least) has been done as part of the patch series
posted here:

https://gcc.gnu.org/pipermail/gcc-patches/2022-March/591973.html

> At least for the C FE maybe we'll
> need to arrange for less folding to be done because C still folds too
> much stuff prematurely. Then when finishing clauses verify that
> OMP_ARRAY_SECTION trees appear only where we allow them and not
> elsewhere (say foo (1, 2, 3)[:36]
> would be ok if foo returns a pointer, but
> foo (ptr[0:13], 2, 3)
> would not) and then need to differentiate between the cases listed in
> the standard which we handle for each . -> [idx] when starting from a
> var (in such a case I vaguely recall there are rules for pointer
> attachments etc.) or other arbitrary expressions (in that case we
> just evaluate those expressions and e.g. in the foo (1, 2, 3)[:36]
> case basically do tmp = foo (1, 2, 3);
> and mapping of tmp[:36].

...which also changes/refactors quite a lot regarding how lowering
clauses into mapping nodes works (the "address inspector" bits).
"Weird" cases like mapping the return value from functions doesn't
necessarily DTRT yet -- it wasn't entirely clear how that should/could
work, I don't think.

HTH,

Julian



  reply	other threads:[~2022-05-05 11:46 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-21 15:18 Chung-Lin Tang
2022-05-05  8:52 ` Jakub Jelinek
2022-05-05 11:46   ` Julian Brown [this message]
2022-05-05 11:46     ` Julian Brown
2022-05-05 12:40     ` Jakub Jelinek
2022-05-05 15:59       ` Julian Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220505124629.10ff0d33@squid.athome \
    --to=julian@codesourcery.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=jakub@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).