This change implements profile generation infra for pseudo probe in llvm-profgen. During virtual unwinding, the raw profile is extracted into range counter and branch counter and aggregated to sample counter map indexed by the call stack context. This change introduces the last step and produces the eventual profile. Specifically, the body of function sample is recorded by going through each probe among the range and callsite target sample is recorded by extracting the callsite probe from branch's source.
Please refer https://groups.google.com/g/llvm-dev/c/1p1rdYbL93s and https://reviews.llvm.org/D89707 for more context about CSSPGO and llvm-profgen.
- Extended PseudoProbeProfileGenerator for pseudo probe based profile generation.
- populateBodySamplesWithProbes reading range counter is responsible for recording function body samples and inferring caller's body samples.
- populateBoundarySamplesWithProbes reading branch counter is responsible for recording call site target samples.
- Each sample is recorded with its calling context(named ContextId). Remind that the probe based context key doesn't include the leaf frame probe info, so the ContextId string is created from two part: one from the probe stack strings' concatenation and other one from the leaf frame probe.
- Added regression test
ninja & ninja check-llvm