For now disable MDNode uniquing. This fixes llvm-gcc bootstrap failure on certain...
authorDevang Patel <dpatel@apple.com>
Tue, 1 Sep 2009 23:56:42 +0000 (23:56 +0000)
committerDevang Patel <dpatel@apple.com>
Tue, 1 Sep 2009 23:56:42 +0000 (23:56 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80738 91177308-0d34-0410-b5e6-96231b3b80d8

lib/VMCore/LLVMContext.cpp
lib/VMCore/LLVMContextImpl.h
lib/VMCore/Metadata.cpp

index 95ceeaee813f5aa2878aaf99862f89f6ed972d74..1803a9a66664c511c6db2ce272fbd1066a41df64 100644 (file)
@@ -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<MDNode>(I->second);
+    for (SmallPtrSet<const MDNode *, 8>::iterator
+           I = pImpl->MDNodes.begin(),
+           E = pImpl->MDNodes.end(); I != E; ++I) {
+      const MDNode *N = cast<MDNode>(*I);
       if (N->use_empty()) 
         DeadMDNodes.push_back(N);
     }
index 2faf6ac6e38f8a1a97c4d610ec91fc5952d03688..eeafeafd9ee5a44880afbe4f9ca04b9439713ded 100644 (file)
@@ -108,10 +108,7 @@ public:
   
   ValueMap<char, Type, ConstantAggregateZero> AggZeroConstants;
 
-  typedef ValueMap<std::vector<Value*>, Type, MDNode, true /*largekey*/> 
-  MDNodeMapTy;
-
-  MDNodeMapTy MDNodes;
+  SmallPtrSet<const MDNode *, 8> MDNodes;
   
   typedef ValueMap<std::vector<Constant*>, ArrayType, 
     ConstantArray, true /*largekey*/> ArrayConstantsTy;
index 60ec1c5c6cab437dc51250e0911036d8ac198b05..bb8021485f60f889745fbbc18eb185c0942ea168 100644 (file)
@@ -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<Value*> 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<Value*> getValType(MDNode *N) {
-  std::vector<Value*> 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();
 }