Skip to content

Commit de5582b

Browse files
Ensure that fgMorphFieldToSimdGetElement doesn't call gtNewSimdGetElementNode if the ISA is unsupported (#66853)
* Ensure that fgMorphFieldToSimdGetElement doesn't call gtNewSimdGetElementNode if the ISA is unsupported * Ensure fgMorphFieldToSimdGetElement is correctly checking for AdvSimd support on Arm64 * Ensure impExpandHalfConstEqualsSIMD checks for baseline simd support
1 parent ea4ebaa commit de5582b

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-2
lines changed

src/coreclr/jit/importer_vectorization.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,9 +142,9 @@ GenTree* Compiler::impExpandHalfConstEqualsSIMD(
142142
constexpr int maxPossibleLength = 32;
143143
assert(len >= 8 && len <= maxPossibleLength);
144144

145-
if (!compOpportunisticallyDependsOn(InstructionSet_Vector128))
145+
if (!IsBaselineSimdIsaSupported())
146146
{
147-
// We need SSE2 or ADVSIMD at least
147+
// We need baseline SIMD support at least
148148
return nullptr;
149149
}
150150

src/coreclr/jit/morph.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10833,6 +10833,47 @@ GenTree* Compiler::fgMorphFieldToSimdGetElement(GenTree* tree)
1083310833
assert(simdSize <= 16);
1083410834
assert(simdSize >= ((index + 1) * genTypeSize(simdBaseType)));
1083510835

10836+
#if defined(TARGET_XARCH)
10837+
switch (simdBaseType)
10838+
{
10839+
case TYP_BYTE:
10840+
case TYP_UBYTE:
10841+
case TYP_INT:
10842+
case TYP_UINT:
10843+
case TYP_LONG:
10844+
case TYP_ULONG:
10845+
{
10846+
if (!compOpportunisticallyDependsOn(InstructionSet_SSE41))
10847+
{
10848+
return tree;
10849+
}
10850+
break;
10851+
}
10852+
10853+
case TYP_DOUBLE:
10854+
case TYP_FLOAT:
10855+
case TYP_SHORT:
10856+
case TYP_USHORT:
10857+
{
10858+
if (!compOpportunisticallyDependsOn(InstructionSet_SSE2))
10859+
{
10860+
return tree;
10861+
}
10862+
break;
10863+
}
10864+
10865+
default:
10866+
{
10867+
unreached();
10868+
}
10869+
}
10870+
#elif defined(TARGET_ARM64)
10871+
if (!compOpportunisticallyDependsOn(InstructionSet_AdvSimd))
10872+
{
10873+
return tree;
10874+
}
10875+
#endif // !TARGET_XARCH && !TARGET_ARM64
10876+
1083610877
tree = gtNewSimdGetElementNode(simdBaseType, simdStructNode, op2, simdBaseJitType, simdSize,
1083710878
/* isSimdAsHWIntrinsic */ true);
1083810879
}

0 commit comments

Comments
 (0)