1. 16 Dec, 2014 6 commits
    • Peter Wortmann's avatar
      Source notes (Cmm support) · 7ceaf96f
      Peter Wortmann authored
      This patch adds CmmTick nodes to Cmm code. This is relatively
      straight-forward, but also not very useful, as many blocks will simply
      end up with no annotations whatosever.
      
      Notes:
      
      * We use this design over, say, putting ticks into the entry node of all
        blocks, as it seems to work better alongside existing optimisations.
        Now granted, the reason for this is that currently GHC's main Cmm
        optimisations seem to mainly reorganize and merge code, so this might
        change in the future.
      
      * We have the Cmm parser generate a few source notes as well. This is
        relatively easy to do - worst part is that it complicates the CmmParse
        implementation a bit.
      
      (From Phabricator D169)
      7ceaf96f
    • Peter Wortmann's avatar
      Strip source ticks from iface code if DWARF is disabled · a0895fcb
      Peter Wortmann authored
      They would be unneeded at minimum. Not completely sure this is the right
      place to do this.
      
      (From Phabricator D169)
      a0895fcb
    • Peter Wortmann's avatar
      Source notes (CorePrep and Stg support) · 4cdbf802
      Peter Wortmann authored
      This is basically just about continuing maintaining source notes after
      the Core stage. Unfortunately, this is more involved as it might seem,
      as there are more restrictions on where ticks are allowed to show up.
      
      Notes:
      
      * We replace the StgTick / StgSCC constructors with a unified StgTick
        that can carry any tickish.
      
      * For handling constructor or lambda applications, we generally float
        ticks out.
      
      * Note that thanks to the NonLam placement, we know that source notes
        can never appear on lambdas. This means that as long as we are
        careful to always use mkTick, we will never violate CorePrep
        invariants.
      
      * This is however not automatically true for eta expansion, which
        needs to somewhat awkwardly strip, then re-tick the expression in
        question.
      
      * Where CorePrep floats out lets, we make sure to wrap them in the
        same spirit as FloatOut.
      
      * Detecting selector thunks becomes a bit more involved, as we can run
        into ticks at multiple points.
      
      (From Phabricator D169)
      4cdbf802
    • Peter Wortmann's avatar
      Annotation linting · 07d604fa
      Peter Wortmann authored
      This adds a way by which we can make sure that the Core passes treat
      annotations right: We run them twice and compare the results.
      
      The main problem here is that Core equivalence is awkward: We do not
      want the comparison to care about the order of, say, top-level or
      recursive bindings. This is important even if GHC generally generates
      the bindings in the right order - after all, if something goes wrong
      we don't want linting to dump out the whole program as the offense.
      
      So instead we do some heuristic matching - first greedily match
      everything that's easy, then match the rest by label order. This
      should work as long as GHC generates the labels in roughly the same
      order for both pass runs.  In practice it seems to work alright.
      
      We also check that IdInfos match, as this might cause hard-to-spot
      bugs down the line (I had at least one bug because unfolding guidance
      didn't match!). We especially check unfoldings up until the point
      where it might get us into an infinite loop.
      
      (From Phabricator D169)
      07d604fa
    • Peter Wortmann's avatar
      Generalized Coverage pass to allow adding multiple types of Tickishs · 3b893f38
      Peter Wortmann authored
      This allows having, say, HPC ticks, automatic cost centres and source
      notes active at the same time. We especially take care to un-tangle the
      infrastructure involved in generating them.
      
      (From Phabricator D169)
      3b893f38
    • Peter Wortmann's avatar
      Source notes (Core support) · 993975d3
      Peter Wortmann authored
      This patch introduces "SourceNote" tickishs that link Core to the
      source code that generated it. The idea is to retain these source code
      links throughout code transformations so we can eventually relate
      object code all the way back to the original source (which we can,
      say, encode as DWARF information to allow debugging).  We generate
      these SourceNotes like other tickshs in the desugaring phase. The
      activating command line flag is "-g", consistent with the flag other
      compilers use to decide DWARF generation.
      
      Keeping ticks from getting into the way of Core transformations is
      tricky, but doable. The changes in this patch produce identical Core
      in all cases I tested -- which at this point is GHC, all libraries and
      nofib. Also note that this pass creates *lots* of tick nodes, which we
      reduce somewhat by removing duplicated and overlapping source
      ticks. This will still cause significant Tick "clumps" - a possible
      future optimization could be to make Tick carry a list of Tickishs
      instead of one at a time.
      
      (From Phabricator D169)
      993975d3
  2. 15 Dec, 2014 6 commits
    • Simon Peyton Jones's avatar
      Improve documentation of syntax for promoted lists · a972bddf
      Simon Peyton Jones authored
      THe documentation in 7.9.4 of promoted list and tuple types was
      misleading, which led to Trac #9882.  This patch makes explicit
      that only type-level with two or more elements can have the
      quote omitted.
      a972bddf
    • Simon Peyton Jones's avatar
      Fix dll-split problem with patch 'Make Core Lint check for locally-bound GlobalId' · 3f87866a
      Simon Peyton Jones authored
      The trouble was that my changes made a lot more files transitively link with
      DynFlags, which is the root module for the revolting Windows dll-split stuff.
      
      Anyway this patch fixes it, in a good way:
      
       - Make GHC/Hooks *not* import DsMonad, because DsMonad imports too
         much other stuff (notably tcLookup variants).  Really, Hooks depends
         only on *types* not *code*.
      
       - To do this I need the DsM type, and the types it depends on,
         not to be part of DsMonad.  So I moved it to TcRnTypes, which is
         where the similar pieces for the TcM and IfM monads live.
      
       - We can then delete DsMonad.hs-boot
      
       - There are a bunch of knock-on change, of no great significance
      3f87866a
    • thomasw's avatar
      Fix panic on [t| _ |] (Trac #9879) · 48222831
      thomasw authored
      Summary:
      Type brackets containing a wildcard, e.g. `[t| _ |]`, caused a panic.
      Fix it by disallowing wildcards in type brackets.
      
      Together with D572, this fixes #9879.
      
      Test Plan: new test WildcardInTypeBrackets should pass
      
      Reviewers: austin
      
      Reviewed By: austin
      
      Subscribers: carter, thomie, monoidal
      
      Differential Revision: https://phabricator.haskell.org/D573
      
      GHC Trac Issues: #9879
      48222831
    • Carter Schonwald's avatar
      Changing prefetch primops to have a `seq`-like interface · f44333ea
      Carter Schonwald authored
      Summary:
      The current primops for prefetching do not properly work in pure code;
      namely, the primops are not 'hoisted' into the correct call sites based
      on when arguments are evaluated. Instead, they should use a `seq`-like
      interface, which will cause it to be evaluated when the needed term is.
      
      See #9353 for the full discussion.
      
      Test Plan: updated tests for pure prefetch in T8256 to reflect the design changes in #9353
      
      Reviewers: simonmar, hvr, ekmett, austin
      
      Reviewed By: ekmett, austin
      
      Subscribers: merijn, thomie, carter, simonmar
      
      Differential Revision: https://phabricator.haskell.org/D350
      
      GHC Trac Issues: #9353
      f44333ea
    • Simon Peyton Jones's avatar
      Make Core Lint check for locally-bound GlobalIds · d59c59f4
      Simon Peyton Jones authored
      There should be no bindings in this module for a GlobalId;
      except after CoreTidy, when top-level bindings are globalised.
      
      To check for this, I had to make the CoreToDo pass part of the
      environment that Core Lint caries.  But CoreToDo is defined in
      CoreMonad, which (before this patch) called CoreLint.
      
      So I had to do quite a bit of refactoring, moving some
      lint-invoking code into CoreLint itself.  Crucially, I also
      more tcLookupImported_maybe, importDecl, and checkwiredInTyCon
      from TcIface (which use CoreLint) to LoadIface (which doesn't).
      This is probably better structure anyway.
      
      So most of this patch is refactoring. The actual check for
      GlobalIds is in CoreLint.lintAndScopeId
      d59c59f4
    • Simon Peyton Jones's avatar
      Pattern-synonym matcher and builder Ids must be *LocalIds* · fbb42b2e
      Simon Peyton Jones authored
      This easy-to-make mistake meant that pattern-synonym matcher and
      builder Ids weren't being treated as locally defined by the simpplier.
      That meant that we never looked up them up in the environment, got an
      out-of-date unfolding, which made the Simplifier fall into an infinite
      loop.  This was the cause of Trac #98587, but it was quite tricky to
      find!
      
      In a separate patch I'll make Lint check for locally-bound GlobalIds,
      since they are always an error.
      fbb42b2e
  3. 14 Dec, 2014 1 commit
    • Sergei Trofimovich's avatar
      powerpc: fix and enable shared libraries by default on linux · fa31e8f4
      Sergei Trofimovich authored
      Summary:
      And fix things all the way down to it. Namely:
          - remove 'r30' from free registers, it's an .LCTOC1 register
            for gcc. generated .plt stubs expect it to be initialised.
          - fix PicBase computation, which originally forgot to use 'tmp'
            reg in 'initializePicBase_ppc.fetchPC'
          - mark 'ForeighTarget's as implicitly using 'PicBase' register
            (see comment for details)
          - add 64-bit MO_Sub and test on alloclimit3/4 regtests
          - fix dynamic label offsets to match with .LCTOC1 offset
      Signed-off-by: default avatarSergei Trofimovich <siarheit@google.com>
      
      Test Plan: validate passes equal amount of vanilla/dyn tests
      
      Reviewers: simonmar, erikd, austin
      
      Reviewed By: erikd, austin
      
      Subscribers: carter, thomie
      
      Differential Revision: https://phabricator.haskell.org/D560
      
      GHC Trac Issues: #8024, #9831
      fa31e8f4
  4. 13 Dec, 2014 2 commits
    • Sergei Trofimovich's avatar
      Parser: remove unused rule (copy/paste error) · 288c7c6a
      Sergei Trofimovich authored
      Summary:
      Found out when tracking down conflicts reported by happy.
      It was accidentally introduced in large Api Annotations
      patch: 803fc5db
      
      Before:
        unused rules: 1
        shift/reduce conflicts:  60
        reduce/reduce conflicts: 16
      After:
        shift/reduce conflicts:  60
        reduce/reduce conflicts: 12
      
      Unused rule is seen in happy's --info= output as:
          rule 180 is unused
          ...
          decl_cls -> 'default' infixexp '::' sigtypedoc     (180)
          decl_cls -> 'default' infixexp '::' sigtypedoc     (181)
      
      While at it removed 'q' typo in parser conflict log :)
      Signed-off-by: default avatarSergei Trofimovich <siarheit@google.com>
      
      Reviewers: simonmar, austin, alanz
      
      Reviewed By: alanz
      
      Subscribers: carter, thomie
      
      Differential Revision: https://phabricator.haskell.org/D569
      288c7c6a
    • eir@cis.upenn.edu's avatar
      reduceTyFamApp_maybe should *not* normalise arguments first. · 3ec93917
      eir@cis.upenn.edu authored
      Doing so made the solver gobble up tons of memory, now that matchFam
      calls reduceTyFamApp_maybe. But, I don't know why, yet! Will
      look more closely at this soon.
      3ec93917
  5. 12 Dec, 2014 2 commits
    • eir@cis.upenn.edu's avatar
      Flat constraint --> Simple constraint · 8a0de692
      eir@cis.upenn.edu authored
      8a0de692
    • eir@cis.upenn.edu's avatar
      Rewrite `Coercible` solver · 0cc47eb9
      eir@cis.upenn.edu authored
      Summary:
      This is a rewrite of the algorithm to solve for Coercible "instances".
      
      A preliminary form of these ideas is at
      https://ghc.haskell.org/trac/ghc/wiki/Design/NewCoercibleSolver
      
      The basic idea here is that the `EqPred` constructor of `PredTree`
      now is parameterised by a new type `EqRel` (where
      `data EqRel = NomEq | ReprEq`). Thus, every equality constraint can
      now talk about nominal equality (the usual case) or representational
      equality (the `Coercible` case).
      
      This is a change from the previous
      behavior where `Coercible` was just considered a regular class with
      a special case in `matchClassInst`.
      
      Because of this change, representational equalities are now
      canonicalized just like nominal ones, allowing more equalities
      to be solved -- in particular, the case at the top of #9117.
      
      A knock-on effect is that the flattener must be aware of the
      choice of equality relation, because the inert set now stores
      both representational inert equalities alongside the nominal
      inert equalities. Of course, we can use representational equalities
      to rewrite only within another representational equality --
      thus the parameterization of the flattener.
      
      A nice side effect of this change is that I've introduced a new
      type `CtFlavour`, which tracks G vs. W vs. D, removing some ugliness
      in the flattener.
      
      This commit includes some refactoring as discussed on D546.
      It also removes the ability of Deriveds to rewrite Deriveds.
      
      This fixes bugs #9117 and #8984.
      
      Reviewers: simonpj, austin, nomeata
      
      Subscribers: carter, thomie
      
      Differential Revision: https://phabricator.haskell.org/D546
      
      GHC Trac Issues: #9117, #8984
      0cc47eb9
  6. 11 Dec, 2014 2 commits
    • Simon Peyton Jones's avatar
      Fix an obscure but terrible bug in the simplifier (Trac #9567) · b8392ae7
      Simon Peyton Jones authored
      The issue was that contInputType simply gave the wrong answer
      for type applications.
      
      There was no way to fix contInputType; it just didn't have enough
      information.  So I did this:
      
      * Split the ApplyTo constructor of SimplUtils.SimplCont into
            ApplyToVal
            ApplyToTy
        I used record syntax for them; we should do this for some
        of the other constructors too.
      
      * The latter carries a sc_hole_ty, which is the type of the
        continuation's "hole"
      
      * Maintaining this type meant that I had do to something
        similar for SimplUtils.ArgSpec.
      
      * I renamed contInputType to contHoleType for consistency.
      
      * I did a bit of refactoring around the call to tryRules
        in Simplify, which was jolly confusing before.
      
      The resulting code is quite nice now.  And it has the additional
      merit that it works.
      
      The tests are simply tc124 and T7891 with -O enabled.
      b8392ae7
    • Simon Peyton Jones's avatar
      White space wibble only · d45edfb3
      Simon Peyton Jones authored
      d45edfb3
  7. 10 Dec, 2014 8 commits
  8. 08 Dec, 2014 7 commits
  9. 07 Dec, 2014 1 commit
  10. 06 Dec, 2014 3 commits
  11. 05 Dec, 2014 1 commit
  12. 04 Dec, 2014 1 commit