[aarch64-port-dev ] RFR(XS): 8242070: AArch64: Fix a typo introduced by JDK-8238690 
    Yang Zhang 
    Yang.Zhang at arm.com
       
    Fri Apr 10 02:52:45 UTC 2020
    
    
  
Hi,
Could you please help to review this patch?
JBS: https://bugs.openjdk.java.net/browse/JDK-8242070
Webrev: http://cr.openjdk.java.net/~yzhang/8242070/webrev.00/
In JDK-8238690, it unified IR shape for vector shifts by scalar and always used
ShiftV src (ShiftCntV shift)
When shift is scalar, the following IR nodes are generated.
         scalar_shift
               |
     src  ShiftCntV
      |     /
      |    /
      ShiftV
But when implementing this on AArch64, there is an issue in match rule
of vector shift right with imm shift for short type.
match(Set dst (RShiftVS src (LShiftCntV shift)));
LShiftCntV should be RShiftCntV here.
Test case:
  public static void shiftR(short[] a, short[] c) {
      for (int i = 0; i < a.length; i++) {
          c[i] = (short)(a[i] >> 2);
      }
  }
IR nodes:
                               imm:2
                                  |
      LoadVector RShiftCntV
           |                  /
           |               /
           RShiftVS
C2 aassembly generated:
Before:
  0x0000ffffac563764:   orr	w11, wzr, #0x2
  0x0000ffffac563768:   dup	v16.16b, w11  -------- vshiftcnt16B
  0x0000ffffac5637a8:   ldr	q24, [x18, #16]
  0x0000ffffac5637ac:   neg	v25.16b, v16.16b       ------
  0x0000ffffac5637b0:   sshl	v24.8h, v24.8h, v25.8h ------vsra8S
  0x0000ffffac5637b8:   str	q24, [x14, #16]
"match(Set dst (RShiftVS src (LShiftCntV shift)));" matching fails.
RShiftCntV and RShiftVS are matched separately by vshiftcnt16B and vsra8S.
After:
  0x0000ffffac563808:   ldr	q16, [x15, #16]
  0x0000ffffac56380c:   sshr	v16.8h, v16.8h, #2
  0x0000ffffac563814:   str	q16, [x14, #16]
"match(Set dst (RShiftVS src (RShiftCntV shift)));" matching succeeds.
Performance:
JMH test case is attached in JBS.
Before:
Benchmark               Mode  Cnt   Score   Error  Units
TestVect.testVectShift  avgt   10  66.964 ± 0.052  us/op
After:
Benchmark               Mode  Cnt   Score   Error  Units
TestVect.testVectShift  avgt   10  56.156 ± 0.053  us/op
Testing: tier1
Pass and no new failure.
Regards
Yang
    
    
More information about the hotspot-compiler-dev
mailing list