[LLVMdev] Back end loop invariant opt

Christopher Lamb christopher.lamb at gmail.com
Sat Mar 24 23:34:16 PDT 2007



On Mar 25, 2007, at 2:21 AM, Chris Lattner wrote:

> On Sat, 24 Mar 2007, Christopher Lamb wrote:
>> It seems to me that there is potential for doing some target  
>> independent loop
>> invariant optimizations in the back end, but prior to instruction  
>> selection.
>
> I assume you mean after instruction selection?

I assumed that to be target independent the pass would need to be  
before instruction selection, but I guess if the pass more like the  
basic block/ branch analysis that would make sense.

>
>> For instance, I noticed that the loop invariant constant generated  
>> for a loop
>> bounds check is still stuck inside the loop. Likewise constant  
>> address
>> generated for globals accessed within a loop are generated on each  
>> iteration,
>> even though they are invariant.
>
> Yes, this is a known issue.  The plan is to implement a machine- 
> code level
> pass that hoists machine instrs out of loops after instruction  
> selection
> has been performed.  This is important, because isel is the pass that
> exposes most of the issues that need hoisting (e.g. load immediate
> instructions, etc).

Isn't it possible to tell that certain DAG nodes are loop invariant  
prior to instruction selection, such as a constant or global address  
node?

>
>> I'm most familiar with LLVM's target interface and code gen and  
>> I'm not fully
>> up to speed on the optimization framework. Is there an existing  
>> optimization
>> pass that handles these cases that I've failed to properly enable  
>> or hook
>> into? Is there something that inherently prevents these from being  
>> target
>> independent optimizations, requiring a target specific opt pass?  
>> Is this
>> simply an optimization pass that hasn't been implemented yet, but  
>> is a good
>> idea?
>
> The later.  On targets with few registers, LICM can be very bad.   
> Our plan
> is to implement rematerialization in the register allocator to  
> counteract
> this.  In any case, I think that LICM should definitely be done, and
> targets can choose to use it or not based on their register file,  
> before
> remat is done.

Is there more information (PR?) on the schedule for this work and who  
is involved? I may not be experienced enough to make much of a  
contribution yet, but I'd like to keep tabs on it.

--
Christopher Lamb
christopher.lamb at gmail.com


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20070325/9f26fc81/attachment.html>


More information about the llvm-dev mailing list