4 #include "DataflowCFG.h"
16 #include "tbb/concurrent_hash_map.h"
17 #include "tbb/atomic.h"
71 class NodeStateHashCompare
74 NodeStateHashCompare() {}
75 NodeStateHashCompare(
const NodeStateHashCompare & that) {}
77 ~NodeStateHashCompare(){}
85 static size_t hash(
const Analysis* k ) {
return (
size_t) k; }
92 typedef tbb::concurrent_hash_map <Analysis*, std::vector<Lattice*>, NodeStateHashCompare > LatticeMap;
94 typedef tbb::concurrent_hash_map <Analysis*, std::vector<NodeFact*>, NodeStateHashCompare > NodeFactMap;
95 typedef tbb::concurrent_hash_map <Analysis*, bool, NodeStateHashCompare > BoolMap;
97 typedef std::map<Analysis*, std::vector<Lattice*> > LatticeMap;
99 typedef std::map<Analysis*, std::vector<NodeFact*> > NodeFactMap;
100 typedef std::map<Analysis*, bool > BoolMap;
105 LatticeMap dfInfoAbove;
109 LatticeMap dfInfoBelow;
117 BoolMap initializedAnalyses;
172 void initialized(
Analysis* analysis);
175 bool isInitialized(
Analysis* analysis);
183 void setLattices(
const Analysis* analysis, std::vector<Lattice*>& lattices);
184 void setLatticeAbove(
const Analysis* analysis, std::vector<Lattice*>& lattices);
185 void setLatticeBelow(
const Analysis* analysis, std::vector<Lattice*>& lattices);
188 Lattice* getLatticeAbove(
const Analysis* analysis,
int latticeName)
const;
190 Lattice* getLatticeBelow(
const Analysis* analysis,
int latticeName)
const;
194 static const std::vector<Lattice*>& getLatticeAbove(
const Analysis* analysis,
SgNode* n,
unsigned int index ) ;
198 static const std::vector<Lattice*>& getLatticeBelow(
const Analysis* analysis,
SgNode* n,
unsigned int index) ;
203 const std::vector<Lattice*>& getLatticeAbove(
const Analysis* analysis)
const;
206 const std::vector<Lattice*>& getLatticeBelow(
const Analysis* analysis)
const;
210 std::vector<Lattice*>& getLatticeAboveMod(
const Analysis* analysis);
213 std::vector<Lattice*>& getLatticeBelowMod(
const Analysis* analysis);
216 void deleteLatticeAbove(
const Analysis* analysis);
219 void deleteLatticeBelow(
const Analysis* analysis);
222 static bool eqLattices(
const std::vector<Lattice*>& latticesA,
223 const std::vector<Lattice*>& latticesB);
232 void unionLattices(std::set<Analysis*>& unionSet,
const Analysis* master);
243 Lattice* getLattice_ex(
const LatticeMap& dfMap,
244 const Analysis* analysis,
int latticeName)
const;
260 void setFacts(
const Analysis* analysis,
const std::vector<NodeFact*>& newFacts);
268 const std::vector<NodeFact*>& getFacts(
const Analysis* analysis)
const;
273 std::vector<NodeFact*>& getFactsMod(
const Analysis* analysis);
280 void deleteFacts(
const Analysis* analysis);
283 void deleteState(
const Analysis* analysis);
287 static std::map<DataflowNode, std::vector<NodeState*> > nodeStateMap;
288 static bool nodeStateMapInit;
302 static const std::vector<NodeState*> getNodeStates(
const DataflowNode& n);
309 static void initNodeStateMap(
bool (*filter) (
CFGNode cfgn));
350 static void copyLattices(std::vector<Lattice*>& dfInfoX,
const std::vector<Lattice*>& dfInfoY);
355 std::string str(
Analysis* analysis, std::string indent=
"")
const;
A node in the control flow graph.
This class represents the base class for all IR nodes within Sage III.
Hash hash(const std::vector< Ptr > &)
Hash zero or more expressions.