@@ -1013,28 +1013,17 @@ BOOL GlobOpt::PRE::PreloadPRECandidate(Loop *loop, GlobHashBucket* candidate)
1013
1013
// Create instr to put in landing pad for compensation
1014
1014
Assert(IsPREInstrCandidateLoad(ldInstrInLoop->m_opcode));
1015
1015
1016
- IR::Instr * ldInstr = InsertPropertySymPreloadWithoutDstInLandingPad (ldInstrInLoop, loop, propertySym);
1016
+ IR::Instr * ldInstr = InsertPropertySymPreloadInLandingPad (ldInstrInLoop, loop, propertySym);
1017
1017
if (!ldInstr)
1018
1018
{
1019
1019
return false;
1020
1020
}
1021
1021
1022
1022
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
+
1038
1027
Value * objPtrValue = landingPad->globOptData.FindValue(objPtrSym);
1039
1028
1040
1029
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
3310
3299
// Can this be done in one call?
3311
3300
if (!this->prePassInstrMap->ContainsKey(sym->m_id))
3312
3301
{
3313
- this->prePassInstrMap->AddNew(sym->m_id, instr);
3302
+ this->prePassInstrMap->AddNew(sym->m_id, instr->CopyWithoutDst() );
3314
3303
}
3315
3304
}
3316
3305
}
@@ -17235,7 +17224,7 @@ GlobOpt::PRE::InsertSymDefinitionInLandingPad(StackSym * sym, Loop * loop, Sym *
17235
17224
// #1 is done next. #2 and #3 are done as part of preloading T1.y
17236
17225
17237
17226
// Insert T1 = o.x
17238
- if (!InsertPropertySymPreloadInLandingPad(symDefInstr, loop, propSym))
17227
+ if (!InsertPropertySymPreloadInLandingPad(symDefInstr->Copy() , loop, propSym))
17239
17228
{
17240
17229
return false;
17241
17230
}
@@ -17248,7 +17237,7 @@ GlobOpt::PRE::InsertSymDefinitionInLandingPad(StackSym * sym, Loop * loop, Sym *
17248
17237
if (loop->landingPad->globOptData.IsLive(*objPtrCopyPropSym))
17249
17238
{
17250
17239
// insert T1 = o.x
17251
- if (!InsertPropertySymPreloadInLandingPad(symDefInstr, loop, propSym))
17240
+ if (!InsertPropertySymPreloadInLandingPad(symDefInstr->Copy() , loop, propSym))
17252
17241
{
17253
17242
return false;
17254
17243
}
@@ -17336,25 +17325,6 @@ GlobOpt::PRE::InsertInstrInLandingPad(IR::Instr * instr, Loop * loop)
17336
17325
17337
17326
IR::Instr *
17338
17327
GlobOpt::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)
17358
17328
{
17359
17329
IR::SymOpnd *ldSrc = ldInstr->GetSrc1()->AsSymOpnd();
17360
17330
@@ -17369,8 +17339,6 @@ GlobOpt::PRE::InsertPropertySymPreloadWithoutDstInLandingPad(IR::Instr * ldInstr
17369
17339
}
17370
17340
}
17371
17341
17372
- ldInstr = ldInstr->CopyWithoutDst();
17373
-
17374
17342
// Consider: Shouldn't be necessary once we have copy-prop in prepass...
17375
17343
ldInstr->GetSrc1()->AsSymOpnd()->m_sym = propertySym;
17376
17344
ldSrc = ldInstr->GetSrc1()->AsSymOpnd();
@@ -17384,6 +17352,11 @@ GlobOpt::PRE::InsertPropertySymPreloadWithoutDstInLandingPad(IR::Instr * ldInstr
17384
17352
ldInstr->ReplaceSrc1(newPropSymOpnd);
17385
17353
}
17386
17354
17355
+ if (ldInstr->GetDst())
17356
+ {
17357
+ loop->landingPad->globOptData.liveVarSyms->Set(ldInstr->GetDst()->GetStackSym()->m_id);
17358
+ }
17359
+
17387
17360
InsertInstrInLandingPad(ldInstr, loop);
17388
17361
17389
17362
return ldInstr;
0 commit comments