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

Eric Liu eliu at openjdk.org
Tue Oct 31 11:07:37 UTC 2023


On Wed, 25 Oct 2023 09:33:14 GMT, Emanuel Peter <epeter at openjdk.org> wrote:

>> 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
>
> src/hotspot/share/opto/vectornode.cpp line 609:
> 
>> 607: // Check if input is loop invariant vector.
>> 608: bool VectorNode::is_invariant_vector(Node* n) {
>> 609:   // Only Replicate vector nodes are loop invariant for now.
> 
> Random discovery: does this not sound fishy? Can Replicate nodes never be used in a loop variant way? For example with the VectorAPI?

Replicate can be variant in Vector API. E.g., we can create an IntVector in loop by IntVector.broadcast (https://github.com/openjdk/jdk/blob/master/src/jdk.incubator.vector/share/classes/jdk/incubator/vector/IntVector.java). We also have such matching rules supporting register as Replicate input.

I only find the use point of this method in Superword, I'm not sure if auto-vectorization has any special handle in vectorizing Replicate.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/14830#discussion_r1377414908


More information about the hotspot-compiler-dev mailing list