RFR: 8307609: RISC-V: Added support for Extract, Compress, Expand and other nodes for Vector API [v10]
Fei Yang
fyang at openjdk.org
Fri May 19 01:47:57 UTC 2023
On Fri, 19 May 2023 01:20:17 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 vs...
>
> Dingli Zhang has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 21 commits:
>
> - Merge remote-tracking branch 'upstream/master' into JDK-8307609
> - Remove masked vmaskall
> - Add vmask_lasttrue
> - Add some comments
> - Merge remote-tracking branch 'upstream/master' into JDK-8307609
> - Adjust some params order in c2_MacroAssembler_riscv
> - Adjust some function in c2_MacroAssembler_riscv
> - Remove trailing whitespace
> - Fix minmax_fp_masked_v
> - Change some iRegI to iRegIorL2I and small refactoring of minmax_fp_masked_v
> - ... and 11 more: https://git.openjdk.org/jdk/compare/e520cdc8...04ff9333
Some extra nit-picking suggestions. Otherwise, looks good. Thanks.
src/hotspot/cpu/riscv/riscv_v.ad line 3942:
> 3940: match(Set dst (ExpandV src v0));
> 3941: effect(TEMP_DEF dst, TEMP tmp);
> 3942: format %{ "vexpand $dst, $src, $v0" %}
Suggestion: `format %{ "vexpand $dst, $src, $v0\t# KILL $tmp" %}`
src/hotspot/cpu/riscv/riscv_v.ad line 4035:
> 4033: // ------------------------------ Populate Index to a Vector -------------------
> 4034:
> 4035: instruct populateindex(vReg dst, iRegIorL2I src1, iRegIorL2I src2, vReg tmp1) %{
Suggestion: Rename `tmp1` to `tmp`
src/hotspot/cpu/riscv/riscv_v.ad line 4073:
> 4071: %}
> 4072:
> 4073: instruct insertI_index(vReg dst, vReg src, iRegIorL2I val, iRegIorL2I idx, vReg tmp1, vRegMask_V0 v0) %{
Suggestion: Rename `tmp1` to `tmp`
src/hotspot/cpu/riscv/riscv_v.ad line 4111:
> 4109: %}
> 4110:
> 4111: instruct insertL_index(vReg dst, vReg src, iRegL val, iRegIorL2I idx, vReg tmp1, vRegMask_V0 v0) %{
Suggestion: Rename `tmp1` to `tmp`
src/hotspot/cpu/riscv/riscv_v.ad line 4146:
> 4144: %}
> 4145:
> 4146: instruct insertF_index(vReg dst, vReg src, fRegF val, iRegIorL2I idx, vReg tmp1, vRegMask_V0 v0) %{
Suggestion: Rename `tmp1` to `tmp`
src/hotspot/cpu/riscv/riscv_v.ad line 4180:
> 4178: %}
> 4179:
> 4180: instruct insertD_index(vReg dst, vReg src, fRegD val, iRegIorL2I idx, vReg tmp1, vRegMask_V0 v0) %{
Suggestion: Rename `tmp1` to `tmp`
-------------
Changes requested by fyang (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/13862#pullrequestreview-1433666573
PR Review Comment: https://git.openjdk.org/jdk/pull/13862#discussion_r1198465264
PR Review Comment: https://git.openjdk.org/jdk/pull/13862#discussion_r1198465979
PR Review Comment: https://git.openjdk.org/jdk/pull/13862#discussion_r1198466117
PR Review Comment: https://git.openjdk.org/jdk/pull/13862#discussion_r1198466179
PR Review Comment: https://git.openjdk.org/jdk/pull/13862#discussion_r1198466235
PR Review Comment: https://git.openjdk.org/jdk/pull/13862#discussion_r1198466274
More information about the hotspot-compiler-dev
mailing list