[LLVMdev] How to unroll loop with non-constant boundary

Stepan Dyatkovskiy STPWORLD at narod.ru
Wed Mar 7 21:40:48 PST 2012


I treat "X s<= Y + Step" as "X s<= Y + 1". If X == Y (even if Y == INT_MAX) only two cases are possible:
1. Step == 0. Means infinite loop. Could not be unrolled.
2. Step != 0. Loop with only iteration. May be unrolled.

I forgot to fix comments "X s<= Y+1" with the "X s<= Y+Step". Sorry. Fixed.

-Stepan.

07.03.2012, 12:20, "Nick Lewycky" <nicholas at mxc.ca>:
> Stepan Dyatkovskiy wrote:
>
>>  Hi guys,
>>  I attached the modified patch that handles cases with low==end and stride!=1.
>
> I don't see how this could be correct. Your patch treats 'X s<= Y' as 'X
> s< Y+1', which is incorrect when Y is INT_MAX. Wouldn't that turn an
> infinite loop into a zero-trip loop?
>
> To be clear, this is the flaw in Benjamin's patch which you appear to
> have extended that makes it unsuitable for committing to the compiler.
> It would cause miscompiles.
>
> That said, I haven't had the chance to look into fixing this, but
> wouldn't testing AddRec for nsw/nuw be an easy fix that would salvage
> the rest of the logic?
>
> Nick
>
>>  Please find it for review.
>>
>>  -Stepan
>>
>>  28.02.2012, 17:41, "Benjamin Kramer"<benny.kra at googlemail.com>:
>>>  On 27.02.2012, at 20:17, Duncan Sands wrote:
>>>>    Hi Benjamin,
>>>>>    LLVM misses this optimization because ScalarEvolution's ComputeExitLimitFromICmp doesn't handle signed<= (SLE) and thus can't compute the number of times the loop is executed. I wonder if there's a reason for this, it seems like something simple to add.
>>>>    instsimplify could also be enhanced to clean it up in this particular case, but
>>>>    it would be better to make scev smarter.
>>>  I filed http://llvm.org/bugs/show_bug.cgi?id=12110 to track this.
>>>
>>>  - Ben
>>>>    Ciao, Duncan.
>>>>    _______________________________________________
>>>>    LLVM Developers mailing list
>>>>    LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>>>    http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>  _______________________________________________
>>>  LLVM Developers mailing list
>>>  LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>>  http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>
>>>  _______________________________________________
>>>  LLVM Developers mailing list
>>>  LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>>  http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pr12110.patch
Type: application/octet-stream
Size: 5370 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20120308/e0fa5cc5/attachment.obj>


More information about the llvm-dev mailing list