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.

+  FOR_EACH_LOOP (loop, LI_FROM_INNERMOST)  {

Formatting.

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

"properties"

+       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.

+    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.


Bernd

Reply via email to