<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On 25 August 2015 at 18:49, Mike Shah via llvm-dev <span dir="ltr"><<a href="mailto:llvm-dev@lists.llvm.org" target="_blank">llvm-dev@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><span class=""><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">> I'm not familiar with how LLVM will optimize or behave given:</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">></span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">> struct F { int }</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">></span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">> Struct G { int, int }</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">></span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">> Struct H { F, int }</span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">></span><br style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px">> Is there a difference between G & H w.r.t to optimizations?</span><br></div><div style="font-size:12.8000001907349px"><span style="font-size:12.8000001907349px"><br></span></div></span><div style="font-size:12.8000001907349px">%struct.F = type { i32 }<br></div><div style="font-size:12.8000001907349px">%struct.G = type { i32, i32 }</div><div style="font-size:12.8000001907349px">%struct.H = type { %struct.F, i32 }</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">Without optimizations you will get something like the above.</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">It may be worthwhile to cook up a small example using the structs, and then run:</div></div></blockquote><div><br></div><div>Note that it's likely quite sensitive exactly how these data structures are used - for example, the compiler may make quite different optimisations if you use them from a  pointer or as direct local variables.<br><br></div><div>[And this is why I asked for more specifics regarding "what type of optimisations"]<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">clang -emit-llvm -S -O0 experiment.cpp -o WithO0.ll<br></div><div style="font-size:12.8000001907349px">clang -emit-llvm -S -O3 experiment.cpp -o WithO3.ll</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">(Or you can use opt and -whatever_optimization) to see the output for specific optimizations.</div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">Then you can compare what the outputs are.</div><div style="font-size:12.8000001907349px">I then like using diff to compare:<br></div><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">diff -y W 80 With WithO0.ll WithO3.ll</div></div></blockquote><div><br></div><div>For anything but a really trivial example, you'd surely get a lot of differences that are completely unrelated to the  data structures used, confusing the changes related to the struct form. <br><br></div><div>I would, instead, write code that does the same operations using the struct G and struct H examples in separate files and see what the compiler generates (with varying optimisation levels). <br><br>--<br></div><div>Mats<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div style="font-size:12.8000001907349px"><br></div><div style="font-size:12.8000001907349px">If you need more help building an example to see how optimizations propagate, I can try to make a small example to explore this.</div><div><div><div dir="ltr"><div>_______________________________</div><div><div>Mike Shah<br>Ph.D. Student</div><div>Tufts University</div><div><a href="http://michaeldshah.net/" target="_blank">http://michaeldshah.net</a></div></div></div></div></div>
</div>
<br>_______________________________________________<br>
LLVM Developers mailing list<br>
<a href="mailto:llvm-dev@lists.llvm.org">llvm-dev@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
<br></blockquote></div><br></div></div>