Skip to content

Investigate inlining sweetspot for Generics with `-fdicts-strict`

Summary

I noticed that T9630 is quite sensitive to inlining behaviour) when -fdicts-strict is enabled.

In particular:

  • Compiler performance is good with a low inlining threshold.
  • Performance is good with a high inlining threshold.
  • Compiler performance absolutely tanks at some point in between.

Steps to reproduce

Compile T9630 with different -funfolding-use-threshold settings and -fdicts-strict.

Expected behavior

Compiler performance should be somewhat stable across unfolding thresholds and -fdicts-strict.

I assume this issue manifests itself in Cabal, where it causes the compile time regressions seen in !2575 (closed) as well.

This also affects generics runtime performance. As only after increasing the threshold T9630 get's rid of the generics instance overhead.

Things to look at

  • Can this be solved by user given inline pragmas
  • Can this be solved by derived generics code having inline pragmas
  • Are there other approaches?
Edited by Ben Gamari
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information