diff --git a/lib/Transforms/Scalar/GVNPRE.cpp b/lib/Transforms/Scalar/GVNPRE.cpp index 007c6777195..96870e3fdf2 100644 --- a/lib/Transforms/Scalar/GVNPRE.cpp +++ b/lib/Transforms/Scalar/GVNPRE.cpp @@ -556,6 +556,10 @@ class ValueNumberedSet { BitVector numbers; public: ValueNumberedSet() { numbers.resize(1); } + ValueNumberedSet(const ValueNumberedSet& other) { + numbers = other.numbers; + contents = other.contents; + } typedef SmallPtrSet::iterator iterator; @@ -614,9 +618,9 @@ namespace { ValueTable VN; std::vector createdExpressions; - std::map availableOut; - std::map anticipatedIn; - std::map generatedPhis; + DenseMap availableOut; + DenseMap anticipatedIn; + DenseMap generatedPhis; // This transformation requires dominator postdominator info virtual void getAnalysisUsage(AnalysisUsage &AU) const { @@ -1175,7 +1179,7 @@ bool GVNPRE::elimination() { isa(BI) || isa(BI) || isa(BI) || isa(BI)) { - if (availableOut[BB].test(VN.lookup(BI)) && ! availableOut[BB].count(BI)) { + if (availableOut[BB].test(VN.lookup(BI)) && !availableOut[BB].count(BI)) { Value *leader = find_leader(availableOut[BB], VN.lookup(BI)); if (Instruction* Instr = dyn_cast(leader)) if (Instr->getParent() != 0 && Instr != BI) {