summaryrefslogtreecommitdiff
path: root/compiler/simplCore
diff options
context:
space:
mode:
authorMatthew Pickering <matthewtpickering@gmail.com>2018-03-02 18:45:47 +0000
committerMatthew Pickering <matthewtpickering@gmail.com>2018-03-02 18:48:10 +0000
commitf8e3cd3b160d20dbd18d490b7babe43153bb3287 (patch)
tree99d8774187c0765b2e66cf2fec66a0dc25641cb7 /compiler/simplCore
parent8dab89b4d148d322cd7ac8c374be3342ab017297 (diff)
downloadhaskell-f8e3cd3b160d20dbd18d490b7babe43153bb3287.tar.gz
Only load plugins once
Summary: This is part of D4342 which is worthwhile to merge on its own. Reviewers: nboldi, bgamari Reviewed By: bgamari Subscribers: rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4410 Co-authored-by: Boldizsar Nemeth <nboldi@elte.hu>
Diffstat (limited to 'compiler/simplCore')
-rw-r--r--compiler/simplCore/SimplCore.hs34
1 files changed, 7 insertions, 27 deletions
diff --git a/compiler/simplCore/SimplCore.hs b/compiler/simplCore/SimplCore.hs
index 6592ff60e1..4dfa19863c 100644
--- a/compiler/simplCore/SimplCore.hs
+++ b/compiler/simplCore/SimplCore.hs
@@ -51,6 +51,8 @@ import Vectorise ( vectorise )
import SrcLoc
import Util
import Module
+import Plugins ( withPlugins,installCoreToDos )
+import DynamicLoading -- ( initializePlugins )
import Maybes
import UniqSupply ( UniqSupply, mkSplitUniqSupply, splitUniqSupply )
@@ -58,14 +60,6 @@ import UniqFM
import Outputable
import Control.Monad
import qualified GHC.LanguageExtensions as LangExt
-
-#if defined(GHCI)
-import DynamicLoading ( loadPlugins )
-import Plugins ( installCoreToDos )
-#else
-import DynamicLoading ( pluginError )
-#endif
-
{-
************************************************************************
* *
@@ -87,7 +81,11 @@ core2core hsc_env guts@(ModGuts { mg_module = mod
;
; (guts2, stats) <- runCoreM hsc_env hpt_rule_base us mod
orph_mods print_unqual loc $
- do { all_passes <- addPluginPasses builtin_passes
+ do { hsc_env' <- getHscEnv
+ ; dflags' <- liftIO $ initializePlugins hsc_env'
+ (hsc_dflags hsc_env')
+ ; all_passes <- withPlugins dflags'
+ installCoreToDos builtin_passes
; runCorePasses all_passes guts }
; Err.dumpIfSet_dyn dflags Opt_D_dump_simpl_stats
@@ -373,24 +371,6 @@ getCoreToDo dflags
flatten_todos passes ++ flatten_todos rest
flatten_todos (todo : rest) = todo : flatten_todos rest
--- Loading plugins
-
-addPluginPasses :: [CoreToDo] -> CoreM [CoreToDo]
-#if !defined(GHCI)
-addPluginPasses builtin_passes
- = do { dflags <- getDynFlags
- ; let pluginMods = pluginModNames dflags
- ; unless (null pluginMods) (pluginError pluginMods)
- ; return builtin_passes }
-#else
-addPluginPasses builtin_passes
- = do { hsc_env <- getHscEnv
- ; named_plugins <- liftIO (loadPlugins hsc_env)
- ; foldM query_plug builtin_passes named_plugins }
- where
- query_plug todos (_, plug, options) = installCoreToDos plug options todos
-#endif
-
{- Note [Inline in InitialPhase]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In GHC 8 and earlier we did not inline anything in the InitialPhase. But that is