[jdk17] RFR: 8269580: assert(is_valid()) failed: invalid register (-1)
Jatin Bhateja
jbhateja at openjdk.java.net
Thu Jul 1 07:37:02 UTC 2021
On Tue, 29 Jun 2021 15:34:18 GMT, Jatin Bhateja <jbhateja at openjdk.org> wrote:
> - Assertion fails during emit phase of rep_stos instruction pattern on targets not supporting AVX512BW feature.
> - Pattern is selected under following predication logic.
> predicate(!((ClearArrayNode*)n)->is_large() &&
> (UseAVX <= 2 || !VM_Version::supports_avx512vlbw()));
> - Encoding block of this pattern passes a knoreg opmask register having a default encoding of -1, this later causes an assertion failure while assembling instruction operating over this register.
> - Existing pattern rep_stos_evex should be able to handle case for AVX512 targets as instructions operating of opmask registers are anyways guarded by target feature checks.
Hi @sviswa7 , in all the following code paths originating from rep_stos and rep_stos_evex instruction pattern EVEX encoded instructions are guarded by compile time checks, thus it should be safe to remove AVX512BW check from rep_stos and just enable it for UseAVX <= 2.
- fill64_avx: Emits 64 byte mode if AVXThreshold=0 and UseAVX > 2 else it disintegrates to two 32 byte vex encoded moves.
- fill64_masked_avx : Is again guarded by AVX3Threshold = 0 and UseAVX > 2
- fill32_masked_avx : Guarded by UseAVX > 2 and AVX512VL == true.
This bug is related to clear operation over small non-constant length.
-------------
PR: https://git.openjdk.java.net/jdk17/pull/172
More information about the hotspot-compiler-dev
mailing list