-----Original Message-----
From: Bernd Schmidt [mailto:bschm...@redhat.com] 
Sent: Wednesday, December 09, 2015 7:34 PM
To: Ajit Kumar Agarwal; Richard Biener
Cc: Jeff Law; GCC Patches; Vinod Kathail; Shail Aditya Gupta; Vidhumouli 
Hunsigida; Nagaraju Mekala
Subject: Re: [Patch,rtl Optimization]: Better register pressure estimate for 
Loop Invariant Code Motion.

On 12/09/2015 12:22 PM, Ajit Kumar Agarwal wrote:
>
> This is because the available_regs = 6 and the regs_needed = 1 and 
> new_regs = 0 and the regs_used = 10.  As the reg_used that are based 
> on the Liveness given above is greater than the available_regs, then
 > it's candidate of spill and the estimate_register_pressure calculates  > the 
 > spill cost. This spill cost is greater than inv_cost and gain  > comes to be 
 > negative. The disables the loop invariant for the above  > testcase.

>>As far as I can tell this loop does not lead to a spill. Hence, failure of 
>>this testcase would suggest there is something wrong with your idea.

As far as I can see there is nothing wrong with the idea, the existing 
implementation of the calculation of available_regs results to 6 which is not 
the case for this
testcase. The estimate of regs_used based on the Liveness ( idea behind this 
patch)  is correct, but the incorrect estimate of the available_regs (6) 
results in the gain to be negative. 

>> +  FOR_EACH_LOOP (loop, LI_FROM_INNERMOST)  {

>>Formatting.

>> +    /* Loop Liveness is based on the following proprties.

>>"properties"

I will incorporate the change.

>> +       we only require to calculate the set of objects that are live at
>> +       the birth or the header of the loop.
>> +       We don't need to calculate the live through the Loop considering
>> +       Live in and Live out of all the basic blocks of the Loop. This is
>> +       because the set of objects. That are live-in at the birth or header
>> +       of the loop will be live-in at every node in the Loop.
>> +       If a v live out at the header of the loop then the variable is 
>> live-in
>> +       at every node in the Loop. To prove this, Consider a Loop L with 
>> header
>> +       h such that The variable v defined at d is live-in at h. Since v is 
>> live
>> +       at h, d is not part of L. This follows from the dominance property, 
>> i.e.
>> +       h is strictly dominated by d. Furthermore, there exists a path from 
>> h to
>> +       a use of v which does not go through d. For every node of the loop, 
>> p,
>> +       since the loop is strongly connected Component of the CFG, there 
>> exists
>> +       a path, consisting only of nodes of L from p to h. Concatenating 
>> those
>> +       two paths prove that v is live-in and live-out Of p.  */

>>Please Refrain From Randomly Capitalizing Words, and please also fix the 
>>grammar ("set of objects. That are live-in"). These problems make this 
>>comment (and also your emails) >>extremely hard to read.

>>Partly for that reason, I can't quite make up my mind whether this patch 
>>makes things better or just different. The testcase failure makes me think 
>>it's probably not an improvement.

I'll correct it. I am seeing the gains for Mibench/EEMBC benchmarks for 
Microblaze target with this patch. I will run SPEC CPU 2000  benchmarks for 
i386 with this patch.

>> +    bitmap_ior_into (&LOOP_DATA (loop)->regs_live, DF_LR_IN (loop->header));
>> +    bitmap_ior_into (&LOOP_DATA (loop)->regs_live, DF_LR_OUT 
>> + (loop->header));

>>Formatting.

I'll incorporate the change.

Thanks & Regards
Ajit

Bernd

Reply via email to