[llvm-dev] CallSiteSplitting and musttail calls

Fedor Indutny via llvm-dev
Sat, 24 Feb 2018 20:58:35 -0000

Update:

I was able to make progress on it today ( See
https://reviews.llvm.org/D43729 ). Apparently my problems were:

* Iterating through the instruction/block list after erasing
block/instruction
* Trying to split block after removing one predecessor

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.

Is it expected behavior, or am I doing something wrong?

Thanks,
Fedor.

On Sat, Feb 24, 2018 at 2:16 AM, Fedor Indutny <fedor at indutny.com>
wrote:

> Hello!
>
> I've discovered that `CallSiteSplitting` optimization doesn't
support
> musttail calls. The easiest fix as it stands is disabling it for such call
> sites: https://reviews.llvm.org/D43729 . However, I'm not happy with
such
> contribution.
>
> My more sophisticated attempt has failed due to my poor understanding of
> llvm internals. Here is the attempted patch: https://gist.github.
> com/indutny/240c33522563ebd633613a903479d5e6
>
> I'd greatly appreciate any help with it.
>
> Just in case, there're few questions that I'm trying to find
answers for:
>
> * Why replacing `removeFromParent()` with `eraseFromParent` breaks the
> code?
> * How to properly remove predecessors from the resulting Tail block?
> * How to remove the Tail block itself when we're done?
>
> Thank you,
> Fedor.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20180224/452de0ba/attachment.html>