@@ -10347,11 +10347,20 @@ GenTree* Compiler::fgMorphCopyBlock(GenTree* tree)
1034710347 CORINFO_CLASS_HANDLE classHnd = srcVarDsc->lvVerTypeInfo.GetClassHandle();
1034810348 CORINFO_FIELD_HANDLE fieldHnd =
1034910349 info.compCompHnd->getFieldInClass(classHnd, srcFieldVarDsc->lvFldOrdinal);
10350- FieldSeqNode* curFieldSeq = GetFieldSeqStore()->CreateSingleton(fieldHnd);
10351- unsigned srcFieldOffset = lvaGetDesc(srcFieldLclNum)->lvFldOffset;
10352- GenTree* fieldOffsetNode = gtNewIconNode(srcFieldVarDsc->lvFldOffset, curFieldSeq);
10350+ FieldSeqNode* curFieldSeq = GetFieldSeqStore()->CreateSingleton(fieldHnd);
10351+
10352+ unsigned srcFieldOffset = lvaGetDesc(srcFieldLclNum)->lvFldOffset;
10353+
10354+ if (srcFieldOffset == 0)
10355+ {
10356+ fgAddFieldSeqForZeroOffset(dstFld, curFieldSeq);
10357+ }
10358+ else
10359+ {
10360+ GenTree* fieldOffsetNode = gtNewIconNode(srcFieldVarDsc->lvFldOffset, curFieldSeq);
10361+ dstFld = gtNewOperNode(GT_ADD, TYP_BYREF, dstFld, fieldOffsetNode);
10362+ }
1035310363
10354- dstFld = gtNewOperNode(GT_ADD, TYP_BYREF, dstFld, fieldOffsetNode);
1035510364 dstFld = gtNewIndir(srcFieldVarDsc->TypeGet(), dstFld);
1035610365
1035710366 // !!! The destination could be on stack. !!!
@@ -10427,15 +10436,18 @@ GenTree* Compiler::fgMorphCopyBlock(GenTree* tree)
1042710436 }
1042810437 }
1042910438 }
10430- else // if (lvaGetDesc(fieldLclNum)->lvFldOffset != 0)
10431- {
10432- srcFld = gtNewOperNode(GT_ADD, TYP_BYREF, srcFld,
10433- new (this, GT_CNS_INT)
10434- GenTreeIntCon(TYP_I_IMPL, lvaGetDesc(dstFieldLclNum)->lvFldOffset,
10435- curFieldSeq));
10436- }
1043710439 if (!done)
1043810440 {
10441+ unsigned fldOffset = lvaGetDesc(dstFieldLclNum)->lvFldOffset;
10442+ if (fldOffset == 0)
10443+ {
10444+ fgAddFieldSeqForZeroOffset(srcFld, curFieldSeq);
10445+ }
10446+ else
10447+ {
10448+ GenTreeIntCon* fldOffsetNode = gtNewIconNode(fldOffset, curFieldSeq);
10449+ srcFld = gtNewOperNode(GT_ADD, TYP_BYREF, srcFld, fldOffsetNode);
10450+ }
1043910451 srcFld = gtNewIndir(destType, srcFld);
1044010452 }
1044110453 }
0 commit comments