| Age | Commit message (Collapse) | Author |
|
|
|
|
|
ZJIT: Support invokeblock insn
Basically like other send-ish insns, except that it doesn't pop the receiver.
|
|
|
|
|
|
Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>
|
|
* failing test for ObjToString optimization with GuardType
* profile ObjToString receiver and rewrite with guard
* adjust integration tests for objtostring type guard optimization
* Implement new GuardTypeNot HIR; objtostring sends to_s directly on profiled nonstrings
* codegen for GuardTypeNot
* typo fixes
* better name for tests; fix side exit reason for GuardTypeNot
* revert accidental change
* make bindgen
* Fix is_string to identify subclasses of String; fix codegen for identifying if val is String
|
|
This allows for more precise tracking of stats programmatically
which is particularly useful for our nightly benchmarking suite.
- Define rust function
- Expose to C
- Wrap with Ruby API
- Add a test
|
|
* ZJIT: Allow label generation above 19 bits
* Refactor emit_conditional_jump to use generate_branch
* Make branching functionality generic across Label and CodePtr
* ZJIT: Add > 19 bit jump test and helper function
* Remove an empty line
---------
Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>
|
|
|
|
Similar to YJIT's --yjit-stats=quiet, this option allows ZJIT to collect
statistics and make them available via the Ruby API without printing them
at exit. This is useful for programmatic access to stats without the
output noise.
- Added print_stats field to Options struct
- Modified option parsing to support --zjit-stats=quiet
- Added rb_zjit_print_stats_p primitive to check if stats should be printed
- Updated zjit.rb to only register at_exit handler when print_stats is true
- Update the help text shown by `ruby --help` to indicate that
--zjit-stats now accepts an optional =quiet parameter.
- Added test for --zjit-stats=quiet option
|
|
Ref: https://github.com/ruby/ruby/pull/14134#issuecomment-3207733725
We can't safely use low-bit pointer tagging anymore because `RTypedData.type`
lines up with `RData.dfree` and there is no aligment guarantee on function
pointers, as evidenced by `memcached` and `gpgme` gems.
We also can't use FL_USER* for this, because extensions may use these
for other purposes.
Using a general flag for this is a bit unfortunate, as general flags
are hard to come by, however I recently freed several of them, and
we still have two or three free ones left.
|
|
|
|
|
|
Co-authored-by: Max Bernstein <ruby@bernsteinbear.com>
|
|
This fixes:
```
warning: unused import: `ParseError`
--> zjit/src/codegen.rs:20:61
|
20 | use crate::hir::{Const, FrameState, Function, Insn, InsnId, ParseError};
| ^^^^^^^^^^
|
= note: `#[warn(unused_imports)]` on by default
```
|
|
ZJIT: Add patchpoint for TracePoint activation
Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>
Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>
|
|
* ZJIT: Support compiling ISEQs for opt_pc = 0
* Test send with optional arguments
|
|
|
|
|
|
|
|
|
|
ZJIT: Handle opt_case_dispatch insn
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ZJIT: Remove JITed code after TracePoint is enabled
|
|
|
|
|
|
* Failing optimization tests for NewRangeFixnum
* NewRangeFixnum general idea
* Use gen_prepare_call_with_gc on gen_new_range_fixnum; add additional hir tests
* Remove unused NewRange rewrite trigger when neither range is Fixnum literal
* Remove misleading 'profiled' name in range optimization tests
* Adjustments as per review comments
* Include new_range_fixnum tests
* remove non-ASCII character from comments as per PR review
* remove non-ASCII character from comments as per PR review
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Specialize monomorphic `GetIvar` into:
* `GuardType(HeapObject)`
* `GuardShape`
* `LoadIvarEmbedded` or `LoadIvarExtended`
This requires profiling self for `getinstancevariable` (it's not on the operand
stack).
This also optimizes `GetIvar`s that happen as a result of inlining
`attr_reader` and `attr_accessor`.
Also move some (newly) shared JIT helpers into jit.c.
|
|
This was fixed in https://github.com/ruby/ruby/pull/14308
Thanks, Stan, for noticing.
Fixes https://github.com/Shopify/ruby/issues/703
|
|
|
|
|
|
* ZJIT: Add code_region_bytes stat
* Share more logic among --zjit and --zjit-stats
|
|
Depending on the user's warning level, getting certain global variables
may lead to calling `Warning#warn`, which can be redefined by the user.
This fixes another `bootstraptest/test_yjit.rb` failure.
|
|
I'm sorry.
Another follow-up on https://github.com/ruby/ruby/pull/14378
|
|
follow-up on https://github.com/ruby/ruby/pull/14378
|
|
This catches both the interpreter-JIT and JIT-JIT cases.
Fixes https://github.com/Shopify/ruby/issues/719
|
|
|