<div dir="ltr"><div dir="ltr"><div dir="ltr">If you use -O0 to generate LLVM IR you must pass -disable-O0-optnone or it cannot be optimized. If you look at the LLVM IR for #2 and #3 it will say "optnone" [1] in the attributes which will prevent any optimization like mem2reg [2] from running.<div><br></div><div>[1] <a href="https://clang.llvm.org/docs/AttributeReference.html#optnone">https://clang.llvm.org/docs/AttributeReference.html#optnone</a></div><div>[2] <a href="http://llvm.org/docs/Passes.html#mem2reg-promote-memory-to-register">http://llvm.org/docs/Passes.html#mem2reg-promote-memory-to-register</a><br><div><br></div></div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Feb 12, 2020 at 2:36 AM Priyanka Panigrahi via llvm-dev <<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><br></div><div>Hello,<br></div><div><div><br></div><div>For the following test case, reg.c<div><br></div><div>#include <stdio.h><br><br>int getinput()<br>{<br>      static int u=10;<br>      return u++;<br>}<br><br>int main()<br>{<br><br>     int a,b,c,d,e,f,g;<br>    <br>        a=getinput();<br>        b=getinput();<br>        c=getinput();<br>        d=getinput();<br>        e=getinput();<br>        f=getinput();<br>        g=getinput();<br> <br>      printf("%d %d %d %d %d %d %d\n",a,b,c,d,e,f,g);<br>     a=b=c=d=e=f=g=0;<br>      return 0;<br>}<br></div><div><br></div><div><div><b>1. $clang reg.c -Xclang -disable-O0-optnone -S -emit-llvm -o reg.ll && opt -mem2reg -S reg.ll -o reg.ll && llc --regalloc=greedy reg.ll -o reg.s</b></div><br></div><div><div><b>2. $clang reg.c -Xclang -disable-llvm-passes -S -emit-llvm -o reg.ll && opt -mem2reg -S reg.ll -o reg.ll && llc --regalloc=greedy reg.ll -o reg.s</b></div></div><div><b><br></b></div><div><div><b>3. $clang reg.c -S -emit-llvm -o reg.ll && opt -mem2reg -S reg.ll -o reg.ll && llc --regalloc=greedy reg.ll -o reg.s</b></div></div><div><br></div><div>Only 1. gives the spill code but it deletes the dead stores., 2 and 3 give only allocas. Why so?? </div><div><br></div></div></div><div>How -mem2reg works and what it depends on?</div><div><br></div><div>How to generate the spill code with dead stores?</div><div><br></div><div>Thank you.</div><div><br></div><div>Regards,</div><div>Priyanka</div></div>
_______________________________________________<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>