LLVM
13.0.0git
|
#include "llvm/Bitcode/BitcodeReader.h"
#include "MetadataLoader.h"
#include "ValueList.h"
#include "llvm/ADT/APFloat.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/Optional.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/ADT/Triple.h"
#include "llvm/ADT/Twine.h"
#include "llvm/Bitcode/BitcodeCommon.h"
#include "llvm/Bitcode/LLVMBitCodes.h"
#include "llvm/Bitstream/BitstreamReader.h"
#include "llvm/Config/llvm-config.h"
#include "llvm/IR/Argument.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/AutoUpgrade.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/CallingConv.h"
#include "llvm/IR/Comdat.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DebugInfo.h"
#include "llvm/IR/DebugInfoMetadata.h"
#include "llvm/IR/DebugLoc.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GVMaterializer.h"
#include "llvm/IR/GlobalAlias.h"
#include "llvm/IR/GlobalIFunc.h"
#include "llvm/IR/GlobalIndirectSymbol.h"
#include "llvm/IR/GlobalObject.h"
#include "llvm/IR/GlobalValue.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/InlineAsm.h"
#include "llvm/IR/InstIterator.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Metadata.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/ModuleSummaryIndex.h"
#include "llvm/IR/Operator.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Value.h"
#include "llvm/IR/Verifier.h"
#include "llvm/Support/AtomicOrdering.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/Error.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/ErrorOr.h"
#include "llvm/Support/ManagedStatic.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/MemoryBuffer.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <deque>
#include <map>
#include <memory>
#include <set>
#include <string>
#include <system_error>
#include <tuple>
#include <utility>
#include <vector>
Go to the source code of this file.
Functions | |
static Error | error (const Twine &Message) |
static Error | hasInvalidBitcodeHeader (BitstreamCursor &Stream) |
static Expected< BitstreamCursor > | initStream (MemoryBufferRef Buffer) |
template<typename StrTy > | |
static bool | convertToString (ArrayRef< uint64_t > Record, unsigned Idx, StrTy &Result) |
Convert a string from a record into an std::string, return true on failure. More... | |
static void | stripTBAA (Module *M) |
static Expected< std::string > | readIdentificationBlock (BitstreamCursor &Stream) |
Read the "IDENTIFICATION_BLOCK_ID" block, do some basic enforcement on the "epoch" encoded in the bitcode, and return the producer name if any. More... | |
static Expected< std::string > | readIdentificationCode (BitstreamCursor &Stream) |
static Expected< bool > | hasObjCCategoryInModule (BitstreamCursor &Stream) |
static Expected< bool > | hasObjCCategory (BitstreamCursor &Stream) |
static Expected< std::string > | readModuleTriple (BitstreamCursor &Stream) |
static Expected< std::string > | readTriple (BitstreamCursor &Stream) |
static bool | hasImplicitComdat (size_t Val) |
static GlobalValue::LinkageTypes | getDecodedLinkage (unsigned Val) |
static FunctionSummary::FFlags | getDecodedFFlags (uint64_t RawFlags) |
static GlobalValueSummary::GVFlags | getDecodedGVSummaryFlags (uint64_t RawFlags, uint64_t Version) |
static GlobalVarSummary::GVarFlags | getDecodedGVarFlags (uint64_t RawFlags) |
static GlobalValue::VisibilityTypes | getDecodedVisibility (unsigned Val) |
static GlobalValue::DLLStorageClassTypes | getDecodedDLLStorageClass (unsigned Val) |
static bool | getDecodedDSOLocal (unsigned Val) |
static GlobalVariable::ThreadLocalMode | getDecodedThreadLocalMode (unsigned Val) |
static GlobalVariable::UnnamedAddr | getDecodedUnnamedAddrType (unsigned Val) |
static int | getDecodedCastOpcode (unsigned Val) |
static int | getDecodedUnaryOpcode (unsigned Val, Type *Ty) |
static int | getDecodedBinaryOpcode (unsigned Val, Type *Ty) |
static AtomicRMWInst::BinOp | getDecodedRMWOperation (unsigned Val) |
static AtomicOrdering | getDecodedOrdering (unsigned Val) |
static Comdat::SelectionKind | getDecodedComdatSelectionKind (unsigned Val) |
static FastMathFlags | getDecodedFastMathFlags (unsigned Val) |
static void | upgradeDLLImportExportLinkage (GlobalValue *GV, unsigned Val) |
static uint64_t | getRawAttributeMask (Attribute::AttrKind Val) |
static void | addRawAttributeValue (AttrBuilder &B, uint64_t Val) |
static void | decodeLLVMAttributesForBitcode (AttrBuilder &B, uint64_t EncodedAttrs) |
This fills an AttrBuilder object with the LLVM attributes that have been decoded from the given integer. More... | |
static Attribute::AttrKind | getAttrFromCode (uint64_t Code) |
static Expected< uint64_t > | jumpToValueSymbolTable (uint64_t Offset, BitstreamCursor &Stream) |
Helper to note and return the current location, and jump to the given offset. More... | |
static void | inferDSOLocal (GlobalValue *GV) |
static void | parseWholeProgramDevirtResolutionByArg (ArrayRef< uint64_t > Record, size_t &Slot, WholeProgramDevirtResolution &Wpd) |
static void | parseWholeProgramDevirtResolution (ArrayRef< uint64_t > Record, StringRef Strtab, size_t &Slot, TypeIdSummary &TypeId) |
static void | parseTypeIdSummaryRecord (ArrayRef< uint64_t > Record, StringRef Strtab, ModuleSummaryIndex &TheIndex) |
static void | setSpecialRefs (std::vector< ValueInfo > &Refs, unsigned ROCnt, unsigned WOCnt) |
static Expected< StringRef > | readBlobInRecord (BitstreamCursor &Stream, unsigned Block, unsigned RecordID) |
static Expected< bool > | getEnableSplitLTOUnitFlag (BitstreamCursor &Stream, unsigned ID) |
static Expected< BitcodeModule > | getSingleModule (MemoryBufferRef Buffer) |
Variables | |
static cl::opt< bool > | PrintSummaryGUIDs ("print-summary-global-ids", cl::init(false), cl::Hidden, cl::desc("Print the global id for each value when reading the module summary")) |
static ManagedStatic< BitcodeErrorCategoryType > | ErrorCategory |
|
static |
Definition at line 1305 of file BitcodeReader.cpp.
References A, B, getRawAttributeMask(), I, and llvm::None.
Referenced by decodeLLVMAttributesForBitcode().
|
static |
Convert a string from a record into an std::string, return true on failure.
Definition at line 151 of file BitcodeReader.cpp.
|
static |
This fills an AttrBuilder object with the LLVM attributes that have been decoded from the given integer.
This function must stay in sync with 'encodeLLVMAttributesForBitcode'.
Definition at line 1324 of file BitcodeReader.cpp.
References addRawAttributeValue(), assert(), B, and llvm::isPowerOf2_32().
Definition at line 103 of file BitcodeReader.cpp.
References llvm::CorruptedBitcode, and llvm::make_error_code().
Referenced by getSingleModule(), and initStream().
|
static |
Definition at line 1401 of file BitcodeReader.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_BYREF, 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_HOT, llvm::bitc::ATTR_KIND_IMMARG, 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_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_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_MERGE, 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_NOCF_CHECK, 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_SIZE, llvm::bitc::ATTR_KIND_OPTIMIZE_NONE, llvm::bitc::ATTR_KIND_PREALLOCATED, 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_HWADDRESS, llvm::bitc::ATTR_KIND_SANITIZE_MEMORY, llvm::bitc::ATTR_KIND_SANITIZE_MEMTAG, llvm::bitc::ATTR_KIND_SANITIZE_THREAD, llvm::bitc::ATTR_KIND_SHADOWCALLSTACK, 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_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_WRITEONLY, llvm::bitc::ATTR_KIND_Z_EXT, llvm::tgtok::Code, llvm::CallingConv::Cold, llvm::MCID::Convergent, JumpTable, llvm::None, and llvm::orc::ReadOnly.
Definition at line 1083 of file BitcodeReader.cpp.
References llvm::MCID::Add, 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::Type::isFPOrFPVectorTy(), and llvm::Type::isIntOrIntVectorTy().
|
static |
Definition at line 1050 of file BitcodeReader.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, and llvm::bitc::CAST_ZEXT.
|
static |
Definition at line 1153 of file BitcodeReader.cpp.
References llvm::SystemZICMP::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, and llvm::bitc::COMDAT_SELECTION_KIND_SAME_SIZE.
|
static |
Definition at line 1013 of file BitcodeReader.cpp.
|
static |
Definition at line 1022 of file BitcodeReader.cpp.
|
static |
Definition at line 1169 of file BitcodeReader.cpp.
References llvm::bitc::AllowContract, llvm::bitc::AllowReassoc, llvm::bitc::AllowReciprocal, llvm::bitc::ApproxFunc, llvm::bitc::NoInfs, llvm::bitc::NoNaNs, llvm::bitc::NoSignedZeros, llvm::FastMathFlags::setAllowContract(), llvm::FastMathFlags::setAllowReassoc(), llvm::FastMathFlags::setAllowReciprocal(), llvm::FastMathFlags::setApproxFunc(), llvm::FastMathFlags::setFast(), llvm::FastMathFlags::setNoInfs(), llvm::FastMathFlags::setNoNaNs(), llvm::FastMathFlags::setNoSignedZeros(), and llvm::bitc::UnsafeAlgebra.
|
static |
Definition at line 960 of file BitcodeReader.cpp.
References llvm::FunctionSummary::FFlags::AlwaysInline, llvm::FunctionSummary::FFlags::NoInline, llvm::FunctionSummary::FFlags::NoRecurse, llvm::FunctionSummary::FFlags::ReadNone, llvm::FunctionSummary::FFlags::ReadOnly, and llvm::FunctionSummary::FFlags::ReturnDoesNotAlias.
|
static |
Definition at line 996 of file BitcodeReader.cpp.
References x2().
|
static |
Definition at line 975 of file BitcodeReader.cpp.
References llvm::IndexedInstrProf::Version.
|
static |
Definition at line 918 of file BitcodeReader.cpp.
|
static |
Definition at line 1140 of file BitcodeReader.cpp.
References 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, and Unordered.
|
static |
Definition at line 1121 of file BitcodeReader.cpp.
References llvm::MCID::Add, llvm::bitc::RMW_ADD, llvm::bitc::RMW_AND, llvm::bitc::RMW_FADD, 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_UMAX, llvm::bitc::RMW_UMIN, llvm::bitc::RMW_XCHG, and llvm::bitc::RMW_XOR.
|
static |
Definition at line 1030 of file BitcodeReader.cpp.
Definition at line 1069 of file BitcodeReader.cpp.
References llvm::Type::isFPOrFPVectorTy(), llvm::Type::isIntOrIntVectorTy(), and llvm::bitc::UNOP_FNEG.
|
static |
Definition at line 1041 of file BitcodeReader.cpp.
References llvm::None.
|
static |
Definition at line 1003 of file BitcodeReader.cpp.
|
static |
Definition at line 6858 of file BitcodeReader.cpp.
|
static |
Definition at line 1227 of file BitcodeReader.cpp.
References llvm::CallingConv::Cold, llvm::MCID::Convergent, JumpTable, llvm_unreachable, llvm::None, and llvm::orc::ReadOnly.
Referenced by addRawAttributeValue().
|
static |
Definition at line 6958 of file BitcodeReader.cpp.
References error(), llvm::getBitcodeModuleList(), and llvm::Expected< T >::takeError().
Referenced by llvm::getBitcodeLTOInfo(), llvm::getLazyBitcodeModule(), llvm::getModuleSummaryIndex(), llvm::parseBitcodeFile(), and llvm::readModuleSummaryIndex().
|
static |
Definition at line 906 of file BitcodeReader.cpp.
|
static |
Definition at line 108 of file BitcodeReader.cpp.
References llvm::BitstreamCursor::canSkipToPos(), llvm::createStringError(), llvm::BitstreamCursor::Read(), and llvm::Error::success().
|
static |
Definition at line 304 of file BitcodeReader.cpp.
Referenced by llvm::isBitcodeContainingObjCCategory().
|
static |
Definition at line 257 of file BitcodeReader.cpp.
|
static |
Definition at line 3177 of file BitcodeReader.cpp.
References llvm::GlobalValue::hasDefaultVisibility(), llvm::GlobalValue::hasExternalWeakLinkage(), llvm::GlobalValue::hasLocalLinkage(), and llvm::GlobalValue::setDSOLocal().
|
static |
Definition at line 129 of file BitcodeReader.cpp.
References error(), llvm::MemoryBufferRef::getBufferSize(), llvm::MemoryBufferRef::getBufferStart(), llvm::isBitcodeWrapper(), and llvm::SkipBitcodeWrapperHeader().
Referenced by llvm::getBitcodeFileContents(), llvm::getBitcodeProducerString(), llvm::getBitcodeTargetTriple(), and llvm::isBitcodeContainingObjCCategory().
|
static |
Helper to note and return the current location, and jump to the given offset.
Definition at line 2067 of file BitcodeReader.cpp.
References llvm::BitstreamCursor::advance(), assert(), llvm::Expected< T >::get(), llvm::BitstreamCursor::GetCurrentBitNo(), llvm::BitstreamCursor::JumpToBit(), move, Offset, llvm::Expected< T >::takeError(), and llvm::bitc::VALUE_SYMTAB_BLOCK_ID.
|
static |
Definition at line 6007 of file BitcodeReader.cpp.
References llvm::TypeTestResolution::AlignLog2, llvm::TypeTestResolution::BitMask, llvm::StringRef::data(), llvm::ModuleSummaryIndex::getOrInsertTypeIdSummary(), llvm::TypeTestResolution::InlineBits, parseWholeProgramDevirtResolution(), llvm::TypeTestResolution::SizeM1, llvm::TypeTestResolution::SizeM1BitWidth, llvm::TypeTestResolution::TheKind, and llvm::TypeIdSummary::TTRes.
|
static |
Definition at line 5991 of file BitcodeReader.cpp.
References llvm::StringRef::data(), I, parseWholeProgramDevirtResolutionByArg(), llvm::WholeProgramDevirtResolution::SingleImplName, llvm::WholeProgramDevirtResolution::TheKind, and llvm::TypeIdSummary::WPDRes.
Referenced by parseTypeIdSummaryRecord().
|
static |
Definition at line 5977 of file BitcodeReader.cpp.
References B, and llvm::WholeProgramDevirtResolution::ResByArg.
Referenced by parseWholeProgramDevirtResolution().
|
static |
Definition at line 6608 of file BitcodeReader.cpp.
|
static |
Read the "IDENTIFICATION_BLOCK_ID" block, do some basic enforcement on the "epoch" encoded in the bitcode, and return the producer name if any.
Definition at line 172 of file BitcodeReader.cpp.
|
static |
Definition at line 222 of file BitcodeReader.cpp.
References llvm::BitstreamCursor::AtEndOfStream().
Referenced by llvm::getBitcodeProducerString().
|
static |
Definition at line 338 of file BitcodeReader.cpp.
|
static |
Definition at line 383 of file BitcodeReader.cpp.
References llvm::BitstreamCursor::advance(), and llvm::Expected< T >::takeError().
Referenced by llvm::getBitcodeTargetTriple().
|
static |
Definition at line 6082 of file BitcodeReader.cpp.
References assert().
|
static |
Definition at line 161 of file BitcodeReader.cpp.
References F, I, llvm::instructions(), and M.
|
static |
Definition at line 1190 of file BitcodeReader.cpp.
References llvm::GlobalValue::setDLLStorageClass().
|
static |
Definition at line 6602 of file BitcodeReader.cpp.
Referenced by llvm::BitcodeErrorCategory().