1. 28 Feb, 2017 20 commits
  2. 27 Feb, 2017 7 commits
    • Simon Peyton Jones's avatar
      Stop uniques ending up in SPEC rule names · 0f7a369f
      Simon Peyton Jones authored
      Reviewers: austin, bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D3191
      0f7a369f
    • Alan Zimmerman's avatar
      Explicitly capture whether a splice has a dollar prefix · c0af206f
      Alan Zimmerman authored
      A top-level splice can be written
      
          $splice
      
      or
      
          splice
      
      For accurate pretty-printing, and for ghc-exactprint, capture in the hsSyn AST
      which variant was parsed.
      c0af206f
    • Simon Peyton Jones's avatar
      Occurrence-analyse the result of rule firings · 76f2cd02
      Simon Peyton Jones authored
      When studying simplCore/should_compile/T7785 I found that a long
      chain of maps
      
        map f (map f (map f (map f (...))))
      
      took an unreasonably long time to simplify.  The problem got
      worse when I started inlining in the InitialPhase, which is how
      I stumbled on it.
      
      The solution turned  out to be rather simple.  It's described in
      
         Note [Occurence-analyse after rule firing]
      
      in Simplify.hs
      
      Reviewers: austin, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D3190
      76f2cd02
    • Simon Peyton Jones's avatar
      Add -fspec-constr-keen · 4f38fa10
      Simon Peyton Jones authored
      I discovered that the dramatic imprvoement in perf/should_run/T9339
      with the introduction of join points was really rather a fluke, and
      very fragile.
      
      The real problem (see Note [Making SpecConstr keener]) is that
      SpecConstr wasn't specialising a function even though it was applied
      to a freshly-allocated constructor.  The paper describes plausible
      reasons for this, but I think it may well be better to be a bit more
      aggressive.
      
      So this patch add -fspec-constr-keen, which makes SpecConstr a bit
      keener to specialise, by ignoring whether or not the argument
      corresponding to a call pattern is scrutinised in the function body.
      Now the gains in T9339 should be robust; and it might even be a
      better default.
      
      I'd be interested in what happens if we switched on -fspec-constr-keen
      with -O2.
      
      Reviewers: austin, bgamari
      
      Reviewed By: bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D3186
      4f38fa10
    • Simon Peyton Jones's avatar
      Refactor floating of bindings (fiBind) · e4188b53
      Simon Peyton Jones authored
      This is just a local refactoring.
      
      I originally planned to try floating top-level bindings inwards,
      but I backed off from that leaving only this (harmless) refactoring,
      which has no behavioural effect.
      
      I also make FloatIn into a ModGuts -> ModGuts function; again not
      necessary now, but no harm either.
      
      My attempt also used the new function CoreFVs.freeVarsBind; but
      that too is a plausible refactorig of freeVars, so I left it in too.
      
      Reviewers: austin, bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D3180
      e4188b53
    • Edward Z. Yang's avatar
      Subtyping for roles in signatures. · 923d7ca2
      Edward Z. Yang authored
      
      
      Summary:
      This commit implements the plan in #13140:
      
      * Today, roles in signature files default to representational. Let's change the
        default to nominal, as this is the most flexible implementation side. If a
        client of the signature needs to coerce with a type, the signature can be
        adjusted to have more stringent requirements.
      
      * If a parameter is declared as nominal in a signature, it can be implemented
        by a data type which is actually representational.
      
      * When merging abstract data declarations, we take the smallest role for every
        parameter. The roles are considered fix once we specify the structure of an
        ADT.
      
      * Critically, abstract types are NOT injective, so we aren't allowed to
        make inferences like "if T a ~R T b, then a ~N b" based on the nominal
        role of a parameter in an abstract type (this would be unsound if the
        parameter ended up being phantom.)  This restriction is similar to the
        restriction we have on newtypes.
      Signed-off-by: default avatarEdward Z. Yang <ezyang@cs.stanford.edu>
      
      Test Plan: validate
      
      Reviewers: simonpj, bgamari, austin, goldfire
      
      Subscribers: goldfire, thomie
      
      Differential Revision: https://phabricator.haskell.org/D3123
      923d7ca2
    • Edward Z. Yang's avatar
      Treat all TyCon with hole names as skolem abstract. · 9603de6a
      Edward Z. Yang authored
      
      
      Summary:
      Fixes #13335.
      Signed-off-by: default avatarEdward Z. Yang <ezyang@cs.stanford.edu>
      
      Test Plan: validate
      
      Reviewers: goldfire, austin, simonpj, bgamari
      
      Subscribers: thomie
      
      Differential Revision: https://phabricator.haskell.org/D3211
      9603de6a
  3. 26 Feb, 2017 13 commits