<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small">Hi-</div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small">Theoretically, alloca instructions can appear anywhere within the function body, but practically, it is better to keep them as a one cluster at the beginning of the entry basic block for better optimization opportunities. </div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small">And, I think the front-end code gen phase mostly succeeds in clustering all alloca instructions at the beginning of the entry basic block. Nevertheless, it is not guaranteed always. One more case is inlining - which may leave alloca instructions other than in entry block.</div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small">So, I am thinking of adding a new late IR pass (after inlining) which deliberately moves all allocas which appear elsewhere to the beginning of the entry block.</div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small">Now my questions are:</div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small">(1) Can we neatly implement this pass? For example, what would happen if an alloca which appears within a loop is moved to the entry block?</div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small">(2) Is there a possibility where some other later pass(es) other than inlining also can result in inserting alloca elsewhere, so the new proposed pass needs to be invoked multiple times?</div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small">The main reason for the above ask is - I have my own doubt that if moving alloca to the entry block is such an easy task why not anyone from the community did not attempt it till date considering the importance of keeping the allocas at the beginning of the entry block for better optimization opportunities. If there are genuine reason for that, it is better to know it instead of blindly attempting to implement the pass.</div><div class="gmail_default" style="font-family:"trebuchet ms",sans-serif;font-size:small"><br></div><div><div dir="ltr" class="gmail_signature"><div dir="ltr"><font face="trebuchet ms, sans-serif">Thanks,</font><div><font face="trebuchet ms, sans-serif">Mahesha</font></div></div></div></div></div></div></div></div></div></div></div>