mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-20 03:23:01 +02:00
5f415496c7
I tried to run llvm-pdbdump on a very large (~1.5GB) PDB to try and identify show-stopping performance problems. This patch addresses the first such problem. When loading the DBI stream, before anyone has even tried to access a single record, we build an in memory map of every source file for every module. In the particular PDB I was using, this was over 85 million files. Specifically, the complexity is O(m*n) where m is the number of modules and n is the average number of source files (including headers) per module. The whole reason for doing this was so that we could have constant time access to any module and any of its source file lists. However, we can still get O(1) access to the source file list for a given module with a simple O(m) precomputation, and access to the list of modules is already O(1) anyway. So this patches reduces the O(m*n) up-front precomputation to an O(m) one, where n is ~6,500 and n*m is about 85 million in my pathological test case. Differential Revision: https://reviews.llvm.org/D32870 llvm-svn: 302205
113 lines
3.0 KiB
CMake
113 lines
3.0 KiB
CMake
macro(add_pdb_impl_folder group)
|
|
list(APPEND PDB_IMPL_SOURCES ${ARGN})
|
|
source_group(${group} FILES ${ARGN})
|
|
endmacro()
|
|
|
|
if(LLVM_ENABLE_DIA_SDK)
|
|
include_directories(${MSVC_DIA_SDK_DIR}/include)
|
|
set(LIBPDB_LINK_FOLDERS "${MSVC_DIA_SDK_DIR}\\lib")
|
|
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
|
|
set(LIBPDB_LINK_FOLDERS "${LIBPDB_LINK_FOLDERS}\\amd64")
|
|
endif()
|
|
file(TO_CMAKE_PATH "${LIBPDB_LINK_FOLDERS}\\diaguids.lib" LIBPDB_ADDITIONAL_LIBRARIES)
|
|
|
|
add_pdb_impl_folder(DIA
|
|
DIA/DIADataStream.cpp
|
|
DIA/DIAEnumDebugStreams.cpp
|
|
DIA/DIAEnumLineNumbers.cpp
|
|
DIA/DIAEnumSourceFiles.cpp
|
|
DIA/DIAEnumSymbols.cpp
|
|
DIA/DIAError.cpp
|
|
DIA/DIALineNumber.cpp
|
|
DIA/DIARawSymbol.cpp
|
|
DIA/DIASession.cpp
|
|
DIA/DIASourceFile.cpp
|
|
)
|
|
|
|
set(LIBPDB_ADDITIONAL_HEADER_DIRS "${LLVM_MAIN_INCLUDE_DIR}/llvm/DebugInfo/PDB/DIA")
|
|
endif()
|
|
|
|
add_pdb_impl_folder(Native
|
|
Native/DbiModuleDescriptor.cpp
|
|
Native/DbiModuleDescriptorBuilder.cpp
|
|
Native/DbiModuleList.cpp
|
|
Native/DbiStream.cpp
|
|
Native/DbiStreamBuilder.cpp
|
|
Native/EnumTables.cpp
|
|
Native/GlobalsStream.cpp
|
|
Native/GSI.cpp
|
|
Native/Hash.cpp
|
|
Native/HashTable.cpp
|
|
Native/InfoStream.cpp
|
|
Native/InfoStreamBuilder.cpp
|
|
Native/ModuleDebugStream.cpp
|
|
Native/NativeCompilandSymbol.cpp
|
|
Native/NativeEnumModules.cpp
|
|
Native/NativeExeSymbol.cpp
|
|
Native/NativeRawSymbol.cpp
|
|
Native/NamedStreamMap.cpp
|
|
Native/NativeSession.cpp
|
|
Native/PDBFile.cpp
|
|
Native/PDBFileBuilder.cpp
|
|
Native/PDBStringTable.cpp
|
|
Native/PDBStringTableBuilder.cpp
|
|
Native/PDBTypeServerHandler.cpp
|
|
Native/PublicsStream.cpp
|
|
Native/RawError.cpp
|
|
Native/SymbolStream.cpp
|
|
Native/TpiHashing.cpp
|
|
Native/TpiStream.cpp
|
|
Native/TpiStreamBuilder.cpp)
|
|
|
|
list(APPEND LIBPDB_ADDITIONAL_HEADER_DIRS "${LLVM_MAIN_INCLUDE_DIR}/llvm/DebugInfo/PDB/Native")
|
|
list(APPEND LIBPDB_ADDITIONAL_HEADER_DIRS "${LLVM_MAIN_INCLUDE_DIR}/llvm/DebugInfo/PDB")
|
|
|
|
add_llvm_library(LLVMDebugInfoPDB
|
|
GenericError.cpp
|
|
IPDBSourceFile.cpp
|
|
PDB.cpp
|
|
PDBContext.cpp
|
|
PDBExtras.cpp
|
|
PDBInterfaceAnchors.cpp
|
|
PDBSymbol.cpp
|
|
PDBSymbolAnnotation.cpp
|
|
PDBSymbolBlock.cpp
|
|
PDBSymbolCompiland.cpp
|
|
PDBSymbolCompilandDetails.cpp
|
|
PDBSymbolCompilandEnv.cpp
|
|
PDBSymbolCustom.cpp
|
|
PDBSymbolData.cpp
|
|
PDBSymbolExe.cpp
|
|
PDBSymbolFunc.cpp
|
|
PDBSymbolFuncDebugEnd.cpp
|
|
PDBSymbolFuncDebugStart.cpp
|
|
PDBSymbolLabel.cpp
|
|
PDBSymbolPublicSymbol.cpp
|
|
PDBSymbolThunk.cpp
|
|
PDBSymbolTypeArray.cpp
|
|
PDBSymbolTypeBaseClass.cpp
|
|
PDBSymbolTypeBuiltin.cpp
|
|
PDBSymbolTypeCustom.cpp
|
|
PDBSymbolTypeDimension.cpp
|
|
PDBSymbolTypeEnum.cpp
|
|
PDBSymbolTypeFriend.cpp
|
|
PDBSymbolTypeFunctionArg.cpp
|
|
PDBSymbolTypeFunctionSig.cpp
|
|
PDBSymbolTypeManaged.cpp
|
|
PDBSymbolTypePointer.cpp
|
|
PDBSymbolTypeTypedef.cpp
|
|
PDBSymbolTypeUDT.cpp
|
|
PDBSymbolTypeVTable.cpp
|
|
PDBSymbolTypeVTableShape.cpp
|
|
PDBSymbolUnknown.cpp
|
|
PDBSymbolUsingNamespace.cpp
|
|
PDBSymDumper.cpp
|
|
UDTLayout.cpp
|
|
${PDB_IMPL_SOURCES}
|
|
|
|
ADDITIONAL_HEADER_DIRS
|
|
${LIBPDB_ADDITIONAL_HEADER_DIRS}
|
|
)
|
|
|
|
target_link_libraries(LLVMDebugInfoPDB INTERFACE "${LIBPDB_ADDITIONAL_LIBRARIES}")
|