Skip to content

Commit 1808d1c

Browse files
SimdAsHWIntrinsic improvements and cleanup (#80134)
* Merge common code paths in simdashwintrinsic.cpp * Fixing a bug in the WithElement node for CreateFromVector * Ensure simdashwintrinsic paths consistently use the gtNewSimd*Node helpers where one path was already * Ensure remaining simdashwintrinsic paths use the gtNewSimd*Node helpers * Consistently use fgMakeMultiUse in the gtNewSimd*Node APIs * Applying formatting patch * Ensure isSimdAsHWIntrinsic gets passed through * Revert "Consistently use fgMakeMultiUse in the gtNewSimd*Node APIs" This reverts commit edb2ce8. * Handle SN_op_UnaryNegation for Vector2/3/4 on Mono * Ensure short, ushort, float, and double don't assert for Vector128_Dot on downlevel hardware
1 parent c5f5e6a commit 1808d1c

File tree

10 files changed

+575
-605
lines changed

10 files changed

+575
-605
lines changed

src/coreclr/jit/gentree.cpp

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20566,8 +20566,7 @@ GenTree* Compiler::gtNewSimdCmpOpAllNode(genTreeOps op,
2056620566
intrinsic = NI_Vector128_op_Equality;
2056720567
}
2056820568

20569-
op1 = gtNewSimdCmpOpNode(op, simdType, op1, op2, simdBaseJitType, simdSize,
20570-
/* isSimdAsHWIntrinsic */ false);
20569+
op1 = gtNewSimdCmpOpNode(op, simdType, op1, op2, simdBaseJitType, simdSize, isSimdAsHWIntrinsic);
2057120570
op2 = gtNewAllBitsSetConNode(simdType);
2057220571

2057320572
if (simdBaseType == TYP_FLOAT)
@@ -20606,8 +20605,7 @@ GenTree* Compiler::gtNewSimdCmpOpAllNode(genTreeOps op,
2060620605
intrinsic = NI_Vector128_op_Equality;
2060720606
}
2060820607

20609-
op1 = gtNewSimdCmpOpNode(op, simdType, op1, op2, simdBaseJitType, simdSize,
20610-
/* isSimdAsHWIntrinsic */ false);
20608+
op1 = gtNewSimdCmpOpNode(op, simdType, op1, op2, simdBaseJitType, simdSize, isSimdAsHWIntrinsic);
2061120609
op2 = gtNewAllBitsSetConNode(simdType);
2061220610

2061320611
if (simdBaseType == TYP_FLOAT)
@@ -20688,8 +20686,7 @@ GenTree* Compiler::gtNewSimdCmpOpAnyNode(genTreeOps op,
2068820686
intrinsic = NI_Vector128_op_Inequality;
2068920687
}
2069020688

20691-
op1 = gtNewSimdCmpOpNode(op, simdType, op1, op2, simdBaseJitType, simdSize,
20692-
/* isSimdAsHWIntrinsic */ false);
20689+
op1 = gtNewSimdCmpOpNode(op, simdType, op1, op2, simdBaseJitType, simdSize, isSimdAsHWIntrinsic);
2069320690
op2 = gtNewZeroConNode(simdType);
2069420691

2069520692
if (simdBaseType == TYP_FLOAT)
@@ -20732,8 +20729,7 @@ GenTree* Compiler::gtNewSimdCmpOpAnyNode(genTreeOps op,
2073220729

2073320730
intrinsic = (simdSize == 8) ? NI_Vector64_op_Inequality : NI_Vector128_op_Inequality;
2073420731

20735-
op1 = gtNewSimdCmpOpNode(op, simdType, op1, op2, simdBaseJitType, simdSize,
20736-
/* isSimdAsHWIntrinsic */ false);
20732+
op1 = gtNewSimdCmpOpNode(op, simdType, op1, op2, simdBaseJitType, simdSize, isSimdAsHWIntrinsic);
2073720733
op2 = gtNewZeroConNode(simdType);
2073820734

2073920735
if (simdBaseType == TYP_FLOAT)

src/coreclr/jit/hwintrinsicxarch.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -609,6 +609,9 @@ GenTree* Compiler::impBaseIntrinsic(NamedIntrinsic intrinsic,
609609
{
610610
assert(sig->numArgs == 2);
611611

612+
impSpillSideEffect(true,
613+
verCurrentState.esStackDepth - 2 DEBUGARG("Spilling op1 side effects for HWIntrinsic"));
614+
612615
op2 = impSIMDPopStack(retType);
613616
op1 = impSIMDPopStack(retType);
614617

0 commit comments

Comments
 (0)