[PATCH] ScalarEvolution backedge taken count computation on LT and GT rewrite

Michele Scandale michele.scandale at gmail.com
Mon Oct 28 16:03:28 PDT 2013


Kindly up.

-Michele

On 10/24/2013 12:47 AM, Michele Scandale wrote:
> Hi atrick,
>
> Hi all,
>
> here a little rewrite of the functions used to compute the backedge taken count of a loop on LT and GT comparisons.
>
> I decided to split the handling of LT and GT cases becasue the trick "a > b == -a < -b" in some cases prevents the trip count computation due to the multiplication by -1 on the two operands of the comparison. This issue comes from the conservative computation of value range of SCEVs: taking the negative SCEV of an expression that have a small positive range (e.g. [0,31]), we would have a SCEV with a fullset as value range.
>
> Indeed, in the new rewritten function I tried to better handle the maximum backedge taken count computation when MAX/MIN expression are used to handle the cases where no entry guard is found.
>
> Some test have been modified in order to check the new value correctly (I manually check them and reasoning on possible overflow the new values seem correct).
>
> I finally added a new test case related to the multiplication by -1 issue on GT comparisons.
>
> Thanks in advance.
>
> Best regards,
> -Michele
>
> http://llvm-reviews.chandlerc.com/D2008
>
> Files:
>    include/llvm/Analysis/ScalarEvolution.h
>    lib/Analysis/ScalarEvolution.cpp
>    test/Analysis/ScalarEvolution/2008-11-18-Stride1.ll
>    test/Analysis/ScalarEvolution/2008-11-18-Stride2.ll
>    test/Analysis/ScalarEvolution/2008-12-15-DontUseSDiv.ll
>    test/Analysis/ScalarEvolution/bounded_decrement_loop.ll
>    test/Analysis/ScalarEvolution/trip-count3.ll
>    test/Analysis/ScalarEvolution/trip-count9.ll
>    test/Transforms/IndVarSimplify/loop_evaluate_6.ll
>    test/Transforms/IndVarSimplify/no-iv-rewrite.ll
>




More information about the llvm-commits mailing list