未验证 提交 e5802fa9 编写于 作者: J Jakob Botsch Nielsen 提交者: GitHub

JIT: Disable TYP_BLK stressing for tail call to loop optimization (#74999)

Fix #57918
上级 2dcd5bf6
......@@ -1890,16 +1890,17 @@ void Compiler::compInit(ArenaAllocator* pAlloc,
codeGen = nullptr;
}
compJmpOpUsed = false;
compLongUsed = false;
compTailCallUsed = false;
compTailPrefixSeen = false;
compLocallocSeen = false;
compLocallocUsed = false;
compLocallocOptimized = false;
compQmarkRationalized = false;
compQmarkUsed = false;
compFloatingPointUsed = false;
compJmpOpUsed = false;
compLongUsed = false;
compTailCallUsed = false;
compTailPrefixSeen = false;
compMayConvertTailCallToLoop = false;
compLocallocSeen = false;
compLocallocUsed = false;
compLocallocOptimized = false;
compQmarkRationalized = false;
compQmarkUsed = false;
compFloatingPointUsed = false;
compSuppressedZeroInit = false;
......
......@@ -8969,6 +8969,7 @@ public:
bool compFloatingPointUsed; // Does the method use TYP_FLOAT or TYP_DOUBLE
bool compTailCallUsed; // Does the method do a tailcall
bool compTailPrefixSeen; // Does the method IL have tail. prefix
bool compMayConvertTailCallToLoop; // Does the method have a recursive tail call that we may convert to a loop?
bool compLocallocSeen; // Does the method IL have localloc opcode
bool compLocallocUsed; // Does the method use localloc.
bool compLocallocOptimized; // Does the method have an optimized localloc
......
......@@ -10661,6 +10661,8 @@ DONE:
" as having a backward branch.\n",
dspTreeID(call), loopHead->bbNum, compCurBB->bbNum);
fgMarkBackwardJump(loopHead, compCurBB);
compMayConvertTailCallToLoop = true;
}
// We only do these OSR checks in the root method because:
......
......@@ -8406,6 +8406,15 @@ Compiler::fgWalkResult Compiler::lvaStressLclFldCB(GenTree** pTree, fgWalkData*
return WALK_SKIP_SUBTREES;
}
// Converting tail calls to loops may require insertion of explicit
// zero initialization for IL locals. The JIT does not support this for
// TYP_BLK locals.
if (pComp->compMayConvertTailCallToLoop)
{
varDsc->lvNoLclFldStress = true;
return WALK_SKIP_SUBTREES;
}
// Fix for lcl_fld stress mode
if (varDsc->lvKeepType)
{
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册