diff options
author | Joachim Breitner <mail@joachim-breitner.de> | 2018-03-21 17:02:21 -0400 |
---|---|---|
committer | Joachim Breitner <mail@joachim-breitner.de> | 2018-03-21 17:02:21 -0400 |
commit | 4a47fd33d2f16070d4fe8bd32a104587608061cd (patch) | |
tree | 204afacf3bf4177de01b8f2778f4154c26bf578b /compiler/simplCore/SimplCore.hs | |
parent | c663b715b6201d460e8bf2b6fb26e61c700384e0 (diff) | |
parent | 0aa7d8796a95298e906ea81fe4a52590d75c2e47 (diff) | |
download | haskell-wip/T14068.tar.gz |
Merge branch 'wip/T14951' into wip/T14068wip/T14068
Diffstat (limited to 'compiler/simplCore/SimplCore.hs')
-rw-r--r-- | compiler/simplCore/SimplCore.hs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/compiler/simplCore/SimplCore.hs b/compiler/simplCore/SimplCore.hs index 41f0a9a495..2bea6dd05d 100644 --- a/compiler/simplCore/SimplCore.hs +++ b/compiler/simplCore/SimplCore.hs @@ -17,7 +17,8 @@ import CoreSyn import HscTypes import CSE ( cseProgram ) import Rules ( mkRuleBase, unionRuleBase, - extendRuleBaseList, ruleCheckProgram, addRuleInfo, ) + extendRuleBaseList, ruleCheckProgram, addRuleInfo, + getRules ) import PprCore ( pprCoreBindings, pprCoreExpr ) import OccurAnal ( occurAnalysePgm, occurAnalyseExpr ) import IdInfo @@ -130,6 +131,7 @@ getCoreToDo dflags spec_constr = gopt Opt_SpecConstr dflags liberate_case = gopt Opt_LiberateCase dflags late_dmd_anal = gopt Opt_LateDmdAnal dflags + late_specialise = gopt Opt_LateSpecialise dflags static_args = gopt Opt_StaticArgumentTransformation dflags rules_on = gopt Opt_EnableRewriteRules dflags eta_expand_on = gopt Opt_DoLambdaEtaExpansion dflags @@ -350,6 +352,10 @@ getCoreToDo dflags maybe_rule_check (Phase 0), + runWhen late_specialise + (CoreDoPasses [ CoreDoSpecialising + , simpl_phase 0 ["post-late-spec"] max_iter]), + -- Final clean-up simplification: simpl_phase 0 ["final"] max_iter, @@ -520,10 +526,12 @@ ruleCheckPass current_phase pat guts = { rb <- getRuleBase ; dflags <- getDynFlags ; vis_orphs <- getVisibleOrphanMods + ; let rule_fn fn = getRules (RuleEnv rb vis_orphs) fn + ++ (mg_rules guts) ; liftIO $ putLogMsg dflags NoReason Err.SevDump noSrcSpan (defaultDumpStyle dflags) (ruleCheckProgram current_phase pat - (RuleEnv rb vis_orphs) (mg_binds guts)) + rule_fn (mg_binds guts)) ; return guts } doPassDUM :: (DynFlags -> UniqSupply -> CoreProgram -> IO CoreProgram) -> ModGuts -> CoreM ModGuts |