<div dir="ltr"><div>Dear Prof. Johannes Doerfert,</div><div><br></div><div>Sorry to disturb you again. The code LLVM IR that you have shared is not only the result of applying x86-64 clang 12.0.0 applied with -emit-llvm -Xclang -disable-O0-optnone options. You might have applied some other options. The reason I am asking is that the LLVM IR code which is shared has a header and footer which generally do not appear if a code is subjected to godbolt explorer.  If the LLVM IR code generated by applying x86-64 clang 12.0.0 applied with -emit-llvm -Xclang -disable-O0-optnone options is subjected to opt with -sroa -loop-unroll -unroll-count=3 options, some error is shown. I am very new to compiler explorer. I shall be grateful if you kindly reply.</div><div><br></div><div>Thanks,</div><div>Sudakshina<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Jun 15, 2021 at 9:01 AM Sudakshina Dutta <<a href="mailto:sudakshina@iitgoa.ac.in">sudakshina@iitgoa.ac.in</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Thanks a lot Mr. Johannes Doerfert.<br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jun 14, 2021 at 8:07 PM Johannes Doerfert <<a href="mailto:johannesdoerfert@gmail.com" target="_blank">johannesdoerfert@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi Sudakshina,<br>
<br>
Add -sroa (or mem2reg) to your second command to simplify the IR in a <br>
way loop unroll can deal with:<br>
<br>
<a href="https://godbolt.org/z/refxnMcf3" rel="noreferrer" target="_blank">https://godbolt.org/z/refxnMcf3</a><br>
<br>
I removed options that are not needed in the link above.<br>
<br>
Hope this helps,<br>
   Johannes<br>
<br>
<br>
On 6/14/21 8:23 AM, Sudakshina Dutta via llvm-dev wrote:<br>
> Dear all,<br>
><br>
> Good day to you. Is it possible to have forced application of loop<br>
> unrolling or any other loop optimization ? I have tried applying loop<br>
> unrolling on the following code. However, the optimization has not been<br>
> applied by Clang.<br>
><br>
> *Code (code.c)*<br>
> int main()<br>
> {<br>
>      int i1, i2, N;<br>
>      int In[50], A[50], D[50];<br>
><br>
>      N = 25;<br>
>      A[0] = In[0] + 5;<br>
>      #pragma clang loop unroll (enable)<br>
>      for(i1 = 1; i1 <= 25; i1++)<br>
>      {<br>
>              A[i1] = In[i1];<br>
>              D[i1] = A[i1];<br>
>      }<br>
>      return D[N];<br>
> }<br>
><br>
> *The applied commands*<br>
><br>
>     1. clang -S -emit-llvm code.c  -o code.ll -Xclang -disable-O0-optnon<br>
>     2. opt -loop-unroll -S code.ll -o code-opt.ll -opt-bisect-limit=300<br>
>     -unroll-count=3 -print-after=loop-unroll<br>
><br>
> Regards,<br>
> Sudakshina<br>
><br>
><br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a><br>
> <a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
</blockquote></div>
</blockquote></div>