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 >
