LLVM  3.7.0
Macros | Enumerations | Functions
BitcodeWriter.cpp File Reference
#include "llvm/Bitcode/ReaderWriter.h"
#include "ValueEnumerator.h"
#include "llvm/ADT/Triple.h"
#include "llvm/Bitcode/BitstreamWriter.h"
#include "llvm/Bitcode/LLVMBitCodes.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Operator.h"
#include "llvm/IR/UseListOrder.h"
#include "llvm/IR/ValueSymbolTable.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/Program.h"
#include "llvm/Support/raw_ostream.h"
#include <cctype>
#include <map>
#include "llvm/IR/Metadata.def"
Include dependency graph for BitcodeWriter.cpp:

Go to the source code of this file.

Macros

#define HANDLE_MDNODE_LEAF(CLASS)   unsigned CLASS##Abbrev = 0;
 
#define HANDLE_MDNODE_LEAF(CLASS)
 

Enumerations

enum  {
  VST_ENTRY_8_ABBREV = bitc::FIRST_APPLICATION_ABBREV, VST_ENTRY_7_ABBREV, VST_ENTRY_6_ABBREV, VST_BBENTRY_6_ABBREV,
  CONSTANTS_SETTYPE_ABBREV = bitc::FIRST_APPLICATION_ABBREV, CONSTANTS_INTEGER_ABBREV, CONSTANTS_CE_CAST_Abbrev, CONSTANTS_NULL_Abbrev,
  FUNCTION_INST_LOAD_ABBREV = bitc::FIRST_APPLICATION_ABBREV, FUNCTION_INST_BINOP_ABBREV, FUNCTION_INST_BINOP_FLAGS_ABBREV, FUNCTION_INST_CAST_ABBREV,
  FUNCTION_INST_RET_VOID_ABBREV, FUNCTION_INST_RET_VAL_ABBREV, FUNCTION_INST_UNREACHABLE_ABBREV, FUNCTION_INST_GEP_ABBREV
}
 These are manifest constants used by the bitcode writer. More...
 
enum  { DarwinBCSizeFieldOffset = 3*4, DarwinBCHeaderSize = 5*4 }
 EmitDarwinBCHeader - If generating a bc file on darwin, we have to emit a header and trailer to make it compatible with the system archiver. More...
 

Functions

static unsigned GetEncodedCastOpcode (unsigned Opcode)
 
static unsigned GetEncodedBinaryOpcode (unsigned Opcode)
 
static unsigned GetEncodedRMWOperation (AtomicRMWInst::BinOp Op)
 
static unsigned GetEncodedOrdering (AtomicOrdering Ordering)
 
static unsigned GetEncodedSynchScope (SynchronizationScope SynchScope)
 
static void WriteStringRecord (unsigned Code, StringRef Str, unsigned AbbrevToUse, BitstreamWriter &Stream)
 
static uint64_t getAttrKindEncoding (Attribute::AttrKind Kind)
 
static void WriteAttributeGroupTable (const ValueEnumerator &VE, BitstreamWriter &Stream)
 
static void WriteAttributeTable (const ValueEnumerator &VE, BitstreamWriter &Stream)
 
static void WriteTypeTable (const ValueEnumerator &VE, BitstreamWriter &Stream)
 WriteTypeTable - Write out the type table for a module. More...
 
static unsigned getEncodedLinkage (const GlobalValue &GV)
 
static unsigned getEncodedVisibility (const GlobalValue &GV)
 
static unsigned getEncodedDLLStorageClass (const GlobalValue &GV)
 
static unsigned getEncodedThreadLocalMode (const GlobalValue &GV)
 
static unsigned getEncodedComdatSelectionKind (const Comdat &C)
 
static void writeComdats (const ValueEnumerator &VE, BitstreamWriter &Stream)
 
static void WriteModuleInfo (const Module *M, const ValueEnumerator &VE, BitstreamWriter &Stream)
 
static uint64_t GetOptimizationFlags (const Value *V)
 
