1. 02 May, 2022 1 commit
  2. 20 Apr, 2022 1 commit
    • Krzysztof Gogolewski's avatar
      Remove LevityInfo · a5ea65c9
      Krzysztof Gogolewski authored and  Marge Bot's avatar Marge Bot committed
      Every Id was storing a boolean whether it could be levity-polymorphic.
      This information is no longer needed since representation-checking
      has been moved to the typechecker.
      a5ea65c9
  3. 12 Feb, 2022 1 commit
    • Andreas Klebinger's avatar
      Tag inference work. · 0e93023e
      Andreas Klebinger authored and Matthew Pickering's avatar Matthew Pickering committed
      This does three major things:
      * Enforce the invariant that all strict fields must contain tagged
      pointers.
      * Try to predict the tag on bindings in order to omit tag checks.
      * Allows functions to pass arguments unlifted (call-by-value).
      
      The former is "simply" achieved by wrapping any constructor allocations with
      a case which will evaluate the respective strict bindings.
      
      The prediction is done by a new data flow analysis based on the STG
      representation of a program. This also helps us to avoid generating
      redudant cases for the above invariant.
      
      StrictWorkers are created by W/W directly and SpecConstr indirectly.
      See the Note [Strict Worker Ids]
      
      Other minor changes:
      
      * Add StgUtil module containing a few functions needed by, but
        not specific to the tag analysis.
      
      -------------------------
      Metric Decrease:
      	T12545
      	T18698b
      	T18140
      	T18923
              LargeRecord
      Metric Increase:
              LargeRecord
      	ManyAlternatives
      	ManyConstructors
      	T10421
      	T12425
      	T12707
      	T13035
      	T13056
      	T13253
      	T13253...
      0e93023e
  4. 17 Oct, 2021 1 commit
    • sheaf's avatar
      Introduce Concrete# for representation polymorphism checks · 81740ce8
      sheaf authored and  Marge Bot's avatar Marge Bot committed
      PHASE 1: we never rewrite Concrete# evidence.
      
      This patch migrates all the representation polymorphism checks to
      the typechecker, using a new constraint form
      
        Concrete# :: forall k. k -> TupleRep '[]
      
      Whenever a type `ty` must be representation-polymorphic
      (e.g. it is the type of an argument to a function), we emit a new
      `Concrete# ty` Wanted constraint. If this constraint goes
      unsolved, we report a representation-polymorphism error to the user.
      The 'FRROrigin' datatype keeps track of the context of the
      representation-polymorphism check, for more informative error messages.
      
      This paves the way for further improvements, such as
      allowing type families in RuntimeReps and improving the soundness
      of typed Template Haskell. This is left as future work (PHASE 2).
      
      fixes #17907 #20277 #20330 #20423 #20426
      
      updates haddock submodule
      
      -------------------------
      Metric Decrease:
          T5642
      -------------------------
      81740ce8
  5. 10 Jun, 2021 1 commit
  6. 05 Jun, 2021 1 commit
    • Simon Peyton Jones's avatar
      Re-do rubbish literals · 52a524f7
      Simon Peyton Jones authored and  Marge Bot's avatar Marge Bot committed
      As #19882 pointed out, we were simply doing rubbish literals wrong.
      (I'll refrain from explaining the wrong-ness here -- see the ticket.)
      
      This patch fixes it by adding a Type (of kind RuntimeRep) as field of
      LitRubbish, rather than [PrimRep].
      
      The Note [Rubbish literals] in GHC.Types.Literal explains the details.
      52a524f7
  7. 20 May, 2021 1 commit
  8. 13 May, 2021 3 commits
    • Sylvain Henry's avatar
      Remove useless {-# LANGUAGE CPP #-} pragmas · 67a5a91e
      Sylvain Henry authored and  Marge Bot's avatar Marge Bot committed
      67a5a91e
    • Sylvain Henry's avatar
      Fully remove HsVersions.h · 0ef11907
      Sylvain Henry authored and  Marge Bot's avatar Marge Bot committed
      Replace uses of WARN macro with calls to:
      
        warnPprTrace :: Bool -> SDoc -> a -> a
      
      Remove the now unused HsVersions.h
      
      Bump haddock submodule
      0ef11907
    • Sylvain Henry's avatar
      Replace CPP assertions with Haskell functions · bfabf94f
      Sylvain Henry authored and  Marge Bot's avatar Marge Bot committed
      There is no reason to use CPP. __LINE__ and __FILE__ macros are now
      better replaced with GHC's CallStack. As a bonus, assert error messages
      now contain more information (function name, column).
      
      Here is the mapping table (HasCallStack omitted):
      
        * ASSERT:   assert     :: Bool -> a -> a
        * MASSERT:  massert    :: Bool -> m ()
        * ASSERTM:  assertM    :: m Bool -> m ()
        * ASSERT2:  assertPpr  :: Bool -> SDoc -> a -> a
        * MASSERT2: massertPpr :: Bool -> SDoc -> m ()
        * ASSERTM2: assertPprM :: m Bool -> SDoc -> m ()
      bfabf94f
  9. 04 May, 2021 1 commit
    • Simon Peyton Jones's avatar
      Persist CorePrepProv into IfaceUnivCoProv · 6acadb79
      Simon Peyton Jones authored and  Marge Bot's avatar Marge Bot committed
      CorePrepProv is only created in CorePrep, so I thought it wouldn't be
      needed in IfaceUnivCoProv.  But actually IfaceSyn is used during
      pretty-printing, and we can certainly pretty-print things after
      CorePrep as #19768 showed.
      
      So the simplest thing is to represent CorePrepProv in IfaceSyn.
      
      To improve what Lint can do I also added a boolean to CorePrepProv, to
      record whether it is homogeneously kinded or not. It is introduced in
      two distinct ways (see Note [Unsafe coercions] in GHC.CoreToStg.Prep),
      one of which may be hetero-kinded (e.g. Int ~ Int#) beause it is
      casting a divergent expression; but the other is not.  The boolean
      keeps track.
      6acadb79
  10. 28 Mar, 2021 1 commit
    • Sebastian Graf's avatar
      Rename StrictSig to DmdSig (#19597) · b02c8ef7
      Sebastian Graf authored and  Marge Bot's avatar Marge Bot committed
      In #19597, we also settled on the following renamings:
      
        * `idStrictness` -> `idDmdSig`,
          `strictnessInfo` -> `dmdSigInfo`,
          `HsStrictness` -> `HsDmdSig`
        * `idCprInfo` -> `idCprSig`,
          `cprInfo` -> `cprSigInfo`,
          `HsCpr` -> `HsCprSig`
      
      Fixes #19597.
      b02c8ef7
  11. 17 Mar, 2021 1 commit
    • Ben Gamari's avatar
      IfaceToType: Ensure that IfaceTyConInfo is shared · 665b757f
      Ben Gamari authored and  Marge Bot's avatar Marge Bot committed
      In #19194 mpickering detailed that there are a LOT of allocations
      of IfaceTyConInfo:
      
      There are just two main cases: IfaceTyConInfo IsPromoted IfaceNormalTyCon
      and IfaceTyConInfo NotPromoted IfaceNormalTyCon. These should be made into
      CAFs and shared. From my analysis, the most common case is
      IfaceTyConInfo NotPromoted IfaceNormalTyCon (53 000)
      then IfaceTyConInfo IsPromoted IfaceNormalTyCon (28 000).
      
      This patch makes it so these are properly shared by using a smart
      constructor.
      
      Fixes #19194.
      665b757f
  12. 05 Mar, 2021 1 commit
    • cgibbard's avatar
      Bring back COMPLETE sets filtered by result TyCon (#14422) · 4cdf8b5e
      cgibbard authored and  Marge Bot's avatar Marge Bot committed
      Commit 2a942285 dramatically simplified the implementation and improved
      the performance of COMPLETE sets while making them applicable in more
      scenarios at the same time.
      But it turned out that there was a change in semantics that (to me
      unexpectedly) broke users' expectations (see #14422
      
      ): They relied on the
      "type signature" of a COMPLETE pragma to restrict the scrutinee types of
      a pattern match for which they are applicable.
      
      This patch brings back that filtering, so the semantics is the same as
      it was in GHC 9.0.
      See the updated Note [Implementation of COMPLETE pragmas].
      
      There are a few testsuite output changes (`completesig13`, `T14422`)
      which assert this change.
      Co-authored-by: Sebastian Graf's avatarSebastian Graf <sebastian.graf@kit.edu>
      4cdf8b5e
  13. 22 Jan, 2021 1 commit
  14. 20 Nov, 2020 1 commit
    • Sebastian Graf's avatar
      Demand: Interleave usage and strictness demands (#18903) · 0aec78b6
      Sebastian Graf authored and  Marge Bot's avatar Marge Bot committed
      As outlined in #18903, interleaving usage and strictness demands not
      only means a more compact demand representation, but also allows us to
      express demands that we weren't easily able to express before.
      
      Call demands are *relative* in the sense that a call demand `Cn(cd)`
      on `g` says "`g` is called `n` times. *Whenever `g` is called*, the
      result is used according to `cd`". Example from #18903:
      
      ```hs
      h :: Int -> Int
      h m =
        let g :: Int -> (Int,Int)
            g 1 = (m, 0)
            g n = (2 * n, 2 `div` n)
            {-# NOINLINE g #-}
        in case m of
          1 -> 0
          2 -> snd (g m)
          _ -> uncurry (+) (g m)
      ```
      
      Without the interleaved representation, we would just get `L` for the
      strictness demand on `g`. Now we are able to express that whenever
      `g` is called, its second component is used strictly in denoting `g`
      by `1C1(P(1P(U),SP(U)))`. This would allow Nested CPR to unbox the
      division, for example.
      
      Fixes #18903.
      While fixing regressions, I also discovered and fixed #18957.
      
      Metric Decrease:
          T13253-spj
      0aec78b6
  15. 01 Nov, 2020 1 commit
  16. 31 Oct, 2020 1 commit
  17. 29 Oct, 2020 1 commit
    • Sylvain Henry's avatar
      Split GHC.Driver.Types · 0e9f6def
      Sylvain Henry authored and  Marge Bot's avatar Marge Bot committed
      I was working on making DynFlags stateless (#17957), especially by
      storing loaded plugins into HscEnv instead of DynFlags. It turned out to
      be complicated because HscEnv is in GHC.Driver.Types but LoadedPlugin
      isn't: it is in GHC.Driver.Plugins which depends on GHC.Driver.Types. I
      didn't feel like introducing yet another hs-boot file to break the loop.
      
      Additionally I remember that while we introduced the module hierarchy
      (#13009) we talked about splitting GHC.Driver.Types because it contained
      various unrelated types and functions, but we never executed. I didn't
      feel like making GHC.Driver.Types bigger with more unrelated Plugins
      related types, so finally I bit the bullet and split GHC.Driver.Types.
      
      As a consequence this patch moves a lot of things. I've tried to put
      them into appropriate modules but nothing is set in stone.
      
      Several other things moved to avoid loops.
      
      * Removed Binary instances from GHC.Utils.Binary for random compiler
        things
      * Moved Typeable Binary instances into GHC.Utils.Binary.Typeable: they
        import a lot of things that users of GHC.Utils.Binary don't want to
        depend on.
      * put everything related to Units/Modules under GHC.Unit:
        GHC.Unit.Finder, GHC.Unit.Module.{ModGuts,ModIface,Deps,etc.}
      * Created several modules under GHC.Types: GHC.Types.Fixity, SourceText,
        etc.
      * Split GHC.Utils.Error (into GHC.Types.Error)
      * Finally removed GHC.Driver.Types
      
      Note that this patch doesn't put loaded plugins into HscEnv. It's left
      for another patch.
      
      Bump haddock submodule
      0e9f6def
  18. 12 Sep, 2020 1 commit
    • Sebastian Graf's avatar
      PmCheck: Disattach COMPLETE pragma lookup from TyCons · 2a942285
      Sebastian Graf authored and  Marge Bot's avatar Marge Bot committed
      By not attaching COMPLETE pragmas with a particular TyCon and instead
      assume that every COMPLETE pragma is applicable everywhere, we can
      drastically simplify the logic that tries to initialise available
      COMPLETE sets of a variable during the pattern-match checking process,
      as well as fixing a few bugs.
      
      Of course, we have to make sure not to report any of the
      ill-typed/unrelated COMPLETE sets, which came up in a few regression
      tests.
      
      In doing so, we fix #17207, #18277 and #14422.
      
      There was a metric decrease in #18478 by ~20%.
      
      Metric Decrease:
          T18478
      2a942285
  19. 09 Sep, 2020 1 commit
    • Ryan Scott's avatar
      Postpone associated tyfam default checks until after typechecking · 822f1057
      Ryan Scott authored and  Marge Bot's avatar Marge Bot committed
      Previously, associated type family defaults were validity-checked
      during typechecking. Unfortunately, the error messages that these
      checks produce run the risk of printing knot-tied type constructors,
      which will cause GHC to diverge. In order to preserve the current
      error message's descriptiveness, this patch postpones these validity
      checks until after typechecking, which are now located in the new
      function `GHC.Tc.Validity.checkValidAssocTyFamDeflt`.
      
      Fixes #18648.
      822f1057
  20. 23 Aug, 2020 1 commit
  21. 12 Aug, 2020 1 commit
    • Sylvain Henry's avatar
      DynFlags: disentangle Outputable · accbc242
      Sylvain Henry authored and  Marge Bot's avatar Marge Bot committed
      - put panic related functions into GHC.Utils.Panic
      - put trace related functions using DynFlags in GHC.Driver.Ppr
      
      One step closer making Outputable fully independent of DynFlags.
      
      Bump haddock submodule
      accbc242
  22. 25 Jun, 2020 1 commit
    • Takenobu Tani's avatar
      Clean up haddock hyperlinks of GHC.* (part2) · 1eb997a8
      Takenobu Tani authored and  Marge Bot's avatar Marge Bot committed
      This updates haddock comments only.
      
      This patch focuses to update for hyperlinks in GHC API's haddock comments,
      because broken links especially discourage newcomers.
      
      This includes the following hierarchies:
      
        - GHC.Iface.*
        - GHC.Llvm.*
      
        - GHC.Rename.*
        - GHC.Tc.*
      
        - GHC.HsToCore.*
        - GHC.StgToCmm.*
        - GHC.CmmToAsm.*
      
        - GHC.Runtime.*
      
        - GHC.Unit.*
        - GHC.Utils.*
        - GHC.SysTools.*
      1eb997a8
  23. 24 Jun, 2020 1 commit
  24. 17 Jun, 2020 1 commit
    • Krzysztof Gogolewski's avatar
      Linear types (#15981) · 40fa237e
      Krzysztof Gogolewski authored and Ben Gamari's avatar Ben Gamari committed
      This is the first step towards implementation of the linear types proposal
      (https://github.com/ghc-proposals/ghc-proposals/pull/111).
      
      It features
      
      * A language extension -XLinearTypes
      * Syntax for linear functions in the surface language
      * Linearity checking in Core Lint, enabled with -dlinear-core-lint
      * Core-to-core passes are mostly compatible with linearity
      * Fields in a data type can be linear or unrestricted; linear fields
        have multiplicity-polymorphic constructors.
        If -XLinearTypes is disabled, the GADT syntax defaults to linear fields
      
      The following items are not yet supported:
      
      * a # m -> b syntax (only prefix FUN is supported for now)
      * Full multiplicity inference (multiplicities are really only checked)
      * Decent linearity error messages
      * Linear let, where, and case expressions in the surface language
        (each of these currently introduce the unrestricted variant)
      * Multiplicity-parametric fields
      * Syntax for annotating lambda-bound or let-bound with a multiplicity
      * Syntax for non-linear/multiple-field-multiplicity records
      * Linear projections for records with a single linear field
      * Linear pattern synonyms
      * Multiplicity coercions (test LinearPolyType)
      
      A high-level description can be found at
      https://ghc.haskell.org/trac/ghc/wiki/LinearTypes/Implementation
      Following the link above you will find a description of the changes made to Core.
      This commit has been authored by
      
      * Richard Eisenberg
      * Krzysztof Gogolewski
      * Matthew Pickering
      * Arnaud Spiwack
      
      With contributions from:
      
      * Mark Barbone
      * Alexander Vershilov
      
      Updates haddock submodule.
      40fa237e
  25. 10 Jun, 2020 2 commits
    • Ömer Sinan Ağacan's avatar
      Cross-module LambdaFormInfo passing · 7a737e89
      Ömer Sinan Ağacan authored and  Marge Bot's avatar Marge Bot committed
      
      
      - Store LambdaFormInfos of exported Ids in interface files
      - Use them in importing modules
      
      This is for optimization purposes: if we know LambdaFormInfo of imported
      Ids we can generate more efficient calling code, see `getCallMethod`.
      
      Exporting (putting them in interface files or in ModDetails) and
      importing (reading them from interface files) are both optional. We
      don't assume known LambdaFormInfos anywhere and do not change how we
      call Ids with unknown LambdaFormInfos.
      
      Runtime, allocation, and residency numbers when building
      Cabal-the-library (commit 0d4ee7ba3):
      
      (Log and .hp files are in the MR: !2842)
      
      |     | GHC HEAD | This patch | Diff           |
      |-----|----------|------------|----------------|
      | -O0 |  0:35.89 |    0:34.10 | -1.78s, -4.98% |
      | -O1 |  2:24.01 |    2:23.62 | -0.39s, -0.27% |
      | -O2 |  2:52.23 |    2:51.35 | -0.88s, -0.51% |
      
      |     | GHC HEAD        | This patch      | Diff                       |
      |-----|-----------------|-----------------|----------------------------|
      | -O0 |  54,843,608,416 |  54,878,769,544 |  +35,161,128 bytes, +0.06% |
      | -O1 | 227,136,076,400 | 227,569,045,168 | +432,968,768 bytes, +0.19% |
      | -O2 | 266,147,063,296 | 266,749,643,440 | +602,580,144 bytes, +0.22% |
      
      NOTE: Residency is measured with extra runtime args: `-i0 -h` which effectively
      turn all GCs into major GCs, and do GC more often.
      
      |     | GHC HEAD                   | This patch                   | Diff                       |
      |-----|----------------------------|------------------------------|----------------------------|
      | -O0 | 410,284,000 (910 samples)  | 411,745,008 (906 samples)    | +1,461,008 bytes, +0.35%   |
      | -O1 | 928,580,856 (2109 samples) | 943,506,552 (2103 samples)   | +14,925,696 bytes, +1.60%  |
      | -O2 | 993,951,352 (2549 samples) | 1,010,156,328 (2545 samples) | +16,204,9760 bytes, +1.63% |
      
      NoFib results:
      
      --------------------------------------------------------------------------------
              Program           Size    Allocs    Instrs     Reads    Writes
      --------------------------------------------------------------------------------
                   CS           0.0%      0.0%     +0.0%     +0.0%     +0.0%
                  CSD           0.0%      0.0%      0.0%     +0.0%     +0.0%
                   FS           0.0%      0.0%     +0.0%     +0.0%     +0.0%
                    S           0.0%      0.0%     +0.0%     +0.0%     +0.0%
                   VS           0.0%      0.0%     +0.0%     +0.0%     +0.0%
                  VSD           0.0%      0.0%     +0.0%     +0.0%     +0.1%
                  VSM           0.0%      0.0%     +0.0%     +0.0%     +0.0%
                 anna           0.0%      0.0%     -0.3%     -0.8%     -0.0%
                 ansi           0.0%      0.0%     -0.0%     -0.0%      0.0%
                 atom           0.0%      0.0%     -0.0%     -0.0%      0.0%
               awards           0.0%      0.0%     -0.1%     -0.3%      0.0%
               banner           0.0%      0.0%     -0.0%     -0.0%     -0.0%
           bernouilli           0.0%      0.0%     -0.0%     -0.0%     -0.0%
         binary-trees           0.0%      0.0%     -0.0%     -0.0%     +0.0%
                boyer           0.0%      0.0%     -0.0%     -0.0%      0.0%
               boyer2           0.0%      0.0%     -0.0%     -0.0%      0.0%
                 bspt           0.0%      0.0%     -0.0%     -0.2%      0.0%
            cacheprof           0.0%      0.0%     -0.1%     -0.4%     +0.0%
             calendar           0.0%      0.0%     -0.0%     -0.0%      0.0%
             cichelli           0.0%      0.0%     -0.9%     -2.4%      0.0%
              circsim           0.0%      0.0%     -0.0%     -0.0%      0.0%
             clausify           0.0%      0.0%     -0.1%     -0.3%      0.0%
        comp_lab_zift           0.0%      0.0%     -0.0%     -0.0%     +0.0%
             compress           0.0%      0.0%     -0.0%     -0.0%     -0.0%
            compress2           0.0%      0.0%     -0.0%     -0.0%      0.0%
          constraints           0.0%      0.0%     -0.1%     -0.2%     -0.0%
         cryptarithm1           0.0%      0.0%     -0.0%     -0.0%      0.0%
         cryptarithm2           0.0%      0.0%     -1.4%     -4.1%     -0.0%
                  cse           0.0%      0.0%     -0.0%     -0.0%     -0.0%
         digits-of-e1           0.0%      0.0%     -0.0%     -0.0%     -0.0%
         digits-of-e2           0.0%      0.0%     -0.0%     -0.0%     -0.0%
               dom-lt           0.0%      0.0%     -0.1%     -0.2%      0.0%
                eliza           0.0%      0.0%     -0.5%     -1.5%      0.0%
                event           0.0%      0.0%     -0.0%     -0.0%     -0.0%
          exact-reals           0.0%      0.0%     -0.1%     -0.3%     +0.0%
               exp3_8           0.0%      0.0%     -0.0%     -0.0%     -0.0%
               expert           0.0%      0.0%     -0.3%     -1.0%     -0.0%
       fannkuch-redux           0.0%      0.0%     +0.0%     +0.0%     +0.0%
                fasta           0.0%      0.0%     -0.0%     -0.0%     +0.0%
                  fem           0.0%      0.0%     -0.0%     -0.0%      0.0%
                  fft           0.0%      0.0%     -0.0%     -0.0%      0.0%
                 fft2           0.0%      0.0%     -0.0%     -0.0%      0.0%
             fibheaps           0.0%      0.0%     -0.0%     -0.0%     +0.0%
                 fish           0.0%      0.0%      0.0%     -0.0%     +0.0%
                fluid           0.0%      0.0%     -0.4%     -1.2%     +0.0%
               fulsom           0.0%      0.0%     -0.0%     -0.0%      0.0%
               gamteb           0.0%      0.0%     -0.1%     -0.3%      0.0%
                  gcd           0.0%      0.0%     -0.0%     -0.0%      0.0%
          gen_regexps           0.0%      0.0%     -0.0%     -0.0%     -0.0%
               genfft           0.0%      0.0%     -0.0%     -0.0%      0.0%
                   gg           0.0%      0.0%     -0.0%     -0.0%     +0.0%
                 grep           0.0%      0.0%     -0.0%     -0.0%     -0.0%
               hidden           0.0%      0.0%     -0.1%     -0.4%     -0.0%
                  hpg           0.0%      0.0%     -0.2%     -0.5%     +0.0%
                  ida           0.0%      0.0%     -0.0%     -0.0%     +0.0%
                infer           0.0%      0.0%     -0.3%     -0.8%     -0.0%
              integer           0.0%      0.0%     -0.0%     -0.0%     +0.0%
            integrate           0.0%      0.0%     -0.0%     -0.0%      0.0%
         k-nucleotide           0.0%      0.0%     -0.0%     -0.0%     +0.0%
                kahan           0.0%      0.0%     -0.0%     -0.0%     +0.0%
              knights           0.0%      0.0%     -2.2%     -5.4%      0.0%
               lambda           0.0%      0.0%     -0.6%     -1.8%      0.0%
           last-piece           0.0%      0.0%     -0.0%     -0.0%      0.0%
                 lcss           0.0%      0.0%     -0.0%     -0.1%      0.0%
                 life           0.0%      0.0%     -0.0%     -0.1%      0.0%
                 lift           0.0%      0.0%     -0.2%     -0.6%     +0.0%
               linear           0.0%      0.0%     -0.0%     -0.0%     -0.0%
            listcompr           0.0%      0.0%     -0.0%     -0.0%      0.0%
             listcopy           0.0%      0.0%     -0.0%     -0.0%      0.0%
             maillist           0.0%      0.0%     -0.1%     -0.3%     +0.0%
               mandel           0.0%      0.0%     -0.0%     -0.0%      0.0%
              mandel2           0.0%      0.0%     -0.0%     -0.0%     -0.0%
                 mate          +0.0%      0.0%     -0.0%     -0.0%     -0.0%
              minimax           0.0%      0.0%     -0.2%     -1.0%      0.0%
              mkhprog           0.0%      0.0%     -0.1%     -0.2%     -0.0%
           multiplier           0.0%      0.0%     -0.0%     -0.0%     -0.0%
               n-body           0.0%      0.0%     -0.0%     -0.0%     +0.0%
             nucleic2           0.0%      0.0%     -0.1%     -0.2%      0.0%
                 para           0.0%      0.0%     -0.0%     -0.0%     -0.0%
            paraffins           0.0%      0.0%     -0.0%     -0.0%      0.0%
               parser           0.0%      0.0%     -0.2%     -0.7%      0.0%
              parstof           0.0%      0.0%     -0.0%     -0.0%     +0.0%
                  pic           0.0%      0.0%     -0.0%     -0.0%      0.0%
             pidigits           0.0%      0.0%     +0.0%     +0.0%     +0.0%
                power           0.0%      0.0%     -0.2%     -0.6%     +0.0%
               pretty           0.0%      0.0%     -0.0%     -0.0%     -0.0%
               primes           0.0%      0.0%     -0.0%     -0.0%      0.0%
            primetest           0.0%      0.0%     -0.0%     -0.0%     -0.0%
               prolog           0.0%      0.0%     -0.3%     -1.1%      0.0%
               puzzle           0.0%      0.0%     -0.0%     -0.0%      0.0%
               queens           0.0%      0.0%     -0.0%     -0.0%     +0.0%
              reptile           0.0%      0.0%     -0.0%     -0.0%      0.0%
      reverse-complem           0.0%      0.0%     -0.0%     -0.0%     +0.0%
              rewrite           0.0%      0.0%     -0.7%     -2.5%     -0.0%
                 rfib           0.0%      0.0%     -0.0%     -0.0%      0.0%
                  rsa           0.0%      0.0%     -0.0%     -0.0%      0.0%
                  scc           0.0%      0.0%     -0.1%     -0.2%     -0.0%
                sched           0.0%      0.0%     -0.0%     -0.0%     -0.0%
                  scs           0.0%      0.0%     -1.0%     -2.6%     +0.0%
               simple           0.0%      0.0%     +0.0%     -0.0%     +0.0%
                solid           0.0%      0.0%     -0.0%     -0.0%      0.0%
              sorting           0.0%      0.0%     -0.6%     -1.6%      0.0%
        spectral-norm           0.0%      0.0%     +0.0%      0.0%     +0.0%
               sphere           0.0%      0.0%     -0.0%     -0.0%     -0.0%
               symalg           0.0%      0.0%     -0.0%     -0.0%     +0.0%
                  tak           0.0%      0.0%     -0.0%     -0.0%      0.0%
            transform           0.0%      0.0%     -0.0%     -0.0%      0.0%
             treejoin           0.0%      0.0%     -0.0%     -0.0%      0.0%
            typecheck           0.0%      0.0%     -0.0%     -0.0%     +0.0%
              veritas          +0.0%      0.0%     -0.2%     -0.4%     +0.0%
                 wang           0.0%      0.0%     -0.0%     -0.0%      0.0%
            wave4main           0.0%      0.0%     -0.0%     -0.0%     -0.0%
         wheel-sieve1           0.0%      0.0%     -0.0%     -0.0%     -0.0%
         wheel-sieve2           0.0%      0.0%     -0.0%     -0.0%     +0.0%
                 x2n1           0.0%      0.0%     -0.0%     -0.0%     -0.0%
      --------------------------------------------------------------------------------
                  Min           0.0%      0.0%     -2.2%     -5.4%     -0.0%
                  Max          +0.0%      0.0%     +0.0%     +0.0%     +0.1%
       Geometric Mean          -0.0%     -0.0%     -0.1%     -0.3%     +0.0%
      
      Metric increases micro benchmarks tracked in #17686:
      
      Metric Increase:
          T12150
          T12234
          T12425
          T13035
          T5837
          T6048
          T9233
      Co-authored-by: Andreas Klebinger's avatarAndreas Klebinger <klebinger.andreas@gmx.at>
      7a737e89
    • Takenobu Tani's avatar
      Clarify leaf module names for new module hierarchy · 24879129
      Takenobu Tani authored and  Marge Bot's avatar Marge Bot committed
      This updates comments only.
      
      This patch replaces leaf module names according to new module
      hierarchy [1][2] as followings:
      
      * Expand leaf names to easily find the module path:
        for instance, `Id.hs` to `GHC.Types.Id`.
      
      * Modify leaf names according to new module hierarchy:
        for instance, `Convert.hs` to `GHC.ThToHs`.
      
      * Fix typo:
        for instance, `GHC.Core.TyCo.Rep.hs` to `GHC.Core.TyCo.Rep`
      
      See also !3375
      
      [1]: https://gitlab.haskell.org/ghc/ghc/-/wikis/Make-GHC-codebase-more-modular
      [2]: ghc/ghc#13009
      24879129
  26. 21 May, 2020 1 commit
    • Gert-Jan Bottu's avatar
      Explicit Specificity · a9311cd5
      Gert-Jan Bottu authored and  Marge Bot's avatar Marge Bot committed
      Implementation for Ticket #16393.
      Explicit specificity allows users to manually create inferred type variables,
      by marking them with braces.
      This way, the user determines which variables can be instantiated through
      visible type application.
      
      The additional syntax is included in the parser, allowing users to write
      braces in type variable binders (type signatures, data constructors etc).
      This information is passed along through the renamer and verified in the
      type checker.
      The AST for type variable binders, data constructors, pattern synonyms,
      partial signatures and Template Haskell has been updated to include the
      specificity of type variables.
      
      Minor notes:
      - Bumps haddock submodule
      - Disables pattern match checking in GHC.Iface.Type with GHC 8.8
      a9311cd5
  27. 30 Apr, 2020 1 commit
  28. 26 Apr, 2020 1 commit
  29. 18 Apr, 2020 2 commits
  30. 07 Apr, 2020 1 commit
  31. 29 Mar, 2020 1 commit
  32. 17 Mar, 2020 1 commit
  33. 11 Mar, 2020 1 commit
    • Sylvain Henry's avatar
      Split GHC.Iface.Utils module · 20800b9a
      Sylvain Henry authored and  Marge Bot's avatar Marge Bot committed
      * GHC.Iface.Recomp: recompilation avoidance stuff
      * GHC.Iface.Make: mkIface*
      
      Moved `writeIfaceFile` into GHC.Iface.Load alongside `readIface` and
      renamed it `writeIface` for consistency.
      20800b9a
  34. 10 Mar, 2020 1 commit
  35. 29 Feb, 2020 1 commit
    • Ömer Sinan Ağacan's avatar
      Simplify IfaceIdInfo type · 04d30137
      Ömer Sinan Ağacan authored and  Marge Bot's avatar Marge Bot committed
      IfaceIdInfo type is confusing: there's practically no difference between
      `NoInfo` and `HasInfo []`. The comments say NoInfo is used when
      -fomit-interface-pragmas is enabled, but we don't need to distinguish
      `NoInfo` from `HasInfo []` in when reading the interface so the
      distinction is not important.
      
      This patch simplifies the type by removing NoInfo. When we have no info
      we use an empty list.
      
      With this change we no longer read the info list lazily when reading an
      IfaceInfoItem, but when reading an IfaceId the ifIdInfo field is
      read lazily, so I doubt this is going to be a problem.
      04d30137
  36. 26 Feb, 2020 1 commit