GCC 4.9.4 Status Report (2016-07-18)

2016-07-18 Thread Richard Biener

Status
==

The GCC 4.9 branch is still open for regression and documentation fixes
but given GCC 6.2 is close it's about time to close the branch with
a last release from it.  Thus in the next week I plan to do a RC
for GCC 4.9.4 following with a release and the branch closing game.

Please consider backporting of important fixes (wrong-code, rejects-valid)
but err on the side of caution.


Quality Data


Priority  #   Change from last report
---   ---
P10
P2  140   +  40
P3   41   +  16
P4   66   +   2
P5   30   -   3
---   ---
Total P1-P3 181   +  56
Total   277   +  51


Previous Report
===

https://gcc.gnu.org/ml/gcc/2015-06/msg00260.html


[DOC, RFC] Partial integration of sections: 3.18.54 x86 Options and 6.31.32 x86 Function Attributes

2016-07-18 Thread Martin Liška
Hello.

As mentioned in [1], we does not fully cover all i386 target options
in [2]. Apart from that, flag explanation is more brief than we've got in [3].

One example:

[3]:
-mrecip
This option enables use of RCPSS and RSQRTSS instructions (and their vectorized 
variants RCPPS and RSQRTPS) with an additional Newton-Raphson step to increase 
precision instead of DIVSS and SQRTSS (and their vectorized variants) for 
single-precision floating-point arguments. These instructions are generated 
only when -funsafe-math-optimizations is enabled together with 
-ffinite-math-only and -fno-trapping-math. Note that while the throughput of 
the sequence is higher than the throughput of the non-reciprocal instruction, 
the precision of the sequence can be decreased by up to 2 ulp (i.e. the inverse 
of 1.0 equals 0.9994).
Note that GCC implements 1.0f/sqrtf(x) in terms of RSQRTSS (or RSQRTPS) already 
with -ffast-math (or the above option combination), and doesn't need -mrecip.

Also note that GCC emits the above sequence with additional Newton-Raphson step 
for vectorized single-float division and vectorized sqrtf(x) already with 
-ffast-math (or the above option combination), and doesn't need -mrecip. 

[2]:
‘recip’
‘no-recip’
Enable/disable the generation of RCPSS, RCPPS, RSQRTSS and RSQRTPS instructions 
followed an additional Newton-Raphson step instead of doing a floating-point 
division. 

I'm thinking whether it would be possible to tell that 'target (options)' 
accepts all options as mentioned in [3], expect ...
If it's acceptable opinion, I can prepare a patch.

Thanks,
Martin

