RFR: 8373722: [TESTBUG] compiler/vectorapi/TestVectorOperationsWithPartialSize.java fails intermittently

Xiaohong Gong xgong at openjdk.org
Tue Dec 23 06:52:36 UTC 2025


The test fails intermittently with the following error:


Caused by: java.lang.RuntimeException: assertEqualsWithTolerance: expected 0.0 but was 1.1754945E-38 (tolerance: 1.4E-44, diff: 1.1754945E-38)
at compiler.vectorapi.TestVectorOperationsWithPartialSize.verifyAddReductionFloat(TestVectorOperationsWithPartialSize.java:231)
at compiler.vectorapi.TestVectorOperationsWithPartialSize.testAddReductionFloat(TestVectorOperationsWithPartialSize.java:260)


The root cause is that the Vector API `reduceLanes()` does not guarantee a specific calculation order for floating-point reduction operations [1]. When the array contains extreme values, this can produce results outside the tolerance range compared to sequential scalar addition.

For example, given array elements:

[0.0f, Float.MIN_NORMAL, Float.MAX_VALUE, -Float.MAX_VALUE]


Sequential scalar addition produces:

0.0f + Float.MIN_NORMAL + Float.MAX_VALUE - Float.MAX_VALUE = 0.0f


However, `reduceLanes()` might compute:

(0.0f + Float.MIN_NORMAL) + (Float.MAX_VALUE - Float.MAX_VALUE) = Float.MIN_NORMAL


The difference of the two times of calculation is `Float.MIN_NORMAL` (1.1754945E-38), which exceeds the tolerance of `Math.ulp(0.0f) * 10.0f = 1.4E-44`. Even with a 10x rounding error factor, the tolerance is insufficient for such edge cases.

Since `reduceLanes()` does not require a specific calculation order, differences from scalar results can be significantly larger when special or extreme maximum/minimum values are present. Using a fixed tolerance is inappropriate for such corner cases.

This patch fixes the issue by initializing the float array in test with random normal values within a specified range, ensuring the result gap stays within the defined tolerance. 

Tested locally on my AArch64 and X86_64 machines 500 times, and I didn't observe the failure again.

[1] https://docs.oracle.com/en/java/javase/25/docs/api/jdk.incubator.vector/jdk/incubator/vector/FloatVector.html#reduceLanes(jdk.incubator.vector.VectorOperators.Associative)

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

Commit messages:
 - 8373722: [TESTBUG] compiler/vectorapi/TestVectorOperationsWithPartialSize.java fails intermittently

Changes: https://git.openjdk.org/jdk/pull/28960/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=28960&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8373722
  Stats: 5 lines in 1 file changed: 0 ins; 2 del; 3 mod
  Patch: https://git.openjdk.org/jdk/pull/28960.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/28960/head:pull/28960

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


More information about the hotspot-compiler-dev mailing list