On Wed, 18 Mar 2026 01:42:25 GMT, Mohamed Issa <[email protected]> wrote:
>> Although the scalar AVX10 floating point min/max instructions (VMINMAXSD, >> VMINMAXSS, VMINMAXSH) are compact, it's better not to use them in reduction >> loops. This is because of serial data dependencies that get triggered across >> loop iterations. An alternate implementation using comparisons and jumps >> leverages branch prediction and limits the effects of data dependencies to >> cheaper instructions (e.g, MOV). Please note that this method is already >> used for non-AVX10 min/max reduction loop scenarios. >> >> With that background provided, these changes remove AVX10 floating point >> min/max instructions from single and double precision floating point >> reduction loops. They are replaced by the separate instruction sequence >> described above. Currently, min/max half precision floating point reduction >> loops aren't detectable, so they will be handled in a separate PR. There is >> also some code cleanup to remove unused instruction definitions while also >> adding necessary supporting infrastructure. The JTREG tests listed below >> were used to verify correctness with the recommended JVM options mentioned >> in corresponding source files. All modifications and tests used [OpenJDK >> v27-b12](https://github.com/openjdk/jdk/releases/tag/jdk-27%2B12) as the >> baseline build. >> >> 1. `jtreg:test/jdk/jdk/incubator/vector/DoubleVector64Tests.java` >> 2. `jtreg:test/jdk/jdk/incubator/vector/DoubleVector128Tests.java` >> 3. `jtreg:test/jdk/jdk/incubator/vector/DoubleVector256Tests.java` >> 4. `jtreg:test/jdk/jdk/incubator/vector/DoubleVector512Tests.java` >> 5. `jtreg:test/jdk/jdk/incubator/vector/DoubleVectorMaxTests.java` >> 6. `jtreg:test/jdk/jdk/incubator/vector/FloatVector64Tests.java` >> 7. `jtreg:test/jdk/jdk/incubator/vector/FloatVector128Tests.java` >> 8. `jtreg:test/jdk/jdk/incubator/vector/FloatVector256Tests.java` >> 9. `jtreg:test/jdk/jdk/incubator/vector/FloatVector512Tests.java` >> 10. `jtreg:test/jdk/jdk/incubator/vector/FloatVectorMaxTests.java` >> 11. >> `jtreg:test/hotspot/jtreg/compiler/vectorization/TestFloat16VectorOperations.java` >> 12. >> `jtreg:test/hotspot/jtreg/compiler/c2/irTests/TestFloat16ScalarOperations.java` >> 13. `jtreg:test/hotspot/jtreg/compiler/igvn/TestMinMaxIdentity.java` >> 14. >> `jtreg:test/hotspot/jtreg/compiler/intrinsics/float16/TestFloat16MaxMinSpecialValues.java` >> 15. >> `jtreg:test/hotspot/jtreg/compiler/intrinsics/math/TestFpMinMaxReductions.java` >> >> Finally, the JMH micro-benchmarks listed below were updated to ensure all >> code paths are exercised. >> >> 1. `micro:test/... > > Mohamed Issa has updated the pull request incrementally with one additional > commit since the last revision: > > Rename IR match nodes in tests to account for merging of scalar min/max > definitions in x86.ad file. src/hotspot/cpu/x86/assembler_x86.cpp line 13426: > 13424: } > 13425: > 13426: void Assembler::vminmaxss(XMMRegister dst, KRegister mask, XMMRegister > nds, XMMRegister src, bool merge, int imm8) { To follow the convention of AVX512/AVX10.2 instruction naming, we should name this as evminmaxss. Likewise for other AVX10.2 instructions. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/29831#discussion_r2956627171
