RFR: 8338021: Support new unsigned and saturating vector operators in VectorAPI [v31]
Jatin Bhateja
jbhateja at openjdk.org
Thu Oct 24 13:36:51 UTC 2024
On Thu, 24 Oct 2024 06:46:32 GMT, Emanuel Peter <epeter at openjdk.org> wrote:
>> Jatin Bhateja has updated the pull request incrementally with one additional commit since the last revision:
>>
>> Factor out IR tests and Transforms to follow-up PRs.
>
> src/hotspot/cpu/x86/x86.ad line 10790:
>
>> 10788: predicate(is_subword_type(Matcher::vector_element_basic_type(n)) &&
>> 10789: n->is_SaturatingVector() && !n->as_SaturatingVector()->is_unsigned());
>> 10790: match(Set dst (SaturatingAddV (Binary dst (LoadVector src)) mask));
>
> Do equivalent store operations exist we could also match for?
ISA only supports memory operands as second source operand.
> test/jdk/jdk/incubator/vector/VectorMathTest.java line 70:
>
>> 68: public static short[] INPUT_SS = {Short.MIN_VALUE, (short)(Short.MIN_VALUE + TEN_S), ZERO_S, (short)(Short.MAX_VALUE - TEN_S), Short.MAX_VALUE};
>> 69: public static int[] INPUT_SI = {Integer.MIN_VALUE, (Integer.MIN_VALUE + TEN_I), ZERO_I, Integer.MAX_VALUE - TEN_I, Integer.MAX_VALUE};
>> 70: public static long[] INPUT_SL = {Long.MIN_VALUE, Long.MIN_VALUE + TEN_L, ZERO_L, Long.MAX_VALUE - TEN_L, Long.MAX_VALUE};
>
> Ok, now we have 4 or 5 hand-crafted examples. Is that sufficient? Some random values would be nice, then we know that at least eventually we have full coverage.
Hand crafter cases contains delimiting and general cases, in short they sufficiently cover entire value range.
> test/jdk/jdk/incubator/vector/templates/Unit-header.template line 1244:
>
>> 1242: return fill(s * BUFFER_REPS,
>> 1243: i -> ($type$)($Boxtype$.MIN_VALUE + 100));
>> 1244: })
>
> Not sure I see this right. But are we only providing these 4 constants as inputs, and all values in the input arrays will be identical? If that is true: we should have some random inputs, or at least dependent on `i`.
Most important test points in a saturating operations are the edge conditions where overflow semantics differs and operation saturates a value than wrapping it around.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/20507#discussion_r1814998684
PR Review Comment: https://git.openjdk.org/jdk/pull/20507#discussion_r1814999013
PR Review Comment: https://git.openjdk.org/jdk/pull/20507#discussion_r1814998545
More information about the hotspot-compiler-dev
mailing list