summaryrefslogtreecommitdiff
path: root/yjit_codegen.c
AgeCommit message (Collapse)Author
2021-10-20Implement opt_aset as interpreter handler callMaxime Chevalier-Boisvert
2021-10-20Implement opt_mod as call to interpreter function (#29)Maxime Chevalier-Boisvert
2021-10-20Implement opt_eq by calling interpreter function (#28)Maxime Chevalier-Boisvert
2021-10-20Implement branchnil bytecode (#26)Maxime Chevalier-Boisvert
2021-10-20Check for easy-to-handle cases of block param (#24)Alan Wu
In some cases, methods taking block parameters don't require extra paramter setup. They are fairly popular in railsbench.
2021-10-20Implement send with alias method (#23)Maxime Chevalier-Boisvert
* Implement send with alias method * Add alias_method tests
2021-10-20Implement send with blocksAlan Wu
* Implement send with blocks Not that much extra work compared to `opt_send_without_block`. Moved the stack over flow check because it could've exited after changes are made to cfp. * rename oswb counters * Might as well implement sending block to cfuncs * Disable sending blocks to cfuncs for now * Reconstruct interpreter sp before calling into cfuncs In case the callee cfunc calls a method or delegates to a block. This also has the side benefit of letting call sites that sometimes are iseq calls and sometimes cfunc call share the same successor. * only sync with interpreter sp when passing a block Co-authored-by: Maxime Chevalier-Boisvert <maximechevalierb@gmail.com> Co-authored-by: Aaron Patterson <aaron.patterson@shopify.com>
2021-10-20Implement dupn for n==2 (only case used in RDoc/railsbench) (#20)Maxime Chevalier-Boisvert
* Implement dupn for n==2 (only case used in RDoc/railsbench) * Implement adjuststack bytecode
2021-10-20Use rb_ivar_get() for general case of getivar (#17)Alan Wu
* Use rb_ivar_get() for general case of getivar Pretty straight forward. Buys about 1% coverage on railsbench. * Update yjit_codegen.c Co-authored-by: Maxime Chevalier-Boisvert <maximechevalierb@gmail.com>
2021-10-20Implement setn bytecode (#15)Maxime Chevalier-Boisvert
2021-10-20Implement calls to methods with simple optional paramsAlan Wu
* Implement calls to methods with simple optional params * Remove unnecessary MJIT_STATIC See comment for MJIT_STATIC. I added it not knowing whether it's required because the function next to it has it. Don't use it and wait for problems to come up instead. * Better naming, some comments * Count bailing on kw only iseqs On railsbench: ``` opt_send_without_block exit reasons: bmethod 59729 (27.7%) optimized_method 59137 (27.5%) iseq_complex_callee 41362 (19.2%) alias_method 33346 (15.5%) callsite_not_simple 19170 ( 8.9%) iseq_only_keywords 1300 ( 0.6%) kw_splat 1299 ( 0.6%) cfunc_ruby_array_varg 18 ( 0.0%) ```
2021-10-20Implement greedy versioning. Refactor versioning logic. (#10)Maxime Chevalier-Boisvert
* Implement eager versioning. Refactor versioning logic. * Add --version-limit and --greedy-versioning command-line args
2021-10-20Make gen_opt_aref() delegate to gen_opt_send_without_block() (#9)Alan Wu
Basically mirroring the interpreter for the general case.
2021-10-20Comment editsAlan Wu
2021-10-20Aesthetic changes and add missing counterMaxime Chevalier-Boisvert
2021-10-20EnglishAlan Wu
2021-10-20Use jmp with memory operand for smaller code sizeAlan Wu
2021-10-20YJIT: use a context-free landing pad to optimize `leave`Alan Wu
This allows gen_leave to always do an indirect to cfp->jit_return.
2021-10-20Don't check if value is immediate if context has type infoMaxime Chevalier-Boisvert
2021-10-20Remove redundant movMaxime Chevalier-Boisvert
2021-10-20Fix frozen check (use jnz) and move heap object check.Maxime Chevalier-Boisvert
2021-10-20Improve set instance variableAaron Patterson
This commit improves the set ivar implementation.
2021-10-20Pass self type through method callsMaxime Chevalier-Boisvert
2021-10-20Malloc branch entries (#112)Maxime Chevalier-Boisvert
* Malloc branch entries * Add ASM comment for stack overflow check * WIP * Fix branch GC code. Add rb_darray_remove_unordered(). * Fix block end_pos after branch rewriting. Remove dst_patched bits.
2021-10-20Merge pull request #114 from Shopify/yjit-dup-commentsMaxime Chevalier-Boisvert
YJIT: Avoid adding duplicate code comments
2021-10-20Switch to 2-comparison heap object checkMaxime Chevalier-Boisvert
2021-10-20Improve codegen and type tracking in putobjectMaxime Chevalier-Boisvert
2021-10-20Remove debug printsMaxime Chevalier-Boisvert
2021-10-20Fix local type tracking in getlocal, setlocal. Add test.Maxime Chevalier-Boisvert
2021-10-20WIPMaxime Chevalier-Boisvert
2021-10-20Use a insn_opnd instead of a boolAlan Wu
2021-10-20move assert. opnd.idx doesn't make sense for OPND_SELFAlan Wu
2021-10-20YJIT: implement calls to ivar getter methodsAlan Wu
2021-10-20Re-enable local type tracking, until first callMaxime Chevalier-Boisvert
2021-10-20Update yjit_codegen.cMaxime Chevalier-Boisvert
2021-10-20Factor our guard_two_fixnums(). Implement opt_or.Maxime Chevalier-Boisvert
2021-10-20Introduce concept of YJIT instruction operandsMaxime Chevalier-Boisvert
2021-10-20YJIT: Fancier opt_getinlinecacheAlan Wu
Make sure `opt_getinlinecache` is in a block all on its own, and invalidate it from the interpreter when `opt_setinlinecache`. It will recompile with a filled cache the second time around. This lets YJIT runs well when the IC for constant is cold.
2021-10-20YJIT: add comments to disassemblyAlan Wu
Introduce a new macro `ADD_COMMENT(cb, comment)` that records a comment for the current write position in the code block. Co-authored-by: Maxime Chevalier-Boisvert <maximechevalierb@gmail.com> Co-authored-by: Aaron Patterson <aaron.patterson@shopify.com>
2021-10-20YJIT: make ratio_in_yjit more accurateAlan Wu
Don't count instructions that take exit to the interpreter.
2021-10-20Disable local type tracking for nowMaxime Chevalier-Boisvert
2021-10-20Keep track of local types in the contextMaxime Chevalier-Boisvert
2021-10-20use ctx_stack_push_self()Maxime Chevalier-Boisvert
2021-10-20Part 1 of improved type tracking logicMaxime Chevalier-Boisvert
2021-10-20First sketch at temp type mappingMaxime Chevalier-Boisvert
2021-10-20Fix GCC warningsAlan Wu
Mostly unused and uninitialized warnings here and there
2021-10-20Add a commentAlan Wu
2021-10-20Track interpreter return as an exit reason for leave instrMaxime Chevalier-Boisvert
2021-10-20Implement opt_gtMaxime Chevalier-Boisvert
2021-10-20Factor out protected callee guard, check for private calleesAlan Wu
We didn't need the private check before because we were lifting from the interpreter's cache, and the interpreter only caches when visibility checks go through.