Changes in directory llvm/lib/Transforms/Scalar:
GVNPRE.cpp updated: 1.39 -> 1.40 --- Log message: Be careful to erase values from all of the appropriate sets when they're not needed anymore. This fixes a few more memory-related issues. --- Diffs of the changes: (+14 -2) GVNPRE.cpp | 16 ++++++++++++++-- 1 files changed, 14 insertions(+), 2 deletions(-) Index: llvm/lib/Transforms/Scalar/GVNPRE.cpp diff -u llvm/lib/Transforms/Scalar/GVNPRE.cpp:1.39 llvm/lib/Transforms/Scalar/GVNPRE.cpp:1.40 --- llvm/lib/Transforms/Scalar/GVNPRE.cpp:1.39 Mon Jun 18 23:32:55 2007 +++ llvm/lib/Transforms/Scalar/GVNPRE.cpp Tue Jun 19 00:37:32 2007 @@ -101,6 +101,7 @@ std::set<Value*>& getMaximalValues() { return maximalValues; } Expression create_expression(BinaryOperator* BO); Expression create_expression(CmpInst* C); + void erase(Value* v); }; } @@ -302,6 +303,15 @@ nextValueNumber = 1; } +void ValueTable::erase(Value* V) { + maximalValues.erase(V); + valueNumbering.erase(V); + if (BinaryOperator* BO = dyn_cast<BinaryOperator>(V)) + maximalExpressions.erase(create_expression(BO)); + else if (CmpInst* C = dyn_cast<CmpInst>(V)) + maximalExpressions.erase(create_expression(C)); +} + namespace { class VISIBILITY_HIDDEN GVNPRE : public FunctionPass { @@ -419,7 +429,7 @@ if (newOp1 != BO->getOperand(0) || newOp2 != BO->getOperand(1)) { Instruction* newVal = BinaryOperator::create(BO->getOpcode(), newOp1, newOp2, - BO->getName()+".gvnpre"); + BO->getName()+".expr"); uint32_t v = VN.lookup_or_add(newVal); @@ -428,6 +438,7 @@ createdExpressions.push_back(newVal); return newVal; } else { + VN.erase(newVal); delete newVal; return leader; } @@ -462,7 +473,7 @@ Instruction* newVal = CmpInst::create(C->getOpcode(), C->getPredicate(), newOp1, newOp2, - C->getName()+".gvnpre"); + C->getName()+".expr"); uint32_t v = VN.lookup_or_add(newVal); @@ -471,6 +482,7 @@ createdExpressions.push_back(newVal); return newVal; } else { + VN.erase(newVal); delete newVal; return leader; } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits