[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