summaryrefslogtreecommitdiff
path: root/compiler/main/Packages.hs
diff options
context:
space:
mode:
authorklebinger.andreas@gmx.at <klebinger.andreas@gmx.at>2018-08-21 12:10:38 -0400
committerBen Gamari <ben@smart-cactus.org>2018-08-21 18:52:42 -0400
commit09c1d5afba655a2427a448a9933bebe7d13b696b (patch)
treed23083a9e99afe785f632e89f0186af8b191aee2 /compiler/main/Packages.hs
parent02518f9d99c2d038384263f9e039efcb09bc96ff (diff)
downloadhaskell-09c1d5afba655a2427a448a9933bebe7d13b696b.tar.gz
Replace most occurences of foldl with foldl'.
This patch adds foldl' to GhcPrelude and changes must occurences of foldl to foldl'. This leads to better performance especially for quick builds where GHC does not perform strictness analysis. It does change strictness behaviour when we use foldl' to turn a argument list into function applications. But this is only a drawback if code looks ONLY at the last argument but not at the first. And as the benchmarks show leads to fewer allocations in practice at O2. Compiler performance for Nofib: O2 Allocations: -1 s.d. ----- -0.0% +1 s.d. ----- -0.0% Average ----- -0.0% O2 Compile Time: -1 s.d. ----- -2.8% +1 s.d. ----- +1.3% Average ----- -0.8% O0 Allocations: -1 s.d. ----- -0.2% +1 s.d. ----- -0.1% Average ----- -0.2% Test Plan: ci Reviewers: goldfire, bgamari, simonmar, tdammers, monoidal Reviewed By: bgamari, monoidal Subscribers: tdammers, rwbarton, thomie, carter Differential Revision: https://phabricator.haskell.org/D4929
Diffstat (limited to 'compiler/main/Packages.hs')
-rw-r--r--compiler/main/Packages.hs4
1 files changed, 2 insertions, 2 deletions
diff --git a/compiler/main/Packages.hs b/compiler/main/Packages.hs
index 71354b1463..68940a7290 100644
--- a/compiler/main/Packages.hs
+++ b/compiler/main/Packages.hs
@@ -417,7 +417,7 @@ searchPackageId dflags pid = filter ((pid ==) . sourcePackageId)
extendPackageConfigMap
:: PackageConfigMap -> [PackageConfig] -> PackageConfigMap
extendPackageConfigMap (PackageConfigMap pkg_map closure) new_pkgs
- = PackageConfigMap (foldl add pkg_map new_pkgs) closure
+ = PackageConfigMap (foldl' add pkg_map new_pkgs) closure
-- We also add the expanded version of the packageConfigId, so that
-- 'improveUnitId' can find it.
where add pkg_map p = addToUDFM (addToUDFM pkg_map (expandedPackageConfigId p) p)
@@ -1519,7 +1519,7 @@ mkPackageState dflags dbs preload0 = do
--
let preload1 = Map.keys (Map.filter uv_explicit vis_map)
- let pkgname_map = foldl add Map.empty pkgs2
+ let pkgname_map = foldl' add Map.empty pkgs2
where add pn_map p
= Map.insert (packageName p) (componentId p) pn_map