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