From: Devang Patel Date: Tue, 1 Sep 2009 23:56:42 +0000 (+0000) Subject: For now disable MDNode uniquing. This fixes llvm-gcc bootstrap failure on certain... X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=3a29d2d3279d53b757c31b4cc72f0b3f7082d4c2;p=oota-llvm.git For now disable MDNode uniquing. This fixes llvm-gcc bootstrap failure on certain Mac OS X 10.5. I am working on a proper fix. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80738 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/VMCore/LLVMContext.cpp b/lib/VMCore/LLVMContext.cpp index 95ceeaee813..1803a9a6666 100644 --- a/lib/VMCore/LLVMContext.cpp +++ b/lib/VMCore/LLVMContext.cpp @@ -48,10 +48,10 @@ bool LLVMContext::RemoveDeadMetadata() { bool Changed = false; while (1) { - for (LLVMContextImpl::MDNodeMapTy::MapTy::iterator - I = pImpl->MDNodes.map_begin(), - E = pImpl->MDNodes.map_end(); I != E; ++I) { - const MDNode *N = cast(I->second); + for (SmallPtrSet::iterator + I = pImpl->MDNodes.begin(), + E = pImpl->MDNodes.end(); I != E; ++I) { + const MDNode *N = cast(*I); if (N->use_empty()) DeadMDNodes.push_back(N); } diff --git a/lib/VMCore/LLVMContextImpl.h b/lib/VMCore/LLVMContextImpl.h index 2faf6ac6e38..eeafeafd9ee 100644 --- a/lib/VMCore/LLVMContextImpl.h +++ b/lib/VMCore/LLVMContextImpl.h @@ -108,10 +108,7 @@ public: ValueMap AggZeroConstants; - typedef ValueMap, Type, MDNode, true /*largekey*/> - MDNodeMapTy; - - MDNodeMapTy MDNodes; + SmallPtrSet MDNodes; typedef ValueMap, ArrayType, ConstantArray, true /*largekey*/> ArrayConstantsTy; diff --git a/lib/VMCore/Metadata.cpp b/lib/VMCore/Metadata.cpp index 60ec1c5c6ca..bb8021485f6 100644 --- a/lib/VMCore/Metadata.cpp +++ b/lib/VMCore/Metadata.cpp @@ -77,13 +77,13 @@ MDNode::MDNode(LLVMContext &C, Value*const* Vals, unsigned NumVals) } MDNode *MDNode::get(LLVMContext &Context, Value*const* Vals, unsigned NumVals) { - LLVMContextImpl *pImpl = Context.pImpl; std::vector V; V.reserve(NumVals); for (unsigned i = 0; i < NumVals; ++i) V.push_back(Vals[i]); - return pImpl->MDNodes.getOrCreate(Type::getMetadataTy(Context), V); + // FIXME : Avoid creating duplicate node. + return new MDNode(Context, &V[0], V.size()); } /// dropAllReferences - Remove all uses and clear node vector. @@ -92,16 +92,8 @@ void MDNode::dropAllReferences() { Node.clear(); } -static std::vector getValType(MDNode *N) { - std::vector Elements; - Elements.reserve(N->getNumElements()); - for (unsigned i = 0, e = N->getNumElements(); i != e; ++i) - Elements.push_back(N->getElement(i)); - return Elements; -} - MDNode::~MDNode() { - getType()->getContext().pImpl->MDNodes.remove(this); + getType()->getContext().pImpl->MDNodes.erase(this); dropAllReferences(); }