[Git][ghc/ghc][ghc-8.10] 15 commits: rts: Add --copying-gc flag to reverse effect of --nonmoving-gc
Ben Gamari
gitlab at gitlab.haskell.org
Mon Jul 27 19:16:08 UTC 2020
Ben Gamari pushed to branch ghc-8.10 at Glasgow Haskell Compiler / GHC
Commits:
96a16275 by Ben Gamari at 2020-07-22T19:56:38-04:00
rts: Add --copying-gc flag to reverse effect of --nonmoving-gc
Fixes #18281.
(cherry picked from commit 750a1595ef31cdc335f3bab045b2f19a9c43ff93)
- - - - -
29d24d10 by Moritz Angermann at 2020-07-22T19:59:40-04:00
Disable DLL loading if without system linker
Some platforms (musl, aarch64) do not have a working dynamic linker
implemented in the libc, even though we might see dlopen. It will
ultimately just return that this is not supported. Hence we'll add
a flag to the compiler to flat our disable loading dlls. This is
needed as we will otherwise try to load the shared library even
if this will subsequently fail. At that point we have given up
looking for static options though.
(cherry picked from commit aef523ea1254e8bb9e4143ad8f5994ca89ea9d2d)
- - - - -
9ab76ca5 by Sylvain Henry at 2020-07-22T20:47:38-04:00
Cmm: introduce SAVE_REGS/RESTORE_REGS
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 54b595c1b91ad9e686b5baf7640177becb372336)
- - - - -
e447bd2c by Sylvain Henry at 2020-07-22T22:57:09-04:00
CmmToC: don't add extern decl to parsed Cmm data
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)
- - - - -
f96a4b2c by Sylvain Henry at 2020-07-22T22:57:09-04:00
LLVM: refactor and comment register padding code (#17920)
(cherry picked from commit 9bdc2a056f459b0e05ddbc49d978dfed547ecc13)
- - - - -
36656d70 by Sylvain Henry at 2020-07-22T22:57:10-04:00
Add tests for #17920
Metric Decrease:
T12150
T12234
(cherry picked from commit aa54d1a2b2d2c89107cfa77d8c14a50d6ee9c140)
- - - - -
b7c216cb by Ben Gamari at 2020-07-22T22:57:10-04:00
Fix GhcThreaded setting
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.
- - - - -
55fac768 by Travis Whitaker at 2020-07-22T22:57:10-04:00
Build a threaded stage 1 if the bootstrapping GHC supports it.
(cherry picked from commit 67738db10010fd28a8e997b5c8f83ea591b88a0e)
(cherry picked from commit a228d0a83db06fbe81b1c74fe3b1aea3133cee50)
- - - - -
83bcf37d by Joshua Price at 2020-07-26T15:05:52-04:00
Make `identifier` parse unparenthesized `->` (#18060)
(cherry picked from commit d6203f24cf421749616a247c047a9b44192f963a)
- - - - -
50f25994 by Simon Peyton Jones at 2020-07-26T15:05:52-04:00
Wrap an implication around class-sig kind errors
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 3f431587c2db712136a3b5a353758ca63e1a5fd8)
- - - - -
a063768e by Simon Peyton Jones at 2020-07-26T15:05:52-04:00
Refactoring in TcSMonad
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 9d87ced6832e75fce1e01b67bc6b7d9d1cf31efb)
- - - - -
05be81e8 by Simon Peyton Jones at 2020-07-26T15:05:52-04:00
Major improvements to the specialiser
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 2d0cf6252957b8980d89481ecd0b79891da4b14b
Author: Sandy Maguire <sandy at 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 7052d7c7ce3418db9e66ad6ff31e80b2a2c724bb)
- - - - -
a10c6ddf by Simon Peyton Jones at 2020-07-26T15:05:52-04:00
Fix specialisation for DFuns
When specialising a DFun we must take care to saturate the
unfolding. See Note [Specialising DFuns] in Specialise.
Fixes #18120
(cherry picked from commit 88e3c8150d2b2d96c3ebc0b2942c9af44071c511)
- - - - -
5015d3ac by Ben Gamari at 2020-07-26T15:05:52-04:00
testsuite: Accept wibbles in specialiser test output
- - - - -
6471cc6a by Moritz Angermann at 2020-07-26T15:05:52-04:00
[linker] Fix out of range relocations.
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 aedfeb0b2b22172a0dfca0fe0c020ac80539d6ae)
- - - - -
30 changed files:
- compiler/GHC/StgToCmm/Foreign.hs
- compiler/GHC/StgToCmm/Prof.hs
- compiler/GHC/StgToCmm/Ticky.hs
- compiler/GHC/StgToCmm/Utils.hs
- compiler/cmm/CLabel.hs
- compiler/cmm/CmmCallConv.hs
- compiler/cmm/CmmParse.y
- compiler/coreSyn/CoreSubst.hs
- compiler/coreSyn/CoreUnfold.hs
- compiler/deSugar/DsBinds.hs
- compiler/ghc.cabal.in
- compiler/ghc.mk
- compiler/ghci/Linker.hs
- compiler/llvmGen/LlvmCodeGen/Base.hs
- compiler/llvmGen/LlvmCodeGen/CodeGen.hs
- compiler/parser/Parser.y
- compiler/specialise/Specialise.hs
- compiler/typecheck/TcCanonical.hs
- compiler/typecheck/TcClassDcl.hs
- compiler/typecheck/TcErrors.hs
- compiler/typecheck/TcEvidence.hs
- compiler/typecheck/TcSMonad.hs
- compiler/typecheck/TcSigs.hs
- compiler/typecheck/TcTyClsDecls.hs
- compiler/typecheck/TcUnify.hs
- configure.ac
- docs/users_guide/runtime_control.rst
- ghc/ghc.mk
- hadrian/cfg/system.config.in
- hadrian/doc/user-settings.md
The diff was not included because it is too large.
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/cc8800f9f482460ceb2d450137766e0350551740...6471cc6aff80d5deebbdb1bf7b677b31ed2af3d5
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/compare/cc8800f9f482460ceb2d450137766e0350551740...6471cc6aff80d5deebbdb1bf7b677b31ed2af3d5
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20200727/5471c714/attachment-0001.html>
More information about the ghc-commits
mailing list