On Oct 21, 2014, at 8:11 AM, Sebastian Pop <seb...@gmail.com> wrote:

> Maxim Kuvyrkov wrote:
>> Hi,
>> 
>> This patch improves register pressure scheduling (both 
>> SCHED_PRESSURE_WEIGHTED and SCHED_PRESSURE_MODEL) to better estimate number 
>> of available registers.
>> 
>> At the moment the scheduler does not account for spills in the prologues and 
>> restores in the epilogue, which occur from use of call-used registers.  The 
>> current state is, essentially, optimized for case when there is a hot loop 
>> inside the function, and the loop executes significantly more often than the 
>> prologue/epilogue. However, on the opposite end, we have a case when the 
>> function is just a single non-cyclic basic block, which executes just as 
>> often as prologue / epilogue, so spills in the prologue hurt performance as 
>> much as spills in the basic block itself.  In such a case the scheduler 
>> should throttle-down on the number of available registers and try to not go 
>> beyond call-clobbered registers.
>> 
>> The patch uses basic block frequencies to balance the cost of using 
>> call-used registers for intermediate cases between the two above extremes.
>> 
>> The motivation for this patch was a floating-point testcase on 
>> arm-linux-gnueabihf (ARM is one of the few targets that use register 
>> pressure scheduling by default).
>> 
> 
> Does aarch64 enable reg pressure sched by default, or what is the flag to 
> enable it?
> I'm planing to look at the perf impact of the patch.

Thanks, benchmarking results are welcome!  AArch64 doesn't use reg_pressure 
scheduling by default.  Use "-fsched-pressure 
--param=sched-pressure-algorithm=2" to enable same thing as on ARM.  I would 
imagine C++ and Fortran floating-point code to be most affected.

--
Maxim Kuvyrkov
www.linaro.org

Reply via email to