RFR: JDK-8258603 c1 IR::verify is expensive [v10]

Christian Hagedorn chagedorn at openjdk.java.net
Wed Jan 5 13:29:11 UTC 2022


On Wed, 5 Jan 2022 11:59:47 GMT, Ludvig Janiuk <duke at openjdk.java.net> wrote:

>> IR::verify iterates the whole object graph. This proves costly when used in e.g. BlockMerger inside of iterations over BlockLists, leading to quadratic or worse complexities as a function of bytecode length. In several cases, only a few Blocks were changed, and there was no need to go over the whole graph, but until now there was no less blunt tool for verification than IR::verify.
>> 
>> This PR introduces IR::verify_local, intended to be used when only a defined set of blocks have been modified. As a complement, expand_with_neighbors provides a way to also capture the neighbors of the "modified set" ahead of modification, so that afterwards the appropriate asserts can be made on all blocks which might possibly have been changed. All this should let us remove the expensive IR::verify calls, while still performing equivalent (or stricter) assertions.
>> 
>> Some changes have been made in the verifiers along the way. Some amount of refactoring, and even added invariants (see validate_edge_mutiality).
>
> Ludvig Janiuk has updated the pull request incrementally with two additional commits since the last revision:
> 
>  - work with normal build
>  - reorganize

> @vnkozlov Done, although using ASSERT in c1_IR.hpp didn't work because c1_Compilation.cpp makes several unguarded calls to IR::verify. I've left it with NOT_DEBUG_RETURN, hope that is ok.

I think that is fine. Otherwise, you need to wrap the calls in `c1_compilation.cpp` with `NOT_DEBUG()`.

Thanks for doing the updates, they look good to me! If not already done, please verify once again that the optimized build is working with your latest changes before eventually integrating this ;-)

-------------

Marked as reviewed by chagedorn (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/6850


More information about the hotspot-compiler-dev mailing list