<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ruby.git/zjit/src/invariants.rs, branch v4.0.4</title>
<subtitle>The Ruby Programming Language</subtitle>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/'/>
<entry>
<title>ZJIT: Re-compile ISEQs invalidated by PatchPoint (#15459)</title>
<updated>2025-12-11T00:07:39+00:00</updated>
<author>
<name>Takashi Kokubun</name>
<email>takashikkbn@gmail.com</email>
</author>
<published>2025-12-11T00:07:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=c7d56e90d381f0bf115a5c76cbef9df6ae19f4c9'/>
<id>c7d56e90d381f0bf115a5c76cbef9df6ae19f4c9</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>ZJIT: Revert patch_point_count counter (#15160)</title>
<updated>2025-11-13T01:06:47+00:00</updated>
<author>
<name>Takashi Kokubun</name>
<email>takashi.kokubun@shopify.com</email>
</author>
<published>2025-11-13T01:06:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=3dd32fdf784dac5769f6a352fa16c42e2c60edf7'/>
<id>3dd32fdf784dac5769f6a352fa16c42e2c60edf7</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>ZJIT: Add patch_point_count stat (#15100)</title>
<updated>2025-11-10T21:47:56+00:00</updated>
<author>
<name>Takashi Kokubun</name>
<email>takashi.kokubun@shopify.com</email>
</author>
<published>2025-11-10T21:47:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=f0541312883c27c7b98e004ebedc4d9e1874a147'/>
<id>f0541312883c27c7b98e004ebedc4d9e1874a147</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>ZJIT: Carve out IseqPayload into a separate module (#15098)</title>
<updated>2025-11-07T16:54:21+00:00</updated>
<author>
<name>Takashi Kokubun</name>
<email>takashi.kokubun@shopify.com</email>
</author>
<published>2025-11-07T16:54:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=9bbe4b600b2bc2866561d095c3409589a214a358'/>
<id>9bbe4b600b2bc2866561d095c3409589a214a358</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>ZJIT: Add `NoSingletonClass` patch point (#14680)</title>
<updated>2025-10-02T16:03:25+00:00</updated>
<author>
<name>Stan Lo</name>
<email>stan.lo@shopify.com</email>
</author>
<published>2025-10-02T16:03:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=2ed5a02fcca4da4acf4c8c3d7ee4c392fc18d948'/>
<id>2ed5a02fcca4da4acf4c8c3d7ee4c392fc18d948</id>
<content type='text'>
* ZJIT: Add NoSingletonClass patch point

This patch point makes sure that when the object has a singleton class,
the JIT code is invalidated. As of now, this is only needed for C call
optimization.

In YJIT, the singleton class guard only applies to Array, Hash, and String.
But in ZJIT, we may optimize C calls from gems (e.g. `sqlite3`). So the
patch point needs to be applied to a broader range of classes.

* ZJIT: Only generate NoSingletonClass guard when the type can have singleton class

* ZJIT: Update or forget NoSingletonClass patch point when needed</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* ZJIT: Add NoSingletonClass patch point

This patch point makes sure that when the object has a singleton class,
the JIT code is invalidated. As of now, this is only needed for C call
optimization.

In YJIT, the singleton class guard only applies to Array, Hash, and String.
But in ZJIT, we may optimize C calls from gems (e.g. `sqlite3`). So the
patch point needs to be applied to a broader range of classes.

* ZJIT: Only generate NoSingletonClass guard when the type can have singleton class

* ZJIT: Update or forget NoSingletonClass patch point when needed</pre>
</div>
</content>
</entry>
<entry>
<title>ZJIT: Remove dead CMEs from `Invariants`</title>
<updated>2025-09-25T22:36:58+00:00</updated>
<author>
<name>Alan Wu</name>
<email>XrXr@users.noreply.github.com</email>
</author>
<published>2025-09-25T21:34:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=328d2037a6bf24e26a7d144e80ab8c1a9c9fd868'/>
<id>328d2037a6bf24e26a7d144e80ab8c1a9c9fd868</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>ZJIT: Reference update `Invariant::cme_patch_points`</title>
<updated>2025-09-25T22:36:58+00:00</updated>
<author>
<name>Alan Wu</name>
<email>XrXr@users.noreply.github.com</email>
</author>
<published>2025-09-25T21:45:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=6ea7557353982bb4b5de2dcd836233f328dc00f6'/>
<id>6ea7557353982bb4b5de2dcd836233f328dc00f6</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>ZJIT: Forget about dead ISEQs in `Invariants`</title>
<updated>2025-09-25T22:36:58+00:00</updated>
<author>
<name>Alan Wu</name>
<email>XrXr@users.noreply.github.com</email>
</author>
<published>2025-09-25T21:12:31+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=adfa784eaa03a215f2d57ce7e219cc7504ecc68b'/>
<id>adfa784eaa03a215f2d57ce7e219cc7504ecc68b</id>
<content type='text'>
Without this, we crash during reference update.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Without this, we crash during reference update.
</pre>
</div>
</content>
</entry>
<entry>
<title>ZJIT: Standardize to `Iterator::map` in `Invariants::update_references`</title>
<updated>2025-09-25T22:36:58+00:00</updated>
<author>
<name>Alan Wu</name>
<email>XrXr@users.noreply.github.com</email>
</author>
<published>2025-09-25T20:24:58+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=00e6c10168596d4810f56430f18f778b66e30769'/>
<id>00e6c10168596d4810f56430f18f778b66e30769</id>
<content type='text'>
The old code was doing a manual HashSet/HashMap rebuild, and there isn't
a clear performance advantage over `Iterator::map`. So let's use `map`
since it looks clearer and it's easier to see that everything was indeed
updated. This also adds assertions the old code did not have by way
of as_iseq() and as_cme().
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The old code was doing a manual HashSet/HashMap rebuild, and there isn't
a clear performance advantage over `Iterator::map`. So let's use `map`
since it looks clearer and it's easier to see that everything was indeed
updated. This also adds assertions the old code did not have by way
of as_iseq() and as_cme().
</pre>
</div>
</content>
</entry>
<entry>
<title>ZJIT: Invalidate local variables on EP escape (#14448)</title>
<updated>2025-09-05T18:26:01+00:00</updated>
<author>
<name>Takashi Kokubun</name>
<email>takashikkbn@gmail.com</email>
</author>
<published>2025-09-05T18:26:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=4f030951f28aad7080d8b60a28148ec0b3636d58'/>
<id>4f030951f28aad7080d8b60a28148ec0b3636d58</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
