packages feed

ghc-lib-parser 9.4.3.20221104 → 9.4.4.20221225

raw patch · 20 files changed

+244/−95 lines, 20 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

+ GHC.Cmm.Dataflow.Block: blockConcat :: [Block n O O] -> Block n O O
+ GHC.Cmm.MachOp: MemOrderAcquire :: MemoryOrdering
+ GHC.Cmm.MachOp: MemOrderRelaxed :: MemoryOrdering
+ GHC.Cmm.MachOp: MemOrderRelease :: MemoryOrdering
+ GHC.Cmm.MachOp: MemOrderSeqCst :: MemoryOrdering
+ GHC.Cmm.MachOp: data MemoryOrdering
+ GHC.Cmm.MachOp: instance GHC.Classes.Eq GHC.Cmm.MachOp.MemoryOrdering
+ GHC.Cmm.MachOp: instance GHC.Classes.Ord GHC.Cmm.MachOp.MemoryOrdering
+ GHC.Cmm.MachOp: instance GHC.Show.Show GHC.Cmm.MachOp.MemoryOrdering
+ GHC.Core.TyCon: primRepIsInt :: PrimRep -> Bool
+ GHC.Core.TyCon: primRepIsWord :: PrimRep -> Bool
+ GHC.Driver.Flags: Opt_SuppressCoercionTypes :: GeneralFlag
+ GHC.Driver.Flags: Opt_SuppressStgReps :: GeneralFlag
+ GHC.Driver.Session: Opt_SuppressCoercionTypes :: GeneralFlag
+ GHC.Driver.Session: Opt_SuppressStgReps :: GeneralFlag
+ GHC.Types.RepType: VecSlot :: Int -> PrimElemRep -> SlotTy
+ GHC.Types.RepType: primRepToRuntimeRep :: PrimRep -> Type
+ GHC.Utils.Outputable: [sdocSuppressCoercionTypes] :: SDocContext -> !Bool
+ GHC.Utils.Outputable: [sdocSuppressStgReps] :: SDocContext -> !Bool
- GHC.Cmm.MachOp: MO_AtomicRead :: Width -> CallishMachOp
+ GHC.Cmm.MachOp: MO_AtomicRead :: Width -> MemoryOrdering -> CallishMachOp
- GHC.Cmm.MachOp: MO_AtomicWrite :: Width -> CallishMachOp
+ GHC.Cmm.MachOp: MO_AtomicWrite :: Width -> MemoryOrdering -> CallishMachOp
- GHC.Core.Type: funResultTy :: Type -> Type
+ GHC.Core.Type: funResultTy :: HasDebugCallStack => Type -> Type
- GHC.Types.Demand: dmdTransformDataConSig :: Arity -> DmdTransformer
+ GHC.Types.Demand: dmdTransformDataConSig :: [StrictnessMark] -> DmdTransformer
- GHC.Types.Demand: peelManyCalls :: Int -> SubDemand -> Card
+ GHC.Types.Demand: peelManyCalls :: Arity -> SubDemand -> (Card, SubDemand)
- GHC.Types.Literal: LitRubbish :: Type -> Literal
+ GHC.Types.Literal: LitRubbish :: RuntimeRepType -> Literal
- GHC.Types.RepType: layoutUbxSum :: SortedSlotTys -> [SlotTy] -> [Int]
+ GHC.Types.RepType: layoutUbxSum :: HasDebugCallStack => SortedSlotTys -> [SlotTy] -> [Int]
- GHC.Utils.Outputable: SDC :: !PprStyle -> !Scheme -> !PprColour -> !Bool -> !Int -> !Int -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !FastString -> SDoc -> SDocContext
+ GHC.Utils.Outputable: SDC :: !PprStyle -> !Scheme -> !PprColour -> !Bool -> !Int -> !Int -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !Bool -> !FastString -> SDoc -> SDocContext

Files

