[llvm-dev] Improved jump-threading in LLVM for finite state automata

Philip Reames via llvm-dev llvm-dev at lists.llvm.org
Wed Sep 23 12:47:57 PDT 2020


No active work on my side, but I have given the topic of threaded 
interpreters (which is what I think you're wanting to produce) a good 
amount of thought.

I'm really not sure that switch is the right canonical form.  The main 
reason being that having a loop over a large switch is very likely to 
encourage code motion which is generally profitable, but harmful in this 
particular context.

I had been thinking down the lines of representing the intepreter as a 
family of mutually recursive functions with a calling convention 
optimized for this case and using a musttail call through a lookup table 
for the dispatch.

I've played with the notion of extending clang with a custom attribute 
for guaranteed tail calls.  I think this is pretty much the only 
extension needed to be able to natively write out a threaded interpreter 
as a set of mutually recursive functions.

This is all thought experiment from my side; I haven't had time to sit 
down and actually prototype any of this.

Philip

On 9/23/20 7:33 AM, Phipps, Alan via llvm-dev wrote:
>
> It is my understanding that the implementation for jump-threading in 
> LLVM is not presently able to effectively optimize code containing a 
> state-machine implemented using a loop + switch.  This is the case, 
> for example, with the Coremark benchmark function 
> core_state_transition().  Bug 42313 was filed to address this in 2019:
>
> https://bugs.llvm.org/show_bug.cgi?id=42313
>
> It appears that GCC improved support for jump threading in 2015 along 
> the same lines:
>
> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54742
>
> Is anyone aware of any plan to do improve LLVM jump-threading along 
> the same lines for LLVM?
>
> Thanks!
>
> Alan Phipps
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200923/a5664191/attachment.html>


More information about the llvm-dev mailing list