Skip to content
  • Andreas Klebinger's avatar
    Apply some tricks to speed up core lint. · c2d73cb4
    Andreas Klebinger authored and Marge Bot's avatar Marge Bot committed
    Below are the noteworthy changes and if given their impact on compiler
    allocations for a type heavy module:
    
    * Use the oneShot trick on LintM
    * Use a unboxed tuple for the result of LintM: ~6% reduction
    * Avoid a thunk for the result of typeKind in lintType: ~5% reduction
    * lint_app: Don't allocate the error msg in the hot code path: ~4%
      reduction
    * lint_app: Eagerly force the in scope set: ~4%
    * nonDetCmpType: Try to short cut using reallyUnsafePtrEquality#: ~2%
    * lintM: Use a unboxed maybe for the `a` result: ~12%
    * lint_app: make go_app tail recursive to avoid allocating the go function
                as heap closure: ~7%
    * expandSynTyCon_maybe: Use a specialized data type
    
    For a less type heavy module like nofib/spectral/simple compiled with
    -O -dcore-lint allocations went down by ~24% and compile time by ~9%.
    
    -------------------------
    Metric Decrease:
        T1969
    -------------------------
    c2d73cb4