diff --git a/src/coreclr/jit/loopcloning.cpp b/src/coreclr/jit/loopcloning.cpp index 8e7e894dde2ce1..f54f5d0f0d5678 100644 --- a/src/coreclr/jit/loopcloning.cpp +++ b/src/coreclr/jit/loopcloning.cpp @@ -1885,6 +1885,12 @@ bool Compiler::optShouldCloneLoop(FlowGraphNaturalLoop* loop, LoopCloneContext* // bool Compiler::optIsLoopClonable(FlowGraphNaturalLoop* loop, LoopCloneContext* context) { + if (loop->GetHeader()->isRunRarely()) + { + JITDUMP("Loop cloning: rejecting loop " FMT_LP ". Loop is cold.\n", loop->GetIndex()); + return false; + } + const bool requireIterable = !doesMethodHaveGuardedDevirtualization(); NaturalLoopIterInfo* iterInfo = context->GetLoopIterInfo(loop->GetIndex()); diff --git a/src/coreclr/jit/optimizer.cpp b/src/coreclr/jit/optimizer.cpp index b96988cf086d71..5fabe1d81ecfd4 100644 --- a/src/coreclr/jit/optimizer.cpp +++ b/src/coreclr/jit/optimizer.cpp @@ -1390,6 +1390,12 @@ bool Compiler::optTryUnrollLoop(FlowGraphNaturalLoop* loop, bool* changedIR) assert(UNROLL_LIMIT_SZ[SMALL_CODE] == 0); assert(UNROLL_LIMIT_SZ[COUNT_OPT_CODE] == 0); + if (loop->GetHeader()->isRunRarely()) + { + JITDUMP("Failed to unroll loop " FMT_LP ": Loop is cold.\n", loop->GetIndex()); + return false; + } + NaturalLoopIterInfo iterInfo; if (!loop->AnalyzeIteration(&iterInfo)) {