local data flow

Joern RENNECKE joern.rennecke@st.com
Mon Jul 17 14:24:00 GMT 2006


Kenneth Zadeck wrote:

>>I suppose reg-live-at-start / reg-live-at-end information is actually easier
>>to maintain during if-conversion that def-use chains.  
>>    
>>
>This is true, certainly in theory, a lot less so in practice.
>The way that you order things is this. 
>
>while (something changes and we have not done too many passes)
>    do the analysis
>    do one properly ordered pass over the cfg changing what you can
>change without using information that has been corrupted during this pass.
>  
>
Except that with the current def-use chains updating def-use chains is 
pointless since they
don't have the required information in the first place. 

>>In my problem, the gen set is the set of uses, and the kill set are
>>defs, clobbers and uses.  Hence, it's still backwards problem.  
>>    
>>
>You could define it either way.  However, the backwards problem is
>already there in both the mainline and the dataflow branch.  It is
>called reaching uses or DF_RU.
>  
>
When the block has one or more uses, but no def of a register, the question
to ask is 'which uses of this register reaches this *use* site' 
(backwards).  That's
different from DF_RU, which calculates this information for def sites 
instead.

>  I think you should look closely are DF_RU.

What more is there to see?  When the block I'm looking at only has uses of a
register, I don't want to know about uses in 'siblings' in the control 
flow graph -
what I want to know is if the register is live at the end of the block.  
LR should
answer that, and I can keep this information up-to-date inasmuch as it will
mention all live registers, and remain self-consistent.



More information about the Gcc mailing list