<div dir="ltr">Update:<br><br>I was able to make progress on it today ( See <a href="https://reviews.llvm.org/D43729">https://reviews.llvm.org/D43729</a> ). Apparently my problems were:<div><br></div><div>* Iterating through the instruction/block list after erasing block/instruction</div><div>* Trying to split block after removing one predecessor</div><div><br>Regarding the latter, it appears that semantics of `DuplicateInstructionsInSplitBetween` change significantly in such case, and it starts to loop indefinitely. The `SplitEdge` function that it calls places all of the instructions into the split block, so that the original block becomes empty.</div><div><br>Is it expected behavior, or am I doing something wrong?<br><br>Thanks,</div><div>Fedor.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Feb 24, 2018 at 2:16 AM, Fedor Indutny <span dir="ltr"><<a href="mailto:fedor@indutny.com" target="_blank">fedor@indutny.com</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">Hello!<div><br></div><div>I've discovered that `CallSiteSplitting` optimization doesn't support musttail calls. The easiest fix as it stands is disabling it for such call sites: <a href="https://reviews.llvm.org/D43729" target="_blank">https://reviews.llvm.<wbr>org/D43729</a> . However, I'm not happy with such contribution.</div><div><br></div><div>My more sophisticated attempt has failed due to my poor understanding of llvm internals. Here is the attempted patch: <a href="https://gist.github.com/indutny/240c33522563ebd633613a903479d5e6" target="_blank">https://gist.github.<wbr>com/indutny/<wbr>240c33522563ebd633613a903479d5<wbr>e6</a></div><div><br></div><div>I'd greatly appreciate any help with it.</div><div><br></div><div>Just in case, there're few questions that I'm trying to find answers for:</div><div><br></div><div>* Why replacing `removeFromParent()` with `eraseFromParent` breaks the code?</div><div>* How to properly remove predecessors from the resulting Tail block?</div><div>* How to remove the Tail block itself when we're done?</div><div><br></div><div>Thank you,</div><div>Fedor.</div></div>
</blockquote></div><br></div>