8296638: RISC-V: NegVI node emits wrong code when vector element basic type is T_BYTE/T_SHORT
Reviewed-by: gcao, fyang, shade
This commit is contained in:
parent
bfc5816595
commit
f2acdfdcbd
@ -765,7 +765,9 @@ instruct vnegI(vReg dst, vReg src) %{
|
||||
ins_cost(VEC_COST);
|
||||
format %{ "vrsub.vx $dst, $src, $src\t#@vnegI" %}
|
||||
ins_encode %{
|
||||
__ vsetvli(t0, x0, Assembler::e32);
|
||||
BasicType bt = Matcher::vector_element_basic_type(this);
|
||||
Assembler::SEW sew = Assembler::elemtype_to_sew(bt);
|
||||
__ vsetvli(t0, x0, sew);
|
||||
__ vneg_v(as_VectorRegister($dst$$reg), as_VectorRegister($src$$reg));
|
||||
%}
|
||||
ins_pipe(pipe_slow);
|
||||
@ -809,7 +811,7 @@ instruct vnegD(vReg dst, vReg src) %{
|
||||
// vector and reduction
|
||||
|
||||
instruct reduce_andI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
|
||||
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
|
||||
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
|
||||
Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
|
||||
Matcher::vector_element_basic_type(n->in(2)) == T_INT);
|
||||
match(Set dst (AndReductionV src1 src2));
|
||||
@ -845,7 +847,7 @@ instruct reduce_andL(iRegLNoSp dst, iRegL src1, vReg src2, vReg tmp) %{
|
||||
// vector or reduction
|
||||
|
||||
instruct reduce_orI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
|
||||
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
|
||||
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
|
||||
Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
|
||||
Matcher::vector_element_basic_type(n->in(2)) == T_INT);
|
||||
match(Set dst (OrReductionV src1 src2));
|
||||
@ -881,7 +883,7 @@ instruct reduce_orL(iRegLNoSp dst, iRegL src1, vReg src2, vReg tmp) %{
|
||||
// vector xor reduction
|
||||
|
||||
instruct reduce_xorI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
|
||||
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
|
||||
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
|
||||
Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
|
||||
Matcher::vector_element_basic_type(n->in(2)) == T_INT);
|
||||
match(Set dst (XorReductionV src1 src2));
|
||||
@ -917,7 +919,7 @@ instruct reduce_xorL(iRegLNoSp dst, iRegL src1, vReg src2, vReg tmp) %{
|
||||
// vector add reduction
|
||||
|
||||
instruct reduce_addI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
|
||||
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
|
||||
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
|
||||
Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
|
||||
Matcher::vector_element_basic_type(n->in(2)) == T_INT);
|
||||
match(Set dst (AddReductionVI src1 src2));
|
||||
@ -987,7 +989,7 @@ instruct reduce_addD(fRegD src1_dst, vReg src2, vReg tmp) %{
|
||||
// vector integer max reduction
|
||||
|
||||
instruct vreduce_maxI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
|
||||
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
|
||||
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
|
||||
Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
|
||||
Matcher::vector_element_basic_type(n->in(2)) == T_INT);
|
||||
match(Set dst (MaxReductionV src1 src2));
|
||||
@ -1019,7 +1021,7 @@ instruct vreduce_maxL(iRegLNoSp dst, iRegL src1, vReg src2, vReg tmp) %{
|
||||
// vector integer min reduction
|
||||
|
||||
instruct vreduce_minI(iRegINoSp dst, iRegIorL2I src1, vReg src2, vReg tmp) %{
|
||||
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
|
||||
predicate(Matcher::vector_element_basic_type(n->in(2)) == T_BYTE ||
|
||||
Matcher::vector_element_basic_type(n->in(2)) == T_SHORT ||
|
||||
Matcher::vector_element_basic_type(n->in(2)) == T_INT);
|
||||
match(Set dst (MinReductionV src1 src2));
|
||||
|
Loading…
Reference in New Issue
Block a user