joker-eph wrote:
The offset bitfield idea is a good one, I threw an agent at evaluating it:
> On x86-64, DeclContext begins at only five offsets from its corresponding
> Decl: 40, 48, 56, 64, or 72 bytes. Encoding
`(offset - 40) / 8` therefore needs three bits.
>
> Current assertions-off code generation is:
>
> - Baseline: kind load, 79-entry indirect jump table, then one of five
> adjustments.
> - Eager pointer: one load and return.
> - Tagged offset: load, extract three bits, scale, and subtract—six
> straight-line instructions with no branch or table
lookup.
>
> LastDecl is appropriate because Decl is guaranteed 8-byte aligned and it has
> substantially fewer accesses than FirstDecl or LookupPtr. The masking
> overhead is included in the measurements below.
I also took some measurements (Eager pointer vs Tagged offset)
- RegisterAllDialects instructions −2.78% vs −2.01%
- RegisterAllDialects RSS +0.52% vs effectively flat
- NVVMDialect instructions −1.60% vs −1.17%
- NVVMDialect RSS +0.04% vs effectively
flat
- CTMark compile time −1.52% vs
−1.46%
- CTMark RSS +0.17% vs no measurable increase
The tagged implementation recovers about 72–73% of the eager instruction
reduction on the large MLIR TUs and
essentially all of its CTMark result.
https://github.com/llvm/llvm-project/pull/223042
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits