[15] RFR (S): 8242289: C2: Support platform-specific node cloning in Matcher

Vladimir Ivanov vladimir.x.ivanov at oracle.com
Thu Apr 9 18:29:18 UTC 2020


Thanks, Vladimir.

Best regards,
Vladimir Ivanov

On 07.04.2020 20:43, Vladimir Kozlov wrote:
> Good.
> 
> Thanks,
> Vladimir
> 
> On 4/7/20 10:29 AM, Vladimir Ivanov wrote:
>> http://cr.openjdk.java.net/~vlivanov/8242289/webrev.00/
>> https://bugs.openjdk.java.net/browse/JDK-8242289
>>
>> Introduce a platform-specific entry point (Matcher::pd_clone_node) and 
>> move platform-specific node cloning during matching.
>>
>> Matcher processes every node only once unless it is marked as shared.
>> It is too restrictive in some cases, so the workaround is to 
>> explicitly check for particular IR patterns and clone relevant nodes 
>> during matching phase.
>>
>> As an example, take a look at ShiftCntV. There are the following match 
>> rules in aarch64.ad:
>>
>>    match(Set dst (RShiftVB src (RShiftCntV shift)));
>>
>> By default, RShiftCntV node is matched only once, so when it has 
>> multiple users, only it will be folded only into one of them and for 
>> the rest the value it produces will be put in register. To overcome 
>> that, Matcher is taught to detect such pattern and "clone" RShiftCntV 
>> input every time it matches RShiftV node. In case of RShiftCntV, it's 
>> arm32/aarch64-specific and other platforms (x86 in particular) don't 
>> optimize for it.
>>
>> To avoid polluting shared code (in matcher.cpp) with platform-specific 
>> portions, I propose to add Matcher::pd_clone_node and place 
>> platform-specific checks there.
>>
>> Also, as a cleanup, renamed Matcher::clone_address_expressions() to 
>> pd_clone_address_expressions since it's a platform-specific method.
>>
>> Testing: hs-precheckin-comp, hs-tier1, hs-tier2,
>>           cross-builds on all affected platforms
>>
>> Thanks!
>>
>> Best regards,
>> Vladimir Ivanov


More information about the hotspot-compiler-dev mailing list