///
class SCCPSolver : public InstVisitor<SCCPSolver> {
SmallSet<BasicBlock*, 16> BBExecutable;// The basic blocks that are executable
- std::map<Value*, LatticeVal> ValueState; // The state each value is in.
+ DenseMap<Value*, LatticeVal> ValueState; // The state each value is in.
/// GlobalValue - If we are tracking any values for the contents of a global
/// variable, we keep a mapping from the constant accessor to the element of
/// getValueMapping - Once we have solved for constants, return the mapping of
/// LLVM values to LatticeVals.
- std::map<Value*, LatticeVal> &getValueMapping() {
+ DenseMap<Value*, LatticeVal> &getValueMapping() {
return ValueState;
}
// Instruction object, then use this accessor to get its value from the map.
//
inline LatticeVal &getValueState(Value *V) {
- std::map<Value*, LatticeVal>::iterator I = ValueState.find(V);
+ DenseMap<Value*, LatticeVal>::iterator I = ValueState.find(V);
if (I != ValueState.end()) return I->second; // Common case, in the map
if (Constant *C = dyn_cast<Constant>(V)) {
//
SmallSet<BasicBlock*, 16> &ExecutableBBs = Solver.getExecutableBlocks();
SmallVector<Instruction*, 32> Insts;
- std::map<Value*, LatticeVal> &Values = Solver.getValueMapping();
+ DenseMap<Value*, LatticeVal> &Values = Solver.getValueMapping();
for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
if (!ExecutableBBs.count(BB)) {
SmallSet<BasicBlock*, 16> &ExecutableBBs = Solver.getExecutableBlocks();
SmallVector<Instruction*, 32> Insts;
SmallVector<BasicBlock*, 32> BlocksToErase;
- std::map<Value*, LatticeVal> &Values = Solver.getValueMapping();
+ DenseMap<Value*, LatticeVal> &Values = Solver.getValueMapping();
for (Module::iterator F = M.begin(), E = M.end(); F != E; ++F) {
for (Function::arg_iterator AI = F->arg_begin(), E = F->arg_end();