| Age | Commit message (Collapse) | Author |
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
|
|
We will (for now) only cache ivar reads from T_OBJECTs.
|
|
This lets us know where to look for an ivar: in the object or indirect
elsewhere in the heap.
|
|
* ZJIT: Add Ractor mode PatchPoint for ivar get/set
* ZJIT: Only add single ractor patchpoint to class/module receivers
* ZJIT: Improve Ractor mode patch point comments
Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>
---------
Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>
|
|
* ZJIT: Refactor stats implementations
* s/num_send_dynamic/dynamic_send_count/
|
|
We can refine this later by some kind of analysis of the block we're
sending to: maybe it doesn't write to our locals, or at least doesn't
write to all of them.
|
|
|
|
|
|
* ZJIT: Profile and specialize Array#empty?
* ZJIT: Specialize BasicObject#==
* ZJIT: Specialize Hash#empty?
* ZJIT: Specialize BasicObject#!
Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>
|
|
|
|
The embed layout is way more common than the heap one,
especially since WVA.
I think it makes for more readable code to inverse the
flag.
|
|
Just removing some unneeded tests, outdated comments...etc.
|
|
|
|
|
|
This fixes issues related to the process changing directory and not
having only a relative path.
Thanks, Alan.
|
|
When these instructions were introduced it was common to read from a
hash with mutable string literals. However, these days, I think these
instructions are fairly rare.
I tested this with the lobsters benchmark, and saw no difference in
speed. In order to be sure, I tracked down every use of this
instruction in the lobsters benchmark, and there were only 4 places
where it was used.
Additionally, this patch fixes a case where "chilled strings" should
emit a warning but they don't.
```ruby
class Foo
def self.[](x)= x.gsub!(/hello/, "hi")
end
Foo["hello world"]
```
Removing these instructions shows this warning:
```
> ./miniruby -vw test.rb
ruby 3.5.0dev (2025-08-25T21:36:50Z rm-opt_aref_with dca08e286c) +PRISM [arm64-darwin24]
test.rb:2: warning: literal string will be frozen in the future (run with --debug-frozen-string-literal for more information)
```
[Feature #21553]
|
|
Don't abort the entire compilation.
Fix https://github.com/Shopify/ruby/issues/700
|
|
|
|
Migrate from expect-test to insta snapshot testing library. While expect-test
is very small and has a limited surface, it does not handle nextest well; it
while doing inline snapshot updates, it races other test processes to update
the file, leading to frequent "Failed to process macro invocation" errors.
insta handles this by doing batches; it writes to temporary files which can
then be committed in a batch using `cargo insta review` or
`INSTA_UPDATE=always`.
|
|
|
|
Previously, we only spilled the arguments necessary for the particular
send. In case the callee raises and a rescue resumes the ISEQ, that
did not present a complete stack state. E.g. in `[1, (raise rescue 2)]`
the raise send only spills `self`, when `1` also needs to be spilled.
Spill the whole stack. Adjust parsing for `opt_aref_with` since the
key argument for the send now needs to be described by the frame state
of the send.
This changes the contract for `Insn::SendWithoutBlock` to use arguments
from the interpreter stack as described by its frame state.
|
|
* ZJIT: Add RubyVM::ZJIT.stats_enabled?
* ZJIT: Allow querying a single ZJIT stat
|
|
|
|
Ideally we would do this lazily post optimization, but this is easier
for now: we already have the requisite Snapshots available.
|
|
|