compiler/GHC/Cmm/Dataflow/Block.hs view
@@ -14,6 +14,7 @@     , IndexedCO     , Block(..)     , blockAppend+    , blockConcat     , blockCons     , blockFromList     , blockJoin@@ -136,6 +137,8 @@ blockAppend :: Block n e O -> Block n O x -> Block n e x blockAppend = cat +blockConcat :: [Block n O O] -> Block n O O+blockConcat = foldr blockAppend emptyBlock  -- Taking apart 
compiler/GHC/Cmm/MachOp.hs view
@@ -24,6 +24,7 @@     , machOpMemcpyishAlign      -- Atomic read-modify-write+    , MemoryOrdering(..)     , AtomicMachOp(..)    ) where@@ -514,8 +515,11 @@     MO_FS_Conv from _   -> [from]     MO_FF_Conv from _   -> [from] -    MO_V_Insert  l r    -> [typeWidth (vec l (cmmBits r)),r,wordWidth platform]-    MO_V_Extract l r    -> [typeWidth (vec l (cmmBits r)),wordWidth platform]+    MO_V_Insert   l r   -> [typeWidth (vec l (cmmBits r)),r, W32]+    MO_V_Extract  l r   -> [typeWidth (vec l (cmmBits r)), W32]+    MO_VF_Insert  l r   -> [typeWidth (vec l (cmmFloat r)),r,W32]+    MO_VF_Extract l r   -> [typeWidth (vec l (cmmFloat r)),W32]+      -- SIMD vector indices are always 32 bit      MO_V_Add _ r        -> [r,r]     MO_V_Sub _ r        -> [r,r]@@ -528,9 +532,6 @@     MO_VU_Quot _ r      -> [r,r]     MO_VU_Rem  _ r      -> [r,r] -    MO_VF_Insert  l r   -> [typeWidth (vec l (cmmFloat r)),r,wordWidth platform]-    MO_VF_Extract l r   -> [typeWidth (vec l (cmmFloat r)),wordWidth platform]-     MO_VF_Add  _ r      -> [r,r]     MO_VF_Sub  _ r      -> [r,r]     MO_VF_Mul  _ r      -> [r,r]@@ -666,10 +667,12 @@   | MO_BSwap Width   | MO_BRev Width -  -- Atomic read-modify-write.+  -- | Atomic read-modify-write. Arguments are @[dest, n]@.   | MO_AtomicRMW Width AtomicMachOp-  | MO_AtomicRead Width-  | MO_AtomicWrite Width+  -- | Atomic read. Arguments are @[addr]@.+  | MO_AtomicRead Width MemoryOrdering+  -- | Atomic write. Arguments are @[addr, value]@.+  | MO_AtomicWrite Width MemoryOrdering   -- | Atomic compare-and-swap. Arguments are @[dest, expected, new]@.   -- Sequentially consistent.   -- Possible future refactoring: should this be an'MO_AtomicRMW' variant?@@ -683,6 +686,14 @@   | MO_SuspendThread   | MO_ResumeThread   deriving (Eq, Show)++-- | C11 memory ordering semantics.+data MemoryOrdering+  = MemOrderRelaxed  -- ^ relaxed ordering+  | MemOrderAcquire  -- ^ acquire ordering+  | MemOrderRelease  -- ^ release ordering+  | MemOrderSeqCst   -- ^ sequentially consistent+  deriving (Eq, Ord, Show)  -- | The operation to perform atomically. data AtomicMachOp =
compiler/GHC/Core/DataCon.hs view
@@ -795,20 +795,37 @@ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Notice that we do *not* say the worker Id is strict even if the data constructor is declared strict-     e.g.    data T = MkT !(Int,Int)-Why?  Because the *wrapper* $WMkT is strict (and its unfolding has case-expressions that do the evals) but the *worker* MkT itself is not. If we-pretend it is strict then when we see-     case x of y -> MkT y-the simplifier thinks that y is "sure to be evaluated" (because the worker MkT-is strict) and drops the case.  No, the workerId MkT is not strict.+     e.g.    data T = MkT ![Int] Bool+Even though most often the evals are done by the *wrapper* $WMkT, there are+situations in which tag inference will re-insert evals around the worker.+So for all intents and purposes the *worker* MkT is strict, too! -However, the worker does have StrictnessMarks.  When the simplifier sees a-pattern-     case e of MkT x -> ...-it uses the dataConRepStrictness of MkT to mark x as evaluated; but that's-fine... dataConRepStrictness comes from the data con not from the worker Id.+Unfortunately, if we exposed accurate strictness of DataCon workers, we'd+see the following transformation: +  f xs = case xs of xs' { __DEFAULT -> ... case MkT xs b of x { __DEFAULT -> [x] } } -- DmdAnal: Strict in xs+  ==> { drop-seq, binder swap on xs' }+  f xs = case MkT xs b of x { __DEFAULT -> [x] } -- DmdAnal: Still strict in xs+  ==> { case-to-let }+  f xs = let x = MkT xs' b in [x] -- DmdAnal: No longer strict in xs!++I.e., we are ironically losing strictness in `xs` by dropping the eval on `xs`+and then doing case-to-let. The issue is that `exprIsHNF` currently says that+every DataCon worker app is a value. The implicit assumption is that surrounding+evals will have evaluated strict fields like `xs` before! But now that we had+just dropped the eval on `xs`, that assumption is no longer valid.++Long story short: By keeping the demand signature lazy, the Simplifier will not+drop the eval on `xs` and using `exprIsHNF` to decide case-to-let and others+remains sound.++Similarly, during demand analysis in dmdTransformDataConSig, we bump up the+field demand with `C_01`, *not* `C_11`, because the latter exposes too much+strictness that will drop the eval on `xs` above.++This issue is discussed at length in+"Failed idea: no wrappers for strict data constructors" in #21497 and #22475.+ Note [Bangs on data constructor arguments] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Consider@@ -1456,14 +1473,18 @@     res_ty  dataConNonlinearType :: DataCon -> Type+-- Just like dataConWrapperType, but with the+-- linearity on the arguments all zapped to Many dataConNonlinearType (MkData { dcUserTyVarBinders = user_tvbs,                                dcOtherTheta = theta, dcOrigArgTys = arg_tys,-                               dcOrigResTy = res_ty })-  = let arg_tys' = map (\(Scaled w t) -> Scaled (case w of One -> Many; _ -> w) t) arg_tys-    in mkInvisForAllTys user_tvbs $-       mkInvisFunTysMany theta $-       mkVisFunTys arg_tys' $-       res_ty+                               dcOrigResTy = res_ty,+                               dcStupidTheta = stupid_theta })+  = mkInvisForAllTys user_tvbs $+    mkInvisFunTysMany (stupid_theta ++ theta) $+    mkVisFunTys arg_tys' $+    res_ty+  where+    arg_tys' = map (\(Scaled w t) -> Scaled (case w of One -> Many; _ -> w) t) arg_tys  dataConDisplayType :: Bool -> DataCon -> Type dataConDisplayType show_linear_types dc
compiler/GHC/Core/Opt/Arity.hs view
@@ -853,7 +853,7 @@ andArityType env at1 (AT [] div2) = andWithTail env div2 at1  andWithTail :: ArityEnv -> Divergence -> ArityType -> ArityType-andWithTail env div1 at2@(AT lams2 _)+andWithTail env div1 at2   | isDeadEndDiv div1     -- case x of { T -> error; F -> \y.e }   = at2        -- Note [ABot branches: max arity wins] @@ -861,7 +861,7 @@   = AT [] topDiv    | otherwise  -- case x of { T -> plusInt <expensive>; F -> \y.e }-  = AT lams2 topDiv    -- We know div1 = topDiv+  = takeWhileOneShot at2    -- We know div1 = topDiv     -- See Note [Combining case branches: andWithTail]  @@ -2148,9 +2148,12 @@       | Just (tv, res_ty) <- splitForAllTyCoVar_maybe ty       , let (subst', tv') = substVarBndr subst tv       = go (n-1) res_ty subst' (tv' : rev_bs) (e `App` varToCoreExpr tv')+        -- The varToCoreExpr is important: `tv` might be a coercion variable       | Just (mult, arg_ty, res_ty) <- splitFunTy_maybe ty       , let (subst', b) = freshEtaId n subst (Scaled mult arg_ty)-      = go (n-1) res_ty subst' (b : rev_bs) (e `App` Var b)+      = go (n-1) res_ty subst' (b : rev_bs) (e `App` varToCoreExpr b)+        -- The varToCoreExpr is important: `b` might be a coercion variable+       | otherwise       = pprPanic "etaBodyForJoinPoint" $ int need_args $$                                          ppr body $$ ppr (exprType body)
compiler/GHC/Core/Ppr.hs view
@@ -172,8 +172,12 @@ pprOptCo :: Coercion -> SDoc -- Print a coercion optionally; i.e. honouring -dsuppress-coercions pprOptCo co = sdocOption sdocSuppressCoercions $ \case-              True  -> angleBrackets (text "Co:" <> int (coercionSize co)) <+> dcolon <+> ppr (coercionType co)-              False -> parens $ sep [ppr co, dcolon <+> ppr (coercionType co)]+              True  -> angleBrackets (text "Co:" <> int (coercionSize co)) <+> dcolon <+> co_type+              False -> parens $ sep [ppr co, dcolon <+> co_type]+    where+      co_type = sdocOption sdocSuppressCoercionTypes $ \case+          True -> text "..."+          False -> ppr (coercionType co)  ppr_id_occ :: (SDoc -> SDoc) -> Id -> SDoc ppr_id_occ add_par id
compiler/GHC/Core/TyCon.hs view
@@ -129,6 +129,8 @@         primRepIsFloat,         primRepsCompatible,         primRepCompatible,+        primRepIsWord,+        primRepIsInt,  ) where @@ -1782,6 +1784,24 @@ primRepIsFloat  DoubleRep    = Just True primRepIsFloat  (VecRep _ _) = Nothing primRepIsFloat  _            = Just False++-- Rep is one of the word reps.+primRepIsWord :: PrimRep -> Bool+primRepIsWord WordRep = True+primRepIsWord (Word8Rep) = True+primRepIsWord (Word16Rep) = True+primRepIsWord (Word32Rep) = True+primRepIsWord (Word64Rep) = True+primRepIsWord _ = False++-- Rep is one of the int reps.+primRepIsInt :: PrimRep -> Bool+primRepIsInt (IntRep) = True+primRepIsInt (Int8Rep) = True+primRepIsInt (Int16Rep) = True+primRepIsInt (Int32Rep) = True+primRepIsInt (Int64Rep) = True+primRepIsInt _ = False  {- ************************************************************************
compiler/GHC/Core/Type.hs view
@@ -1327,7 +1327,7 @@     split args orig_ty ty | Just ty' <- coreView ty = split args orig_ty ty'     split args orig_ty _                   = (reverse args, orig_ty) -funResultTy :: Type -> Type+funResultTy :: HasDebugCallStack => Type -> Type -- ^ Extract the function result type and panic if that is not possible funResultTy ty   | FunTy { ft_res = res } <- coreFullView ty = res
compiler/GHC/Driver/Flags.hs view
@@ -353,8 +353,10 @@    | Opt_ShowLoadedModules    | Opt_HexWordLiterals -- See Note [Print Hexadecimal Literals] -   -- Suppress all coercions, them replacing with '...'+   -- Suppress a coercions inner structure, replacing it with '...'    | Opt_SuppressCoercions+   -- Suppress the type of a coercion as well+   | Opt_SuppressCoercionTypes    | Opt_SuppressVarKinds    -- Suppress module id prefixes on variables.    | Opt_SuppressModulePrefixes@@ -372,6 +374,7 @@    -- variables that have otherwise identical names.    | Opt_SuppressUniques    | Opt_SuppressStgExts+   | Opt_SuppressStgReps    | Opt_SuppressTicks     -- Replaces Opt_PprShowTicks    | Opt_SuppressTimestamps -- ^ Suppress timestamps in dumps    | Opt_SuppressCoreSizes  -- ^ Suppress per binding Core size stats in dumps
compiler/GHC/Driver/Session.hs view
@@ -2428,12 +2428,14 @@   -- have otherwise identical names.   , make_ord_flag defGhcFlag "dsuppress-all"       (NoArg $ do setGeneralFlag Opt_SuppressCoercions+                  setGeneralFlag Opt_SuppressCoercionTypes                   setGeneralFlag Opt_SuppressVarKinds                   setGeneralFlag Opt_SuppressModulePrefixes                   setGeneralFlag Opt_SuppressTypeApplications                   setGeneralFlag Opt_SuppressIdInfo                   setGeneralFlag Opt_SuppressTicks                   setGeneralFlag Opt_SuppressStgExts+                  setGeneralFlag Opt_SuppressStgReps                   setGeneralFlag Opt_SuppressTypeSignatures                   setGeneralFlag Opt_SuppressCoreSizes                   setGeneralFlag Opt_SuppressTimestamps)@@ -3372,7 +3374,9 @@   depFlagSpec' "suppress-stg-free-vars" Opt_SuppressStgExts      (useInstead "-d" "suppress-stg-exts"),   flagSpec "suppress-stg-exts"          Opt_SuppressStgExts,+  flagSpec "suppress-stg-reps"          Opt_SuppressStgReps,   flagSpec "suppress-coercions"         Opt_SuppressCoercions,+  flagSpec "suppress-coercion-types"    Opt_SuppressCoercionTypes,   flagSpec "suppress-idinfo"            Opt_SuppressIdInfo,   flagSpec "suppress-unfoldings"        Opt_SuppressUnfoldings,   flagSpec "suppress-module-prefixes"   Opt_SuppressModulePrefixes,@@ -3816,7 +3820,8 @@       Opt_SimplPreInlining,       Opt_VersionMacros,       Opt_RPath,-      Opt_CompactUnwind+      Opt_CompactUnwind,+      Opt_SuppressStgReps     ]      ++ [f | (ns,f) <- optLevelFlags, 0 `elem` ns]@@ -5024,11 +5029,13 @@   , sdocSuppressTypeApplications    = gopt Opt_SuppressTypeApplications dflags   , sdocSuppressIdInfo              = gopt Opt_SuppressIdInfo dflags   , sdocSuppressCoercions           = gopt Opt_SuppressCoercions dflags+  , sdocSuppressCoercionTypes       = gopt Opt_SuppressCoercionTypes dflags   , sdocSuppressUnfoldings          = gopt Opt_SuppressUnfoldings dflags   , sdocSuppressVarKinds            = gopt Opt_SuppressVarKinds dflags   , sdocSuppressUniques             = gopt Opt_SuppressUniques dflags   , sdocSuppressModulePrefixes      = gopt Opt_SuppressModulePrefixes dflags   , sdocSuppressStgExts             = gopt Opt_SuppressStgExts dflags+  , sdocSuppressStgReps             = gopt Opt_SuppressStgReps dflags   , sdocErrorSpans                  = gopt Opt_ErrorSpans dflags   , sdocStarIsType                  = xopt LangExt.StarIsType dflags   , sdocImpredicativeTypes          = xopt LangExt.ImpredicativeTypes dflags
compiler/GHC/Stg/Syntax.hs view
@@ -87,7 +87,7 @@ import GHC.Builtin.PrimOps ( PrimOp, PrimCall ) import GHC.Core.TyCon    ( PrimRep(..), TyCon ) import GHC.Core.Type     ( Type )-import GHC.Types.RepType ( typePrimRep1 )+import GHC.Types.RepType ( typePrimRep1, typePrimRep ) import GHC.Utils.Panic.Plain  {-@@ -740,12 +740,23 @@ pprStgTopBindings :: OutputablePass pass => StgPprOpts -> [GenStgTopBinding pass] -> SDoc pprStgTopBindings = pprGenStgTopBindings +pprIdWithRep :: Id -> SDoc+pprIdWithRep v = ppr v <> pprTypeRep (idType v)++pprTypeRep :: Type -> SDoc+pprTypeRep ty =+    ppUnlessOption sdocSuppressStgReps $+    char ':' <> case typePrimRep ty of+                  [r] -> ppr r+                  r -> ppr r++ instance Outputable StgArg where   ppr = pprStgArg  pprStgArg :: StgArg -> SDoc-pprStgArg (StgVarArg var) = ppr var-pprStgArg (StgLitArg con) = ppr con+pprStgArg (StgVarArg var) = pprIdWithRep var+pprStgArg (StgLitArg con) = ppr con <> pprTypeRep (literalType con)  instance OutputablePass pass => Outputable  (GenStgExpr pass) where   ppr = pprStgExpr panicStgPprOpts
compiler/GHC/Types/Demand.hs view
@@ -94,7 +94,7 @@  import GHC.Core.Type    ( Type ) import GHC.Core.TyCon   ( isNewTyCon, isClassTyCon )-import GHC.Core.DataCon ( splitDataProductType_maybe )+import GHC.Core.DataCon ( splitDataProductType_maybe, StrictnessMark, isMarkedStrict ) import GHC.Core.Multiplicity    ( scaledThing )  import GHC.Utils.Binary@@ -1020,11 +1020,13 @@ -- whether it was unsaturated in the form of a 'Card'inality, denoting -- how many times the lambda body was entered. -- See Note [Demands from unsaturated function calls].-peelManyCalls :: Int -> SubDemand -> Card-peelManyCalls 0 _                          = C_11--- See Note [Call demands are relative]-peelManyCalls n (viewCall -> Just (m, sd)) = m `multCard` peelManyCalls (n-1) sd-peelManyCalls _ _                          = C_0N+peelManyCalls :: Arity -> SubDemand -> (Card, SubDemand)+peelManyCalls k sd = go k C_11 sd+  where+    go 0 !n !sd                        = (n, sd)+    go k !n (viewCall -> Just (m, sd)) = go (k-1) (n `multCard` m) sd+    go _ _  _                          = (topCard, topSubDmd)+{-# INLINE peelManyCalls #-} -- so that the pair cancels away in a `fst _` context  -- See Note [Demand on the worker] in GHC.Core.Opt.WorkWrap mkWorkerDemand :: Int -> Demand@@ -1068,7 +1070,7 @@ saturatedByOneShots :: Int -> Demand -> Bool saturatedByOneShots _ AbsDmd    = True saturatedByOneShots _ BotDmd    = True-saturatedByOneShots n (_ :* sd) = isUsedOnce (peelManyCalls n sd)+saturatedByOneShots n (_ :* sd) = isUsedOnce $ fst $ peelManyCalls n sd  {- Note [Strict demands] ~~~~~~~~~~~~~~~~~~~~~~~~@@ -1188,6 +1190,46 @@ the boxity info has to be stored in the *sub-demand* `sd`! There's no demand to store the boxity in. So we bit the bullet and now we store Boxity in 'SubDemand', both in 'Prod' *and* 'Poly'. See also Note [Boxity in Poly].++Note [Demand transformer for data constructors]+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+Consider the expression (x,y) with sub-demand P(SL,A).  What is the demand on+x,y?  Obviously `x` is used strictly, and `y` not at all. So we want to+decompose a product demand, and feed its components demands into the+arguments.  That is the job of dmdTransformDataConSig.  More precisely,++ * it gets the demand on the data constructor itself;+   in the above example that is C(1,C(1,P(SL,A)))+ * it returns the demands on the arguments;+   in the above example that is [SL, A]++Nasty wrinkle. Consider this code (#22475 has more realistic examples but+assume this is what the demand analyser sees)++   data T = MkT !Int Bool+   get :: T -> Bool+   get (MkT _ b) = b++   foo = let v::Int = I# 7+             t::T   = MkT v True+         in get t++Now `v` is unused by `get`, /but/ we can't give `v` an Absent demand,+else we'll drop the binding and replace it with an error thunk.+Then the code generator (more specifically GHC.Stg.InferTags.Rewrite)+will add an extra eval of MkT's argument to give+   foo = let v::Int = error "absent"+             t::T   = case v of v' -> MkT v' True+         in get t++Boo!  Because of this extra eval (added in STG-land), the truth is that `MkT`+may (or may not) evaluate its arguments (as established in #21497). Hence the+use of `bump` in dmdTransformDataConSig, which adds in a `C_01` eval. The+`C_01` says "may or may not evaluate" which is absolutely faithful to what+InferTags.Rewrite does.++In particular it is very important /not/ to make that a `C_11` eval,+see Note [Data-con worker strictness]. -}  {- *********************************************************************@@ -2039,20 +2081,24 @@ -- return how the function evaluates its free variables and arguments. dmdTransformSig :: DmdSig -> DmdTransformer dmdTransformSig (DmdSig dmd_ty@(DmdType _ arg_ds _)) sd-  = multDmdType (peelManyCalls (length arg_ds) sd) dmd_ty+  = multDmdType (fst $ peelManyCalls (length arg_ds) sd) dmd_ty     -- see Note [Demands from unsaturated function calls]     -- and Note [What are demand signatures?]  -- | A special 'DmdTransformer' for data constructors that feeds product -- demands into the constructor arguments.-dmdTransformDataConSig :: Arity -> DmdTransformer-dmdTransformDataConSig arity sd = case go arity sd of-  Just dmds -> DmdType emptyDmdEnv dmds topDiv-  Nothing   -> nopDmdType -- Not saturated+dmdTransformDataConSig :: [StrictnessMark] -> DmdTransformer+-- See Note [Demand transformer for data constructors]+dmdTransformDataConSig str_marks sd = case viewProd arity body_sd of+  Just (_, dmds) -> mk_body_ty n dmds+  Nothing        -> nopDmdType   where-    go 0 sd             = snd <$> viewProd arity sd-    go n (Call C_11 sd) = go (n-1) sd  -- strict calls only!-    go _ _              = Nothing+    arity = length str_marks+    (n, body_sd) = peelManyCalls arity sd+    mk_body_ty n dmds = DmdType emptyDmdEnv (zipWith (bump n) str_marks dmds) topDiv+    bump n str dmd | isMarkedStrict str = multDmd n (plusDmd str_field_dmd dmd)+                   | otherwise          = multDmd n dmd+    str_field_dmd = C_01 :* seqSubDmd -- Why not C_11? See Note [Data-con worker strictness]  -- | A special 'DmdTransformer' for dictionary selectors that feeds the demand -- on the result into the indicated dictionary component (if saturated).
compiler/GHC/Types/Id/Make.hs view
@@ -694,7 +694,7 @@                              -- applications are treated as values                          `setInlinePragInfo`    wrap_prag                          `setUnfoldingInfo`     wrap_unf-                         `setDmdSigInfo`    wrap_sig+                         `setDmdSigInfo`        wrap_sig                              -- We need to get the CAF info right here because GHC.Iface.Tidy                              -- does not tidy the IdInfo of implicit bindings (like the wrapper)                              -- so it not make sure that the CAF info is sane
compiler/GHC/Types/Literal.hs view
@@ -67,6 +67,7 @@ import GHC.Prelude  import GHC.Builtin.Types.Prim+import GHC.Core.TyCo.Rep ( RuntimeRepType ) import GHC.Core.Type import GHC.Utils.Outputable import GHC.Data.FastString@@ -131,7 +132,7 @@                                 -- that can be represented as a Literal. Create                                 -- with 'nullAddrLit' -  | LitRubbish Type             -- ^ A nonsense value of the given+  | LitRubbish RuntimeRepType   -- ^ A nonsense value of the given                                 -- representation. See Note [Rubbish literals].                                 --                                 -- The Type argument, rr, is of kind RuntimeRep.
compiler/GHC/Types/RepType.hs view
@@ -13,7 +13,7 @@     -- * Type representation for the code generator     typePrimRep, typePrimRep1,     runtimeRepPrimRep, typePrimRepArgs,-    PrimRep(..), primRepToType,+    PrimRep(..), primRepToType, primRepToRuntimeRep,     countFunRepArgs, countConRepArgs, dataConRuntimeRepStrictness,     tyConPrimRep, tyConPrimRep1,     runtimeRepPrimRep_maybe, kindPrimRep_maybe, typePrimRep_maybe,@@ -245,7 +245,8 @@     in       sumRep -layoutUbxSum :: SortedSlotTys -- Layout of sum. Does not include tag.+layoutUbxSum :: HasDebugCallStack+             => SortedSlotTys -- Layout of sum. Does not include tag.                               -- We assume that they are in increasing order              -> [SlotTy]      -- Slot types of things we want to map to locations in the                               -- sum layout@@ -268,7 +269,8 @@       | otherwise       = findSlot arg (slot_idx + 1) slots useds     findSlot _ _ [] _-      = pprPanic "findSlot" (text "Can't find slot" $$ ppr sum_slots0 $$ ppr arg_slots0)+      = pprPanic "findSlot" (text "Can't find slot" $$ text "sum_slots:" <> ppr sum_slots0+                                                    $$ text "arg_slots:" <> ppr arg_slots0 )  -------------------------------------------------------------------------------- @@ -286,7 +288,7 @@ -- -- TODO(michalt): We should probably introduce `SlotTy`s for 8-/16-/32-bit -- values, so that we can pack things more tightly.-data SlotTy = PtrLiftedSlot | PtrUnliftedSlot | WordSlot | Word64Slot | FloatSlot | DoubleSlot+data SlotTy = PtrLiftedSlot | PtrUnliftedSlot | WordSlot | Word64Slot | FloatSlot | DoubleSlot | VecSlot Int PrimElemRep   deriving (Eq, Ord)     -- Constructor order is important! If slot A could fit into slot B     -- then slot A must occur first.  E.g.  FloatSlot before DoubleSlot@@ -301,6 +303,7 @@   ppr WordSlot        = text "WordSlot"   ppr DoubleSlot      = text "DoubleSlot"   ppr FloatSlot       = text "FloatSlot"+  ppr (VecSlot n e)   = text "VecSlot" <+> ppr n <+> ppr e  typeSlotTy :: UnaryType -> Maybe SlotTy typeSlotTy ty@@ -326,7 +329,7 @@ primRepSlot AddrRep     = WordSlot primRepSlot FloatRep    = FloatSlot primRepSlot DoubleRep   = DoubleSlot-primRepSlot VecRep{}    = pprPanic "primRepSlot" (text "No slot for VecRep")+primRepSlot (VecRep n e) = VecSlot n e  slotPrimRep :: SlotTy -> PrimRep slotPrimRep PtrLiftedSlot   = LiftedRep@@ -335,6 +338,7 @@ slotPrimRep WordSlot        = WordRep slotPrimRep DoubleSlot      = DoubleRep slotPrimRep FloatSlot       = FloatRep+slotPrimRep (VecSlot n e)   = VecRep n e  -- | Returns the bigger type if one fits into the other. (commutative) --@@ -347,18 +351,17 @@   = Just ty1   | isWordSlot ty1 && isWordSlot ty2   = Just (max ty1 ty2)-  | isFloatSlot ty1 && isFloatSlot ty2-  = Just (max ty1 ty2)   | otherwise   = Nothing+  -- We used to share slots between Float/Double but currently we can't easily+  -- covert between float/double in a way that is both work free and safe.+  -- So we put them in different slots.+  -- See Note [Casting slot arguments]   where     isWordSlot Word64Slot = True     isWordSlot WordSlot   = True     isWordSlot _          = False -    isFloatSlot DoubleSlot = True-    isFloatSlot FloatSlot  = True-    isFloatSlot _          = False   {- **********************************************************************
compiler/GHC/Unit/State.hs view
@@ -571,12 +571,24 @@   -- 1. Find all modules providing the ModuleName (this accounts for visibility/thinning etc)   providers <- Map.filter originVisible <$> Map.lookup mn (moduleNameProvidersMap unit_st)   -- 2. Get the UnitIds of the candidates-  let candidates_uid = map (toUnitId . moduleUnit) $ Map.keys providers+  let candidates_uid = concatMap to_uid $ Map.assocs providers   -- 3. Get the package names of the candidates   let candidates_units = map (\ui -> ((unitPackageName ui), unitId ui))                               $ mapMaybe (\uid -> Map.lookup uid (unitInfoMap unit_st)) candidates_uid   -- 4. Check to see if the PackageName helps us disambiguate any candidates.   lookup pn candidates_units++  where++    -- Get the UnitId from which a visible identifier is from+    to_uid :: (Module, ModuleOrigin) -> [UnitId]+    to_uid (mod, ModOrigin mo re_exps _ _) =+      case mo of+        -- Available directly, but also potentially from re-exports+        Just True ->  (toUnitId (moduleUnit mod)) : map unitId re_exps+        -- Just available from these re-exports+        _ -> map unitId re_exps+    to_uid _ = []  -- | Create a Map UnitId UnitInfo --
compiler/GHC/Utils/Outputable.hs view
@@ -376,11 +376,13 @@   , sdocSuppressTypeApplications    :: !Bool   , sdocSuppressIdInfo              :: !Bool   , sdocSuppressCoercions           :: !Bool+  , sdocSuppressCoercionTypes       :: !Bool   , sdocSuppressUnfoldings          :: !Bool   , sdocSuppressVarKinds            :: !Bool   , sdocSuppressUniques             :: !Bool   , sdocSuppressModulePrefixes      :: !Bool   , sdocSuppressStgExts             :: !Bool+  , sdocSuppressStgReps             :: !Bool   , sdocErrorSpans                  :: !Bool   , sdocStarIsType                  :: !Bool   , sdocLinearTypes                 :: !Bool@@ -435,11 +437,13 @@   , sdocSuppressTypeApplications    = False   , sdocSuppressIdInfo              = False   , sdocSuppressCoercions           = False+  , sdocSuppressCoercionTypes       = False   , sdocSuppressUnfoldings          = False   , sdocSuppressVarKinds            = False   , sdocSuppressUniques             = False   , sdocSuppressModulePrefixes      = False   , sdocSuppressStgExts             = False+  , sdocSuppressStgReps             = True   , sdocErrorSpans                  = False   , sdocStarIsType                  = False   , sdocImpredicativeTypes          = False
ghc-lib-parser.cabal view
@@ -1,7 +1,7 @@ cabal-version: 2.0 build-type: Simple name: ghc-lib-parser-version: 9.4.3.20221104+version: 9.4.4.20221225 license: BSD3 license-file: LICENSE category: Development
ghc-lib/stage0/compiler/build/primop-primop-info.hs-incl view
@@ -656,16 +656,16 @@ primOpInfo (VecBroadcastOp IntVec 32 W16) = mkGenPrimOp (fsLit "broadcastInt16X32#")  [] [int16PrimTy] (int16X32PrimTy) primOpInfo (VecBroadcastOp IntVec 16 W32) = mkGenPrimOp (fsLit "broadcastInt32X16#")  [] [int32PrimTy] (int32X16PrimTy) primOpInfo (VecBroadcastOp IntVec 8 W64) = mkGenPrimOp (fsLit "broadcastInt64X8#")  [] [int64PrimTy] (int64X8PrimTy)-primOpInfo (VecBroadcastOp WordVec 16 W8) = mkGenPrimOp (fsLit "broadcastWord8X16#")  [] [wordPrimTy] (word8X16PrimTy)-primOpInfo (VecBroadcastOp WordVec 8 W16) = mkGenPrimOp (fsLit "broadcastWord16X8#")  [] [wordPrimTy] (word16X8PrimTy)+primOpInfo (VecBroadcastOp WordVec 16 W8) = mkGenPrimOp (fsLit "broadcastWord8X16#")  [] [word8PrimTy] (word8X16PrimTy)+primOpInfo (VecBroadcastOp WordVec 8 W16) = mkGenPrimOp (fsLit "broadcastWord16X8#")  [] [word16PrimTy] (word16X8PrimTy) primOpInfo (VecBroadcastOp WordVec 4 W32) = mkGenPrimOp (fsLit "broadcastWord32X4#")  [] [word32PrimTy] (word32X4PrimTy) primOpInfo (VecBroadcastOp WordVec 2 W64) = mkGenPrimOp (fsLit "broadcastWord64X2#")  [] [word64PrimTy] (word64X2PrimTy)-primOpInfo (VecBroadcastOp WordVec 32 W8) = mkGenPrimOp (fsLit "broadcastWord8X32#")  [] [wordPrimTy] (word8X32PrimTy)-primOpInfo (VecBroadcastOp WordVec 16 W16) = mkGenPrimOp (fsLit "broadcastWord16X16#")  [] [wordPrimTy] (word16X16PrimTy)+primOpInfo (VecBroadcastOp WordVec 32 W8) = mkGenPrimOp (fsLit "broadcastWord8X32#")  [] [word8PrimTy] (word8X32PrimTy)+primOpInfo (VecBroadcastOp WordVec 16 W16) = mkGenPrimOp (fsLit "broadcastWord16X16#")  [] [word16PrimTy] (word16X16PrimTy) primOpInfo (VecBroadcastOp WordVec 8 W32) = mkGenPrimOp (fsLit "broadcastWord32X8#")  [] [word32PrimTy] (word32X8PrimTy) primOpInfo (VecBroadcastOp WordVec 4 W64) = mkGenPrimOp (fsLit "broadcastWord64X4#")  [] [word64PrimTy] (word64X4PrimTy)-primOpInfo (VecBroadcastOp WordVec 64 W8) = mkGenPrimOp (fsLit "broadcastWord8X64#")  [] [wordPrimTy] (word8X64PrimTy)-primOpInfo (VecBroadcastOp WordVec 32 W16) = mkGenPrimOp (fsLit "broadcastWord16X32#")  [] [wordPrimTy] (word16X32PrimTy)+primOpInfo (VecBroadcastOp WordVec 64 W8) = mkGenPrimOp (fsLit "broadcastWord8X64#")  [] [word8PrimTy] (word8X64PrimTy)+primOpInfo (VecBroadcastOp WordVec 32 W16) = mkGenPrimOp (fsLit "broadcastWord16X32#")  [] [word16PrimTy] (word16X32PrimTy) primOpInfo (VecBroadcastOp WordVec 16 W32) = mkGenPrimOp (fsLit "broadcastWord32X16#")  [] [word32PrimTy] (word32X16PrimTy) primOpInfo (VecBroadcastOp WordVec 8 W64) = mkGenPrimOp (fsLit "broadcastWord64X8#")  [] [word64PrimTy] (word64X8PrimTy) primOpInfo (VecBroadcastOp FloatVec 4 W32) = mkGenPrimOp (fsLit "broadcastFloatX4#")  [] [floatPrimTy] (floatX4PrimTy)@@ -686,16 +686,16 @@ primOpInfo (VecPackOp IntVec 32 W16) = mkGenPrimOp (fsLit "packInt16X32#")  [] [(mkTupleTy Unboxed [int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy])] (int16X32PrimTy) primOpInfo (VecPackOp IntVec 16 W32) = mkGenPrimOp (fsLit "packInt32X16#")  [] [(mkTupleTy Unboxed [int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy])] (int32X16PrimTy) primOpInfo (VecPackOp IntVec 8 W64) = mkGenPrimOp (fsLit "packInt64X8#")  [] [(mkTupleTy Unboxed [int64PrimTy, int64PrimTy, int64PrimTy, int64PrimTy, int64PrimTy, int64PrimTy, int64PrimTy, int64PrimTy])] (int64X8PrimTy)-primOpInfo (VecPackOp WordVec 16 W8) = mkGenPrimOp (fsLit "packWord8X16#")  [] [(mkTupleTy Unboxed [wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy])] (word8X16PrimTy)-primOpInfo (VecPackOp WordVec 8 W16) = mkGenPrimOp (fsLit "packWord16X8#")  [] [(mkTupleTy Unboxed [wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy])] (word16X8PrimTy)+primOpInfo (VecPackOp WordVec 16 W8) = mkGenPrimOp (fsLit "packWord8X16#")  [] [(mkTupleTy Unboxed [word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy])] (word8X16PrimTy)+primOpInfo (VecPackOp WordVec 8 W16) = mkGenPrimOp (fsLit "packWord16X8#")  [] [(mkTupleTy Unboxed [word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy])] (word16X8PrimTy) primOpInfo (VecPackOp WordVec 4 W32) = mkGenPrimOp (fsLit "packWord32X4#")  [] [(mkTupleTy Unboxed [word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy])] (word32X4PrimTy) primOpInfo (VecPackOp WordVec 2 W64) = mkGenPrimOp (fsLit "packWord64X2#")  [] [(mkTupleTy Unboxed [word64PrimTy, word64PrimTy])] (word64X2PrimTy)-primOpInfo (VecPackOp WordVec 32 W8) = mkGenPrimOp (fsLit "packWord8X32#")  [] [(mkTupleTy Unboxed [wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy])] (word8X32PrimTy)-primOpInfo (VecPackOp WordVec 16 W16) = mkGenPrimOp (fsLit "packWord16X16#")  [] [(mkTupleTy Unboxed [wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy])] (word16X16PrimTy)+primOpInfo (VecPackOp WordVec 32 W8) = mkGenPrimOp (fsLit "packWord8X32#")  [] [(mkTupleTy Unboxed [word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy])] (word8X32PrimTy)+primOpInfo (VecPackOp WordVec 16 W16) = mkGenPrimOp (fsLit "packWord16X16#")  [] [(mkTupleTy Unboxed [word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy])] (word16X16PrimTy) primOpInfo (VecPackOp WordVec 8 W32) = mkGenPrimOp (fsLit "packWord32X8#")  [] [(mkTupleTy Unboxed [word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy])] (word32X8PrimTy) primOpInfo (VecPackOp WordVec 4 W64) = mkGenPrimOp (fsLit "packWord64X4#")  [] [(mkTupleTy Unboxed [word64PrimTy, word64PrimTy, word64PrimTy, word64PrimTy])] (word64X4PrimTy)-primOpInfo (VecPackOp WordVec 64 W8) = mkGenPrimOp (fsLit "packWord8X64#")  [] [(mkTupleTy Unboxed [wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy])] (word8X64PrimTy)-primOpInfo (VecPackOp WordVec 32 W16) = mkGenPrimOp (fsLit "packWord16X32#")  [] [(mkTupleTy Unboxed [wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy])] (word16X32PrimTy)+primOpInfo (VecPackOp WordVec 64 W8) = mkGenPrimOp (fsLit "packWord8X64#")  [] [(mkTupleTy Unboxed [word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy])] (word8X64PrimTy)+primOpInfo (VecPackOp WordVec 32 W16) = mkGenPrimOp (fsLit "packWord16X32#")  [] [(mkTupleTy Unboxed [word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy])] (word16X32PrimTy) primOpInfo (VecPackOp WordVec 16 W32) = mkGenPrimOp (fsLit "packWord32X16#")  [] [(mkTupleTy Unboxed [word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy])] (word32X16PrimTy) primOpInfo (VecPackOp WordVec 8 W64) = mkGenPrimOp (fsLit "packWord64X8#")  [] [(mkTupleTy Unboxed [word64PrimTy, word64PrimTy, word64PrimTy, word64PrimTy, word64PrimTy, word64PrimTy, word64PrimTy, word64PrimTy])] (word64X8PrimTy) primOpInfo (VecPackOp FloatVec 4 W32) = mkGenPrimOp (fsLit "packFloatX4#")  [] [(mkTupleTy Unboxed [floatPrimTy, floatPrimTy, floatPrimTy, floatPrimTy])] (floatX4PrimTy)@@ -716,16 +716,16 @@ primOpInfo (VecUnpackOp IntVec 32 W16) = mkGenPrimOp (fsLit "unpackInt16X32#")  [] [int16X32PrimTy] ((mkTupleTy Unboxed [int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy, int16PrimTy])) primOpInfo (VecUnpackOp IntVec 16 W32) = mkGenPrimOp (fsLit "unpackInt32X16#")  [] [int32X16PrimTy] ((mkTupleTy Unboxed [int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy, int32PrimTy])) primOpInfo (VecUnpackOp IntVec 8 W64) = mkGenPrimOp (fsLit "unpackInt64X8#")  [] [int64X8PrimTy] ((mkTupleTy Unboxed [int64PrimTy, int64PrimTy, int64PrimTy, int64PrimTy, int64PrimTy, int64PrimTy, int64PrimTy, int64PrimTy]))-primOpInfo (VecUnpackOp WordVec 16 W8) = mkGenPrimOp (fsLit "unpackWord8X16#")  [] [word8X16PrimTy] ((mkTupleTy Unboxed [wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy]))-primOpInfo (VecUnpackOp WordVec 8 W16) = mkGenPrimOp (fsLit "unpackWord16X8#")  [] [word16X8PrimTy] ((mkTupleTy Unboxed [wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy]))+primOpInfo (VecUnpackOp WordVec 16 W8) = mkGenPrimOp (fsLit "unpackWord8X16#")  [] [word8X16PrimTy] ((mkTupleTy Unboxed [word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy]))+primOpInfo (VecUnpackOp WordVec 8 W16) = mkGenPrimOp (fsLit "unpackWord16X8#")  [] [word16X8PrimTy] ((mkTupleTy Unboxed [word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy])) primOpInfo (VecUnpackOp WordVec 4 W32) = mkGenPrimOp (fsLit "unpackWord32X4#")  [] [word32X4PrimTy] ((mkTupleTy Unboxed [word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy])) primOpInfo (VecUnpackOp WordVec 2 W64) = mkGenPrimOp (fsLit "unpackWord64X2#")  [] [word64X2PrimTy] ((mkTupleTy Unboxed [word64PrimTy, word64PrimTy]))-primOpInfo (VecUnpackOp WordVec 32 W8) = mkGenPrimOp (fsLit "unpackWord8X32#")  [] [word8X32PrimTy] ((mkTupleTy Unboxed [wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy]))-primOpInfo (VecUnpackOp WordVec 16 W16) = mkGenPrimOp (fsLit "unpackWord16X16#")  [] [word16X16PrimTy] ((mkTupleTy Unboxed [wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy]))+primOpInfo (VecUnpackOp WordVec 32 W8) = mkGenPrimOp (fsLit "unpackWord8X32#")  [] [word8X32PrimTy] ((mkTupleTy Unboxed [word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy]))+primOpInfo (VecUnpackOp WordVec 16 W16) = mkGenPrimOp (fsLit "unpackWord16X16#")  [] [word16X16PrimTy] ((mkTupleTy Unboxed [word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy])) primOpInfo (VecUnpackOp WordVec 8 W32) = mkGenPrimOp (fsLit "unpackWord32X8#")  [] [word32X8PrimTy] ((mkTupleTy Unboxed [word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy])) primOpInfo (VecUnpackOp WordVec 4 W64) = mkGenPrimOp (fsLit "unpackWord64X4#")  [] [word64X4PrimTy] ((mkTupleTy Unboxed [word64PrimTy, word64PrimTy, word64PrimTy, word64PrimTy]))-primOpInfo (VecUnpackOp WordVec 64 W8) = mkGenPrimOp (fsLit "unpackWord8X64#")  [] [word8X64PrimTy] ((mkTupleTy Unboxed [wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy]))-primOpInfo (VecUnpackOp WordVec 32 W16) = mkGenPrimOp (fsLit "unpackWord16X32#")  [] [word16X32PrimTy] ((mkTupleTy Unboxed [wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy, wordPrimTy]))+primOpInfo (VecUnpackOp WordVec 64 W8) = mkGenPrimOp (fsLit "unpackWord8X64#")  [] [word8X64PrimTy] ((mkTupleTy Unboxed [word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy, word8PrimTy]))+primOpInfo (VecUnpackOp WordVec 32 W16) = mkGenPrimOp (fsLit "unpackWord16X32#")  [] [word16X32PrimTy] ((mkTupleTy Unboxed [word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy, word16PrimTy])) primOpInfo (VecUnpackOp WordVec 16 W32) = mkGenPrimOp (fsLit "unpackWord32X16#")  [] [word32X16PrimTy] ((mkTupleTy Unboxed [word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy, word32PrimTy])) primOpInfo (VecUnpackOp WordVec 8 W64) = mkGenPrimOp (fsLit "unpackWord64X8#")  [] [word64X8PrimTy] ((mkTupleTy Unboxed [word64PrimTy, word64PrimTy, word64PrimTy, word64PrimTy, word64PrimTy, word64PrimTy, word64PrimTy, word64PrimTy])) primOpInfo (VecUnpackOp FloatVec 4 W32) = mkGenPrimOp (fsLit "unpackFloatX4#")  [] [floatX4PrimTy] ((mkTupleTy Unboxed [floatPrimTy, floatPrimTy, floatPrimTy, floatPrimTy]))@@ -746,16 +746,16 @@ primOpInfo (VecInsertOp IntVec 32 W16) = mkGenPrimOp (fsLit "insertInt16X32#")  [] [int16X32PrimTy, int16PrimTy, intPrimTy] (int16X32PrimTy) primOpInfo (VecInsertOp IntVec 16 W32) = mkGenPrimOp (fsLit "insertInt32X16#")  [] [int32X16PrimTy, int32PrimTy, intPrimTy] (int32X16PrimTy) primOpInfo (VecInsertOp IntVec 8 W64) = mkGenPrimOp (fsLit "insertInt64X8#")  [] [int64X8PrimTy, int64PrimTy, intPrimTy] (int64X8PrimTy)-primOpInfo (VecInsertOp WordVec 16 W8) = mkGenPrimOp (fsLit "insertWord8X16#")  [] [word8X16PrimTy, wordPrimTy, intPrimTy] (word8X16PrimTy)-primOpInfo (VecInsertOp WordVec 8 W16) = mkGenPrimOp (fsLit "insertWord16X8#")  [] [word16X8PrimTy, wordPrimTy, intPrimTy] (word16X8PrimTy)+primOpInfo (VecInsertOp WordVec 16 W8) = mkGenPrimOp (fsLit "insertWord8X16#")  [] [word8X16PrimTy, word8PrimTy, intPrimTy] (word8X16PrimTy)+primOpInfo (VecInsertOp WordVec 8 W16) = mkGenPrimOp (fsLit "insertWord16X8#")  [] [word16X8PrimTy, word16PrimTy, intPrimTy] (word16X8PrimTy) primOpInfo (VecInsertOp WordVec 4 W32) = mkGenPrimOp (fsLit "insertWord32X4#")  [] [word32X4PrimTy, word32PrimTy, intPrimTy] (word32X4PrimTy) primOpInfo (VecInsertOp WordVec 2 W64) = mkGenPrimOp (fsLit "insertWord64X2#")  [] [word64X2PrimTy, word64PrimTy, intPrimTy] (word64X2PrimTy)-primOpInfo (VecInsertOp WordVec 32 W8) = mkGenPrimOp (fsLit "insertWord8X32#")  [] [word8X32PrimTy, wordPrimTy, intPrimTy] (word8X32PrimTy)-primOpInfo (VecInsertOp WordVec 16 W16) = mkGenPrimOp (fsLit "insertWord16X16#")  [] [word16X16PrimTy, wordPrimTy, intPrimTy] (word16X16PrimTy)+primOpInfo (VecInsertOp WordVec 32 W8) = mkGenPrimOp (fsLit "insertWord8X32#")  [] [word8X32PrimTy, word8PrimTy, intPrimTy] (word8X32PrimTy)+primOpInfo (VecInsertOp WordVec 16 W16) = mkGenPrimOp (fsLit "insertWord16X16#")  [] [word16X16PrimTy, word16PrimTy, intPrimTy] (word16X16PrimTy) primOpInfo (VecInsertOp WordVec 8 W32) = mkGenPrimOp (fsLit "insertWord32X8#")  [] [word32X8PrimTy, word32PrimTy, intPrimTy] (word32X8PrimTy) primOpInfo (VecInsertOp WordVec 4 W64) = mkGenPrimOp (fsLit "insertWord64X4#")  [] [word64X4PrimTy, word64PrimTy, intPrimTy] (word64X4PrimTy)-primOpInfo (VecInsertOp WordVec 64 W8) = mkGenPrimOp (fsLit "insertWord8X64#")  [] [word8X64PrimTy, wordPrimTy, intPrimTy] (word8X64PrimTy)-primOpInfo (VecInsertOp WordVec 32 W16) = mkGenPrimOp (fsLit "insertWord16X32#")  [] [word16X32PrimTy, wordPrimTy, intPrimTy] (word16X32PrimTy)+primOpInfo (VecInsertOp WordVec 64 W8) = mkGenPrimOp (fsLit "insertWord8X64#")  [] [word8X64PrimTy, word8PrimTy, intPrimTy] (word8X64PrimTy)+primOpInfo (VecInsertOp WordVec 32 W16) = mkGenPrimOp (fsLit "insertWord16X32#")  [] [word16X32PrimTy, word16PrimTy, intPrimTy] (word16X32PrimTy) primOpInfo (VecInsertOp WordVec 16 W32) = mkGenPrimOp (fsLit "insertWord32X16#")  [] [word32X16PrimTy, word32PrimTy, intPrimTy] (word32X16PrimTy) primOpInfo (VecInsertOp WordVec 8 W64) = mkGenPrimOp (fsLit "insertWord64X8#")  [] [word64X8PrimTy, word64PrimTy, intPrimTy] (word64X8PrimTy) primOpInfo (VecInsertOp FloatVec 4 W32) = mkGenPrimOp (fsLit "insertFloatX4#")  [] [floatX4PrimTy, floatPrimTy, intPrimTy] (floatX4PrimTy)
ghc-lib/stage0/libraries/ghc-boot/build/GHC/Version.hs view
@@ -3,19 +3,19 @@ import Prelude -- See Note [Why do we import Prelude here?]  cProjectGitCommitId   :: String-cProjectGitCommitId   = "8f8dba0190fe2a3a8b148fecf0dc83a725fb3fd2"+cProjectGitCommitId   = "cafe75946c465dd20c324918807464e09f12ac2f"  cProjectVersion       :: String-cProjectVersion       = "9.4.3"+cProjectVersion       = "9.4.4"  cProjectVersionInt    :: String cProjectVersionInt    = "904"  cProjectPatchLevel    :: String-cProjectPatchLevel    = "3"+cProjectPatchLevel    = "4"  cProjectPatchLevel1   :: String-cProjectPatchLevel1   = "3"+cProjectPatchLevel1   = "4"  cProjectPatchLevel2   :: String cProjectPatchLevel2   = "0"
libraries/ghci/GHCi/Message.hs view
@@ -465,7 +465,7 @@ #define MIN_VERSION_ghc_heap(major1,major2,minor) (\   (major1) <  9 || \   (major1) == 9 && (major2) <  4 || \-  (major1) == 9 && (major2) == 4 && (minor) <= 3)+  (major1) == 9 && (major2) == 4 && (minor) <= 4) #endif /* MIN_VERSION_ghc_heap */ #if MIN_VERSION_ghc_heap(8,11,0) instance Binary Heap.StgTSOProfInfo