================
@@ -95,24 +95,30 @@ template <> struct MappingTraits<bolt::SuccessorInfo> {
namespace bolt {
struct PseudoProbeInfo {
- llvm::yaml::Hex64 GUID;
- uint64_t Index;
- uint8_t Type;
+ uint32_t InlineTreeIndex = 0;
+ uint64_t BlockMask = 0; // bitset with probe indices
----------------
aaupov wrote:
> Could you clarify more on this? why we need a special use for the value 1
> BlockMask, there still could be more probes? say we can have two probes: 1
> basic block probe(ID1) and 1 call probe(ID2).
This is a YAML size optimization: it's very common for the first block to only
have block probe with id 1 (~entry point block probe). In this case the YAML
representation is `{ blk: 1 }`. We can elide it and encode as `{ }`, and treat
that as `{ blk: 1 }`.
If the block has other probes, as in your example, we can't elide `blk: 1`
because we need to distinguish `{ blk: 1, call: [ 2 ] }` from `{ call: [ 2 ] }`
(no block probes).
This optimization only buys us ~1MB (92MB with -> 93MB without).
I agree the effect is low-ish for a special case, so I'll drop it if you react
with thumbs up.
https://github.com/llvm/llvm-project/pull/107137
_______________________________________________
llvm-branch-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits