| Age | Commit message (Collapse) | Author | |
|---|---|---|---|
| 2021-10-20 | Allow to compile with --yjit-stats support but not the full RUBY_DEBUG | Jean Boussier | |
| RUBY_DEBUG have a very significant performance overhead. Enough that YJIT with RUBY_DEBUG is noticeably slower than the interpreter without RUBY_DEBUG. This makes it hard to collect yjit-stats in production environments. By allowing to collect JIT statistics without the RUBy_DEBUG overhead, I hope to make such use cases smoother. | |||
| 2021-10-20 | Use callee-saved regs for REG_SP, REG_EP, REG_CFP | John Hawthorn | |
| 2021-10-20 | Detach mapping to local in ctx_set_local_type | John Hawthorn | |
| Similar to the previous fix to ctx_clear_local_types, we must detach mappings to a local if we are changing its value. | |||
| 2021-10-20 | Fix stack size check for ctx_get_opnd_type | John Hawthorn | |
| Previously all stack operands would become unknown once the stack grew beyond a certain size. This worked, but unnecessarily hid available information. | |||
| 2021-10-20 | Move yjit_type_of_value into yjit_core.c | John Hawthorn | |
| 2021-10-20 | Implement verify_ctx for debugging | John Hawthorn | |
| 2021-10-20 | Don't generate entry point when PC != 0 | John Hawthorn | |
| If we hit this at PC > 0 (ie. with an optional argument) the provided types and context are likely incorrect and it is likely this block can't be used. | |||
| 2021-10-20 | Allow upgrading first N types when stack is large | John Hawthorn | |
| 2021-10-20 | Improve comments for mapping functions | John Hawthorn | |
| 2021-10-20 | Fix ctx_clear_local_types | John Hawthorn | |
| 2021-10-20 | Make ctx_diff aware of mappings | John Hawthorn | |
| 2021-10-20 | Introduce ctx_{get,set}_opnd_mapping | John Hawthorn | |
| 2021-10-20 | Rename to ctx_upgrade_opnd_type | John Hawthorn | |
| 2021-10-20 | Make sure we can still compile with the JIT disabled | Aaron Patterson | |
| If `--disable-jit-support` is passed to configure, then `jit_func` is removed from the iseq body and we can't compile YJIT. This commit detects when the JIT function pointer is gone and disables YJIT in that case. | |||
| 2021-10-20 | Fix BOP invalidation | Aaron Patterson | |
| Instead of mutating the iseqs, just clear the JIT function. | |||
| 2021-10-20 | Add a guard that we start executing on the first PC | Aaron Patterson | |
| Methods with optional parameters don't always start executing at the first PC, but we compile all methods assuming that they do. This commit adds a guard to ensure that we're actually starting at the first PC for methods with optional params | |||
| 2021-10-20 | fix alignment | Aaron Patterson | |
| 2021-10-20 | Flatten mappings when clearing locals | John Hawthorn | |
| We clear locals when we know their values might change (ex. when performing a method call). However previously values on the stack which were originally pushed from a local would still point back to that local. With this commit, when clearing locals, we'll now iterate over the mappings of the stack and copy the known type from the local to the stack mapping, removing the association to the local. This should mean both that we'll retain any information we already know about the local type, and that if a local is modified we won't incorrectly infer it's new type from the existing value on the stack. | |||
| 2021-10-20 | Convert yjit static stat variables to counters | Noah Gibbs | |
| 2021-10-20 | Try running with more YJIT options in CI to surface more bugs | Maxime Chevalier-Boisvert | |
| 2021-10-20 | Update comment | Maxime Chevalier-Boisvert | |
| 2021-10-20 | Remove #define MAX_VERSIONS, now using command-line option | Maxime Chevalier-Boisvert | |
| 2021-10-20 | Fix issue in yjit_free_block causing segfault | Maxime Chevalier-Boisvert | |
| This addresses issue #55 | |||
| 2021-10-20 | Fix assertions in `invalidate_block_version()`, add small repro (#14) | Maxime Chevalier-Boisvert | |
| * Fix block invalidation assertions * Add Alan's small repro for double invalidation bug | |||
| 2021-10-20 | Implement 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-20 | Pass self type through method calls | Maxime Chevalier-Boisvert | |
| 2021-10-20 | Malloc 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-20 | Temporarily increase MAX_BRANCHES until we have a better solution | Maxime Chevalier-Boisvert | |
| 2021-10-20 | Diff the local types in ctx_diff() | Maxime Chevalier-Boisvert | |
| 2021-10-20 | move assert. opnd.idx doesn't make sense for OPND_SELF | Alan Wu | |
| 2021-10-20 | Fix bug in ctx_set_local_type() | Maxime Chevalier-Boisvert | |
| 2021-10-20 | Re-enable local type tracking, until first call | Maxime Chevalier-Boisvert | |
| 2021-10-20 | Assert for running out of branches in all builds | Alan Wu | |
| 2021-10-20 | Introduce concept of YJIT instruction operands | Maxime Chevalier-Boisvert | |
| 2021-10-20 | YJIT: Fancier opt_getinlinecache | Alan 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-20 | Fix stack-use-after-scope in gen_direct_jump() | Alan Wu | |
| ASAN can catch these type of things for us, but the scraper can't handle ASAN :/. To be more resilient to refactoring, extend the lifetime of `generic_ctx` in branch_stub_hit() too. | |||
| 2021-10-20 | Add flag bits to avoid compiling stubs multiple times. | Maxime Chevalier-Boisvert | |
| Fixes bug involving ractors and branch stubs. | |||
| 2021-10-20 | Keep track of local types in the context | Maxime Chevalier-Boisvert | |
| 2021-10-20 | Add ctcx_stack_push_local() | Maxime Chevalier-Boisvert | |
| 2021-10-20 | Add comments and asserts for clarity | Maxime Chevalier-Boisvert | |
| 2021-10-20 | Readd const arguments | Maxime Chevalier-Boisvert | |
| 2021-10-20 | Fix branch rewrite issue | Maxime Chevalier-Boisvert | |
| 2021-10-20 | Update yjit_core.c | Maxime Chevalier-Boisvert | |
| 2021-10-20 | YJIT: adjust branch shape properly when target already exists | Alan Wu | |
| The old code decides branch->shape based on the write position of the native code block, which is unsound in case the block already exists and no new code is written to the write position. Make this decision with the start address of the target block instead. Also handle when the branch becomes smaller after patching. | |||
| 2021-10-20 | Fix type_diff logic after Alan pointed out errors | Maxime Chevalier-Boisvert | |
| 2021-10-20 | Part 1 of improved type tracking logic | Maxime Chevalier-Boisvert | |
| 2021-10-20 | Stop all other ractors when patching machine code | Alan Wu | |
| 2021-10-20 | Fix issue with version matching logic | Maxime Chevalier-Boisvert | |
| 2021-10-20 | Polymorphic opt_send_without_block | Alan Wu | |
| 2021-10-20 | Get rid of dependency on rb_call_cache | Alan Wu | |
