| Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
|
|
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.
|
|
|
|
Co-authored-by: Alan Wu <alansi.xingwu@shopify.com>
Co-authored-by: Max Bernstein <ruby@bernsteinbear.com>
Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
|
|
If the LiveRange looks like (idx, idx), we will currently not allocate a
register. This change allocates a register and then immediately
deallocates it.
Fix https://github.com/Shopify/ruby/issues/614
|
|
Its usage was removed in 306d50811dd060d876d1eb364a0d5e6106f5e4f1.
|
|
We can use the `gen_push_opnds` and `gen_pop_opnds` helpers added in #14200 to simplify the code.
|
|
|
|
|
|
gen_prepare_call_with_gc() was not enough because of the rb_funcall()
usage in range_init().
Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>
Co-authored-by: Max Bernstein <rubybugs@bernsteinbear.com>
|
|
|
|
|
|
`toregexp` is fairly similar to `concatstrings`, so this commit extracts
a helper for pushing and popping operands on the native stack.
There's probably opportunity to move some of this into lir (e.g. Alan
suggested a push_many that could use STP on ARM to push 2 at a time),
but I might save that for another day.
|
|
It only makes sense for heap objects.
|
|
|
|
* ZJIT: Handle ISEQ moves in IseqCall
* ZJIT: Handle ISEQ moves in Invariants
* Let gen_iseq_call take a reference
* Avoid unneeded iter()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
They don't need it anymore; jit.get_opnd doesn't return Option anymore.
|
|
We have a verifier that runs in debug mode that should prevent this.
Simplify a bunch of call sites.
|