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.kulka...@linaro.org> wrote:
> On 25 March 2016 at 01:15, Prasad Ghangal <prasad.ghan...@gmail.com> wrote:
>> On 24 March 2016 at 19:01, Richard Biener <richard.guent...@gmail.com> wrote:
>>> On Thu, Mar 24, 2016 at 12:27 AM, Prasad Ghangal
>>> <prasad.ghan...@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.guent...@gmail.com> 
>>>> wrote:
>>>>> On Tue, Mar 22, 2016 at 2:45 PM, Prathamesh Kulkarni
>>>>> <prathamesh.kulka...@linaro.org> wrote:
>>>>>> On 22 March 2016 at 16:26, Richard Biener <richard.guent...@gmail.com> 
>>>>>> wrote:
>>>>>>> On Tue, Mar 22, 2016 at 12:08 AM, Prasad Ghangal
>>>>>>> <prasad.ghan...@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 <tbsau...@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.guent...@gmail.com> wrote:
>>>>>>>>>> > On Fri, Mar 18, 2016 at 6:55 AM, Prathamesh Kulkarni
>>>>>>>>>> > <prathamesh.kulka...@linaro.org> wrote:
>>>>>>>>>> >> On 15 March 2016 at 20:46, Richard Biener 
>>>>>>>>>> >> <richard.guent...@gmail.com> wrote:
>>>>>>>>>> >>> On Mon, Mar 14, 2016 at 7:27 PM, Michael Matz <m...@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

Reply via email to