================
@@ -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
llvm-branch-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to