[RFC, Patch]: Optimized changes in the register used inside loop for LICM and IVOPTS.

Jeff Law law@redhat.com
Mon Nov 30 22:31:00 GMT 2015


On 11/29/2015 09:24 AM, Ajit Kumar Agarwal wrote:
>
> I agree with the above.  To add up on the above, we only require to calculate the set of objects ( SSA_NAMES) 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 (SSA_NAMES)
> 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.
>
> On top of live-in at the birth or header of the loop as proven above, if we calculate the Live out of the exit block of the block and Live-in at the destination
> Edge of the exit block of the loops. This consider the liveness outside of the Loop.
>
> The above two cases forms the basis of better estimator for register pressure as far as LICM is concerned.
>
> If you agree with the above, I will implement add the above in the patch for register_used estimates for better estimate of register pressure for LICM.
Yes, I think we're in agreement.

jeff



More information about the Gcc-patches mailing list