-
Notifications
You must be signed in to change notification settings - Fork 5.4k
ZJIT: Split Send into Lookup+Call #13400
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
I will absolutely be cleaning up the commits in this PR for rebasing |
Also, I need to figure out some stuff before landing like a codegen implementation of |
Is it intentional that the ZJIT CI is failing at the moment? |
Well it's not exactly intentional but I don't have codegen for CallMethod because I can't figure out a way to do it yet :( It's currently crashing/assert failing/... |
But if you have feedback on the rest of the (admittedly big, kind of disorganized) PR separate from that, I would be interested. The CallMethod codegen is hopefully separate/isolated enough |
❌ Tests Failed✖️no tests failed ✔️61990 tests passed(1 flake) |
This helps method lookups get resolved.
9974149
to
9e4b269
Compare
* Need to spill receiver and arguments to the VM stack as arguments * Don't use cpush; cpush always pushes two words * Save SP * Align stack
Split
SendWithoutBlock{,Direct}
intoLookupMethod
andCallMethod
. From there,centralize the profile- and type-driven rewrites to one function:
optimize_lookup_method
. This determines if we know the call target at compiletime.
Then, we can rewrite
CallMethod
to do something with a known-constant target.If we know it at compile-time, we can specialize to
CallCFunc
orCallIseq
(or more, like a hypothetical
GetInstanceVariable
, in the future).Also,
Fixes Shopify#577
Co-authored-by: Aaron Patterson [email protected]