diff options
Diffstat (limited to 'llvm/lib/Bitcode/Writer/BitcodeWriter.cpp')
-rw-r--r-- | llvm/lib/Bitcode/Writer/BitcodeWriter.cpp | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp index 31ae0141ef8..20e31d1a102 100644 --- a/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp +++ b/llvm/lib/Bitcode/Writer/BitcodeWriter.cpp @@ -1851,6 +1851,64 @@ static void WriteInstruction(const Instruction &I, unsigned InstID, Code = bitc::FUNC_CODE_INST_RESUME; PushValueAndType(I.getOperand(0), InstID, Vals, VE); break; + case Instruction::CleanupRet: { + Code = bitc::FUNC_CODE_INST_CLEANUPRET; + const auto &CRI = cast<CleanupReturnInst>(I); + Vals.push_back(CRI.hasReturnValue()); + Vals.push_back(CRI.hasUnwindDest()); + if (CRI.hasReturnValue()) + PushValueAndType(CRI.getReturnValue(), InstID, Vals, VE); + if (CRI.hasUnwindDest()) + Vals.push_back(VE.getValueID(CRI.getUnwindDest())); + break; + } + case Instruction::CatchRet: { + Code = bitc::FUNC_CODE_INST_CATCHRET; + const auto &CRI = cast<CatchReturnInst>(I); + Vals.push_back(VE.getValueID(CRI.getSuccessor())); + break; + } + case Instruction::CatchPad: { + Code = bitc::FUNC_CODE_INST_CATCHPAD; + const auto &CPI = cast<CatchPadInst>(I); + Vals.push_back(VE.getTypeID(CPI.getType())); + Vals.push_back(VE.getValueID(CPI.getNormalDest())); + Vals.push_back(VE.getValueID(CPI.getUnwindDest())); + unsigned NumArgOperands = CPI.getNumArgOperands(); + Vals.push_back(NumArgOperands); + for (unsigned Op = 0; Op != NumArgOperands; ++Op) + PushValueAndType(CPI.getArgOperand(Op), InstID, Vals, VE); + break; + } + case Instruction::TerminatePad: { + Code = bitc::FUNC_CODE_INST_TERMINATEPAD; + const auto &TPI = cast<TerminatePadInst>(I); + Vals.push_back(TPI.hasUnwindDest()); + if (TPI.hasUnwindDest()) + Vals.push_back(VE.getValueID(TPI.getUnwindDest())); + unsigned NumArgOperands = TPI.getNumArgOperands(); + Vals.push_back(NumArgOperands); + for (unsigned Op = 0; Op != NumArgOperands; ++Op) + PushValueAndType(TPI.getArgOperand(Op), InstID, Vals, VE); + break; + } + case Instruction::CleanupPad: { + Code = bitc::FUNC_CODE_INST_CLEANUPPAD; + const auto &CPI = cast<CleanupPadInst>(I); + Vals.push_back(VE.getTypeID(CPI.getType())); + unsigned NumOperands = CPI.getNumOperands(); + Vals.push_back(NumOperands); + for (unsigned Op = 0; Op != NumOperands; ++Op) + PushValueAndType(CPI.getOperand(Op), InstID, Vals, VE); + break; + } + case Instruction::CatchEndPad: { + Code = bitc::FUNC_CODE_INST_CATCHENDPAD; + const auto &CEPI = cast<CatchEndPadInst>(I); + if (CEPI.hasUnwindDest()) + Vals.push_back(VE.getValueID(CEPI.getUnwindDest())); + break; + } case Instruction::Unreachable: Code = bitc::FUNC_CODE_INST_UNREACHABLE; AbbrevToUse = FUNCTION_INST_UNREACHABLE_ABBREV; |