RFR: 8295166: IGV: dump graph at more locations
Roberto Castañeda Lozano
rcastanedalo at openjdk.org
Thu Dec 7 07:29:39 UTC 2023
On Tue, 10 Oct 2023 13:31:00 GMT, Daniel Lundén <duke at openjdk.org> wrote:
> This changeset
> 1. adds a number of new graph dumps for IdealGraphVisualizer (IGV):
> - Before conditional constant propagation
> - After register allocation
> - After block ordering
> - After peephole optimization
> - After post-allocation expansion
> - Before and after
> - loop predication
> - loop peeling
> - pre/main/post loops
> - loop unrolling
> - range check elimination
> - loop unswitching
> - partial peeling
> - split if
> - superword
> 2. adds support for enumeration of repeated IGV graph dumps.
> 3. adjusts IGV print levels to encompass the new graph dumps. The old levels 4 and 5 are now levels 5 and 6. The new level 4 is for loop optimization dumps.
>
> Example phase list screenshots in IGV (first at level 6, second at level 4)
> ![Screenshot from 2023-12-04 13-55-38](https://github.com/openjdk/jdk/assets/4222397/6759dc5a-9c9a-42b9-8d9e-2d0b53e76ab4) ![Screenshot from 2023-12-04 13-56-29](https://github.com/openjdk/jdk/assets/4222397/44d6a239-587b-4f7c-8ce1-f7613cb2fa35)
>
>
> Some notes:
> - While discussing the above changes, a separate question was brought up by @chhagedorn:
> > On a separate note, I'm wondering how useful it is to always dump all JFR events when calling print_method(). Should this be revisited again in general?
> - The new IGV graph dump enumeration enables a number of cleanups. There is now another RFE for IGV cleanup: [JDK-8319599](https://bugs.openjdk.org/browse/JDK-8319599).
>
> ### Testing
> #### Platforms: windows-x64, linux-x64, linux-aarch64, macosx-x64, macosx-aarch64
> - tier1, tier2, tier3, tier4, tier5.
> - Check that optimized builds (`--with-debug-level optimized`) still work.
>
> #### Platforms: linux-x64
> - Tested that thousands of graphs are correctly opened and visualized with IGV.
test/hotspot/jtreg/compiler/lib/ir_framework/CompilePhase.java line 69:
> 67: BEFORE_LOOP_PREDICATION_IC("Before Loop Predication IC"),
> 68: BEFORE_LOOP_PREDICATION_RC("Before Loop Predication RC"),
> 69: AFTER_LOOP_PREDICATION("After Loop Predication"),
Would it be possible to define `AFTER_LOOP_PREDICATION_IC` and `AFTER_LOOP_PREDICATION_RC` separately, to match the corresponding `BEFORE_*` phases? This would make it easier to understand what is the scope of each transformation in the IGV outline and also play better with the enumeration of repeated IGV graph dumps introduced in this changeset. To be more specific, what I would expect to see here:
![igv-pred](https://github.com/openjdk/jdk/assets/8792647/02a11ce7-d41a-43f1-9711-a7a403c678e9)
is:
15. Before Loop Predication IC: 90 If
16. After Loop Predication IC: 163 If
17. Before Loop Predication RC: 106 RangeCheck
18. After Loop Predication RC: 196 RangeCheck
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/16120#discussion_r1418493734
More information about the hotspot-compiler-dev
mailing list