Skip to content

Commit

Permalink
SimdAsHWIntrinsic improvements and cleanup (#80134)
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
tannergooding authored Jan 6, 2023
1 parent c5f5e6a commit 1808d1c
Show file tree
Hide file tree
Showing 10 changed files with 575 additions and 605 deletions.
12 changes: 4 additions & 8 deletions src/coreclr/jit/gentree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20566,8 +20566,7 @@ GenTree* Compiler::gtNewSimdCmpOpAllNode(genTreeOps op,
intrinsic = NI_Vector128_op_Equality;
}

op1 = gtNewSimdCmpOpNode(op, simdType, op1, op2, simdBaseJitType, simdSize,
/* isSimdAsHWIntrinsic */ false);
op1 = gtNewSimdCmpOpNode(op, simdType, op1, op2, simdBaseJitType, simdSize, isSimdAsHWIntrinsic);
op2 = gtNewAllBitsSetConNode(simdType);

if (simdBaseType == TYP_FLOAT)
Expand Down Expand Up @@ -20606,8 +20605,7 @@ GenTree* Compiler::gtNewSimdCmpOpAllNode(genTreeOps op,
intrinsic = NI_Vector128_op_Equality;
}

op1 = gtNewSimdCmpOpNode(op, simdType, op1, op2, simdBaseJitType, simdSize,
/* isSimdAsHWIntrinsic */ false);
op1 = gtNewSimdCmpOpNode(op, simdType, op1, op2, simdBaseJitType, simdSize, isSimdAsHWIntrinsic);
op2 = gtNewAllBitsSetConNode(simdType);

if (simdBaseType == TYP_FLOAT)
Expand Down Expand Up @@ -20688,8 +20686,7 @@ GenTree* Compiler::gtNewSimdCmpOpAnyNode(genTreeOps op,
intrinsic = NI_Vector128_op_Inequality;
}

op1 = gtNewSimdCmpOpNode(op, simdType, op1, op2, simdBaseJitType, simdSize,
/* isSimdAsHWIntrinsic */ false);
op1 = gtNewSimdCmpOpNode(op, simdType, op1, op2, simdBaseJitType, simdSize, isSimdAsHWIntrinsic);
op2 = gtNewZeroConNode(simdType);

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

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

op1 = gtNewSimdCmpOpNode(op, simdType, op1, op2, simdBaseJitType, simdSize,
/* isSimdAsHWIntrinsic */ false);
op1 = gtNewSimdCmpOpNode(op, simdType, op1, op2, simdBaseJitType, simdSize, isSimdAsHWIntrinsic);
op2 = gtNewZeroConNode(simdType);

if (simdBaseType == TYP_FLOAT)
Expand Down
3 changes: 3 additions & 0 deletions src/coreclr/jit/hwintrinsicxarch.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -609,6 +609,9 @@ GenTree* Compiler::impBaseIntrinsic(NamedIntrinsic intrinsic,
{
assert(sig->numArgs == 2);

impSpillSideEffect(true,
verCurrentState.esStackDepth - 2 DEBUGARG("Spilling op1 side effects for HWIntrinsic"));

op2 = impSIMDPopStack(retType);
op1 = impSIMDPopStack(retType);

Expand Down
Loading

0 comments on commit 1808d1c

Please sign in to comment.