diff --git a/src/coreclr/jit/fgbasic.cpp b/src/coreclr/jit/fgbasic.cpp index 6c65586fbca1c8..57c94e773ae1b0 100644 --- a/src/coreclr/jit/fgbasic.cpp +++ b/src/coreclr/jit/fgbasic.cpp @@ -2722,9 +2722,12 @@ unsigned Compiler::fgMakeBasicBlocks(const BYTE* codeAddr, IL_OFFSET codeSize, F if (fgCanSwitchToOptimized() && fgMayExplicitTailCall()) { // Method has an explicit tail call that may run like a loop or may not be generated as a tail - // call in tier 0, switch to optimized to avoid spending too much time running slower code and - // to avoid stack overflow from recursion - fgSwitchToOptimized(); + // call in tier 0, switch to optimized to avoid spending too much time running slower code + if (!opts.jitFlags->IsSet(JitFlags::JIT_FLAG_BBINSTR) || + ((info.compFlags & CORINFO_FLG_DISABLE_TIER0_FOR_LOOPS) != 0)) + { + fgSwitchToOptimized(); + } } } else