@@ -23,15 +23,22 @@ module ConCat.Simplify (simplifyE) where
23
23
import System.IO.Unsafe (unsafePerformIO )
24
24
25
25
#if MIN_VERSION_GLASGOW_HASKELL(9,0,0,0)
26
+ #if !MIN_VERSION_GLASGOW_HASKELL(9,2,0,0)
26
27
import GHC.Core (emptyRuleEnv )
28
+ #endif
27
29
import GHC.Core.FamInstEnv (emptyFamInstEnvs )
28
30
import GHC.Core.Opt.OccurAnal (occurAnalyseExpr )
29
31
import GHC.Core.Opt.Simplify (simplExpr )
30
32
import GHC.Core.Opt.Simplify.Env
31
33
import GHC.Core.Opt.Simplify.Monad (SimplM ,initSmpl )
32
34
import GHC.Core.Stats (exprSize )
33
35
import GHC.Plugins
36
+ #if MIN_VERSION_GLASGOW_HASKELL(9,2,0,0)
37
+ import GHC.Core.Unfold (defaultUnfoldingOpts )
38
+ import qualified GHC.Utils.Logger as Err
39
+ #else
34
40
import qualified GHC.Utils.Error as Err
41
+ #endif
35
42
#else
36
43
import GhcPlugins
37
44
import Simplify (simplExpr )
@@ -44,10 +51,15 @@ import OccurAnal (occurAnalyseExpr)
44
51
import FamInstEnv (emptyFamInstEnvs )
45
52
#endif
46
53
54
+ #if MIN_VERSION_GLASGOW_HASKELL(9,2,0,0)
55
+ dumpIfSet_dyn' :: Err. Logger -> DynFlags -> DumpFlag -> String -> SDoc -> IO ()
56
+ dumpIfSet_dyn' logger dflags dumpFlag str =
57
+ Err. dumpIfSet_dyn logger dflags dumpFlag str Err. FormatCore
58
+ #elif MIN_VERSION_GLASGOW_HASKELL(9,0,0,0)
47
59
dumpIfSet_dyn' :: DynFlags -> DumpFlag -> String -> SDoc -> IO ()
48
- #if MIN_VERSION_GLASGOW_HASKELL(9,0,0,0)
49
60
dumpIfSet_dyn' dflags dumpFlag str = Err. dumpIfSet_dyn dflags dumpFlag str Err. FormatCore
50
61
#else
62
+ dumpIfSet_dyn' :: DynFlags -> DumpFlag -> String -> SDoc -> IO ()
51
63
dumpIfSet_dyn' = Err. dumpIfSet_dyn
52
64
#endif
53
65
@@ -71,15 +83,26 @@ simplifyExpr :: DynFlags -- includes spec of what core-to-core passes to do
71
83
--
72
84
-- Also used by Template Haskell
73
85
simplifyExpr dflags inline expr
74
- = do us <- mkSplitUniqSupply ' r'
75
- let sz = exprSize expr
86
+ = do let sz = exprSize expr
87
+ #if MIN_VERSION_GLASGOW_HASKELL(9,2,0,0)
88
+ logger <- Err. initLogger
89
+ (expr', counts) <- initSmpl logger dflags emptyRuleEnv
90
+ emptyFamInstEnvs sz
91
+ (simplExprGently (simplEnvForCcc dflags inline logger) expr)
92
+ Err. dumpIfSet logger dflags (dopt Opt_D_dump_simpl_stats dflags)
93
+ " Simplifier statistics" (pprSimplCount counts)
94
+ dumpIfSet_dyn' logger dflags Opt_D_dump_simpl " Simplified expression"
95
+ (ppr expr')
96
+ #else
97
+ us <- mkSplitUniqSupply ' r'
76
98
(expr', counts) <- initSmpl dflags emptyRuleEnv
77
99
emptyFamInstEnvs us sz
78
100
(simplExprGently (simplEnvForCcc dflags inline) expr)
79
101
Err. dumpIfSet dflags (dopt Opt_D_dump_simpl_stats dflags)
80
102
" Simplifier statistics" (pprSimplCount counts)
81
103
dumpIfSet_dyn' dflags Opt_D_dump_simpl " Simplified expression"
82
104
(ppr expr')
105
+ #endif
83
106
return expr'
84
107
85
108
-- Copied from SimplCore (not exported)
@@ -89,6 +112,24 @@ simplExprGently env expr = do
89
112
simplExpr env (occurAnalyseExpr expr1)
90
113
91
114
-- Like simplEnvForGHCi but with inlining.
115
+ #if MIN_VERSION_GLASGOW_HASKELL(9,2,0,0)
116
+ simplEnvForCcc :: DynFlags -> Bool -> Err. Logger -> SimplEnv
117
+ simplEnvForCcc dflags inline logger
118
+ = mkSimplEnv $ SimplMode { sm_names = [" Simplify for ccc" ]
119
+ , sm_phase = Phase 0 -- Was InitialPhase
120
+ , sm_rules = rules_on
121
+ , sm_inline = inline -- was False
122
+ , sm_eta_expand = eta_expand_on
123
+ , sm_case_case = True
124
+ , sm_uf_opts = defaultUnfoldingOpts
125
+ , sm_pre_inline = inline
126
+ , sm_logger = logger
127
+ , sm_dflags = dflags
128
+ }
129
+ where
130
+ rules_on = gopt Opt_EnableRewriteRules dflags
131
+ eta_expand_on = gopt Opt_DoLambdaEtaExpansion dflags
132
+ #else
92
133
simplEnvForCcc :: DynFlags -> Bool -> SimplEnv
93
134
simplEnvForCcc dflags inline
94
135
= mkSimplEnv $ SimplMode { sm_names = [" Simplify for ccc" ]
@@ -104,3 +145,4 @@ simplEnvForCcc dflags inline
104
145
where
105
146
rules_on = gopt Opt_EnableRewriteRules dflags
106
147
eta_expand_on = gopt Opt_DoLambdaEtaExpansion dflags
148
+ #endif
0 commit comments