[1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71652#c4
[2] 
https://gcc.gnu.org/onlinedocs/gcc/x86-Function-Attributes.html#x86-Function-Attributes
[3] https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/x86-Options.html#x86-Options


Re: [gimplefe] hacking pass manager

2016-07-18 Thread Prasad Ghangal
On 15 July 2016 at 16:13, Richard Biener  wrote:
> On Sun, Jul 10, 2016 at 6:13 PM, Prasad Ghangal
>  wrote:
>> On 8 July 2016 at 13:13, Richard Biener  wrote:
>>> On Thu, Jul 7, 2016 at 9:45 PM, Prasad Ghangal  
>>> wrote:
 On 6 July 2016 at 14:24, Richard Biener  wrote:
> On Wed, Jul 6, 2016 at 9:51 AM, Prasad Ghangal  
> wrote:
>> On 30 June 2016 at 17:10, Richard Biener  
>> wrote:
>>> On Wed, Jun 29, 2016 at 9:13 PM, Prasad Ghangal
>>>  wrote:
 On 29 June 2016 at 22:15, Richard Biener  
 wrote:
> On June 29, 2016 6:20:29 PM GMT+02:00, Prathamesh Kulkarni 
>  wrote:
>>On 18 June 2016 at 12:02, Prasad Ghangal 
>>wrote:
>>> Hi,
>>>
>>> I tried hacking pass manager to execute only given passes. For this 
>>> I
>>> am adding new member as opt_pass *custom_pass_list to the function
>>> structure to store passes need to execute and providing the
>>> custom_pass_list to execute_pass_list() function instead of all
>>passes
>>>
>>> for test case like-
>>>
>>> int a;
>>> void __GIMPLE (execute ("tree-ccp1", "tree-fre1")) foo()
>>> {
>>> bb_1:
>>>   a = 1 + a;
>>> }
>>>
>>> it will execute only given passes i.e. ccp1 and fre1 pass on the
>>function
>>>
>>> and for test case like -
>>>
>>> int a;
>>> void __GIMPLE (startwith ("tree-ccp1")) foo()
>>> {
>>> bb_1:
>>>   a = 1 + a;
>>> }
>>>
>>> it will act as a entry point to the pipeline and will execute passes
>>> starting from given pass.
>>Bike-shedding:
>>Would it make sense to have syntax for defining pass ranges to execute
>>?
>>for instance:
>>void __GIMPLE(execute (pass_start : pass_end))
>>which would execute all the passes within range [pass_start, 
>>pass_end],
>>which would be convenient if the range is large.
>
> But it would rely on a particular pass pipeline, f.e. pass-start 
> appearing before pass-end.
>
> Currently control doesn't work 100% as it only replaces 
> all_optimizations but not lowering passes or early opts, nor IPA opts.
>

 Each pass needs GIMPLE in some specific form. So I am letting lowering
 and early opt passes to execute. I think we have to execute some
 passes (like cfg) anyway to represent GIMPLE into proper form
>>>
>>> Yes, that's true.  Note that early opt passes only optimize but we need
>>> pass_build_ssa_passes at least (for into-SSA).  For proper unit-testing
>>> of GIMPLE passes we do need to guard off early opts somehow
>>> (I guess a simple if (flag_gimple && cfun->custom_pass_list) would do
>>> that).
>>>
>>> Then there is of course the question about IPA passes which I think is
>>> somewhat harder (one could always disable all IPA passes manually
>>> via flags of course or finally have a global -fipa/no-ipa like most
>>> other compilers).
>>>
>> Can we iterate through all ipa passes and do -fdisable-ipa-pass or
>> -fenable-ipa-pass equivalent for each?
>
> We could do that, yes.  But let's postpone this issue.  I think that
> startwith is going to be most useful and rather than constructing
> a pass list for it "native" support for it in the pass manager is
> likely to produce better results (add a 'startwith' member alongside
> the pass list member and if it is set the pass manager skips all
> passes that do not match 'startwith' and once it reaches it it clears
> the field).
>
> In the future I hope we can get away from a static pass list and more
> towards rule-driven pass execution (we have all those PROP_* stuff
> already but it isn't really used for example).  But well, that would be
> a separate GSoC project ;)
>
> IMHO startwith will provide everything needed for unit-testing.  We can
> add a flag on whether further passes should be executed or not and
> even a pass list like execute ("ccp1", "fre") can be implemented by
> startwith ccp1 and then from there executing the rest of the passes in the
> list and stopping at the end.
>
> As said, unit-testing should exercise a single pass if we can control
> its input.
>
 In this patch I am skipping execution of passes until pass_startwith
 is found. Unlike previous build, now pass manager executes all passes
 in pipeline starting from pass_startwith instead of just sub passes.
>>>
>>> That looks good.  I wonder if
>>>
>>> +  if (startwith_p && cfun->startwith)
>>> +{
>>> +  if (pass->name == cfun->pass_startwith->name
>>> + || pass->name == "*clean_state")
>>>
>>> need better be strcmp ()s though.  Also the early opt

Re: [gimplefe] hacking pass manager

2016-07-18 Thread Richard Biener
On July 18, 2016 8:28:15 PM GMT+02:00, Prasad Ghangal 
 wrote:
>On 15 July 2016 at 16:13, Richard Biener 
>wrote:
>> On Sun, Jul 10, 2016 at 6:13 PM, Prasad Ghangal
>>  wrote:
>>> On 8 July 2016 at 13:13, Richard Biener 
>wrote:
 On Thu, Jul 7, 2016 at 9:45 PM, Prasad Ghangal
> wrote:
> On 6 July 2016 at 14:24, Richard Biener
> wrote:
>> On Wed, Jul 6, 2016 at 9:51 AM, Prasad Ghangal
> wrote:
>>> On 30 June 2016 at 17:10, Richard Biener
> wrote:
 On Wed, Jun 29, 2016 at 9:13 PM, Prasad Ghangal
  wrote:
> On 29 June 2016 at 22:15, Richard Biener
> wrote:
>> On June 29, 2016 6:20:29 PM GMT+02:00, Prathamesh Kulkarni
> wrote:
>>>On 18 June 2016 at 12:02, Prasad Ghangal
>
>>>wrote:
 Hi,

 I tried hacking pass manager to execute only given passes.
>For this I
 am adding new member as opt_pass *custom_pass_list to the
>function
 structure to store passes need to execute and providing the
 custom_pass_list to execute_pass_list() function instead of
>all
>>>passes

 for test case like-

 int a;
 void __GIMPLE (execute ("tree-ccp1", "tree-fre1")) foo()
 {
 bb_1:
   a = 1 + a;
 }

 it will execute only given passes i.e. ccp1 and fre1 pass
>on the
>>>function

 and for test case like -

 int a;
 void __GIMPLE (startwith ("tree-ccp1")) foo()
 {
 bb_1:
   a = 1 + a;
 }

 it will act as a entry point to the pipeline and will
>execute passes
 starting from given pass.
>>>Bike-shedding:
>>>Would it make sense to have syntax for defining pass ranges
>to execute
>>>?
>>>for instance:
>>>void __GIMPLE(execute (pass_start : pass_end))
>>>which would execute all the passes within range [pass_start,
>pass_end],
>>>which would be convenient if the range is large.
>>
>> But it would rely on a particular pass pipeline, f.e.
>pass-start appearing before pass-end.
>>
>> Currently control doesn't work 100% as it only replaces
>all_optimizations but not lowering passes or early opts, nor IPA opts.
>>
>
> Each pass needs GIMPLE in some specific form. So I am letting
>lowering
> and early opt passes to execute. I think we have to execute
>some
> passes (like cfg) anyway to represent GIMPLE into proper form

 Yes, that's true.  Note that early opt passes only optimize but
>we need
 pass_build_ssa_passes at least (for into-SSA).  For proper
>unit-testing
 of GIMPLE passes we do need to guard off early opts somehow
 (I guess a simple if (flag_gimple && cfun->custom_pass_list)
>would do
 that).

 Then there is of course the question about IPA passes which I
>think is
 somewhat harder (one could always disable all IPA passes
>manually
 via flags of course or finally have a global -fipa/no-ipa like
>most
 other compilers).

>>> Can we iterate through all ipa passes and do -fdisable-ipa-pass
>or
>>> -fenable-ipa-pass equivalent for each?
>>
>> We could do that, yes.  But let's postpone this issue.  I think
>that
>> startwith is going to be most useful and rather than constructing
>> a pass list for it "native" support for it in the pass manager is
>> likely to produce better results (add a 'startwith' member
>alongside
>> the pass list member and if it is set the pass manager skips all
>> passes that do not match 'startwith' and once it reaches it it
>clears
>> the field).
>>
>> In the future I hope we can get away from a static pass list and
>more
>> towards rule-driven pass execution (we have all those PROP_*
>stuff
>> already but it isn't really used for example).  But well, that
>would be
>> a separate GSoC project ;)
>>
>> IMHO startwith will provide everything needed for unit-testing. 
>We can
>> add a flag on whether further passes should be executed or not
>and
>> even a pass list like execute ("ccp1", "fre") can be implemented
>by
>> startwith ccp1 and then from there executing the rest of the
>passes in the
>> list and stopping at the end.
>>
>> As said, unit-testing should exercise a single pass if we can
>control
>> its input.
>>
> In this patch I am skipping execution of passes until
>pass_startwith
> is found. Unlike previous build, now pass manager executes all
>passes
> in pipeline starting from pass_startwith instead of just sub
>passes.

 That looks good.  I wonder if

 +  if (startwith_p && cfun->startwith)
 +{
 +  if (pass->name == cfun->pass_

Re: [gimplefe] hacking pass manager

2016-07-18 Thread Prasad Ghangal
On 19 July 2016 at 00:25, Richard Biener  wrote:
> On July 18, 2016 8:28:15 PM GMT+02:00, Prasad Ghangal 
>  wrote:
>>On 15 July 2016 at 16:13, Richard Biener 
>>wrote:
>>> On Sun, Jul 10, 2016 at 6:13 PM, Prasad Ghangal
>>>  wrote:
 On 8 July 2016 at 13:13, Richard Biener 
>>wrote:
> On Thu, Jul 7, 2016 at 9:45 PM, Prasad Ghangal
>> wrote:
>> On 6 July 2016 at 14:24, Richard Biener
>> wrote:
>>> On Wed, Jul 6, 2016 at 9:51 AM, Prasad Ghangal
>> wrote:
 On 30 June 2016 at 17:10, Richard Biener
>> wrote:
> On Wed, Jun 29, 2016 at 9:13 PM, Prasad Ghangal
>  wrote:
>> On 29 June 2016 at 22:15, Richard Biener
>> wrote:
>>> On June 29, 2016 6:20:29 PM GMT+02:00, Prathamesh Kulkarni
>> wrote:
On 18 June 2016 at 12:02, Prasad Ghangal
>>
wrote:
> Hi,
>
> I tried hacking pass manager to execute only given passes.
>>For this I
> am adding new member as opt_pass *custom_pass_list to the
>>function
> structure to store passes need to execute and providing the
> custom_pass_list to execute_pass_list() function instead of
>>all
passes
>
> for test case like-
>
> int a;
> void __GIMPLE (execute ("tree-ccp1", "tree-fre1")) foo()
> {
> bb_1:
>   a = 1 + a;
> }
>
> it will execute only given passes i.e. ccp1 and fre1 pass
>>on the
function
>
> and for test case like -
>
> int a;
> void __GIMPLE (startwith ("tree-ccp1")) foo()
> {
> bb_1:
>   a = 1 + a;
> }
>
> it will act as a entry point to the pipeline and will
>>execute passes
> starting from given pass.
Bike-shedding:
Would it make sense to have syntax for defining pass ranges
>>to execute
?
for instance:
void __GIMPLE(execute (pass_start : pass_end))
which would execute all the passes within range [pass_start,
>>pass_end],
which would be convenient if the range is large.
>>>
>>> But it would rely on a particular pass pipeline, f.e.
>>pass-start appearing before pass-end.
>>>
>>> Currently control doesn't work 100% as it only replaces
>>all_optimizations but not lowering passes or early opts, nor IPA opts.
>>>
>>
>> Each pass needs GIMPLE in some specific form. So I am letting
>>lowering
>> and early opt passes to execute. I think we have to execute
>>some
>> passes (like cfg) anyway to represent GIMPLE into proper form
>
> Yes, that's true.  Note that early opt passes only optimize but
>>we need
> pass_build_ssa_passes at least (for into-SSA).  For proper
>>unit-testing
> of GIMPLE passes we do need to guard off early opts somehow
> (I guess a simple if (flag_gimple && cfun->custom_pass_list)
>>would do
> that).
>
> Then there is of course the question about IPA passes which I
>>think is
> somewhat harder (one could always disable all IPA passes
>>manually
> via flags of course or finally have a global -fipa/no-ipa like
>>most
> other compilers).
>
 Can we iterate through all ipa passes and do -fdisable-ipa-pass
>>or
 -fenable-ipa-pass equivalent for each?
>>>
>>> We could do that, yes.  But let's postpone this issue.  I think
>>that
>>> startwith is going to be most useful and rather than constructing
>>> a pass list for it "native" support for it in the pass manager is
>>> likely to produce better results (add a 'startwith' member
>>alongside
>>> the pass list member and if it is set the pass manager skips all
>>> passes that do not match 'startwith' and once it reaches it it
>>clears
>>> the field).
>>>
>>> In the future I hope we can get away from a static pass list and
>>more
>>> towards rule-driven pass execution (we have all those PROP_*
>>stuff
>>> already but it isn't really used for example).  But well, that
>>would be
>>> a separate GSoC project ;)
>>>
>>> IMHO startwith will provide everything needed for unit-testing.
>>We can
>>> add a flag on whether further passes should be executed or not
>>and
>>> even a pass list like execute ("ccp1", "fre") can be implemented
>>by
>>> startwith ccp1 and then from there executing the rest of the
>>passes in the
>>> list and stopping at the end.
>>>
>>> As said, unit-testing should exercise a single pass if we can
>>control
>>> its input.
>>>
>> In this patch I am skipping execution of passes until
>>pass_startwith
>> is found. Unlike previous build, now pass manager executes all
>>passes
>> in pipeline startin

Re: [gimplefe] hacking pass manager

2016-07-18 Thread David Malcolm
On Tue, 2016-07-19 at 00:52 +0530, Prasad Ghangal wrote:
> On 19 July 2016 at 00:25, Richard Biener 
> wrote:
> > On July 18, 2016 8:28:15 PM GMT+02:00, Prasad Ghangal <
> > prasad.ghan...@gmail.com> wrote:
> > > On 15 July 2016 at 16:13, Richard Biener <
> > > richard.guent...@gmail.com>
> > > wrote:
> > > > On Sun, Jul 10, 2016 at 6:13 PM, Prasad Ghangal
> > > >  wrote:
> > > > > On 8 July 2016 at 13:13, Richard Biener <
> > > > > richard.guent...@gmail.com>
> > > wrote:
> > > > > > On Thu, Jul 7, 2016 at 9:45 PM, Prasad Ghangal
> > >  wrote:
> > > > > > > On 6 July 2016 at 14:24, Richard Biener
> > >  wrote:
> > > > > > > > On Wed, Jul 6, 2016 at 9:51 AM, Prasad Ghangal
> > >  wrote:
> > > > > > > > > On 30 June 2016 at 17:10, Richard Biener
> > >  wrote:
> > > > > > > > > > On Wed, Jun 29, 2016 at 9:13 PM, Prasad Ghangal
> > > > > > > > > >  wrote:
> > > > > > > > > > > On 29 June 2016 at 22:15, Richard Biener
> > >  wrote:
> > > > > > > > > > > > On June 29, 2016 6:20:29 PM GMT+02:00,
> > > > > > > > > > > > Prathamesh Kulkarni
> > >  wrote:
> > > > > > > > > > > > > On 18 June 2016 at 12:02, Prasad Ghangal
> > > 
> > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > Hi,
> > > > > > > > > > > > > > 
> > > > > > > > > > > > > > I tried hacking pass manager to execute
> > > > > > > > > > > > > > only given passes.
> > > For this I
> > > > > > > > > > > > > > am adding new member as opt_pass
> > > > > > > > > > > > > > *custom_pass_list to the
> > > function
> > > > > > > > > > > > > > structure to store passes need to execute
> > > > > > > > > > > > > > and providing the
> > > > > > > > > > > > > > custom_pass_list to execute_pass_list()
> > > > > > > > > > > > > > function instead of
> > > all
> > > > > > > > > > > > > passes
> > > > > > > > > > > > > > 
> > > > > > > > > > > > > > for test case like-
> > > > > > > > > > > > > > 
> > > > > > > > > > > > > > int a;
> > > > > > > > > > > > > > void __GIMPLE (execute ("tree-ccp1", "tree
> > > > > > > > > > > > > > -fre1")) foo()
> > > > > > > > > > > > > > {
> > > > > > > > > > > > > > bb_1:
> > > > > > > > > > > > > >   a = 1 + a;
> > > > > > > > > > > > > > }
> > > > > > > > > > > > > > 
> > > > > > > > > > > > > > it will execute only given passes i.e. ccp1
> > > > > > > > > > > > > > and fre1 pass
> > > on the
> > > > > > > > > > > > > function
> > > > > > > > > > > > > > 
> > > > > > > > > > > > > > and for test case like -
> > > > > > > > > > > > > > 
> > > > > > > > > > > > > > int a;
> > > > > > > > > > > > > > void __GIMPLE (startwith ("tree-ccp1"))
> > > > > > > > > > > > > > foo()
> > > > > > > > > > > > > > {
> > > > > > > > > > > > > > bb_1:
> > > > > > > > > > > > > >   a = 1 + a;
> > > > > > > > > > > > > > }
> > > > > > > > > > > > > > 
> > > > > > > > > > > > > > it will act as a entry point to the
> > > > > > > > > > > > > > pipeline and will
> > > execute passes
> > > > > > > > > > > > > > starting from given pass.
> > > > > > > > > > > > > Bike-shedding:
> > > > > > > > > > > > > Would it make sense to have syntax for
> > > > > > > > > > > > > defining pass ranges
> > > to execute
> > > > > > > > > > > > > ?
> > > > > > > > > > > > > for instance:
> > > > > > > > > > > > > void __GIMPLE(execute (pass_start :
> > > > > > > > > > > > > pass_end))
> > > > > > > > > > > > > which would execute all the passes within
> > > > > > > > > > > > > range [pass_start,
> > > pass_end],
> > > > > > > > > > > > > which would be convenient if the range is
> > > > > > > > > > > > > large.
> > > > > > > > > > > > 
> > > > > > > > > > > > But it would rely on a particular pass
> > > > > > > > > > > > pipeline, f.e.
> > > pass-start appearing before pass-end.
> > > > > > > > > > > > 
> > > > > > > > > > > > Currently control doesn't work 100% as it only
> > > > > > > > > > > > replaces
> > > all_optimizations but not lowering passes or early opts, nor IPA
> > > opts.
> > > > > > > > > > > > 
> > > > > > > > > > > 
> > > > > > > > > > > Each pass needs GIMPLE in some specific form. So
> > > > > > > > > > > I am letting
> > > lowering
> > > > > > > > > > > and early opt passes to execute. I think we have
> > > > > > > > > > > to execute
> > > some
> > > > > > > > > > > passes (like cfg) anyway to represent GIMPLE into
> > > > > > > > > > > proper form
> > > > > > > > > > 
> > > > > > > > > > Yes, that's true.  Note that early opt passes only
> > > > > > > > > > optimize but
> > > we need
> > > > > > > > > > pass_build_ssa_passes at least (for into-SSA).  For
> > > > > > > > > > proper
> > > unit-testing
> > > > > > > > > > of GIMPLE passes we do need to guard off early opts
> > > > > > > > > > somehow
> > > > > > > > > > (I guess a simple if (flag_gimple && cfun
> > > > > > > > > > ->custom_pass_list)
> > > would do
> > > > > > > > > > that).
> > > > > > > > > > 
> > > > > > > > > > Then there is of course the question about IPA
> > > > > > > > > > passes which I
> > > think is
> > > > > > > > > > somewhat harder (one could always disable all IPA
> > 

Re: [gimplefe] hacking pass manager

2016-07-18 Thread Richard Biener
On July 18, 2016 11:05:58 PM GMT+02:00, David Malcolm  
wrote:
>On Tue, 2016-07-19 at 00:52 +0530, Prasad Ghangal wrote:
>> On 19 July 2016 at 00:25, Richard Biener 
>> wrote:
>> > On July 18, 2016 8:28:15 PM GMT+02:00, Prasad Ghangal <
>> > prasad.ghan...@gmail.com> wrote:
>> > > On 15 July 2016 at 16:13, Richard Biener <
>> > > richard.guent...@gmail.com>
>> > > wrote:
>> > > > On Sun, Jul 10, 2016 at 6:13 PM, Prasad Ghangal
>> > > >  wrote:
>> > > > > On 8 July 2016 at 13:13, Richard Biener <
>> > > > > richard.guent...@gmail.com>
>> > > wrote:
>> > > > > > On Thu, Jul 7, 2016 at 9:45 PM, Prasad Ghangal
>> > >  wrote:
>> > > > > > > On 6 July 2016 at 14:24, Richard Biener
>> > >  wrote:
>> > > > > > > > On Wed, Jul 6, 2016 at 9:51 AM, Prasad Ghangal
>> > >  wrote:
>> > > > > > > > > On 30 June 2016 at 17:10, Richard Biener
>> > >  wrote:
>> > > > > > > > > > On Wed, Jun 29, 2016 at 9:13 PM, Prasad Ghangal
>> > > > > > > > > >  wrote:
>> > > > > > > > > > > On 29 June 2016 at 22:15, Richard Biener
>> > >  wrote:
>> > > > > > > > > > > > On June 29, 2016 6:20:29 PM GMT+02:00,
>> > > > > > > > > > > > Prathamesh Kulkarni
>> > >  wrote:
>> > > > > > > > > > > > > On 18 June 2016 at 12:02, Prasad Ghangal
>> > > 
>> > > > > > > > > > > > > wrote:
>> > > > > > > > > > > > > > Hi,
>> > > > > > > > > > > > > > 
>> > > > > > > > > > > > > > I tried hacking pass manager to execute
>> > > > > > > > > > > > > > only given passes.
>> > > For this I
>> > > > > > > > > > > > > > am adding new member as opt_pass
>> > > > > > > > > > > > > > *custom_pass_list to the
>> > > function
>> > > > > > > > > > > > > > structure to store passes need to execute
>> > > > > > > > > > > > > > and providing the
>> > > > > > > > > > > > > > custom_pass_list to execute_pass_list()
>> > > > > > > > > > > > > > function instead of
>> > > all
>> > > > > > > > > > > > > passes
>> > > > > > > > > > > > > > 
>> > > > > > > > > > > > > > for test case like-
>> > > > > > > > > > > > > > 
>> > > > > > > > > > > > > > int a;
>> > > > > > > > > > > > > > void __GIMPLE (execute ("tree-ccp1", "tree
>> > > > > > > > > > > > > > -fre1")) foo()
>> > > > > > > > > > > > > > {
>> > > > > > > > > > > > > > bb_1:
>> > > > > > > > > > > > > >   a = 1 + a;
>> > > > > > > > > > > > > > }
>> > > > > > > > > > > > > > 
>> > > > > > > > > > > > > > it will execute only given passes i.e. ccp1
>> > > > > > > > > > > > > > and fre1 pass
>> > > on the
>> > > > > > > > > > > > > function
>> > > > > > > > > > > > > > 
>> > > > > > > > > > > > > > and for test case like -
>> > > > > > > > > > > > > > 
>> > > > > > > > > > > > > > int a;
>> > > > > > > > > > > > > > void __GIMPLE (startwith ("tree-ccp1"))
>> > > > > > > > > > > > > > foo()
>> > > > > > > > > > > > > > {
>> > > > > > > > > > > > > > bb_1:
>> > > > > > > > > > > > > >   a = 1 + a;
>> > > > > > > > > > > > > > }
>> > > > > > > > > > > > > > 
>> > > > > > > > > > > > > > it will act as a entry point to the
>> > > > > > > > > > > > > > pipeline and will
>> > > execute passes
>> > > > > > > > > > > > > > starting from given pass.
>> > > > > > > > > > > > > Bike-shedding:
>> > > > > > > > > > > > > Would it make sense to have syntax for
>> > > > > > > > > > > > > defining pass ranges
>> > > to execute
>> > > > > > > > > > > > > ?
>> > > > > > > > > > > > > for instance:
>> > > > > > > > > > > > > void __GIMPLE(execute (pass_start :
>> > > > > > > > > > > > > pass_end))
>> > > > > > > > > > > > > which would execute all the passes within
>> > > > > > > > > > > > > range [pass_start,
>> > > pass_end],
>> > > > > > > > > > > > > which would be convenient if the range is
>> > > > > > > > > > > > > large.
>> > > > > > > > > > > > 
>> > > > > > > > > > > > But it would rely on a particular pass
>> > > > > > > > > > > > pipeline, f.e.
>> > > pass-start appearing before pass-end.
>> > > > > > > > > > > > 
>> > > > > > > > > > > > Currently control doesn't work 100% as it only
>> > > > > > > > > > > > replaces
>> > > all_optimizations but not lowering passes or early opts, nor IPA
>> > > opts.
>> > > > > > > > > > > > 
>> > > > > > > > > > > 
>> > > > > > > > > > > Each pass needs GIMPLE in some specific form. So
>> > > > > > > > > > > I am letting
>> > > lowering
>> > > > > > > > > > > and early opt passes to execute. I think we have
>> > > > > > > > > > > to execute
>> > > some
>> > > > > > > > > > > passes (like cfg) anyway to represent GIMPLE into
>> > > > > > > > > > > proper form
>> > > > > > > > > > 
>> > > > > > > > > > Yes, that's true.  Note that early opt passes only
>> > > > > > > > > > optimize but
>> > > we need
>> > > > > > > > > > pass_build_ssa_passes at least (for into-SSA).  For
>> > > > > > > > > > proper
>> > > unit-testing
>> > > > > > > > > > of GIMPLE passes we do need to guard off early opts
>> > > > > > > > > > somehow
>> > > > > > > > > > (I guess a simple if (flag_gimple && cfun
>> > > > > > > > > > ->custom_pass_list)
>> > > would do
>> > > > > > > > > > that).
>> > > > > > > > > > 
>> > >