This is roughly net-neutral for the number of instructions created but at least cenetralizes where the Snapshot is made. Previously, we might have multiple Snapshot per YARV instruction depending on if it had event flags, if the body of...tekknolagi (Maxwell Bernstein)
Storing the tagged block handler in profiles is not GC-safe (nice catch, Kokubun). Store the untagged block handler instead. Fix bug in https://github.com/ruby/ruby/pull/15051tekknolagi (Maxwell Bernstein)
We have both `SetIvar` and `SetInstanceVariable`. The former is a purely dynamic fallback that we can inline `attr_accessor`/`attr_writer` into, whereas the latter comes straight from the interpreter's `setinstancevariable` opcode.tekknolagi (Maxwell Bernstein)
I made a special kind of `ProfiledType` that looks at specific objects, not just their classes/shapes (https://github.com/ruby/ruby/pull/15051). Then I profiled some of our benchmarks. For lobsters: ``` Top-6 invokeblock handler (100.0...tekknolagi (Maxwell Bernstein)
We can see send/block call/struct aref/... e.g. on lobsters: ``` Top-9 not optimized method types for send_without_block (100.0% of total 3,133,812): iseq: 2,004,557 (64.0%) optimized_struct_aref: 496,232 (15.8%) ...tekknolagi (Maxwell 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/850tekknolagi (Maxwell Bernstein)