diff --git a/lib/Backend/GlobOptIntBounds.cpp b/lib/Backend/GlobOptIntBounds.cpp index 58cd0148af7..5136013b1dc 100644 --- a/lib/Backend/GlobOptIntBounds.cpp +++ b/lib/Backend/GlobOptIntBounds.cpp @@ -1822,11 +1822,16 @@ void GlobOpt::GenerateLoopCountPlusOne(Loop *const loop, LoopCount *const loopCo IR::RegOpnd *loopCountOpnd = IR::RegOpnd::New(type, func); IR::RegOpnd *minusOneOpnd = IR::RegOpnd::New(loopCount->LoopCountMinusOneSym(), type, func); minusOneOpnd->SetIsJITOptimizedReg(true); - insertBeforeInstr->InsertBefore(IR::Instr::New(Js::OpCode::Add_I4, - loopCountOpnd, - minusOneOpnd, - IR::IntConstOpnd::New(1, type, func, true), - func)); + IR::Instr* incrInstr = IR::Instr::New(Js::OpCode::Add_I4, + loopCountOpnd, + minusOneOpnd, + IR::IntConstOpnd::New(1, type, func, true), + func); + + insertBeforeInstr->InsertBefore(incrInstr); + + // Incrementing to 1 can overflow - add a bounds check bailout here + incrInstr->ConvertToBailOutInstr(bailOutInfo, IR::BailOutOnFailedHoistedLoopCountBasedBoundCheck); loopCount->SetLoopCountSym(loopCountOpnd->GetStackSym()); } }