[Git][ghc/ghc][master] Optimize getLevity.

Marge Bot (@marge-bot) gitlab at gitlab.haskell.org
Tue Nov 22 07:07:11 UTC 2022



Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC


Commits:
e5b68183 by Andreas Klebinger at 2022-11-22T02:06:52-05:00
Optimize getLevity.

Avoid the intermediate data structures allocated by splitTyConApp.
This avoids ~0.5% of allocations for a build using -O2.

Fixes #22254

- - - - -


1 changed file:

- compiler/GHC/Core/Type.hs


Changes:

=====================================
compiler/GHC/Core/Type.hs
=====================================
@@ -260,7 +260,7 @@ import GHC.Builtin.Types.Prim
 import {-# SOURCE #-} GHC.Builtin.Types
    ( charTy, naturalTy
    , typeSymbolKind, liftedTypeKind, unliftedTypeKind
-   , boxedRepDataConTyCon, constraintKind, zeroBitTypeKind
+   , constraintKind, zeroBitTypeKind
    , manyDataConTy, oneDataConTy
    , liftedRepTy, unliftedRepTy, zeroBitRepTy )
 
@@ -596,6 +596,8 @@ interfaces.  Notably this plays a role in tcTySigs in GHC.Tc.Gen.Bind.
 --
 -- @isTyConKeyApp_maybe key ty@ returns @Just tys@ iff
 -- the type @ty = T tys@, where T's unique = key
+-- key must not be `fUNTyConKey`; to test for functions, use `splitFunTy_maybe`.
+-- Thanks to this fact, we don't have to pattern match on `FunTy` here.
 isTyConKeyApp_maybe :: Unique -> Type -> Maybe [Type]
 isTyConKeyApp_maybe key ty
   | TyConApp tc args <- coreFullView ty
@@ -2313,8 +2315,11 @@ getRuntimeRep ty
 getLevity_maybe :: HasDebugCallStack => Type -> Maybe Type
 getLevity_maybe ty
   | Just rep <- getRuntimeRep_maybe ty
-  , Just (tc, [lev]) <- splitTyConApp_maybe rep
-  , tc == boxedRepDataConTyCon
+  -- Directly matching on TyConApp after expanding type synonyms
+  -- saves allocations compared to `splitTyConApp_maybe`. See #22254.
+  -- Given that this is a pretty hot function we make use of the fact
+  -- and use isTyConKeyApp_maybe instead.
+  , Just [lev] <- isTyConKeyApp_maybe boxedRepDataConKey rep
   = Just lev
   | otherwise
   = Nothing



View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/e5b68183700f159c834936be3a9b08f165fdc5e3

-- 
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/e5b68183700f159c834936be3a9b08f165fdc5e3
You're receiving this email because of your account on gitlab.haskell.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20221122/4d1fab5c/attachment-0001.html>


More information about the ghc-commits mailing list