summaryrefslogtreecommitdiff
path: root/compiler/GHC/Iface/Recomp.hs
diff options
context:
space:
mode:
authorSylvain Henry <sylvain@haskus.fr>2021-08-09 11:29:45 +0200
committerMarge Bot <ben+marge-bot@smart-cactus.org>2021-08-13 07:54:32 -0400
commitc367b39e5236b86b4923d826ab0395b33211d30a (patch)
tree658e595a18356bcda04f3f72b168eb86bc51bf99 /compiler/GHC/Iface/Recomp.hs
parent7ad813a480c9ed383fe1fea11a57f90d4f6f9b71 (diff)
downloadhaskell-c367b39e5236b86b4923d826ab0395b33211d30a.tar.gz
Refactoring module dependencies
* Make mkDependencies pure * Use Sets instead of sorted lists Notable perf changes: MultiLayerModules(normal) ghc/alloc 4130851520.0 2981473072.0 -27.8% T13719(normal) ghc/alloc 4313296052.0 4151647512.0 -3.7% Metric Decrease: MultiLayerModules T13719
Diffstat (limited to 'compiler/GHC/Iface/Recomp.hs')
-rw-r--r--compiler/GHC/Iface/Recomp.hs19
1 files changed, 9 insertions, 10 deletions
diff --git a/compiler/GHC/Iface/Recomp.hs b/compiler/GHC/Iface/Recomp.hs
index 2e2824a7cb..0abee1a5c0 100644
--- a/compiler/GHC/Iface/Recomp.hs
+++ b/compiler/GHC/Iface/Recomp.hs
@@ -31,7 +31,6 @@ import GHC.Hs
import GHC.Data.Graph.Directed
import GHC.Data.Maybe
-import GHC.Data.FastString
import GHC.Utils.Error
import GHC.Utils.Panic
@@ -64,9 +63,9 @@ import GHC.Unit.Module.Warnings
import GHC.Unit.Module.Deps
import Control.Monad
-import Data.Function
import Data.List (sortBy, sort)
import qualified Data.Map as Map
+import qualified Data.Set as Set
import Data.Word (Word64)
import Data.Either
@@ -272,7 +271,7 @@ checkVersions hsc_env mod_summary iface
-- case we'll compile the module from scratch anyhow).
when (isOneShot (ghcMode (hsc_dflags hsc_env))) $ do {
- ; updateEps_ $ \eps -> eps { eps_is_boot = mkModDeps $ (dep_boot_mods (mi_deps iface)) }
+ ; updateEps_ $ \eps -> eps { eps_is_boot = mkModDeps $ dep_boot_mods (mi_deps iface) }
}
; recomp <- checkList [checkModUsage (hsc_FC hsc_env) (homeUnitAsUnit home_unit) u
| u <- mi_usages iface]
@@ -473,8 +472,8 @@ checkDependencies hsc_env summary iface
fc = hsc_FC hsc_env
home_unit = hsc_home_unit hsc_env
units = hsc_units hsc_env
- prev_dep_mods = map gwib_mod $ dep_direct_mods (mi_deps iface)
- prev_dep_pkgs = sort (dep_direct_pkgs (mi_deps iface))
+ prev_dep_mods = map gwib_mod $ Set.toAscList $ dep_direct_mods (mi_deps iface)
+ prev_dep_pkgs = Set.toAscList (dep_direct_pkgs (mi_deps iface))
bkpk_units = map (("Signature",) . indefUnit . instUnitInstanceOf . moduleUnit) (requirementMerges units (moduleName (mi_module iface)))
implicit_deps = map ("Implicit",) (implicitPackageDeps dflags)
@@ -1196,11 +1195,11 @@ getOrphanHashes hsc_env mods = do
sortDependencies :: Dependencies -> Dependencies
sortDependencies d
- = Deps { dep_direct_mods = sortBy (lexicalCompareFS `on` (moduleNameFS . gwib_mod)) (dep_direct_mods d),
- dep_direct_pkgs = sort (dep_direct_pkgs d),
- dep_sig_mods = sort (dep_sig_mods d),
- dep_trusted_pkgs = sort (dep_trusted_pkgs d),
- dep_boot_mods = sort (dep_boot_mods d),
+ = Deps { dep_direct_mods = dep_direct_mods d,
+ dep_direct_pkgs = dep_direct_pkgs d,
+ dep_sig_mods = sort (dep_sig_mods d),
+ dep_trusted_pkgs = dep_trusted_pkgs d,
+ dep_boot_mods = dep_boot_mods d,
dep_orphs = sortBy stableModuleCmp (dep_orphs d),
dep_finsts = sortBy stableModuleCmp (dep_finsts d) }