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