now that instruction metadata is only parsed in one place, eliminate the
authorChris Lattner <sabre@nondot.org>
Wed, 30 Dec 2009 05:48:36 +0000 (05:48 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 30 Dec 2009 05:48:36 +0000 (05:48 +0000)
parser-global MDsOnInst vector and make ParseInstructionMetadata return
its result by-ref through an argument like the entire rest of the parser.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92302 91177308-0d34-0410-b5e6-96231b3b80d8

lib/AsmParser/LLParser.cpp
lib/AsmParser/LLParser.h

index 967842ad1e96767d946becf786d0a4d6b24bec3c..c6eeb56e14c06c82486d45b8109af1f3cb775d65 100644 (file)
@@ -1065,7 +1065,9 @@ bool LLParser::ParseOptionalCallingConv(CallingConv::ID &CC) {
 
 /// ParseInstructionMetadata
 ///   ::= !dbg !42 (',' !dbg !57)*
-bool LLParser::ParseInstructionMetadata() {
+bool LLParser::
+ParseInstructionMetadata(SmallVectorImpl<std::pair<unsigned,
+                                                 MDNode *> > &Result){
   do {
     if (Lex.getKind() != lltok::MetadataVar)
       return TokError("expected metadata after comma");
@@ -1079,7 +1081,7 @@ bool LLParser::ParseInstructionMetadata() {
       return true;
 
     unsigned MDK = M->getMDKindID(Name.c_str());
-    MDsOnInst.push_back(std::make_pair(MDK, Node));
+    Result.push_back(std::make_pair(MDK, Node));
 
     // If this is the end of the list, we're done.
   } while (EatIfPresent(lltok::comma));
@@ -2794,6 +2796,7 @@ bool LLParser::ParseBasicBlock(PerFunctionState &PFS) {
 
   // Parse the instructions in this block until we get a terminator.
   Instruction *Inst;
+  SmallVector<std::pair<unsigned, MDNode *>, 4> MetadataOnInst;
   do {
     // This instruction may have three possibilities for a name: a) none
     // specified, b) name specified "%foo =", c) number specified: "%4 =".
@@ -2822,22 +2825,21 @@ bool LLParser::ParseBasicBlock(PerFunctionState &PFS) {
       // With a normal result, we check to see if the instruction is followed by
       // a comma and metadata.
       if (EatIfPresent(lltok::comma))
-        if (ParseInstructionMetadata())
+        if (ParseInstructionMetadata(MetadataOnInst))
           return true;
       break;
     case InstExtraComma:
       // If the instruction parser ate an extra comma at the end of it, it
       // *must* be followed by metadata.
-      if (ParseInstructionMetadata())
+      if (ParseInstructionMetadata(MetadataOnInst))
         return true;
       break;        
     }
 
     // Set metadata attached with this instruction.
-    for (SmallVector<std::pair<unsigned, MDNode *>, 2>::iterator
-           MDI = MDsOnInst.begin(), MDE = MDsOnInst.end(); MDI != MDE; ++MDI)
-      Inst->setMetadata(MDI->first, MDI->second);
-    MDsOnInst.clear();
+    for (unsigned i = 0, e = MetadataOnInst.size(); i != e; ++i)
+      Inst->setMetadata(MetadataOnInst[i].first, MetadataOnInst[i].second);
+    MetadataOnInst.clear();
 
     BB->getInstList().push_back(Inst);
 
index f22c49b63053bbda0d94cc294e00ee06e034eaf9..803832f93d59619b5e1301e1a2fc63c0b405f5b7 100644 (file)
@@ -83,7 +83,6 @@ namespace llvm {
     std::vector<PATypeHolder> NumberedTypes;
     std::vector<TrackingVH<MDNode> > NumberedMetadata;
     std::map<unsigned, std::pair<TrackingVH<MDNode>, LocTy> > ForwardRefMDNodes;
-    SmallVector<std::pair<unsigned, MDNode *>, 2> MDsOnInst;
     struct UpRefRecord {
       /// Loc - This is the location of the upref.
       LocTy Loc;
@@ -171,7 +170,8 @@ namespace llvm {
     bool ParseOptionalVisibility(unsigned &Visibility);
     bool ParseOptionalCallingConv(CallingConv::ID &CC);
     bool ParseOptionalAlignment(unsigned &Alignment);
-    bool ParseInstructionMetadata();
+    bool ParseInstructionMetadata(SmallVectorImpl<std::pair<unsigned,
+                                                            MDNode *> > &);
     bool ParseOptionalCommaAlign(unsigned &Alignment, bool &AteExtraComma);
     bool ParseIndexList(SmallVectorImpl<unsigned> &Indices,bool &AteExtraComma);
     bool ParseIndexList(SmallVectorImpl<unsigned> &Indices) {