RFR: 8296515: RISC-V: Small refactoring for MaxReductionV/MinReductionV/AddReductionV node implementation [v2]

Dingli Zhang dzhang at openjdk.org
Wed Nov 9 06:39:31 UTC 2022


On Wed, 9 Nov 2022 06:32:40 GMT, Yanhong Zhu <yzhu at openjdk.org> wrote:

>> src/hotspot/cpu/riscv/c2_MacroAssembler_riscv.cpp line 1717:
>> 
>>> 1715:       vredxor_vs(tmp, src2, tmp);
>>> 1716:       break;
>>> 1717:     case Op_MaxReductionV:
>> 
>> We implemented Byte/Short MaxReductionV like this patch before. But there are 2 test cases that failed:
>> jdk/jdk/incubator/vector/ShortMaxVectorTests.java 
>> jdk/jdk/incubator/vector/ByteMaxVectorTests.java
>> The reason is that "make_reduction_input" will return INT_MAX for Byte & Short type.
>> Did you meet this problem?
>
>> 
> 
> I see that this has been fixed in the previous PR 8271515.
> Approved.

Hi @yhzhu20, thanks for the review! I think this problem was solved in https://github.com/openjdk/jdk/pull/5873/commits/4e7f606030d67a4f284c375d9c8811f525ae97fd :

@@ -1105,7 +1145,9 @@ Node* ReductionNode::make_reduction_input(PhaseGVN& gvn, int opc, BasicType bt)
     case Op_MinReductionV:
       switch (bt) {
         case T_BYTE:
+          return gvn.makecon(TypeInt::make(max_jbyte));
         case T_SHORT:
+          return gvn.makecon(TypeInt::make(max_jshort));
         case T_INT:
           return gvn.makecon(TypeInt::MAX);
         case T_LONG:
@@ -1120,7 +1162,9 @@ Node* ReductionNode::make_reduction_input(PhaseGVN& gvn, int opc, BasicType bt)
     case Op_MaxReductionV:
       switch (bt) {
         case T_BYTE:
+          return gvn.makecon(TypeInt::make(min_jbyte));
         case T_SHORT:
+          return gvn.makecon(TypeInt::make(min_jshort));
         case T_INT:
           return gvn.makecon(TypeInt::MIN);
         case T_LONG:

The function "make_reduction_input" will return different types for Byte & Short than for int now.

-------------

PR: https://git.openjdk.org/jdk/pull/11036


More information about the hotspot-dev mailing list