[llvm-dev] Function with multi return path?

TONGARI J via llvm-dev llvm-dev at lists.llvm.org
Wed Jun 7 18:45:00 PDT 2017

2017-06-07 23:42 GMT+08:00 David Chisnall <David.Chisnall at cl.cam.ac.uk>:
> No, but you can take the address of the block, pass it to the function,
> have the function return to the alternate return address and then (in the
> caller) jump immediately to the address in the return register.

Yeah, that's the closest way we can get in LLVM at this moment.

> Note that this (along with your original suggestion) will have really poor
> interaction with any modern branch predictor.

In my idea the caller and callee have full knowledge about the branch
destinations, so if the optimizer inlines the callee, it can jump to the
alternate destinations w/o indirection.
In case it's not inlined, the normal return path should incur no overhead
as well, and for alternate return paths it's just a matter of setting the
return register.
But as I said, I'm not an expert so I don't really know whether what I
described is implementable in LLVM on all architectures.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170608/6a331c31/attachment.html>

More information about the llvm-dev mailing list