Integrated: 8307609: RISC-V: Added support for Extract, Compress, Expand and other nodes for Vector API
Dingli Zhang
dzhang at openjdk.org
Fri May 19 03:12:03 UTC 2023
On Mon, 8 May 2023 11:04:09 GMT, Dingli Zhang <dzhang at openjdk.org> wrote:
> Hi all,
>
> We have added support for Extract, Compress, Expand and other nodes for Vector
> API. It was implemented by referring to RVV v1.0 [1]. Please take a look and
> have some reviews. Thanks a lot.
>
> In this PR, we will support these new nodes:
>
> CompressM/CompressV/ExpandV
> LoadVectorGather/StoreVectorScatter/LoadVectorGatherMasked/StoreVectorScatterMasked
> Extract
> VectorLongToMask/VectorMaskToLong
> PopulateIndex
> VectorLongToMask/VectorMaskToLong
> VectorMaskTrueCount/VectorMaskFirstTrue
> VectorInsert
>
>
> At the same time, we refactored methods such as
> `match_rule_supported_vector_mask`. All implemented vector nodes support mask
> operations by default now, so we also added mask nodes for all implemented
> nodes.
>
> By the way, we will implement the VectorTest node in the next PR.
>
> We can use the tests under `test/jdk/jdk/incubator/vector` to print the
> compilation log for most of the new nodes. And we can use the following
> command to print the compilation log of a jtreg test case:
>
>
> $ jtreg \
> -v:default \
> -concurrency:16 -timeout:50 \
> -javaoption:-XX:+UnlockExperimentalVMOptions \
> -javaoption:-XX:+UseRVV \
> -javaoption:-XX:+PrintOptoAssembly \
> -javaoption:-XX:LogFile=log_name.log \
> -jdk:build/linux-riscv64-server-fastdebug/jdk \
> -compilejdk:build/linux-x86_64-server-release/images/jdk \
> <test-case>
>
>
>
>
> ### CompressM/CompressV/ExpandV
>
> There is no inverse vdecompress provided in RVV, as this operation can be
> readily synthesized using iota and a masked vrgather in `ExpandV`.
>
> We can use `test/jdk/jdk/incubator/vector/Float256VectorTests.java` to emit
> these nodes and the compilation log is as follows:
>
>
> ## CompressM
> 2aa addi R29, R10, #16 # ptr, #@addP_reg_imm
> 2ae mcompress V0, V30 # KILL R30
> 2c2 vstoremask V2, V0
> 2ce storeV [R7], V2 # vector (rvv)
> 2d6 bgeu R29, R28, B47 #@cmpP_branch P=0.000100 C=-1.000000
>
> ## CompressV
> 0ee addi R29, R10, #16 # ptr, #@addP_reg_imm
> 0f2 vcompress V1, V2, V0
> 0fe storeV [R7], V1 # vector (rvv)
> 106 bgeu R29, R28, B10 #@cmpP_branch P=0.000100 C=-1.000000
>
> ## ExpandV
> 0ee addi R29, R10, #16 # ptr, #@addP_reg_imm
> 0f2 vexpand V3, V2, V0
> 102 storeV [R7], V3 # vector (rvv)
> 10a bgeu R29, R28, B10 #@cmpP_branch P=0.000100 C=-1.000000
>
>
>
>
> ### LoadVectorGather/StoreVectorScatter/LoadVectorGatherMasked/StoreVectorScatterMasked
>
> We use the vsoxei32_v instruction regardless of what sew is set to. The
> indexMap in fromArr...
This pull request has now been integrated.
Changeset: 97ade57f
Author: Dingli Zhang <dzhang at openjdk.org>
Committer: Fei Yang <fyang at openjdk.org>
URL: https://git.openjdk.org/jdk/commit/97ade57fb244b17e93b150b7f9e025a5ba906bb2
Stats: 1720 lines in 6 files changed: 1447 ins; 139 del; 134 mod
8307609: RISC-V: Added support for Extract, Compress, Expand and other nodes for Vector API
Co-authored-by: zifeihan <caogui at iscas.ac.cn>
Reviewed-by: fyang, fjiang
-------------
PR: https://git.openjdk.org/jdk/pull/13862
More information about the hotspot-compiler-dev
mailing list