[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