Currently, if our ICs see only a few (or even just one) structure 95% of the time but have cases for many different structures. We may end up creating a Binary switch that branches many times before selecting the common case. Instead we should have some heuristic to change the ordering/priority over time.
Here are a couple of possible ideas to experiment with:
- Thread nukes the IC jump. This could be making the out of line jump target point to the slow path or some other method of forcing an out of line jump.
- Execution count trigger causes a read of the profiles. This could be on the main thread or on another thread.
- Use GC to try to find correlations in allocations/collections and access rates.
- Take slow patch based on some per IC counter.
- Counter per access case.