diff options
Diffstat (limited to 'llvm/lib/CodeGen/MachineLICM.cpp')
| -rw-r--r-- | llvm/lib/CodeGen/MachineLICM.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/llvm/lib/CodeGen/MachineLICM.cpp b/llvm/lib/CodeGen/MachineLICM.cpp index d21059189b18..d1d5509dc482 100644 --- a/llvm/lib/CodeGen/MachineLICM.cpp +++ b/llvm/lib/CodeGen/MachineLICM.cpp @@ -24,6 +24,7 @@ #include "llvm/Analysis/AliasAnalysis.h" #include "llvm/CodeGen/MachineBasicBlock.h" #include "llvm/CodeGen/MachineBlockFrequencyInfo.h" +#include "llvm/CodeGen/MachineDomTreeUpdater.h" #include "llvm/CodeGen/MachineDominators.h" #include "llvm/CodeGen/MachineFrameInfo.h" #include "llvm/CodeGen/MachineFunction.h" @@ -133,7 +134,7 @@ namespace { AliasAnalysis *AA = nullptr; // Alias analysis info. MachineBlockFrequencyInfo *MBFI = nullptr; // Machine block frequncy info MachineLoopInfo *MLI = nullptr; // Current MachineLoopInfo - MachineDominatorTree *DT = nullptr; // Machine dominator tree for the cur loop + MachineDomTreeUpdater *MDTU = nullptr; // Wraps current dominator tree // State that is updated as we process loops bool Changed = false; // True if a loop is changed. @@ -375,7 +376,9 @@ bool MachineLICMImpl::run(MachineFunction &MF) { .getManager() .getResult<AAManager>(MF.getFunction()) : &LegacyPass->getAnalysis<AAResultsWrapperPass>().getAAResults(); - DT = GET_RESULT(MachineDominatorTree, getDomTree, ); + MachineDomTreeUpdater DTU(GET_RESULT(MachineDominatorTree, getDomTree, ), + MachineDomTreeUpdater::UpdateStrategy::Lazy); + MDTU = &DTU; MLI = GET_RESULT(MachineLoop, getLI, Info); MBFI = DisableHoistingToHotterBlocks != UseBFI::None ? GET_RESULT(MachineBlockFrequency, getMBFI, Info) @@ -421,7 +424,7 @@ bool MachineLICMImpl::run(MachineFunction &MF) { else { // CSEMap is initialized for loop header when the first instruction is // being hoisted. - MachineDomTreeNode *N = DT->getNode(CurLoop->getHeader()); + MachineDomTreeNode *N = MDTU->getDomTree().getNode(CurLoop->getHeader()); FirstInLoop = true; HoistOutOfLoop(N, CurLoop, CurPreheader); CSEMap.clear(); @@ -764,7 +767,7 @@ bool MachineLICMImpl::IsGuaranteedToExecute(MachineBasicBlock *BB, SmallVector<MachineBasicBlock*, 8> CurrentLoopExitingBlocks; CurLoop->getExitingBlocks(CurrentLoopExitingBlocks); for (MachineBasicBlock *CurrentLoopExitingBlock : CurrentLoopExitingBlocks) - if (!DT->dominates(BB, CurrentLoopExitingBlock)) { + if (!MDTU->getDomTree().dominates(BB, CurrentLoopExitingBlock)) { SpeculationState = SpeculateTrue; return false; } @@ -1600,7 +1603,7 @@ bool MachineLICMImpl::MayCSE(MachineInstr *MI) { unsigned Opcode = MI->getOpcode(); for (auto &Map : CSEMap) { // Check this CSEMap's preheader dominates MI's basic block. - if (DT->dominates(Map.first, MI->getParent())) { + if (MDTU->getDomTree().dominates(Map.first, MI->getParent())) { DenseMap<unsigned, std::vector<MachineInstr *>>::iterator CI = Map.second.find(Opcode); // Do not CSE implicit_def so ProcessImplicitDefs can properly propagate @@ -1668,7 +1671,7 @@ unsigned MachineLICMImpl::Hoist(MachineInstr *MI, MachineBasicBlock *Preheader, bool HasCSEDone = false; for (auto &Map : CSEMap) { // Check this CSEMap's preheader dominates MI's basic block. - if (DT->dominates(Map.first, MI->getParent())) { + if (MDTU->getDomTree().dominates(Map.first, MI->getParent())) { DenseMap<unsigned, std::vector<MachineInstr *>>::iterator CI = Map.second.find(Opcode); if (CI != Map.second.end()) { @@ -1732,7 +1735,7 @@ MachineLICMImpl::getCurPreheader(MachineLoop *CurLoop, } CurPreheader = Pred->SplitCriticalEdge(CurLoop->getHeader(), LegacyPass, - MFAM, nullptr); + MFAM, nullptr, MDTU); if (!CurPreheader) { CurPreheader = reinterpret_cast<MachineBasicBlock *>(-1); return nullptr; |
