@@ -2087,6 +2087,7 @@ bool GlobOpt::CollectMemcopyStElementI(IR::Instr *instr, Loop *loop)
2087
2087
2088
2088
// Consider: Can we remove the count field?
2089
2089
memcopyInfo->count++;
2090
+ AssertOrFailFast(memcopyInfo->count <= 1);
2090
2091
memcopyInfo->base = baseSymID;
2091
2092
2092
2093
return true;
@@ -2226,7 +2227,14 @@ GlobOpt::CollectMemOpInfo(IR::Instr *instrBegin, IR::Instr *instr, Value *src1Va
2226
2227
{
2227
2228
Loop::InductionVariableChangeInfo inductionVariableChangeInfo = { 0, 0 };
2228
2229
inductionVariableChangeInfo = loop->memOpInfo->inductionVariableChangeInfoMap->Lookup(inductionSymID, inductionVariableChangeInfo);
2229
- inductionVariableChangeInfo.unroll++;
2230
+
2231
+ // If inductionVariableChangeInfo.unroll has been invalidated, do
2232
+ // not modify the Js::Constants::InvalidLoopUnrollFactor value
2233
+ if (inductionVariableChangeInfo.unroll != Js::Constants::InvalidLoopUnrollFactor)
2234
+ {
2235
+ inductionVariableChangeInfo.unroll++;
2236
+ }
2237
+
2230
2238
inductionVariableChangeInfo.isIncremental = isIncr;
2231
2239
loop->memOpInfo->inductionVariableChangeInfoMap->Item(inductionSymID, inductionVariableChangeInfo);
2232
2240
}
@@ -16677,6 +16685,7 @@ GlobOpt::GetOrGenerateLoopCountForMemOp(Loop *loop)
16677
16685
IR::Opnd *
16678
16686
GlobOpt::GenerateInductionVariableChangeForMemOp(Loop *loop, byte unroll, IR::Instr *insertBeforeInstr)
16679
16687
{
16688
+ AssertOrFailFast(unroll != Js::Constants::InvalidLoopUnrollFactor);
16680
16689
LoopCount *loopCount = loop->loopCount;
16681
16690
IR::Opnd *sizeOpnd = nullptr;
16682
16691
Assert(loopCount);
@@ -16714,11 +16723,12 @@ GlobOpt::GenerateInductionVariableChangeForMemOp(Loop *loop, byte unroll, IR::In
16714
16723
16715
16724
IR::Opnd *unrollOpnd = IR::IntConstOpnd::New(unroll, type, localFunc);
16716
16725
16717
- InsertInstr(IR::Instr::New(Js::OpCode::Mul_I4,
16718
- sizeOpnd,
16719
- loopCountOpnd,
16720
- unrollOpnd,
16721
- localFunc));
16726
+ IR::Instr* inductionChangeMultiplier = IR::Instr::New(
16727
+ Js::OpCode::Mul_I4, sizeOpnd, loopCountOpnd, unrollOpnd, localFunc);
16728
+
16729
+ InsertInstr(inductionChangeMultiplier);
16730
+
16731
+ inductionChangeMultiplier->ConvertToBailOutInstr(loop->bailOutInfo, IR::BailOutOnOverflow);
16722
16732
16723
16733
}
16724
16734
}
0 commit comments