summaryrefslogtreecommitdiff
path: root/src/jit
diff options
context:
space:
mode:
authorTanner Gooding <tagoo@outlook.com>2018-11-26 11:44:51 -0800
committerGitHub <noreply@github.com>2018-11-26 11:44:51 -0800
commit570bda3870a8c3b479384b21e1e1bdd427fdd3a1 (patch)
tree24ea886db934e32ea834dfdf74c8f02c04955b31 /src/jit
parente7d079a2533d226b1fad301a0fbf7ba3ab25d0de (diff)
downloadcoreclr-570bda3870a8c3b479384b21e1e1bdd427fdd3a1.tar.gz
coreclr-570bda3870a8c3b479384b21e1e1bdd427fdd3a1.tar.bz2
coreclr-570bda3870a8c3b479384b21e1e1bdd427fdd3a1.zip
Fixing a few small issues with the SIMD vs SIMD HWIntrinsics (#21097)
* Fixing the simdHandleCache to add entries for Vector64FloatHandle and Vector128FloatHandle * Fixing two places that were calling just OperIsSIMD() rather than OperIsSIMDorSimdHWintrinsic()
Diffstat (limited to 'src/jit')
-rw-r--r--src/jit/compiler.h4
-rw-r--r--src/jit/hwintrinsic.cpp8
-rw-r--r--src/jit/lowerarmarch.cpp2
-rw-r--r--src/jit/morph.cpp5
-rw-r--r--src/jit/simd.cpp19
5 files changed, 23 insertions, 15 deletions
diff --git a/src/jit/compiler.h b/src/jit/compiler.h
index 1ffd5e05be..1e5663ff0b 100644
--- a/src/jit/compiler.h
+++ b/src/jit/compiler.h
@@ -7536,12 +7536,12 @@ private:
#ifdef FEATURE_HW_INTRINSICS
#if defined(_TARGET_ARM64_)
CORINFO_CLASS_HANDLE Vector64FloatHandle;
- CORINFO_CLASS_HANDLE Vector64UIntHandle;
+ CORINFO_CLASS_HANDLE Vector64IntHandle;
CORINFO_CLASS_HANDLE Vector64UShortHandle;
CORINFO_CLASS_HANDLE Vector64UByteHandle;
CORINFO_CLASS_HANDLE Vector64ShortHandle;
CORINFO_CLASS_HANDLE Vector64ByteHandle;
- CORINFO_CLASS_HANDLE Vector64IntHandle;
+ CORINFO_CLASS_HANDLE Vector64UIntHandle;
#endif // defined(_TARGET_ARM64_)
CORINFO_CLASS_HANDLE Vector128FloatHandle;
CORINFO_CLASS_HANDLE Vector128DoubleHandle;
diff --git a/src/jit/hwintrinsic.cpp b/src/jit/hwintrinsic.cpp
index a2f741e1e0..a87f40f6dd 100644
--- a/src/jit/hwintrinsic.cpp
+++ b/src/jit/hwintrinsic.cpp
@@ -117,8 +117,8 @@ CORINFO_CLASS_HANDLE Compiler::gtGetStructHandleForHWSIMD(var_types simdType, va
{
case TYP_FLOAT:
return m_simdHandleCache->Vector64FloatHandle;
- case TYP_UINT:
- return m_simdHandleCache->Vector64UIntHandle;
+ case TYP_INT:
+ return m_simdHandleCache->Vector64IntHandle;
case TYP_USHORT:
return m_simdHandleCache->Vector64UShortHandle;
case TYP_UBYTE:
@@ -127,8 +127,8 @@ CORINFO_CLASS_HANDLE Compiler::gtGetStructHandleForHWSIMD(var_types simdType, va
return m_simdHandleCache->Vector64ShortHandle;
case TYP_BYTE:
return m_simdHandleCache->Vector64ByteHandle;
- case TYP_INT:
- return m_simdHandleCache->Vector64IntHandle;
+ case TYP_UINT:
+ return m_simdHandleCache->Vector64UIntHandle;
default:
assert(!"Didn't find a class handle for simdType");
}
diff --git a/src/jit/lowerarmarch.cpp b/src/jit/lowerarmarch.cpp
index 2ad167e28b..d8d23eb0c2 100644
--- a/src/jit/lowerarmarch.cpp
+++ b/src/jit/lowerarmarch.cpp
@@ -357,7 +357,7 @@ void Lowering::LowerBlockStore(GenTreeBlk* blkNode)
addr->ClearContained();
}
}
- else if (!source->IsMultiRegCall() && !source->OperIsSIMD())
+ else if (!source->IsMultiRegCall() && !source->OperIsSIMDorSimdHWintrinsic())
{
assert(source->IsLocal());
MakeSrcContained(blkNode, source);
diff --git a/src/jit/morph.cpp b/src/jit/morph.cpp
index fb7ab00977..863ebba9ab 100644
--- a/src/jit/morph.cpp
+++ b/src/jit/morph.cpp
@@ -1594,8 +1594,9 @@ void fgArgInfo::ArgsComplete()
else if (isMultiRegArg && varTypeIsSIMD(argx->TypeGet()))
{
// SIMD types do not need the optimization below due to their sizes
- if (argx->OperIs(GT_SIMD) || (argx->OperIs(GT_OBJ) && argx->AsObj()->gtOp1->OperIs(GT_ADDR) &&
- argx->AsObj()->gtOp1->gtOp.gtOp1->OperIs(GT_SIMD)))
+ if (argx->OperIsSIMDorSimdHWintrinsic() ||
+ (argx->OperIs(GT_OBJ) && argx->AsObj()->gtOp1->OperIs(GT_ADDR) &&
+ argx->AsObj()->gtOp1->gtOp.gtOp1->OperIsSIMDorSimdHWintrinsic()))
{
curArgTabEntry->needTmp = true;
}
diff --git a/src/jit/simd.cpp b/src/jit/simd.cpp
index 1f735a1dca..ccebc785f1 100644
--- a/src/jit/simd.cpp
+++ b/src/jit/simd.cpp
@@ -437,15 +437,15 @@ var_types Compiler::getBaseTypeAndSizeOfSIMDType(CORINFO_CLASS_HANDLE typeHnd, u
size = Vector256SizeBytes;
JITDUMP(" Known type Vector256<ulong>\n");
}
- else if (typeHnd == m_simdHandleCache->Vector256FloatHandle)
+ else
+#endif // defined(_TARGET_XARCH)
+ if (typeHnd == m_simdHandleCache->Vector128FloatHandle)
{
simdBaseType = TYP_FLOAT;
- size = Vector256SizeBytes;
- JITDUMP(" Known type Vector256<float>\n");
+ size = Vector128SizeBytes;
+ JITDUMP(" Known type Vector128<float>\n");
}
- else
-#endif // defined(_TARGET_XARCH)
- if (typeHnd == m_simdHandleCache->Vector128DoubleHandle)
+ else if (typeHnd == m_simdHandleCache->Vector128DoubleHandle)
{
simdBaseType = TYP_DOUBLE;
size = Vector128SizeBytes;
@@ -499,7 +499,14 @@ var_types Compiler::getBaseTypeAndSizeOfSIMDType(CORINFO_CLASS_HANDLE typeHnd, u
size = Vector128SizeBytes;
JITDUMP(" Known type Vector128<ulong>\n");
}
+ else
#if defined(_TARGET_ARM64_)
+ if (typeHnd == m_simdHandleCache->Vector64FloatHandle)
+ {
+ simdBaseType = TYP_FLOAT;
+ size = Vector64SizeBytes;
+ JITDUMP(" Known type Vector64<float>\n");
+ }
else if (typeHnd == m_simdHandleCache->Vector64IntHandle)
{
simdBaseType = TYP_INT;