Additional checks and returns, no diffs.
authorSergey Andreenko <seandree@microsoft.com>
Wed, 5 Feb 2020 00:51:44 +0000 (16:51 -0800)
committerSergey Andreenko <seandree@microsoft.com>
Tue, 11 Feb 2020 00:04:03 +0000 (16:04 -0800)
src/coreclr/src/jit/gentree.cpp
src/coreclr/src/jit/instr.cpp
src/coreclr/src/jit/lsraxarch.cpp

index a829c4c..1bfb4bd 100644 (file)
@@ -16869,6 +16869,9 @@ CORINFO_CLASS_HANDLE Compiler::gtGetStructHandleIfPresent(GenTree* tree)
             case GT_OBJ:
                 structHnd = tree->AsObj()->GetLayout()->GetClassHandle();
                 break;
+            case GT_BLK:
+                structHnd = tree->AsBlk()->GetLayout()->GetClassHandle();
+                break;
             case GT_CALL:
                 structHnd = tree->AsCall()->gtRetClsHnd;
                 break;
@@ -16944,6 +16947,10 @@ CORINFO_CLASS_HANDLE Compiler::gtGetStructHandleIfPresent(GenTree* tree)
                                 }
                             }
                         }
+                        else if (addr->OperGet() == GT_LCL_VAR)
+                        {
+                            structHnd = gtGetStructHandleIfPresent(addr);
+                        }
                     }
                 }
                 break;
index 695cd0b..7a0a6c6 100644 (file)
@@ -1817,6 +1817,7 @@ instruction CodeGenInterface::ins_Load(var_types srcType, bool aligned /*=false*
  */
 instruction CodeGen::ins_Copy(var_types dstType)
 {
+    assert(emitTypeActSz[dstType] != 0);
 #if defined(TARGET_XARCH)
     if (varTypeIsSIMD(dstType))
     {
index 7d09369..900aa4a 100644 (file)
@@ -2751,12 +2751,7 @@ int LinearScan::BuildCast(GenTreeCast* cast)
 //
 int LinearScan::BuildIndir(GenTreeIndir* indirTree)
 {
-    // If this is the rhs of a block copy (i.e. non-enregisterable struct),
-    // it has no register requirements.
-    if (indirTree->TypeGet() == TYP_STRUCT)
-    {
-        return 0;
-    }
+    assert(indirTree->TypeGet() != TYP_STRUCT); // Don't expect a struct type here.
 
 #ifdef FEATURE_SIMD
     RefPosition* internalFloatDef = nullptr;