1. 18 Jun, 2016 12 commits
    • Ryan Scott's avatar
      Refactor derived Generic instances to reduce allocations · 9649fc0a
      Ryan Scott authored
      Previously, derived implementations of `to`/`from` in `Generic`
      instances were wastefully putting extra `M1`s in every case, which led
      to an O(n) increase in the number of coercions, resulting in a slowdown
      during the typechecker phase.
      
      This factors out the common `M1` in every case of a `to`/`from`
      definition so that the typechecker has far fewer coercions to deal with.
      For a datatype with 300 constructors, this change has been observed to
      save almost 3 seconds of compilation time.
      
      This is one step towards coming up with a solution for #5642.
      
      Test Plan: ./validate
      
      Reviewers: hvr, austin, simonpj, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: basvandijk, carter, thomie, osa1
      
      Differential Revision: https://phabricator.haskell.org/D2304
      
      GHC Trac Issues: #5642
      9649fc0a
    • Ryan Scott's avatar
      Add Bifoldable and Bitraversable to base · 270d545d
      Ryan Scott authored
      This adds `Data.Bifoldable` and `Data.Bitraversable` from the
      `bifunctors` package to `base`, completing the migration started in
      D336.  This is fairly straightforward, although there were a suprising
      amount of reinternal organization in `base` that was needed for this to
      happen:
      
      * `Data.Foldable`, `Data.Traversable`, `Data.Bifoldable`, and
        `Data.Bitraversable` share some nonexported datatypes (e.g., `StateL`,
        `StateR`, `Min`, `Max`, etc.) to implement some instances. To avoid
        code duplication, I migrated this internal code to a new hidden
        module, `Data.Functor.Utils` (better naming suggestions welcome).
      
      * `Data.Traversable` and `Data.Bitraversable` also make use of an
        identity newtype, so I modified them to use
        `Data.Functor.Identity.Identity`. This has a ripple effect on several
        other modules, since I had to move instances around in order to avoid
        dependency cycles.
      
      Fixes #10448.
      
      Reviewers: ekmett, hvr, austin, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2284
      
      GHC Trac Issues: #9682, #10448
      270d545d
    • Ömer Sinan Ağacan's avatar
      VarEnv: Comment only · 6354991f
      Ömer Sinan Ağacan authored
      6354991f
    • thomie's avatar
      Validate: use `rm -f` instead of `rm` · a4c85329
      thomie authored
      a4c85329
    • thomie's avatar
      Testsuite: validate the tests/stage1 directory with the stage1 compiler · d94c4056
      thomie authored
      * See `Note [Why is there no stage1 setup function?]`.
      * Move T2632 to the tests/stage1 directory (#10382).
      
      Reviewed by: ezyang, nomeata, bgamari
      
      Differential Revision: https://phabricator.haskell.org/D2341
      
      GHC Trac Issues: #12197
      d94c4056
    • thomie's avatar
      Testsuite: write "\n" instead of "\r\n" when using mingw Python · 6f6f5154
      thomie authored
      Mingw style Python uses '\r\n' by default for newlines. This is
      annoying, because it means that when a GHC developer on Windows uses
      mingw Python to `make accept` a test, every single line of the
      .stderr file is touched. This makes it difficult to spot the real
      changes, and it leads to unnecessary git history bloat.
      
      Prevent this from happening by using io.open instead of open.
      See `Note [Universal newlines]`
      
      Reviewed by: Phyx
      
      Differential Revision: https://phabricator.haskell.org/D2342
      6f6f5154
    • thomie's avatar
      Testsuite: run tests in <testdir>.run instead of /tmp · f72f23f9
      thomie authored
      As discussed in Phab:D1187, this approach makes it a bit easier to
      inspect the test directory while working on a new test.
      
      The only tests that needed changes are the ones that refer to files in
      ancestor directories. Those files are now copied directly into the test
      directory.
      
      validate still runs the tests in a temporary directory in /tmp, see
      `Note [Running tests in /tmp]` in testsuite/driver/runtests.py.
      
      Update submodule hpc.
      
      Reviewed by: simonmar
      
      Differential Revision: https://phabricator.haskell.org/D2333
      
      GHC Trac Issues: #11980
      f72f23f9
    • thomie's avatar
      Driver: `ghc ../Test` (without file extension) should work · e02beb18
      thomie authored
      Reviewed by: bgamari
      
      Differential Revision: https://phabricator.haskell.org/D2331
      
      GHC Trac Issues: #12192
      e02beb18
    • thomie's avatar
      Revert accidental submodule updates · 9bb05785
      thomie authored
      Commit 77bb0927 seems to have
      accidentally set some submodules to earlier versions. Undo this.
      9bb05785
    • Ben Gamari's avatar
      llvmGen: Consolidate MetaExpr pretty-printing · 85e09b1b
      Ben Gamari authored
      Previously this logic was duplicated needlessly.
      85e09b1b
    • Ben Gamari's avatar
      llvmGen: Make metadata ids a newtype · 2396d9bb
      Ben Gamari authored
      These were previously just represented as Ints which was needlessly
      vague.
      2396d9bb
    • Ben Gamari's avatar
      CmmNode: Make CmmTickScope's Unique strict · 3e8c495f
      Ben Gamari authored
      There is no reason why we need laziness here and making it strict
      enables unpacking.
      3e8c495f
  2. 17 Jun, 2016 4 commits
  3. 16 Jun, 2016 1 commit
  4. 15 Jun, 2016 4 commits
    • Simon Peyton Jones's avatar
      Major patch to introduce TyConBinder · e368f326
      Simon Peyton Jones authored
      Before this patch, following the TypeInType innovations,
      each TyCon had two lists:
        - tyConBinders :: [TyBinder]
        - tyConTyVars  :: [TyVar]
      
      They were in 1-1 correspondence and contained
      overlapping information.  More broadly, there were many
      places where we had to pass around this pair of lists,
      instead of a single list.
      
      This commit tidies all that up, by having just one list of
      binders in a TyCon:
      
        - tyConBinders :: [TyConBinder]
      
      The new data types look like this:
      
        Var.hs:
           data TyVarBndr tyvar vis = TvBndr tyvar vis
           data VisibilityFlag = Visible | Specified | Invisible
           type TyVarBinder = TyVarBndr TyVar VisibilityFlag
      
        TyCon.hs:
           type TyConBinder = TyVarBndr TyVar TyConBndrVis
      
           data TyConBndrVis
             = NamedTCB VisibilityFlag
             | AnonTCB
      
        TyCoRep.hs:
           data TyBinder
             = Named TyVarBinder
             | Anon Type
      
      Note that Var.TyVarBdr has moved from TyCoRep and has been
      made polymorphic in the tyvar and visiblity fields:
      
           type TyVarBinder = TyVarBndr TyVar VisibilityFlag
              -- Used in ForAllTy
           type TyConBinder = TyVarBndr TyVar TyConBndrVis
              -- Used in TyCon
      
           type IfaceForAllBndr  = TyVarBndr IfaceTvBndr VisibilityFlag
           type IfaceTyConBinder = TyVarBndr IfaceTvBndr TyConBndrVis
               -- Ditto, in interface files
      
      There are a zillion knock-on changes, but everything
      arises from these types.  It was a bit fiddly to get the
      module loops to work out right!
      
      Some smaller points
      ~~~~~~~~~~~~~~~~~~~
      * Nice new functions
          TysPrim.mkTemplateKiTyVars
          TysPrim.mkTemplateTyConBinders
        which help you make the tyvar binders for dependently-typed
        TyCons.  See comments with their definition.
      
      * The change showed up a bug in TcGenGenerics.tc_mkRepTy, where the code
        was making an assumption about the order of the kind variables in the
        kind of GHC.Generics.(:.:).  I fixed this; see TcGenGenerics.mkComp.
      e368f326
    • Simon Peyton Jones's avatar
      Re-add FunTy (big patch) · 77bb0927
      Simon Peyton Jones authored
      With TypeInType Richard combined ForAllTy and FunTy, but that was often
      awkward, and yielded little benefit becuase in practice the two were
      always treated separately.  This patch re-introduces FunTy.  Specfically
      
      * New type
          data TyVarBinder = TvBndr TyVar VisibilityFlag
        This /always/ has a TyVar it.  In many places that's just what
        what we want, so there are /lots/ of TyBinder -> TyVarBinder changes
      
      * TyBinder still exists:
          data TyBinder = Named TyVarBinder | Anon Type
      
      * data Type = ForAllTy TyVarBinder Type
                  | FunTy Type Type
                  |  ....
      
      There are a LOT of knock-on changes, but they are all routine.
      
      The Haddock submodule needs to be updated too
      77bb0927
    • Simon Peyton Jones's avatar
      Fix testsuite wibble · e33ca0e5
      Simon Peyton Jones authored
      ..in typecheck/should_run/T7861
      
      Was concealed behind the haddock perf noise
      e33ca0e5
    • Simon Peyton Jones's avatar
      Revert "Make the Ord Module independent of Unique order" · 70a45893
      Simon Peyton Jones authored
      This reverts commit 0497ee50.
      
      Reason: See Trac #12191.  I'm reverting pending Bartosz's
      investigation of what went wrong.
      70a45893
  5. 14 Jun, 2016 6 commits
  6. 13 Jun, 2016 13 commits
    • Simon Peyton Jones's avatar
      Update Haddock to follow change in LHsSigWcType · d55a9b4f
      Simon Peyton Jones authored
      Update submodule to accompany this commit:
      
          commit 15b9bf4b
          Author: Simon Peyton Jones <simonpj@microsoft.com>
          Date:   Sat Jun 11 23:49:27 2016 +0100
      
              Improve typechecking of let-bindings
      
      Sorry it's late!
      d55a9b4f
    • niteria's avatar
      Make the Ord Module independent of Unique order · 0497ee50
      niteria authored
      The `Ord Module` instance currently uses `Unique`s for comparison.
      We don't want to use the `Unique` order because it can introduce nondeterminism.
      This switches `Ord ModuleName` and `Ord UnitId` to use lexicographic ordering
      making `Ord Module` deterministic transitively.
      
      I've run `nofib` and it doesn't make a measurable difference.
      
      See also Note [ModuleEnv determinism and performance].
      
      Test Plan:
      ./validate
      run nofib: P112
      
      Reviewers: simonpj, simonmar, austin, bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2030
      
      GHC Trac Issues: #4012
      0497ee50
    • niteria's avatar
      Use UniqFM for SigOf · 586d5581
      niteria authored
      Summary:
      The Ord instance for ModuleName is currently implemented in
      terms of Uniques causing potential determinism problems.
      I plan to change it to use the actual FastStrings and in
      preparation for that I'm switching to UniqFM where it's
      possible (you need *one* Unique per key, and you can't get
      the keys back), so that the performance doesn't suffer.
      
      Test Plan: ./validate
      
      Reviewers: simonmar, austin, ezyang, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2320
      
      GHC Trac Issues: #4012
      586d5581
    • niteria's avatar
      Kill unused foldModuleEnv · 7de776cf
      niteria authored
      With the current implementation, it's nondeterministic
      because Ord Module is nondeterministic.
      7de776cf
    • Tamar Christina's avatar
      Add thin library support to Windows too · 5cee88d7
      Tamar Christina authored
      Summary:
      Code already existed in the RTS to add thin library support for non-Windows
      operating systems. This adds it to Windows as well.
      
      ar thin libraries have the exact same format as normal archives except they
      have a different magic string and they don't copy the object files into the
      archive.
      
      Instead each header entry points to the location of the object file on disk.
      This is useful when a library is only created to satisfy a compile time dependency
      instead of to be distributed. This saves the time required for copying.
      
      Test Plan: ./validate and new test T11788
      
      Reviewers: austin, bgamari, simonmar, erikd
      
      Reviewed By: bgamari, simonmar
      
      Subscribers: thomie, #ghc_windows_task_force
      
      Differential Revision: https://phabricator.haskell.org/D2323
      
      GHC Trac Issues: #11788
      5cee88d7
    • Simon Peyton Jones's avatar
      A second test for Trac #12055 · 1dcb32dd
      Simon Peyton Jones authored
      This one omits the extension, thereby making GHC 8.0 produce
      "GHC internal error".
      1dcb32dd
    • Simon Peyton Jones's avatar
      Test Trac #12055 · 921ebc9f
      Simon Peyton Jones authored
      921ebc9f
    • Simon Peyton Jones's avatar
      Add to .gitignore · e064f501
      Simon Peyton Jones authored
      This adds
        *.patch
        *.stackdump    (Windows)
        foo*           (simonpj uses foo* for junk files)
      e064f501
    • Simon Peyton Jones's avatar
      Remove some traceTc calls · 8104f7c6
      Simon Peyton Jones authored
      During the kind-checking "knot" we have to be careful not
      to print too eagerly.
      8104f7c6
    • Simon Peyton Jones's avatar
      Beef up isPredTy · 599d912f
      Simon Peyton Jones authored
      isPredTy can be called on ill-kinded types, especially (of course) if
      there is a kind error.  We don't wnat it to crash, but it was, in
      piResultTy.
      
      This patch introduces piResultTy_maybe, and uses it in isPredTy.
      
      Ugh.  I dislike this code.  It's mainly used to know when we should
      print types with '=>', and we should probably have a better way to
      signal that.
      599d912f
    • Simon Peyton Jones's avatar
      Fix the in-scope set for extendTvSubstWithClone · 15fc5281
      Simon Peyton Jones authored
      We'd forgotten the variables free in the kind.
      
      Ditto extendCvSubstWithClone
      15fc5281
    • Simon Peyton Jones's avatar
      Beef up mkNakedCastTy · 1f661281
      Simon Peyton Jones authored
      By spotting Refl coercions we can avoid building an awful
      lot of CastTys.  Simple and effective.
      1f661281
    • Simon Peyton Jones's avatar
      Move the constraint-kind validity check · 35c9de7c
      Simon Peyton Jones authored
      For type synonyms, we need to check that if the RHS has
      kind Constraint, then we have -XConstraintKinds.  For
      some reason this was done in checkValidType, but it makes
      more sense to do it in checkValidTyCon.
      
      I can't remember quite why I made this change; maybe it fixes
      a Trac ticket, but if so I forget which.  But it's a modest
      improvement anyway.
      35c9de7c