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

via llvm-dev llvm-dev at lists.llvm.org
Thu Feb 22 14:31:40 PST 2018

On 2018-02-22 16:21, Roman Lebedev wrote:
> On Fri, Feb 23, 2018 at 12:15 AM, Jun Lim via llvm-dev
> <llvm-dev at lists.llvm.org> 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();
>>   }
> I believe i have reported a similar case as
> https://bugs.llvm.org/show_bug.cgi?id=34364

What I meant here is little different from the loop peeling mentioned in 
PR34364. While loop splitting remove the conditional block in the loop 
by breaking the loop into two parts, loop peeling take the first or last 
few iterations out of the loop. I think the loop splitting can cover 
more dynamic cases where the iteration size of each portion is unknown.

>> 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
> Roman.
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

Qualcomm Datacenter Technologies, Inc. as an affiliate of Qualcomm 
Technologies, Inc.
Qualcomm Technologies, Inc. is a member of the Code Aurora Forum, a 
Linux Foundation Collaborative Project.

More information about the llvm-dev mailing list