This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: [gimplefe] [gsoc16] Gimple Front End Project
- From: Prasad Ghangal <prasad dot ghangal at gmail dot com>
- To: Richard Biener <richard dot guenther at gmail dot com>
- Cc: Prathamesh Kulkarni <prathamesh dot kulkarni at linaro dot org>, Trevor Saunders <tbsaunde at tbsaunde dot org>, Michael Matz <matz at suse dot de>, Manuel LÃpez-IbÃÃez <lopezibanez at gmail dot com>, Diego Novillo <dnovillo at google dot com>, David Malcolm <dmalcolm at redhat dot com>, gcc Mailing List <gcc at gcc dot gnu dot org>, sandeep at gcc dot gnu dot org
- Date: Fri, 25 Mar 2016 15:54:33 +0530
- Subject: Re: [gimplefe] [gsoc16] Gimple Front End Project
- Authentication-results: sourceware.org; auth=none
- References: <1457474387 dot 9813 dot 121 dot camel at redhat dot com> <CAD_=9DTscPNw3v00HiAUh6wE5=YN1x_46vV+4uAaox40DDi3=w at mail dot gmail dot com> <20160309025043 dot GD5343 at ball> <CAESRpQCwWDcTembu1ZRv25zAmi1ZdN4nFZpJWTiO4a4-Xc8AVA at mail dot gmail dot com> <CAFiYyc3N9i6VV8XCXjhz6EMs1g7UPvEYKuT8WP3qoKU5cadySg at mail dot gmail dot com> <alpine dot LSU dot 2 dot 20 dot 1603141821110 dot 20277 at wotan dot suse dot de> <CAFiYyc3z=3CbhChRruWP11+YCRKpESjJEu9rSK=5ScX-6-UMrg at mail dot gmail dot com> <CAAgBjMntYnysJivAqZS_-97Bv6kxnnQNEXTp8xOpPEnMmviv-A at mail dot gmail dot com> <CAFiYyc2q7vhhSsXniE7WJQsxJVH03jG=6+oouZywV2y+ii8mWw at mail dot gmail dot com> <CAE+uiWabyU2U4zAJ1X9T5Fz72c-muABDLqA9GMJnrP4BvqX1FA at mail dot gmail dot com> <20160321033507 dot GB24419 at ball> <CAE+uiWZ0QmWXCyu8Bm9tAT2rMdx3Lg3AQ3mSG9Qcm8GoLsRgtA at mail dot gmail dot com> <CAFiYyc2RdpWfEyH4y2+zLkkgdYd-f=+WbaskLoY_feMF6O9Q7w at mail dot gmail dot com> <CAAgBjM=YBbByQxzxXv5UYqZ7SHu4Ynj5mCU3Rr3+TE1X3bdXYQ at mail dot gmail dot com> <CAFiYyc3SR2nWN30rAfWoy2DujiDPpqGaewZ5_GrQ=Wx-pwJ=tQ at mail dot gmail dot com> <CAE+uiWae7zc_UFkbLBq6jQkOPj8VXaqVpa62ELYLUMX4=2uO5w at mail dot gmail dot com> <CAFiYyc0hqyn5GMaUPYs5mx+PrvesiGDtMRnB14uwpjU+QkKSbA at mail dot gmail dot com> <CAE+uiWbAA_7x0_wsJMz=HkgOMw-=m2dtxuPCuLKtdxmad6HmFw at mail dot gmail dot com> <CAAgBjM=FJh435DjO2wEtpPFBzk++ZjC=jeQ37naMHBX9TEV7DA at mail dot gmail dot com>
Thanks everyone for suggestions,
Here is my updated proposal. I know its too late but can somebody review it?
https://drive.google.com/file/d/0B2S9OoautWxsbVBkWDY3VDNkdGc/view?usp=sharing
On 25 March 2016 at 08:46, Prathamesh Kulkarni
<prathamesh.kulkarni@linaro.org> wrote:
> On 25 March 2016 at 01:15, Prasad Ghangal <prasad.ghangal@gmail.com> wrote:
>> On 24 March 2016 at 19:01, Richard Biener <richard.guenther@gmail.com> wrote:
>>> On Thu, Mar 24, 2016 at 12:27 AM, Prasad Ghangal
>>> <prasad.ghangal@gmail.com> wrote:
>>>> Hi!
>>>>
>>>> I have attached my gsoc proposal, please review it. Let me know if I
>>>> have missed or misunderstood anything
>>>
>>> Please re-word the Abstract, it is really weird to read - I suggest to drop
>>> any notion of RTL or "back end" and somehow mention that unit testing
>>> is why "we want make changes in GIMPLE". Also stopping compilation
>>> isn't in the scope of the project (and while maybe a nice thing to have
>>> to do less work it is not a requirement for unit testing).
>>>
>>> Thus Project Goals are only unit testing (which includes what you call
>>> start/stop compilation).
>>>
>>> During the discussion in the last comments we agreed on re-using the
>>> C frontend for decls and types only and implement a completely separate
>>> parser for the function bodies so the frontend can also emit GIMPLE directly.
>>>
>>> Thus I'd scrap 4.A)/B) and instead write about
>>>
>>> 4.
>>> A) Define GIMPLE syntax
>>> Provide GIMPLE dumps with enough information to parse GIMPLE and
>>> change them according to agreed on GIMPLE syntax
>>
>> Little confused here. Don't we need to change syntax first and then
>> develop grammar to parse it?
> Well the purpose of grammar is to define the syntax.
> We would need to first define a grammar for GIMPLE and then implement
> a (predictive) parser
> that parses GIMPLE input according to our grammar and emits GIMPLE IR.
> contrived eg:
> stmt_list: stmt stmt_list_1
> stmt_list_1: stmt stmt_list_1 | epsilon
> stmt: lvalue_operand '=' assign_stmt
> | 'if' cond_stmt
> assign_stmt: operand | operator operand | operand operator operand
> operand: INT | lvalue_operand
> lvalue_operand: ID
> operator: '+'
>
> As pointed out by Richard, dumps could be modified later to adjust to
> GIMPLE syntax,
> initially you could write test-cases by hand.
>
> Thanks,
> Prathamesh
>>
>>>
>>> B) Add __GIMPLE extension to the C FE and implement a GIMPLE parser
>>>
>>> For the suggested timeline I think that it is important for the "get
>>> basic stuff working"
>>> part to have all pieces of the project prototyped, including the pass manager
>>> support. Otherwise there is no way to fully test part of the implementation.
>>> I'd say modifying the gimple dumps can be done last as you can always write
>>> testcases manually.
>>>
>>> I realize that the student application deadline is tomorrow.
>>>
>>> Richard.
>>>
>>>
>>>
>>>>
>>>> Thanks and Regards,
>>>> Prasad Ghangal
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On 22 March 2016 at 19:23, Richard Biener <richard.guenther@gmail.com> wrote:
>>>>> On Tue, Mar 22, 2016 at 2:45 PM, Prathamesh Kulkarni
>>>>> <prathamesh.kulkarni@linaro.org> wrote:
>>>>>> On 22 March 2016 at 16:26, Richard Biener <richard.guenther@gmail.com> wrote:
>>>>>>> On Tue, Mar 22, 2016 at 12:08 AM, Prasad Ghangal
>>>>>>> <prasad.ghangal@gmail.com> wrote:
>>>>>>>> Hi!
>>>>>>>>
>>>>>>>> How exactly can we achieve start stop compilation on specific pass (ie
>>>>>>>> run single pass on input)?
>>>>>>>>
>>>>>>>> eg. $cgimple -ftree-copyrename foo.c
>>>>>>>>
>>>>>>>> should produce optimization result of -ftree-copyrename pass on foo.c input
>>>>>>>
>>>>>>> You need pass manager support and annotate each function with information
>>>>>>> on what passes should be run (in which order even?). I think for the GSoC
>>>>>>> project specifying a starting pass for each function via the source, like
>>>>>>>
>>>>>>> __GIMPLE (tree-copyrename) void foo (void)
>>>>>>> {
>>>>>>> ...
>>>>>>> }
>>>>>>>
>>>>>>> and hacking the pass manager to honor that is enough.
>>>>>> Um would annotating each function with pass order work for ipa passes too ?
>>>>>
>>>>> There is no single point of execution for an IPA pass so no - you can
>>>>> tag it with
>>>>> one of the umbrella passes I guess. I suppose we'd need some magic "phase"
>>>>> tags for this, like simply "IPA". You then need to enable/disable IPA passes
>>>>> you want to run.
>>>>>
>>>>> Richard.
>>>>>
>>>>>> Thanks,
>>>>>> Prathamesh
>>>>>>>
>>>>>>> Richard.
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On 21 March 2016 at 09:05, Trevor Saunders <tbsaunde@tbsaunde.org> wrote:
>>>>>>>>> On Mon, Mar 21, 2016 at 04:43:35AM +0530, Prasad Ghangal wrote:
>>>>>>>>>> Hi!
>>>>>>>>>>
>>>>>>>>>> Sorry for the late reply.
>>>>>>>>>>
>>>>>>>>>> I was observing gimple dumps and my initial findings are, to parse
>>>>>>>>>> gimple, we have to add support for following components to C FE
>>>>>>>>>>
>>>>>>>>>> *basic blocks
>>>>>>>>>
>>>>>>>>> I'd think you can probably make these enough like C labels that you
>>>>>>>>> don't need to do anything special in the C fe to parse these. Just
>>>>>>>>> removing the < and > gets you pretty close is that it?
>>>>>>>>>
>>>>>>>>>> *gimple labels and goto
>>>>>>>>>
>>>>>>>>> Similar I think.
>>>>>>>>>
>>>>>>>>>> *gimple phi functions
>>>>>>>>>> iftmp_0_1 = PHI (ftmp_0_3, iftmp_0_4)
>>>>>>>>>
>>>>>>>>> yesI think you need to add something here. I think you can do it as a
>>>>>>>>> builtin type function that expects its arguments to be labels or names
>>>>>>>>> of variables.
>>>>>>>>>
>>>>>>>>>> *gimple switch
>>>>>>>>>> switch (a_1) <default: <L0>, case 1: <L1>, case 2: <L2>>
>>>>>>>>>
>>>>>>>>> I'd think we could make this more C like too.
>>>>>>>>>
>>>>>>>>>> *gimple exception handling
>>>>>>>>>
>>>>>>>>> yeah, though note exceptions are lowered pretty quickly so supporting
>>>>>>>>> them with the explicit exception syntax probably isn't particularly
>>>>>>>>> important.
>>>>>>>>>
>>>>>>>>>> *openmp functions like
>>>>>>>>>> main._omp_fn.0 (void * .omp_data_i)
>>>>>>>>>
>>>>>>>>> I'd think you'd want to change the duping of this some to make it easier
>>>>>>>>> to tell from struct.some.member.
>>>>>>>>>
>>>>>>>>>> Please correct me if I am wrong. Also point out if I am missing anything
>>>>>>>>>
>>>>>>>>> I think you might need to do something about variable names?
>>>>>>>>>
>>>>>>>>> Trev
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On 18 March 2016 at 14:53, Richard Biener <richard.guenther@gmail.com> wrote:
>>>>>>>>>> > On Fri, Mar 18, 2016 at 6:55 AM, Prathamesh Kulkarni
>>>>>>>>>> > <prathamesh.kulkarni@linaro.org> wrote:
>>>>>>>>>> >> On 15 March 2016 at 20:46, Richard Biener <richard.guenther@gmail.com> wrote:
>>>>>>>>>> >>> On Mon, Mar 14, 2016 at 7:27 PM, Michael Matz <matz@suse.de> wrote:
>>>>>>>>>> >>>> Hi,
>>>>>>>>>> >>>>
>>>>>>>>>> >>>> On Thu, 10 Mar 2016, Richard Biener wrote:
>>>>>>>>>> >>>>
>>>>>>>>>> >>>>> Then I'd like to be able to re-construct SSA without jumping through
>>>>>>>>>> >>>>> hoops (usually you can get close but if you require copies propagated in
>>>>>>>>>> >>>>> a special way you are basically lost for example).
>>>>>>>>>> >>>>>
>>>>>>>>>> >>>>> Thus my proposal to make the GSoC student attack the unit-testing
>>>>>>>>>> >>>>> problem by doing modifications to the pass manager and "extending" an
>>>>>>>>>> >>>>> existing frontend (C for simplicity).
>>>>>>>>>> >>>>
>>>>>>>>>> >>>> I think it's wrong to try to shoehorn the gimple FE into the C FE. C is
>>>>>>>>>> >>>> fundamentally different from gimple and you'd have to sprinkle
>>>>>>>>>> >>>> gimple_dialect_p() all over the place, and maintaining that while
>>>>>>>>>> >>>> developing future C improvements will turn out to be much work. Some
>>>>>>>>>> >>>> differences of C and gimple:
>>>>>>>>>> >>>>
>>>>>>>>>> >>>> * C has recursive expressions, gimple is n-op stmts, no expressions at all
>>>>>>>>>> >>>> * C has type promotions, gimple is explicit
>>>>>>>>>> >>>> * C has all other kinds of automatic conversion (e.g. pointer decay)
>>>>>>>>>> >>>> * C has scopes, gimple doesn't (well, global and local only), i.e. symbol
>>>>>>>>>> >>>> lookup is much more complicated
>>>>>>>>>> >>>> * C doesn't have exceptions
>>>>>>>>>> >>>> * C doesn't have class types, gimple has
>>>>>>>>>> >>>> * C doesn't have SSA (yes, I'm aware of your suggestions for that)
>>>>>>>>>> >>>> * C doesn't have self-referential types
>>>>>>>>>> >>>> * C FE generates GENERIC, not GIMPLE (so you'd need to go through the
>>>>>>>>>> >>>> gimplifier and again would feed gimple directly into the passes)
>>>>>>>>>> >>>>
>>>>>>>>>> >>>> I really don't think changing the C FE to accept gimple is a useful way
>>>>>>>>>> >>>> forward.
>>>>>>>>>> >>>
>>>>>>>>>> >>> So I am most worried about replicating all the complexity of types and decl
>>>>>>>>>> >>> parsing for the presumably nice and small function body parser.
>>>>>>>>>> >> Um would it be a good idea if we separate "gimple" functions from
>>>>>>>>>> >> regular C functions,
>>>>>>>>>> >> say by annotating the function definition with "gimple" attribute ?
>>>>>>>>>> >
>>>>>>>>>> > Yes, that was my idea.
>>>>>>>>>> >
>>>>>>>>>> >> A "gimple" function should contain only gimple stmts and not C.
>>>>>>>>>> >> eg:
>>>>>>>>>> >> __attribute__((gimple))
>>>>>>>>>> >> void foo(void)
>>>>>>>>>> >> {
>>>>>>>>>> >> // local decls/initializers in C
>>>>>>>>>> >> // GIMPLE body
>>>>>>>>>> >> }
>>>>>>>>>> >> Or perhaps we could add a new keyword "gimple" telling C FE that this
>>>>>>>>>> >> is a GIMPLE function.
>>>>>>>>>> >
>>>>>>>>>> > Though instead of an attribute I would indeed use a new keyword (as you
>>>>>>>>>> > can't really ignore the attribute and it should be an error with compilers
>>>>>>>>>> > not knowing it). Thus sth like
>>>>>>>>>> >
>>>>>>>>>> > void foo (void)
>>>>>>>>>> > __GIMPLE {
>>>>>>>>>> > }
>>>>>>>>>> >
>>>>>>>>>> > as it's also kind-of a "definition" specifier rather than a
>>>>>>>>>> > declaration specifier.
>>>>>>>>>> >
>>>>>>>>>> >>
>>>>>>>>>> >> My intention is that we could reuse C FE for parsing types and decls
>>>>>>>>>> >> (which I suppose is the primary
>>>>>>>>>> >> motivation behind reusing C FE) and avoid mixing C statements with
>>>>>>>>>> >> GIMPLE by having a separate
>>>>>>>>>> >> GIMPLE parser for parsing GIMPLE functions.
>>>>>>>>>> >> (I suppose the GIMPLE function parser would need to do minimal parsing
>>>>>>>>>> >> of decls/types to recognize
>>>>>>>>>> >> the input is a declaration and call C parsing routines for parsing the
>>>>>>>>>> >> whole decl)
>>>>>>>>>> >
>>>>>>>>>> > Yes, eventually the C frontend provides routines that can be used
>>>>>>>>>> > to tentatively parse declarations / types used in the function.
>>>>>>>>>> >
>>>>>>>>>> >> When C front-end is invoked with -fgimple it should probably only
>>>>>>>>>> >> accept functions marked as "gimple".
>>>>>>>>>> >> Does this sound reasonable ?
>>>>>>>>>> >
>>>>>>>>>> > I think -fgimple would only enable recognizing the __GIMPLE keyword,
>>>>>>>>>> > I wouldn't change all defs to GIMPLE with it.
>>>>>>>>>> >
>>>>>>>>>> > Richard.
>>>>>>>>>> >
>>>>>>>>>> >> Thanks,
>>>>>>>>>> >> Prathamesh
>>>>>>>>>> >>>
>>>>>>>>>> >>> In private discussion we somewhat agreed (Micha - correct me ;)) that
>>>>>>>>>> >>> iff the GIMPLE FE would replace the C FE function body parsing
>>>>>>>>>> >>> completely (re-using name lookup infrastructure of course) and iff the
>>>>>>>>>> >>> GIMPLE FE would emit GIMPLE directly (just NULL DECL_SAVED_TREE
>>>>>>>>>> >>> and a GIMPLE seq in DECL_STRUCT_FUNCTION->gimple_body)
>>>>>>>>>> >>> then "re-using" the C FE would be a way to greatly speed up success.
>>>>>>>>>> >>>
>>>>>>>>>> >>> The other half of the project would then be to change the pass manager
>>>>>>>>>> >>> to do something sensible with the produced GIMPLE as well as making
>>>>>>>>>> >>> our dumps parseable by the GIMPLE FE.
>>>>>>>>>> >>>
>>>>>>>>>> >>> Richard.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> Thanks and Regards,
>>>>>>>>>> Prasad Ghangal
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> Thanks and Regards,
>>>>>>>> Prasad Ghangal