Porting additional SIMD Intrinsics to use SimdAsHWIntrinsic (#37882)
authorTanner Gooding <tagoo@outlook.com>
Fri, 3 Jul 2020 02:49:39 +0000 (19:49 -0700)
committerGitHub <noreply@github.com>
Fri, 3 Jul 2020 02:49:39 +0000 (19:49 -0700)
commit9df02475e09859a8d24852011cf3515f7a665670
treeb5fec2e74ddc62fe9e118f9935052747bc8443c2
parentd3e6947f39ee04b0a6a44bfe6ba1310fbc10c7e5
Porting additional SIMD Intrinsics to use SimdAsHWIntrinsic (#37882)

* Moving SIMDIntrinsicInit to use SimdAsHWIntrinsic

* Optimize the simple case of Create(0) and Create(-1) to get_Zero and get_AllBitsSet

* Adding a new gtNewSimdCreateBroadcastNode method

* Updating SIMDIntrinsicGetOne to use SimdAsHWIntrinsic

* Fixing build errors

* Ensure all forms of ToScalar are intrinsic on x86

* Moving SIMDIntrinsicDot to use SimdAsHWIntrinsic

* Removing SIMDIntrinsicDot, SIMDIntrinsicAdd, SIMDIntrinsicMul, and SIMDIntrinsicDiv

* Removing SIMDIntrinsicGetCount, SIMDIntrinsicGetOne, SIMDIntrinsicGetAllOnes, and SIMDIntrinsicGetZero

* Default TYP_SIMD12 constants to be 16 bytes

* Get the simdType from the size for LowerHWIntrinsicDot

* Applying formatting patch

* Use AddPairwise for floating-point dot product

* Applying formatting patch

* Correctly handle decomposed long constants on x86

* Check JitConfig.EnableHWIntrinsic when in impSIMDIntrinsic or impSimdAsHWIntrinsic

* Ensure AdvSimd.Arm64.Multiply is used for TYP_DOUBLE

* Applying formatting patch

* Updating LowerHWIntrinsicCreate to handle TYP_SIMD8 retyped as TYP_DOUBLE and fixing VectorT128_get_One

* Ensure the CreateBroadcast SimdAsHWIntrinsic nodes have the correct gtType

* Applying formatting patch

* Apply suggestions from code review

Co-authored-by: Carol Eidt <carol.eidt@microsoft.com>
* Adding some additional clarifying comments

* Breaking NI_Vector256_ToScalar importation logic into its own checks

* Applying formatting patch

Co-authored-by: Carol Eidt <carol.eidt@microsoft.com>
20 files changed:
src/coreclr/src/jit/codegen.h
src/coreclr/src/jit/codegenarm64.cpp
src/coreclr/src/jit/compiler.h
src/coreclr/src/jit/gentree.cpp
src/coreclr/src/jit/hwintrinsic.cpp
src/coreclr/src/jit/hwintrinsiclistarm64.h
src/coreclr/src/jit/hwintrinsiclistxarch.h
src/coreclr/src/jit/hwintrinsicxarch.cpp
src/coreclr/src/jit/importer.cpp
src/coreclr/src/jit/lower.h
src/coreclr/src/jit/lowerarmarch.cpp
src/coreclr/src/jit/lowerxarch.cpp
src/coreclr/src/jit/lsraarm64.cpp
src/coreclr/src/jit/lsraxarch.cpp
src/coreclr/src/jit/simd.cpp
src/coreclr/src/jit/simdashwintrinsic.cpp
src/coreclr/src/jit/simdashwintrinsiclistarm64.h
src/coreclr/src/jit/simdashwintrinsiclistxarch.h
src/coreclr/src/jit/simdcodegenxarch.cpp
src/coreclr/src/jit/simdintrinsiclist.h