break;
#endif //
+#ifdef FEATURE_HW_INTRINSICS
+ case GT_HWIntrinsic:
+ LowerHWIntrinsic(node->AsHWIntrinsic());
+ break;
+#endif // FEATURE_HW_INTRINSICS
+
case GT_LCL_VAR:
WidenSIMD12IfNecessary(node->AsLclVarCommon());
break;
ContainCheckSIMD(node->AsSIMD());
break;
#endif // FEATURE_SIMD
+#ifdef FEATURE_HW_INTRINSICS
+ case GT_HWIntrinsic:
+ ContainCheckHWIntrinsic(node->AsHWIntrinsic());
+ break;
+#endif // FEATURE_HW_INTRINSICS
default:
break;
}
#ifdef FEATURE_SIMD
void ContainCheckSIMD(GenTreeSIMD* simdNode);
#endif // FEATURE_SIMD
+#ifdef FEATURE_HW_INTRINSICS
+ void ContainCheckHWIntrinsic(GenTreeHWIntrinsic* node);
+#endif // FEATURE_HW_INTRINSICS
#ifdef DEBUG
static void CheckCallArg(GenTree* arg);
#ifdef FEATURE_SIMD
void LowerSIMD(GenTreeSIMD* simdNode);
#endif // FEATURE_SIMD
+#ifdef FEATURE_HW_INTRINSICS
+ void LowerHWIntrinsic(GenTreeHWIntrinsic* node);
+#endif // FEATURE_HW_INTRINSICS
// Utility functions
void MorphBlkIntoHelperCall(GenTreePtr pTree, GenTreePtr treeStmt);
}
#endif // FEATURE_SIMD
+#ifdef FEATURE_HW_INTRINSICS
+//----------------------------------------------------------------------------------------------
+// Lowering::LowerHWIntrinsic: Perform containment analysis for a hardware intrinsic node.
+//
+// Arguments:
+// node - The hardware intrinsic node.
+//
+void Lowering::LowerHWIntrinsic(GenTreeHWIntrinsic* node)
+{
+ ContainCheckHWIntrinsic(node);
+}
+#endif // FEATURE_HW_INTRINSICS
+
//----------------------------------------------------------------------------------------------
// Lowering::IsRMWIndirCandidate:
// Returns true if the given operand is a candidate indirection for a read-modify-write
}
#endif // FEATURE_SIMD
+#ifdef FEATURE_HW_INTRINSICS
+//----------------------------------------------------------------------------------------------
+// ContainCheckHWIntrinsic: Perform containment analysis for a hardware intrinsic node.
+//
+// Arguments:
+// node - The hardware intrinsic node.
+//
+void Lowering::ContainCheckHWIntrinsic(GenTreeHWIntrinsic* node)
+{
+ NamedIntrinsic intrinsicID = node->gtHWIntrinsicId;
+ GenTree* op1 = node->gtOp.gtOp1;
+ GenTree* op2 = node->gtOp.gtOp2;
+
+ switch (node->gtHWIntrinsicId)
+ {
+ default:
+ assert((intrinsicID > NI_HW_INTRINSIC_START) && (intrinsicID < NI_HW_INTRINSIC_END));
+ break;
+ }
+}
+#endif // FEATURE_HW_INTRINSICS
+
//------------------------------------------------------------------------
// ContainCheckFloatBinary: determine whether the sources of a floating point binary node should be contained.
//