@@ -599,6 +599,11 @@ GlobOpt::OptBlock(BasicBlock *block)
599599 this->tempBv->And(liveOnBackEdge);
600600 this->ToFloat64(this->tempBv, block->loop->landingPad);
601601
602+ if (block->loop->symsRequiringCompensationToMergedValueInfoMap)
603+ {
604+ InsertValueCompensation(block, block->loop->symsRequiringCompensationToMergedValueInfoMap);
605+ }
606+
602607 // Now that we're done with the liveFields within this loop, trim the set to those syms
603608 // that the backward pass told us were live out of the loop.
604609 // This assumes we have no further need of the liveFields within the loop.
@@ -1151,10 +1156,10 @@ void GlobOpt::FieldPRE(Loop *loop)
11511156
11521157void GlobOpt::InsertValueCompensation(
11531158 BasicBlock *const predecessor,
1154- const SymToValueInfoMap & symsRequiringCompensationToMergedValueInfoMap)
1159+ const SymToValueInfoMap * symsRequiringCompensationToMergedValueInfoMap)
11551160{
11561161 Assert(predecessor);
1157- Assert(symsRequiringCompensationToMergedValueInfoMap. Count() != 0);
1162+ Assert(symsRequiringCompensationToMergedValueInfoMap-> Count() != 0);
11581163
11591164 IR::Instr *insertBeforeInstr = predecessor->GetLastInstr();
11601165 Func *const func = insertBeforeInstr->m_func;
@@ -1193,7 +1198,7 @@ void GlobOpt::InsertValueCompensation(
11931198 }
11941199 };
11951200 JsUtil::List<DelayChangeValueInfo, ArenaAllocator> delayChangeValueInfo(alloc);
1196- for(auto it = symsRequiringCompensationToMergedValueInfoMap. GetIterator(); it.IsValid(); it.MoveNext())
1201+ for(auto it = symsRequiringCompensationToMergedValueInfoMap-> GetIterator(); it.IsValid(); it.MoveNext())
11971202 {
11981203 const auto &entry = it.Current();
11991204 Sym *const sym = entry.Key();
@@ -1840,6 +1845,10 @@ GlobOpt::IsAllowedForMemOpt(IR::Instr* instr, bool isMemset, IR::RegOpnd *baseOp
18401845 return false;
18411846 }
18421847 }
1848+ else
1849+ {
1850+ return false;
1851+ }
18431852
18441853 if (!baseValueType.IsTypedArray())
18451854 {
@@ -2843,12 +2852,6 @@ GlobOpt::OptDst(
28432852 {
28442853 this->FinishOptPropOp(instr, opnd->AsPropertySymOpnd());
28452854 }
2846- else if (instr->m_opcode == Js::OpCode::StElemI_A ||
2847- instr->m_opcode == Js::OpCode::StElemI_A_Strict ||
2848- instr->m_opcode == Js::OpCode::InitComputedProperty)
2849- {
2850- this->KillObjectHeaderInlinedTypeSyms(this->currentBlock, false);
2851- }
28522855
28532856 if (opnd->IsIndirOpnd() && !this->IsLoopPrePass())
28542857 {
@@ -16854,6 +16857,9 @@ GlobOpt::EmitMemop(Loop * loop, LoopCount *loopCount, const MemOpEmitData* emitD
1685416857 memopInstr->SetSrc2(sizeOpnd);
1685516858 insertBeforeInstr->InsertBefore(memopInstr);
1685616859
16860+
16861+ loop->memOpInfo->instr = memopInstr;
16862+
1685716863#if DBG_DUMP
1685816864 if (DO_MEMOP_TRACE())
1685916865 {
0 commit comments