llvm-mirror/tools
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
..
bugpoint Use llvm::is_contained where appropriate (NFC) 2020-07-27 10:20:44 -07:00
bugpoint-passes Reverted the remainings of c1c9819ef91aab51b5a23fb3027adac5a2f551cc 2020-02-11 16:20:06 -08:00
dsymutil Use llvm::is_contained where appropriate (NFC) 2020-08-01 21:51:06 -07:00
gold [LLVMgold.so] -plugin-opt=save-temps: save combined module to .lto.o instead of .o 2020-07-20 10:02:56 -07:00
llc Speculative fix for build breakage from D78403 2020-05-14 23:57:22 -04:00
lli [ORC] Move file-descriptor based raw byte channel into a public header. 2020-08-11 09:50:58 -07:00
llvm-ar [llvm-ar] Update error messages and tests as per latest preferred style 2020-06-05 10:37:26 -07:00
llvm-as [opt] Remove obsolete --quiet option 2020-07-08 13:21:20 -07:00
llvm-as-fuzzer Fix several places that were calling verifyFunction or verifyModule without checking the return value. 2020-05-18 13:28:46 -07:00
llvm-bcanalyzer Revert "Remove redundant "std::move"s in return statements" 2020-02-10 07:07:40 -08:00
llvm-c-test [SVE] Restore broken LLVM-C ABI compatability 2020-05-15 11:50:24 -07:00
llvm-cat
llvm-cfi-verify [llvm-objdump] Change symbol name/PLT decoding errors to warnings 2020-08-13 08:13:42 -07:00
llvm-config Update compiler extension integration into the build system 2020-04-24 09:40:14 +02:00
llvm-cov [llvm-cov gcov] Don't require NUL terminator when reading files 2020-07-19 00:31:52 -07:00
llvm-cvtres
llvm-cxxdump [llvm/Object] - Make ELFObjectFile::getRelocatedSection return Expected<section_iterator> 2019-10-21 11:06:38 +00:00
llvm-cxxfilt Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
llvm-cxxmap
llvm-diff llvm-diff: Avoid crash with complex expressions 2020-05-21 17:43:47 -04:00
llvm-dis [llvm-dis] Fix the disable-output flag 2019-11-14 13:35:21 -08:00
llvm-dwarfdump [llvm-dwarfdump] Fix misleading scope byte coverage statistics 2020-08-25 06:40:11 +01:00
llvm-dwp llvm-dwp.cpp - fix implicit CommandLine.h dependency. NFC. 2020-06-23 12:29:52 +01:00
llvm-elfabi [elfabi] Move llvm-elfabi related code to InterfaceStub library 2020-08-13 11:51:44 -07:00
llvm-exegesis Use llvm::is_contained where appropriate (NFC) 2020-07-27 10:20:44 -07:00
llvm-extract [opt] Remove obsolete --quiet option 2020-07-08 13:21:20 -07:00
llvm-go Reinstate llvm-go to test the go bindings. 2020-02-13 17:24:55 -08:00
llvm-gsymutil Fix GSYM tests to run the yaml files and fix test failures on some machines. 2020-03-04 19:14:08 -08:00
llvm-ifs [llvm][clang][IFS] Enhancing the llvm-ifs yaml format for symbol lists. 2020-04-01 10:49:06 -04:00
llvm-isel-fuzzer llvm-isel-fuzzer.cpp - fix implicit CommandLine.h dependency. NFC. 2020-06-23 12:29:53 +01:00
llvm-itanium-demangle-fuzzer
llvm-jitlink [ORC][JITLink] Switch to unique ownership for EHFrameRegistrars. 2020-08-26 16:59:45 -07:00
llvm-jitlistener
llvm-libtool-darwin [llvm-libtool-darwin] Add support for -V option 2020-08-24 13:48:23 -07:00
llvm-link llvm-link: Add support for archive files as inputs 2020-07-14 15:30:59 -04:00
llvm-lipo [llvm-lipo] Add support for bitcode files 2020-08-25 21:11:18 -07:00
llvm-lto [LTO] Don't apply LTOPostLink module flag during writeMergedModule 2020-08-26 11:17:45 -07:00
llvm-lto2 Enable new passmanager plugin support for LTO. 2020-04-14 15:07:07 -07:00
llvm-mc [MC] Add --dwarf64 to generate DWARF64 debug info [1/7] 2020-06-16 15:50:13 +07:00
llvm-mc-assemble-fuzzer Add missing include Host.h in llvm-mc-* fuzzers. NFC. 2020-05-18 02:21:22 +07:00
llvm-mc-disassemble-fuzzer Add missing include Host.h in llvm-mc-* fuzzers. NFC. 2020-05-18 02:21:22 +07:00
llvm-mca [llvm-mca][NFC] Refactor handling of views that examine individual instructions, 2020-08-25 12:12:37 -07:00
llvm-microsoft-demangle-fuzzer Give microsoftDemangle() an outparam for how many input bytes were consumed. 2020-05-20 16:17:31 -04:00
llvm-ml Replace MCTargetOptionsCommandFlags.inc and CommandFlags.inc by runtime registration 2020-03-17 14:01:30 +01:00
llvm-modextract
llvm-mt
llvm-nm llvm-nm: Implement --special-syms. 2020-06-22 13:05:47 -07:00
llvm-objcopy [NFC][llvm-objcopy] Fix redundant config checks. 2020-08-11 10:37:19 -07:00
llvm-objdump Revert "[AMDGPU] Support disassembly for AMDGPU kernel descriptors" 2020-08-19 13:12:29 +05:30
llvm-opt-fuzzer CommandFlags.h - remove unnecessary includes. NFC. 2020-05-20 09:58:37 +01:00
llvm-opt-report Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
llvm-pdbutil [llvm][NFC] Add missing 'override's 2020-07-17 17:35:59 -07:00
llvm-profdata [llvm-profdata] Implement llvm-profdata overlap for sample profiles 2020-08-08 17:49:48 -07:00
llvm-rc [llvm-rc] Allow string table values split into multiple string literals 2020-08-05 08:59:32 +03:00
llvm-readobj [llvm-readobj/elf][test] - Add testing for EM_* specific OS/ABI values. 2020-08-26 14:41:16 +03:00
llvm-reduce [llvm-reduce] Skip terminators when reducing instructions. 2020-08-23 17:20:34 +01:00
llvm-rtdyld Make llvm::StringRef to std::string conversions explicit. 2020-01-28 23:25:25 +01:00
llvm-shlib [Support] On Windows, add optional support for {rpmalloc|snmalloc|mimalloc} 2020-08-27 11:09:46 -04:00
llvm-size [llvm-size] Output REL, RELA and STRTAB sections when allocatable 2020-07-01 12:02:32 +01:00
llvm-special-case-list-fuzzer
llvm-split Fix several places that were calling verifyFunction or verifyModule without checking the return value. 2020-05-18 13:28:46 -07:00
llvm-stress [Support] Use InitLLVM in llvm-stress, sancov and TableGen 2020-07-28 07:50:45 -04:00
llvm-strings
llvm-symbolizer [llvm-symbolizer] Add back --version and add a -v alias 2020-08-10 08:21:43 -07:00
llvm-undname Give microsoftDemangle() an outparam for how many input bytes were consumed. 2020-05-20 16:17:31 -04:00
llvm-xray [XRay] Account: recursion detection 2020-07-27 10:15:44 +03:00
llvm-yaml-numeric-parser-fuzzer
lto [LTO] Use StringRef instead of C-style strings in setCodeGenDebugOptions 2020-06-22 11:22:18 +01:00
msbuild
obj2yaml [DWARFYAML] Make the unit_length and header_length fields optional. 2020-08-26 20:35:10 +08:00
opt [opt][NewPM] Add basic-aa in legacy PM compatibility mode 2020-08-21 14:05:07 -07:00
opt-viewer Convert old python3 cgi method into the new html one 2020-03-25 22:38:55 +01:00
remarks-shlib [Support] On Windows, add optional support for {rpmalloc|snmalloc|mimalloc} 2020-08-27 11:09:46 -04:00
sancov [Support] Use InitLLVM in llvm-stress, sancov and TableGen 2020-07-28 07:50:45 -04:00
sanstats
split-file [split-file] Fix sys::fs::remove() on Solaris after D83834 2020-08-11 08:05:10 -07:00
verify-uselistorder
vfabi-demangle-fuzzer [llvm][VectorUtils] Tweak VFShape for scalable vector functions. 2020-01-30 05:53:56 +00:00
xcode-toolchain
yaml2obj [yaml2obj] - Add a way to set default values for macros used in a YAML. 2020-06-30 12:05:30 +03:00
CMakeLists.txt [Flang] add flang as a new subproject in cmake 2020-04-09 16:13:18 +01:00
LLVMBuild.txt