summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
...
* Implement list `fold` and `foldMap` via mconcatKoz Ross2021-04-106-0/+70
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | - This allows specialized mconcat implementations an opportunity to combine elements efficiently in a single pass. - Inline the default implementation of `mconcat`, this may result in list fusion. - In Monoids with strict `mappend`, implement `mconcat` as a strict left fold: * And (FiniteBits) * Ior (FiniteBits) * Xor (FiniteBits) * Iff (FiniteBits) * Max (Ord) * Min (Ord) * Sum (Num) * Product (Num) * (a -> m) (Monoid m) - Delegate mconcat for WrappedMonoid to the underlying monoid. Resolves: #17123 Per the discussion in !4890, we expect some stat changes: * T17123(normal) run/alloc 403143160.0 4954736.0 -98.8% GOOD This is the expected improvement in `fold` for a long list of `Text` elements. * T13056(optasm) ghc/alloc 381013328.0 447700520.0 +17.5% BAD Here there's an extra simplifier run as a result of the new methods of the Foldable instance for List. It looks benign. The test is a micro benchmark that compiles just the derived foldable instances for a pair of structures, a cost of this magnitude is not expected to extend to more realistic programs. * T9198(normal) ghc/alloc 504661992.0 541334168.0 +7.3% BAD This test regressed from 8.10 and 9.0 back to exponential blowup. This metric also fluctuates, for reasons not yet clear. The issue here is the exponetial blowup, not this MR. Metric Decrease: T17123 Metric Increase: T9198 T13056
* Test #19665 as expect_broken, with commentaryRichard Eisenberg2021-04-104-8/+35
|
* Clarify commentary around the constraint solverRichard Eisenberg2021-04-103-32/+104
| | | | | No changes to code; no changes to theory. Just better explanation.
* Kick out fewer equalities by thinking harderRichard Eisenberg2021-04-102-27/+44
| | | | | | | | | | | | | | | | Close #17672. By scratching our heads quite hard, we realized that we should never kick out Given/Nominal equalities. This commit tweaks the kick-out conditions accordingly. See also Note [K4] which describes what is going on. This does not fix a known misbehavior, but it should be a small improvement in both practice (kicking out is bad, and we now do less of it) and theory (a Given/Nominal should behave just like a filled-in metavariable, which has no notion of kicking out).
* Tweak kick-out condition K2b to deal with LHSsRichard Eisenberg2021-04-105-52/+205
| | | | | | | | | | | | | | Kick out condition K2b really only makes sense for inerts with a type variable on the left. This updates the commentary and the code to skip this check for inerts with type families on the left. Also cleans up some commentary around solver invariants and adds Note [K2b]. Close #19042. test case: typecheck/should_compile/T19042
* Bignum: add BigNat Eq/Ord instances (#19647)Sylvain Henry2021-04-091-0/+16
|
* Update HACKING.mdMatthew Pickering2021-04-091-1/+1
|
* [docs] release notes for !4729 + !3678Douglas Wilson2021-04-091-1/+33
| | | | Also includes small unrelated type fix
* Add perf test for #15304Matthew Pickering2021-04-093-0/+778
| | | | | The test max memory usage improves dramatically with the fixes to memory usage in demand analyser from #15455
* Don't tidy type in pprTypeForUserMatthew Pickering2021-04-092-22/+10
| | | | | | | | | | | | | | | | There used to be some cases were kinds were not generalised properly before being printed in GHCi. This seems to have changed in the past so now it's uncessary to tidy before printing out the test case. ``` > :set -XPolyKinds > data A x y > :k A k1 -> k2 -> A ``` This tidying was causing issues with an attempt to increase sharing by making `mkTyConApp` (see !4762)
* Avoid repeated zonking and tidying of types in `relevant_bindings`Matthew Pickering2021-04-091-41/+81
| | | | | | | | | | | The approach taking in this patch is that the tcl_bndrs in TcLclEnv are zonked and tidied eagerly, so that work can be shared across multiple calls to `relevant_bindings`. To test this patch I tried without the `keepThisHole` filter and the test finished quickly. Fixes #14766
* testsuite/ppc64le: Mark UnboxedTuples test brokenPeter Trommler2021-04-091-0/+1
|
* Fix typoPeter Trommler2021-04-091-1/+1
|
* testsuite: Skip T18623 on powerpc64lePeter Trommler2021-04-091-1/+2
| | | | | | | In commit f3c23939 T18623 is disabled for aarch64. The limit seems to be too low for powerpc64le, too. This could be because tables next to code is not supported and our code generator produces larger code on PowerPC.
* Re-export GHC.Bits from GHC.Prelude with custom shift implementation.Andreas Klebinger2021-04-0938-53/+76
| | | | | | | This allows us to use the unsafe shifts in non-debug builds for performance. For older versions of base we instead export Data.Bits See also #19618
* CoreTidy: handle special cases to preserve more sharing.Sylvain Henry2021-04-091-1/+2
| | | | | Metric Decrease: T16577
* CoreTidy: enhance strictness noteBen Gamari2021-04-091-5/+15
|
* Move Iface.Load errors into Iface.Errors moduleAlfredo Di Napoli2021-04-083-320/+341
| | | | | | | This commit moves the error-related functions in `GHC.Iface.Load` into a brand new module called `GHC.Iface.Errors`. This will avoid boot files and circular dependencies in the context of #18516, in the pretty-printing modules.
* Fix #19649 by using filterInScopeM in rnFamEqnRyan Scott2021-04-084-20/+268
| | | | | | | | | | Previously, associated type family instances would incorrectly claim to implicitly quantify over type variables bound by the instance head in the `HsOuterImplicit`s that `rnFamEqn` returned. This is fixed by using `filterInScopeM` to filter out any type variables that the instance head binds. Fixes #19649.
* T11545 now also passes due to modifications in demand analysisMatthew Pickering2021-04-082-2/+2
| | | | Fixes #11545
* Make sure result of demand analysis is forced promptlyMatthew Pickering2021-04-083-89/+160
| | | | | | | | | | | | | | | This avoids a big spike in memory usage during demand analysis. Part of fixing #15455 ------------------------- Metric Decrease: T18698a T18698b T9233 T9675 T9961 -------------------------
* Some extra strictness in Demand.hsMatthew Pickering2021-04-082-3/+13
| | | | | | It seems that these places were supposed to be forced anyway but the forcing has no effect because the result was immediately placed in a lazy box.
* Make sure mergeWithKey is inlined and applied strictlyMatthew Pickering2021-04-082-6/+15
| | | | | | In the particular case of `DmdEnv`, not applying this function strictly meant 500MB of thunks were accumulated before the values were forced at the end of demand analysis.
* Make updTcRef force the resultMatthew Pickering2021-04-081-2/+1
| | | | | | This can lead to a classic thunk build-up in a TcRef Fixes #19596
* Use DmdEnv rather than VarEnv DmdEnvMatthew Pickering2021-04-081-1/+1
|
* Don't retain reference to whole TcLclEnv in SkolemTVMatthew Pickering2021-04-081-1/+2
|
* Stop retaining SimplEnvs in unforced UnfoldingsMatthew Pickering2021-04-082-4/+8
| | | | Related to #15455
* Change foldl' to inline when partially applied (#19534)James Foster2021-04-073-18/+67
| | | | | And though partially applied foldl' is now again inlined, #4301 has not resurfaced, and appears to be resolved.
* Remove dynamic-by-default (#16782)Sylvain Henry2021-04-0718-72/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Dynamic-by-default was a mechanism to automatically select the -dynamic way for some targets. It was implemented in a convoluted way: it was defined as a flavour option, hence it couldn't be passed as a global settings (which are produced by `configure` before considering flavours), so a build system rule was used to pass -DDYNAMIC_BY_DEFAULT to the C compiler so that deriveConstants could infer it. * Make build system has it disabled for 8 years (951e28c0625ece7e0db6ac9d4a1e61e2737b10de) * It has never been implemented in Hadrian * Last time someone tried to enable it 1 year ago it didn't work (!2436) * Having this as a global constant impedes making GHC multi-target (see !5427) This commit fully removes support for dynamic-by-default. If someone wants to reimplement something like this, it would probably need to move the logic in the compiler. (Doing this would probably need some refactoring of the way the compiler handles DynFlags: DynFlags are used to store and to pass enabled ways to many parts of the compiler. It can be set by command-line flags, GHC API, global settings. In multi-target GHC, we will use DynFlags to load the target platform and its constants: but at this point with the current DynFlags implementation we can't easily update the existing DynFlags with target-specific options such as dynamic-by-default without overriding ways previously set by the user.)
* hadrian: Don't try to build iserv-prof if we don't have profiled librariesMatthew Pickering2021-04-071-6/+19
| | | | Workaround for #19624
* Make specialisation a bit more aggressiveSimon Peyton Jones2021-04-076-17/+88
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The patch commit c43c981705ec33da92a9ce91eb90f2ecf00be9fe Author: Simon Peyton Jones <simonpj@microsoft.com> Date: Fri Oct 23 16:15:51 2009 +0000 Fix Trac #3591: very tricky specialiser bug fixed a nasty specialisation bug /for DFuns/. Eight years later, this patch commit 2b74bd9d8b4c6b20f3e8d9ada12e7db645cc3c19 Author: Simon Peyton Jones <simonpj@microsoft.com> Date: Wed Jun 7 12:03:51 2017 +0100 Stop the specialiser generating loopy code extended it to work for /imported/ DFuns. But in the process we lost the fact that it was needed only for DFuns! As a result we started silently losing useful specialisation for non-DFuns. But there was no regression test to spot the lossage. Then, nearly four years later, Andreas filed #19599, which showed the lossage in high relief. This patch restores the DFun test, and adds Note [Avoiding loops (non-DFuns)] to explain why. This is undoubtedly a very tricky corner of the specialiser, and one where I would love to have a more solid argument, even a paper! But meanwhile I think this fixes the lost specialisations without introducing any new loops. I have two regression tests, T19599 and T19599a, so I hope we'll know if we lose them again in the future. Vanishingly small effect on nofib. A couple of compile-time benchmarks improve T9872a(normal) ghc/alloc 1660559328.0 1643827784.0 -1.0% GOOD T9872c(normal) ghc/alloc 1691359152.0 1672879384.0 -1.1% GOOD Many others wiggled around a bit. Metric Decrease: T9872a T9872c
* hadrian: don't hardcode -fuse-ld=gold in hsc2hs wrapper #19514Adam Sandberg Ericsson2021-04-071-1/+1
|
* Bignum: remove unused extra filesSylvain Henry2021-04-051-2/+0
|
* Bignum: fix invalid hs-boot declaration (#19638)Sylvain Henry2021-04-051-1/+1
|
* Revert "[ci/arm/darwin/testsuite] Forwards ports from GHC-8.10"Ben Gamari2021-04-0513-341/+64
| | | | This reverts commit 0cbdba2768d84a0f6832ae5cf9ea1e98efd739da.
* rts: Fix usage of pthread_setname_npBen Gamari2021-04-052-11/+65
| | | | | | | Previously we used this non-portable function unconditionally, breaking FreeBSD. Fixes #19637.
* hadrian: Fix build-stack-nixBen Gamari2021-04-051-2/+2
| | | | | | | As noted by #19589, `stack` is not stateful and therefore must be passed `--nix` on every invocation. Do so. Fixes #19589.
* hadrian: Refactor hlint targetBen Gamari2021-04-051-26/+36
| | | | | | Not only does this eliminate some code duplication but we also add a maximum core count to HLint's command-line, hopefully avoiding issue #19600.
* Add (expect_broken) test for #11545Matthew Pickering2021-04-052-0/+16
|
* One-Shotify GHC.Utils.Monad.State (#18202)Andreas Klebinger2021-04-051-1/+15
|
* Mark p6 and T3333 as fragileSimon Jakobi2021-04-052-2/+3
| | | | See #17018.
* Fixes Monad's associativity docsŁukasz Gołębiewski2021-04-051-1/+1
| | | | | | It is incorrectly displayed in hackage as: `m1 <*> m2 = m1 >>= (x1 -> m2 >>= (x2 -> return (x1 x2)))` which isn't correct Haskell
* Add regression test for T19474.Andreas Klebinger2021-04-052-0/+19
| | | | | | | In version 0.12.2.0 of vector when used with GHC-9.0 we rebox values from storeable mutable vectors. This should catch such a change in the future.
* fix sub-word literals in GHCiLuite Stegeman2021-04-058-9/+299
|
* Apply 1 suggestion(s) to 1 file(s)Joachim Breitner2021-04-051-1/+1
|
* ./configure: Indicate that GHC=… should be a full pathJoachim Breitner2021-04-051-2/+2
| | | | and not just the name on the binary on the `$PATH`.
* Correct warning for deprecated and unrecognised flagsAlfredo Di Napoli2021-04-0541-62/+55
| | | | | | | | | | Fixes #19616. This commit changes the `GHC.Driver.Errors.handleFlagWarnings` function to rely on the newly introduced `DiagnosticReason`. This allows us to correctly pretty-print the flags which triggered some warnings and in turn remove the cruft around this function (like the extra filtering and the `shouldPrintWarning` function.
* Introduce SevIgnore Severity to suppress warningsAlfredo Di Napoli2021-04-0526-172/+178
| | | | | | | | | | | | | | | | | | | | | | This commit introduces a new `Severity` type constructor called `SevIgnore`, which can be used to classify diagnostic messages which are not meant to be displayed to the user, for example suppressed warnings. This extra constructor allows us to get rid of a bunch of redundant checks when emitting diagnostics, typically in the form of the pattern: ``` when (optM Opt_XXX) $ addDiagnosticTc (WarningWithFlag Opt_XXX) ... ``` Fair warning! Not all checks should be omitted/skipped, as evaluating some data structures used to produce a diagnostic might still be expensive (e.g. zonking, etc). Therefore, a case-by-case analysis must be conducted when deciding if a check can be removed or not. Last but not least, we remove the unnecessary `CmdLine.WarnReason` type, which is now redundant with `DiagnosticReason`.
* Add type signature for TargetContents.goHarry Garrood harry@garrood.me2021-04-051-1/+10
| | | | | These changes made it slightly easier for me to work out what was going on in this test. I've also fixed a typo in the comments.
* Add special case to stripStgTicksTop for []Matthew Pickering2021-04-051-0/+2
| | | | | In the common case where the list of ticks is empty, building a thunk just applies 'reverse' to '[]' which is quite wasteful.