On Sat, Sep 26, 2015 at 12:51 PM, Ajit Kumar Agarwal
<[email protected]> wrote:
> I have made the following changes in the estimate_reg_pressure_cost function 
> used
> by the loop invariant and IVOPTS.
>
> Earlier the estimate_reg_pressure cost uses the cost of n_new variables that 
> are generated by the Loop Invariant
>  and IVOPTS. These are not sufficient for register pressure calculation. The 
> register pressure cost calculation should
> use the n_new + n_old (numbers) to consider the cost. n_old is the register  
> used inside the loops and the effect of
>  n_new new variables generated by loop invariant and IVOPTS on register 
> pressure is based on how the new
> variables impact on register used inside the loops. The increase or decrease 
> in register pressure is due to the impact
> of new variables on the register used  inside the loops. The 
> register-register move cost or the spill cost should consider
> the cost associated with register used and the new variables generated. The 
> movement  of new variables increases or
> decreases the register pressure, which is based on  overall cost of n_new + 
> n_old variables.
>
> The increase and decrease in register pressure is based on the overall cost 
> of n_new + n_old as the changes in the
> register pressure caused due to new variables is based on how the changes 
> behave with respect to the register used
> in the loops.
>
> Thus the register pressure caused to new variables is based on the new 
> variables and its impact on register used inside
>  the loops and thus consider the overall  cost of n_new + n_old.
>
> Bootstrap for i386 and reg tested on i386 with the change is fine.
>
> SPEC CPU 2000 benchmarks are run and there is following impact on the 
> performance
> and code size.
>
> ratio with the optimization vs ratio without optimization for INT benchmarks
> (3807.632 vs 3804.661)
>
> ratio with the optimization vs ratio without optimization for FP benchmarks
> ( 4668.743 vs 4778.741)
>
> Code size reduction with respect to FP SPEC CPU 2000 benchmarks
>
> Number of instruction with optimization = 1094117
> Number of instruction without optimization = 1094659
>
> Reduction in number of instruction with the optimization = 542 instruction.
>
> [Patch,optimization]: Optimized changes in the estimate
>  register pressure cost.
>
> Earlier the estimate_reg_pressure cost uses the cost of n_new variables that
> are generated by the Loop Invariant and IVOPTS. These are not sufficient for
> register pressure calculation. The register pressure cost calculation should
> use the n_new + n_old (numbers) to consider the cost. n_old is the register
> used inside the loops and the affect of n_new new variables generated by
> loop invariant and IVOPTS on register pressure is based on how the new
> variables impact on register used inside the loops.

Hi,
I remember I did this experiment before when I was tuning register
pressure for embedded processors.  Don't remember why I didn't follow
up it.   I will collect data on arm processors for the patch.

Thanks,
bin
>
> ChangeLog:
> 2015-09-26  Ajit Agarwal  <[email protected]>
>
>         * cfgloopanal.c (estimate_reg_pressure_cost) : Add changes
>         to consider the n_new plus n_old in the register pressure
>         cost.
>
> Signed-off-by:Ajit Agarwal [email protected]
>
> Thanks & Regards
> Ajit
>

Reply via email to