diff options
Diffstat (limited to 'llvm/lib/Target/Hexagon/BitTracker.cpp')
| -rw-r--r-- | llvm/lib/Target/Hexagon/BitTracker.cpp | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/llvm/lib/Target/Hexagon/BitTracker.cpp b/llvm/lib/Target/Hexagon/BitTracker.cpp index 15d6a05a007..378aafbc8dd 100644 --- a/llvm/lib/Target/Hexagon/BitTracker.cpp +++ b/llvm/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. @@ -1138,6 +1141,7 @@ void BT::run() { runEdgeQueue(BlockScanned); runUseQueue(); } + UseQ.reset(); if (Trace) print_cells(dbgs() << "Cells after propagation:\n"); |

