From 9f582e56baee0e7f5af20da0f395cd935bf5a962 Mon Sep 17 00:00:00 2001 From: Hamlin Li Date: Tue, 25 Mar 2025 09:29:40 +0000 Subject: [PATCH] 8320997: RISC-V: C2 ReverseV Reviewed-by: fyang, luhenry --- src/hotspot/cpu/riscv/riscv_v.ad | 27 +++++++++++++++++++ .../vectorization/TestReverseBitsVector.java | 4 ++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/hotspot/cpu/riscv/riscv_v.ad b/src/hotspot/cpu/riscv/riscv_v.ad index 9892d2b9c03..cd9d2107b79 100644 --- a/src/hotspot/cpu/riscv/riscv_v.ad +++ b/src/hotspot/cpu/riscv/riscv_v.ad @@ -79,6 +79,7 @@ source %{ case Op_PopCountVL: case Op_PopCountVI: case Op_ReverseBytesV: + case Op_ReverseV: case Op_RotateLeftV: case Op_RotateRightV: return UseZvbb; @@ -4704,6 +4705,32 @@ instruct vround_d(vReg dst, vReg src, fRegD tmp, vRegMask_V0 v0) %{ ins_pipe(pipe_slow); %} +// -------------------------------- Reverse Bits Vector Operations ------------------------ + +instruct vreverse_masked(vReg dst_src, vRegMask_V0 v0) %{ + match(Set dst_src (ReverseV dst_src v0)); + format %{ "vreverse_masked $dst_src, $dst_src, v0" %} + ins_encode %{ + BasicType bt = Matcher::vector_element_basic_type(this); + uint vlen = Matcher::vector_length(this); + __ vsetvli_helper(bt, vlen); + __ vbrev_v(as_VectorRegister($dst_src$$reg), as_VectorRegister($dst_src$$reg), Assembler::v0_t); + %} + ins_pipe(pipe_slow); +%} + +instruct vreverse(vReg dst, vReg src) %{ + match(Set dst (ReverseV src)); + format %{ "vreverse $dst, $src" %} + ins_encode %{ + BasicType bt = Matcher::vector_element_basic_type(this); + uint vlen = Matcher::vector_length(this); + __ vsetvli_helper(bt, vlen); + __ vbrev_v(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg)); + %} + ins_pipe(pipe_slow); +%} + // -------------------------------- Reverse Bytes Vector Operations ------------------------ instruct vreverse_bytes_masked(vReg dst_src, vRegMask_V0 v0) %{ diff --git a/test/hotspot/jtreg/compiler/vectorization/TestReverseBitsVector.java b/test/hotspot/jtreg/compiler/vectorization/TestReverseBitsVector.java index 1144186d8e5..c8c6586675a 100644 --- a/test/hotspot/jtreg/compiler/vectorization/TestReverseBitsVector.java +++ b/test/hotspot/jtreg/compiler/vectorization/TestReverseBitsVector.java @@ -25,7 +25,9 @@ * @bug 8290034 * @summary Auto-vectorization of Reverse bit operation. * @requires vm.compiler2.enabled - * @requires (os.simpleArch == "x64" & vm.cpu.features ~= ".*avx2.*") | os.arch == "aarch64" + * @requires (os.simpleArch == "x64" & vm.cpu.features ~= ".*avx2.*") | + * os.arch == "aarch64" | + * (os.arch == "riscv64" & vm.cpu.features ~= ".*zbkb.*" & vm.cpu.features ~= ".*zvbb.*") * @library /test/lib / * @run driver compiler.vectorization.TestReverseBitsVector */