RFR: 8333334: C2: Make result of `Node::dominates` more precise to enhance scalar replacement [v7]
Qizheng Xing
qxing at openjdk.org
Tue Aug 6 03:44:38 UTC 2024
On Tue, 9 Jul 2024 03:10:55 GMT, Qizheng Xing <qxing at openjdk.org> wrote:
>> This patch changes the algorithm of `Node::dominates` to make the result more precise, and allows the iterators of `ConcurrentHashMap` to be scalar replaced.
>>
>> The previous algorithm will return a conservative result when encountering a dead control flow, and only try the first two input paths of a multi-input Region node, which may prevent the scalar replacement in some cases.
>>
>> For example, with G1 GC enabled, C2 generates GC barriers for `ConcurrentHashMap` iteration operations at some early phases, and then eliminates them in a later IGVN, but `LoadNode` is also idealized in the same IGVN. This causes `LoadNode::Ideal` to see some dead barrier control flows, and refuse to split some instance field loads through Phi due to the conservative result of `Node::dominates`, and thus the scalar replacement can not be applied to iterators in the later macro elimination phase.
>>
>> This patch allows `Node::dominates` to try other paths of the last multi-input Region node when the first path is dead, and makes `ConcurrentHashMap` iteration ~30% faster:
>>
>>
>> Benchmark (nkeys) Mode Cnt Score Error Units
>> Maps.testConcurrentHashMapIterators 10000 avgt 15 414099.085 ± 33230.945 ns/op # baseline
>> Maps.testConcurrentHashMapIterators 10000 avgt 15 315490.281 ± 3037.056 ns/op # patch
>>
>>
>> Testing: tier1-4.
>
> Qizheng Xing has updated the pull request incrementally with one additional commit since the last revision:
>
> Add copyright.
Hi all,
This patch has now passed all GHA tests and is ready for further reviews.
If there are any other suggestions for this PR, please let me know.
Thanks!
-------------
PR Comment: https://git.openjdk.org/jdk/pull/19496#issuecomment-2270323013
More information about the hotspot-compiler-dev
mailing list