diff options
author | Sylvain Henry <sylvain@haskus.fr> | 2021-08-09 11:29:45 +0200 |
---|---|---|
committer | Marge Bot <ben+marge-bot@smart-cactus.org> | 2021-08-13 07:54:32 -0400 |
commit | c367b39e5236b86b4923d826ab0395b33211d30a (patch) | |
tree | 658e595a18356bcda04f3f72b168eb86bc51bf99 /compiler/GHC/Iface/Recomp.hs | |
parent | 7ad813a480c9ed383fe1fea11a57f90d4f6f9b71 (diff) | |
download | haskell-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.hs | 19 |
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) } |