[jdk17] RFR: 8269580: assert(is_valid()) failed: invalid register (-1)
Jatin Bhateja
jbhateja at openjdk.java.net
Thu Jul 1 15:12:01 UTC 2021
On Thu, 1 Jul 2021 08:45:00 GMT, Dean Long <dlong at openjdk.org> wrote:
>> 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.
>
> @jatin-bhateja I see your point. With your change, the predicates are enough to prevent the assert. But I noticed an existing issue for both the small and large cases. The predicates do not prevent some cases where a mask register will be reserved when it isn't really needed. For example when UseFastStosb is TRUE or UseXMMForObjInit is FALSE. It seems like a good followup RFE.
Hi @dean-long , yes extra opmask allocation will exist for non default control path, but its not a bug, and that's the penalty of packing mutiple flows in one pattern. We can do more cleanup in this flow as suggested.
-------------
PR: https://git.openjdk.java.net/jdk17/pull/172
More information about the hotspot-compiler-dev
mailing list