Dear all,
Good day to you. Is it possible to have forced application of loop
unrolling or any other loop optimization ? I have tried applying loop
unrolling on the following code. However, the optimization has not been
applied by Clang.
*Code (code.c)*
int main()
{
int i1, i2, N;
int In[50], A[50], D[50];
N = 25;
A[0] = In[0] + 5;
#pragma clang loop unroll (enable)
for(i1 = 1; i1 <= 25; i1++)
{
A[i1] = In[i1];
D[i1] = A[i1];
}
return D[N];
}
*The applied commands*
1. clang -S -emit-llvm code.c -o code.ll -Xclang -disable-O0-optnon
2. opt -loop-unroll -S code.ll -o code-opt.ll -opt-bisect-limit=300
-unroll-count=3 -print-after=loop-unroll
Regards,
Sudakshina
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20210614/6bce5584/attachment.html>
Hi Sudakshina, Add -sroa (or mem2reg) to your second command to simplify the IR in a way loop unroll can deal with: https://godbolt.org/z/refxnMcf3 I removed options that are not needed in the link above. Hope this helps, Johannes On 6/14/21 8:23 AM, Sudakshina Dutta via llvm-dev wrote:> Dear all, > > Good day to you. Is it possible to have forced application of loop > unrolling or any other loop optimization ? I have tried applying loop > unrolling on the following code. However, the optimization has not been > applied by Clang. > > *Code (code.c)* > int main() > { > int i1, i2, N; > int In[50], A[50], D[50]; > > N = 25; > A[0] = In[0] + 5; > #pragma clang loop unroll (enable) > for(i1 = 1; i1 <= 25; i1++) > { > A[i1] = In[i1]; > D[i1] = A[i1]; > } > return D[N]; > } > > *The applied commands* > > 1. clang -S -emit-llvm code.c -o code.ll -Xclang -disable-O0-optnon > 2. opt -loop-unroll -S code.ll -o code-opt.ll -opt-bisect-limit=300 > -unroll-count=3 -print-after=loop-unroll > > Regards, > Sudakshina > > > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
For forcing transformations via source code annotations, see [1]. However, there may be other reasons for an optimization to be not implied, such as the loop not having been normalized. See [2] [1] https://clang.llvm.org/docs/LanguageExtensions.html#extensions-for-loop-hint-optimizations [2] https://llvm.org/docs/LoopTerminology.html Michael Am Mo., 14. Juni 2021 um 08:23 Uhr schrieb Sudakshina Dutta via llvm-dev < llvm-dev at lists.llvm.org>:> Dear all, > > Good day to you. Is it possible to have forced application of loop > unrolling or any other loop optimization ? I have tried applying loop > unrolling on the following code. However, the optimization has not been > applied by Clang. > > *Code (code.c)* > int main() > { > int i1, i2, N; > int In[50], A[50], D[50]; > > N = 25; > A[0] = In[0] + 5; > #pragma clang loop unroll (enable) > for(i1 = 1; i1 <= 25; i1++) > { > A[i1] = In[i1]; > D[i1] = A[i1]; > } > return D[N]; > } > > *The applied commands* > > 1. clang -S -emit-llvm code.c -o code.ll -Xclang -disable-O0-optnon > 2. opt -loop-unroll -S code.ll -o code-opt.ll -opt-bisect-limit=300 > -unroll-count=3 -print-after=loop-unroll > > Regards, > Sudakshina > _______________________________________________ > LLVM Developers mailing list > llvm-dev at lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210615/c567a6b7/attachment.html>