Skip to content

Commit f2acdfd

Browse files
DingliZhangshipilev
authored andcommitted
8296638: RISC-V: NegVI node emits wrong code when vector element basic type is T_BYTE/T_SHORT
Reviewed-by: gcao, fyang, shade
1 parent bfc5816 commit f2acdfd

File tree

1 file changed

+9
-7
lines changed

1 file changed

+9
-7
lines changed

src/hotspot/cpu/riscv/riscv_v.ad

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,9 @@ instruct vnegI(vReg dst, vReg src) %{
765765
ins_cost(VEC_COST);
766766
format %{ "vrsub.vx $dst, $src, $src\t#@vnegI" %}
767767
ins_encode %{
768-
__ vsetvli(t0, x0, Assembler::e32);
768+
BasicType bt = Matcher::vector_element_basic_type(this);
769+
Assembler::SEW sew = Assembler::elemtype_to_sew(bt);
770+
__ vsetvli(t0, x0, sew);
769771
__ vneg_v(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg));
770772
%}
771773
ins_pipe(pipe_slow);
@@ -809,7 +811,7 @@ instruct vnegD(vReg dst, vReg src) %{
809811
// vector and reduction
810812

811813
instruct reduce_andI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
812-
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
814+
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
813815
Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
814816
Matcher::vector_element_basic_type(n->in(2)) == T_INT);
815817
match(Set dst (AndReductionV src1 src2));
@@ -845,7 +847,7 @@ instruct reduce_andL(iRegLNoSp dst, iRegL src1, vReg src2, vReg tmp) %{
845847
// vector or reduction
846848

847849
instruct reduce_orI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
848-
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
850+
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
849851
Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
850852
Matcher::vector_element_basic_type(n->in(2)) == T_INT);
851853
match(Set dst (OrReductionV src1 src2));
@@ -881,7 +883,7 @@ instruct reduce_orL(iRegLNoSp dst, iRegL src1, vReg src2, vReg tmp) %{
881883
// vector xor reduction
882884

883885
instruct reduce_xorI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
884-
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
886+
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
885887
Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
886888
Matcher::vector_element_basic_type(n->in(2)) == T_INT);
887889
match(Set dst (XorReductionV src1 src2));
@@ -917,7 +919,7 @@ instruct reduce_xorL(iRegLNoSp dst, iRegL src1, vReg src2, vReg tmp) %{
917919
// vector add reduction
918920

919921
instruct reduce_addI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
920-
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
922+
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
921923
Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
922924
Matcher::vector_element_basic_type(n->in(2)) == T_INT);
923925
match(Set dst (AddReductionVI src1 src2));
@@ -987,7 +989,7 @@ instruct reduce_addD(fRegD src1_dst, vReg src2, vReg tmp) %{
987989
// vector integer max reduction
988990

989991
instruct vreduce_maxI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
990-
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
992+
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
991993
Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
992994
Matcher::vector_element_basic_type(n->in(2)) == T_INT);
993995
match(Set dst (MaxReductionV src1 src2));
@@ -1019,7 +1021,7 @@ instruct vreduce_maxL(iRegLNoSp dst, iRegL src1, vReg src2, vReg tmp) %{
10191021
// vector integer min reduction
10201022

10211023
instruct vreduce_minI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
1022-
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
1024+
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
10231025
Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
10241026
Matcher::vector_element_basic_type(n->in(2)) == T_INT);
10251027
match(Set dst (MinReductionV src1 src2));

0 commit comments

Comments
 (0)