summaryrefslogtreecommitdiff
path: root/compiler/GHC/Core/Opt/Simplify.hs
diff options
context:
space:
mode:
authorSylvain Henry <sylvain@haskus.fr>2021-01-07 14:25:15 +0100
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-02-13 21:27:34 -0500
commit8e2f85f6b4662676f0d7addaff9bf2c7d751bb63 (patch)
tree6a5bea5db12d907874cdf26d709d829a3f3216ba /compiler/GHC/Core/Opt/Simplify.hs
parent40983d2331fe34c0af6925db7588d5ac6a19ae36 (diff)
downloadhaskell-8e2f85f6b4662676f0d7addaff9bf2c7d751bb63.tar.gz
Refactor Logger
Before this patch, the only way to override GHC's default logging behavior was to set `log_action`, `dump_action` and `trace_action` fields in DynFlags. This patch introduces a new Logger abstraction and stores it in HscEnv instead. This is part of #17957 (avoid storing state in DynFlags). DynFlags are duplicated and updated per-module (because of OPTIONS_GHC pragma), so we shouldn't store global state in them. This patch also fixes a race in parallel "--make" mode which updated the `generatedDumps` IORef concurrently. Bump haddock submodule The increase in MultilayerModules is tracked in #19293. Metric Increase: MultiLayerModules
Diffstat (limited to 'compiler/GHC/Core/Opt/Simplify.hs')
-rw-r--r--compiler/GHC/Core/Opt/Simplify.hs19
1 files changed, 11 insertions, 8 deletions
diff --git a/compiler/GHC/Core/Opt/Simplify.hs b/compiler/GHC/Core/Opt/Simplify.hs
index 4ca8985f8b..9f98615711 100644
--- a/compiler/GHC/Core/Opt/Simplify.hs
+++ b/compiler/GHC/Core/Opt/Simplify.hs
@@ -57,6 +57,7 @@ import GHC.Core.FVs ( mkRuleInfo )
import GHC.Core.Rules ( lookupRule, getRules, initRuleOpts )
import GHC.Types.Basic
import GHC.Utils.Monad ( mapAccumLM, liftIO )
+import GHC.Utils.Logger
import GHC.Types.Var ( isTyCoVar )
import GHC.Data.Maybe ( orElse )
import Control.Monad
@@ -64,7 +65,6 @@ import GHC.Utils.Outputable
import GHC.Utils.Panic
import GHC.Data.FastString
import GHC.Utils.Misc
-import GHC.Utils.Error
import GHC.Unit.Module ( moduleName, pprModuleName )
import GHC.Core.Multiplicity
import GHC.Builtin.PrimOps ( PrimOp (SeqOp) )
@@ -267,6 +267,7 @@ simplRecOrTopPair env top_lvl is_rec mb_cont old_bndr new_bndr rhs
where
dflags = seDynFlags env
+ logger = seLogger env
-- trace_bind emits a trace for each top-level binding, which
-- helps to locate the tracing for inlining and rule firing
@@ -274,7 +275,7 @@ simplRecOrTopPair env top_lvl is_rec mb_cont old_bndr new_bndr rhs
| not (dopt Opt_D_verbose_core2core dflags)
= thing_inside
| otherwise
- = traceAction dflags ("SimplBind " ++ what)
+ = putTraceMsg logger dflags ("SimplBind " ++ what)
(ppr old_bndr) thing_inside
--------------------------
@@ -1882,7 +1883,7 @@ simplIdF env var cont
completeCall :: SimplEnv -> OutId -> SimplCont -> SimplM (SimplFloats, OutExpr)
completeCall env var cont
- | Just expr <- callSiteInline dflags case_depth var active_unf
+ | Just expr <- callSiteInline logger dflags case_depth var active_unf
lone_variable arg_infos interesting_cont
-- Inline the variable's RHS
= do { checkedTick (UnfoldingDone var)
@@ -1899,15 +1900,16 @@ completeCall env var cont
where
dflags = seDynFlags env
case_depth = seCaseDepth env
+ logger = seLogger env
(lone_variable, arg_infos, call_cont) = contArgs cont
n_val_args = length arg_infos
interesting_cont = interestingCallContext env call_cont
active_unf = activeUnfolding (getMode env) var
log_inlining doc
- = liftIO $ dumpAction dflags
+ = liftIO $ putDumpMsg logger dflags
(mkDumpStyle alwaysQualify)
- (dumpOptionsFromFlag Opt_D_dump_inlinings)
+ Opt_D_dump_inlinings
"" FormatText doc
dump_inline unfolding cont
@@ -2170,6 +2172,7 @@ tryRules env rules fn args call_cont
where
ropts = initRuleOpts dflags
dflags = seDynFlags env
+ logger = seLogger env
zapped_env = zapSubstEnv env -- See Note [zapSubstEnv]
printRuleModule rule
@@ -2198,11 +2201,11 @@ tryRules env rules fn args call_cont
nodump
| dopt Opt_D_dump_rule_rewrites dflags
= liftIO $
- touchDumpFile dflags (dumpOptionsFromFlag Opt_D_dump_rule_rewrites)
+ touchDumpFile logger dflags Opt_D_dump_rule_rewrites
| dopt Opt_D_dump_rule_firings dflags
= liftIO $
- touchDumpFile dflags (dumpOptionsFromFlag Opt_D_dump_rule_firings)
+ touchDumpFile logger dflags Opt_D_dump_rule_firings
| otherwise
= return ()
@@ -2210,7 +2213,7 @@ tryRules env rules fn args call_cont
log_rule dflags flag hdr details
= liftIO $ do
let sty = mkDumpStyle alwaysQualify
- dumpAction dflags sty (dumpOptionsFromFlag flag) "" FormatText $
+ putDumpMsg logger dflags sty flag "" FormatText $
sep [text hdr, nest 4 details]
trySeqRules :: SimplEnv