diff options
Diffstat (limited to 'llvm/lib/Bitcode')
| -rw-r--r-- | llvm/lib/Bitcode/Reader/BitcodeReader.cpp | 9 | ||||
| -rw-r--r-- | llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 9 | 
2 files changed, 17 insertions, 1 deletions
| diff --git a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp index 61e0ab98989..c1cfa975a71 100644 --- a/llvm/lib/Bitcode/Reader/BitcodeReader.cpp +++ b/llvm/lib/Bitcode/Reader/BitcodeReader.cpp @@ -1216,6 +1216,15 @@ bool BitcodeReader::ParseFunctionBody(Function *F) {        CurBB = FunctionBBs[0];        continue; +    case bitc::FUNC_CODE_INST_BB_UNWINDDEST:   // BB_UNWINDDEST: [bb#] +      if (CurBB->getUnwindDest()) +        return Error("Only permit one BB_UNWINDDEST per BB"); +      if (Record.size() != 1) +        return Error("Invalid BB_UNWINDDEST record"); + +      CurBB->setUnwindDest(getBasicBlock(Record[0])); +      continue; +            case bitc::FUNC_CODE_INST_BINOP: {    // BINOP: [opval, ty, opval, opcode]        unsigned OpNum = 0;        Value *LHS, *RHS; diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index 5de38b82156..67b13e30bad 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -969,13 +969,20 @@ static void WriteFunction(const Function &F, ValueEnumerator &VE,    unsigned InstID = CstEnd;    // Finally, emit all the instructions, in order. -  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) +  for (Function::const_iterator BB = F.begin(), E = F.end(); BB != E; ++BB) { +    if (const BasicBlock *unwindDest = BB->getUnwindDest()) { +      Vals.push_back(VE.getValueID(unwindDest)); +      Stream.EmitRecord(bitc::FUNC_CODE_INST_BB_UNWINDDEST, Vals); +      Vals.clear(); +    }    +      for (BasicBlock::const_iterator I = BB->begin(), E = BB->end();           I != E; ++I) {        WriteInstruction(*I, InstID, VE, Stream, Vals);        if (I->getType() != Type::VoidTy)          ++InstID;      } +  }    // Emit names for all the instructions etc.    WriteValueSymbolTable(F.getValueSymbolTable(), VE, Stream); | 

