diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:17:04 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2017-01-02 19:17:04 +0000 |
commit | b915e9e0fc85ba6f398b3fab0db6a81a8913af94 (patch) | |
tree | 98b8f811c7aff2547cab8642daf372d6c59502fb /lib/Target/Hexagon/BitTracker.cpp | |
parent | 6421cca32f69ac849537a3cff78c352195e99f1b (diff) | |
download | src-b915e9e0fc85ba6f398b3fab0db6a81a8913af94.tar.gz src-b915e9e0fc85ba6f398b3fab0db6a81a8913af94.zip |
Vendor import of llvm trunk r290819:vendor/llvm/llvm-trunk-r290819
Notes
Notes:
svn path=/vendor/llvm/dist/; revision=311116
svn path=/vendor/llvm/llvm-trunk-r290819/; revision=311117; tag=vendor/llvm/llvm-trunk-r290819
Diffstat (limited to 'lib/Target/Hexagon/BitTracker.cpp')
-rw-r--r-- | lib/Target/Hexagon/BitTracker.cpp | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/lib/Target/Hexagon/BitTracker.cpp b/lib/Target/Hexagon/BitTracker.cpp index d052a835fbd8..c0591c332dea 100644 --- a/lib/Target/Hexagon/BitTracker.cpp +++ b/lib/Target/Hexagon/BitTracker.cpp @@ -169,6 +169,12 @@ namespace llvm { } } +void BitTracker::print_cells(raw_ostream &OS) const { + for (CellMapType::iterator I = Map.begin(), E = Map.end(); I != E; ++I) + dbgs() << PrintReg(I->first, &ME.TRI) << " -> " << I->second << "\n"; +} + + BitTracker::BitTracker(const MachineEvaluator &E, MachineFunction &F) : Trace(false), ME(E), MF(F), MRI(F.getRegInfo()), Map(*new CellMapType) {} @@ -1042,6 +1048,20 @@ bool BT::reached(const MachineBasicBlock *B) const { } +// Visit an individual instruction. This could be a newly added instruction, +// or one that has been modified by an optimization. +void BT::visit(const MachineInstr &MI) { + assert(!MI.isBranch() && "Only non-branches are allowed"); + InstrExec.insert(&MI); + visitNonBranch(MI); + // The call to visitNonBranch could propagate the changes until a branch + // is actually visited. This could result in adding CFG edges to the flow + // queue. Since the queue won't be processed, clear it. + while (!FlowQ.empty()) + FlowQ.pop(); +} + + void BT::reset() { EdgeExec.clear(); InstrExec.clear(); @@ -1118,10 +1138,7 @@ void BT::run() { } } // while (!FlowQ->empty()) - if (Trace) { - dbgs() << "Cells after propagation:\n"; - for (CellMapType::iterator I = Map.begin(), E = Map.end(); I != E; ++I) - dbgs() << PrintReg(I->first, &ME.TRI) << " -> " << I->second << "\n"; - } + if (Trace) + print_cells(dbgs() << "Cells after propagation:\n"); } |