|
LLVM
4.0.0
|
#include "llvm/Bitcode/BitcodeWriter.h"#include "ValueEnumerator.h"#include "llvm/ADT/StringExtras.h"#include "llvm/ADT/Triple.h"#include "llvm/Bitcode/BitstreamWriter.h"#include "llvm/Bitcode/LLVMBitCodes.h"#include "llvm/IR/CallSite.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/LLVMContext.h"#include "llvm/IR/Module.h"#include "llvm/IR/Operator.h"#include "llvm/IR/UseListOrder.h"#include "llvm/IR/ValueSymbolTable.h"#include "llvm/Support/ErrorHandling.h"#include "llvm/Support/MathExtras.h"#include "llvm/Support/Program.h"#include "llvm/Support/SHA1.h"#include "llvm/Support/raw_ostream.h"#include <cctype>#include <map>#include "llvm/IR/Metadata.def"Go to the source code of this file.
Macros | |
| #define | HANDLE_MDNODE_LEAF(CLASS) CLASS##AbbrevID, |
| #define | HANDLE_MDNODE_LEAF(CLASS) unsigned CLASS##Abbrev = 0; |
| #define | HANDLE_MDNODE_LEAF(CLASS) |
Enumerations | |
| enum | |
| These are manifest constants used by the bitcode writer. More... | |
| enum | StringEncoding { SE_Char6, SE_Fixed7, SE_Fixed8 } |
| enum | MetadataAbbrev : unsigned { LastPlusOne } |
Variables | |
| static const uint64_t | INDEX_VERSION = 3 |
| #define HANDLE_MDNODE_LEAF | ( | CLASS | ) | CLASS##AbbrevID, |
Definition at line 1865 of file BitcodeWriter.cpp.
| #define HANDLE_MDNODE_LEAF | ( | CLASS | ) | unsigned CLASS##Abbrev = 0; |
Definition at line 1865 of file BitcodeWriter.cpp.
| #define HANDLE_MDNODE_LEAF | ( | CLASS | ) |
Definition at line 1865 of file BitcodeWriter.cpp.
| 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 48 of file BitcodeWriter.cpp.
| enum MetadataAbbrev : unsigned |
| Enumerator | |
|---|---|
| LastPlusOne | |
Definition at line 1864 of file BitcodeWriter.cpp.
| enum StringEncoding |
| Enumerator | |
|---|---|
| SE_Char6 | |
| SE_Fixed7 | |
| SE_Fixed8 | |
Definition at line 1079 of file BitcodeWriter.cpp.
|
static |
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 3822 of file BitcodeWriter.cpp.
References llvm::Triple::arm, assert(), llvm::BWH_HeaderSize, llvm::Triple::getArch(), llvm::Triple::ppc, llvm::Triple::ppc64, llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), llvm::SmallVectorTemplateCommon< T, typename >::size(), llvm::Triple::thumb, writeInt32ToBuffer(), llvm::Triple::x86, and llvm::Triple::x86_64.
Referenced by llvm::WriteBitcodeToFile().
|
static |
Definition at line 2107 of file BitcodeWriter.cpp.
References llvm::SmallVectorTemplateBase< T, isPodLike >::push_back().
|
static |
Definition at line 596 of file BitcodeWriter.cpp.
References llvm::bitc::ATTR_KIND_ALIGNMENT, llvm::bitc::ATTR_KIND_ALLOC_SIZE, 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_INACCESSIBLEMEM_ONLY, llvm::bitc::ATTR_KIND_INACCESSIBLEMEM_OR_ARGMEMONLY, 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_RECURSE, 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_SWIFT_ERROR, llvm::bitc::ATTR_KIND_SWIFT_SELF, llvm::bitc::ATTR_KIND_UW_TABLE, llvm::bitc::ATTR_KIND_WRITEONLY, llvm::bitc::ATTR_KIND_Z_EXT, llvm::CallingConv::Cold, llvm::MCID::Convergent, llvm::Attribute::EndAttrKinds, llvm::ISD::JumpTable, llvm_unreachable, llvm::NoAlias, llvm::Attribute::None, AMDGPU::RuntimeMD::KernelArg::ReadOnly, and AMDGPU::RuntimeMD::KernelArg::WriteOnly.
Definition at line 519 of file BitcodeWriter.cpp.
References llvm::MCID::Add, llvm::APIntOps::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, llvm_unreachable, llvm::APIntOps::Or(), and llvm::APIntOps::Xor().
Definition at line 500 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_PTRTOINT, llvm::bitc::CAST_SEXT, llvm::bitc::CAST_SITOFP, llvm::bitc::CAST_TRUNC, llvm::bitc::CAST_UITOFP, llvm::bitc::CAST_ZEXT, and llvm_unreachable.
Definition at line 1013 of file BitcodeWriter.cpp.
References llvm::Comdat::Any, 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::getSelectionKind(), llvm::Comdat::Largest, llvm_unreachable, llvm::Comdat::NoDuplicates, and llvm::Comdat::SameSize.
|
static |
Definition at line 993 of file BitcodeWriter.cpp.
References llvm::GlobalValue::DefaultStorageClass, llvm::GlobalValue::DLLExportStorageClass, llvm::GlobalValue::DLLImportStorageClass, llvm::GlobalValue::getDLLStorageClass(), and llvm_unreachable.
|
static |
Definition at line 971 of file BitcodeWriter.cpp.
References llvm::GlobalValueSummary::GVFlags::Linkage, llvm::GlobalValueSummary::GVFlags::LiveRoot, and llvm::GlobalValueSummary::GVFlags::NotEligibleToImport.
|
static |
Definition at line 938 of file BitcodeWriter.cpp.
References llvm::GlobalValue::AppendingLinkage, llvm::GlobalValue::AvailableExternallyLinkage, llvm::GlobalValue::CommonLinkage, llvm::GlobalValue::ExternalLinkage, llvm::GlobalValue::ExternalWeakLinkage, llvm::GlobalValue::InternalLinkage, llvm::GlobalValue::LinkOnceAnyLinkage, llvm::GlobalValue::LinkOnceODRLinkage, llvm_unreachable, llvm::GlobalValue::PrivateLinkage, llvm::GlobalValue::WeakAnyLinkage, and llvm::GlobalValue::WeakODRLinkage.
Referenced by getEncodedLinkage().
|
static |
Definition at line 966 of file BitcodeWriter.cpp.
References getEncodedLinkage(), and llvm::GlobalValue::getLinkage().
|
static |
Definition at line 560 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.
|
static |
Definition at line 543 of file BitcodeWriter.cpp.
References llvm::AtomicRMWInst::Add, llvm::AtomicRMWInst::And, 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_MAX, llvm::bitc::RMW_MIN, llvm::bitc::RMW_NAND, llvm::bitc::RMW_OR, llvm::bitc::RMW_SUB, llvm::bitc::RMW_UMAX, llvm::bitc::RMW_UMIN, llvm::bitc::RMW_XCHG, llvm::bitc::RMW_XOR, llvm::AtomicRMWInst::Sub, llvm::AtomicRMWInst::UMax, llvm::AtomicRMWInst::UMin, llvm::AtomicRMWInst::Xchg, and llvm::AtomicRMWInst::Xor.
|
static |
Definition at line 573 of file BitcodeWriter.cpp.
References llvm::CrossThread, llvm_unreachable, llvm::SingleThread, llvm::bitc::SYNCHSCOPE_CROSSTHREAD, and llvm::bitc::SYNCHSCOPE_SINGLETHREAD.
|
static |
Definition at line 1002 of file BitcodeWriter.cpp.
References llvm::GlobalValue::GeneralDynamicTLSModel, llvm::GlobalValue::getThreadLocalMode(), llvm::GlobalValue::InitialExecTLSModel, llvm_unreachable, llvm::GlobalValue::LocalDynamicTLSModel, llvm::GlobalValue::LocalExecTLSModel, and llvm::GlobalValue::NotThreadLocal.
|
static |
Definition at line 1029 of file BitcodeWriter.cpp.
References llvm::GlobalValue::getUnnamedAddr(), llvm::GlobalValue::Global, llvm_unreachable, llvm::GlobalValue::Local, and llvm::GlobalValue::None.
|
static |
Definition at line 984 of file BitcodeWriter.cpp.
References llvm::GlobalValue::DefaultVisibility, llvm::GlobalValue::getVisibility(), llvm::GlobalValue::HiddenVisibility, llvm_unreachable, and llvm::GlobalValue::ProtectedVisibility.
Definition at line 1307 of file BitcodeWriter.cpp.
References llvm::FastMathFlags::AllowReciprocal, fuzzer::Flags, llvm::FastMathFlags::NoInfs, llvm::FastMathFlags::NoNaNs, llvm::FastMathFlags::NoSignedZeros, llvm::bitc::OBO_NO_SIGNED_WRAP, llvm::bitc::OBO_NO_UNSIGNED_WRAP, llvm::bitc::PEO_EXACT, and llvm::FastMathFlags::UnsafeAlgebra.
|
static |
Determine the encoding to use for the given string name and length.
Definition at line 1082 of file BitcodeWriter.cpp.
References C, E, llvm::BitCodeAbbrevOp::isChar6(), SE_Char6, SE_Fixed7, and SE_Fixed8.
|
static |
Definition at line 1419 of file BitcodeWriter.cpp.
References I.
|
static |
Helper to write the header common to all bitcode files.
Definition at line 3869 of file BitcodeWriter.cpp.
References llvm::BitstreamWriter::Emit().
Referenced by llvm::BitcodeWriter::BitcodeWriter(), and llvm::WriteIndexToFile().
| void writeIdentificationBlock | ( | BitstreamWriter & | Stream | ) |
Create the "IDENTIFICATION_BLOCK_ID" containing a single string with the current llvm version, and a record for the epoch number.
Definition at line 3700 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().
|
static |
Definition at line 3803 of file BitcodeWriter.cpp.
References llvm::support::endian::write32le().
Referenced by emitDarwinBCHeaderAndTrailer().
|
static |
Definition at line 581 of file BitcodeWriter.cpp.
References llvm::BitstreamWriter::EmitRecord(), i, llvm::BitCodeAbbrevOp::isChar6(), llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::StringRef::size(), and Vals.
Referenced by writeIdentificationBlock().
|
static |
Definition at line 3437 of file BitcodeWriter.cpp.
1.8.6