Feature #16282
openAdd "call data" wrapper IMEMO object so inline cache can be updated
Description
Hi,
Currently the compactor will invalidate all inline caches. I would like to update references in inline caches so we don't have to invalidate. Most inline caches are reachable from instruction sequences, but one cache is not:
https://github.com/ruby/ruby/blob/6147fa82a923e7318f493857023006801ed25eb5/internal.h#L2395
This static variable can't be reached from the GC. I'd like to introduce a new IMEMO object that wraps this cache, then the GC can reach the cache and update the value.
I've attached a patch that implements the new IMEMO object, and also removes the restriction on GCC so that all compilers get the cache hit.
Does this seem OK shyouhei, ko1?
Files
Updated by tenderlovemaking (Aaron Patterson) about 5 years ago
- File 0001-Wrap-call-data-with-an-IMEMO-object.patch added
Updated by tenderlovemaking (Aaron Patterson) about 5 years ago
- File deleted (
0001-Wrap-call-data-with-an-IMEMO-object.patch)
Updated by tenderlovemaking (Aaron Patterson) about 5 years ago
Actually, I think this makes performance worse because it removes the "define". So there will be only one. I will fix it to maintain the macro.
Updated by tenderlovemaking (Aaron Patterson) about 5 years ago
Updated by tenderlovemaking (Aaron Patterson) about 5 years ago
- File deleted (
0001-Wrap-call-data-with-an-IMEMO-object.patch)