improving auto increment expressions detection across basic blocks.

Kenneth Zadeck zadeck@naturalbridge.com
Wed Apr 9 04:18:00 GMT 2008


Kenneth Zadeck wrote:
> Mark Mitchell wrote:
>> Kenneth Zadeck wrote:
>>
>>> The majority of the new bugs were places where the rest of the
>>> compiler was just not expecting to see auto inc or dec instructions. 
>>> If you want to take on doing this kind of extension, be prepared for
>>> the additional cost. 
>>
>> Kenny, do you have any pointers to autoincrement algorithms in the 
>> literature?  I can see how using some of the obvious global analysis 
>> can spot things like a store followed on all paths by an add to the 
>> pointer, and prove that there are no intervening uses of the pointer, 
>> and therefore note that could could merge the addition with the store 
>> to do a post-increment -- but is there anything especially clever out 
>> there?
>>
>> Thanks,
>>
> Remember that we are not really talking about pointers here, even 
> though the values that are computed are used as pointers.   The things 
> that are combined are pseudo register expressions, so there is no 
> rocket science here, not any involvement with aliases.  
> Given that kind of simplification, this is a simple meet over all 
> paths problem.   If all paths that reach some "suitable point" (the 
> load or store that can accommodate the inc or dec) increment or 
> decrement the register in the same way and moving that inc or dec will 
> not create an inc or dec free path, you are free to move combine the 
> inc into the suitable point.
> This is a very simplified instance of code motion or commoning.   The 
> simplification is that it is goal directed.  The goal is to move the 
> inc insns to the "suitable points".  
> As far as literature, i do not know any off the top of my head, but 
> this is a classic meet over all paths kind of dataflow problem.  I 
> would rather solve it in ssa form than using dataflow equations but 
> that is my bias and unfortunately is not an option until we get fuds 
> put into the back end.
>
> Kenny
>
there is actually one nit of this that makes a dataflow solution easier 
than a fud or ssa version.
uses of the index variable kill it.

consider the straight line code

a <- a + 1

...<- a

x[a]  

you would like to combine the a<-a+1 with the x[a], but you cannot 
because it would mean changing the use of   ...<-a into ...<-a-1.   This 
is a loss.  ssa and fuds are not good at detecting this kind of thing 
without futzing with statement numbers and and domination and such where 
if you solve it as a dataflow problem, you can make the ...<-a be in the 
kill set.


kenny





More information about the Gcc mailing list