llvm-mirror/lib/Support
Alexandre Ganea 1c64f56c35 [Support] On Windows, add optional support for {rpmalloc|snmalloc|mimalloc}
This patch optionally replaces the CRT allocator (i.e., malloc and free) with rpmalloc (mixed public domain licence/MIT licence) or snmalloc (MIT licence) or mimalloc (MIT licence). Please note that the source code for these allocators must be available outside of LLVM's tree.

To enable, use `cmake ... -DLLVM_INTEGRATED_CRT_ALLOC=D:/git/rpmalloc -DLLVM_USE_CRT_RELEASE=MT` where `D:/git/rpmalloc` has already been git clone'd from `https://github.com/mjansson/rpmalloc`. The same applies to snmalloc and mimalloc.

When enabled, the allocator will be embeded (statically linked) into the LLVM tools & libraries. This currently only works with the static CRT (/MT), although using the dynamic CRT (/MD) could potentially work as well in the future.

When enabled, this changes the memory stack from:
  new/delete -> MS VC++ CRT malloc/free -> HeapAlloc -> VirtualAlloc
to:
  new/delete -> {rpmalloc|snmalloc|mimalloc} -> VirtualAlloc

The goal of this patch is to bypass the application's global heap - which is thread-safe thus inducing locking - and instead take advantage of a modern lock-free, thread cache, allocator. On a 6-core Xeon Skylake we observe a 2.5x decrease in execution time when linking a large scale application with LLD and ThinLTO (12 min 20 sec -> 5 min 34 sec), when all hardware threads are being used (using LLD's flag /opt:lldltojobs=all). On a dual 36-core Xeon Skylake with all hardware threads used, we observe a 24x decrease in execution time (1 h 2 min -> 2 min 38 sec) when linking a large application with LLD and ThinLTO. Clang build times also see a decrease in the range 5-10% depending on the configuration.

