RFR: 8309660: C2: failed: XMM register should be 0-15 (UseKNLSetting and ConvF2HF)

Emanuel Peter epeter at openjdk.org
Fri Jun 9 10:03:45 UTC 2023


Context: `Float.floatToFloat16` -> `vcvtps2ph`.

**Problem**

vcvtps2ph
pre=Assembler::VEX_SIMD_66
opc=Assembler::VEX_OPCODE_0F_3A
VEX.128.66.0F3A
requires F16C

https://www.felixcloutier.com/x86/vcvtps2ph

So this is a non-AVX512 feature, and we should only use the registers `xmm0-15`.

There is also a AVX512 version, but it requires `AVX512VL and AVX512F`.

So on `x64`, we should only use registers `xmm0-15` if we do not have `AVX512VL`, and if we have it, then we can use `xmm0-31`.

**Suggested Solution**
As @sviswa7 suggested, we should just use the `vlRegF` instead of `regF`, see discussion in comments.

**Testing**
I simulated the patch on intel's `sde`. So now I'm confident that I don't generate code that uses `AVX512VL` registers (XMM16-31).

Running: tier1-6 + stress testing.

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

Commit messages:
 - Fix by @sviswa7
 - 8309660: C2: failed: XMM register should be 0-15 (UseKNLSetting and ConvF2HF)

Changes: https://git.openjdk.org/jdk/pull/14379/files
 Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=14379&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8309660
  Stats: 36 lines in 2 files changed: 32 ins; 0 del; 4 mod
  Patch: https://git.openjdk.org/jdk/pull/14379.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/14379/head:pull/14379

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


More information about the hotspot-compiler-dev mailing list