Lines Matching defs:SVI

314                                const InlineSpiller::SibValueInfo &SVI) {
315 OS << "spill " << PrintReg(SVI.SpillReg) << ':'
316 << SVI.SpillVNI->id << '@' << SVI.SpillVNI->def;
317 if (SVI.SpillMBB)
318 OS << " in BB#" << SVI.SpillMBB->getNumber();
319 if (SVI.AllDefsAreReloads)
321 if (SVI.DefByOrigPHI)
323 if (SVI.KillsSource)
326 for (unsigned i = 0, e = SVI.Deps.size(); i != e; ++i)
327 OS << ' ' << SVI.Deps[i]->id << '@' << SVI.Deps[i]->def;
329 if (SVI.DefMI)
330 OS << " def: " << *SVI.DefMI;
337 /// propagateSiblingValue - Propagate the value in SVI to dependents if it is
340 /// @param SVI SibValues entry to propagate.
342 void InlineSpiller::propagateSiblingValue(SibValueMap::iterator SVI,
344 // When VNI is non-NULL, add it to SVI's deps, and only propagate to that.
348 SVI->second.Deps.push_back(VNI);
352 if (!SVI->second.hasDef())
357 SmallVector<SibValueMap::iterator, 8> WorkList(1, SVI);
361 SVI = WorkList.pop_back_val();
362 WorkSet.erase(SVI->first);
363 TinyPtrVector<VNInfo*> *Deps = VNI ? &FirstDeps : &SVI->second.Deps;
366 SibValueInfo &SV = SVI->second;
371 << SVI->first->id << '@' << SVI->first->def << ":\t" << SV);
475 SibValueMap::iterator SVI;
477 tie(SVI, Inserted) =
481 << UseVNI->id << '@' << UseVNI->def << ' ' << SVI->second);
482 return SVI->second.DefMI;
501 SVI = SibValues.find(VNI);
502 assert(SVI != SibValues.end() && "Missing SibValues entry");
509 SVI->second.DefByOrigPHI = true;
510 SVI->second.AllDefsAreReloads = false;
511 propagateSiblingValue(SVI);
555 tie(SVI, Inserted) =
559 SVI->second.Deps.push_back(PHIs[pi]);
565 propagateSiblingValue(SVI);
582 SVI->second.KillsSource = SrcQ.isKill();
586 << " kill=" << unsigned(SVI->second.KillsSource) << '\n');
588 tie(SVI, Inserted) = SibValues.insert(std::make_pair(SrcVNI,
593 propagateSiblingValue(SVI, VNI);
600 SVI->second.DefMI = MI;
601 SVI->second.SpillMBB = MI->getParent();
605 propagateSiblingValue(SVI);
612 SVI->second.AllDefsAreReloads = false;
613 propagateSiblingValue(SVI);
618 SVI = SibValues.find(UseVNI);
619 assert(SVI != SibValues.end() && "Didn't compute requested info");
620 DEBUG(dbgs() << " traced to:\t" << SVI->second);
621 return SVI->second.DefMI;
674 const SibValueInfo &SVI = I->second;
677 if (!SVI.AllDefsAreReloads && SVI.SpillVNI == VNI)
681 if (!LIS.hasInterval(SVI.SpillReg)) {
682 DEBUG(dbgs() << "Stale interval: " << PrintReg(SVI.SpillReg) << '\n');
687 LiveInterval &SibLI = LIS.getInterval(SVI.SpillReg);
688 if (!SibLI.containsValue(SVI.SpillVNI)) {
689 DEBUG(dbgs() << "Stale value: " << PrintReg(SVI.SpillReg) << '\n');
705 if (SVI.AllDefsAreReloads) {
706 DEBUG(dbgs() << "\tno spill needed: " << SVI);
710 // We are going to spill SVI.SpillVNI immediately after its def, so clear out
712 eliminateRedundantSpills(SibLI, SVI.SpillVNI);
714 MachineBasicBlock *MBB = LIS.getMBBFromIndex(SVI.SpillVNI->def);
716 if (SVI.SpillVNI->isPHIDef())
719 MachineInstr *DefMI = LIS.getInstructionFromIndex(SVI.SpillVNI->def);
725 TII.storeRegToStackSlot(*MBB, MII, SVI.SpillReg, false, StackSlot,
726 MRI.getRegClass(SVI.SpillReg), &TRI);
729 DEBUG(dbgs() << "\thoisted: " << SVI.SpillVNI->def << '\t' << *MII);