[llvm-dev] Loop splitting as a special case of unswitch

Philip Reames via llvm-dev llvm-dev at lists.llvm.org
Thu Feb 22 20:41:09 PST 2018


Take a look at the InductiveRangeCheckElimination pass in tree.  It's 
not on by default, but if you're wiling to use a custom pass pipeline 
you can get this case.

Philip

On 02/22/2018 01:15 PM, Jun Lim via llvm-dev wrote:
> For the example code below,
>    int L = M + 10;
>    for (k = 1 ; k <=L; k++) {
>      dummy();
>      if (k < M)
>        dummy2();
>    }
> , we can split the loop into two parts like :
>
>    for (k = 1 ; k != M; k++) {
>      dummy();
>      dummy2();
>    }
>    for (; k <=L; k++) {
>      dummy();
>    }
>
> By splitting the loop, we can remove the conditional block in the loop and indirectly increase vectorization opportunities. If we know that a loop has a conditional branch that is always true for one part of the iteration space and false for the other, then we can split such loop into two parts. As far as I check, GCC seems to handle this already (-fsplit-loops). For me, it seem possible to handle this as a special case of the loop-unswitch. Does anyone have any opinion about this transformation?
>
> Thanks,
> Jun
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev




More information about the llvm-dev mailing list