LLVM: lib/Bitcode/Writer/BitcodeWriter.cpp File Reference (original) (raw)
Go to the source code of this file.
| Namespaces | |
|---|---|
| namespace | llvm |
| This is an optimization pass for GlobalISel generic memory operations. |
| Macros | |
|---|---|
| #define | HANDLE_MDNODE_LEAF(CLASS) |
| #define | HANDLE_MDNODE_LEAF(CLASS) |
| #define | HANDLE_MDNODE_LEAF(CLASS) |
| Enumerations | |
|---|---|
| enum | StringEncoding { SE_Char6, SE_Fixed7, SE_Fixed8 } |
| enum | MetadataAbbrev : unsigned { LastPlusOne } |
| Variables | |
|---|---|
| static cl::opt< unsigned > | IndexThreshold ("bitcode-mdindex-threshold", cl::Hidden, cl::init(25), cl::desc("Number of metadatas above which we emit an index " "to enable lazy-loading")) |
| static cl::opt< uint32_t > | FlushThreshold ("bitcode-flush-threshold", cl::Hidden, cl::init(512), cl::desc("The threshold (unit M) for flushing LLVM bitcode.")) |
| static cl::opt< bool > | WriteRelBFToSummary ("write-relbf-to-summary", cl::Hidden, cl::init(false), cl::desc("Write relative block frequency to function summary ")) |
| static cl::opt< bool > | CombinedIndexMemProfContext ("combined-index-memprof-context", cl::Hidden, cl::init(true), cl::desc("")) |
| static cl::opt< bool > | PreserveBitcodeUseListOrder ("preserve-bc-uselistorder", cl::Hidden, cl::init(true), cl::desc("Preserve use-list order when writing LLVM bitcode.")) |
◆ HANDLE_MDNODE_LEAF [1/3]
| #define HANDLE_MDNODE_LEAF | ( | CLASS | ) |
|---|
◆ HANDLE_MDNODE_LEAF [2/3]
| #define HANDLE_MDNODE_LEAF | ( | CLASS | ) |
|---|
◆ HANDLE_MDNODE_LEAF [3/3]
| #define HANDLE_MDNODE_LEAF | ( | CLASS | ) |
|---|
Value:
case Metadata::CLASS##Kind: \
if (MDAbbrevs) \
(*MDAbbrevs)[MetadataAbbrev::CLASS##AbbrevID]); \
else \
continue;
LLVM_ABI Error write(MCStreamer &Out, ArrayRef< std::string > Inputs, OnCuIndexOverflow OverflowOptValue, Dwarf64StrOffsetsPromotion StrOffsetsOptValue)
decltype(auto) cast(const From &Val)
cast - Return the argument parameter cast to the specified type.
Definition at line 2520 of file BitcodeWriter.cpp.
◆ MetadataAbbrev
◆ StringEncoding
◆ collectMemProfCallStacks()
◆ emitConstantRange()
◆ emitDarwinBCHeaderAndTrailer()
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 5436 of file BitcodeWriter.cpp.
References llvm::Triple::arm, assert(), llvm::BWH_HeaderSize, llvm::Triple::ppc, llvm::Triple::ppc64, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorTemplateCommon< T, typename >::size(), llvm::Triple::thumb, writeInt32ToBuffer(), llvm::Triple::x86, and llvm::Triple::x86_64.
Referenced by llvm::WriteBitcodeToFile().
◆ emitSignedInt64()
◆ emitWideAPInt()
◆ getAttrKindEncoding()
| uint64_t getAttrKindEncoding ( Attribute::AttrKind Kind) | static |
|---|
Definition at line 757 of file BitcodeWriter.cpp.
References llvm::bitc::ATTR_KIND_ALIGNMENT, llvm::bitc::ATTR_KIND_ALLOC_ALIGN, llvm::bitc::ATTR_KIND_ALLOC_KIND, llvm::bitc::ATTR_KIND_ALLOC_SIZE, llvm::bitc::ATTR_KIND_ALLOCATED_POINTER, llvm::bitc::ATTR_KIND_ALWAYS_INLINE, llvm::bitc::ATTR_KIND_BUILTIN, llvm::bitc::ATTR_KIND_BY_VAL, llvm::bitc::ATTR_KIND_BYREF, llvm::bitc::ATTR_KIND_CAPTURES, llvm::bitc::ATTR_KIND_COLD, llvm::bitc::ATTR_KIND_CONVERGENT, llvm::bitc::ATTR_KIND_CORO_ELIDE_SAFE, llvm::bitc::ATTR_KIND_CORO_ONLY_DESTROY_WHEN_COMPLETE, llvm::bitc::ATTR_KIND_DEAD_ON_RETURN, llvm::bitc::ATTR_KIND_DEAD_ON_UNWIND, llvm::bitc::ATTR_KIND_DEREFERENCEABLE, llvm::bitc::ATTR_KIND_DEREFERENCEABLE_OR_NULL, llvm::bitc::ATTR_KIND_DISABLE_SANITIZER_INSTRUMENTATION, llvm::bitc::ATTR_KIND_ELEMENTTYPE, llvm::bitc::ATTR_KIND_FNRETTHUNK_EXTERN, llvm::bitc::ATTR_KIND_HOT, llvm::bitc::ATTR_KIND_HYBRID_PATCHABLE, llvm::bitc::ATTR_KIND_IMMARG, llvm::bitc::ATTR_KIND_IN_ALLOCA, llvm::bitc::ATTR_KIND_IN_REG, llvm::bitc::ATTR_KIND_INITIALIZES, llvm::bitc::ATTR_KIND_INLINE_HINT, llvm::bitc::ATTR_KIND_JUMP_TABLE, llvm::bitc::ATTR_KIND_MEMORY, llvm::bitc::ATTR_KIND_MIN_SIZE, llvm::bitc::ATTR_KIND_MUSTPROGRESS, 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_CALLBACK, llvm::bitc::ATTR_KIND_NO_CREATE_UNDEF_OR_POISON, llvm::bitc::ATTR_KIND_NO_DIVERGENCE_SOURCE, llvm::bitc::ATTR_KIND_NO_DUPLICATE, llvm::bitc::ATTR_KIND_NO_EXT, llvm::bitc::ATTR_KIND_NO_IMPLICIT_FLOAT, llvm::bitc::ATTR_KIND_NO_INLINE, llvm::bitc::ATTR_KIND_NO_MERGE, llvm::bitc::ATTR_KIND_NO_PROFILE, llvm::bitc::ATTR_KIND_NO_RECURSE, llvm::bitc::ATTR_KIND_NO_RED_ZONE, llvm::bitc::ATTR_KIND_NO_RETURN, llvm::bitc::ATTR_KIND_NO_SANITIZE_BOUNDS, llvm::bitc::ATTR_KIND_NO_SANITIZE_COVERAGE, llvm::bitc::ATTR_KIND_NO_UNWIND, llvm::bitc::ATTR_KIND_NOCF_CHECK, llvm::bitc::ATTR_KIND_NOFPCLASS, llvm::bitc::ATTR_KIND_NOFREE, llvm::bitc::ATTR_KIND_NON_LAZY_BIND, llvm::bitc::ATTR_KIND_NON_NULL, llvm::bitc::ATTR_KIND_NOSYNC, llvm::bitc::ATTR_KIND_NOUNDEF, llvm::bitc::ATTR_KIND_NULL_POINTER_IS_VALID, llvm::bitc::ATTR_KIND_OPT_FOR_FUZZING, llvm::bitc::ATTR_KIND_OPTIMIZE_FOR_DEBUGGING, llvm::bitc::ATTR_KIND_OPTIMIZE_FOR_SIZE, llvm::bitc::ATTR_KIND_OPTIMIZE_NONE, llvm::bitc::ATTR_KIND_PREALLOCATED, llvm::bitc::ATTR_KIND_PRESPLIT_COROUTINE, llvm::bitc::ATTR_KIND_RANGE, 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_ALLOC_TOKEN, llvm::bitc::ATTR_KIND_SANITIZE_HWADDRESS, llvm::bitc::ATTR_KIND_SANITIZE_MEMORY, llvm::bitc::ATTR_KIND_SANITIZE_MEMTAG, llvm::bitc::ATTR_KIND_SANITIZE_NUMERICAL_STABILITY, llvm::bitc::ATTR_KIND_SANITIZE_REALTIME, llvm::bitc::ATTR_KIND_SANITIZE_REALTIME_BLOCKING, llvm::bitc::ATTR_KIND_SANITIZE_THREAD, llvm::bitc::ATTR_KIND_SANITIZE_TYPE, llvm::bitc::ATTR_KIND_SHADOWCALLSTACK, llvm::bitc::ATTR_KIND_SKIP_PROFILE, llvm::bitc::ATTR_KIND_SPECULATABLE, llvm::bitc::ATTR_KIND_SPECULATIVE_LOAD_HARDENING, 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_STRICT_FP, llvm::bitc::ATTR_KIND_STRUCT_RET, llvm::bitc::ATTR_KIND_SWIFT_ASYNC, llvm::bitc::ATTR_KIND_SWIFT_ERROR, llvm::bitc::ATTR_KIND_SWIFT_SELF, llvm::bitc::ATTR_KIND_UW_TABLE, llvm::bitc::ATTR_KIND_VSCALE_RANGE, llvm::bitc::ATTR_KIND_WILLRETURN, llvm::bitc::ATTR_KIND_WRITABLE, llvm::bitc::ATTR_KIND_WRITEONLY, llvm::bitc::ATTR_KIND_Z_EXT, llvm::Attribute::EmptyKey, llvm::Attribute::EndAttrKinds, llvm_unreachable, llvm::Attribute::None, and llvm::Attribute::TombstoneKey.
◆ getEncodedBinaryOpcode()
Definition at line 672 of file BitcodeWriter.cpp.
References 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, and llvm_unreachable.
◆ getEncodedCastOpcode()
Definition at line 645 of file BitcodeWriter.cpp.
References llvm::bitc::CAST_ADDRSPACECAST, 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_PTRTOADDR, llvm::bitc::CAST_PTRTOINT, llvm::bitc::CAST_SEXT, llvm::bitc::CAST_SITOFP, llvm::bitc::CAST_TRUNC, llvm::bitc::CAST_UITOFP, llvm::bitc::CAST_ZEXT, and llvm_unreachable.
◆ getEncodedComdatSelectionKind()
Definition at line 1396 of file BitcodeWriter.cpp.
References llvm::Comdat::Any, llvm::CallingConv::C, llvm::bitc::COMDAT_SELECTION_KIND_ANY, llvm::bitc::COMDAT_SELECTION_KIND_EXACT_MATCH, llvm::bitc::COMDAT_SELECTION_KIND_LARGEST, llvm::bitc::COMDAT_SELECTION_KIND_NO_DUPLICATES, llvm::bitc::COMDAT_SELECTION_KIND_SAME_SIZE, llvm::Comdat::ExactMatch, llvm::Comdat::Largest, llvm_unreachable, llvm::Comdat::NoDeduplicate, and llvm::Comdat::SameSize.
◆ getEncodedDLLStorageClass()
◆ getEncodedFFlags()
◆ getEncodedGVarFlags()
◆ getEncodedGVSummaryFlags()
◆ getEncodedHotnessCallEdgeInfo()
◆ getEncodedLinkage() [1/2]
◆ getEncodedLinkage() [2/2]
Definition at line 1272 of file BitcodeWriter.cpp.
References llvm::GlobalValue::AppendingLinkage, llvm::GlobalValue::AvailableExternallyLinkage, llvm::GlobalValue::CommonLinkage, llvm::GlobalValue::ExternalLinkage, llvm::GlobalValue::ExternalWeakLinkage, llvm::GlobalValue::InternalLinkage, Linkage, llvm::GlobalValue::LinkOnceAnyLinkage, llvm::GlobalValue::LinkOnceODRLinkage, llvm_unreachable, llvm::GlobalValue::PrivateLinkage, llvm::GlobalValue::WeakAnyLinkage, and llvm::GlobalValue::WeakODRLinkage.
Referenced by getEncodedLinkage().
◆ getEncodedOrdering()
Definition at line 729 of file BitcodeWriter.cpp.
References llvm::Acquire, llvm::AcquireRelease, llvm_unreachable, llvm::Monotonic, llvm::NotAtomic, llvm::bitc::ORDERING_ACQREL, llvm::bitc::ORDERING_ACQUIRE, llvm::bitc::ORDERING_MONOTONIC, llvm::bitc::ORDERING_NOTATOMIC, llvm::bitc::ORDERING_RELEASE, llvm::bitc::ORDERING_SEQCST, llvm::bitc::ORDERING_UNORDERED, llvm::Release, llvm::SequentiallyConsistent, and llvm::Unordered.
◆ getEncodedRelBFCallEdgeInfo()
◆ getEncodedRMWOperation()
Definition at line 696 of file BitcodeWriter.cpp.
References llvm::AtomicRMWInst::Add, llvm::AtomicRMWInst::And, llvm::AtomicRMWInst::FAdd, llvm::AtomicRMWInst::FMax, llvm::AtomicRMWInst::FMaximum, llvm::AtomicRMWInst::FMin, llvm::AtomicRMWInst::FMinimum, llvm::AtomicRMWInst::FSub, llvm_unreachable, llvm::AtomicRMWInst::Max, llvm::AtomicRMWInst::Min, llvm::AtomicRMWInst::Nand, llvm::AtomicRMWInst::Or, llvm::bitc::RMW_ADD, llvm::bitc::RMW_AND, llvm::bitc::RMW_FADD, llvm::bitc::RMW_FMAX, llvm::bitc::RMW_FMAXIMUM, llvm::bitc::RMW_FMIN, llvm::bitc::RMW_FMINIMUM, llvm::bitc::RMW_FSUB, llvm::bitc::RMW_MAX, llvm::bitc::RMW_MIN, llvm::bitc::RMW_NAND, llvm::bitc::RMW_OR, llvm::bitc::RMW_SUB, llvm::bitc::RMW_UDEC_WRAP, llvm::bitc::RMW_UINC_WRAP, llvm::bitc::RMW_UMAX, llvm::bitc::RMW_UMIN, llvm::bitc::RMW_USUB_COND, llvm::bitc::RMW_USUB_SAT, llvm::bitc::RMW_XCHG, llvm::bitc::RMW_XOR, llvm::AtomicRMWInst::Sub, llvm::AtomicRMWInst::UDecWrap, llvm::AtomicRMWInst::UIncWrap, llvm::AtomicRMWInst::UMax, llvm::AtomicRMWInst::UMin, llvm::AtomicRMWInst::USubCond, llvm::AtomicRMWInst::USubSat, llvm::AtomicRMWInst::Xchg, and llvm::AtomicRMWInst::Xor.
◆ getEncodedThreadLocalMode()
◆ getEncodedUnaryOpcode()
◆ getEncodedUnnamedAddr()
◆ getEncodedVisibility()
◆ getOptimizationFlags()
Definition at line 1736 of file BitcodeWriter.cpp.
References llvm::bitc::AllowContract, llvm::bitc::AllowReassoc, llvm::bitc::AllowReciprocal, llvm::bitc::ApproxFunc, llvm::dyn_cast(), GEP, llvm::bitc::GEP_INBOUNDS, llvm::bitc::GEP_NUSW, llvm::bitc::GEP_NUW, llvm::bitc::ICMP_SAME_SIGN, llvm::bitc::NoInfs, llvm::bitc::NoNaNs, llvm::bitc::NoSignedZeros, llvm::bitc::OBO_NO_SIGNED_WRAP, llvm::bitc::OBO_NO_UNSIGNED_WRAP, llvm::bitc::PDI_DISJOINT, llvm::bitc::PEO_EXACT, llvm::bitc::PNNI_NON_NEG, llvm::bitc::TIO_NO_SIGNED_WRAP, and llvm::bitc::TIO_NO_UNSIGNED_WRAP.
◆ getReferencedTypeIds()
◆ getSectionNameForBitcode()
Definition at line 5820 of file BitcodeWriter.cpp.
References llvm::Triple::AMD, llvm::Triple::COFF, llvm::Triple::DXContainer, llvm::Triple::ELF, llvm::Triple::GOFF, llvm_unreachable, llvm::Triple::MachO, llvm::Triple::SPIRV, T, llvm::Triple::UnknownObjectFormat, llvm::Triple::Wasm, and llvm::Triple::XCOFF.
Referenced by llvm::embedBitcodeInModule().
◆ getSectionNameForCommandline()
Definition at line 5847 of file BitcodeWriter.cpp.
References llvm::Triple::AMD, llvm::Triple::COFF, llvm::Triple::DXContainer, llvm::Triple::ELF, llvm::Triple::GOFF, llvm_unreachable, llvm::Triple::MachO, llvm::Triple::SPIRV, T, llvm::Triple::UnknownObjectFormat, llvm::Triple::Wasm, and llvm::Triple::XCOFF.
Referenced by llvm::embedBitcodeInModule().
◆ getStringEncoding()
◆ serializeSanitizerMetadata()
◆ writeBitcodeHeader()
◆ writeFunctionHeapProfileRecords()
| void writeFunctionHeapProfileRecords ( BitstreamWriter & Stream, FunctionSummary * FS, unsigned CallsiteAbbrev, unsigned AllocAbbrev, unsigned ContextIdAbbvId, bool PerModule, std::function< unsigned(const ValueInfo &VI)> GetValueID, std::function< unsigned(unsigned)> GetStackIndex, bool WriteContextSizeInfoIndex, DenseMap< CallStackId, LinearCallStackId > & CallStackPos, CallStackId & CallStackCount ) | static |
|---|
Definition at line 4462 of file BitcodeWriter.cpp.
References llvm::append_range(), assert(), CombinedIndexMemProfContext, llvm::BitstreamWriter::EmitRecord(), llvm::bitc::FS_ALLOC_CONTEXT_IDS, llvm::bitc::FS_COMBINED_ALLOC_INFO, llvm::bitc::FS_COMBINED_ALLOC_INFO_NO_CONTEXT, llvm::bitc::FS_COMBINED_CALLSITE_INFO, llvm::bitc::FS_PERMODULE_ALLOC_INFO, llvm::bitc::FS_PERMODULE_CALLSITE_INFO, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorImpl< T >::reserve(), and llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::size().
◆ writeFunctionTypeMetadataRecords()
Write the function type metadata related records that need to appear before a function summary entry (whether per-module or combined).
Definition at line 4259 of file BitcodeWriter.cpp.
References llvm::append_range(), assert(), Call, llvm::BitstreamWriter::EmitRecord(), emitSignedInt64(), llvm::bitc::FS_PARAM_ACCESS, llvm::bitc::FS_TYPE_CHECKED_LOAD_CONST_VCALL, llvm::bitc::FS_TYPE_CHECKED_LOAD_VCALLS, llvm::bitc::FS_TYPE_TEST_ASSUME_CONST_VCALL, llvm::bitc::FS_TYPE_TEST_ASSUME_VCALLS, llvm::bitc::FS_TYPE_TESTS, Range, and llvm::FunctionSummary::ParamAccess::RangeWidth.
◆ writeIdentificationBlock()
Create the "IDENTIFICATION_BLOCK_ID" containing a single string with the current llvm version, and a record for the epoch number.
Definition at line 5312 of file BitcodeWriter.cpp.
References llvm::BitCodeAbbrevOp::Array, llvm::bitc::BITCODE_CURRENT_EPOCH, llvm::BitCodeAbbrevOp::Char6, llvm::BitstreamWriter::EmitAbbrev(), llvm::BitstreamWriter::EmitRecord(), llvm::BitstreamWriter::EnterSubblock(), llvm::BitstreamWriter::ExitBlock(), llvm::bitc::IDENTIFICATION_BLOCK_ID, llvm::bitc::IDENTIFICATION_CODE_EPOCH, llvm::bitc::IDENTIFICATION_CODE_STRING, llvm::BitCodeAbbrevOp::VBR, and writeStringRecord().
◆ writeInt32ToBuffer()
◆ writeMemoryProfileRadixTree()
◆ writeStringRecord()
◆ writeTypeIdCompatibleVtableSummaryRecord()
◆ writeTypeIdSummaryRecord()
◆ writeWholeProgramDevirtResolution()
◆ writeWholeProgramDevirtResolutionByArg()
◆ CombinedIndexMemProfContext
| cl::opt< bool > CombinedIndexMemProfContext("combined-index-memprof-context", cl::Hidden, cl::init(true), cl::desc("")) ( "combined-index-memprof-context" , cl::Hidden , cl::init(true) , cl::desc("") ) | static |
|---|
◆ FlushThreshold
| cl::opt< uint32_t > FlushThreshold("bitcode-flush-threshold", cl::Hidden, cl::init(512), cl::desc("The threshold (unit M) for flushing LLVM bitcode.")) ( "bitcode-flush-threshold" , cl::Hidden , cl::init(512) , cl::desc("The threshold (unit M) for flushing LLVM bitcode.") ) | static |
|---|
◆ IndexThreshold
| cl::opt< unsigned > IndexThreshold("bitcode-mdindex-threshold", cl::Hidden, cl::init(25), cl::desc("Number of metadatas above which we emit an index " "to enable lazy-loading")) ( "bitcode-mdindex-threshold" , cl::Hidden , cl::init(25) , cl::desc("Number of metadatas above which we emit an index " "to enable lazy-loading") ) | static |
|---|
◆ PreserveBitcodeUseListOrder
| cl::opt< bool > PreserveBitcodeUseListOrder("preserve-bc-uselistorder", cl::Hidden, cl::init(true), cl::desc("Preserve use-list order when writing LLVM bitcode.")) ( "preserve-bc-uselistorder" , cl::Hidden , cl::init(true) , cl::desc("Preserve use-list order when writing LLVM bitcode.") ) | static |
|---|
◆ WriteRelBFToSummary
| cl::opt< bool > WriteRelBFToSummary("write-relbf-to-summary", cl::Hidden, cl::init(false), cl::desc("Write relative block frequency to function summary ")) ( "write-relbf-to-summary" , cl::Hidden , cl::init(false) , cl::desc("Write relative block frequency to function summary ") ) | static |
|---|