llvm-project/llvm/tools
wlei ac14bb14e7 [CSSPGO][llvm-profgen] Compress recursive cycles in calling context
This change compresses the context string by removing cycles due to recursive function for CS profile generation. Removing recursion cycles is a way to normalize the calling context which will be better for the sample aggregation and also make the context promoting deterministic.
Specifically for implementation, we recognize adjacent repeated frames as cycles and deduplicated them through multiple round of iteration.
For example:
Considering a input context string stack:
[“a”, “a”, “b”, “c”, “a”, “b”, “c”, “b”, “c”, “d”]
For first iteration,, it removed all adjacent repeated frames of size 1:
[“a”, “b”, “c”, “a”, “b”, “c”, “b”, “c”, “d”]
For second iteration, it removed all adjacent repeated frames of size 2:
[“a”, “b”, “c”, “a”, “b”, “c”, “d”]
So in the end, we get compressed output:
[“a”, “b”, “c”, “d”]

Compression will be called in two place: one for sample's context key right after unwinding, one is for the eventual context string id in the ProfileGenerator.
Added a switch `compress-recursion` to control the size of duplicated frames, default -1 means no size limit.
Added unit tests and regression test for this.

Differential Revision: https://reviews.llvm.org/D93556
2021-02-03 22:16:07 -08:00
..
bugpoint [tools] Use llvm::append_range (NFC) 2021-01-05 21:15:56 -08:00
bugpoint-passes
dsymutil [llvm] Drop unnecessary const from return types (NFC) 2021-01-31 10:23:43 -08:00
gold [LTO] Prevent devirtualization for symbols dynamically exported 2021-01-27 15:54:13 -08:00
llc [llc] Add reportError helper and canonicalize error messages 2021-01-26 15:33:37 -08:00
lli [ORC] Move Orc RPC code into Shared, rename some RPC types. 2020-12-30 12:48:20 +11:00
llvm-ar llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
llvm-as llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01: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 llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
llvm-c-test Fixes warning 'enumeration value not handled in switch'. 2020-12-30 06:56:29 -08:00
llvm-cat [tools] Use llvm::append_range (NFC) 2021-01-05 21:15:56 -08:00
llvm-cfi-verify [llvm] Use *Set::contains (NFC) 2021-01-11 18:48:07 -08:00
llvm-config [MinGW] Use lib prefix for libraries 2020-09-12 22:01:29 +03:00
llvm-cov [llvm] Use append_range (NFC) 2021-01-29 23:23:34 -08:00
llvm-cvtres [llvm] Don't include StringSwitch.h where unnecessary (NFC) 2021-01-21 19:59:48 -08:00
llvm-cxxdump llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
llvm-cxxfilt
llvm-cxxmap llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
llvm-diff Switch from llvm::is_trivially_copyable to std::is_trivially_copyable 2020-12-02 22:02:48 -08:00
llvm-dis llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
llvm-dwarfdump [tools] Use llvm::append_range (NFC) 2021-01-05 21:15:56 -08:00
llvm-dwp [llvm-dwp] Automatically set the target triple 2021-01-25 11:58:54 +01:00
llvm-elfabi [llvm-elfabi] Add flag to preserve timestamp when output is the same 2020-12-29 20:27:06 -08:00
llvm-exegesis [llvm] Use *::empty (NFC) 2021-01-16 09:40:55 -08:00
llvm-extract llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
llvm-go
llvm-gsymutil [tools] Use llvm::append_range (NFC) 2021-01-05 21:15:56 -08:00
llvm-ifs [llvm] Remove redundant string initialization (NFC) 2021-01-12 21:43:46 -08:00
llvm-isel-fuzzer [AIX] Turn -fdata-sections on by default in Clang 2020-10-14 15:58:31 +00:00
llvm-itanium-demangle-fuzzer
llvm-jitlink [llvm-jitlink] Replace use of deprecated gethostbyname by getaddrinfo. 2021-01-29 03:11:16 -06:00
llvm-jitlistener [MCJIT] Profile the code generated by MCJIT engine using Intel VTune profiler 2020-11-16 19:28:14 +11:00
llvm-libtool-darwin llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
llvm-link [llvm-link] Improve link time for bitcode archives [NFC] 2021-01-19 16:41:28 -08:00
llvm-lipo [Target] Use llvm::any_of (NFC) 2020-12-24 19:43:26 -08:00
llvm-lto Revert "[LTO] Use lto::backend for code generation." 2021-02-03 22:49:30 +00:00
llvm-lto2 [LTO] Add support for existing Config::Freestanding option. 2021-01-22 13:45:39 +00:00
llvm-mc [llvm][clang][mlir] Add checks for the return values from Target::createXXX to prevent protential null deref 2020-11-21 21:04:12 -08: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] Addressing build failures due to missing override specifiers 2021-01-21 17:32:18 -08: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 [ms] [llvm-ml] Support command-line defines 2020-12-01 18:06:05 -05:00
llvm-modextract llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
llvm-mt llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
llvm-nm [NFC][llvm-nm] Fix unused variable warning 2021-01-29 11:42:23 +08:00
llvm-objcopy [llvm-objcopy] -O binary: consider SHT_NOBITS sections to be empty 2021-02-01 15:01:25 -08:00
llvm-objdump [llvm-objdump-macho] print per-second-level-page encodings for option --unwind-info 2021-01-29 21:59:07 -07:00
llvm-opt-fuzzer [FuzzMutate] Add mutator to modify instruction flags. 2021-01-23 19:05:20 +00:00
llvm-opt-report
llvm-pdbutil [llvm] Remove redundant return and continue statements (NFC) 2021-01-14 20:30:34 -08:00
llvm-profdata [CSSPGO] Support of CS profiles in extended binary format. 2021-01-27 21:29:46 -08:00
llvm-profgen [CSSPGO][llvm-profgen] Compress recursive cycles in calling context 2021-02-03 22:16:07 -08:00
llvm-rc [llvm-rc] Handle driveless absolute windows paths when loading external files 2020-12-10 14:11:06 +02:00
llvm-readobj [yaml2obj/obj2yaml/llvm-readobj] Support SHF_GNU_RETAIN 2021-02-02 09:19:53 -08:00
llvm-reduce [llvm-reduce] ReduceGlobalVarInitializers delta pass: fix handling of globals w/ comdat/non-external linkage 2021-01-07 18:05:03 +03:00
llvm-rtdyld [llvm][clang][mlir] Add checks for the return values from Target::createXXX to prevent protential null deref 2020-11-21 21:04:12 -08:00
llvm-shlib [Support] On Windows, add optional support for {rpmalloc|snmalloc|mimalloc} 2020-08-27 11:09:46 -04:00
llvm-size [llvm-cov] Use is_contained (NFC) 2020-12-27 09:57:25 -08:00
llvm-special-case-list-fuzzer
llvm-split [LTO] Update splitCodeGen to take a reference to the module. (NFC) 2021-01-29 11:53:11 +00:00
llvm-stress [tools] Use llvm::append_range (NFC) 2021-01-05 21:15:56 -08:00
llvm-strings llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
llvm-symbolizer [llvm-symbolizer] - Fix the crash in GNU output style with --no-inlines and missing input file. 2021-01-30 18:36:38 +03:00
llvm-undname llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
llvm-xray [llvm] Use the default value of drop_begin (NFC) 2021-01-18 10:16:36 -08:00
llvm-yaml-numeric-parser-fuzzer [llvm] Use llvm::erase_value and llvm::erase_if (NFC) 2021-01-02 09:24:15 -08:00
llvm-yaml-parser-fuzzer [llvm] Use llvm::erase_value and llvm::erase_if (NFC) 2021-01-02 09:24:15 -08:00
lto [llvm] Use append_range (NFC) 2021-01-29 23:23:34 -08:00
msbuild
obj2yaml [obj2yaml, yaml2obj] Use Hex64 for BBAddressMap fields. 2021-02-01 15:37:30 -08:00
opt [LTO] Prevent devirtualization for symbols dynamically exported 2021-01-27 15:54:13 -08:00
opt-viewer Convert old python3 cgi method into the new html one 2020-03-25 22:38:55 +01:00
remarks-shlib [tools][remarks-shlib] Don't build libRemarks.so without PIC 2020-09-20 12:40:21 +02:00
sancov [Support] Use InitLLVM in llvm-stress, sancov and TableGen 2020-07-28 07:50:45 -04:00
sanstats Internalize functions from various tools. NFC 2020-09-26 15:57:13 -07:00
split-file [split-file] Fix sys::fs::remove() on Solaris after D83834 2020-08-11 08:05:10 -07:00
verify-uselistorder llvmbuildectomy - replace llvm-build by plain cmake 2020-11-13 10:35:24 +01:00
vfabi-demangle-fuzzer
xcode-toolchain
yaml2obj [llvm] Make obj2yaml and yaml2obj LLVM utilities instead of tools 2020-10-19 10:21:21 -07:00
CMakeLists.txt [Flang] add flang as a new subproject in cmake 2020-04-09 16:13:18 +01:00