Allow UpperVector Save and Restore without base type (#24080)
authorCarol Eidt <carol.eidt@microsoft.com>
Thu, 18 Apr 2019 23:05:34 +0000 (16:05 -0700)
committerGitHub <noreply@github.com>
Thu, 18 Apr 2019 23:05:34 +0000 (16:05 -0700)
Fixes an issue with crossgen on Arm64/linux

src/jit/codegenarm64.cpp

index efbb590..da678dc 100644 (file)
@@ -3875,7 +3875,14 @@ void CodeGen::genSIMDIntrinsic(GenTreeSIMD* simdNode)
         simdNode->gtSIMDBaseType != TYP_SHORT && simdNode->gtSIMDBaseType != TYP_BYTE &&
         simdNode->gtSIMDBaseType != TYP_UINT && simdNode->gtSIMDBaseType != TYP_ULONG)
     {
-        noway_assert(!"SIMD intrinsic with unsupported base type.");
+        // We don't need a base type for the Upper Save & Restore intrinsics, and we may find
+        // these implemented over lclVars created by CSE without full handle information (and
+        // therefore potentially without a base type).
+        if ((simdNode->gtSIMDIntrinsicID != SIMDIntrinsicUpperSave) &&
+            (simdNode->gtSIMDIntrinsicID != SIMDIntrinsicUpperRestore))
+        {
+            noway_assert(!"SIMD intrinsic with unsupported base type.");
+        }
     }
 
     switch (simdNode->gtSIMDIntrinsicID)