mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-25 16:24:23 +00:00
Change DSGraph stuff to use hash_(set|map) instead of std::(set|map)
This change provides a small (3%) but consistent speedup git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@5460 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -19,7 +19,7 @@ class DSGraph {
|
||||
|
||||
DSNodeHandle RetNode; // The node that gets returned...
|
||||
std::vector<DSNode*> Nodes;
|
||||
std::map<Value*, DSNodeHandle> ScalarMap;
|
||||
hash_map<Value*, DSNodeHandle> ScalarMap;
|
||||
|
||||
// FunctionCalls - This vector maintains a single entry for each call
|
||||
// instruction in the current graph. The first entry in the vector is the
|
||||
@ -49,7 +49,7 @@ public:
|
||||
// method.
|
||||
//
|
||||
DSGraph(const DSGraph &DSG);
|
||||
DSGraph(const DSGraph &DSG, std::map<const DSNode*, DSNodeHandle> &NodeMap);
|
||||
DSGraph(const DSGraph &DSG, hash_map<const DSNode*, DSNodeHandle> &NodeMap);
|
||||
~DSGraph();
|
||||
|
||||
bool hasFunction() const { return Func != 0; }
|
||||
@ -76,8 +76,8 @@ public:
|
||||
/// getScalarMap - Get a map that describes what the nodes the scalars in this
|
||||
/// function point to...
|
||||
///
|
||||
std::map<Value*, DSNodeHandle> &getScalarMap() { return ScalarMap; }
|
||||
const std::map<Value*, DSNodeHandle> &getScalarMap() const {return ScalarMap;}
|
||||
hash_map<Value*, DSNodeHandle> &getScalarMap() { return ScalarMap; }
|
||||
const hash_map<Value*, DSNodeHandle> &getScalarMap() const {return ScalarMap;}
|
||||
|
||||
/// getFunctionCalls - Return the list of call sites in the original local
|
||||
/// graph...
|
||||
@ -102,7 +102,7 @@ public:
|
||||
DSNodeHandle &getNodeForValue(Value *V) { return ScalarMap[V]; }
|
||||
|
||||
const DSNodeHandle &getNodeForValue(Value *V) const {
|
||||
std::map<Value*, DSNodeHandle>::const_iterator I = ScalarMap.find(V);
|
||||
hash_map<Value*, DSNodeHandle>::const_iterator I = ScalarMap.find(V);
|
||||
assert(I != ScalarMap.end() &&
|
||||
"Use non-const lookup function if node may not be in the map");
|
||||
return I->second;
|
||||
@ -168,8 +168,8 @@ public:
|
||||
// being cloned.
|
||||
//
|
||||
DSNodeHandle cloneInto(const DSGraph &G,
|
||||
std::map<Value*, DSNodeHandle> &OldValMap,
|
||||
std::map<const DSNode*, DSNodeHandle> &OldNodeMap,
|
||||
hash_map<Value*, DSNodeHandle> &OldValMap,
|
||||
hash_map<const DSNode*, DSNodeHandle> &OldNodeMap,
|
||||
unsigned CloneFlags = 0);
|
||||
|
||||
/// mergeInGraph - The method is used for merging graphs together. If the
|
||||
|
@ -218,13 +218,13 @@ public:
|
||||
|
||||
/// remapLinks - Change all of the Links in the current node according to the
|
||||
/// specified mapping.
|
||||
void remapLinks(std::map<const DSNode*, DSNodeHandle> &OldNodeMap);
|
||||
void remapLinks(hash_map<const DSNode*, DSNodeHandle> &OldNodeMap);
|
||||
|
||||
/// markReachableNodes - This method recursively traverses the specified
|
||||
/// DSNodes, marking any nodes which are reachable. All reachable nodes it
|
||||
/// adds to the set, which allows it to only traverse visited nodes once.
|
||||
///
|
||||
void markReachableNodes(std::set<DSNode*> &ReachableNodes);
|
||||
void markReachableNodes(hash_set<DSNode*> &ReachableNodes);
|
||||
|
||||
private:
|
||||
friend class DSNodeHandle;
|
||||
|
@ -8,10 +8,10 @@
|
||||
#define LLVM_ANALYSIS_DSSUPPORT_H
|
||||
|
||||
#include <vector>
|
||||
#include <map>
|
||||
#include <set>
|
||||
#include <functional>
|
||||
#include <string>
|
||||
#include "Support/HashExtras.h"
|
||||
#include "Support/hash_set"
|
||||
|
||||
class Function;
|
||||
class CallInst;
|
||||
@ -118,9 +118,9 @@ class DSCallSite {
|
||||
Function *ResolvingCaller; // See comments above
|
||||
|
||||
static void InitNH(DSNodeHandle &NH, const DSNodeHandle &Src,
|
||||
const std::map<const DSNode*, DSNode*> &NodeMap) {
|
||||
const hash_map<const DSNode*, DSNode*> &NodeMap) {
|
||||
if (DSNode *N = Src.getNode()) {
|
||||
std::map<const DSNode*, DSNode*>::const_iterator I = NodeMap.find(N);
|
||||
hash_map<const DSNode*, DSNode*>::const_iterator I = NodeMap.find(N);
|
||||
assert(I != NodeMap.end() && "Not not in mapping!");
|
||||
|
||||
NH.setOffset(Src.getOffset());
|
||||
@ -129,9 +129,9 @@ class DSCallSite {
|
||||
}
|
||||
|
||||
static void InitNH(DSNodeHandle &NH, const DSNodeHandle &Src,
|
||||
const std::map<const DSNode*, DSNodeHandle> &NodeMap) {
|
||||
const hash_map<const DSNode*, DSNodeHandle> &NodeMap) {
|
||||
if (DSNode *N = Src.getNode()) {
|
||||
std::map<const DSNode*, DSNodeHandle>::const_iterator I = NodeMap.find(N);
|
||||
hash_map<const DSNode*, DSNodeHandle>::const_iterator I = NodeMap.find(N);
|
||||
assert(I != NodeMap.end() && "Not not in mapping!");
|
||||
|
||||
NH.setOffset(Src.getOffset()+I->second.getOffset());
|
||||
@ -219,7 +219,7 @@ public:
|
||||
/// DSNodes, marking any nodes which are reachable. All reachable nodes it
|
||||
/// adds to the set, which allows it to only traverse visited nodes once.
|
||||
///
|
||||
void markReachableNodes(std::set<DSNode*> &Nodes);
|
||||
void markReachableNodes(hash_set<DSNode*> &Nodes);
|
||||
|
||||
bool operator<(const DSCallSite &CS) const {
|
||||
if (Callee < CS.Callee) return true; // This must sort by callee first!
|
||||
|
@ -8,7 +8,8 @@
|
||||
#define LLVM_ANALYSIS_DATA_STRUCTURE_H
|
||||
|
||||
#include "llvm/Pass.h"
|
||||
#include <set>
|
||||
#include "Support/HashExtras.h"
|
||||
#include "Support/hash_set"
|
||||
|
||||
class Type;
|
||||
class DSGraph;
|
||||
@ -32,7 +33,7 @@ namespace DataStructureAnalysis {
|
||||
//
|
||||
class LocalDataStructures : public Pass {
|
||||
// DSInfo, one graph for each function
|
||||
std::map<const Function*, DSGraph*> DSInfo;
|
||||
hash_map<const Function*, DSGraph*> DSInfo;
|
||||
DSGraph *GlobalsGraph;
|
||||
public:
|
||||
~LocalDataStructures() { releaseMemory(); }
|
||||
@ -45,7 +46,7 @@ public:
|
||||
|
||||
// getDSGraph - Return the data structure graph for the specified function.
|
||||
DSGraph &getDSGraph(const Function &F) const {
|
||||
std::map<const Function*, DSGraph*>::const_iterator I = DSInfo.find(&F);
|
||||
hash_map<const Function*, DSGraph*>::const_iterator I = DSInfo.find(&F);
|
||||
assert(I != DSInfo.end() && "Function not in module!");
|
||||
return *I->second;
|
||||
}
|
||||
@ -71,7 +72,7 @@ public:
|
||||
//
|
||||
class BUDataStructures : public Pass {
|
||||
// DSInfo, one graph for each function
|
||||
std::map<const Function*, DSGraph*> DSInfo;
|
||||
hash_map<const Function*, DSGraph*> DSInfo;
|
||||
DSGraph *GlobalsGraph;
|
||||
public:
|
||||
~BUDataStructures() { releaseMemory(); }
|
||||
@ -84,7 +85,7 @@ public:
|
||||
|
||||
// getDSGraph - Return the data structure graph for the specified function.
|
||||
DSGraph &getDSGraph(const Function &F) const {
|
||||
std::map<const Function*, DSGraph*>::const_iterator I = DSInfo.find(&F);
|
||||
hash_map<const Function*, DSGraph*>::const_iterator I = DSInfo.find(&F);
|
||||
assert(I != DSInfo.end() && "Function not in module!");
|
||||
return *I->second;
|
||||
}
|
||||
@ -110,10 +111,10 @@ private:
|
||||
// functions IN the SCC at all.
|
||||
//
|
||||
DSGraph &inlineNonSCCGraphs(Function &F,
|
||||
std::set<Function*> &SCCFunctions);
|
||||
hash_set<Function*> &SCCFunctions);
|
||||
|
||||
DSGraph &calculateSCCGraph(Function &F,
|
||||
std::set<Function*> &InlinedSCCFunctions);
|
||||
hash_set<Function*> &InlinedSCCFunctions);
|
||||
void calculateReachableGraphs(Function *F);
|
||||
|
||||
|
||||
@ -121,7 +122,7 @@ private:
|
||||
|
||||
unsigned calculateGraphs(Function *F, std::vector<Function*> &Stack,
|
||||
unsigned &NextID,
|
||||
std::map<Function*, unsigned> &ValMap);
|
||||
hash_map<Function*, unsigned> &ValMap);
|
||||
};
|
||||
|
||||
|
||||
@ -131,8 +132,8 @@ private:
|
||||
//
|
||||
class TDDataStructures : public Pass {
|
||||
// DSInfo, one graph for each function
|
||||
std::map<const Function*, DSGraph*> DSInfo;
|
||||
std::set<const Function*> GraphDone;
|
||||
hash_map<const Function*, DSGraph*> DSInfo;
|
||||
hash_set<const Function*> GraphDone;
|
||||
DSGraph *GlobalsGraph;
|
||||
public:
|
||||
~TDDataStructures() { releaseMemory(); }
|
||||
@ -145,7 +146,7 @@ public:
|
||||
|
||||
// getDSGraph - Return the data structure graph for the specified function.
|
||||
DSGraph &getDSGraph(const Function &F) const {
|
||||
std::map<const Function*, DSGraph*>::const_iterator I = DSInfo.find(&F);
|
||||
hash_map<const Function*, DSGraph*>::const_iterator I = DSInfo.find(&F);
|
||||
assert(I != DSInfo.end() && "Function not in module!");
|
||||
return *I->second;
|
||||
}
|
||||
|
Reference in New Issue
Block a user