[llvm-dev] LLVM as a back end for HHVM

Brett Simmers via llvm-dev llvm-dev at lists.llvm.org
Tue Sep 8 17:29:13 PDT 2015


On 9/8/15 9:35 AM, Philip Reames wrote:
> On the VM state synching side of things, I'm curious about the tradeoffs
> involved in the approach you've used.  I'm guessing from what you said
> that you're essentially pre-reserving a set of allocas for the spill
> locations, somehow registering those with your runtime once, then
> emitting stores down the unlikely path into those allocas.  Is that
> roughly right?

It's even simpler than that: the stores to spill VM state go directly to 
the VM locations where those values belong. We only ever side-exit at 
bytecode boundaries, so every live value has a place to live on the eval 
stack or in a local variable (every PHP function has a fixed number of 
local variables, and space for those is allocated on the eval stack). 
This means that the side-exit path doesn't have to know if the next 
bytecode is going to executed by the interpreter or by more jitted code, 
since they'll both read values from the same locations.

There are some downsides to this, of course, and we've been thinking 
about ways to have a faster ABI between snippets of jitted code, like 
passing the top n elements of the eval stack in registers. But we have 
no concrete plans to do that in the near future.

> How are you handling things like constants and duplicate values
> appearing in the VM state?  Our experience has been that constants are
> fairly common and so are duplicate values (particularly when combined
> with GC state).  It would seem like your frame sizes would be inflated
> if you had to pre-reserve space for each constant and each copy of a
> value.  Have you found this to be true?  If so, has it been problematic
> for you?

If I'm understanding this question correctly it doesn't apply to our 
situation given my answer to the previous question, but let me know if 
that's not the case and I can try to expand :). We don't currently have 
a GC - everything is done using reference counting, though we do have a 
few people working on changing that.

-Brett


More information about the llvm-dev mailing list