Skip to content

Commit fbc1e66

Browse files
author
Jatin Bhateja
committed
8328181: C2: assert(MaxVectorSize >= 32) failed: vector length should be >= 32
Reviewed-by: kvn, vlivanov
1 parent a887fd2 commit fbc1e66

File tree

5 files changed

+16
-17
lines changed

5 files changed

+16
-17
lines changed

src/hotspot/cpu/x86/macroAssembler_x86.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5779,7 +5779,7 @@ void MacroAssembler::xmm_clear_mem(Register base, Register cnt, Register rtmp, X
57795779

57805780
// Clearing constant sized memory using YMM/ZMM registers.
57815781
void MacroAssembler::clear_mem(Register base, int cnt, Register rtmp, XMMRegister xtmp, KRegister mask) {
5782-
assert(UseAVX > 2 && VM_Version::supports_avx512vlbw(), "");
5782+
assert(UseAVX > 2 && VM_Version::supports_avx512vl(), "");
57835783
bool use64byteVector = (MaxVectorSize > 32) && (VM_Version::avx3_threshold() == 0);
57845784

57855785
int vector64_count = (cnt & (~0x7)) >> 3;

src/hotspot/cpu/x86/x86.ad

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1750,7 +1750,6 @@ bool Matcher::match_rule_supported_vector(int opcode, int vlen, BasicType bt) {
17501750
return false;
17511751
}
17521752
break;
1753-
case Op_ClearArray:
17541753
case Op_VectorMaskGen:
17551754
case Op_VectorCmpMasked:
17561755
if (!is_LP64 || !VM_Version::supports_avx512bw()) {

src/hotspot/cpu/x86/x86_32.ad

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11470,8 +11470,8 @@ instruct expandBitsL_reg(eADXRegL dst, eBCXRegL src, eBDPRegL mask, eSIRegI rtmp
1147011470
%}
1147111471

1147211472
// =======================================================================
11473-
// fast clearing of an array
11474-
// Small ClearArray non-AVX512.
11473+
// Fast clearing of an array
11474+
// Small non-constant length ClearArray for non-AVX512 targets.
1147511475
instruct rep_stos(eCXRegI cnt, eDIRegP base, regD tmp, eAXRegI zero, Universe dummy, eFlagsReg cr) %{
1147611476
predicate(!((ClearArrayNode*)n)->is_large() && (UseAVX <= 2));
1147711477
match(Set dummy (ClearArray cnt base));
@@ -11531,7 +11531,7 @@ instruct rep_stos(eCXRegI cnt, eDIRegP base, regD tmp, eAXRegI zero, Universe du
1153111531
ins_pipe( pipe_slow );
1153211532
%}
1153311533

11534-
// Small ClearArray AVX512 non-constant length.
11534+
// Small non-constant length ClearArray for AVX512 targets.
1153511535
instruct rep_stos_evex(eCXRegI cnt, eDIRegP base, legRegD tmp, kReg ktmp, eAXRegI zero, Universe dummy, eFlagsReg cr) %{
1153611536
predicate(!((ClearArrayNode*)n)->is_large() && (UseAVX > 2));
1153711537
match(Set dummy (ClearArray cnt base));
@@ -11592,7 +11592,7 @@ instruct rep_stos_evex(eCXRegI cnt, eDIRegP base, legRegD tmp, kReg ktmp, eAXReg
1159211592
ins_pipe( pipe_slow );
1159311593
%}
1159411594

11595-
// Large ClearArray non-AVX512.
11595+
// Large non-constant length ClearArray for non-AVX512 targets.
1159611596
instruct rep_stos_large(eCXRegI cnt, eDIRegP base, regD tmp, eAXRegI zero, Universe dummy, eFlagsReg cr) %{
1159711597
predicate((UseAVX <= 2) && ((ClearArrayNode*)n)->is_large());
1159811598
match(Set dummy (ClearArray cnt base));
@@ -11642,7 +11642,7 @@ instruct rep_stos_large(eCXRegI cnt, eDIRegP base, regD tmp, eAXRegI zero, Unive
1164211642
ins_pipe( pipe_slow );
1164311643
%}
1164411644

11645-
// Large ClearArray AVX512.
11645+
// Large non-constant length ClearArray for AVX512 targets.
1164611646
instruct rep_stos_large_evex(eCXRegI cnt, eDIRegP base, legRegD tmp, kReg ktmp, eAXRegI zero, Universe dummy, eFlagsReg cr) %{
1164711647
predicate((UseAVX > 2) && ((ClearArrayNode*)n)->is_large());
1164811648
match(Set dummy (ClearArray cnt base));
@@ -11692,11 +11692,10 @@ instruct rep_stos_large_evex(eCXRegI cnt, eDIRegP base, legRegD tmp, kReg ktmp,
1169211692
ins_pipe( pipe_slow );
1169311693
%}
1169411694

11695-
// Small ClearArray AVX512 constant length.
11695+
// Small constant length ClearArray for AVX512 targets.
1169611696
instruct rep_stos_im(immI cnt, kReg ktmp, eRegP base, regD tmp, rRegI zero, Universe dummy, eFlagsReg cr)
1169711697
%{
11698-
predicate(!((ClearArrayNode*)n)->is_large() &&
11699-
((UseAVX > 2) && VM_Version::supports_avx512vlbw()));
11698+
predicate(!((ClearArrayNode*)n)->is_large() && (MaxVectorSize >= 32) && VM_Version::supports_avx512vl());
1170011699
match(Set dummy (ClearArray cnt base));
1170111700
ins_cost(100);
1170211701
effect(TEMP tmp, TEMP zero, TEMP ktmp, KILL cr);

src/hotspot/cpu/x86/x86_64.ad

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10410,7 +10410,7 @@ instruct MoveL2D_reg_reg(regD dst, rRegL src) %{
1041010410
%}
1041110411

1041210412
// Fast clearing of an array
10413-
// Small ClearArray non-AVX512.
10413+
// Small non-constant lenght ClearArray for non-AVX512 targets.
1041410414
instruct rep_stos(rcx_RegL cnt, rdi_RegP base, regD tmp, rax_RegI zero,
1041510415
Universe dummy, rFlagsReg cr)
1041610416
%{
@@ -10470,7 +10470,7 @@ instruct rep_stos(rcx_RegL cnt, rdi_RegP base, regD tmp, rax_RegI zero,
1047010470
ins_pipe(pipe_slow);
1047110471
%}
1047210472

10473-
// Small ClearArray AVX512 non-constant length.
10473+
// Small non-constant length ClearArray for AVX512 targets.
1047410474
instruct rep_stos_evex(rcx_RegL cnt, rdi_RegP base, legRegD tmp, kReg ktmp, rax_RegI zero,
1047510475
Universe dummy, rFlagsReg cr)
1047610476
%{
@@ -10531,7 +10531,7 @@ instruct rep_stos_evex(rcx_RegL cnt, rdi_RegP base, legRegD tmp, kReg ktmp, rax_
1053110531
ins_pipe(pipe_slow);
1053210532
%}
1053310533

10534-
// Large ClearArray non-AVX512.
10534+
// Large non-constant length ClearArray for non-AVX512 targets.
1053510535
instruct rep_stos_large(rcx_RegL cnt, rdi_RegP base, regD tmp, rax_RegI zero,
1053610536
Universe dummy, rFlagsReg cr)
1053710537
%{
@@ -10582,7 +10582,7 @@ instruct rep_stos_large(rcx_RegL cnt, rdi_RegP base, regD tmp, rax_RegI zero,
1058210582
ins_pipe(pipe_slow);
1058310583
%}
1058410584

10585-
// Large ClearArray AVX512.
10585+
// Large non-constant length ClearArray for AVX512 targets.
1058610586
instruct rep_stos_large_evex(rcx_RegL cnt, rdi_RegP base, legRegD tmp, kReg ktmp, rax_RegI zero,
1058710587
Universe dummy, rFlagsReg cr)
1058810588
%{
@@ -10633,11 +10633,10 @@ instruct rep_stos_large_evex(rcx_RegL cnt, rdi_RegP base, legRegD tmp, kReg ktmp
1063310633
ins_pipe(pipe_slow);
1063410634
%}
1063510635

10636-
// Small ClearArray AVX512 constant length.
10636+
// Small constant length ClearArray for AVX512 targets.
1063710637
instruct rep_stos_im(immL cnt, rRegP base, regD tmp, rRegI zero, kReg ktmp, Universe dummy, rFlagsReg cr)
1063810638
%{
10639-
predicate(!((ClearArrayNode*)n)->is_large() &&
10640-
((UseAVX > 2) && VM_Version::supports_avx512vlbw()));
10639+
predicate(!((ClearArrayNode*)n)->is_large() && (MaxVectorSize >= 32) && VM_Version::supports_avx512vl());
1064110640
match(Set dummy (ClearArray cnt base));
1064210641
ins_cost(100);
1064310642
effect(TEMP tmp, TEMP zero, TEMP ktmp, KILL cr);

test/hotspot/jtreg/compiler/c2/ClearArray.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@
3131
* -XX:InitArrayShortSize=32768 -XX:-IdealizeClearArrayNode compiler.c2.ClearArray
3232
* @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -Xbatch
3333
* -XX:InitArrayShortSize=32768 -XX:-IdealizeClearArrayNode -XX:UseAVX=3 compiler.c2.ClearArray
34+
* @run main/othervm -XX:+UnlockDiagnosticVMOptions -XX:+IgnoreUnrecognizedVMOptions -XX:-TieredCompilation -Xbatch
35+
* -XX:InitArrayShortSize=32768 -XX:MaxVectorSize=8 -XX:-IdealizeClearArrayNode -XX:UseAVX=3 compiler.c2.ClearArray
3436
*/
3537

3638
package compiler.c2;

0 commit comments

Comments
 (0)