Thanks for sharing; this is lovely. I once tried to dig into compiled Go code using Compiler Explorer[0] when I was reading about Go range expressions[1]. I found it tough to keep track of the colors. The hover feature was neat but the "branching" in this tool will help me.
But the major reason I had difficulty understanding is I don't know Assembly except some basic operations. Are there any resources to learn Assembly, at least to a level that I understand output like this: https://go.godbolt.org/z/P4jW1bG6z ?
I've used a similar tool for Shaders and it was very useful for understanding where the GPU spends time. However, do we need that level of details for CPU based applications.
If you can understand it's useful for understanding how the GPU spends its time, why wouldn't that same understanding be useful for the CPU? Or anything else? Doing optimizations requires good tooling, no matter what it runs on.
My doubt is, what kind of application needs this level of optimisation on CPU based application?
Shaders are very bad at certain things like conditional statements. So we usually do that level of analysis to avoid. And the application is for Games or graphics heavy applications. In the same manner, what kind of application goes through this level of details?
In my own experience, tools like this are most useful when I write something and it's unexpectedly fast/slow and I don't understand why without diving deeper. Especially when it comes to unexpected slowdowns (expected something to take 1x time but it takes 100x time instead).
Being able to inspect the generated assembly usually reveals the cause, and this tool improves being able to jump to the right place, as there tends to be a lot of assembly generated even for small snippets of code, so finding the right place can take some time.
I guess it works as long as optimizations are disabled? Because any mildly optimized code shouldn't match it@s input as linearily as shown on the pictures.