LLVM API Documentation
#include "llvm/Bitcode/ReaderWriter.h"#include "llvm/Bitcode/BitstreamWriter.h"#include "llvm/Bitcode/LLVMBitCodes.h"#include "ValueEnumerator.h"#include "llvm/Constants.h"#include "llvm/DerivedTypes.h"#include "llvm/InlineAsm.h"#include "llvm/Instructions.h"#include "llvm/Module.h"#include "llvm/TypeSymbolTable.h"#include "llvm/ValueSymbolTable.h"#include "llvm/Support/MathExtras.h"#include "llvm/Support/Streams.h"#include "llvm/Support/raw_ostream.h"#include "llvm/System/Program.h"
Go to the source code of this file.
| anonymous enum |
These are manifest constants used by the bitcode writer. They do not need to be kept in sync with the reader, but need to be consistent within this file.
Definition at line 33 of file BitcodeWriter.cpp.
| anonymous enum |
EmitDarwinBCHeader - If generating a bc file on darwin, we have to emit a header and trailer to make it compatible with the system archiver. To do this we emit the following header, and then emit a trailer that pads the file out to be a multiple of 16 bytes.
struct bc_header { uint32_t Magic; // 0x0B17C0DE uint32_t Version; // Version, currently always 0. uint32_t BitcodeOffset; // Offset to traditional bitcode file. uint32_t BitcodeSize; // Size of traditional bitcode file. uint32_t CPUType; // CPU specifier. ... potentially more later ... };
Definition at line 1294 of file BitcodeWriter.cpp.
| static void EmitDarwinBCHeader | ( | BitstreamWriter & | Stream, | |
| const std::string & | TT | |||
| ) | [static] |
Definition at line 1299 of file BitcodeWriter.cpp.
References DarwinBCHeaderSize, and llvm::BitstreamWriter::Emit().
Referenced by llvm::WriteBitcodeToStream().
| static void EmitDarwinBCTrailer | ( | BitstreamWriter & | Stream, | |
| unsigned | BufferSize | |||
| ) | [static] |
EmitDarwinBCTrailer - Emit the darwin epilog after the bitcode file and finalize the header.
Definition at line 1334 of file BitcodeWriter.cpp.
References llvm::BitstreamWriter::BackpatchWord(), DarwinBCHeaderSize, DarwinBCSizeFieldOffset, and llvm::BitstreamWriter::Emit().
Referenced by llvm::WriteBitcodeToStream().
Definition at line 76 of file BitcodeWriter.cpp.
References Add(), And(), llvm::bitc::BINOP_ADD, llvm::bitc::BINOP_AND, llvm::bitc::BINOP_ASHR, llvm::bitc::BINOP_LSHR, llvm::bitc::BINOP_MUL, llvm::bitc::BINOP_OR, llvm::bitc::BINOP_SDIV, llvm::bitc::BINOP_SHL, llvm::bitc::BINOP_SREM, llvm::bitc::BINOP_SUB, llvm::bitc::BINOP_UDIV, llvm::bitc::BINOP_UREM, llvm::bitc::BINOP_XOR, LShr, llvm::APIntOps::Or(), and llvm::APIntOps::Xor().
Referenced by WriteConstants(), and WriteInstruction().
Definition at line 58 of file BitcodeWriter.cpp.
References BitCast, llvm::bitc::CAST_BITCAST, llvm::bitc::CAST_FPEXT, llvm::bitc::CAST_FPTOSI, llvm::bitc::CAST_FPTOUI, llvm::bitc::CAST_FPTRUNC, llvm::bitc::CAST_INTTOPTR, llvm::bitc::CAST_PTRTOINT, llvm::bitc::CAST_SEXT, llvm::bitc::CAST_SITOFP, llvm::bitc::CAST_TRUNC, llvm::bitc::CAST_UITOFP, llvm::bitc::CAST_ZEXT, FPToUI, FPTrunc, PtrToInt, llvm::Attribute::SExt, UIToFP, and ZExt.
Referenced by WriteConstants(), and WriteInstruction().
| static unsigned getEncodedLinkage | ( | const GlobalValue * | GV | ) | [static] |
Definition at line 274 of file BitcodeWriter.cpp.
References llvm::GlobalValue::getLinkage().
Referenced by WriteModuleInfo().
| static unsigned getEncodedVisibility | ( | const GlobalValue * | GV | ) | [static] |
Definition at line 291 of file BitcodeWriter.cpp.
References llvm::GlobalValue::getVisibility().
Referenced by WriteModuleInfo().
| static bool PushValueAndType | ( | const Value * | V, | |
| unsigned | InstID, | |||
| SmallVector< unsigned, 64 > & | Vals, | |||
| ValueEnumerator & | VE | |||
| ) | [static] |
PushValueAndType - The file has to encode both the value and type id for many values, because we need to know what type to create for forward references. However, most operands are not forward references, so this type field is not needed.
This function adds V's value ID to Vals. If the value ID is higher than the instruction ID, then it is a forward reference, and it also includes the type ID.
Definition at line 701 of file BitcodeWriter.cpp.
References llvm::Value::getType(), llvm::ValueEnumerator::getTypeID(), llvm::ValueEnumerator::getValueID(), and llvm::SmallVectorImpl< T >::push_back().
Referenced by WriteInstruction().
| static void WriteAttributeTable | ( | const ValueEnumerator & | VE, | |
| BitstreamWriter & | Stream | |||
| ) | [static] |
Definition at line 112 of file BitcodeWriter.cpp.
References A, Alignment, llvm::AttributeWithIndex::Attrs, llvm::SmallVectorImpl< T >::clear(), llvm::BitstreamWriter::EmitRecord(), llvm::BitstreamWriter::EnterSubblock(), llvm::BitstreamWriter::ExitBlock(), llvm::ValueEnumerator::getAttributes(), llvm::AttrListPtr::getNumSlots(), llvm::AttrListPtr::getSlot(), llvm::AttributeWithIndex::Index, llvm::bitc::PARAMATTR_BLOCK_ID, llvm::bitc::PARAMATTR_CODE_ENTRY, and llvm::SmallVectorImpl< T >::push_back().
Referenced by WriteModule().
| static void WriteBlockInfo | ( | const ValueEnumerator & | VE, | |
| BitstreamWriter & | Stream | |||
| ) | [static] |
Definition at line 1077 of file BitcodeWriter.cpp.
References llvm::BitCodeAbbrev::Add(), llvm::bitc::CONSTANTS_BLOCK_ID, CONSTANTS_CE_CAST_Abbrev, CONSTANTS_INTEGER_ABBREV, CONSTANTS_NULL_Abbrev, CONSTANTS_SETTYPE_ABBREV, llvm::bitc::CST_CODE_CE_CAST, llvm::bitc::CST_CODE_INTEGER, llvm::bitc::CST_CODE_NULL, llvm::bitc::CST_CODE_SETTYPE, llvm::BitstreamWriter::EmitBlockInfoAbbrev(), llvm::BitstreamWriter::EnterBlockInfoBlock(), llvm::BitstreamWriter::ExitBlock(), llvm::bitc::FUNC_CODE_INST_BINOP, llvm::bitc::FUNC_CODE_INST_CAST, llvm::bitc::FUNC_CODE_INST_LOAD, llvm::bitc::FUNC_CODE_INST_RET, llvm::bitc::FUNC_CODE_INST_UNREACHABLE, llvm::bitc::FUNCTION_BLOCK_ID, FUNCTION_INST_BINOP_ABBREV, FUNCTION_INST_CAST_ABBREV, FUNCTION_INST_LOAD_ABBREV, FUNCTION_INST_RET_VAL_ABBREV, FUNCTION_INST_RET_VOID_ABBREV, FUNCTION_INST_UNREACHABLE_ABBREV, llvm::ValueEnumerator::getTypes(), llvm::Log2_32_Ceil(), llvm::bitc::VALUE_SYMTAB_BLOCK_ID, VST_BBENTRY_6_ABBREV, llvm::bitc::VST_CODE_BBENTRY, llvm::bitc::VST_CODE_ENTRY, VST_ENTRY_6_ABBREV, VST_ENTRY_7_ABBREV, and VST_ENTRY_8_ABBREV.
Referenced by WriteModule().
| static void WriteConstants | ( | unsigned | FirstVal, | |
| unsigned | LastVal, | |||
| const ValueEnumerator & | VE, | |||
| BitstreamWriter & | Stream, | |||
| bool | isGlobal | |||
| ) | [static] |
Definition at line 448 of file BitcodeWriter.cpp.
References llvm::BitCodeAbbrev::Add(), llvm::CallingConv::C, llvm::SmallVectorImpl< T >::clear(), llvm::SectionFlags::Code, llvm::bitc::CONSTANTS_BLOCK_ID, CONSTANTS_CE_CAST_Abbrev, CONSTANTS_INTEGER_ABBREV, CONSTANTS_SETTYPE_ABBREV, llvm::bitc::CST_CODE_AGGREGATE, llvm::bitc::CST_CODE_CE_BINOP, llvm::bitc::CST_CODE_CE_CAST, llvm::bitc::CST_CODE_CE_CMP, llvm::bitc::CST_CODE_CE_EXTRACTELT, llvm::bitc::CST_CODE_CE_GEP, llvm::bitc::CST_CODE_CE_INSERTELT, llvm::bitc::CST_CODE_CE_SELECT, llvm::bitc::CST_CODE_CE_SHUFFLEVEC, llvm::bitc::CST_CODE_CSTRING, llvm::bitc::CST_CODE_FLOAT, llvm::bitc::CST_CODE_INLINEASM, llvm::bitc::CST_CODE_INTEGER, llvm::bitc::CST_CODE_NULL, llvm::bitc::CST_CODE_SETTYPE, llvm::bitc::CST_CODE_STRING, llvm::bitc::CST_CODE_UNDEF, llvm::bitc::CST_CODE_WIDE_INTEGER, llvm::BitstreamWriter::EmitAbbrev(), llvm::BitstreamWriter::EmitRecord(), llvm::BitstreamWriter::EnterSubblock(), llvm::BitstreamWriter::ExitBlock(), FCmp, GetEncodedBinaryOpcode(), GetEncodedCastOpcode(), llvm::User::getNumOperands(), llvm::Constant::getOperand(), llvm::APInt::getRawData(), llvm::Value::getType(), llvm::ValueEnumerator::getTypeID(), llvm::ValueEnumerator::getValueID(), llvm::ValueEnumerator::getValues(), InsertElement, llvm::Constant::isNullValue(), llvm::Log2_32_Ceil(), llvm::SmallVectorImpl< T >::push_back(), Ty, V, Vals, and VICmp.
Referenced by WriteFunction(), and WriteModuleConstants().
| static void WriteFunction | ( | const Function & | F, | |
| ValueEnumerator & | VE, | |||
| BitstreamWriter & | Stream | |||
| ) | [static] |
WriteFunction - Emit a function body to the module stream.
Definition at line 999 of file BitcodeWriter.cpp.
References BB, llvm::MachineBasicBlock::begin(), llvm::Function::begin(), llvm::SmallVectorImpl< T >::clear(), E, llvm::BitstreamWriter::EmitRecord(), llvm::MachineBasicBlock::end(), llvm::Function::end(), llvm::BitstreamWriter::EnterSubblock(), llvm::BitstreamWriter::ExitBlock(), llvm::bitc::FUNC_CODE_DECLAREBLOCKS, llvm::bitc::FUNCTION_BLOCK_ID, llvm::ValueEnumerator::getBasicBlocks(), llvm::ValueEnumerator::getFunctionConstantRange(), llvm::Function::getValueSymbolTable(), llvm::ValueEnumerator::incorporateFunction(), llvm::ValueEnumerator::purgeFunction(), llvm::SmallVectorImpl< T >::push_back(), Vals, WriteConstants(), WriteInstruction(), and WriteValueSymbolTable().
Referenced by WriteModule().
| static void WriteInstruction | ( | const Instruction & | I, | |
| unsigned | InstID, | |||
| ValueEnumerator & | VE, | |||
| BitstreamWriter & | Stream, | |||
| SmallVector< unsigned, 64 > & | Vals | |||
| ) | [static] |
WriteInstruction - Emit an instruction to the specified stream.
Definition at line 714 of file BitcodeWriter.cpp.
References Call, llvm::SmallVectorImpl< T >::clear(), llvm::SectionFlags::Code, llvm::BitstreamWriter::EmitRecord(), ExtractValue, FCmp, llvm::bitc::FUNC_CODE_INST_ALLOCA, llvm::bitc::FUNC_CODE_INST_BINOP, llvm::bitc::FUNC_CODE_INST_BR, llvm::bitc::FUNC_CODE_INST_CALL, llvm::bitc::FUNC_CODE_INST_CAST, llvm::bitc::FUNC_CODE_INST_CMP, llvm::bitc::FUNC_CODE_INST_CMP2, llvm::bitc::FUNC_CODE_INST_EXTRACTELT, llvm::bitc::FUNC_CODE_INST_EXTRACTVAL, llvm::bitc::FUNC_CODE_INST_FREE, llvm::bitc::FUNC_CODE_INST_GEP, llvm::bitc::FUNC_CODE_INST_INSERTELT, llvm::bitc::FUNC_CODE_INST_INSERTVAL, llvm::bitc::FUNC_CODE_INST_INVOKE, llvm::bitc::FUNC_CODE_INST_LOAD, llvm::bitc::FUNC_CODE_INST_MALLOC, llvm::bitc::FUNC_CODE_INST_PHI, llvm::bitc::FUNC_CODE_INST_RET, llvm::bitc::FUNC_CODE_INST_SHUFFLEVEC, llvm::bitc::FUNC_CODE_INST_STORE2, llvm::bitc::FUNC_CODE_INST_SWITCH, llvm::bitc::FUNC_CODE_INST_UNREACHABLE, llvm::bitc::FUNC_CODE_INST_UNWIND, llvm::bitc::FUNC_CODE_INST_VAARG, llvm::bitc::FUNC_CODE_INST_VSELECT, FUNCTION_INST_BINOP_ABBREV, FUNCTION_INST_CAST_ABBREV, FUNCTION_INST_LOAD_ABBREV, FUNCTION_INST_RET_VAL_ABBREV, FUNCTION_INST_RET_VOID_ABBREV, FUNCTION_INST_UNREACHABLE_ABBREV, llvm::ValueEnumerator::getAttributeID(), llvm::CallInst::getAttributes(), llvm::InvokeInst::getAttributes(), llvm::InvokeInst::getCalledValue(), llvm::CallInst::getCallingConv(), llvm::InvokeInst::getCallingConv(), llvm::BranchInst::getCondition(), llvm::SequentialType::getElementType(), GetEncodedBinaryOpcode(), GetEncodedCastOpcode(), llvm::InvokeInst::getNormalDest(), llvm::User::getNumOperands(), llvm::Instruction::getOpcode(), llvm::User::getOperand(), llvm::BranchInst::getSuccessor(), llvm::Value::getType(), llvm::ValueEnumerator::getTypeID(), llvm::InvokeInst::getUnwindDest(), llvm::ValueEnumerator::getValueID(), II, InsertElement, llvm::BranchInst::isConditional(), llvm::CallInst::isTailCall(), Load, llvm::Log2_32(), Malloc, PHI, PushValueAndType(), llvm::MipsISD::Ret, llvm::SPII::Store, VAArg, and VICmp.
Referenced by WriteFunction().
| static void WriteModule | ( | const Module * | M, | |
| BitstreamWriter & | Stream | |||
| ) | [static] |
WriteModule - Emit the specified module to the bitstream.
Definition at line 1228 of file BitcodeWriter.cpp.
References llvm::Module::begin(), CurVersion, E, llvm::BitstreamWriter::EmitRecord(), llvm::Module::end(), llvm::BitstreamWriter::EnterSubblock(), llvm::BitstreamWriter::ExitBlock(), llvm::Module::getTypeSymbolTable(), llvm::Module::getValueSymbolTable(), llvm::bitc::MODULE_BLOCK_ID, llvm::bitc::MODULE_CODE_PURGEVALS, llvm::bitc::MODULE_CODE_VERSION, llvm::ValueEnumerator::PurgeAggregateValues(), llvm::SmallVectorImpl< T >::push_back(), Vals, VE, WriteAttributeTable(), WriteBlockInfo(), WriteFunction(), WriteModuleConstants(), WriteModuleInfo(), WriteTypeSymbolTable(), WriteTypeTable(), and WriteValueSymbolTable().
Referenced by llvm::WriteBitcodeToStream().
| static void WriteModuleConstants | ( | const ValueEnumerator & | VE, | |
| BitstreamWriter & | Stream | |||
| ) | [static] |
Definition at line 679 of file BitcodeWriter.cpp.
References first, llvm::ValueEnumerator::getValues(), Vals, and WriteConstants().
Referenced by WriteModule().
| static void WriteModuleInfo | ( | const Module * | M, | |
| const ValueEnumerator & | VE, | |||
| BitstreamWriter & | Stream | |||
| ) | [static] |
Definition at line 302 of file BitcodeWriter.cpp.
References llvm::BitCodeAbbrev::Add(), AI, llvm::Module::alias_begin(), llvm::Module::alias_end(), llvm::Module::begin(), llvm::SmallVectorImpl< T >::clear(), E, llvm::BitstreamWriter::EmitAbbrev(), llvm::BitstreamWriter::EmitRecord(), llvm::Module::end(), Entry, F, llvm::GlobalValue::getAlignment(), llvm::ValueEnumerator::getAttributeID(), llvm::Module::getDataLayout(), getEncodedLinkage(), getEncodedVisibility(), llvm::Module::getModuleInlineAsm(), llvm::GlobalValue::getSection(), llvm::Module::getTargetTriple(), llvm::AllocationInst::getType(), llvm::GlobalValue::getType(), llvm::ValueEnumerator::getTypeID(), llvm::ValueEnumerator::getValueID(), llvm::GlobalValue::getVisibility(), llvm::Module::global_begin(), llvm::Module::global_empty(), llvm::Module::global_end(), GV, llvm::GlobalValue::hasSection(), llvm::GlobalValue::isDeclaration(), llvm::Module::lib_begin(), llvm::Module::lib_end(), llvm::Log2_32(), llvm::Log2_32_Ceil(), llvm::bitc::MODULE_CODE_ALIAS, llvm::bitc::MODULE_CODE_ASM, llvm::bitc::MODULE_CODE_DATALAYOUT, llvm::bitc::MODULE_CODE_DEPLIB, llvm::bitc::MODULE_CODE_FUNCTION, llvm::bitc::MODULE_CODE_GCNAME, llvm::bitc::MODULE_CODE_GLOBALVAR, llvm::bitc::MODULE_CODE_SECTIONNAME, llvm::bitc::MODULE_CODE_TRIPLE, llvm::SmallVectorImpl< T >::push_back(), Vals, and WriteStringRecord().
Referenced by WriteModule().
| static void WriteStringRecord | ( | unsigned | Code, | |
| const std::string & | Str, | |||
| unsigned | AbbrevToUse, | |||
| BitstreamWriter & | Stream | |||
| ) | [static] |
Definition at line 99 of file BitcodeWriter.cpp.
References llvm::BitstreamWriter::EmitRecord(), llvm::SmallVectorImpl< T >::push_back(), and Vals.
Referenced by WriteModuleInfo().
| static void WriteTypeSymbolTable | ( | const TypeSymbolTable & | TST, | |
| const ValueEnumerator & | VE, | |||
| BitstreamWriter & | Stream | |||
| ) | [static] |
WriteTypeSymbolTable - Emit a block for the specified type symtab.
Definition at line 1037 of file BitcodeWriter.cpp.
References llvm::BitCodeAbbrev::Add(), llvm::TypeSymbolTable::begin(), llvm::SmallVectorImpl< T >::clear(), llvm::BitstreamWriter::EmitAbbrev(), llvm::BitstreamWriter::EmitRecord(), llvm::TypeSymbolTable::empty(), llvm::TypeSymbolTable::end(), llvm::BitstreamWriter::EnterSubblock(), llvm::BitstreamWriter::ExitBlock(), llvm::ValueEnumerator::getTypeID(), llvm::ValueEnumerator::getTypes(), llvm::Log2_32_Ceil(), llvm::SmallVectorImpl< T >::push_back(), llvm::bitc::TYPE_SYMTAB_BLOCK_ID, and llvm::bitc::VST_CODE_ENTRY.
Referenced by WriteModule().
| static void WriteTypeTable | ( | const ValueEnumerator & | VE, | |
| BitstreamWriter & | Stream | |||
| ) | [static] |
WriteTypeTable - Write out the type table for a module.
Definition at line 146 of file BitcodeWriter.cpp.
References llvm::BitCodeAbbrev::Add(), llvm::SmallVectorImpl< T >::clear(), llvm::SectionFlags::Code, E, llvm::StructType::element_begin(), llvm::StructType::element_end(), llvm::BitstreamWriter::EmitAbbrev(), llvm::BitstreamWriter::EmitRecord(), llvm::BitstreamWriter::EnterSubblock(), llvm::BitstreamWriter::ExitBlock(), llvm::PointerType::getAddressSpace(), llvm::SequentialType::getElementType(), llvm::VectorType::getNumElements(), llvm::ArrayType::getNumElements(), llvm::FunctionType::getNumParams(), llvm::FunctionType::getParamType(), llvm::FunctionType::getReturnType(), llvm::ValueEnumerator::getTypeID(), llvm::Type::getTypeID(), llvm::ValueEnumerator::getTypes(), llvm::StructType::isPacked(), llvm::FunctionType::isVarArg(), llvm::Log2_32_Ceil(), llvm::SmallVectorImpl< T >::push_back(), T, llvm::bitc::TYPE_BLOCK_ID, llvm::bitc::TYPE_CODE_ARRAY, llvm::bitc::TYPE_CODE_DOUBLE, llvm::bitc::TYPE_CODE_FLOAT, llvm::bitc::TYPE_CODE_FP128, llvm::bitc::TYPE_CODE_FUNCTION, llvm::bitc::TYPE_CODE_INTEGER, llvm::bitc::TYPE_CODE_LABEL, llvm::bitc::TYPE_CODE_NUMENTRY, llvm::bitc::TYPE_CODE_OPAQUE, llvm::bitc::TYPE_CODE_POINTER, llvm::bitc::TYPE_CODE_PPC_FP128, llvm::bitc::TYPE_CODE_STRUCT, llvm::bitc::TYPE_CODE_VECTOR, llvm::bitc::TYPE_CODE_VOID, llvm::bitc::TYPE_CODE_X86_FP80, and VT.
Referenced by WriteModule().
| static void WriteValueSymbolTable | ( | const ValueSymbolTable & | VST, | |
| const ValueEnumerator & | VE, | |||
| BitstreamWriter & | Stream | |||
| ) | [static] |
Definition at line 941 of file BitcodeWriter.cpp.
References llvm::ValueSymbolTable::begin(), llvm::CallingConv::C, llvm::SmallVectorImpl< T >::clear(), llvm::SectionFlags::Code, E, llvm::BitstreamWriter::EmitRecord(), llvm::ValueSymbolTable::empty(), llvm::ValueSymbolTable::end(), llvm::BitstreamWriter::EnterSubblock(), llvm::BitstreamWriter::ExitBlock(), llvm::StringMapEntry< ValueTy >::getKeyData(), llvm::StringMapEntryBase::getKeyLength(), llvm::ValueEnumerator::getValueID(), Name, llvm::SmallVectorImpl< T >::push_back(), SE, llvm::bitc::VALUE_SYMTAB_BLOCK_ID, VST_BBENTRY_6_ABBREV, llvm::bitc::VST_CODE_BBENTRY, llvm::bitc::VST_CODE_ENTRY, VST_ENTRY_6_ABBREV, VST_ENTRY_7_ABBREV, and VST_ENTRY_8_ABBREV.
Referenced by WriteFunction(), and WriteModule().