LLVM  15.0.0git
Functions | Variables
BitcodeReader.cpp File Reference
#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/GetElementPtrTypeIterator.h"
#include "llvm/IR/GlobalAlias.h"
#include "llvm/IR/GlobalIFunc.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/IntrinsicsAArch64.h"
#include "llvm/IR/IntrinsicsARM.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< BitstreamCursorinitStream (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_tjumpToValueSymbolTable (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< StringRefreadBlobInRecord (BitstreamCursor &Stream, unsigned Block, unsigned RecordID)
 
static Expected< bool > getEnableSplitLTOUnitFlag (BitstreamCursor &Stream, unsigned ID)
 
static Expected< BitcodeModulegetSingleModule (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
 

Function Documentation

◆ addRawAttributeValue()

static void addRawAttributeValue ( AttrBuilder B,
uint64_t  Val 
)
static

Definition at line 1371 of file BitcodeReader.cpp.

References A, B, getRawAttributeMask(), I, and llvm::None.

Referenced by decodeLLVMAttributesForBitcode().

◆ convertToString()

template<typename StrTy >
static bool convertToString ( ArrayRef< uint64_t Record,
unsigned  Idx,
StrTy &  Result 
)
static

Convert a string from a record into an std::string, return true on failure.

Definition at line 153 of file BitcodeReader.cpp.

◆ decodeLLVMAttributesForBitcode()

static void decodeLLVMAttributesForBitcode ( AttrBuilder B,
uint64_t  EncodedAttrs 
)
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 1392 of file BitcodeReader.cpp.

References addRawAttributeValue(), assert(), B, and llvm::isPowerOf2_32().

◆ error()

static Error error ( const Twine Message)
static

◆ getAttrFromCode()

static Attribute::AttrKind getAttrFromCode ( uint64_t  Code)
static

Definition at line 1469 of file BitcodeReader.cpp.

References llvm::bitc::ATTR_KIND_ALIGNMENT, llvm::bitc::ATTR_KIND_ALLOC_ALIGN, llvm::bitc::ATTR_KIND_ALLOC_SIZE, llvm::bitc::ATTR_KIND_ALLOCATED_POINTER, 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_DISABLE_SANITIZER_INSTRUMENTATION, llvm::bitc::ATTR_KIND_ELEMENTTYPE, 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_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_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_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_WRITEONLY, llvm::bitc::ATTR_KIND_Z_EXT, llvm::tgtok::Code, llvm::CallingConv::Cold, llvm::MCID::Convergent, JumpTable, and llvm::None.

◆ getDecodedBinaryOpcode()

static int getDecodedBinaryOpcode ( unsigned  Val,
Type Ty 
)
static

◆ getDecodedCastOpcode()

static int getDecodedCastOpcode ( unsigned  Val)
static

◆ getDecodedComdatSelectionKind()

static Comdat::SelectionKind getDecodedComdatSelectionKind ( unsigned  Val)
static

◆ getDecodedDLLStorageClass()

static GlobalValue::DLLStorageClassTypes getDecodedDLLStorageClass ( unsigned  Val)
static

Definition at line 1016 of file BitcodeReader.cpp.

◆ getDecodedDSOLocal()

static bool getDecodedDSOLocal ( unsigned  Val)
static

Definition at line 1025 of file BitcodeReader.cpp.

◆ getDecodedFastMathFlags()

static FastMathFlags getDecodedFastMathFlags ( unsigned  Val)
static

◆ getDecodedFFlags()

static FunctionSummary::FFlags getDecodedFFlags ( uint64_t  RawFlags)
static

◆ getDecodedGVarFlags()

static GlobalVarSummary::GVarFlags getDecodedGVarFlags ( uint64_t  RawFlags)
static

Definition at line 999 of file BitcodeReader.cpp.

References x2().

◆ getDecodedGVSummaryFlags()

static GlobalValueSummary::GVFlags getDecodedGVSummaryFlags ( uint64_t  RawFlags,
uint64_t  Version 
)
static

Definition at line 978 of file BitcodeReader.cpp.

References Version.

◆ getDecodedLinkage()

static GlobalValue::LinkageTypes getDecodedLinkage ( unsigned  Val)
static

Definition at line 917 of file BitcodeReader.cpp.

◆ getDecodedOrdering()

static AtomicOrdering getDecodedOrdering ( unsigned  Val)
static

◆ getDecodedRMWOperation()

static AtomicRMWInst::BinOp getDecodedRMWOperation ( unsigned  Val)
static

◆ getDecodedThreadLocalMode()

static GlobalVariable::ThreadLocalMode getDecodedThreadLocalMode ( unsigned  Val)
static

Definition at line 1033 of file BitcodeReader.cpp.

◆ getDecodedUnaryOpcode()

static int getDecodedUnaryOpcode ( unsigned  Val,
Type Ty 
)
static

◆ getDecodedUnnamedAddrType()

static GlobalVariable::UnnamedAddr getDecodedUnnamedAddrType ( unsigned  Val)
static

Definition at line 1044 of file BitcodeReader.cpp.

References llvm::None.

◆ getDecodedVisibility()

static GlobalValue::VisibilityTypes getDecodedVisibility ( unsigned  Val)
static

Definition at line 1006 of file BitcodeReader.cpp.

◆ getEnableSplitLTOUnitFlag()

static Expected<bool> getEnableSplitLTOUnitFlag ( BitstreamCursor Stream,
unsigned  ID 
)
static

Definition at line 7372 of file BitcodeReader.cpp.

◆ getRawAttributeMask()

static uint64_t getRawAttributeMask ( Attribute::AttrKind  Val)
static

◆ getSingleModule()

static Expected<BitcodeModule> getSingleModule ( MemoryBufferRef  Buffer)
static

◆ hasImplicitComdat()

static bool hasImplicitComdat ( size_t  Val)
static

Definition at line 905 of file BitcodeReader.cpp.

◆ hasInvalidBitcodeHeader()

static Error hasInvalidBitcodeHeader ( BitstreamCursor Stream)
static

Definition at line 110 of file BitcodeReader.cpp.

References llvm::createStringError(), and llvm::Error::success().

◆ hasObjCCategory()

static Expected<bool> hasObjCCategory ( BitstreamCursor Stream)
static

Definition at line 301 of file BitcodeReader.cpp.

Referenced by llvm::isBitcodeContainingObjCCategory().

◆ hasObjCCategoryInModule()

static Expected<bool> hasObjCCategoryInModule ( BitstreamCursor Stream)
static

Definition at line 254 of file BitcodeReader.cpp.

◆ inferDSOLocal()

static void inferDSOLocal ( GlobalValue GV)
static

◆ initStream()

static Expected<BitstreamCursor> initStream ( MemoryBufferRef  Buffer)
static

◆ jumpToValueSymbolTable()

static Expected<uint64_t> jumpToValueSymbolTable ( uint64_t  Offset,
BitstreamCursor Stream 
)
static

Helper to note and return the current location, and jump to the given offset.

Definition at line 2171 of file BitcodeReader.cpp.

References error(), llvm::Expected< T >::get(), move, Offset, llvm::Expected< T >::takeError(), and llvm::bitc::VALUE_SYMTAB_BLOCK_ID.

◆ parseTypeIdSummaryRecord()

static void parseTypeIdSummaryRecord ( ArrayRef< uint64_t Record,
StringRef  Strtab,
ModuleSummaryIndex TheIndex 
)
static

◆ parseWholeProgramDevirtResolution()

static void parseWholeProgramDevirtResolution ( ArrayRef< uint64_t Record,
StringRef  Strtab,
size_t &  Slot,
TypeIdSummary TypeId 
)
static

◆ parseWholeProgramDevirtResolutionByArg()

static void parseWholeProgramDevirtResolutionByArg ( ArrayRef< uint64_t Record,
size_t &  Slot,
WholeProgramDevirtResolution Wpd 
)
static

◆ readBlobInRecord()

static Expected<StringRef> readBlobInRecord ( BitstreamCursor Stream,
unsigned  Block,
unsigned  RecordID 
)
static

Definition at line 7126 of file BitcodeReader.cpp.

◆ readIdentificationBlock()

static Expected<std::string> readIdentificationBlock ( BitstreamCursor Stream)
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 174 of file BitcodeReader.cpp.

◆ readIdentificationCode()

static Expected<std::string> readIdentificationCode ( BitstreamCursor Stream)
static

Definition at line 222 of file BitcodeReader.cpp.

Referenced by llvm::getBitcodeProducerString().

◆ readModuleTriple()

static Expected<std::string> readModuleTriple ( BitstreamCursor Stream)
static

Definition at line 332 of file BitcodeReader.cpp.

◆ readTriple()

static Expected<std::string> readTriple ( BitstreamCursor Stream)
static

Definition at line 377 of file BitcodeReader.cpp.

References llvm::Expected< T >::takeError().

Referenced by llvm::getBitcodeTargetTriple().

◆ setSpecialRefs()

static void setSpecialRefs ( std::vector< ValueInfo > &  Refs,
unsigned  ROCnt,
unsigned  WOCnt 
)
static

Definition at line 6600 of file BitcodeReader.cpp.

References assert().

◆ stripTBAA()

static void stripTBAA ( Module M)
static

Definition at line 163 of file BitcodeReader.cpp.

References F, I, llvm::instructions(), and M.

◆ upgradeDLLImportExportLinkage()

static void upgradeDLLImportExportLinkage ( GlobalValue GV,
unsigned  Val 
)
static

Definition at line 1193 of file BitcodeReader.cpp.

References llvm::GlobalValue::setDLLStorageClass().

Variable Documentation

◆ ErrorCategory

ManagedStatic<BitcodeErrorCategoryType> ErrorCategory
static

Definition at line 7120 of file BitcodeReader.cpp.

Referenced by llvm::BitcodeErrorCategory().

◆ PrintSummaryGUIDs

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