mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-06 23:32:27 +00:00
Owen Anderson 2009-06-15: Use a SmallPtrSet here, for speed and to match df_iterator.
Owen Anderson 2009-06-15: Remember to clear out our maps to prevent crashing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73438 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a7a8af0c58
commit
be24f1b7fb
@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include "llvm/ADT/GraphTraits.h"
|
#include "llvm/ADT/GraphTraits.h"
|
||||||
#include "llvm/ADT/iterator.h"
|
#include "llvm/ADT/iterator.h"
|
||||||
|
#include "llvm/ADT/SmallPtrSet.h"
|
||||||
#include <set>
|
#include <set>
|
||||||
#include <stack>
|
#include <stack>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@ -39,9 +40,9 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
template<class GraphT,
|
template<class GraphT,
|
||||||
class SetType = std::set<typename GraphTraits<GraphT>::NodeType*>,
|
class SetType = llvm::SmallPtrSet<typename GraphTraits<GraphT>::NodeType*, 8>,
|
||||||
bool ExtStorage = false,
|
bool ExtStorage = false,
|
||||||
class GT = GraphTraits<GraphT> >
|
class GT = GraphTraits<GraphT> >
|
||||||
class po_iterator : public forward_iterator<typename GT::NodeType, ptrdiff_t>,
|
class po_iterator : public forward_iterator<typename GT::NodeType, ptrdiff_t>,
|
||||||
public po_iterator_storage<SetType, ExtStorage> {
|
public po_iterator_storage<SetType, ExtStorage> {
|
||||||
typedef forward_iterator<typename GT::NodeType, ptrdiff_t> super;
|
typedef forward_iterator<typename GT::NodeType, ptrdiff_t> super;
|
||||||
|
@ -32,10 +32,12 @@ void LazyLiveness::computeBackedgeChain(MachineFunction& mf,
|
|||||||
calculated.set(preorder[MBB]);
|
calculated.set(preorder[MBB]);
|
||||||
|
|
||||||
for (SparseBitVector<128>::iterator I = tmp.begin(); I != tmp.end(); ++I) {
|
for (SparseBitVector<128>::iterator I = tmp.begin(); I != tmp.end(); ++I) {
|
||||||
|
assert(rev_preorder.size() > *I && "Unknown block!");
|
||||||
|
|
||||||
MachineBasicBlock* SrcMBB = rev_preorder[*I];
|
MachineBasicBlock* SrcMBB = rev_preorder[*I];
|
||||||
|
|
||||||
for (MachineBasicBlock::succ_iterator SI = SrcMBB->succ_begin();
|
for (MachineBasicBlock::succ_iterator SI = SrcMBB->succ_begin(),
|
||||||
SI != SrcMBB->succ_end(); ++SI) {
|
SE = SrcMBB->succ_end(); SI != SE; ++SI) {
|
||||||
MachineBasicBlock* TgtMBB = *SI;
|
MachineBasicBlock* TgtMBB = *SI;
|
||||||
|
|
||||||
if (backedges.count(std::make_pair(SrcMBB, TgtMBB)) &&
|
if (backedges.count(std::make_pair(SrcMBB, TgtMBB)) &&
|
||||||
@ -44,7 +46,8 @@ void LazyLiveness::computeBackedgeChain(MachineFunction& mf,
|
|||||||
computeBackedgeChain(mf, TgtMBB);
|
computeBackedgeChain(mf, TgtMBB);
|
||||||
|
|
||||||
tv[MBB].set(preorder[TgtMBB]);
|
tv[MBB].set(preorder[TgtMBB]);
|
||||||
tv[MBB] |= tv[TgtMBB];
|
SparseBitVector<128> right = tv[TgtMBB];
|
||||||
|
tv[MBB] |= right;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,6 +63,12 @@ bool LazyLiveness::runOnMachineFunction(MachineFunction &mf) {
|
|||||||
backedge_target.clear();
|
backedge_target.clear();
|
||||||
calculated.clear();
|
calculated.clear();
|
||||||
preorder.clear();
|
preorder.clear();
|
||||||
|
rev_preorder.clear();
|
||||||
|
|
||||||
|
rv.resize(mf.size());
|
||||||
|
tv.resize(mf.size());
|
||||||
|
preorder.resize(mf.size());
|
||||||
|
rev_preorder.reserve(mf.size());
|
||||||
|
|
||||||
MRI = &mf.getRegInfo();
|
MRI = &mf.getRegInfo();
|
||||||
MachineDominatorTree& MDT = getAnalysis<MachineDominatorTree>();
|
MachineDominatorTree& MDT = getAnalysis<MachineDominatorTree>();
|
||||||
@ -106,8 +115,8 @@ bool LazyLiveness::runOnMachineFunction(MachineFunction &mf) {
|
|||||||
for (MachineBasicBlock::succ_iterator SI = (*POI)->succ_begin(),
|
for (MachineBasicBlock::succ_iterator SI = (*POI)->succ_begin(),
|
||||||
SE = (*POI)->succ_end(); SI != SE; ++SI)
|
SE = (*POI)->succ_end(); SI != SE; ++SI)
|
||||||
if (!backedges.count(std::make_pair(*POI, *SI)) && tv.count(*SI)) {
|
if (!backedges.count(std::make_pair(*POI, *SI)) && tv.count(*SI)) {
|
||||||
SparseBitVector<128>& PBV = tv[*POI];
|
SparseBitVector<128> right = tv[*SI];
|
||||||
PBV = tv[*SI];
|
tv[*POI] |= right;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (po_iterator<MachineBasicBlock*> POI = po_begin(&*mf.begin()),
|
for (po_iterator<MachineBasicBlock*> POI = po_begin(&*mf.begin()),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user