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

Nick Lewycky nicholas at mxc.ca
Wed Mar 7 00:20:01 PST 2012


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




More information about the llvm-dev mailing list