RFR: 8309893: Integrate ReplicateB/S/I/L/F/D nodes to Replicate node [v2]

Jatin Bhateja jbhateja at openjdk.org
Wed Oct 25 06:51:42 UTC 2023


On Tue, 24 Oct 2023 06:39:51 GMT, Eric Liu <eliu at openjdk.org> wrote:

>> This patch creates ReplicateNode to replace ReplicateB/S/I/L/F/DNode, like other vector nodes introduced recently, e.g., PopulateIndexNode and ReverseVNode, etc. This refers from:
>> https://mail.openjdk.org/pipermail/panama-dev/2020-April/008484.html
>> 
>> After merging these nodes, code will be easier to maintain. E.g., matching rules can be simplified.
>> 
>> Besides AArch64, this patch tries to keep other ad files as the same before, only supplies some necessary predicate. E.g., for matching rules using ReplicateB before, they are now matching Replicate with a new predicate "Matcher::vector_element_basic_type(n) == T_BYTE". This would be easy for review and lower risks.
>> 
>> [TEST]
>> x86:     Tested with option "-XX:UseAVX=0/1/2/3".
>> AArch64: Tested on SVE machine and Neon machine.
>> 
>> Full jtreg passed without new issue.
>
> Eric Liu has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains three commits:
> 
>  - small fix
>    
>    Change-Id: I121a8c1ad75e88c0af41f2c1ef00289a3d61f400
>  - Merge jdk:master
>    
>    Change-Id: I4df10ba7290e9af02deeac5a931234a07be7c207
>  - 8309893: Integrate ReplicateB/S/I/L/F/D nodes to Replicate node
>    
>    This patch creates ReplicateNode to replace ReplicateB/S/I/L/F/DNode,
>    like other vector nodes introduced recently, e.g., PopulateIndexNode and
>    ReverseVNode, etc. This refers from:
>    https://mail.openjdk.org/pipermail/panama-dev/2020-April/008484.html
>    
>    After merging these nodes, code will be easier to maintain. E.g.,
>    matching rules can be simplified.
>    
>    Besides AArch64, this patch tries to keep other ad files as the same
>    before, only supplies some necessary predicate. E.g., for matching rules
>    using ReplicateB before, they are now matching Replicate with a new
>    predicate "Matcher::vector_element_basic_type(n) == T_BYTE". This would
>    be easy for review and lower risks.
>    
>    [TEST]
>    x86:     Tested with option "-XX:UseAVX=0/1/2/3".
>    AArch64: Tested on SVE machine and Neon machine.
>    
>    Full jtreg passed without new issue.
>    
>    Change-Id: Icb16084e3909177ab302f0ba33c2216c860a5da6

Hi @e1iu, Nice cleanup!.  There is still some refactoring possible around x86 broadcast instruction patterns with similar operands.

src/hotspot/cpu/x86/x86.ad line 4162:

> 4160: instruct vReplB_reg(vec dst, rRegI src) %{
> 4161:   predicate(UseAVX >= 2 && Matcher::vector_element_basic_type(n) == T_BYTE);
> 4162:   match(Set dst (Replicate src));

Integral gather patterns can be merged by folding predicates into macro assembler.

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

PR Review: https://git.openjdk.org/jdk/pull/14830#pullrequestreview-1696492751
PR Review Comment: https://git.openjdk.org/jdk/pull/14830#discussion_r1371234060


More information about the hotspot-compiler-dev mailing list