RFR: 8277843: [Vector API] scalar2vector shouldn't be used for mask operations if Op_MaskAll is unavailable

Jie Fu jiefu at openjdk.java.net
Thu Nov 25 14:49:28 UTC 2021


Hi all,

This bug was first observed on x86_32/AVX512.
It caused 62 vector api test failures.

==============================
Test summary
==============================
   TEST                                              TOTAL  PASS  FAIL ERROR
>> jtreg:test/jdk/jdk/incubator/vector                  74    12    62     0 <<
==============================


You can easily reproduce this bug on an AVX512 machine with x86_32.
Or you can also reproduce it on an AVX512 machine with x86_64 if you disable `Op_MaskAll` like this.

diff --git a/src/hotspot/cpu/x86/x86.ad b/src/hotspot/cpu/x86/x86.ad
index 3f6d5a44b0d..d5a751b310d 100644
--- a/src/hotspot/cpu/x86/x86.ad
+++ b/src/hotspot/cpu/x86/x86.ad
@@ -1819,6 +1819,7 @@ const bool Matcher::match_rule_supported_vector(int opcode, int vlen, BasicType
       }
       break;
     case Op_MaskAll:
+      return false;
       if (!is_LP64 || !VM_Version::supports_evex()) {
         return false;
       }


The failure reason is that `VectorNode::scalar2vector` generate incorrect IR for mask operations if `Op_MaskAll` is unavailable.
So it shouldn't be used for mask operations if `Op_MaskAll` is unavailable.

Testing (with two more bug fixes https://github.com/openjdk/jdk/pull/6535 and https://github.com/openjdk/jdk/pull/6533):
 - vector api tests on {x86_64, x86_32}/{AVX512, AVX256}, all passed
 - vector api tests on aarch64, all passed

Thanks.
Best regards,
Jie

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

Commit messages:
 - 8277843: [Vector API] scalar2vector shouldn't be used for mask operations if Op_MaskAll is unavailable

Changes: https://git.openjdk.java.net/jdk/pull/6562/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6562&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8277843
  Stats: 12 lines in 2 files changed: 11 ins; 0 del; 1 mod
  Patch: https://git.openjdk.java.net/jdk/pull/6562.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/6562/head:pull/6562

PR: https://git.openjdk.java.net/jdk/pull/6562


More information about the hotspot-compiler-dev mailing list