[llvm-commits] [llvm] r92293 - in /llvm/trunk/lib/AsmParser: LLParser.cpp LLParser.h

Chris Lattner sabre at nondot.org
Tue Dec 29 20:51:59 PST 2009


Author: lattner
Date: Tue Dec 29 22:51:58 2009
New Revision: 92293

URL: http://llvm.org/viewvc/llvm-project?rev=92293&view=rev
Log:
rename MetadataCache -> NumberedMetadata to follow the convention
used by other things.  Convert it to a vector since it is a dense 
numbering.

Modified:
    llvm/trunk/lib/AsmParser/LLParser.cpp
    llvm/trunk/lib/AsmParser/LLParser.h

Modified: llvm/trunk/lib/AsmParser/LLParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.cpp?rev=92293&r1=92292&r2=92293&view=diff

==============================================================================
--- llvm/trunk/lib/AsmParser/LLParser.cpp (original)
+++ llvm/trunk/lib/AsmParser/LLParser.cpp Tue Dec 29 22:51:58 2009
@@ -478,17 +478,8 @@
   if (ParseUInt32(MID)) return true;
 
   // Check existing MDNode.
-  std::map<unsigned, TrackingVH<MDNode> >::iterator I = MetadataCache.find(MID);
-  if (I != MetadataCache.end()) {
-    Result = I->second;
-    return false;
-  }
-
-  // Check known forward references.
-  std::map<unsigned, std::pair<TrackingVH<MDNode>, LocTy> >::iterator
-    FI = ForwardRefMDNodes.find(MID);
-  if (FI != ForwardRefMDNodes.end()) {
-    Result = FI->second.first;
+  if (MID < NumberedMetadata.size() && NumberedMetadata[MID] != 0) {
+    Result = NumberedMetadata[MID];
     return false;
   }
 
@@ -499,6 +490,10 @@
   Value *V = MDString::get(Context, FwdRefName);
   MDNode *FwdNode = MDNode::get(Context, &V, 1);
   ForwardRefMDNodes[MID] = std::make_pair(FwdNode, Lex.getLoc());
+  
+  if (NumberedMetadata.size() <= MID)
+    NumberedMetadata.resize(MID+1);
+  NumberedMetadata[MID] = FwdNode;
   Result = FwdNode;
   return false;
 }
@@ -553,16 +548,23 @@
       ParseToken(lltok::rbrace, "expected end of metadata node"))
     return true;
 
-  if (MetadataCache.count(MetadataID))
-    return TokError("Metadata id is already used");
-  
   MDNode *Init = MDNode::get(Context, Elts.data(), Elts.size());
-  MetadataCache[MetadataID] = Init;
+  
+  // See if this was forward referenced, if so, handle it.
   std::map<unsigned, std::pair<TrackingVH<MDNode>, LocTy> >::iterator
     FI = ForwardRefMDNodes.find(MetadataID);
   if (FI != ForwardRefMDNodes.end()) {
     FI->second.first->replaceAllUsesWith(Init);
     ForwardRefMDNodes.erase(FI);
+    
+    assert(NumberedMetadata[MetadataID] == Init && "Tracking VH didn't work");
+  } else {
+    if (MetadataID >= NumberedMetadata.size())
+      NumberedMetadata.resize(MetadataID+1);
+
+    if (NumberedMetadata[MetadataID] != 0)
+      return TokError("Metadata id is already used");
+    NumberedMetadata[MetadataID] = Init;
   }
 
   return false;

Modified: llvm/trunk/lib/AsmParser/LLParser.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/AsmParser/LLParser.h?rev=92293&r1=92292&r2=92293&view=diff

==============================================================================
--- llvm/trunk/lib/AsmParser/LLParser.h (original)
+++ llvm/trunk/lib/AsmParser/LLParser.h Tue Dec 29 22:51:58 2009
@@ -81,8 +81,7 @@
     std::map<std::string, std::pair<PATypeHolder, LocTy> > ForwardRefTypes;
     std::map<unsigned, std::pair<PATypeHolder, LocTy> > ForwardRefTypeIDs;
     std::vector<PATypeHolder> NumberedTypes;
-    /// MetadataCache - This map keeps track of parsed metadata constants.
-    std::map<unsigned, TrackingVH<MDNode> > MetadataCache;
+    std::vector<TrackingVH<MDNode> > NumberedMetadata;
     std::map<unsigned, std::pair<TrackingVH<MDNode>, LocTy> > ForwardRefMDNodes;
     SmallVector<std::pair<unsigned, MDNode *>, 2> MDsOnInst;
     struct UpRefRecord {





More information about the llvm-commits mailing list