From e4acff8720b0a92d93613fef1fb47ed701ba71c5 Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Tue, 22 Jun 2010 06:14:09 +0000 Subject: [PATCH] Revert 106528. It is causing self host failures. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106529 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/Utils/ValueMapper.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/Transforms/Utils/ValueMapper.cpp b/lib/Transforms/Utils/ValueMapper.cpp index 16ab91000db..87ce631ca62 100644 --- a/lib/Transforms/Utils/ValueMapper.cpp +++ b/lib/Transforms/Utils/ValueMapper.cpp @@ -21,15 +21,17 @@ using namespace llvm; Value *llvm::MapValue(const Value *V, ValueToValueMapTy &VM) { - ValueToValueMapTy::iterator VMI = VM.find(V); - if (VMI != VM.end()) - return VMI->second; + Value *&VMSlot = VM[V]; + if (VMSlot) return VMSlot; // Does it exist in the map yet? + // NOTE: VMSlot can be invalidated by any reference to VM, which can grow the + // DenseMap. This includes any recursive calls to MapValue. + // Global values and non-function-local metadata do not need to be seeded into // the ValueMap if they are using the identity mapping. if (isa(V) || isa(V) || isa(V) || (isa(V) && !cast(V)->isFunctionLocal())) - return VM[V] = const_cast(V); + return VMSlot = const_cast(V); if (const MDNode *MD = dyn_cast(V)) { SmallVector Elts; @@ -44,7 +46,7 @@ Value *llvm::MapValue(const Value *V, ValueToValueMapTy &VM) { if (isa(C) || isa(C) || isa(C) || isa(C) || isa(C) || isa(C)) - return VM[V] = C; // Primitive constants map directly + return VMSlot = C; // Primitive constants map directly if (ConstantArray *CA = dyn_cast(C)) { for (User::op_iterator b = CA->op_begin(), i = b, e = CA->op_end(); -- 2.11.0