diff --git a/src/coreclr/jit/gentree.cpp b/src/coreclr/jit/gentree.cpp index a696aec37c4921..9eae9f6e6ddda4 100644 --- a/src/coreclr/jit/gentree.cpp +++ b/src/coreclr/jit/gentree.cpp @@ -28461,22 +28461,6 @@ bool GenTree::OperIsConvertVectorToMask() const return false; } -//------------------------------------------------------------------------ -// OperIsVectorConditionalSelect: Is this a vector ConditionalSelect hwintrinsic -// -// Return Value: -// true if the node is a vector ConditionalSelect hwintrinsic -// otherwise; false -// -bool GenTree::OperIsVectorConditionalSelect() const -{ - if (OperIsHWIntrinsic()) - { - return AsHWIntrinsic()->OperIsVectorConditionalSelect(); - } - return false; -} - //------------------------------------------------------------------------ // OperIsVectorFusedMultiplyOp: Is this a vector FusedMultiplyOp hwintrinsic // diff --git a/src/coreclr/jit/gentree.h b/src/coreclr/jit/gentree.h index 67be572a3b04a3..26120136a30717 100644 --- a/src/coreclr/jit/gentree.h +++ b/src/coreclr/jit/gentree.h @@ -1715,7 +1715,6 @@ struct GenTree bool OperIsHWIntrinsic(NamedIntrinsic intrinsicId) const; bool OperIsConvertMaskToVector() const; bool OperIsConvertVectorToMask() const; - bool OperIsVectorConditionalSelect() const; bool OperIsVectorFusedMultiplyOp() const; // This is here for cleaner GT_LONG #ifdefs. @@ -6576,34 +6575,6 @@ struct GenTreeHWIntrinsic : public GenTreeJitIntrinsic #endif } - bool OperIsVectorConditionalSelect() const - { - switch (GetHWIntrinsicId()) - { -#if defined(TARGET_XARCH) - case NI_Vector128_ConditionalSelect: - case NI_Vector256_ConditionalSelect: - case NI_Vector512_ConditionalSelect: - { - return true; - } -#endif // TARGET_XARCH - -#if defined(TARGET_ARM64) - case NI_AdvSimd_BitwiseSelect: - case NI_Sve_ConditionalSelect: - { - return true; - } -#endif // TARGET_ARM64 - - default: - { - return false; - } - } - } - bool OperIsVectorFusedMultiplyOp() const { switch (GetHWIntrinsicId()) diff --git a/src/coreclr/jit/optimizemaskconversions.cpp b/src/coreclr/jit/optimizemaskconversions.cpp index b328e884637e79..7396469770acae 100644 --- a/src/coreclr/jit/optimizemaskconversions.cpp +++ b/src/coreclr/jit/optimizemaskconversions.cpp @@ -175,37 +175,11 @@ class MaskConversionsCheckVisitor final : public GenTreeVisitorOperIsHWIntrinsic()) + if ((user != nullptr) && user->OperIsConvertVectorToMask()) { - GenTreeHWIntrinsic* hwintrin = user->AsHWIntrinsic(); - NamedIntrinsic ni = hwintrin->GetHWIntrinsicId(); - - if (hwintrin->OperIsConvertVectorToMask()) - { - convertOp = user->AsHWIntrinsic(); - hasConversion = true; - } - else if (hwintrin->OperIsVectorConditionalSelect()) - { - // We don't actually have a convert here, but we do have a case where - // the mask is being used in a ConditionalSelect and therefore can be - // consumed directly as a mask. While the IR shows TYP_SIMD, it gets - // handled in lowering as part of the general embedded-mask support. - - // We notably don't check that op2 supported embedded masking directly - // because we can still consume the mask directly in such cases. We'll just - // emit `vblendmps zmm1 {k1}, zmm2, zmm3` instead of containing the CndSel - // as part of something like `vaddps zmm1 {k1}, zmm2, zmm3` - - if (hwintrin->Op(1) == lclOp) - { - convertOp = user->AsHWIntrinsic(); - hasConversion = true; - } - } + convertOp = user->AsHWIntrinsic(); + hasConversion = true; } break; } @@ -402,7 +376,6 @@ class MaskConversionsUpdateVisitor final : public GenTreeVisitorData() = lclOp->Data()->AsHWIntrinsic()->Op(1); } - else if (isLocalStore && addConversion) { // Convert @@ -416,7 +389,6 @@ class MaskConversionsUpdateVisitor final : public GenTreeVisitorData() = m_compiler->gtNewSimdCvtVectorToMaskNode(TYP_MASK, lclOp->Data(), weight->simdBaseJitType, weight->simdSize); } - else if (isLocalUse && removeConversion) { // Convert @@ -426,7 +398,6 @@ class MaskConversionsUpdateVisitor final : public GenTreeVisitor + + True + + true + + + + + + + +