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

Vladimir Kozlov vladimir.kozlov at oracle.com
Tue Apr 7 17:43:25 UTC 2020


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