@@ -1013,28 +1013,17 @@ BOOL GlobOpt::PRE::PreloadPRECandidate(Loop *loop, GlobHashBucket* candidate)
10131013 // Create instr to put in landing pad for compensation
10141014 Assert(IsPREInstrCandidateLoad(ldInstrInLoop->m_opcode));
10151015
1016- IR::Instr * ldInstr = InsertPropertySymPreloadWithoutDstInLandingPad (ldInstrInLoop, loop, propertySym);
1016+ IR::Instr * ldInstr = InsertPropertySymPreloadInLandingPad (ldInstrInLoop, loop, propertySym);
10171017 if (!ldInstr)
10181018 {
10191019 return false;
10201020 }
10211021
10221022 Assert(ldInstr->GetDst() == nullptr);
1023- if (ldInstrInLoop->GetDst())
1024- {
1025- Assert(ldInstrInLoop->GetDst()->IsRegOpnd());
1026- if (ldInstrInLoop->GetDst()->AsRegOpnd()->m_sym != symStore)
1027- {
1028- ldInstr->SetDst(IR::RegOpnd::New(symStore->AsStackSym(), TyVar, this->globOpt->func));
1029- loop->fieldPRESymStores->Set(symStore->m_id);
1030- }
1031- else
1032- {
1033- ldInstr->SetDst(ldInstrInLoop->GetDst()->Copy(ldInstrInLoop->m_func));
1034- }
1035- landingPad->globOptData.liveVarSyms->Set(ldInstr->GetDst()->AsRegOpnd()->m_sym->m_id);
1036- }
1037-
1023+ ldInstr->SetDst(IR::RegOpnd::New(symStore->AsStackSym(), TyVar, this->globOpt->func));
1024+ loop->fieldPRESymStores->Set(symStore->m_id);
1025+ landingPad->globOptData.liveVarSyms->Set(symStore->m_id);
1026+
10381027 Value * objPtrValue = landingPad->globOptData.FindValue(objPtrSym);
10391028
10401029 objPtrCopyPropSym = objPtrCopyPropSym ? objPtrCopyPropSym : objPtrValue ? landingPad->globOptData.GetCopyPropSym(objPtrSym, objPtrValue) : nullptr;
@@ -3310,7 +3299,7 @@ GlobOpt::OptSrc(IR::Opnd *opnd, IR::Instr * *pInstr, Value **indirIndexValRef, I
33103299 // Can this be done in one call?
33113300 if (!this->prePassInstrMap->ContainsKey(sym->m_id))
33123301 {
3313- this->prePassInstrMap->AddNew(sym->m_id, instr);
3302+ this->prePassInstrMap->AddNew(sym->m_id, instr->CopyWithoutDst() );
33143303 }
33153304 }
33163305 }
@@ -17235,7 +17224,7 @@ GlobOpt::PRE::InsertSymDefinitionInLandingPad(StackSym * sym, Loop * loop, Sym *
1723517224 // #1 is done next. #2 and #3 are done as part of preloading T1.y
1723617225
1723717226 // Insert T1 = o.x
17238- if (!InsertPropertySymPreloadInLandingPad(symDefInstr, loop, propSym))
17227+ if (!InsertPropertySymPreloadInLandingPad(symDefInstr->Copy() , loop, propSym))
1723917228 {
1724017229 return false;
1724117230 }
@@ -17248,7 +17237,7 @@ GlobOpt::PRE::InsertSymDefinitionInLandingPad(StackSym * sym, Loop * loop, Sym *
1724817237 if (loop->landingPad->globOptData.IsLive(*objPtrCopyPropSym))
1724917238 {
1725017239 // insert T1 = o.x
17251- if (!InsertPropertySymPreloadInLandingPad(symDefInstr, loop, propSym))
17240+ if (!InsertPropertySymPreloadInLandingPad(symDefInstr->Copy() , loop, propSym))
1725217241 {
1725317242 return false;
1725417243 }
@@ -17336,25 +17325,6 @@ GlobOpt::PRE::InsertInstrInLandingPad(IR::Instr * instr, Loop * loop)
1733617325
1733717326IR::Instr *
1733817327GlobOpt::PRE::InsertPropertySymPreloadInLandingPad(IR::Instr * ldInstr, Loop * loop, PropertySym * propertySym)
17339- {
17340- IR::Instr * instr = InsertPropertySymPreloadWithoutDstInLandingPad(ldInstr, loop, propertySym);
17341- if (!instr)
17342- {
17343- return nullptr;
17344- }
17345-
17346- if (ldInstr->GetDst())
17347- {
17348- instr->SetDst(ldInstr->GetDst()->Copy(ldInstr->m_func));
17349- instr->GetDst()->SetIsJITOptimizedReg(true);
17350- loop->landingPad->globOptData.liveVarSyms->Set(instr->GetDst()->GetStackSym()->m_id);
17351- }
17352-
17353- return instr;
17354- }
17355-
17356- IR::Instr *
17357- GlobOpt::PRE::InsertPropertySymPreloadWithoutDstInLandingPad(IR::Instr * ldInstr, Loop * loop, PropertySym * propertySym)
1735817328{
1735917329 IR::SymOpnd *ldSrc = ldInstr->GetSrc1()->AsSymOpnd();
1736017330
@@ -17369,8 +17339,6 @@ GlobOpt::PRE::InsertPropertySymPreloadWithoutDstInLandingPad(IR::Instr * ldInstr
1736917339 }
1737017340 }
1737117341
17372- ldInstr = ldInstr->CopyWithoutDst();
17373-
1737417342 // Consider: Shouldn't be necessary once we have copy-prop in prepass...
1737517343 ldInstr->GetSrc1()->AsSymOpnd()->m_sym = propertySym;
1737617344 ldSrc = ldInstr->GetSrc1()->AsSymOpnd();
@@ -17384,6 +17352,11 @@ GlobOpt::PRE::InsertPropertySymPreloadWithoutDstInLandingPad(IR::Instr * ldInstr
1738417352 ldInstr->ReplaceSrc1(newPropSymOpnd);
1738517353 }
1738617354
17355+ if (ldInstr->GetDst())
17356+ {
17357+ loop->landingPad->globOptData.liveVarSyms->Set(ldInstr->GetDst()->GetStackSym()->m_id);
17358+ }
17359+
1738717360 InsertInstrInLandingPad(ldInstr, loop);
1738817361
1738917362 return ldInstr;
0 commit comments