diff --git a/src/coreclr/jit/codegencommon.cpp b/src/coreclr/jit/codegencommon.cpp index 77486f17c82545..22dda176af8cac 100644 --- a/src/coreclr/jit/codegencommon.cpp +++ b/src/coreclr/jit/codegencommon.cpp @@ -7069,11 +7069,6 @@ void CodeGen::genReturn(GenTree* treeNode) } } - if (treeNode->OperIs(GT_RETURN) && compiler->compIsAsync()) - { - instGen_Set_Reg_To_Zero(EA_PTRSIZE, REG_ASYNC_CONTINUATION_RET); - } - #if EMIT_GENERATE_GCINFO if (treeNode->OperIs(GT_RETURN, GT_SWIFT_ERROR_RET)) { @@ -7097,6 +7092,12 @@ void CodeGen::genReturn(GenTree* treeNode) } #endif // PROFILING_SUPPORTED + if (treeNode->OperIs(GT_RETURN) && compiler->compIsAsync()) + { + instGen_Set_Reg_To_Zero(EA_PTRSIZE, REG_ASYNC_CONTINUATION_RET); + gcInfo.gcMarkRegPtrVal(REG_ASYNC_CONTINUATION_RET, TYP_REF); + } + #if defined(DEBUG) && defined(TARGET_XARCH) bool doStackPointerCheck = compiler->opts.compStackCheckOnRet; @@ -7160,6 +7161,7 @@ void CodeGen::genReturnSuspend(GenTreeUnOp* treeNode) regNumber reg = genConsumeReg(op); inst_Mov(TYP_REF, REG_ASYNC_CONTINUATION_RET, reg, /* canSkip */ true); + gcInfo.gcMarkRegPtrVal(REG_ASYNC_CONTINUATION_RET, TYP_REF); ReturnTypeDesc retTypeDesc = compiler->compRetTypeDesc; unsigned numRetRegs = retTypeDesc.GetReturnRegCount(); @@ -7196,11 +7198,6 @@ void CodeGen::genMarkReturnGCInfo() retTypeDesc.GetReturnRegType(i)); } } - - if (compiler->compIsAsync()) - { - gcInfo.gcMarkRegPtrVal(REG_ASYNC_CONTINUATION_RET, TYP_REF); - } } //------------------------------------------------------------------------