Skip to content

Commit 0fbec21

Browse files
committed
Allow 64-bit alignment in the test data table types and fix the AVX512 enablement check
1 parent f509157 commit 0fbec21

11 files changed

+23
-18
lines changed

src/coreclr/jit/compiler.cpp

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2287,7 +2287,6 @@ void Compiler::compSetProcessor()
22872287
instructionSetFlags.HasInstructionSet(InstructionSet_AVX512BW) &&
22882288
instructionSetFlags.HasInstructionSet(InstructionSet_AVX512DQ))
22892289
{
2290-
#if defined(DEBUG)
22912290
// Using JitStressEVEXEncoding flag will force instructions which would
22922291
// otherwise use VEX encoding but can be EVEX encoded to use EVEX encoding
22932292
// This requires AVX512VL support. JitForceEVEXEncoding forces this encoding, thus
@@ -2296,14 +2295,20 @@ void Compiler::compSetProcessor()
22962295
// We can't use !DoJitStressEvexEncoding() yet because opts.compSupportsISA hasn't
22972296
// been set yet as that's what we're trying to set here
22982297

2299-
bool disableAvx512 = !JitConfig.JitForceEVEXEncoding() && !JitConfig.JitStressEvexEncoding() &&
2300-
!instructionSetFlags.HasInstructionSet(InstructionSet_AVX512F_VL);
2301-
#else
2302-
// TODO-XARCH-AVX512: Allow AVX512 support by default
2303-
bool disableAvx512 = true;
2298+
bool enableAvx512 = false;
2299+
2300+
#if defined(DEBUG)
2301+
if (JitConfig.JitForceEVEXEncoding())
2302+
{
2303+
enableAvx512 = true;
2304+
}
2305+
else if (JitConfig.JitStressEvexEncoding() && instructionSetFlags.HasInstructionSet(InstructionSet_AVX512F_VL))
2306+
{
2307+
enableAvx512 = true;
2308+
}
23042309
#endif // DEBUG
23052310

2306-
if (disableAvx512)
2311+
if (!enableAvx512)
23072312
{
23082313
instructionSetFlags.RemoveInstructionSet(InstructionSet_AVX512F);
23092314
instructionSetFlags.RemoveInstructionSet(InstructionSet_AVX512F_VL);

src/tests/JIT/HardwareIntrinsics/X86/Shared/ScalarSimdUnOpTest_DataTable.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public unsafe struct ScalarSimdUnaryOpTest__DataTable<TResult> : IDisposable
2222
public ScalarSimdUnaryOpTest__DataTable(TResult[] outArray, int alignment)
2323
{
2424
int sizeOfoutArray = outArray.Length * Unsafe.SizeOf<TResult>();
25-
if ((alignment != 32 && alignment != 16) || (alignment * 2) < sizeOfoutArray)
25+
if (((alignment != 64) && (alignment != 32) && (alignment != 16)) || (alignment * 2) < sizeOfoutArray)
2626
{
2727
throw new ArgumentException("Invalid value of alignment");
2828
}

src/tests/JIT/HardwareIntrinsics/X86/Shared/SimdScalarUnOpTest_DataTable.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public unsafe struct SimdScalarUnaryOpTest__DataTable<TOp1> : IDisposable
2222
public SimdScalarUnaryOpTest__DataTable(TOp1[] inArray, int alignment)
2323
{
2424
int sizeOfinArray = inArray.Length * Unsafe.SizeOf<TOp1>();
25-
if ((alignment != 32 && alignment != 16) || (alignment * 2) < sizeOfinArray)
25+
if (((alignment != 64) && (alignment != 32) && (alignment != 16)) || (alignment * 2) < sizeOfinArray)
2626
{
2727
throw new ArgumentException("Invalid value of alignment");
2828
}

src/tests/JIT/HardwareIntrinsics/X86/Shared/SimpleBinOpConvTest_DataTable.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public SimpleBinaryOpConvTest__DataTable(TOp1[] inArray1, TOp2 inData2, TResult[
2828
{
2929
int sizeOfinArray1 = inArray1.Length * Unsafe.SizeOf<TOp1>();
3030
int sizeOfoutArray = outArray.Length * Unsafe.SizeOf<TResult>();
31-
if ((alignment != 32 && alignment != 16) || (alignment * 2) < sizeOfinArray1 || (alignment * 2) < sizeOfoutArray)
31+
if (((alignment != 64) && (alignment != 32) && (alignment != 16)) || (alignment * 2) < sizeOfinArray1 || (alignment * 2) < sizeOfoutArray)
3232
{
3333
throw new ArgumentException("Invalid value of alignment");
3434
}

src/tests/JIT/HardwareIntrinsics/X86/Shared/SimpleBinOpTest_DataTable.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public SimpleBinaryOpTest__DataTable(TOp1[] inArray1, TOp2[] inArray2, TResult[]
3030
int sizeOfinArray1 = inArray1.Length * Unsafe.SizeOf<TOp1>();
3131
int sizeOfinArray2 = inArray2.Length * Unsafe.SizeOf<TOp2>();
3232
int sizeOfoutArray = outArray.Length * Unsafe.SizeOf<TResult>();
33-
if ((alignment != 32 && alignment != 16) || (alignment * 2) < sizeOfinArray1 || (alignment * 2) < sizeOfinArray2 || (alignment * 2) < sizeOfoutArray)
33+
if (((alignment != 64) && (alignment != 32) && (alignment != 16)) || (alignment * 2) < sizeOfinArray1 || (alignment * 2) < sizeOfinArray2 || (alignment * 2) < sizeOfoutArray)
3434
{
3535
throw new ArgumentException("Invalid value of alignment");
3636
}

src/tests/JIT/HardwareIntrinsics/X86/Shared/SimpleUnOpTest_DataTable.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public SimpleUnaryOpTest__DataTable(TOp1[] inArray, TResult[] outArray, int alig
2626
{
2727
int sizeOfinArray = inArray.Length * Unsafe.SizeOf<TOp1>();
2828
int sizeOfoutArray = outArray.Length * Unsafe.SizeOf<TResult>();
29-
if ((alignment != 32 && alignment != 16) || (alignment * 2) < sizeOfinArray || (alignment * 2) < sizeOfoutArray)
29+
if (((alignment != 64) && (alignment != 32) && (alignment != 16)) || (alignment * 2) < sizeOfinArray || (alignment * 2) < sizeOfoutArray)
3030
{
3131
throw new ArgumentException("Invalid value of alignment");
3232
}

src/tests/JIT/HardwareIntrinsics/X86/Shared/_BinaryOpTestTemplate.template

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ namespace JIT.HardwareIntrinsics.X86
139139
int sizeOfinArray1 = inArray1.Length * Unsafe.SizeOf<{Op1BaseType}>();
140140
int sizeOfinArray2 = inArray2.Length * Unsafe.SizeOf<{Op2BaseType}>();
141141
int sizeOfoutArray = outArray.Length * Unsafe.SizeOf<{RetBaseType}>();
142-
if ((alignment != 32 && alignment != 16) || (alignment * 2) < sizeOfinArray1 || (alignment * 2) < sizeOfinArray2 || (alignment * 2) < sizeOfoutArray)
142+
if (((alignment != 64) && (alignment != 32) && (alignment != 16)) || (alignment * 2) < sizeOfinArray1 || (alignment * 2) < sizeOfinArray2 || (alignment * 2) < sizeOfoutArray)
143143
{
144144
throw new ArgumentException("Invalid value of alignment");
145145
}
@@ -487,7 +487,7 @@ namespace JIT.HardwareIntrinsics.X86
487487
Unsafe.Write(_dataTable.outArrayPtr, result);
488488
ValidateResult(test._fld1, test._fld2, _dataTable.outArrayPtr);
489489
}
490-
490+
491491
public void RunStructFldScenario()
492492
{
493493
TestLibrary.TestFramework.BeginScenario(nameof(RunStructFldScenario));

src/tests/JIT/HardwareIntrinsics/X86/Shared/_BooleanBinaryOpTestTemplate.template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ namespace JIT.HardwareIntrinsics.X86
136136
{
137137
int sizeOfinArray1 = inArray1.Length * Unsafe.SizeOf<{Op1BaseType}>();
138138
int sizeOfinArray2 = inArray2.Length * Unsafe.SizeOf<{Op2BaseType}>();
139-
if ((alignment != 32 && alignment != 16) || (alignment * 2) < sizeOfinArray1 || (alignment * 2) < sizeOfinArray2)
139+
if (((alignment != 64) && (alignment != 32) && (alignment != 16)) || (alignment * 2) < sizeOfinArray1 || (alignment * 2) < sizeOfinArray2)
140140
{
141141
throw new ArgumentException("Invalid value of alignment");
142142
}

src/tests/JIT/HardwareIntrinsics/X86/Shared/_BooleanUnaryOpTestTemplate.template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ namespace JIT.HardwareIntrinsics.X86
133133
public DataTable({Op1BaseType}[] inArray1, int alignment)
134134
{
135135
int sizeOfinArray1 = inArray1.Length * Unsafe.SizeOf<{Op1BaseType}>();
136-
if ((alignment != 32 && alignment != 16) || (alignment * 2) < sizeOfinArray1)
136+
if (((alignment != 64) && (alignment != 32) && (alignment != 16)) || (alignment * 2) < sizeOfinArray1)
137137
{
138138
throw new ArgumentException("Invalid value of alignment");
139139
}

src/tests/JIT/HardwareIntrinsics/X86/Shared/_TernaryOpTestTemplate.template

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ namespace JIT.HardwareIntrinsics.X86
142142
int sizeOfinArray2 = inArray2.Length * Unsafe.SizeOf<{Op2BaseType}>();
143143
int sizeOfinArray3 = inArray3.Length * Unsafe.SizeOf<{Op3BaseType}>();
144144
int sizeOfoutArray = outArray.Length * Unsafe.SizeOf<{RetBaseType}>();
145-
if ((alignment != 32 && alignment != 16) || (alignment * 2) < sizeOfinArray1 || (alignment * 2) < sizeOfinArray2 || (alignment * 2) < sizeOfinArray3 || (alignment * 2) < sizeOfoutArray)
145+
if (((alignment != 64) && (alignment != 32) && (alignment != 16)) || (alignment * 2) < sizeOfinArray1 || (alignment * 2) < sizeOfinArray2 || (alignment * 2) < sizeOfinArray3 || (alignment * 2) < sizeOfoutArray)
146146
{
147147
throw new ArgumentException("Invalid value of alignment");
148148
}

0 commit comments

Comments
 (0)