RFR: 8301739: AArch64: Add optimized rules for vector compare with immediate for SVE [v2]

Chang Peng duke at openjdk.org
Thu Apr 20 01:55:44 UTC 2023


> We can use SVE compare-with-integer-immediate instructions like cmpgt(immediate)[1] to avoid the extra scalar2vector operations.
> 
> The following instruction sequence
> 
> 
> movi    v17.16b, #12
> cmpgt   p0.b, p7/z, z16.b, z17.b
> 
> 
> can be optimized to:
> 
> 
> cmpgt   p0.b, p7/z, z16.b, #12
> 
> 
> This patch does the following:
> 1. Add SVE compare-with-7bit-unsigned-immediate instructions to C2's backend.
> SVE cmp<cc>(immediate) instructions can support vector comparing with 7bit unsigned integer immediate (range from 0 to 
> 127)or 5bit signed integer immediate (range from -16 to 15).
> 
> 2. Add optimized match rules to generate the compare-with-immediate instructions.
> 
> [1]: https://developer.arm.com/documentation/ddi0596/2021-12/SVE-Instructions/CMP-cc---immediate---Compare-vector-to-immediate-

Chang Peng has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains two additional commits since the last revision:

 - Merge branch 'openjdk:master' into add_sve_cmpU
 - 8301739: AArch64: Add optimized rules for vector compare with immediate for SVE
   
   We can use SVE compare-with-integer-immediate instructions like
   cmpgt(immediate)[1] to avoid the extra scalar2vector
   operations.
   
   The following instruction sequence
   
   ```
   movi    v17.16b, #12
   cmpgt   p0.b, p7/z, z16.b, z17.b
   ```
   
   can be optimized to:
   
   ```
   cmpgt   p0.b, p7/z, z16.b, #12
   ```
   
   This patch does the following:
   1. Add SVE compare-with-7bit-unsigned-immediate instructions to C2's backend.
   
   SVE cmp<cc>(immediate) instructions can support vector comparing with
   7bit unsigned integer immediate (range from 0 to 127) or 5bit signed
   integer immediate (range from -16 to 15).
   
   2. Add optimized match rules to generate the compare-with-immediate
   instructions.
   
   [1]: https://developer.arm.com/documentation/ddi0596/2021-12/SVE-Instructions/CMP-cc---immediate---Compare-vector-to-immediate-
   
   TEST_LABEL: v1 || n2, aarch64&&ubuntu&&conformance-enabled
   JDK_SCOPE: hotspot:compiler/vectorapi, jdk:jdk/incubator/vector/
   
   Jira: ENTLLT-5294
   Change-Id: I6b915864308faf9a8ec6e35ca1b4948666d75dca

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

Changes:
  - all: https://git.openjdk.org/jdk/pull/13200/files
  - new: https://git.openjdk.org/jdk/pull/13200/files/dd190608..8a9a43d9

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jdk&pr=13200&range=01
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=13200&range=00-01

  Stats: 295625 lines in 3103 files changed: 247243 ins; 30238 del; 18144 mod
  Patch: https://git.openjdk.org/jdk/pull/13200.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/13200/head:pull/13200

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


More information about the hotspot-compiler-dev mailing list