fix encoding of BB names in the symtab
authorChris Lattner <sabre@nondot.org>
Thu, 3 May 2007 22:18:21 +0000 (22:18 +0000)
committerChris Lattner <sabre@nondot.org>
Thu, 3 May 2007 22:18:21 +0000 (22:18 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36704 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Bitcode/Reader/BitcodeReader.cpp
lib/Bitcode/Writer/BitcodeWriter.cpp
lib/Bitcode/Writer/ValueEnumerator.cpp

index 7de1662b38d136400485c7f6639335de021b6393..1ab9f54d5bf2bd1cc09555a762be2d75250f3fb9 100644 (file)
@@ -411,6 +411,16 @@ bool BitcodeReader::ParseValueSymbolTable() {
       V->setName(&ValueName[0], ValueName.size());
       ValueName.clear();
       break;
+    case bitc::VST_CODE_BBENTRY:
+      if (ConvertToString(Record, 1, ValueName))
+        return Error("Invalid VST_BBENTRY record");
+      BasicBlock *BB = getBasicBlock(Record[0]);
+      if (BB == 0)
+        return Error("Invalid BB ID in VST_BBENTRY record");
+      
+      BB->setName(&ValueName[0], ValueName.size());
+      ValueName.clear();
+      break;
     }
   }
 }
index fbad7ff1255999da659fdbbe335c19d832a57310..68f0a0d163709ade4ca4e88c636c98d31ca427f9 100644 (file)
@@ -669,7 +669,6 @@ static void WriteInstruction(const Instruction &I, ValueEnumerator &VE,
     }
     break;
   }
-    
   case Instruction::VAArg:
     Code = bitc::FUNC_CODE_INST_VAARG;
     Vals.push_back(VE.getTypeID(I.getOperand(0)->getType()));   // valistty
@@ -697,16 +696,23 @@ static void WriteValueSymbolTable(const ValueSymbolTable &VST,
        SI != SE; ++SI) {
     unsigned AbbrevToUse = 0;
     
-    // VST_ENTRY: [valueid, namelen, namechar x N]
-    NameVals.push_back(VE.getValueID(SI->getValue()));
+    // VST_ENTRY:   [valueid, namelen, namechar x N]
+    // VST_BBENTRY: [bbid, namelen, namechar x N]
+    unsigned Code;
+    if (isa<BasicBlock>(SI->getValue())) {
+      Code = bitc::VST_CODE_BBENTRY;
+    } else {
+      Code = bitc::VST_CODE_ENTRY;
+    }
     
+    NameVals.push_back(VE.getValueID(SI->getValue()));
     NameVals.push_back(SI->getKeyLength());
     for (const char *P = SI->getKeyData(),
          *E = SI->getKeyData()+SI->getKeyLength(); P != E; ++P)
       NameVals.push_back((unsigned char)*P);
     
     // Emit the finished record.
-    Stream.EmitRecord(bitc::VST_CODE_ENTRY, NameVals, AbbrevToUse);
+    Stream.EmitRecord(Code, NameVals, AbbrevToUse);
     NameVals.clear();
   }
   Stream.ExitBlock();
index fab1d9c684db6167dbb25423cac4b216cf7b09d8..4d3f0fd792a2a9c565a22f7991be95871e336826 100644 (file)
@@ -180,8 +180,8 @@ void ValueEnumerator::incorporateFunction(const Function &F) {
             isa<InlineAsm>(*OI))
           EnumerateValue(*OI);
       }
-    ValueMap[BB] = BasicBlocks.size();
     BasicBlocks.push_back(BB);
+    ValueMap[BB] = BasicBlocks.size();
   }
   
   FirstInstID = Values.size();