mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-14 00:31:06 +00:00
With the last change, we no longer need both directions of mapping from
BBNumbers. Instead of using a bi-directional mapping, just use a single densemap. This speeds up mem2reg on 176.gcc by 8%, from 1.3489 to 1.2485s. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33940 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
9133fe2895
commit
d3874049a5
@ -23,11 +23,11 @@
|
||||
#include "llvm/Instructions.h"
|
||||
#include "llvm/Analysis/Dominators.h"
|
||||
#include "llvm/Analysis/AliasSetTracker.h"
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/ADT/SmallPtrSet.h"
|
||||
#include "llvm/ADT/SmallVector.h"
|
||||
#include "llvm/ADT/StringExtras.h"
|
||||
#include "llvm/Support/CFG.h"
|
||||
#include "llvm/Support/StableBasicBlockNumbering.h"
|
||||
#include "llvm/Support/Compiler.h"
|
||||
#include <algorithm>
|
||||
using namespace llvm;
|
||||
@ -88,7 +88,7 @@ namespace {
|
||||
|
||||
/// BBNumbers - Contains a stable numbering of basic blocks to avoid
|
||||
/// non-determinstic behavior.
|
||||
StableBasicBlockNumbering BBNumbers;
|
||||
DenseMap<BasicBlock*, unsigned> BBNumbers;
|
||||
|
||||
public:
|
||||
PromoteMem2Reg(const std::vector<AllocaInst*> &A,
|
||||
@ -265,7 +265,11 @@ void PromoteMem2Reg::run() {
|
||||
|
||||
// If we haven't computed a numbering for the BB's in the function, do so
|
||||
// now.
|
||||
BBNumbers.compute(F);
|
||||
if (BBNumbers.empty()) {
|
||||
unsigned ID = 0;
|
||||
for (Function::iterator I = F.begin(), E = F.end(); I != E; ++I)
|
||||
BBNumbers[I] = ID++;
|
||||
}
|
||||
|
||||
// Compute the locations where PhiNodes need to be inserted. Look at the
|
||||
// dominance frontier of EACH basic-block we have a write in.
|
||||
@ -289,7 +293,7 @@ void PromoteMem2Reg::run() {
|
||||
// processing blocks in order of the occurance in the function.
|
||||
for (DominanceFrontier::DomSetType::const_iterator P = S.begin(),
|
||||
PE = S.end(); P != PE; ++P)
|
||||
DFBlocks.push_back(std::make_pair(BBNumbers.getNumber(*P), *P));
|
||||
DFBlocks.push_back(std::make_pair(BBNumbers[*P], *P));
|
||||
|
||||
// Sort by which the block ordering in the function.
|
||||
std::sort(DFBlocks.begin(), DFBlocks.end());
|
||||
|
Loading…
x
Reference in New Issue
Block a user