[PATCH 0/2] Make C front end share the C++ tree representation of loops and switches

Sandra Loosemore sandra@codesourcery.com
Mon Dec 2 06:02:00 GMT 2019


Ping!

On 11/13/19 9:27 AM, Sandra Loosemore wrote:
> This patch series lays some groundwork for the project to redo the
> OpenACC "kernels" region support in GCC, described in Thomas
> Schwinge's recent talk at the GNU Cauldron:
> 
> https://gcc.gnu.org/wiki/cauldron2019talks?action=AttachFile&do=view&target=OpenACC+kernels-cauldron2019.pdf
> 
> Briefly, the larger goal is to make the compiler recognize "for" loops
> that are candidates for parallelization, and treat them as if they
> were annotated with "#pragma acc loop auto".  This is fairly
> straightforward to do on the output of the Fortran and C++ front ends,
> which both produce a high-level parse tree representation of the loop.
> OTOH, the C front end currently lowers loops into a goto form very
> early, making it hard both to recognize "for" loops and to
> differentiate between (valid) structured and (invalid) unstructured
> control flow in the body of the loop.
> 
> So, the immediate goal of this patch sequence is to make the C front
> end produce output using the same high-level tree representation as
> the C++ front end already emits: specifically, to produce FOR_STMT,
> WHILE_STMT, and DO_STMT for loops, BREAK_STMT and CONTINUE_STMT
> instead of gotos, and also SWITCH_STMT instead of SWITCH_EXPR since
> that's mixed up in the handling for "break".  Besides this being
> helpful to OpenACC implementation, there's also some argument to be
> made that sharing more code between the respective C family front ends
> is good from an engineering perspective, etc.
> 
> Part 1 of the patch set moves the definitions and support
> (genericization, pretty-printers, dumpers, etc) for those tree nodes
> out of the cp/ front end and into the common c-family/ code.  Part 2
> hacks up the C front end to emit the now-shared data structures.
> 
> I bootstrapped and regression-tested this on x86_64-linux-gnu.  There
> are a few regressions involving these tests:
> 
> gcc.dg/tree-ssa/pr77445-2.c
> gcc.dg/tree-ssa/ssa-dce-3.c
> gcc.dg/tree-ssa/ssa-dom-thread-7.c
> 
> I looked at these briefly and it seems like the problem here is that
> the output of the C front end after gimplification is different than
> it used to be, since I swapped in the C++ genericization code (it
> lowers to a LOOP_EXPR instead of directly to goto form, then the
> LOOP_EXPR gets lowered during gimplification).  TBH, I don't really
> understand what optimizations these test cases are trying to test, and
> whether the pattern-matching is too fragile, whether the form of the code
> isn't something that actually tests the optimization, or whether the
> optimization is just not working on this input.  So I'm not sure what
> to do about those failures!  :-(  I could change the genericizer to
> emit the same goto form that the C front end formerly emitted instead
> of the C++-style output, but that might just be papering over bugs
> elsewhere.  Any advice on how to proceed here is welcome.  If the
> patches are OK otherwise, maybe just file bugzilla issues for these
> regressions?
> 
> -Sandra
> 
> 
> Sandra Loosemore (2):
>    Move loop and switch tree data structures from cp/ to c-family/.
>    Change C front end to emit structured loop and switch tree nodes.
> 
>   gcc/c-family/c-common.c             |  24 +++
>   gcc/c-family/c-common.def           |  24 +++
>   gcc/c-family/c-common.h             |  53 ++++-
>   gcc/c-family/c-dump.c               |  38 ++++
>   gcc/c-family/c-gimplify.c           | 414 ++++++++++++++++++++++++++++++++++++
>   gcc/c-family/c-pretty-print.c       |  92 +++++++-
>   gcc/c/c-decl.c                      |  18 +-
>   gcc/c/c-lang.h                      |   3 +-
>   gcc/c/c-objc-common.h               |   2 +
>   gcc/c/c-parser.c                    | 125 ++++++-----
>   gcc/c/c-tree.h                      |  21 +-
>   gcc/c/c-typeck.c                    | 227 ++++++--------------
>   gcc/cp/cp-gimplify.c                | 347 ++----------------------------
>   gcc/cp/cp-objcp-common.c            |  13 +-
>   gcc/cp/cp-tree.def                  |  23 --
>   gcc/cp/cp-tree.h                    |  40 ----
>   gcc/cp/cxx-pretty-print.c           |  78 -------
>   gcc/cp/dump.c                       |  31 ---
>   gcc/doc/generic.texi                |  56 +++--
>   gcc/objc/objc-act.c                 |   6 +-
>   gcc/testsuite/gcc.dg/gomp/block-7.c |  12 +-
>   21 files changed, 859 insertions(+), 788 deletions(-)
> 



More information about the Gcc-patches mailing list