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

Reply via email to