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

Chang Peng duke at openjdk.org
Sun Apr 23 04:23:55 UTC 2023


On Thu, 20 Apr 2023 02:25:45 GMT, Chang Peng <duke at openjdk.org> wrote:

>> 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 incrementally with one additional commit since the last revision:
> 
>   Refactor some code

src/hotspot/cpu/aarch64/aarch64_vector_ad.m4 line 3625:

> 3623: instruct vmask$2_immI_sve(pReg dst, vReg src, $1 imm, immI_$2_cond cond, rFlagsReg cr) %{
> 3624:   predicate(UseSVE > 0);
> 3625:   match(Set dst (VectorMaskCmp (Binary src (ReplicateB imm)) cond));

@theRealAph 
The ReplicateXNodes used in match rules are also different in these two marcos.
I think we needn't to merge these two marcos since this will introduce some if-else statements which will reduce the readability.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13200#discussion_r1174505387


More information about the hotspot-compiler-dev mailing list