@@ -1017,27 +1017,16 @@ BOOL GlobOpt::PRE::PreloadPRECandidate(Loop *loop, GlobHashBucket* candidate)
1017
1017
// Create instr to put in landing pad for compensation
1018
1018
Assert(IsPREInstrCandidateLoad(ldInstrInLoop->m_opcode));
1019
1019
1020
- IR::Instr * ldInstr = InsertPropertySymPreloadWithoutDstInLandingPad (ldInstrInLoop, loop, propertySym);
1020
+ IR::Instr * ldInstr = InsertPropertySymPreloadInLandingPad (ldInstrInLoop, loop, propertySym);
1021
1021
if (!ldInstr)
1022
1022
{
1023
1023
return false;
1024
1024
}
1025
1025
1026
1026
Assert(ldInstr->GetDst() == nullptr);
1027
- if (ldInstrInLoop->GetDst())
1028
- {
1029
- Assert(ldInstrInLoop->GetDst()->IsRegOpnd());
1030
- if (ldInstrInLoop->GetDst()->AsRegOpnd()->m_sym != symStore)
1031
- {
1032
- ldInstr->SetDst(IR::RegOpnd::New(symStore->AsStackSym(), TyVar, this->globOpt->func));
1033
- loop->fieldPRESymStores->Set(symStore->m_id);
1034
- }
1035
- else
1036
- {
1037
- ldInstr->SetDst(ldInstrInLoop->GetDst()->Copy(ldInstrInLoop->m_func));
1038
- }
1039
- landingPad->globOptData.liveVarSyms->Set(ldInstr->GetDst()->AsRegOpnd()->m_sym->m_id);
1040
- }
1027
+ ldInstr->SetDst(IR::RegOpnd::New(symStore->AsStackSym(), TyVar, this->globOpt->func));
1028
+ loop->fieldPRESymStores->Set(symStore->m_id);
1029
+ landingPad->globOptData.liveVarSyms->Set(symStore->m_id);
1041
1030
1042
1031
Value * objPtrValue = landingPad->globOptData.FindValue(objPtrSym);
1043
1032
@@ -3318,7 +3307,7 @@ GlobOpt::OptSrc(IR::Opnd *opnd, IR::Instr * *pInstr, Value **indirIndexValRef, I
3318
3307
// Can this be done in one call?
3319
3308
if (!this->prePassInstrMap->ContainsKey(sym->m_id))
3320
3309
{
3321
- this->prePassInstrMap->AddNew(sym->m_id, instr);
3310
+ this->prePassInstrMap->AddNew(sym->m_id, instr->CopyWithoutDst() );
3322
3311
}
3323
3312
}
3324
3313
}
@@ -17492,7 +17481,7 @@ GlobOpt::PRE::InsertSymDefinitionInLandingPad(StackSym * sym, Loop * loop, Sym *
17492
17481
// #1 is done next. #2 and #3 are done as part of preloading T1.y
17493
17482
17494
17483
// Insert T1 = o.x
17495
- if (!InsertPropertySymPreloadInLandingPad(symDefInstr, loop, propSym))
17484
+ if (!InsertPropertySymPreloadInLandingPad(symDefInstr->Copy() , loop, propSym))
17496
17485
{
17497
17486
return false;
17498
17487
}
@@ -17505,7 +17494,7 @@ GlobOpt::PRE::InsertSymDefinitionInLandingPad(StackSym * sym, Loop * loop, Sym *
17505
17494
if (loop->landingPad->globOptData.IsLive(*objPtrCopyPropSym))
17506
17495
{
17507
17496
// insert T1 = o.x
17508
- if (!InsertPropertySymPreloadInLandingPad(symDefInstr, loop, propSym))
17497
+ if (!InsertPropertySymPreloadInLandingPad(symDefInstr->Copy() , loop, propSym))
17509
17498
{
17510
17499
return false;
17511
17500
}
@@ -17593,25 +17582,6 @@ GlobOpt::PRE::InsertInstrInLandingPad(IR::Instr * instr, Loop * loop)
17593
17582
17594
17583
IR::Instr *
17595
17584
GlobOpt::PRE::InsertPropertySymPreloadInLandingPad(IR::Instr * ldInstr, Loop * loop, PropertySym * propertySym)
17596
- {
17597
- IR::Instr * instr = InsertPropertySymPreloadWithoutDstInLandingPad(ldInstr, loop, propertySym);
17598
- if (!instr)
17599
- {
17600
- return nullptr;
17601
- }
17602
-
17603
- if (ldInstr->GetDst())
17604
- {
17605
- instr->SetDst(ldInstr->GetDst()->Copy(ldInstr->m_func));
17606
- instr->GetDst()->SetIsJITOptimizedReg(true);
17607
- loop->landingPad->globOptData.liveVarSyms->Set(instr->GetDst()->GetStackSym()->m_id);
17608
- }
17609
-
17610
- return instr;
17611
- }
17612
-
17613
- IR::Instr *
17614
- GlobOpt::PRE::InsertPropertySymPreloadWithoutDstInLandingPad(IR::Instr * ldInstr, Loop * loop, PropertySym * propertySym)
17615
17585
{
17616
17586
IR::SymOpnd *ldSrc = ldInstr->GetSrc1()->AsSymOpnd();
17617
17587
@@ -17626,8 +17596,6 @@ GlobOpt::PRE::InsertPropertySymPreloadWithoutDstInLandingPad(IR::Instr * ldInstr
17626
17596
}
17627
17597
}
17628
17598
17629
- ldInstr = ldInstr->CopyWithoutDst();
17630
-
17631
17599
// Consider: Shouldn't be necessary once we have copy-prop in prepass...
17632
17600
ldInstr->GetSrc1()->AsSymOpnd()->m_sym = propertySym;
17633
17601
ldSrc = ldInstr->GetSrc1()->AsSymOpnd();
@@ -17641,6 +17609,11 @@ GlobOpt::PRE::InsertPropertySymPreloadWithoutDstInLandingPad(IR::Instr * ldInstr
17641
17609
ldInstr->ReplaceSrc1(newPropSymOpnd);
17642
17610
}
17643
17611
17612
+ if (ldInstr->GetDst())
17613
+ {
17614
+ loop->landingPad->globOptData.liveVarSyms->Set(ldInstr->GetDst()->GetStackSym()->m_id);
17615
+ }
17616
+
17644
17617
InsertInstrInLandingPad(ldInstr, loop);
17645
17618
17646
17619
return ldInstr;
0 commit comments