deployed IRHydra 2.0
It’s been almost a year since I released IRHydra, a tool that can visualize V8 and Dart VM compilation artifacts, help you navigate them and grok what JIT compiler does to your code.
I think it is only fair that as a birthday gift 1 year old IRHydra will get some exciting new features.
New UI
Overall I tried to simplify UI for the common case thanks to some good suggestions from Matt Pardee and Paul Fryzel.
Colors of deoptimization markers and links now tries to communicate importance of a particular type of the deoptimization (eager, lazy, soft). Methods in the method list are highlighted with the color of their worst deoptimization.
Detailed information about the deoptimization is just a hover away.
What’s more important: the same information is attached to the source so that you don’t have to read all IR trying to figure out which place in the program CheckMaps
came from. This display is inlining sensitive: it will place deoptimization marker inside the right inlined function so that you can be completely sure which code path it originated from.
Graph view now applies semantic coloring:
- blocks that are dominated by unconditional deoptimization will be almost transparent to hint the fact that their contents are irrelevant;
- blocks that contain unconditional deoptimization will have purple border (matching the color used for soft deoptimizations);
- blocks containing
changes[*]
instructions whill have dashed-red border to attract attention to them, because such flags inhibit most optimizations.
Inner fill for the blocks is still selected from a Brewer palette based on their loop nesting. Dart VM mode used to have ll_prof
support to color blocks depending on amount of ticks falling into them, but I temporarily disabled this feature for now.
Method filtering now supports searching for a specific text inside method sources (if available) just prefix the filter with src:
.
Old features
Just like previous version new IRHydra supports:
- crossreferencing of IR names on hover and navigation between them;
- displaying uses of the IR name when you click on its definition (though UI is somewhat borked);
- IR opcode descriptions.
One currently disabled feature as I already mentioned above is ll_prof
support.
Technology stack
IRHydra 2.0 UI was rewritten to use Polymer.dart. Uses bits of Bootstrap for styling and components like tooltips and popovers. Some colors taken from Flat UI palette.
Known issues and limitations
Requires applying a patch on top of V8 to work.
Future plans
I have a lot of ideas how to enhance source view to surface interesting information (e.g. what was LICMed, what was DCEd, which checks are still inside the loops etc.) even more prominently. However my priority right now is making sure that all old features work and the code is in the nice state (right now it is not) for merging into the main brunch.
Contributions are always welcome. Reach out to me if you are interested even if it is just UI/CSS tweaks. Me and CSS are not the best friends anyways :-)
Have fun digging into IRs!
My blog no longer has
comments section. If you want to discuss
contents of this post you can send me an email at [email protected]
or find me on Mastodon or
X.