Differential Revision: https://reviews.llvm.org/D71786
2020-08-27 11:09:46 -04:00
..
Unix [SystemZ/ZOS] Add header file to encapsulate use of <sysexits.h> 2020-08-26 12:44:30 -04:00
Windows [Support][Windows] Fix incorrect GetFinalPathNameByHandleW() return value check in realPathFromHandle() 2020-08-26 22:11:44 +03:00
AArch64TargetParser.cpp AArch6/ARMTargetParser.h - move Triple.h dependency down to cpp file. NFC. 2020-05-08 11:10:28 +01:00
ABIBreak.cpp Move LLVM_ENABLE_ABI_BREAKING_CHECKS variables to their own file 2019-09-10 22:05:01 +00:00
Allocator.cpp Revert "[Support] Explicitly instantiate BumpPtrAllocatorImpl" 2020-01-18 09:33:00 -08:00
AMDGPUMetadata.cpp AMDGPU: Remove .value_type from kernel metadata 2020-07-10 18:16:31 -04:00
APFixedPoint.cpp [ADT] Move FixedPoint.h from Clang to LLVM. 2020-08-20 10:29:45 +02:00
APFloat.cpp Fix convertBFloatAPFloatToAPInt for NaN/Inf values 2020-06-05 17:22:43 -07:00
APInt.cpp [ADT] Make Load(AP)IntFromMemory pointer argument const 2020-07-13 17:32:54 +02:00
APSInt.cpp ADT: Fix that APSInt's string constructor claims it requires 5 bits to store a zero 2020-06-10 16:36:33 +02:00
ARMAttributeParser.cpp [RISCV] ELF attribute section for RISC-V. 2020-03-31 16:16:19 +08:00
ARMBuildAttrs.cpp [RISCV] ELF attribute section for RISC-V. 2020-03-31 16:16:19 +08:00
ARMTargetParser.cpp [Driver][ARM] Disable unsupported features when nofp arch extension is used 2020-07-29 14:13:22 +01:00
ARMWinEH.cpp
Atomic.cpp
BinaryStreamError.cpp
BinaryStreamReader.cpp BinaryStream - fix static analyzer warnings. NFCI. 2019-11-08 13:20:24 +00:00
BinaryStreamRef.cpp
BinaryStreamWriter.cpp
BlockFrequency.cpp
BranchProbability.cpp Make some static class members constexpr 2020-04-22 12:25:01 +02:00
BuryPointer.cpp
CachePruning.cpp CachePruning.h - reduce StringRef.h to Optional.h include. NFC 2020-05-08 14:06:53 +01:00
Chrono.cpp
circular_raw_ostream.cpp
CMakeLists.txt [Support] On Windows, add optional support for {rpmalloc|snmalloc|mimalloc} 2020-08-27 11:09:46 -04:00
CodeGenCoverage.cpp Introduce llvm::sys::Process::getProcessId() and adopt it 2020-04-16 15:05:37 +03:00
COM.cpp
CommandLine.cpp [llvm-symbolizer] Switch command line parsing from llvm::cl to OptTable 2020-08-04 08:53:15 -07:00
Compression.cpp [CMake] Simplify CMake handling for zlib 2020-08-11 20:22:11 -07:00
ConvertUTF.cpp
ConvertUTFWrapper.cpp [Support] Remove byte swapping from MathExtras.h 2020-02-27 17:23:48 -08:00
COPYRIGHT.regex
CrashRecoveryContext.cpp [SystemZ/ZOS] Add header file to encapsulate use of <sysexits.h> 2020-08-26 12:44:30 -04:00
CRC.cpp [CMake] Simplify CMake handling for zlib 2020-08-11 20:22:11 -07:00
DAGDeltaAlgorithm.cpp
DataExtractor.cpp [Support] Make DataExtractor error messages more clear 2020-06-02 12:57:51 +02:00
Debug.cpp Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
DebugCounter.cpp DebugCounterList::printOptionInfo - use const auto& iterator in for-range-loop. 2020-07-09 11:37:49 +01:00
DeltaAlgorithm.cpp
DJB.cpp Revert "Forward declare Optional<T> in STLExtras.h" 2019-11-13 16:36:21 -08:00
DynamicLibrary.cpp
ELFAttributeParser.cpp [RISCV] Support RISC-V ELF attributes sections in llvm-readobj. 2020-04-01 21:50:11 +08:00
ELFAttributes.cpp [RISCV] ELF attribute section for RISC-V. 2020-03-31 16:16:19 +08:00
Errno.cpp Remove some autoconf references from docs and comments 2019-07-03 09:57:59 +00:00
Error.cpp [Error] Remove a broken code fragment accidentally included in 76bcbaafab2. 2019-11-20 17:50:22 -08:00
ErrorHandling.cpp Allow multiple calls to InitLLVM() (NFC) 2020-08-21 06:13:00 +00:00
ExtensibleRTTI.cpp [Support] Add missing files from e823068306e. 2020-04-13 13:30:45 -07:00
FileCheck.cpp Test all CHECK-NOT in a block even if one fails 2020-08-24 15:45:05 +01:00
FileCheckImpl.h [FileCheck] Report captured variables 2020-07-28 19:15:18 -04:00
FileCollector.cpp [llvm] Don't create the directory hierarchy in the FileCollector... 2020-08-17 11:21:39 -07:00
FileOutputBuffer.cpp FileOutputBuffer.h - remove unused includes. NFC. 2020-05-28 14:38:12 +01:00
FileUtilities.cpp std::isspace -> llvm::isSpace (where locale should be ignored) 2020-05-02 15:36:04 +02:00
FoldingSet.cpp [Support] FoldingSetNodeID::AddString(): reserve memory 2020-06-08 23:26:54 +03:00
FormattedStream.cpp [Support] Fix signed/unsigned comparison warning 2020-07-08 11:26:10 +01:00
FormatVariadic.cpp [NFC] Simplify splitLiteralAndReplacement function 2020-07-22 15:32:32 -07:00
GlobPattern.cpp Revert rGca18ce1a00cd8b7cb7ce0e130440f5ae1ffe86ee "GlobPattern.h - remove unnecessary BitVector.h/StringRef.h includes. NFC" 2020-05-17 18:51:21 +01:00
GraphWriter.cpp Fix SelectionDAG Graph Printing on Windows 2020-05-05 17:01:05 -07:00
Hashing.cpp
Host.cpp [X86] Support -march=sapphirerapids 2020-08-25 14:21:21 +08:00
InitLLVM.cpp llvm-ar: Fix MinGW compilation 2020-02-28 09:59:24 +01:00
IntEqClasses.cpp Explicitly include <cassert> when using assert 2020-03-02 22:45:28 +01:00
IntervalMap.cpp Explicitly include <cassert> when using assert 2020-03-02 22:45:28 +01:00
ItaniumManglingCanonicalizer.cpp ItaniumManglingCanonicalizer - reduce StringRef.h include to forward declaration + remove duplicate includes. NFC 2020-05-08 14:06:53 +01:00
JSON.cpp Revert "Remove redundant "std::move"s in return statements" 2020-02-10 07:07:40 -08:00
KnownBits.cpp [KnownBits] Move AND, OR and XOR logic into KnownBits 2020-04-09 10:10:37 +01:00
LEB128.cpp
LineIterator.cpp
LLVMBuild.txt
Locale.cpp
LockFileManager.cpp Introduce llvm::sys::Process::getProcessId() and adopt it 2020-04-16 15:05:37 +03:00
LowLevelType.cpp Fix parameter name comments using clang-tidy. NFC. 2019-07-16 04:46:31 +00:00
ManagedStatic.cpp [Support] Replace sys::Mutex with their standard equivalents. 2019-08-19 19:49:57 +00:00
MathExtras.cpp
MD5.cpp Avoid SmallString.h include in MD5.h, NFC 2020-02-26 09:10:24 -08:00
MemAlloc.cpp Replicate attributes on definition to make MSVC less noisy 2020-04-25 02:02:00 +02:00
Memory.cpp [Support] Renamed member 'Size' to 'AllocatedSize' in MemoryBlock and OwningMemoryBlock. 2019-05-20 20:53:05 +00:00
MemoryBuffer.cpp [Clang] Expose RequiresNullTerminator in FileManager. 2020-04-15 14:17:51 -07:00
NativeFormatting.cpp NativeFormatting.h - reduce raw_ostream.h include to forward declaration. NFC. 2020-05-09 13:32:14 +01:00
OptimizedStructLayout.cpp Rename OptimalLayout to OptimizedStructLayout at Chris's request. 2020-04-10 00:14:20 -04:00
Optional.cpp
Parallel.cpp [Support] Define llvm::parallel::strategy for -DLLVM_ENABLE_THREADS=off builds after D76885 2020-07-08 10:51:20 -07:00
Path.cpp [Clang] Restore replace_path_prefix instead of startswith 2020-05-13 13:49:14 -04:00
PluginLoader.cpp
PrettyStackTrace.cpp [Driver] When forcing a crash print the bug report message 2020-06-29 13:13:12 +01:00
Process.cpp [Clang][Driver] After default -fintegrated-cc1, make llvm::report_fatal_error() generate preprocessed source + reproducer.sh again. 2020-02-11 10:17:30 -05:00
Program.cpp [Clang] Move clang::Job::printArg to llvm::sys::printArg. NFCI. 2020-06-18 09:17:13 -04:00
RandomNumberGenerator.cpp llvm-ar: Fix MinGW compilation 2020-02-28 09:59:24 +01:00
raw_os_ostream.cpp
raw_ostream.cpp [Support] Speedup llvm-dwarfdump 3.9x 2020-08-26 10:29:46 +02:00
regcomp.c Allow Compiler.h to be included in C files and fix fallthrough warnings 2019-08-23 17:25:21 +00:00
regengine.inc
regerror.c
regex2.h
regex_impl.h
Regex.cpp [ASTMatchers] Enhanced support for matchers taking Regex arguments 2020-07-02 14:52:25 +01:00
regexec.c
regfree.c
regstrlcpy.c
regutils.h
RISCVAttributeParser.cpp [RISCV] ELF attribute section for RISC-V. 2020-03-31 16:16:19 +08:00
RISCVAttributes.cpp [RISCV] ELF attribute section for RISC-V. 2020-03-31 16:16:19 +08:00
RWMutex.cpp [RWMutex] Simplify availability check 2019-08-16 21:25:40 +00:00
ScaledNumber.cpp
ScopedPrinter.cpp
SHA1.cpp SHA1.h - remove unnecessary ArrayRef.h/StringRef.h includes. NFC. 2020-04-21 15:12:17 +01:00
Signals.cpp PrintStackTrace: don't symbolize if LLVM_DISABLE_SYMBOLIZATION is set 2020-08-21 11:27:13 -07:00
Signposts.cpp [Support] Fix Wundef warning 2019-08-15 10:05:22 +00:00
SmallPtrSet.cpp
SmallVector.cpp [NFC] Add include cstdint for SIZE_MAX. 2020-04-30 17:24:05 -07:00
SourceMgr.cpp [Support] Replace 'DisableColors' boolean with 'ColorMode' enum 2020-06-08 09:48:47 -07:00
SpecialCaseList.cpp As part of using inclusive language within the llvm project, 2020-06-20 00:24:57 -07:00
Statistic.cpp Fix "Statistics are disabled" 2020-06-03 16:10:09 -07:00
StringExtras.cpp [llvm][StringExtras] Add missing include of cctype 2020-04-14 19:29:54 -07:00
StringMap.cpp Refactor StringMap.h, splitting StringMapEntry out to its own header. 2020-04-12 08:25:17 -07:00
StringRef.cpp [StringRef] Use some trickery to avoid initializing the std::string returned by upper()/lower() 2020-05-21 16:03:09 +02:00
StringSaver.cpp Temporarily Revert "[Support] Make UniqueStringSaver wrap a StringSet" 2020-05-14 19:18:20 -07:00
SuffixTree.cpp [SuffixTree][MachOpt] Factoring out Suffix Tree and adding Unit Tests 2020-06-08 12:44:18 -07:00
SymbolRemappingReader.cpp
SystemUtils.cpp [opt] Remove obsolete --quiet option 2020-07-08 13:21:20 -07:00
TargetParser.cpp [HIP] Support target id by --offload-arch 2020-08-18 23:43:53 -04:00
TargetRegistry.cpp
TarWriter.cpp Reland D78945 TarWriter: Only use 137 of the 155 prefix bytes. 2020-04-27 10:37:23 -07:00
Threading.cpp [llvm-cov] Prevent llvm-cov from using too many threads 2020-04-24 15:28:25 -04:00
ThreadLocal.cpp
ThreadPool.cpp [Support] Simplify and optimize ThreadPool 2020-04-28 12:20:42 -07:00
TimeProfiler.cpp [TimeProfiler] Emit clock synchronization point 2020-04-23 01:09:31 +03:00
Timer.cpp [Clang][Driver] In -fintegrated-cc1 mode, avoid crashing on exit after a compiler crash 2020-03-13 08:15:35 -04:00
ToolOutputFile.cpp [Support] Use outs() in ToolOutputFile 2020-06-04 14:56:35 +02:00
TrigramIndex.cpp TrigramIndex.h - remove unnecessary StringMap.h include. NFC 2020-04-12 14:30:52 +01:00
Triple.cpp [SystemZ/ZOS] Add binary format goff and operating system zos to the triple 2020-08-11 05:26:26 -04:00
Twine.cpp
Unicode.cpp
UnicodeCaseFold.cpp
Valgrind.cpp
VersionTuple.cpp VersionTuple.h - reduce includes to forward declarations. NFC. 2020-06-08 11:08:44 +01:00
VirtualFileSystem.cpp [YAMLVFSWriter] Fix for delimiters 2020-05-12 15:43:10 -07:00
Watchdog.cpp
WithColor.cpp WithColor.h - reduce CommandLine.h include to forward declaration. NFC. 2020-06-23 17:07:53 +01:00
X86TargetParser.cpp [X86] Support -march=sapphirerapids 2020-08-25 14:21:21 +08:00
xxhash.cpp
YAMLParser.cpp [YAMLParser] Scanner::setError - ensure we use the StringRef::iterator argument (PR45043) 2020-04-03 18:55:38 +01:00
YAMLTraits.cpp [yaml][clang-tidy] Fix multiline YAML serialization 2020-07-09 02:41:58 -07:00
Z3Solver.cpp [llvm][Z3][NFC] Improve mkBitvector performance 2020-06-30 12:26:50 +02:00