diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2020-07-26 19:36:28 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2020-07-26 19:36:28 +0000 |
commit | cfca06d7963fa0909f90483b42a6d7d194d01e08 (patch) | |
tree | 209fb2a2d68f8f277793fc8df46c753d31bc853b /llvm/lib/CodeGen/LiveRangeEdit.cpp | |
parent | 706b4fc47bbc608932d3b491ae19a3b9cde9497b (diff) |
Notes
Diffstat (limited to 'llvm/lib/CodeGen/LiveRangeEdit.cpp')
-rw-r--r-- | llvm/lib/CodeGen/LiveRangeEdit.cpp | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/llvm/lib/CodeGen/LiveRangeEdit.cpp b/llvm/lib/CodeGen/LiveRangeEdit.cpp index 34bac082bcd7d..9de77c19a23a2 100644 --- a/llvm/lib/CodeGen/LiveRangeEdit.cpp +++ b/llvm/lib/CodeGen/LiveRangeEdit.cpp @@ -12,6 +12,7 @@ #include "llvm/CodeGen/LiveRangeEdit.h" #include "llvm/ADT/Statistic.h" +#include "llvm/Analysis/AliasAnalysis.h" #include "llvm/CodeGen/CalcSpillWeights.h" #include "llvm/CodeGen/LiveIntervals.h" #include "llvm/CodeGen/MachineRegisterInfo.h" @@ -30,7 +31,7 @@ STATISTIC(NumFracRanges, "Number of live ranges fractured by DCE"); void LiveRangeEdit::Delegate::anchor() { } -LiveInterval &LiveRangeEdit::createEmptyIntervalFrom(unsigned OldReg, +LiveInterval &LiveRangeEdit::createEmptyIntervalFrom(Register OldReg, bool createSubRanges) { Register VReg = MRI.createVirtualRegister(MRI.getRegClass(OldReg)); if (VRM) @@ -51,7 +52,7 @@ LiveInterval &LiveRangeEdit::createEmptyIntervalFrom(unsigned OldReg, return LI; } -unsigned LiveRangeEdit::createFrom(unsigned OldReg) { +Register LiveRangeEdit::createFrom(Register OldReg) { Register VReg = MRI.createVirtualRegister(MRI.getRegClass(OldReg)); if (VRM) { VRM->setIsSplitFromReg(VReg, VRM->getOriginal(OldReg)); @@ -69,7 +70,7 @@ unsigned LiveRangeEdit::createFrom(unsigned OldReg) { bool LiveRangeEdit::checkRematerializable(VNInfo *VNI, const MachineInstr *DefMI, - AliasAnalysis *aa) { + AAResults *aa) { assert(DefMI && "Missing instruction"); ScannedRemattable = true; if (!TII.isTriviallyReMaterializable(*DefMI, aa)) @@ -78,7 +79,7 @@ bool LiveRangeEdit::checkRematerializable(VNInfo *VNI, return true; } -void LiveRangeEdit::scanRemattable(AliasAnalysis *aa) { +void LiveRangeEdit::scanRemattable(AAResults *aa) { for (VNInfo *VNI : getParent().valnos) { if (VNI->isUnused()) continue; @@ -95,7 +96,7 @@ void LiveRangeEdit::scanRemattable(AliasAnalysis *aa) { ScannedRemattable = true; } -bool LiveRangeEdit::anyRematerializable(AliasAnalysis *aa) { +bool LiveRangeEdit::anyRematerializable(AAResults *aa) { if (!ScannedRemattable) scanRemattable(aa); return !Remattable.empty(); @@ -177,7 +178,7 @@ SlotIndex LiveRangeEdit::rematerializeAt(MachineBasicBlock &MBB, return LIS.getSlotIndexes()->insertMachineInstrInMaps(*MI, Late).getRegSlot(); } -void LiveRangeEdit::eraseVirtReg(unsigned Reg) { +void LiveRangeEdit::eraseVirtReg(Register Reg) { if (TheDelegate && TheDelegate->LRE_CanEraseVirtReg(Reg)) LIS.removeInterval(Reg); } @@ -231,7 +232,8 @@ bool LiveRangeEdit::foldAsLoad(LiveInterval *LI, return false; LLVM_DEBUG(dbgs() << " folded: " << *FoldMI); LIS.ReplaceMachineInstrInMaps(*UseMI, *FoldMI); - if (UseMI->isCall()) + // Update the call site info. + if (UseMI->shouldUpdateCallSiteInfo()) UseMI->getMF()->moveCallSiteInfo(UseMI, FoldMI); UseMI->eraseFromParent(); DefMI->addRegisterDead(LI->reg, nullptr); @@ -258,7 +260,7 @@ bool LiveRangeEdit::useIsKill(const LiveInterval &LI, /// Find all live intervals that need to shrink, then remove the instruction. void LiveRangeEdit::eliminateDeadDef(MachineInstr *MI, ToShrinkSet &ToShrink, - AliasAnalysis *AA) { + AAResults *AA) { assert(MI->allDefsAreDead() && "Def isn't really dead"); SlotIndex Idx = LIS.getInstructionIndex(*MI).getRegSlot(); @@ -381,7 +383,7 @@ void LiveRangeEdit::eliminateDeadDef(MachineInstr *MI, ToShrinkSet &ToShrink, // Erase any virtregs that are now empty and unused. There may be <undef> // uses around. Keep the empty live range in that case. for (unsigned i = 0, e = RegsToErase.size(); i != e; ++i) { - unsigned Reg = RegsToErase[i]; + Register Reg = RegsToErase[i]; if (LIS.hasInterval(Reg) && MRI.reg_nodbg_empty(Reg)) { ToShrink.remove(&LIS.getInterval(Reg)); eraseVirtReg(Reg); @@ -390,8 +392,8 @@ void LiveRangeEdit::eliminateDeadDef(MachineInstr *MI, ToShrinkSet &ToShrink, } void LiveRangeEdit::eliminateDeadDefs(SmallVectorImpl<MachineInstr *> &Dead, - ArrayRef<unsigned> RegsBeingSpilled, - AliasAnalysis *AA) { + ArrayRef<Register> RegsBeingSpilled, + AAResults *AA) { ToShrinkSet ToShrink; for (;;) { @@ -450,8 +452,7 @@ void LiveRangeEdit::eliminateDeadDefs(SmallVectorImpl<MachineInstr *> &Dead, // Keep track of new virtual registers created via // MachineRegisterInfo::createVirtualRegister. void -LiveRangeEdit::MRI_NoteNewVirtualRegister(unsigned VReg) -{ +LiveRangeEdit::MRI_NoteNewVirtualRegister(Register VReg) { if (VRM) VRM->grow(); |