[llvm-dev] Removing the LoopInstSimplify pass

Philip Reames via llvm-dev llvm-dev at lists.llvm.org
Mon Mar 5 13:52:07 PST 2018


The code is simple enough that I'd vote to delete and reintroduce later 
if needed.  :)

Philip


On 03/05/2018 01:23 PM, Vedant Kumar wrote:
> Thanks for sharing this background information :). If you've got the 
> time, I think it'd be great to check this bulleted list into docs/. I 
> see that we don't have a Canonicalizations.rst or a 
> LoopOptimizations.rst -- your notes look like a good starting point.
>
> Given that the pass seems to be doing the right thing from a design 
> perspective, should it stay in tree? Since it's been off-by-default 
> since it was introduced in 2011, I'm still in favor of removing it 
> unless someone is actively working on it.
>
> [+ Chad, one of the pass contributors, for comment.]
>
> thanks,
> vedant
>
>
>> On Mar 5, 2018, at 8:47 AM, Philip Reames <listmail at philipreames.com 
>> <mailto:listmail at philipreames.com>> wrote:
>>
>> We're not actively using this, but from a design perspective I'm 
>> wondering if we should be using this or something like it.  At the 
>> moment, our various loop optimization assume mostly canonical input.  
>> Some of the passes have been taught to deal with limited amounts of 
>> non-canonical-ism, but there's a strong code simplicity argument in 
>> favor of only handling canonical input and then having something else 
>> canonicalize if necessary.  Given our loop passes are iterated to a 
>> fixed point, having that canonicalization done in another loop pass 
>> seems appropriate.  This pass seems like a start down that path.
>>
>> Since we don't really document this anywhere, let me describe what I 
>> see as a canonical loop:
>>
>>   * Use LCSSA, and LoopSimplify form. Meaning no-uses of instructions
>>     defined in loop outside of loop and phis of loop exit blocks.
>>     Preheaders available.  Unique (unshared) exit blocks.
>>   * All trivial CSE done.  I include both arithmetic and load
>>     elimination for constant memory.
>>   * All instsimplify style simplifications available within the loop
>>     and preheader done. There's an argument for doing instcombine
>>     style optimizations within the loop as well, but that's less
>>     clear to me.
>>   * All trivial LICM done.  By this I mean LICM which does not
>>     require aliasing or speculation safety logic.  This is
>>     Loop::makeInvariant.
>>   * All trivial branches discharged.  By this I mean both CFGSimplify
>>     style elimination of constant branch conditions, but also CVP,
>>     KnownBits, and SCEV.  (Today, this is often true on entry to a
>>     loop pass manager, but is not upheld as passes run.)
>>
>> To be clear, the above list is aspirational.  We definitely don't do 
>> all of the above today.  :)
>>
>> Philip
>>
>> On 03/02/2018 04:36 PM, Vedant Kumar via llvm-dev wrote:
>>> Hi,
>>>
>>> I think we should remove the LoopInstSimplify pass, as it has no 
>>> test coverage and no users (afaik).
>>>
>>> If you are using the pass, or think that it should stay in tree for 
>>> some other reason, please let me know.
>>>
>>> Here's the patch: https://reviews.llvm.org/D44053
>>>
>>> vedant
>>>
>>>
>>> _______________________________________________
>>> LLVM Developers mailing list
>>> llvm-dev at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180305/19788cba/attachment.html>


More information about the llvm-dev mailing list