static void WriteValueAsMetadata (const ValueAsMetadata *MD, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record)
 
static void WriteMDTuple (const MDTuple *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDILocation (const DILocation *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteGenericDINode (const GenericDINode *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static uint64_t rotateSign (int64_t I)
 
static void WriteDISubrange (const DISubrange *N, const ValueEnumerator &, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDIEnumerator (const DIEnumerator *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDIBasicType (const DIBasicType *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDIDerivedType (const DIDerivedType *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDICompositeType (const DICompositeType *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDISubroutineType (const DISubroutineType *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDIFile (const DIFile *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDICompileUnit (const DICompileUnit *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDISubprogram (const DISubprogram *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDILexicalBlock (const DILexicalBlock *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDILexicalBlockFile (const DILexicalBlockFile *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDINamespace (const DINamespace *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDIModule (const DIModule *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDITemplateTypeParameter (const DITemplateTypeParameter *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDITemplateValueParameter (const DITemplateValueParameter *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDIGlobalVariable (const DIGlobalVariable *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDILocalVariable (const DILocalVariable *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDIExpression (const DIExpression *N, const ValueEnumerator &, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDIObjCProperty (const DIObjCProperty *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteDIImportedEntity (const DIImportedEntity *N, const ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< uint64_t > &Record, unsigned Abbrev)
 
static void WriteModuleMetadata (const Module *M, const ValueEnumerator &VE, BitstreamWriter &Stream)
 
static void WriteFunctionLocalMetadata (const Function &F, const ValueEnumerator &VE, BitstreamWriter &Stream)
 
static void WriteMetadataAttachment (const Function &F, const ValueEnumerator &VE, BitstreamWriter &Stream)
 
static void WriteModuleMetadataStore (const Module *M, BitstreamWriter &Stream)
 
static void emitSignedInt64 (SmallVectorImpl< uint64_t > &Vals, uint64_t V)
 
static void WriteConstants (unsigned FirstVal, unsigned LastVal, const ValueEnumerator &VE, BitstreamWriter &Stream, bool isGlobal)
 
static void WriteModuleConstants (const ValueEnumerator &VE, BitstreamWriter &Stream)
 
static bool PushValueAndType (const Value *V, unsigned InstID, SmallVectorImpl< unsigned > &Vals, ValueEnumerator &VE)
 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. More...
 
static void pushValue (const Value *V, unsigned InstID, SmallVectorImpl< unsigned > &Vals, ValueEnumerator &VE)
 pushValue - Like PushValueAndType, but where the type of the value is omitted (perhaps it was already encoded in an earlier operand). More...
 
static void pushValueSigned (const Value *V, unsigned InstID, SmallVectorImpl< uint64_t > &Vals, ValueEnumerator &VE)
 
static void WriteInstruction (const Instruction &I, unsigned InstID, ValueEnumerator &VE, BitstreamWriter &Stream, SmallVectorImpl< unsigned > &Vals)
 WriteInstruction - Emit an instruction to the specified stream. More...
 
static void WriteValueSymbolTable (const ValueSymbolTable &VST, const ValueEnumerator &VE, BitstreamWriter &Stream)
 
static void WriteUseList (ValueEnumerator &VE, UseListOrder &&Order, BitstreamWriter &Stream)
 
static void WriteUseListBlock (const Function *F, ValueEnumerator &VE, BitstreamWriter &Stream)
 
static void WriteFunction (const Function &F, ValueEnumerator &VE, BitstreamWriter &Stream)
 WriteFunction - Emit a function body to the module stream. More...
 
static void WriteBlockInfo (const ValueEnumerator &VE, BitstreamWriter &Stream)
 
static void WriteModule (const Module *M, BitstreamWriter &Stream, bool ShouldPreserveUseListOrder)
 WriteModule - Emit the specified module to the bitstream. More...
 
static void WriteInt32ToBuffer (uint32_t Value, SmallVectorImpl< char > &Buffer, uint32_t &Position)
 
static void EmitDarwinBCHeaderAndTrailer (SmallVectorImpl< char > &Buffer, const Triple &TT)
 

Macro Definition Documentation

#define HANDLE_MDNODE_LEAF (   CLASS)    unsigned CLASS##Abbrev = 0;
#define HANDLE_MDNODE_LEAF (   CLASS)
Value:
case Metadata::CLASS##Kind: \
Write##CLASS(cast<CLASS>(N), VE, Stream, Record, CLASS##Abbrev); \
continue;
#define N
const ARM::ArchExtKind Kind

Enumeration Type Documentation

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.

Enumerator
VST_ENTRY_8_ABBREV 
VST_ENTRY_7_ABBREV 
VST_ENTRY_6_ABBREV 
VST_BBENTRY_6_ABBREV 
CONSTANTS_SETTYPE_ABBREV 
CONSTANTS_INTEGER_ABBREV 
CONSTANTS_CE_CAST_Abbrev 
CONSTANTS_NULL_Abbrev 
FUNCTION_INST_LOAD_ABBREV 
FUNCTION_INST_BINOP_ABBREV 
FUNCTION_INST_BINOP_FLAGS_ABBREV 
FUNCTION_INST_CAST_ABBREV 
FUNCTION_INST_RET_VOID_ABBREV 
FUNCTION_INST_RET_VAL_ABBREV 
FUNCTION_INST_UNREACHABLE_ABBREV 
FUNCTION_INST_GEP_ABBREV 

Definition at line 39 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 ... };

Enumerator
DarwinBCSizeFieldOffset 
DarwinBCHeaderSize 

Definition at line 2419 of file BitcodeWriter.cpp.

Function Documentation

static void EmitDarwinBCHeaderAndTrailer ( SmallVectorImpl< char > &  Buffer,
const Triple TT 
)
static
static void emitSignedInt64 ( SmallVectorImpl< uint64_t > &  Vals,
uint64_t  V 
)
static
static uint64_t getAttrKindEncoding ( Attribute::AttrKind  Kind)
static

Definition at line 159 of file BitcodeWriter.cpp.

References llvm::Attribute::Alignment, llvm::Attribute::AlwaysInline, llvm::Attribute::ArgMemOnly, llvm::bitc::ATTR_KIND_ALIGNMENT, llvm::bitc::ATTR_KIND_ALWAYS_INLINE, llvm::bitc::ATTR_KIND_ARGMEMONLY, llvm::bitc::ATTR_KIND_BUILTIN, llvm::bitc::ATTR_KIND_BY_VAL, llvm::bitc::ATTR_KIND_COLD, llvm::bitc::ATTR_KIND_CONVERGENT, llvm::bitc::ATTR_KIND_DEREFERENCEABLE, llvm::bitc::ATTR_KIND_DEREFERENCEABLE_OR_NULL, llvm::bitc::ATTR_KIND_IN_ALLOCA, llvm::bitc::ATTR_KIND_IN_REG, llvm::bitc::ATTR_KIND_INLINE_HINT, llvm::bitc::ATTR_KIND_JUMP_TABLE, llvm::bitc::ATTR_KIND_MIN_SIZE, llvm::bitc::ATTR_KIND_NAKED, llvm::bitc::ATTR_KIND_NEST, llvm::bitc::ATTR_KIND_NO_ALIAS, llvm::bitc::ATTR_KIND_NO_BUILTIN, llvm::bitc::ATTR_KIND_NO_CAPTURE, llvm::bitc::ATTR_KIND_NO_DUPLICATE, llvm::bitc::ATTR_KIND_NO_IMPLICIT_FLOAT, llvm::bitc::ATTR_KIND_NO_INLINE, llvm::bitc::ATTR_KIND_NO_RED_ZONE, llvm::bitc::ATTR_KIND_NO_RETURN, llvm::bitc::ATTR_KIND_NO_UNWIND, llvm::bitc::ATTR_KIND_NON_LAZY_BIND, llvm::bitc::ATTR_KIND_NON_NULL, llvm::bitc::ATTR_KIND_OPTIMIZE_FOR_SIZE, llvm::bitc::ATTR_KIND_OPTIMIZE_NONE, llvm::bitc::ATTR_KIND_READ_NONE, llvm::bitc::ATTR_KIND_READ_ONLY, llvm::bitc::ATTR_KIND_RETURNED, llvm::bitc::ATTR_KIND_RETURNS_TWICE, llvm::bitc::ATTR_KIND_S_EXT, llvm::bitc::ATTR_KIND_SAFESTACK, llvm::bitc::ATTR_KIND_SANITIZE_ADDRESS, llvm::bitc::ATTR_KIND_SANITIZE_MEMORY, llvm::bitc::ATTR_KIND_SANITIZE_THREAD, llvm::bitc::ATTR_KIND_STACK_ALIGNMENT, llvm::bitc::ATTR_KIND_STACK_PROTECT, llvm::bitc::ATTR_KIND_STACK_PROTECT_REQ, llvm::bitc::ATTR_KIND_STACK_PROTECT_STRONG, llvm::bitc::ATTR_KIND_STRUCT_RET, llvm::bitc::ATTR_KIND_UW_TABLE, llvm::bitc::ATTR_KIND_Z_EXT, llvm::Attribute::Builtin, llvm::Attribute::ByVal, llvm::Attribute::Cold, llvm::Attribute::Convergent, llvm::Attribute::Dereferenceable, llvm::Attribute::DereferenceableOrNull, llvm::Attribute::EndAttrKinds, llvm::Attribute::InAlloca, llvm::Attribute::InlineHint, llvm::Attribute::InReg, llvm::Attribute::JumpTable, llvm_unreachable, llvm::Attribute::MinSize, llvm::Attribute::Naked, llvm::Attribute::Nest, llvm::Attribute::NoAlias, llvm::Attribute::NoBuiltin, llvm::Attribute::NoCapture, llvm::Attribute::NoDuplicate, llvm::Attribute::NoImplicitFloat, llvm::Attribute::NoInline, llvm::Attribute::None, llvm::Attribute::NonLazyBind, llvm::Attribute::NonNull, llvm::Attribute::NoRedZone, llvm::Attribute::NoReturn, llvm::Attribute::NoUnwind, llvm::Attribute::OptimizeForSize, llvm::Attribute::OptimizeNone, llvm::Attribute::ReadNone, llvm::Attribute::ReadOnly, llvm::Attribute::Returned, llvm::Attribute::ReturnsTwice, llvm::Attribute::SafeStack, llvm::Attribute::SanitizeAddress, llvm::Attribute::SanitizeMemory, llvm::Attribute::SanitizeThread, llvm::Attribute::SExt, llvm::Attribute::StackAlignment, llvm::Attribute::StackProtect, llvm::Attribute::StackProtectReq, llvm::Attribute::StackProtectStrong, llvm::Attribute::StructRet, llvm::Attribute::UWTable, and llvm::Attribute::ZExt.

Referenced by WriteAttributeGroupTable().

static unsigned GetEncodedBinaryOpcode ( unsigned  Opcode)
static
static unsigned GetEncodedCastOpcode ( unsigned  Opcode)
static
static unsigned getEncodedComdatSelectionKind ( const Comdat C)
static
static unsigned getEncodedDLLStorageClass ( const GlobalValue GV)
static
static unsigned getEncodedLinkage ( const GlobalValue GV)
static
static unsigned GetEncodedOrdering ( AtomicOrdering  Ordering)
static
static unsigned GetEncodedRMWOperation ( AtomicRMWInst::BinOp  Op)
static
static unsigned GetEncodedSynchScope ( SynchronizationScope  SynchScope)
static
static unsigned getEncodedThreadLocalMode ( const GlobalValue GV)
static
static unsigned getEncodedVisibility ( const GlobalValue GV)
static
static uint64_t GetOptimizationFlags ( const Value V)
static
static void pushValue ( const Value V,
unsigned  InstID,
SmallVectorImpl< unsigned > &  Vals,
ValueEnumerator VE 
)
static

pushValue - Like PushValueAndType, but where the type of the value is omitted (perhaps it was already encoded in an earlier operand).

Definition at line 1669 of file BitcodeWriter.cpp.

References llvm::ValueEnumerator::getValueID(), and llvm::SmallVectorTemplateBase< T, isPodLike >::push_back().

Referenced by WriteInstruction().

static bool PushValueAndType ( const Value V,
unsigned  InstID,
SmallVectorImpl< unsigned > &  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. The value ID that is written is encoded relative to the InstID.

Definition at line 1654 of file BitcodeWriter.cpp.

References llvm::Value::getType(), llvm::ValueEnumerator::getTypeID(), llvm::ValueEnumerator::getValueID(), and llvm::SmallVectorTemplateBase< T, isPodLike >::push_back().

Referenced by WriteInstruction().

static void pushValueSigned ( const Value V,
unsigned  InstID,
SmallVectorImpl< uint64_t > &  Vals,
ValueEnumerator VE 
)
static

Definition at line 1676 of file BitcodeWriter.cpp.

References emitSignedInt64(), and llvm::ValueEnumerator::getValueID().

Referenced by WriteInstruction().

static uint64_t rotateSign ( int64_t  I)
static

Definition at line 825 of file BitcodeWriter.cpp.

References I.

Referenced by WriteDIEnumerator(), and WriteDISubrange().

static void WriteAttributeGroupTable ( const ValueEnumerator VE,
BitstreamWriter Stream 
)
static
static void WriteAttributeTable ( const ValueEnumerator VE,
BitstreamWriter Stream 
)
static
static void WriteBlockInfo ( const ValueEnumerator VE,
BitstreamWriter Stream 
)
static
static void writeComdats ( const ValueEnumerator VE,
BitstreamWriter Stream 
)
static
static void WriteConstants ( unsigned  FirstVal,
unsigned  LastVal,
const ValueEnumerator VE,
BitstreamWriter Stream,
bool  isGlobal 
)
static

Definition at line 1366 of file BitcodeWriter.cpp.

References llvm::BitCodeAbbrev::Add(), llvm::SmallVectorImpl< T >::append(), llvm::BitCodeAbbrevOp::Array, llvm::CallingConv::C, llvm::BitCodeAbbrevOp::Char6, llvm::SmallVectorImpl< T >::clear(), llvm::tgtok::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_BLOCKADDRESS, 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_INBOUNDS_GEP, llvm::bitc::CST_CODE_CE_INSERTELT, llvm::bitc::CST_CODE_CE_SELECT, llvm::bitc::CST_CODE_CE_SHUFFLEVEC, llvm::bitc::CST_CODE_CE_SHUFVEC_EX, llvm::bitc::CST_CODE_CSTRING, llvm::bitc::CST_CODE_DATA, 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::Value::dump(), llvm::BitstreamWriter::EmitAbbrev(), llvm::BitstreamWriter::EmitRecord(), emitSignedInt64(), llvm::BitstreamWriter::EnterSubblock(), llvm::BitstreamWriter::ExitBlock(), ExtractElement(), F(), llvm::BitCodeAbbrevOp::Fixed, llvm::ConstantDataSequential::getElementAsInteger(), GetEncodedBinaryOpcode(), GetEncodedCastOpcode(), llvm::ValueEnumerator::getGlobalBasicBlockID(), llvm::ConstantDataSequential::getNumElements(), llvm::User::getOperand(), GetOptimizationFlags(), llvm::APInt::getRawData(), llvm::Value::getType(), llvm::ValueEnumerator::getTypeID(), llvm::ValueEnumerator::getValueID(), llvm::ValueEnumerator::getValues(), I, llvm::Instruction::isCast(), llvm::BitCodeAbbrevOp::isChar6(), llvm::ConstantDataSequential::isCString(), llvm::Type::isDoubleTy(), llvm::Type::isFloatTy(), llvm::Type::isFP128Ty(), llvm::Type::isHalfTy(), llvm::Constant::isNullValue(), llvm::Type::isPPC_FP128Ty(), llvm::Type::isX86_FP80Ty(), llvm_unreachable, llvm::Log2_32_Ceil(), llvm::User::operands(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), and llvm::MCID::Select.

Referenced by WriteFunction(), and WriteModuleConstants().

static void WriteDIBasicType ( const DIBasicType N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDICompileUnit ( const DICompileUnit N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDICompositeType ( const DICompositeType N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDIDerivedType ( const DIDerivedType N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDIEnumerator ( const DIEnumerator N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDIExpression ( const DIExpression N,
const ValueEnumerator ,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDIFile ( const DIFile N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDIGlobalVariable ( const DIGlobalVariable N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDIImportedEntity ( const DIImportedEntity N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDILexicalBlock ( const DILexicalBlock N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDILexicalBlockFile ( const DILexicalBlockFile N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDILocalVariable ( const DILocalVariable N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDILocation ( const DILocation N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDIModule ( const DIModule N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDINamespace ( const DINamespace N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDIObjCProperty ( const DIObjCProperty N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDISubprogram ( const DISubprogram N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDISubrange ( const DISubrange N,
const ValueEnumerator ,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDISubroutineType ( const DISubroutineType N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDITemplateTypeParameter ( const DITemplateTypeParameter N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteDITemplateValueParameter ( const DITemplateValueParameter N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteFunction ( const Function F,
ValueEnumerator VE,
BitstreamWriter Stream 
)
static
static void WriteFunctionLocalMetadata ( const Function F,
const ValueEnumerator VE,
BitstreamWriter Stream 
)
static
static void WriteGenericDINode ( const GenericDINode N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteInstruction ( const Instruction I,
unsigned  InstID,
ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< unsigned > &  Vals 
)
static

WriteInstruction - Emit an instruction to the specified stream.

Definition at line 1685 of file BitcodeWriter.cpp.

References llvm::Call, llvm::SwitchInst::case_begin(), llvm::SwitchInst::case_end(), llvm::LandingPadInst::Catch, llvm::SmallVectorImpl< T >::clear(), llvm::BitstreamWriter::EmitRecord(), ExtractElement(), llvm::LandingPadInst::Filter, llvm::bitc::FUNC_CODE_INST_ALLOCA, llvm::bitc::FUNC_CODE_INST_ATOMICRMW, 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_CMP2, llvm::bitc::FUNC_CODE_INST_CMPXCHG, llvm::bitc::FUNC_CODE_INST_EXTRACTELT, llvm::bitc::FUNC_CODE_INST_EXTRACTVAL, llvm::bitc::FUNC_CODE_INST_FENCE, llvm::bitc::FUNC_CODE_INST_GEP, llvm::bitc::FUNC_CODE_INST_INDIRECTBR, llvm::bitc::FUNC_CODE_INST_INSERTELT, llvm::bitc::FUNC_CODE_INST_INSERTVAL, llvm::bitc::FUNC_CODE_INST_INVOKE, llvm::bitc::FUNC_CODE_INST_LANDINGPAD, llvm::bitc::FUNC_CODE_INST_LOAD, llvm::bitc::FUNC_CODE_INST_LOADATOMIC, llvm::bitc::FUNC_CODE_INST_PHI, llvm::bitc::FUNC_CODE_INST_RESUME, llvm::bitc::FUNC_CODE_INST_RET, llvm::bitc::FUNC_CODE_INST_SHUFFLEVEC, llvm::bitc::FUNC_CODE_INST_STORE, llvm::bitc::FUNC_CODE_INST_STOREATOMIC, llvm::bitc::FUNC_CODE_INST_SWITCH, llvm::bitc::FUNC_CODE_INST_UNREACHABLE, llvm::bitc::FUNC_CODE_INST_VAARG, llvm::bitc::FUNC_CODE_INST_VSELECT, FUNCTION_INST_BINOP_ABBREV, FUNCTION_INST_BINOP_FLAGS_ABBREV, FUNCTION_INST_CAST_ABBREV, FUNCTION_INST_GEP_ABBREV, FUNCTION_INST_LOAD_ABBREV, FUNCTION_INST_RET_VAL_ABBREV, FUNCTION_INST_RET_VOID_ABBREV, FUNCTION_INST_UNREACHABLE_ABBREV, llvm::AllocaInst::getAlignment(), llvm::AllocaInst::getAllocatedType(), llvm::CallInst::getArgOperand(), llvm::ValueEnumerator::getAttributeID(), llvm::CallInst::getAttributes(), llvm::InvokeInst::getAttributes(), llvm::CallInst::getCalledValue(), llvm::InvokeInst::getCalledValue(), llvm::CallInst::getCallingConv(), llvm::InvokeInst::getCallingConv(), llvm::LandingPadInst::getClause(), llvm::BranchInst::getCondition(), llvm::SwitchInst::getCondition(), llvm::SwitchInst::getDefaultDest(), GetEncodedBinaryOpcode(), GetEncodedCastOpcode(), GetEncodedOrdering(), GetEncodedRMWOperation(), GetEncodedSynchScope(), llvm::CallInst::getFunctionType(), llvm::InvokeInst::getFunctionType(), llvm::PHINode::getIncomingBlock(), llvm::PHINode::getIncomingValue(), llvm::InvokeInst::getNormalDest(), llvm::CallInst::getNumArgOperands(), llvm::LandingPadInst::getNumClauses(), llvm::PHINode::getNumIncomingValues(), llvm::User::getNumOperands(), llvm::FunctionType::getNumParams(), llvm::Instruction::getOpcode(), llvm::User::getOperand(), GetOptimizationFlags(), llvm::BranchInst::getSuccessor(), llvm::Value::getType(), llvm::ValueEnumerator::getTypeID(), llvm::InvokeInst::getUnwindDest(), llvm::ValueEnumerator::getValueID(), I, isAtomic(), llvm::Instruction::isCast(), llvm::LandingPadInst::isCatch(), llvm::LandingPadInst::isCleanup(), llvm::BranchInst::isConditional(), llvm::CallInst::isMustTailCall(), llvm::CallInst::isTailCall(), llvm::AllocaInst::isUsedWithInAlloca(), llvm::FunctionType::isVarArg(), isVolatile(), isWeak(), llvm::SPII::Load, llvm::Log2_32(), llvm::Value::MaximumAlignment, llvm::TargetOpcode::PHI, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), pushValue(), PushValueAndType(), pushValueSigned(), llvm::MipsISD::Ret, llvm::MCID::Select, llvm::ValueEnumerator::setInstructionID(), SI, and llvm::SPII::Store.

Referenced by WriteFunction().

static void WriteInt32ToBuffer ( uint32_t  Value,
SmallVectorImpl< char > &  Buffer,
uint32_t &  Position 
)
static

Definition at line 2424 of file BitcodeWriter.cpp.

References llvm::support::endian::write32le().

Referenced by EmitDarwinBCHeaderAndTrailer().

static void WriteMDTuple ( const MDTuple N,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record,
unsigned  Abbrev 
)
static
static void WriteMetadataAttachment ( const Function F,
const ValueEnumerator VE,
BitstreamWriter Stream 
)
static
static void WriteModule ( const Module M,
BitstreamWriter Stream,
bool  ShouldPreserveUseListOrder 
)
static
static void WriteModuleConstants ( const ValueEnumerator VE,
BitstreamWriter Stream 
)
static

Definition at line 1632 of file BitcodeWriter.cpp.

References llvm::ValueEnumerator::getValues(), and WriteConstants().

Referenced by WriteModule().

static void WriteModuleInfo ( const Module M,
const ValueEnumerator VE,
BitstreamWriter Stream 
)
static
static void WriteModuleMetadata ( const Module M,
const ValueEnumerator VE,
BitstreamWriter Stream 
)
static
static void WriteModuleMetadataStore ( const Module M,
BitstreamWriter Stream 
)
static
static void WriteStringRecord ( unsigned  Code,
StringRef  Str,
unsigned  AbbrevToUse,
BitstreamWriter Stream 
)
static
static void WriteTypeTable ( const ValueEnumerator VE,
BitstreamWriter Stream 
)
static

WriteTypeTable - Write out the type table for a module.

Definition at line 329 of file BitcodeWriter.cpp.

References llvm::BitCodeAbbrev::Add(), llvm::BitCodeAbbrevOp::Array, llvm::Type::ArrayTyID, llvm::BitCodeAbbrevOp::Char6, llvm::SmallVectorImpl< T >::clear(), llvm::tgtok::Code, llvm::ValueEnumerator::computeBitsRequiredForTypeIndicies(), llvm::Type::DoubleTyID, llvm::StructType::element_begin(), llvm::StructType::element_end(), llvm::BitstreamWriter::EmitAbbrev(), llvm::BitstreamWriter::EmitRecord(), llvm::StringRef::empty(), llvm::BitstreamWriter::EnterSubblock(), llvm::BitstreamWriter::ExitBlock(), llvm::BitCodeAbbrevOp::Fixed, llvm::Type::FloatTyID, llvm::Type::FP128TyID, llvm::Type::FunctionTyID, llvm::PointerType::getAddressSpace(), getBitWidth(), llvm::SequentialType::getElementType(), llvm::StructType::getName(), llvm::ArrayType::getNumElements(), llvm::VectorType::getNumElements(), llvm::FunctionType::getNumParams(), llvm::FunctionType::getParamType(), llvm::FunctionType::getReturnType(), llvm::ValueEnumerator::getTypeID(), llvm::Type::getTypeID(), llvm::ValueEnumerator::getTypes(), llvm::Type::HalfTyID, I, llvm::Type::IntegerTyID, llvm::StructType::isLiteral(), llvm::StructType::isOpaque(), llvm::StructType::isPacked(), llvm::FunctionType::isVarArg(), llvm::Type::LabelTyID, llvm::Type::MetadataTyID, llvm::Type::PointerTyID, llvm::Type::PPC_FP128TyID, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::AArch64DB::ST, llvm::Type::StructTyID, T, llvm::bitc::TYPE_BLOCK_ID_NEW, 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_HALF, llvm::bitc::TYPE_CODE_INTEGER, llvm::bitc::TYPE_CODE_LABEL, llvm::bitc::TYPE_CODE_METADATA, 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_ANON, llvm::bitc::TYPE_CODE_STRUCT_NAME, llvm::bitc::TYPE_CODE_STRUCT_NAMED, llvm::bitc::TYPE_CODE_VECTOR, llvm::bitc::TYPE_CODE_VOID, llvm::bitc::TYPE_CODE_X86_FP80, llvm::bitc::TYPE_CODE_X86_MMX, llvm::BitCodeAbbrevOp::VBR, llvm::Type::VectorTyID, llvm::Type::VoidTyID, WriteStringRecord(), llvm::Type::X86_FP80TyID, and llvm::Type::X86_MMXTyID.

Referenced by WriteModule().

static void WriteUseList ( ValueEnumerator VE,
UseListOrder &&  Order,
BitstreamWriter Stream 
)
static
static void WriteUseListBlock ( const Function F,
ValueEnumerator VE,
BitstreamWriter Stream 
)
static
static void WriteValueAsMetadata ( const ValueAsMetadata MD,
const ValueEnumerator VE,
BitstreamWriter Stream,
SmallVectorImpl< uint64_t > &  Record 
)
static
static void WriteValueSymbolTable ( const ValueSymbolTable VST,
const ValueEnumerator VE,
BitstreamWriter Stream 
)
static