summaryrefslogtreecommitdiff
path: root/compiler/main
diff options
context:
space:
mode:
authorJoachim Breitner <mail@joachim-breitner.de>2016-12-15 10:57:43 -0800
committerJoachim Breitner <mail@joachim-breitner.de>2016-12-29 19:25:50 +0100
commitaac08a0f37442a79096d7d2392f34b42ee5da2bb (patch)
tree4001ca3f68b6bb5eef8089d52633817913c47a16 /compiler/main
parenta3704409acc3bd237d3e872f640686918fb51f5f (diff)
downloadhaskell-wip/T9291.tar.gz
Add a CSE pass to Stg (#9291)wip/T9291
This CSE pass only targets data constructor applications. This is probably the best we can do, as function calls and primitive operations might have side-effects. Introduces the flag -fstg-cse, enabled by default with -O. Differential Revision: https://phabricator.haskell.org/D2871
Diffstat (limited to 'compiler/main')
-rw-r--r--compiler/main/DynFlags.hs3
1 files changed, 3 insertions, 0 deletions
diff --git a/compiler/main/DynFlags.hs b/compiler/main/DynFlags.hs
index e7ace47f2a..0bc119a783 100644
--- a/compiler/main/DynFlags.hs
+++ b/compiler/main/DynFlags.hs
@@ -427,6 +427,7 @@ data GeneralFlag
| Opt_CrossModuleSpecialise
| Opt_StaticArgumentTransformation
| Opt_CSE
+ | Opt_StgCSE
| Opt_LiberateCase
| Opt_SpecConstr
| Opt_DoLambdaEtaExpansion
@@ -3481,6 +3482,7 @@ fFlagsDeps = [
flagSpec "cmm-elim-common-blocks" Opt_CmmElimCommonBlocks,
flagSpec "cmm-sink" Opt_CmmSink,
flagSpec "cse" Opt_CSE,
+ flagSpec "stg-cse" Opt_StgCSE,
flagSpec "cpr-anal" Opt_CprAnal,
flagSpec "defer-type-errors" Opt_DeferTypeErrors,
flagSpec "defer-typed-holes" Opt_DeferTypedHoles,
@@ -3930,6 +3932,7 @@ optLevelFlags -- see Note [Documenting optimisation flags]
, ([1,2], Opt_CmmElimCommonBlocks)
, ([1,2], Opt_CmmSink)
, ([1,2], Opt_CSE)
+ , ([1,2], Opt_StgCSE)
, ([1,2], Opt_EnableRewriteRules) -- Off for -O0; see Note [Scoping for Builtin rules]
-- in PrelRules
, ([1,2], Opt_FloatIn)