Make the simplifier independent of the typechecker
I noticed that the simplifier module depends on all of the type checker, and HsSyn stuff, and renamer stuff, 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:
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
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…
Simon says:
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.
I am optimistically marking this as newcomer
because it is a refactoring task, and a good way of learning a bit about various pieces, with a reasonably clear notion of “success”.
- *UPDATE** (April 2018, Phab:4503): both points described above are addressed to the extent when in order to close the ticket we need to do mere code movement. Namely.
-
lookupThName_maybe
andinitTcForLookup
are eliminated fromCoreMonad.hs
completely. Its client, though,thNameToGhcName
, is better to be moved in the future also, for it is not used in theCoreMonad.hs
(or anywhere else) anyway. Joachim suggested “any module reexported by GhcPlugins (or maybe even that module itself)”. -
CoreMonad.hs
still callslookupGlobal
which is no longer bound to the typechecker monad, but still resides inTcEnv.hs
— it should be moved out of Tc-land at some point in the future in order to close the ticket.