Commit 444c6250 authored by rl@cse.unsw.edu.au's avatar rl@cse.unsw.edu.au

Prevent excessive inlining with DPH

This adds a new flag -finline-if-enough-args which disables inlining for
partially applied functions. It is automatically set by -Odph. This is a
temporary hack and should remain undocumented.

MERGE TO 6.10
parent 8efc5f20
...@@ -586,10 +586,13 @@ callSiteInline dflags active_inline id lone_variable arg_infos cont_info ...@@ -586,10 +586,13 @@ callSiteInline dflags active_inline id lone_variable arg_infos cont_info
-> True -> True
| otherwise | otherwise
-> some_benefit && small_enough -> some_benefit && small_enough && inline_enough_args
where where
enough_args = n_val_args >= n_vals_wanted enough_args = n_val_args >= n_vals_wanted
inline_enough_args =
not (dopt Opt_InlineIfEnoughArgs dflags) || enough_args
some_benefit = or arg_infos || really_interesting_cont some_benefit = or arg_infos || really_interesting_cont
-- There must be something interesting -- There must be something interesting
......
...@@ -261,6 +261,7 @@ data DynFlag ...@@ -261,6 +261,7 @@ data DynFlag
| Opt_UnboxStrictFields | Opt_UnboxStrictFields
| Opt_MethodSharing | Opt_MethodSharing
| Opt_DictsCheap | Opt_DictsCheap
| Opt_InlineIfEnoughArgs
| Opt_EnableRewriteRules -- Apply rewrite rules during simplification | Opt_EnableRewriteRules -- Apply rewrite rules during simplification
| Opt_Vectorise | Opt_Vectorise
| Opt_RegsGraph -- do graph coloring register allocation | Opt_RegsGraph -- do graph coloring register allocation
...@@ -1545,6 +1546,7 @@ fFlags = [ ...@@ -1545,6 +1546,7 @@ fFlags = [
( "unbox-strict-fields", Opt_UnboxStrictFields, const Supported ), ( "unbox-strict-fields", Opt_UnboxStrictFields, const Supported ),
( "method-sharing", Opt_MethodSharing, const Supported ), ( "method-sharing", Opt_MethodSharing, const Supported ),
( "dicts-cheap", Opt_DictsCheap, const Supported ), ( "dicts-cheap", Opt_DictsCheap, const Supported ),
( "inline-if-enough-args", Opt_InlineIfEnoughArgs, const Supported ),
( "excess-precision", Opt_ExcessPrecision, const Supported ), ( "excess-precision", Opt_ExcessPrecision, const Supported ),
( "asm-mangling", Opt_DoAsmMangling, const Supported ), ( "asm-mangling", Opt_DoAsmMangling, const Supported ),
( "print-bind-result", Opt_PrintBindResult, const Supported ), ( "print-bind-result", Opt_PrintBindResult, const Supported ),
...@@ -1908,6 +1910,7 @@ setOptLevel n dflags ...@@ -1908,6 +1910,7 @@ setOptLevel n dflags
-- -fmax-simplifier-iterations20 this is necessary sometimes -- -fmax-simplifier-iterations20 this is necessary sometimes
-- -fno-spec-constr-threshold run SpecConstr even for big loops -- -fno-spec-constr-threshold run SpecConstr even for big loops
-- -fno-spec-constr-count SpecConstr as much as possible -- -fno-spec-constr-count SpecConstr as much as possible
-- -finline-enough-args hack to prevent excessive inlining
-- --
setDPHOpt :: DynFlags -> DynFlags setDPHOpt :: DynFlags -> DynFlags
setDPHOpt dflags = setOptLevel 2 (dflags { maxSimplIterations = 20 setDPHOpt dflags = setOptLevel 2 (dflags { maxSimplIterations = 20
...@@ -1916,6 +1919,7 @@ setDPHOpt dflags = setOptLevel 2 (dflags { maxSimplIterations = 20 ...@@ -1916,6 +1919,7 @@ setDPHOpt dflags = setOptLevel 2 (dflags { maxSimplIterations = 20
}) })
`dopt_set` Opt_DictsCheap `dopt_set` Opt_DictsCheap
`dopt_unset` Opt_MethodSharing `dopt_unset` Opt_MethodSharing
`dopt_set` Opt_InlineIfEnoughArgs
data DPHBackend = DPHPar data DPHBackend = DPHPar
| DPHSeq | DPHSeq
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment