 28 Apr, 2017 10 commits


Ryan Scott authored
It turns out we were using two different sets of type variables when reifying data family instances in Template Haskell. We were using the tyvars quantifying over the instance itself for the LHS, but using the tyvars quantifying over the data family instance constructor for the RHS. This commit uses the instance tyvars for both the LHS and the RHS, fixing #13618. Test Plan: make test TEST=T13618 Reviewers: goldfire, austin, bgamari Reviewed By: goldfire, bgamari Subscribers: rwbarton, thomie GHC Trac Issues: #13618 Differential Revision: https://phabricator.haskell.org/D3505

Ryan Scott authored
Commit 2f9f1f86 (#13487) fixes #12104 as well. This adds a regression test for the program reported in #12104 to keep it fixed. Test Plan: make test TEST=T12104 Reviewers: bgamari, austin Reviewed By: bgamari Subscribers: rwbarton, thomie GHC Trac Issues: #12104 Differential Revision: https://phabricator.haskell.org/D3495

Ben Gamari authored
Reviewers: austin, dfeuer Reviewed By: dfeuer Subscribers: Phyx, rwbarton, thomie Differential Revision: https://phabricator.haskell.org/D3509

Simon Peyton Jones authored
If we see f (g x), and f is strict, we want to be a bit more eager to inline g, because it may well expose an eval (on x perhaps) that can be eliminated or shared. I saw this in nofib boyer2, function RewriteFuns.onewayunify1. It showed up as a consequence of the preceding patch that makes the simplifier do less work (Trac #13379). We had f d (g x) where f was a classop. Previously we simplified both d and (g x) with a RuleArgCtxt (making g a bit more eager to inline). But now we simplify only d that way, then fire the rule, and only then simplify (g x). Firing the rule produces a strict funciion, so we want to make a strict function encourage inlining a bit.

Simon Peyton Jones authored
This patch nails a Bad Bug exposed in Trac #13379. Roughly, a deeplynested application like f (f (f ....) ) ) could make the simplifier go exponential  without producing an exponentialsized result! The reason was that we  simplified a (big) function argument  then decided to inline the function  then preInilneUnconditionally the argument  and then resimplified the big argument And if the "big argument" itself had a similar structure things could get very bad. Once I'd understood, it was easy to fix: * See Note Note [Avoiding exponential behaviour] for an overview * The key change is that Simplify.simplLam now as a case for (isSimplified dup). This is what removes the perf bug. * But I also made simplCast more parsimonious about simplifying, avoiding doing so when the coercion is Refl * And similarly I now try to avoid simplifying arguments where possible before applying rules. See Note [Trying rewrite rules] The latter two points tackle common cases, and in those cases make the simplifier take fewer iterations.

Simon Peyton Jones authored
CoreArity.etaExpand tried to deal with etaexpanding expressions with join points. For example let j x = e in \y. b But it is hard to etaexpand this in the "nocrap" way described in Note [No crap in etaexpanded code], becuase it would mean pushing the "apply to y" into the join RHS, and changing its type. And the join might be recursive, and it might have an unfolding. Moreover in elaborate cases like this I don't think we need the nocrap thing. So for now I'm simplifying the code by generating \z. (let j x = e in \y. b) z Let's see if that gives rise to any problems. See Note [Eta expansion for join points]

Simon Peyton Jones authored

Simon Peyton Jones authored

Simon Peyton Jones authored

Simon Peyton Jones authored

 27 Apr, 2017 1 commit


Ben Gamari authored
Also bumps Cabal submodule due to version bound bump.

 26 Apr, 2017 2 commits


Edward Z. Yang authored
Test Plan: validate Reviewers: bgamari, austin Reviewed By: bgamari Subscribers: rwbarton, thomie Differential Revision: https://phabricator.haskell.org/D3501

Ben Gamari authored

 25 Apr, 2017 9 commits


Adam Sandberg Eriksson authored
Namely `Num`, `Functor`, `Applicative`, `Monad`, `Semigroup` and `Monoid` for `Data.Ord.Down` (#13097). Reviewers: austin, hvr, bgamari, RyanGlScott Reviewed By: bgamari, RyanGlScott Subscribers: RyanGlScott, rwbarton, thomie GHC Trac Issues: #13097 Differential Revision: https://phabricator.haskell.org/D3500

Ben Gamari authored
Reviewers: simonmar, austin Reviewed By: simonmar Subscribers: RyanGlScott, rwbarton, thomie GHC Trac Issues: #10640, #13611 Differential Revision: https://phabricator.haskell.org/D3498

Ryan Scott authored
Previously, we were unconditionally prettyprinting all type variable binders when prettyprinting closed type families (e.g., in the output of `:info` in GHCi). This threw me for a loop, so let's guard this behind the `fprintexplicitforalls` flag. Test Plan: make test TEST=T13420 Reviewers: goldfire, austin, bgamari Reviewed By: bgamari Subscribers: rwbarton, thomie GHC Trac Issues: #13420 Differential Revision: https://phabricator.haskell.org/D3497

Tamar Christina authored
This imports @bgamari's sync script into the mirror script and adds a backup url for packages. The idea is that the URLs won't need updating when updating the tarballs from now on. It will first try haskell.org, failing that it'll try repo.msys2.org Test Plan: try new command `mk/getwin32tarballs.sh sync` Reviewers: austin, bgamari Reviewed By: bgamari Subscribers: rwbarton, thomie, bgamari Differential Revision: https://phabricator.haskell.org/D3488

Peter Trommler authored
Provide PowerPC optimised implementations of callish prim ops. MO_?_QuotRem The generic implementation of quotient remainder prim ops uses a division and a remainder operation. There is no remainder on PowerPC and so we need to implement remainder "by hand" which results in a duplication of the divide operation when using the generic code. Avoid this duplication by implementing the prim op in the native code generator. MO_U_Mul2 Use PowerPC's instructions for long multiplication. Addition and subtraction Use PowerPC add/subtract with carry/overflow instructions MO_Clz and MO_Ctz Use PowerPC's CNTLZ instruction and implement count trailing zeros using count leading zeros MO_QuotRem2 Implement an algorithm given by Henry Warren in "Hacker's Delight" using PowerPC divide instruction. TODO: Use long division instructions when available (POWER7 and later). Test Plan: validate on AIX and 32bit Linux Reviewers: simonmar, erikd, hvr, austin, bgamari Reviewed By: erikd, hvr, bgamari Subscribers: trofi, kgardas, thomie Differential Revision: https://phabricator.haskell.org/D2973

Ben Gamari authored
This replaces the with* configure flags with the usual autoconf environment variables, as suggested by #13583. Test Plan: Configure on various platforms Reviewers: hvr, trofi, thomie, austin Reviewed By: trofi Subscribers: rwbarton, erikd GHC Trac Issues: #13583 Differential Revision: https://phabricator.haskell.org/D3499

Ben Gamari authored
This commit didn't consider the fact that binary distributions on Windows must have relative toolchain paths. This caused #13560. This reverts commit 48385cb2 (except for a helpful comment).

Chris Martin authored
(cherry picked from commit 960589e89da3dbf60e88042d7e064ad4a98fb2ff)

Simon Marlow authored
Summary: setProgramDynFlags invalidates the whole module graph, forcing everything to be resummarised (including preprocessing) on every :reload. Looks like this was a bad regression in 8.0, but we didn't notice because there was no test for it. Now there is! Test Plan: * validate * new unit test Reviewers: bgamari, triple, austin, niteria, erikd, jme Subscribers: rwbarton, thomie Differential Revision: https://phabricator.haskell.org/D3398

 24 Apr, 2017 7 commits


Joachim Breitner authored
We do not need to keep an enrivonment around to implement letrec, as long as we only do callbyname. Instead, evaluate letrec by substituting for all the variables with their RHS wrapped in the letrec binding. Since nothing adds to the enrivonment any more, there is no need for a S_Var rule. Differential Revision: https://phabricator.haskell.org/D3466

Herbert Valerio Riedel authored
This is a followup to df679403 which missed `INSTALL_BINS`

Joachim Breitner authored
this program should be rejected, but is not (and segfaults).

Ben Gamari authored
Previously rmtree's error callback would throw an exception, breaking out of the retry loop. Test Plan: Validate on Windows Reviewers: Phyx, austin Reviewed By: Phyx Subscribers: rwbarton, thomie Differential Revision: https://phabricator.haskell.org/D3492

Sergei Trofimovich authored
Consider oneline module module B (v) where v = "hello" in fviaC mode it generates code like static char gibberish_str[] = "hello"; It resides in data section (precious resource on ia64!). The patch switches genrator to emit: static const char gibberish_str[] = "hello"; Other types if symbols that gained 'const' qualifier are:  info tables (from haskell and CMM)  static reference tables (from haskell and CMM) Cleanups along the way:  fixed info tables defined in .cmm to reside in .rodata  split out closure declaration into 'IC_' / 'EC_'  added label declaration (based on label type) right before each label definition (based on section type) so that C compiler could check if declaration and definition matches at definition site. Signedoffby: Sergei Trofimovich <slyfox@gentoo.org> Test Plan: ran testsuite on unregisterised x86_64 compiler Reviewers: simonmar, ezyang, austin, bgamari, erikd Reviewed By: bgamari, erikd Subscribers: rwbarton, thomie GHC Trac Issues: #8996 Differential Revision: https://phabricator.haskell.org/D3481

Moritz Angermann authored
This is a derivation of a patch from @jophish. This is necessary due to `haskeline`'s `terminfo` flag being marked as `Manual` as of 43d7fa106027fcd4ec7f443923a8dd5b8c169f9c. Reviewers: jophish, bgamari, austin Reviewed By: bgamari Subscribers: rwbarton, thomie, jophish Differential Revision: https://phabricator.haskell.org/D3493

Ryan Scott authored
Summary: Commit b207b536 (#11714) happened to fix #13603 as well. Let's add a regression test so that it stays fixed. Test Plan: make test TEST=T13603 Reviewers: bgamari, austin, simonpj Reviewed By: bgamari, simonpj Subscribers: simonpj, rwbarton, thomie GHC Trac Issues: #13603 Differential Revision: https://phabricator.haskell.org/D3489

 23 Apr, 2017 11 commits


Ben Gamari authored

Alan Zimmerman authored

Ben Gamari authored

Ben Gamari authored

Ben Gamari authored
Test Plan: Validate Reviewers: austin Subscribers: rwbarton, thomie GHC Trac Issues: #13587 Differential Revision: https://phabricator.haskell.org/D3474

Ben Gamari authored
Reviewers: austin Subscribers: rwbarton, thomie GHC Trac Issues: #13591 Differential Revision: https://phabricator.haskell.org/D3470

rwbarton authored
By default GhcThreaded is set by ``` GhcThreaded = $(if $(findstring thr,$(GhcRTSWays)),YES,NO) ``` so it seems incorrect to try to build iserv with threaded when GhcThreaded is not set. This came up when I was building GHC with some strange combination of flavours (debugged and profiled but not threaded). Test Plan: harbormaster Reviewers: simonmar, austin, bgamari Reviewed By: bgamari Subscribers: thomie, snowleopard Differential Revision: https://phabricator.haskell.org/D3429

Ryan Scott authored
The conclusion of #13555 was that a program which began to fail to typecheck (starting in GHC 8.2) was never correct to begin with. Let's document why this is the case with respect to `MonoLocalBinds`' interaction with kind generalization. Also adds the reported program as a `compile_fail` testcase. Test Plan: make test TEST=T13555 # Also, read the docs Reviewers: goldfire, simonpj, austin, bgamari Reviewed By: goldfire, simonpj, bgamari Subscribers: rwbarton, thomie GHC Trac Issues: #13555 Differential Revision: https://phabricator.haskell.org/D3472

Moritz Angermann authored
Further cleanup of the linker, we'll add elf_compat.h for a more complete set of relocations. Also Util.h has been added as suggested in the code already. Depends on D3444, D3445 Reviewers: bgamari, austin, erikd, simonmar Reviewed By: simonmar Subscribers: rwbarton, thomie Differential Revision: https://phabricator.haskell.org/D3446

Moritz Angermann authored
This diff introduces ElfTypes similar to provide the linker code with a richer data structure, similar to the approach taken for macho already. Reviewers: bgamari, austin, erikd, simonmar Reviewed By: simonmar Subscribers: rwbarton, thomie Differential Revision: https://phabricator.haskell.org/D3445

Ben Gamari authored
Reviewers: austin, erikd, simonmar Reviewed By: erikd Subscribers: rwbarton, thomie Differential Revision: https://phabricator.haskell.org/D3486
