This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH 0/3] Compile-time gimple checking, without typedefs
- From: David Malcolm <dmalcolm at redhat dot com>
- To: Jakub Jelinek <jakub at redhat dot com>
- Cc: Jeff Law <law at redhat dot com>, Richard Biener <richard dot guenther at gmail dot com>, GCC Patches <gcc-patches at gcc dot gnu dot org>, Richard Sandiford <rdsandiford at googlemail dot com>, Andrew MacLeod <amacleod at redhat dot com>
- Date: Tue, 06 May 2014 14:58:34 -0400
- Subject: Re: [PATCH 0/3] Compile-time gimple checking, without typedefs
- Authentication-results: sourceware.org; auth=none
- References: <66f4112c-2a2f-4d2b-8f8e-d2011a7982f7 at email dot android dot com> <1399067771-11711-1-git-send-email-dmalcolm at redhat dot com> <CAFiYyc3D9XujxhxZnXYLtMCm2KejoLtKpRagg+hGoGfK0j5sVQ at mail dot gmail dot com> <5367B5E6 dot 7020209 at redhat dot com> <CAFiYyc0cfp-yKwQWi7Tjv=naHJhzJhkD0_nn7uFgonMW7T4EWA at mail dot gmail dot com> <5367EA06 dot 2080704 at redhat dot com> <20140505195349 dot GQ1817 at tucnak dot redhat dot com>
On Mon, 2014-05-05 at 21:53 +0200, Jakub Jelinek wrote:
> On Mon, May 05, 2014 at 01:44:06PM -0600, Jeff Law wrote:
> > On 05/05/14 11:37, Richard Biener wrote:
> > >
> > >Well, I hope that Andrew doesn't do without a namespace (and I still
> > >don't believe in what he tries to achieve without laying proper ground-work
> > >throughout the compiler). With a namespace gimple we can use
> > >gimple::stmt.
> > namespaces, while nice, aren't going to solve all these issues.
> > While I think we can get a good separation between gimple and the
> > rest of the world, I suspect namespaces aren't going to help much
> > with the statement vs expression vs type issues.
> >
> > Ultimately I suspect we're not going to have too many places where
> > we can stick a "using namespace gimple-whatever", but time will
> > tell.
> >
> > >Agreed on that, btw. But switch_ can't be the answer either. Maybe
> > >swidch (similar do klass) or swjdch. Or swtch. I like swtch the best
> > >(similar to stmt).
> > As David pointed out there's several others that map to keywords.
> > I'd rather set a standard here across the project so that we don't
> > have folks using gto for goto, others using goto_, _goto, whatever.
> > While swtch works well, I don't think the other examples work nearly
> > as well. Thus some kind of prefix/suffix seems better to me (though
> > I'm sure my eyes will bleed as a result of looking at those
> > objects).
>
> But the prefix can be as short as e.g. "g" (for gimple), so gtry, ggoto,
> gassign, gcall.
FWIW, I like this: I think it's clear and concise, and I think it avoids
the need for namespaces. (I'd prefer not to have a namespace, due to
gengtype).
Given Richi's preference for the base class being "gimple", that could
give:
Existing New
-------- ---
gimple gimple *
gimple gswitch *
a GIMPLE_SWITCH
gimple gcall *
a GIMPLE_CALL
etc
with the various
gimple_statement_with_FOO
becoming just
gimple_with_FOO
e.g. "gimple_with_memory_ops"
How would you want subclasses for the OpenMP statements to be named?
e.g. replace "gimple_statement_omp" with gomp_" for e.g.
"gomp_for *"
or to "gimple_omp_", giving e.g. "gimple_omp_for *"
with the former (less verbose) approach giving the following names, I
think (showing the class hierarchy):
gimple
| layout: GSS_BASE
| used for 4 codes: GIMPLE_ERROR_MARK
| GIMPLE_NOP
| GIMPLE_OMP_SECTIONS_SWITCH
| GIMPLE_PREDICT
|
+ gimple_with_ops_base
| | (no GSS layout)
| |
| + gimple_with_ops
| | | layout: GSS_WITH_OPS
| | |
| | + gcond
| | | code: GIMPLE_COND
| | |
| | + gdebug
| | | code: GIMPLE_DEBUG
| | |
| | + ggoto
| | | code: GIMPLE_GOTO
| | |
| | + glabel
| | | code: GIMPLE_LABEL
| | |
| | + gswitch
| | code: GIMPLE_SWITCH
| |
| + gimple_with_memory_ops_base
| | layout: GSS_WITH_MEM_OPS_BASE
| |
| + gimple_with_memory_ops
| | | layout: GSS_WITH_MEM_OPS
| | |
| | + gassign
| | | code GIMPLE_ASSIGN
| | |
| | + greturn
| | code GIMPLE_RETURN
| |
| + gcall
| | layout: GSS_CALL, code: GIMPLE_CALL
| |
| + gasm
| | layout: GSS_ASM, code: GIMPLE_ASM
| |
| + gtransaction
| layout: GSS_TRANSACTION, code: GIMPLE_TRANSACTION
|
+ gomp
| | layout: GSS_OMP. Used for code GIMPLE_OMP_SECTION
| |
| + gomp_critical
| | layout: GSS_OMP_CRITICAL, code: GIMPLE_OMP_CRITICAL
| |
| + gomp_for
| | layout: GSS_OMP_FOR, code: GIMPLE_OMP_FOR
| |
| + gomp_parallel_layout
| | | layout: GSS_OMP_PARALLEL_LAYOUT
| | |
| | + gomp_taskreg
| | | |
| | | + gomp_parallel
| | | | code: GIMPLE_OMP_PARALLEL
| | | |
| | | + gomp_task
| | | code: GIMPLE_OMP_TASK
| | |
| | + gomp_target
| | code: GIMPLE_OMP_TARGET
| |
| + gomp_sections
| | layout: GSS_OMP_SECTIONS, code: GIMPLE_OMP_SECTIONS
| |
| + gomp_single_layout
| | layout: GSS_OMP_SINGLE_LAYOUT
| |
| + gomp_single
| | code: GIMPLE_OMP_SINGLE
| |
| + gomp_teams
| code: GIMPLE_OMP_TEAMS
|
+ gbind
| layout: GSS_BIND, code: GIMPLE_BIND
|
+ gcatch
| layout: GSS_CATCH, code: GIMPLE_CATCH
|
+ geh_filter
| layout: GSS_EH_FILTER, code: GIMPLE_EH_FILTER
|
+ geh_else
| layout: GSS_EH_ELSE, code: GIMPLE_EH_ELSE
|
+ geh_mnt
| layout: GSS_EH_MNT, code: GIMPLE_EH_MUST_NOT_THROW
|
+ gphi
| layout: GSS_PHI, code: GIMPLE_PHI
|
+ geh_ctrl
| | layout: GSS_EH_CTRL
| |
| + gresx
| | code: GIMPLE_RESX
| |
| + geh_dispatch
| code: GIMPLE_EH_DISPATCH
|
+ gtry
| layout: GSS_TRY, code: GIMPLE_TRY
|
+ gwce
| layout: GSS_WCE, code: GIMPLE_WITH_CLEANUP_EXPR
|
+ gomp_continue
| layout: GSS_OMP_CONTINUE, code: GIMPLE_OMP_CONTINUE
|
+ gomp_atomic_load
| layout: GSS_OMP_ATOMIC_LOAD, code: GIMPLE_OMP_ATOMIC_LOAD
|
+ gomp_atomic_store_layout
| layout: GSS_OMP_ATOMIC_STORE_LAYOUT,
| code: GIMPLE_OMP_ATOMIC_STORE
|
+ gomp_atomic_store
| code: GIMPLE_OMP_ATOMIC_STORE
|
+ gomp_return
code: GIMPLE_OMP_RETURN
Dave