| Age | Commit message (Collapse) | Author | |
|---|---|---|---|
| 29 hours | ZJIT: Inline ArrayAref | nozomemein | |
| 29 hours | ZJIT: Rename ArrayArefFixnum -> ArrayAref | nozomemein | |
| 2 days | ZJIT: Add assume_no_singleton_classes to avoid invalidation loops (#15871) | Max Bernstein | |
| Make sure we check if we have seen a singleton for this class before assuming we have not. Port the API from YJIT. | |||
| 4 days | ZJIT: Optimize Integer#[] | Max Bernstein | |
| This is used a lot in optcarrot. | |||
| 4 days | ZJIT: Inline Array#empty? | Max Bernstein | |
| 4 days | ZJIT: Inline Array#length | Max Bernstein | |
| 9 days | ZJIT: Add ArrayAset instruction to HIR (#15747) | Nozomi Hijikata | |
| Inline `Array#[]=` into `ArrayAset`. | |||
| 2025-12-12 | ZJIT: Only optimize `[]` and `[]=` for exact Hash, not Hash subclasses | Stan Lo | |
| 2025-12-12 | ZJIT: Inline `Hash#[]=` | Stan Lo | |
| 2025-12-04 | ZJIT: Inline Kernel#class (#15397) | Max Bernstein | |
| We generally know the receiver's class from profile info. I see 600k of these when running lobsters. | |||
| 2025-12-01 | ZJIT: Open-code String#getbyte | Max Bernstein | |
| Don't call a C function. | |||
| 2025-12-01 | ZJIT: Mark String#ascii_only? as leaf | Max Bernstein | |
| 2025-12-01 | ZJIT: Specialize Integer#>> | Max Bernstein | |
| Same as Integer#>>. Also add more strict type checks for both Integer#>> and Integer#<<. | |||
| 2025-12-01 | ZJIT: Specialize String#<< with Fixnum | Max Bernstein | |
| Append a codepoint. | |||
| 2025-12-01 | ZJIT: Mark Integer#to_s as returning StringExact | Max Bernstein | |
| 2025-12-01 | ZJIT: Standardize method dispatch insns' `recv` field (#15334) | Stan Lo | |
| ZJIT: Standardize C call related insn fields - Add `recv` field to `CCall` and `CCallWithFrame` so now all method dispatch related instructions have `recv` field, separate from `args` field. This ensures consistent pointer arithmetic when generating code for these instructions. - Standardize `recv` field's display position in send related instructions. | |||
| 2025-11-21 | ZJIT: Don't make GuardNotFrozen consider immediates | Max Bernstein | |
| 2025-11-21 | ZJIT: Specialize Module#=== and Kernel#is_a? into IsA | Max Bernstein | |
| 2025-11-21 | ZJIT: Inline Integer#<< for constant rhs (#15258) | Max Bernstein | |
| This is good for protoboeuf and other binary parsing | |||
| 2025-11-21 | ZJIT: Inline Thread.current (#15272) | Max Bernstein | |
| Add `LoadEC` then it's just two `LoadField`. | |||
| 2025-11-21 | ZJIT: Inline String#empty? (#15283) | Max Bernstein | |
| Don't emit a CCall. | |||
| 2025-11-18 | ZJIT: Inline BasicObject#! (#15201) | Max Bernstein | |
| 2025-11-18 | ZJIT: Rename the operand of Insn::GuardNotFrozen from val to recv | Benoit Daloze | |
| * When writing to an object, the receiver should be checked if it's frozen, not the value, so this avoids an error-prone autocomplete. | |||
| 2025-11-14 | ZJIT: Move special Fixnum BOP_OR into cruby_methods | Max Bernstein | |
| 2025-11-14 | ZJIT: Move special Fixnum BOP_AND into cruby_methods | Max Bernstein | |
| 2025-11-14 | ZJIT: Move special Fixnum BOP_GE into cruby_methods | Max Bernstein | |
| 2025-11-14 | ZJIT: Move special Fixnum BOP_LE into cruby_methods | Max Bernstein | |
| 2025-11-14 | ZJIT: Move special Fixnum BOP_LT into cruby_methods | Max Bernstein | |
| 2025-11-14 | ZJIT: Move special Fixnum BOP_MOD into cruby_methods | Max Bernstein | |
| 2025-11-14 | ZJIT: Move special Fixnum BOP_DIV into cruby_methods | Max Bernstein | |
| 2025-11-14 | ZJIT: Move special Fixnum BOP_MULT into cruby_methods | Max Bernstein | |
| 2025-11-14 | ZJIT: Move special Fixnum BOP_NEQ into cruby_methods | Max Bernstein | |
| 2025-11-14 | ZJIT: Move special Fixnum BOP_GT into cruby_methods | Max Bernstein | |
| 2025-11-14 | ZJIT: Move special Fixnum BOP_MINUS into cruby_methods | Max Bernstein | |
| 2025-11-14 | ZJIT: Move special Fixnum BOP_PLUS into cruby_methods | Max Bernstein | |
| 2025-11-14 | ZJIT: Move special Fixnum BOP_EQ into cruby_methods | Max Bernstein | |
| 2025-11-07 | ZJIT: Specialize String#setbyte for fixnum case (#14927) | Aiden Fox Ivey | |
| 2025-11-03 | ZJIT: Inline String#bytesize (#15033) | Max Leopold | |
| Inline the `String#bytesize` function and remove the C call. | |||
| 2025-10-31 | ZJIT: Fix incorrect elision of call to BasicObject#!= | Alan Wu | |
| rb_obj_not_equal() uses rb_funcall(), so it's not `no_gc`, `leaf`, nor `elidable`. | |||
| 2025-10-30 | ZJIT: Fix incorrect self.class.respond_to? folding (#15001) | Max Bernstein | |
| Right now we have a subtle type system bug around `types::Class`. Until that is resolved, stop marking `Kernel#class` as returning `types::Class`, which fixes Rubocop. Re: https://github.com/Shopify/ruby/issues/850 | |||
| 2025-10-28 | ZJIT: Specialize Array#pop for no argument case (#14933) | Aiden Fox Ivey | |
| Fixes https://github.com/Shopify/ruby/issues/814 This change specializes the case of calling `Array#pop` on a non frozen array with no arguments. `Array#pop` exists in the non-inlined C function list in the ZJIT SFR performance burndown list. If in the future it is helpful, this patch could be extended to support the case where an argument is provided, but this initial work seeks to elide the ruby frame normally pushed in the case of `Array#pop` without an argument. | |||
| 2025-10-28 | ZJIT: Add IsBitNotEqual and inline BasicObject#!= | Max Bernstein | |
| 2025-10-28 | ZJIT: Optimize Kernel#=== | Max Bernstein | |
| 2025-10-28 | ZJIT: Add BoxBool and remove CCall from BasicObject#== | Max Bernstein | |
| 2025-10-28 | ZJIT: Use FnProperties::default() | Max Bernstein | |
| 2025-10-28 | ZJIT: Allow both inlining and annotating properties | Max Bernstein | |
| 2025-10-28 | ZJIT: Remove redundant annotation | Max Bernstein | |
| 2025-10-28 | ZJIT: Inline Kernel#nil? and NilClass#nil? | Max Bernstein | |
| We can fully remove the CCall now. | |||
| 2025-10-27 | ZJIT: Annotate Kernel#frozen? as returning BoolExact | Max Bernstein | |
| 2025-10-27 | ZJIT: Annotate Symbol#to_s and Symbol#name as returning StringExact | Max Bernstein | |
