Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC
Commits:
b2914797 by Cheng Shao at 2025-08-20T11:53:00-04:00
driver: use UniqSet for hiddenModules in DynFlags/FinderOpts
This patch replaces Set ModuleName with UniqSet ModuleName in
DynFlags.hiddenModules and FinderOpts.finder_hiddenModules for
improved efficiency.
Co-authored-by: Codex
- - - - -
0335d899 by Cheng Shao at 2025-08-20T11:53:00-04:00
driver: use UniqMap ModuleName in the finder
This patch replaces Map ModuleName with UniqMap ModuleName in the
finder for improved efficiency.
Co-authored-by: Codex
- - - - -
7 changed files:
- compiler/GHC/Driver/Config/Finder.hs
- compiler/GHC/Driver/DynFlags.hs
- compiler/GHC/Driver/Make.hs
- compiler/GHC/Driver/Session.hs
- compiler/GHC/HsToCore/Docs.hs
- compiler/GHC/Unit/Finder.hs
- compiler/GHC/Unit/Finder/Types.hs
Changes:
=====================================
compiler/GHC/Driver/Config/Finder.hs
=====================================
@@ -9,7 +9,7 @@ import GHC.Driver.DynFlags
import GHC.Unit.Finder.Types
import GHC.Data.FastString
import GHC.Data.OsPath
-import qualified Data.Map as Map
+import GHC.Types.Unique.Map
-- | Create a new 'FinderOpts' from DynFlags.
initFinderOpts :: DynFlags -> FinderOpts
@@ -22,7 +22,7 @@ initFinderOpts flags = FinderOpts
, finder_workingDirectory = fmap unsafeEncodeUtf $ workingDirectory flags
, finder_thisPackageName = mkFastString <$> thisPackageName flags
, finder_hiddenModules = hiddenModules flags
- , finder_reexportedModules = Map.fromList [(known_as, is_as) | ReexportedModule is_as known_as <- reverse (reexportedModules flags)]
+ , finder_reexportedModules = listToUniqMap [(known_as, is_as) | ReexportedModule is_as known_as <- reverse (reexportedModules flags)]
, finder_hieDir = fmap unsafeEncodeUtf $ hieDir flags
, finder_hieSuf = unsafeEncodeUtf $ hieSuf flags
, finder_hiDir = fmap unsafeEncodeUtf $ hiDir flags
=====================================
compiler/GHC/Driver/DynFlags.hs
=====================================
@@ -143,6 +143,7 @@ import System.Directory
import GHC.Foreign (withCString, peekCString)
import qualified Data.Set as Set
+import GHC.Types.Unique.Set
import qualified GHC.LanguageExtensions as LangExt
@@ -261,7 +262,7 @@ data DynFlags = DynFlags {
-- Note [Filepaths and Multiple Home Units]
workingDirectory :: Maybe FilePath,
thisPackageName :: Maybe String, -- ^ What the package is called, use with multiple home units
- hiddenModules :: Set.Set ModuleName,
+ hiddenModules :: !(UniqSet ModuleName),
reexportedModules :: [ReexportedModule],
-- ways
@@ -597,7 +598,7 @@ defaultDynFlags mySettings =
workingDirectory = Nothing,
thisPackageName = Nothing,
- hiddenModules = Set.empty,
+ hiddenModules = emptyUniqSet,
reexportedModules = [],
objectDir = Nothing,
=====================================
compiler/GHC/Driver/Make.hs
=====================================
@@ -109,13 +109,14 @@ import GHC.Unit.Module.ModDetails
import qualified Data.Map as Map
import qualified Data.Set as Set
+import GHC.Types.Unique.Set
import Control.Concurrent.MVar
import Control.Monad
import qualified Control.Monad.Catch as MC
import Data.IORef
import Data.Maybe
-import Data.List (sortOn, groupBy, sortBy)
+import Data.List (sort, sortOn, groupBy, sortBy)
import qualified Data.List as List
import System.FilePath
@@ -313,14 +314,15 @@ warnUnknownModules hsc_env dflags mod_graph = do
where
diag_opts = initDiagOpts dflags
- unit_mods = Set.fromList (map ms_mod_name
+ unit_mods :: UniqSet ModuleName
+ unit_mods = mkUniqSet (map ms_mod_name
(filter (\ms -> ms_unitid ms == homeUnitId_ dflags)
(mgModSummaries mod_graph)))
reexported_mods = reexportedModules dflags
hidden_mods = hiddenModules dflags
- hidden_warns = hidden_mods `Set.difference` unit_mods
+ hidden_warns = hidden_mods `minusUniqSet` unit_mods
lookupModule mn = findImportedModule hsc_env mn NoPkgQual
@@ -337,7 +339,7 @@ warnUnknownModules hsc_env dflags mod_graph = do
final_msgs hidden_warns reexported_warns
=
unionManyMessages $
- [warn (DriverUnknownHiddenModules (homeUnitId_ dflags) (Set.toList hidden_warns)) | not (Set.null hidden_warns)]
+ [warn (DriverUnknownHiddenModules (homeUnitId_ dflags) (sort $ nonDetEltsUniqSet hidden_warns)) | not (isEmptyUniqSet hidden_warns)]
++ [warn (DriverUnknownReexportedModules (homeUnitId_ dflags) reexported_warns) | not (null reexported_warns)]
-- | Describes which modules of the module graph need to be loaded.
=====================================
compiler/GHC/Driver/Session.hs
=====================================
@@ -293,6 +293,7 @@ import Data.List.NonEmpty (NonEmpty (..))
import qualified Data.List.NonEmpty as NE
import qualified Data.Map as Map
import qualified Data.Set as Set
+import GHC.Types.Unique.Set
import Data.Word
import System.FilePath
import Text.ParserCombinators.ReadP hiding (char)
@@ -3153,7 +3154,7 @@ setPackageName p d = d { thisPackageName = Just p }
addHiddenModule :: String -> DynP ()
addHiddenModule p =
- upd (\s -> s{ hiddenModules = Set.insert (mkModuleName p) (hiddenModules s) })
+ upd (\s -> s{ hiddenModules = addOneToUniqSet (hiddenModules s) (mkModuleName p) })
addReexportedModule :: String -> DynP ()
addReexportedModule p =
=====================================
compiler/GHC/HsToCore/Docs.hs
=====================================
@@ -175,7 +175,7 @@ mkDocStructureFromExportList mdl import_avails export_list =
moduleExport alias avails =
DsiModExport (nubSortNE orig_names) (sortAvails (nubAvails avails))
where
- orig_names = M.findWithDefault aliasErr alias aliasMap
+ orig_names = fromMaybe aliasErr (lookupUniqMap aliasMap alias)
aliasErr = error $ "mkDocStructureFromExportList: "
++ (moduleNameString . moduleName) mdl
++ ": Can't find alias " ++ moduleNameString alias
@@ -185,9 +185,9 @@ mkDocStructureFromExportList mdl import_avails export_list =
NonEmpty.toList
-- Map from aliases to true module names.
- aliasMap :: Map ModuleName (NonEmpty ModuleName)
+ aliasMap :: UniqMap ModuleName (NonEmpty ModuleName)
aliasMap =
- M.fromListWith (S.<>) $
+ listToUniqMap_C (S.<>) $
(this_mdl_name, this_mdl_name :| [])
: (flip concatMap (M.toList imported) $ \(mdl, imvs) ->
[(imv_name imv, moduleName mdl :| []) | imv <- imvs])
=====================================
compiler/GHC/Unit/Finder.hs
=====================================
@@ -65,9 +65,10 @@ import Control.Applicative ((<|>))
import Control.Monad
import Data.Time
import qualified Data.Map as M
+import GHC.Types.Unique.Map
import GHC.Driver.Env
import GHC.Driver.Config.Finder
-import qualified Data.Set as Set
+import GHC.Types.Unique.Set
import Data.List.NonEmpty ( NonEmpty (..) )
import qualified System.OsPath as OsPath
import qualified Data.List.NonEmpty as NE
@@ -194,9 +195,9 @@ findImportedModuleNoHsc fc fopts ue mhome_unit mod_name mb_pkg =
home_pkg_import (uid, opts)
-- If the module is reexported, then look for it as if it was from the perspective
-- of that package which reexports it.
- | Just real_mod_name <- mod_name `M.lookup` finder_reexportedModules opts =
+ | Just real_mod_name <- lookupUniqMap (finder_reexportedModules opts) mod_name =
findImportedModuleNoHsc fc opts ue (Just $ DefiniteHomeUnit uid Nothing) real_mod_name NoPkgQual
- | mod_name `Set.member` finder_hiddenModules opts =
+ | elementOfUniqSet mod_name (finder_hiddenModules opts) =
return (mkHomeHidden uid)
| otherwise =
findHomePackageModule fc opts uid mod_name
@@ -794,4 +795,3 @@ findObjectLinkable mod obj_fn obj_time =
pure (Linkable obj_time mod (NE.singleton (DotO obj_fn ModuleObject)))
-- We used to look for _stub.o files here, but that was a bug (#706)
-- Now GHC merges the stub.o into the main .o (#3687)
-
=====================================
compiler/GHC/Unit/Finder/Types.hs
=====================================
@@ -12,12 +12,13 @@ import GHC.Prelude
import GHC.Unit
import GHC.Data.OsPath
import qualified Data.Map as M
+import GHC.Types.Unique.Map
import GHC.Fingerprint
import GHC.Platform.Ways
import GHC.Unit.Env
import GHC.Data.FastString
-import qualified Data.Set as Set
+import GHC.Types.Unique.Set
-- | The 'FinderCache' maps modules to the result of
-- searching for that module. It records the results of searching for
@@ -101,8 +102,8 @@ data FinderOpts = FinderOpts
-- that have a similar name.
, finder_workingDirectory :: Maybe OsPath
, finder_thisPackageName :: Maybe FastString
- , finder_hiddenModules :: Set.Set ModuleName
- , finder_reexportedModules :: M.Map ModuleName ModuleName -- Reverse mapping, if you are looking for this name then look for this module.
+ , finder_hiddenModules :: !(UniqSet ModuleName)
+ , finder_reexportedModules :: !(UniqMap ModuleName ModuleName) -- Reverse mapping, if you are looking for this name then look for this module.
, finder_hieDir :: Maybe OsPath
, finder_hieSuf :: OsString
, finder_hiDir :: Maybe OsPath
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/0b9c74374074d907ad9b32f79caf744...
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/0b9c74374074d907ad9b32f79caf744...
You're receiving this email because of your account on gitlab.haskell.org.