Simplify.hs depends on typechecker

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Simplify.hs depends on typechecker

Joachim Breitner-2
Hi,

while rebuilding Simplify.o only I noticed that all of the type
checker, and HsSyn stuff, and renamer stuff, and so needed to be
rebuilt, which I found strange.

After a little investigation, it seems that the simplifier depends on
CoreMonad, and that pulls some very few type-checker related things:

1.
    import TcRnMonad        ( initTcForLookup )
    import {-# SOURCE #-} TcSplice ( lookupThName_maybe )

for

    thNameToGhcName :: TH.Name -> CoreM (Maybe Name)
    thNameToGhcName th_name = do
        hsc_env <- getHscEnv
        liftIO $ initTcForLookup hsc_env (lookupThName_maybe th_name)

which is not even used in GHC, but only in GHC Plugins, so this could
probably be moved to a separate module pulled in by GhcPlugins.hs

2.

    import TcEnv            ( lookupGlobal )

for

    instance MonadThings CoreM where
        lookupThing name = do { hsc_env <- getHscEnv
                              ; liftIO $ lookupGlobal hsc_env name }

This might be a bit harder to disentangle. But if successful, it would
probably make building GHC in parallel quite a bit faster. And it just
seems strange to me that the Core-to-Core code should depend on the
type checker…


I’m sending this out there in case someone has dug in that direction
before and has insights to share.


Greetings,
Joachim

(Attached is a transitively reduced dependency graph of Simplify.hs,
created using Iavor’s https://github.com/yav/graphmod/wiki).


--
Joachim “nomeata” Breitner
  [hidden email]
  https://www.joachim-breitner.de/

_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

foo.pdf (68K) Download Attachment
signature.asc (849 bytes) Download Attachment
Reply | Threaded
Open this post in threaded view
|

RE: Simplify.hs depends on typechecker

GHC - devs mailing list
I agree.

Both of these code paths go through initTcForLookup which is massive overkill, as the comment with `TcEnv.lookupGlobal` says.  There's clearly a ToDo here to strip off the redundant stuff and do a minimal lookup.

Would you like to make a ticket?

Simon


|  -----Original Message-----
|  From: ghc-devs [mailto:[hidden email]] On Behalf Of
|  Joachim Breitner
|  Sent: 24 October 2017 16:40
|  To: [hidden email]
|  Subject: Simplify.hs depends on typechecker
|  
|  Hi,
|  
|  while rebuilding Simplify.o only I noticed that all of the type
|  checker, and HsSyn stuff, and renamer stuff, and so needed to be
|  rebuilt, which I found strange.
|  
|  After a little investigation, it seems that the simplifier depends on
|  CoreMonad, and that pulls some very few type-checker related things:
|  
|  1.
|      import TcRnMonad        ( initTcForLookup )
|      import {-# SOURCE #-} TcSplice ( lookupThName_maybe )
|  
|  for
|  
|      thNameToGhcName :: TH.Name -> CoreM (Maybe Name)
|      thNameToGhcName th_name = do
|          hsc_env <- getHscEnv
|          liftIO $ initTcForLookup hsc_env (lookupThName_maybe th_name)
|  
|  which is not even used in GHC, but only in GHC Plugins, so this could
|  probably be moved to a separate module pulled in by GhcPlugins.hs
|  
|  2.
|  
|      import TcEnv            ( lookupGlobal )
|  
|  for
|  
|      instance MonadThings CoreM where
|          lookupThing name = do { hsc_env <- getHscEnv
|                                ; liftIO $ lookupGlobal hsc_env name }
|  
|  This might be a bit harder to disentangle. But if successful, it would
|  probably make building GHC in parallel quite a bit faster. And it just
|  seems strange to me that the Core-to-Core code should depend on the
|  type checker…
|  
|  
|  I’m sending this out there in case someone has dug in that direction
|  before and has insights to share.
|  
|  
|  Greetings,
|  Joachim
|  
|  (Attached is a transitively reduced dependency graph of Simplify.hs,
|  created using Iavor’s
|  https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub
|  .com%2Fyav%2Fgraphmod%2Fwiki&data=02%7C01%7Csimonpj%40microsoft.com%7Cb
|  16c817556de4d55d74c08d51af5a8cd%7C72f988bf86f141af91ab2d7cd011db47%7C1%
|  7C0%7C636444565247573129&sdata=oHpA%2F%2BHGyc0mHv%2FWj3nzGBiJCM2ufriryF
|  oZYNHSjqk%3D&reserved=0).
|  
|  
|  --
|  Joachim “nomeata” Breitner
|    [hidden email]
|  
|  https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.jo
|  achim-
|  breitner.de%2F&data=02%7C01%7Csimonpj%40microsoft.com%7Cb16c817556de4d5
|  5d74c08d51af5a8cd%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C63644456
|  5247583137&sdata=wO14DxiOaXUOx59N22YoS%2FoC2%2Bi4IEp3bNnB4Dli12U%3D&res
|  erved=0
_______________________________________________
ghc-devs mailing list
[hidden email]
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs