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

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
-> True
| otherwise
-> some_benefit && small_enough
-> some_benefit && small_enough && inline_enough_args
where
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
-- There must be something interesting
......
......@@ -261,6 +261,7 @@ data DynFlag
| Opt_UnboxStrictFields
| Opt_MethodSharing
| Opt_DictsCheap
| Opt_InlineIfEnoughArgs
| Opt_EnableRewriteRules -- Apply rewrite rules during simplification
| Opt_Vectorise
| Opt_RegsGraph -- do graph coloring register allocation
......@@ -1545,6 +1546,7 @@ fFlags = [
( "unbox-strict-fields", Opt_UnboxStrictFields, const Supported ),
( "method-sharing", Opt_MethodSharing, const Supported ),
( "dicts-cheap", Opt_DictsCheap, const Supported ),
( "inline-if-enough-args", Opt_InlineIfEnoughArgs, const Supported ),
( "excess-precision", Opt_ExcessPrecision, const Supported ),
( "asm-mangling", Opt_DoAsmMangling, const Supported ),
( "print-bind-result", Opt_PrintBindResult, const Supported ),
......@@ -1908,6 +1910,7 @@ setOptLevel n dflags
-- -fmax-simplifier-iterations20 this is necessary sometimes
-- -fno-spec-constr-threshold run SpecConstr even for big loops
-- -fno-spec-constr-count SpecConstr as much as possible
-- -finline-enough-args hack to prevent excessive inlining
--
setDPHOpt :: DynFlags -> DynFlags
setDPHOpt dflags = setOptLevel 2 (dflags { maxSimplIterations = 20
......@@ -1916,6 +1919,7 @@ setDPHOpt dflags = setOptLevel 2 (dflags { maxSimplIterations = 20
})
`dopt_set` Opt_DictsCheap
`dopt_unset` Opt_MethodSharing
`dopt_set` Opt_InlineIfEnoughArgs
data DPHBackend = DPHPar
| 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