Dump graph at more locations than currently. Specifically, at
- PHASE_REGISTER_ALLOCATION
- PHASE_BLOCK_ORDERING
- PHASE_PEEPHOLE
- PHASE_POSTALLOC_EXPAND
and before and after other optimizations
- Loop Peeling
- Partial Peeling
- Loop Unswitching
- Loop Unrolling
- Pre/Main/Post loops
- Superword
- Loop Predication
- Split If
- Range Check Elimination
- Before CCP (we currently only dump after CCP)
Additionally, we should
- Rearrange print levels if necessary to accommodate the new phase types.
- Enumerate phases that are reoccurring. For example, we already have PhaseIdealLoop1/2/3 but afterwards we just use "PhaseIdealLoop iterations" multiple times which sometimes makes it hard to find (again) the right graph when clicking around.
- Print the involved idx + node name for the additional before/after loop optimization dumps mentioned above to better match the -XX:+TraceLoopOpts output. For example, when peeling a loop with LoopNode "123 Loop", we could name the IGV graph "Before Loop Peeling - 123 Loop"
Note: All new phases should also be added to the CompilePhase enum [1] of the IR framework.
[1] https://github.com/openjdk/jdk/blob/master/test/hotspot/jtreg/compiler/lib/ir_framework/CompilePhase.java
- PHASE_REGISTER_ALLOCATION
- PHASE_BLOCK_ORDERING
- PHASE_PEEPHOLE
- PHASE_POSTALLOC_EXPAND
and before and after other optimizations
- Loop Peeling
- Partial Peeling
- Loop Unswitching
- Loop Unrolling
- Pre/Main/Post loops
- Superword
- Loop Predication
- Split If
- Range Check Elimination
- Before CCP (we currently only dump after CCP)
Additionally, we should
- Rearrange print levels if necessary to accommodate the new phase types.
- Enumerate phases that are reoccurring. For example, we already have PhaseIdealLoop1/2/3 but afterwards we just use "PhaseIdealLoop iterations" multiple times which sometimes makes it hard to find (again) the right graph when clicking around.
- Print the involved idx + node name for the additional before/after loop optimization dumps mentioned above to better match the -XX:+TraceLoopOpts output. For example, when peeling a loop with LoopNode "123 Loop", we could name the IGV graph "Before Loop Peeling - 123 Loop"
Note: All new phases should also be added to the CompilePhase enum [1] of the IR framework.
[1] https://github.com/openjdk/jdk/blob/master/test/hotspot/jtreg/compiler/lib/ir_framework/CompilePhase.java
- is blocked by
-
JDK-8319813 Remove upper limit on number of compiler phases in phasetype.hpp
- Resolved
- relates to
-
JDK-8319599 IGV phase cleanup
- Open
-
JDK-8320070 IGV print groups
- Open
-
JDK-8280378 [IR Framework] Support IR matching for different compile phases
- Resolved
-
JDK-8322327 Regression on J2dBench-vimg_copyarea-ZGC - Windows x64
- Closed
-
JDK-8319664 IGV always output on PhaseRemoveUseless
- Resolved
(1 relates to, 2 links to)