Add a new optimization pass that eliminates redundant CheckInterrupts instructions within each basic block. Only the first CheckInterrupts is needed per stretch of non-call code, since the interrupt flag only needs to be checked once. Th...rwstauner (Randy Stauner)
CheckInterrupts only reads ec->interrupt_flag and conditionally side-exits — it doesn't touch PatchPoint invariants or the allocator. Add an InterruptFlag leaf under Memory in the abstract heap DAG and narrow CheckInterrupts from Any to ...rwstauner (Randy Stauner)
Both instructions are pure computations with no side effects: IsBitNotEqual is a cmp+csel (identical to IsBitEqual, already Empty), and FixnumBitCheck is a test+csel on a tagged Fixnum bit. Neither reads memory, writes anything, allocate...rwstauner (Randy Stauner)
Add a new optimization pass that deduplicates PatchPoint instructions asserting the same invariant within a basic block when no intervening instruction could invalidate it. This is common in practice — e.g., `1 + 2 + 3` produces two ide...rwstauner (Randy Stauner)
inline_array_push, inline_array_pop, and inline_array_aref did not guard/coerce the receiver to Array type before emitting Array-specific HIR instructions (ArrayPush, ArrayPop, ArrayLength, ArrayAref). This caused a MismatchedOperandTyp...rwstauner (Randy Stauner)
Anonymous modules/classes get names like `"#<Module:0x00007f...>"` from `rb_class2name`, which include a memory address that changes between runs. This makes stat keys unstable for diffing across runs and is less informative than it coul...rwstauner (Randy Stauner)