Skip to content
Snippets Groups Projects
  1. Aug 07, 2020
  2. Aug 06, 2020
  3. Aug 05, 2020
    • Ben Gamari's avatar
      Refactor handling of object merging · e69b0d42
      Ben Gamari authored
      Previously to merge a set of object files we would invoke the linker as
      usual, adding -r to the command-line. However, this can result in
      non-sensical command-lines which causes lld to balk (#17962).
      
      To avoid this we introduce a new tool setting into GHC, -pgmlm, which is
      the linker which we use to merge object files.
      e69b0d42
  4. Aug 03, 2020
  5. Aug 01, 2020
  6. Jul 31, 2020
  7. Jul 30, 2020
  8. Jul 28, 2020
  9. Jul 26, 2020
    • Moritz Angermann's avatar
      [linker] Fix out of range relocations. · 6471cc6a
      Moritz Angermann authored and Ben Gamari's avatar Ben Gamari committed
      mmap may return address all over the place. mmap_next will ensure we get
      the next free page after the requested address.
      
      This is especially important for linking on aarch64, where the memory model with PIC
      admits relocations in the +-4GB range, and as such we can't work with
      arbitrary object locations in memory.
      
      Of note: we map the rts into process space, so any mapped objects must
      not be ouside of the 4GB from the processes address space.
      
      (cherry picked from commit aedfeb0b)
      6471cc6a
    • Ben Gamari's avatar
      5015d3ac
    • Simon Peyton Jones's avatar
      Fix specialisation for DFuns · a10c6ddf
      Simon Peyton Jones authored
      When specialising a DFun we must take care to saturate the
      unfolding.  See Note [Specialising DFuns] in Specialise.
      
      Fixes #18120
      
      (cherry picked from commit 88e3c815)
      a10c6ddf
    • Simon Peyton Jones's avatar
      Major improvements to the specialiser · 05be81e8
      Simon Peyton Jones authored
      This patch is joint work of Alexis King and Simon PJ.  It does some
      significant refactoring of the type-class specialiser.  Main highlights:
      
      * We can specialise functions with types like
           f :: Eq a => a -> Ord b => b => blah
        where the classes aren't all at the front (#16473).  Here we can
        correctly specialise 'f' based on a call like
           f @Int @Bool dEqInt x dOrdBool
        This change really happened in an earlier patch
           commit 2d0cf625
           Author: Sandy Maguire <sandy@sandymaguire.me>
           Date:   Thu May 16 12:12:10 2019 -0400
        work that this new patch builds directly on that work, and refactors
        it a bit.
      
      * We can specialise functions with implicit parameters (#17930)
           g :: (?foo :: Bool, Show a) => a -> String
        Previously we could not, but now they behave just like a non-class
        argument as in 'f' above.
      
      * We can specialise under-saturated calls, where some (but not all of
        the dictionary arguments are provided (#17966).  For example, we can
        specialise the above 'f' based on a call
           map (f @Int dEqInt) xs
        even though we don't (and can't) give Ord dictionary.
      
        This may sound exotic, but #17966 is a program from the wild, and
        showed significant perf loss for functions like f, if you need
        saturation of all dictionaries.
      
      * We fix a buglet in which a floated dictionary had a bogus demand
        (#17810), by using zapIdDemandInfo in the NonRec case of specBind.
      
      * A tiny side benefit: we can drop dead arguments to specialised
        functions; see Note [Drop dead args from specialisations]
      
      * Fixed a bug in deciding what dictionaries are "interesting"; see
        Note [Keep the old dictionaries interesting]
      
      This is all achieved by by building on Sandy Macguire's work in
      defining SpecArg, which mkCallUDs uses to describe the arguments of
      the call. Main changes:
      
      * Main work is in specHeader, which marched down the [InBndr] from the
        function definition and the [SpecArg] from the call site, together.
      
      * specCalls no longer has an arity check; the entire mechanism now
        handles unders-saturated calls fine.
      
      * mkCallUDs decides on an argument-by-argument basis whether to
        specialise a particular dictionary argument; this is new.
        See mk_spec_arg in mkCallUDs.
      
      It looks as if there are many more lines of code, but I think that
      all the extra lines are comments!
      
      (cherry picked from commit 7052d7c7)
      05be81e8
    • Simon Peyton Jones's avatar
      Refactoring in TcSMonad · a063768e
      Simon Peyton Jones authored
      This patch is just refactoring: no change in
      behaviour.
      
      I removed the rather complicated
          checkConstraintsTcS
          checkTvConstraintsTcS
      
      in favour of simpler functions
          emitImplicationTcS
          emitTvImplicationTcS
          pushLevelNoWorkList
      
      The last of these is a little strange, but overall
      it's much better I think.
      
      (cherry picked from commit 9d87ced6)
      a063768e
    • Simon Peyton Jones's avatar
      Wrap an implication around class-sig kind errors · 50f25994
      Simon Peyton Jones authored
      Ticket #17841 showed that we can get a kind error
      in a class signature, but lack an enclosing implication
      that binds its skolems.
      
      This patch
      
      * Adds the wrapping implication: the new call to
        checkTvConstraints in tcClassDecl1
      
      * Simplifies the API to checkTvConstraints, which
        was not otherwise called at all.
      
      * Simplifies TcErrors.report_unsolved by *not*
        initialising the TidyEnv from the typechecker lexical
        envt.  It's enough to do so from the free vars of the
        unsolved constraints; and we get silly renamings if
        we add variables twice: once from the lexical scope
        and once from the implication constraint.
      
      (cherry picked from commit 3f431587)
      50f25994
    • Joshua Price's avatar
      Make `identifier` parse unparenthesized `->` (#18060) · 83bcf37d
      Joshua Price authored and Ben Gamari's avatar Ben Gamari committed
      (cherry picked from commit d6203f24)
      83bcf37d
  10. Jul 23, 2020
    • Travis Whitaker's avatar
      Build a threaded stage 1 if the bootstrapping GHC supports it. · 55fac768
      Travis Whitaker authored and Ben Gamari's avatar Ben Gamari committed
      (cherry picked from commit 67738db1)
      (cherry picked from commit a228d0a83db06fbe81b1c74fe3b1aea3133cee50)
      55fac768
    • Ben Gamari's avatar
      Fix GhcThreaded setting · b7c216cb
      Ben Gamari authored
      This adopts a patch from NetBSD's packaging fixing the `GhcThreaded`
      option of the make build system. In addition we introduce a `ghcThreaded`
      option in hadrian's `Flavour` type.
      
      Also fix Hadrian's treatment of the `Use Threaded` entry in `settings`.
      Previously it would incorrectly claim `Use Threaded = True` if we were
      building the `threaded` runtime way. However, this is inconsistent with
      the `make` build system, which defines it to be whether the `ghc`
      executable is linked against the threaded runtime.
      
      Fixes #17692.
      b7c216cb
    • Sylvain Henry's avatar
      Add tests for #17920 · 36656d70
      Sylvain Henry authored
      Metric Decrease:
          T12150
          T12234
      
      (cherry picked from commit aa54d1a2b2d2c89107cfa77d8c14a50d6ee9c140)
      36656d70
    • Sylvain Henry's avatar
      LLVM: refactor and comment register padding code (#17920) · f96a4b2c
      Sylvain Henry authored
      (cherry picked from commit 9bdc2a056f459b0e05ddbc49d978dfed547ecc13)
      f96a4b2c
    • Sylvain Henry's avatar
      CmmToC: don't add extern decl to parsed Cmm data · e447bd2c
      Sylvain Henry authored
      Previously, if a .cmm file *not in the RTS* contained something like:
      
      ```cmm
      section "rodata" { msg : bits8[] "Test\n"; }
      ```
      
      It would get compiled by CmmToC into:
      
      ```c
      ERW_(msg);
      const char msg[] = "Test\012";
      ```
      
      and fail with:
      
      ```
      /tmp/ghc32129_0/ghc_4.hc:5:12: error:
           error: conflicting types for \u2018msg\u2019
           const char msg[] = "Test\012";
                      ^~~
      
      In file included from /tmp/ghc32129_0/ghc_4.hc:3:0: error:
      
      /tmp/ghc32129_0/ghc_4.hc:4:6: error:
           note: previous declaration of \u2018msg\u2019 was here
           ERW_(msg);
                ^
      
      /builds/hsyl20/ghc/_build/install/lib/ghc-8.11.0.20200605/lib/../lib/x86_64-linux-ghc-8.11.0.20200605/rts-1.0/include/Stg.h:253:46: error:
           note: in definition of macro \u2018ERW_\u2019
           #define ERW_(X)   extern       StgWordArray (X)
                                                        ^
      ```
      
      See the rationale for this on https://gitlab.haskell.org/ghc/ghc/-/wikis/commentary/compiler/backends/ppr-c#prototypes
      
      Now we don't generate these extern declarations (ERW_, etc.) for
      top-level data. It shouldn't change anything for the RTS (the only place
      we use .cmm files) as it is already special cased in
      `GHC.Cmm.CLabel.needsCDecl`. And hand-written Cmm can use explicit
      extern declarations when needed.
      
      Note that it allows `cgrun069` test to pass with CmmToC (cf #15467).
      
      (cherry picked from commit 499f3a2829d7c5a047c2ee87377d71ab2ea8c6d9)
      e447bd2c
    • Sylvain Henry's avatar
      Cmm: introduce SAVE_REGS/RESTORE_REGS · 9ab76ca5
      Sylvain Henry authored
      We don't want to save both Fn and Dn register sets on x86-64 as they are
      aliased to the same arch register (XMMn).
      
      Moreover, when SAVE_STGREGS was used in conjunction with `jump foo [*]`
      which makes a set of Cmm registers alive so that they cover all arch
      registers used to pass parameter, we could have Fn, Dn and XMMn alive at
      the same time. It made the LLVM code generator choke (see #17920).
      
      Now `SAVE_REGS/RESTORE_REGS` and `jump foo [*]` use the same set of
      registers.
      
      (cherry picked from commit 54b595c1)
      9ab76ca5
  11. Jul 22, 2020
  12. Jul 16, 2020
Loading