summaryrefslogtreecommitdiff
path: root/utils/genprimopcode
diff options
context:
space:
mode:
authorSebastian Graf <sebastian.graf@kit.edu>2019-02-19 13:52:11 +0100
committerMarge Bot <ben+marge-bot@smart-cactus.org>2019-03-07 20:44:08 -0500
commit1675d40afe07b9c414eaa37d85819f37f8420118 (patch)
tree0e0fe32fdf1a70a90e2c531a89b0a16b07fbad20 /utils/genprimopcode
parent068b7e983f4a0b35f453aa5e609998efd0c3f334 (diff)
downloadhaskell-1675d40afe07b9c414eaa37d85819f37f8420118.tar.gz
Always do the worker/wrapper split for NOINLINEs
Trac #10069 revealed that small NOINLINE functions didn't get split into worker and wrapper. This was due to `certainlyWillInline` saying that any unfoldings with a guidance of `UnfWhen` inline unconditionally. That isn't the case for NOINLINE functions, so we catch this case earlier now. Nofib results: -------------------------------------------------------------------------------- Program Allocs Instrs -------------------------------------------------------------------------------- fannkuch-redux -0.3% 0.0% gg +0.0% +0.1% maillist -0.2% -0.2% minimax 0.0% -0.8% -------------------------------------------------------------------------------- Min -0.3% -0.8% Max +0.0% +0.1% Geometric Mean -0.0% -0.0% Fixes #10069. ------------------------- Metric Increase: T9233 -------------------------
Diffstat (limited to 'utils/genprimopcode')
-rw-r--r--utils/genprimopcode/Main.hs8
1 files changed, 7 insertions, 1 deletions
diff --git a/utils/genprimopcode/Main.hs b/utils/genprimopcode/Main.hs
index d7ae9ffe01..3427a1ebae 100644
--- a/utils/genprimopcode/Main.hs
+++ b/utils/genprimopcode/Main.hs
@@ -611,7 +611,13 @@ gen_wrappers (Info _ entries)
= "{-# LANGUAGE MagicHash, NoImplicitPrelude, UnboxedTuples #-}\n"
-- Dependencies on Prelude must be explicit in libraries/base, but we
-- don't need the Prelude here so we add NoImplicitPrelude.
- ++ "{-# OPTIONS_GHC -Wno-deprecations #-}\n"
+ ++ "{-# OPTIONS_GHC -Wno-deprecations -O0 #-}\n"
+ -- No point in optimising this at all.
+ -- Performing WW on this module is harmful even, two reasons:
+ -- 1. Inferred strictness signatures are all bottom, which is a lie
+ -- 2. Doing the worker/wrapper split based on that information will
+ -- introduce references to Control.Exception.Base.absentError,
+ -- which isn't available at this point.
++ "module GHC.PrimopWrappers where\n"
++ "import qualified GHC.Prim\n"
++ "import GHC.Tuple ()\n"