diff options
Diffstat (limited to 'lib/Target/Hexagon/BitTracker.cpp')
-rw-r--r-- | lib/Target/Hexagon/BitTracker.cpp | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/lib/Target/Hexagon/BitTracker.cpp b/lib/Target/Hexagon/BitTracker.cpp index 15d6a05a0078..69529b0d1162 100644 --- a/lib/Target/Hexagon/BitTracker.cpp +++ b/lib/Target/Hexagon/BitTracker.cpp @@ -779,15 +779,18 @@ bool BT::UseQueueType::Cmp::operator()(const MachineInstr *InstA, return BA->getNumber() > BB->getNumber(); } - MachineBasicBlock::const_iterator ItA = InstA->getIterator(); - MachineBasicBlock::const_iterator ItB = InstB->getIterator(); - MachineBasicBlock::const_iterator End = BA->end(); - while (ItA != End) { - if (ItA == ItB) - return false; // ItA was before ItB. - ++ItA; - } - return true; + auto getDist = [this] (const MachineInstr *MI) { + auto F = Dist.find(MI); + if (F != Dist.end()) + return F->second; + MachineBasicBlock::const_iterator I = MI->getParent()->begin(); + MachineBasicBlock::const_iterator E = MI->getIterator(); + unsigned D = std::distance(I, E); + Dist.insert(std::make_pair(MI, D)); + return D; + }; + + return getDist(InstA) > getDist(InstB); } // Main W-Z implementation. @@ -840,7 +843,7 @@ void BT::visitPHI(const MachineInstr &PI) { void BT::visitNonBranch(const MachineInstr &MI) { if (Trace) dbgs() << "Visit MI(" << printMBBReference(*MI.getParent()) << "): " << MI; - if (MI.isDebugValue()) + if (MI.isDebugInstr()) return; assert(!MI.isBranch() && "Unexpected branch instruction"); @@ -1138,6 +1141,7 @@ void BT::run() { runEdgeQueue(BlockScanned); runUseQueue(); } + UseQ.reset(); if (Trace) print_cells(dbgs() << "Cells after propagation:\n"); |