RFR: 8295166: IGV: dump graph at more locations
Daniel Lundén
duke at openjdk.org
Tue Dec 5 12:13:16 UTC 2023
On Thu, 12 Oct 2023 07:36:38 GMT, Tobias Hartmann <thartmann 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.
>
> src/hotspot/share/opto/compile.cpp line 625:
>
>> 623: #ifndef PRODUCT
>> 624: _igv_idx(0),
>> 625: _igv_phase_iter(),
>
> This is value initialization which guarantees proper zeroing, right? For other arrays, for example `Compile::_trap_hist`, we use explicit `Copy::zero_to_bytes` but I think your variant is fine.
Yes, correct. I'll switch to the `Copy::zero_to_bytes` initialization, better to be consistent.
> src/hotspot/share/opto/compile.cpp line 5115:
>
>> 5113: print_method(cpt, level, n, iter);
>> 5114: #else
>> 5115: print_method(cpt, level, n);
>
> This is dead code because all calls are guarded by `NOT_PRODUCT`, right?
Not quite, there is one unguarded call for `PHASE_PHASEIDEALLOOP_ITERATIONS` at level 2. This is an existing phase that I converted from `print_method` to `print_method_iter` (as suggested by @chhagedorn in the issue corresponding to this PR).
> src/utils/IdealGraphVisualizer/.gitignore line 6:
>
>> 4: /lastModified/
>> 5: /localeVariants
>> 6: /package-attrs.dat
>
> Is that really needed? Just wondering why these files haven't been added before.
Not sure, IGV generates them at first run on my system (after a `git clean` and clean IGV build).
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/16120#discussion_r1358136315
PR Review Comment: https://git.openjdk.org/jdk/pull/16120#discussion_r1358135091
PR Review Comment: https://git.openjdk.org/jdk/pull/16120#discussion_r1358131887
More information about the hotspot-compiler-dev
mailing list