1. 23 Jun, 2016 6 commits
    • niteria's avatar
      Provide Uniquable version of SCC · 35d1564c
      niteria authored
      We want to remove the `Ord Unique` instance because there's
      no way to implement it in deterministic way and it's too
      easy to use by accident.
      
      We sometimes compute SCC for datatypes whose Ord instance
      is implemented in terms of Unique. The Ord constraint on
      SCC is just an artifact of some internal data structures.
      We can have an alternative implementation with a data
      structure that uses Uniquable instead.
      
      This does exactly that and I'm pleased that I didn't have
      to introduce any duplication to do that.
      
      Test Plan:
      ./validate
      I looked at performance tests and it's a tiny bit better.
      
      Reviewers: bgamari, simonmar, ezyang, austin, goldfire
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2359
      
      GHC Trac Issues: #4012
      35d1564c
    • Facundo Domínguez's avatar
      Have Core linter accept programs using StaticPointers and -fhpc. · 7fc20b02
      Facundo Domínguez authored
      Summary:
      This patch uses collectArgsTicks instead of collectArgs to test that
      StaticPtr only occurs at the top of RHSs of top-level expressions.
      
      Ticks introduced by -fhpc would interfere otherwise.
      
      Test Plan: ./validate
      
      Reviewers: thomie, austin, goldfire, bgamari, simonpj
      
      Reviewed By: simonpj
      
      Differential Revision: https://phabricator.haskell.org/D2355
      
      GHC Trac Issues: #12207
      7fc20b02
    • Simon Peyton Jones's avatar
      Narrow the use of record wildcards slightly · 2f8cd14f
      Simon Peyton Jones authored
      In reviewing the fix to Trac #12130 I found the wild-card
      fill-in code for ".." notation in record constructions hard
      to understand.  It went to great contortions (including the
      find_tycon code) to allow
          data T = C { x, y :: Int }
          f x = C { .. }
      to expand to
          f x = C { x = x, y = y }
      where 'y' is an /imported function/!  That seems way over the top
      for what record wildcards are supposed to do.
      
      So I have narrowed the record-wildcard expansion to include only
      /locally-bound/ variables; i.e. not top level, and certainly not
      imported.
      
      I don't think anyone is using record wildcards in this bizarre way, so
      I don't expect any fallout. Even if there is, you can easily
      initialise fields with eponymous but imported values by hand.
      
      An intermediate position would be to allow /local/ top-level
      definitions.  But I doubt anyone is doing that either.
      
      Let's see if there's any fallout.  It's a local change, easy to
      revert, so I've just gone ahead to save everyone's time.
      2f8cd14f
    • Simon Peyton Jones's avatar
      Narrow the warning for simplifiable constraints · 643706e4
      Simon Peyton Jones authored
      In Trac #11948 I added the warning
          -Wsimplifiable-class-constraints
      which warns if the class constraints in a type signature are
      simplifiable.
      
      But in fact the fragility it warns about only happens with
      NoMonoLocalBinds, so this patch switches off the warning if
      you have MonoLocalBinds (and suggests using it in the error
      message).
      
      See Note [Simplifiable given constraints] in TcValidity.
      643706e4
    • Simon Peyton Jones's avatar
      Remove unused import · e556f768
      Simon Peyton Jones authored
      e556f768
    • Simon Peyton Jones's avatar
      Give lookupGRE_Name a better API · 3e0af469
      Simon Peyton Jones authored
      lookupGRE_Name should return either zero or one GREs, never
      several. This is a consequence of INVARIANT 1 on GlobalRdrEnv.
      
      So it's better if it returns a Maybe; the panic on multiple results
      is put in one place, instead of being scattered or ignored.
      
      Just refactoring, no change in behaviour
      3e0af469
  2. 22 Jun, 2016 10 commits
    • Simon Peyton Jones's avatar
      Expand given superclasses more eagerly · ce97b729
      Simon Peyton Jones authored
      This patch fixes Trac #12175, another delicate corner case of
      Note [Instance and Given overlap] in TcInteract.
      
      In #12175 we were not expanding given superclasses eagerly
      enough. It was easy to fix, and is actually rather neater than
      before.
      
      See Note [Eagerly expand given superclasses] in TcCanonical.
      The main change is to move the eager expansion of given superclasses
      to canClassNC.
      ce97b729
    • Simon Peyton Jones's avatar
      Remove unused arg to tcSuperClasses · a1b33596
      Simon Peyton Jones authored
      We don't need the FamInstEnvs argument any more.
      Just a tiny refactor.
      a1b33596
    • Simon Peyton Jones's avatar
      Improve error message in deriving( Functor ) · cc92a446
      Simon Peyton Jones authored
      Fixes Trac #12163.  Pretty simple.
      cc92a446
    • Simon Peyton Jones's avatar
      Comments only · 7e7aeab2
      Simon Peyton Jones authored
      7e7aeab2
    • niteria's avatar
      Make the Ord Module independent of Unique order (2nd try) · 348f2dbb
      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].
      
      This fixes #12191 - the regression, that the previous version of this
      patch had.
      
      Test Plan:
      ./validate
      run nofib: P112
      
      Reviewers: simonmar, bgamari, austin
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2354
      
      GHC Trac Issues: #4012, #12191
      348f2dbb
    • Gabor Greif's avatar
      More typos in comments [skip ci] · 61995883
      Gabor Greif authored
      61995883
    • Gabor Greif's avatar
      Typos in comments [skip ci] · 4e7d8350
      Gabor Greif authored
      4e7d8350
    • Simon Marlow's avatar
      9d62d09a
    • Simon Marlow's avatar
      Fix build breakage due to rebase · c0583a9e
      Simon Marlow authored
      c0583a9e
    • Simon Marlow's avatar
      Second attempt to fix sizeExpr · a47b62cb
      Simon Marlow authored
      Summary:
      Background:
      * sizeExpr was calculating expressions like ((e `cast` T) x) wrongly
      * Fixing it caused regressions in compile performance, and one nofib
        program (k-nucleotide)
      
      I managed to fix the source of the compiler regressions.  I think it was
      due to traceTc not being inlined, which I fixed in a more robust way by
      putting an export list on TcRnMonad.
      
      The k-nucleotide regression is more difficult.  I don't think anything
      is actually going wrong, but this program has been highly tuned and is
      quite sensitive to changing in inlining behaviour.  I managed to recover
      most of the performance by manual lambda-lifting which makes it a bit
      less fragile, but the end result was a bit slower.  I don't think this
      is disastrous, the program is pretty horrible to begin with and we could
      probably make a faster one by starting from scratch.
      
      Test Plan: validate, nofib
      
      Reviewers: simonpj, bgamari, niteria, austin, erikd
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2338
      
      GHC Trac Issues: #11564
      a47b62cb
  3. 21 Jun, 2016 4 commits
    • niteria's avatar
      Make checkFamInstConsistency less expensive · 12306294
      niteria authored
      Doing canonicalization on every comparison turned
      out to be very expensive.
      
      Caching the canonicalization through the smart `modulePair` constructor
      gives `8%` reduction in allocations on `haddock.compiler` and
      `8.5%` reduction in allocations on `haddock.Cabal`.
      Possibly other things as well, but it's really visible in Haddock.
      
      Test Plan: ./validate
      
      Reviewers: jstolarek, simonpj, austin, simonmar, bgamari
      
      Reviewed By: simonpj, simonmar
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2350
      
      GHC Trac Issues: #12191
      12306294
    • Simon Peyton Jones's avatar
      Delete commented-out code · 97a50f82
      Simon Peyton Jones authored
      Richard: in a previous commit I combined the two case for
      
         decideQuantification
      
      This commit just deletes the old code. I'm afraid it'll leave you
      with a merge conflict though, with your stuff on generalisation.
      97a50f82
    • Simon Peyton Jones's avatar
      Don't quantify over Refl in a RULE · d09e982c
      Simon Peyton Jones authored
      This fixes Trac #12212.  It's quite hard to provoke, but I've
      added a standalone test case that does so.
      
      The issue is explained in Note [Evidence foralls] in Specialise.
      d09e982c
    • Gabor Greif's avatar
      Typos in comments · 7301404d
      Gabor Greif authored
      7301404d
  4. 20 Jun, 2016 1 commit
  5. 18 Jun, 2016 11 commits
    • Ben Gamari's avatar
      llvmGen: Add strictness to metadata fields · 0be38a22
      Ben Gamari authored
      0be38a22
    • Peter Trommler's avatar
      PPC NCG: Fix and refactor TOC handling. · f4b0488d
      Peter Trommler authored
      In a call to a fixed function the TOC does not need to be saved.
      The linker handles TOC saving.
      
      Refactor TOC handling by folding the two functions toc_before and
      toc_after into the code generating the call sequence. This saves
      repeating the case distinction in those two functions.
      
      Test Plan: validate on PowerPC 32-bit Linux and AIX
      
      Reviewers: hvr, simonmar, austin, erikd, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2328
      f4b0488d
    • Peter Trommler's avatar
      PPC NCG: Fix float parameter passing on 64-bit. · 2897be77
      Peter Trommler authored
      On Linux 64-bit PowerPC the first 13 floating point parameters are
      passed in registers. We only passed the first 8 floating point params.
      
      The alignment of a floating point single precision value in ELF v1.9 is
      the second word of a doubleword. For ELF v2 we support only little
      endian and the least significant word of a doubleword is the first word,
      so no special handling is required.
      
      Add a regression test.
      
      Test Plan: validate on powerpc Linux and AIX
      
      Reviewers: erikd, hvr, austin, simonmar, bgamari
      
      Reviewed By: simonmar
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2327
      
      GHC Trac Issues: #12134
      2897be77
    • seraphime's avatar
      Fix trac #10647: Notice about lack of SIMD support · f12fb8ab
      seraphime authored
      Fixes #10647. Changes the error message when a SIMD size
      variable is required in the native code generation backend.
      
      Test Plan:
      Try compiling the test case given in the ticket :
      
      {-# LANGUAGE MagicHash #-}
      module Foo where
      import GHC.Prim
      data V = V Int8X16#
      
      GHC should give a clearer error message
      
      Reviewers: austin, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2325
      
      GHC Trac Issues: #10647
      f12fb8ab
    • Adam Gundry's avatar
      Avoid find_tycon panic if datacon is not in scope · 4d71cc89
      Adam Gundry authored
      When using TH to splice expressions involving record field construction,
      the parent datacon may not be in scope.  We shouldn't panic about this,
      because we will be renaming Exact RdrNames which don't require any
      disambiguation.
      
      Test Plan: new test th/T12130
      
      Reviewers: austin, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D2321
      
      GHC Trac Issues: #12130
      4d71cc89
    • 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
    • Ömer Sinan Ağacan's avatar
      VarEnv: Comment only · 6354991f
      Ömer Sinan Ağacan authored
      6354991f
    • 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
    • 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
  6. 17 Jun, 2016 3 commits
  7. 16 Jun, 2016 1 commit
  8. 15 Jun, 2016 3 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
      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
  9. 14 Jun, 2016 1 commit