ghc.git
2 years agoSet $1_$2_SplitSections in distdir-opts.mk not build-package.mk wip/rwbarton-split-sections
Reid Barton [Tue, 14 Feb 2017 16:30:08 +0000 (11:30 -0500)] 
Set $1_$2_SplitSections in distdir-opts.mk not build-package.mk

After commit a50082c11 we use -ffunction-sections -fdata-sections
for all C compilations, when $1_$2_SplitSections is set. But that
variable was set in build-package.mk which is not run for the RTS.
As a result the RTS was not being split, leading to larger binaries.

This commit fixes RTS splitting by moving the definition of
$1_$2_SplitSections to distdir-opts.mk, which is run for the RTS
(and also from build-package.mk).

2 years agoTypos in notes and comments [ci skip]
Gabor Greif [Mon, 13 Feb 2017 12:37:59 +0000 (13:37 +0100)] 
Typos in notes and comments [ci skip]

2 years agoDisable PVP warnings temporarily.
Edward Z. Yang [Sat, 11 Feb 2017 07:15:30 +0000 (23:15 -0800)] 
Disable PVP warnings temporarily.

While the intent is good, they are actually too aggressive:
if a module reexports an identifier from a signature, we will
warn (even though we should not!)  We'll have to implement
this differently.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoSlightly reword not-exported message.
Edward Z. Yang [Fri, 10 Feb 2017 08:54:55 +0000 (00:54 -0800)] 
Slightly reword not-exported message.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoRemove obsolete Backpack manual.
Edward Z. Yang [Fri, 10 Feb 2017 08:50:22 +0000 (00:50 -0800)] 
Remove obsolete Backpack manual.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoSetup more error context for Backpack operations.
Edward Z. Yang [Tue, 7 Feb 2017 23:02:40 +0000 (15:02 -0800)] 
Setup more error context for Backpack operations.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: bgamari, simonpj, austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3101

2 years agoAdd index entry for signature files / Backpack.
Edward Z. Yang [Fri, 10 Feb 2017 08:48:42 +0000 (00:48 -0800)] 
Add index entry for signature files / Backpack.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
2 years agoBump hoopl submodule to 3.10.2.2
Ben Gamari [Sun, 12 Feb 2017 01:20:16 +0000 (20:20 -0500)] 
Bump hoopl submodule to 3.10.2.2

2 years agoBinary: Correct endian issue when cross-compiling
alexbiehl [Sun, 12 Feb 2017 00:25:27 +0000 (19:25 -0500)] 
Binary: Correct endian issue when cross-compiling

Using `WORDS_BIGENDIAN` wasn't such a great idea after all!
When cross compiling host and target endianess may differ and
`WORDS_BIGENDIAN` refers to host endianess.

Reviewers: austin, bgamari, trofi

Reviewed By: bgamari, trofi

Subscribers: rwbarton, trofi, thomie

Differential Revision: https://phabricator.haskell.org/D3122

2 years agoApply SplitSections to all C compilations
Simon Brenner [Sun, 12 Feb 2017 00:25:16 +0000 (19:25 -0500)] 
Apply SplitSections to all C compilations

Previously this was added only to the RTS's C files (those are the bulk
of it though), but there are C bits in ghc-prim, integer-gmp and base
too.

Followup for #8405, allows the large table of character properties in
base to be stripped when not used.

Test Plan: validate

Reviewers: austin, bgamari, simonmar

Reviewed By: bgamari

Subscribers: thomie, snowleopard

Differential Revision: https://phabricator.haskell.org/D3121

2 years agobufWrite: Save extra syscall when data fills handle buffer completely.
Niklas Hambüchen [Sun, 12 Feb 2017 00:24:49 +0000 (19:24 -0500)] 
bufWrite: Save extra syscall when data fills handle buffer completely.

The bug is that the check `if (size - w > count)` should be
`if (size - w >= count)` instead (`>=` instead of `>`),
because we can do the write all fine if it fits exactly.
This allows us to do 1 instead of 2 write syscalls the case it fits.

An example of when this matters is when an application writes output
in chunks that are a fraction of the handle buffer size.

For example, assume the buffer size is 8 KB, and the application writes
four 2 KB chunks.
Until now, this would result in 3 copies to the handle buffer, but
the 4th one would not be allowed in by `size - w > count`
(because `size - w == count` is the case), so we'd end up with a write
syscall of only 6 KB data instead of 8 KB, thus creating more syscalls
overall.

Implementing this fix (switching to `size - w >= count`), we also have
to flush the buffer if we fill it completely.

If we made only the changes described so far, that would have the
unintended side effect that writes of the size equal to the handle
buffer size (`count == size`) suddenly also go to the handle buffer
first: The data would first be copied to the handle buffer, and then
immediately get flushed to the underlying FD.  We don't want that extra
`memcpy`, because it'd be unnecessary: The point of handle buffering is
to coalesce smaller writes, and there are no smaller writes in this
case.  For example, if you specify 8 KB buffers (which menas you want
your data to be written out in 8 KB blocks), and you get data that's
already 8 KB in size, you can write that out as an 8 KB straight away,
zero-copy fashion.  For this reason, adding to the handle buffer now got
an additional condition `count < size`.  That way, writes equal to the
buffer size go straight to the FD, as they did before this commit.

Reviewers: simonmar, austin, hvr, bgamari

Reviewed By: simonmar

Subscribers: mpickering, thomie

Differential Revision: https://phabricator.haskell.org/D3117

2 years agoFix: hPutBuf issues unnecessary empty write syscalls for large writes (#13246)
Niklas Hambüchen [Sun, 12 Feb 2017 00:24:30 +0000 (19:24 -0500)] 
Fix: hPutBuf issues unnecessary empty write syscalls for large writes (#13246)

Until now, any `hPutBuf` that wrote `>= the handle buffer size` would
trigger an unnecessary `write("")` system call before the actual write
system call.

This is fixed by making sure that we never flush an empty handle buffer:
Only flush `when (w > 0)`.

Reviewers: simonmar, austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3119

2 years agoFix: Default FD buffer size is not a power of 2 (#13245)
Niklas Hambüchen [Sun, 12 Feb 2017 00:23:37 +0000 (19:23 -0500)] 
Fix: Default FD buffer size is not a power of 2 (#13245)

Reviewers: simonmar, austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3115

2 years agoAvoid repeated list elem checks
David Feuer [Sun, 12 Feb 2017 00:23:20 +0000 (19:23 -0500)] 
Avoid repeated list elem checks

Convert a list to a set before testing membership multiple times.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3111

2 years agoBinary: Only allocate un-interned FastStrings
alexbiehl [Sun, 12 Feb 2017 00:22:26 +0000 (19:22 -0500)] 
Binary: Only allocate un-interned FastStrings

Test Plan: Validate

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3109

2 years agozonkCt tries to maintain the canonical form of a Ct.
Christiaan Baaij [Sun, 12 Feb 2017 00:21:52 +0000 (19:21 -0500)] 
zonkCt tries to maintain the canonical form of a Ct.

For example,
 - a CDictCan should stay a CDictCan;
 - a CTyEqCan should stay a CTyEqCan (if the LHS stays as a variable.).
 - a CHoleCan should stay a CHoleCan

Why?  For CDicteqCan see Trac #11525.

Test Plan: Validate

Reviewers: austin, adamgundry, simonpj, goldfire, bgamari

Reviewed By: simonpj, bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3105

2 years agorts/Profiling: Factor out report generation
Ben Gamari [Sun, 12 Feb 2017 00:21:22 +0000 (19:21 -0500)] 
rts/Profiling: Factor out report generation

Here we move the actual report generation logic to
`rts/ProfilerReport.c`. This break is actually quite clean,

    void writeCCSReport( FILE *prof_file, CostCentreStack const *ccs,
                         ProfilerTotals totals );

This is more profiler refactoring in preparation for machine-readable
output.

Test Plan: Validate

Reviewers: austin, erikd, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3097

2 years agorts/Profiling: Kill a few globals and add consts
Ben Gamari [Sun, 12 Feb 2017 00:20:56 +0000 (19:20 -0500)] 
rts/Profiling: Kill a few globals and add consts

Previously it was quite difficult to follow the dataflow through this
file due to global mutation and rather non-descriptive types.

This is a cleanup in preparation for factoring out the report-generating
logic, which is itself in preparation for somedayteaching the profiler
to produce more machine-readable reports (JSON perhaps?).

Test Plan: Validate

Reviewers: austin, erikd, simonmar

Reviewed By: simonmar

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3096

2 years agoFix #13214 by correctly setting up dep_orphs for signatures.
Edward Z. Yang [Sun, 12 Feb 2017 00:20:36 +0000 (19:20 -0500)] 
Fix #13214 by correctly setting up dep_orphs for signatures.

Prior to this, I hadn't thought about orphan handling at all.
This commit implements the semantics that if a signature
(transitively) imports an orphan instance, that instance
is considered in scope no matter what the implementing module
is.  (As it turns out, this is the semantics that falls out
when orphans are recorded transitively.)

This patch fixes a few bugs:

1. Put semantic modules in dep_orphs rather than identity
   modules.
2. Don't put the implementing module in dep_orphs when
   merging signatures (this is a silly bug that happened
   because we were reusing calculateAvails, which is
   designed for imports. It mostly works for signature
   merging, except this case.)
3. When renaming a signature, blast in the orphans of the
   implementing module inside Dependencies.

Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3095

2 years agoImprove the Occurrence Analyzer’s handling of one-shot functions
Joachim Breitner [Sun, 12 Feb 2017 00:20:24 +0000 (19:20 -0500)] 
Improve the Occurrence Analyzer’s handling of one-shot functions

When determining whether an expression is used saturatedly, count the
number of value arguments that the occurrence analyser sees, and add
the number of one-shot arguments that we know (from the strictness
analyser) are passed from the context.

perf results suggest no noticable change in allocations, reduction of
code sizes, and performance regression possibliy due to loss of join
points.

Test Plan: perf.haskell.org

Reviewers: simonpj, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3089

2 years agoMark orphan instances and rules in --show-iface output
Reid Barton [Sun, 12 Feb 2017 00:20:08 +0000 (19:20 -0500)] 
Mark orphan instances and rules in --show-iface output

Test Plan: new test Orphans

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3086

2 years agoDwarf.Types: Use DW_CFA_same_value encoding when possible
Ben Gamari [Sun, 12 Feb 2017 00:19:42 +0000 (19:19 -0500)] 
Dwarf.Types: Use DW_CFA_same_value encoding when possible

This is a bit smaller than the alternative, DW_CFA_val_expression. Also
a bit of refactoring.

Test Plan: Validate

Reviewers: scpmw, simonmar, austin

Reviewed By: simonmar

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2745

2 years agoIcmmMachOpFoldM: clarify panic message
Sergei Trofimovich [Sat, 11 Feb 2017 13:05:24 +0000 (13:05 +0000)] 
IcmmMachOpFoldM: clarify panic message

When adding a new primop cinimod noticed
uninformative ghc panic:
    cmmMachOpFoldM: unknown unary op

This change tweaks panic to contain the op:
    cmmMachOpFoldM: unknown unary op: MO_F_Neg W64

Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
2 years agoRefactor DeriveAnyClass's instance context inference
Ryan Scott [Fri, 10 Feb 2017 21:12:46 +0000 (16:12 -0500)] 
Refactor DeriveAnyClass's instance context inference

Summary:
Currently, `DeriveAnyClass` has two glaring flaws:

* It only works on classes whose argument is of kind `*` or `* -> *` (#9821).
* The way it infers constraints makes no sense. It basically co-opts the
  algorithms used to infer contexts for `Eq` (for `*`-kinded arguments) or
  `Functor` (for `(* -> *)`-kinded arguments). This tends to produce overly
  constrained instances, which in extreme cases can lead to legitimate things
  failing to typecheck (#12594). Or even worse, it can trigger GHC panics
  (#12144 and #12423).

This completely reworks the way `DeriveAnyClass` infers constraints to fix
these two issues. It now uses the type signatures of the derived class's
methods to infer constraints (and to simplify them). A high-level description
of how this works is included in the GHC users' guide, and more technical notes
on what is going on can be found as comments (and a Note) in `TcDerivInfer`.

Fixes #9821, #12144, #12423, #12594.

Test Plan: ./validate

Reviewers: dfeuer, goldfire, simonpj, austin, bgamari

Subscribers: dfeuer, thomie

Differential Revision: https://phabricator.haskell.org/D2961

2 years agoRelax test TH_addCStub2 so it succeeds on travis.
Facundo Domínguez [Fri, 10 Feb 2017 02:20:17 +0000 (23:20 -0300)] 
Relax test TH_addCStub2 so it succeeds on travis.

Test Plan: ./validate

Reviewers: bgamari, nomeata, austin, mpickering

Reviewed By: mpickering

Subscribers: mpickering, rwbarton, mboes, thomie

Differential Revision: https://phabricator.haskell.org/D3124

2 years agoPrevent Template Haskell splices from throwing a spurious TypeInType error
Ryan Scott [Fri, 10 Feb 2017 15:31:10 +0000 (10:31 -0500)] 
Prevent Template Haskell splices from throwing a spurious TypeInType error

Summary:
There was a rather annoying corner case where splicing poly-kinded
Template Haskell declarations could trigger an error muttering about
`TypeInType` not being enabled, whereas the equivalent non-TH code would
compile without issue. This was causing by overzealous validity check in the
renamer, wherein failed to distinguish between two different `Exact` names
with the same `OccName`. As a result, it mistakenly believed some type
variables were being used as both type and kind variables simultaneously! Ack.

This avoids the issue by simply disabling the aforementioned validity check
for Exact names. Fixes #12503.

Test Plan: ./validate

Reviewers: austin, bgamari, goldfire

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3022

2 years agoChange rewritableTyVarsOfType to anyRewritableTyVar
Simon Peyton Jones [Fri, 10 Feb 2017 13:54:48 +0000 (13:54 +0000)] 
Change rewritableTyVarsOfType to anyRewritableTyVar

This fixes the regression in FrozenErrorTests, eliminates the
awkward "crash on forall" in rewritableTyVars, and makes it more
efficient too.

2 years agoSpelling in comments [ci skip]
Gabor Greif [Fri, 10 Feb 2017 08:12:12 +0000 (09:12 +0100)] 
Spelling in comments [ci skip]

2 years agoTH-spliced class instances are pretty-printed incorrectly post-#3384
Alan Zimmerman [Sun, 29 Jan 2017 20:35:41 +0000 (22:35 +0200)] 
TH-spliced class instances are pretty-printed incorrectly post-#3384

Summary:
The HsSyn prettyprinter tests patch 499e43824bda967546ebf95ee33ec1f84a114a7c
broke the pretty-printing of Template Haskell-spliced class instances.

Test Plan: ./validate

Reviewers: RyanGlScott, austin, goldfire, bgamari

Reviewed By: RyanGlScott, bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3043

2 years agoGuard rewritableTyVarsOfType
Simon Peyton Jones [Thu, 9 Feb 2017 12:12:21 +0000 (12:12 +0000)] 
Guard rewritableTyVarsOfType

We only want to use rewriteableTyVarsOfType on CDictCan,
CFunEqCan (and maybe CIrredCan).  But not CTyEqCan.

But we were -- for insolubles.  So I narrowed the scope of
the insuluble kick-out.

2 years agotestsuite: Add testcase for #13248
Ben Gamari [Thu, 9 Feb 2017 04:31:04 +0000 (23:31 -0500)] 
testsuite: Add testcase for #13248

2 years agoBump bytestring submodule
Ben Gamari [Wed, 8 Feb 2017 22:41:51 +0000 (17:41 -0500)] 
Bump bytestring submodule

2 years agoLibrary docs: Document the order for sort and sortOn.
Alexander Kjeldaas [Wed, 8 Feb 2017 23:26:02 +0000 (00:26 +0100)] 
Library docs: Document the order for sort and sortOn.

This closes GH-22.

2 years agoBump array submodule
Ben Gamari [Thu, 9 Feb 2017 02:47:34 +0000 (21:47 -0500)] 
Bump array submodule

Previously test output was left in inconsistent state.

2 years agoTweaks and typos in manual, note refs, comments
Gabor Greif [Wed, 8 Feb 2017 13:14:36 +0000 (14:14 +0100)] 
Tweaks and typos in manual, note refs, comments

2 years agoImplement addCStub in template-haskell.
Facundo Domínguez [Tue, 7 Feb 2017 21:55:34 +0000 (18:55 -0300)] 
Implement addCStub in template-haskell.

Summary:
addCStub allows injecting C code in the current module to be included
in the final object file.

Test Plan: ./validate

Reviewers: simonpj, goldfire, austin, bgamari

Reviewed By: bgamari

Subscribers: bitonic, duncan, mboes, thomie

Differential Revision: https://phabricator.haskell.org/D3106

2 years agoBump array submodule
Ben Gamari [Wed, 8 Feb 2017 23:59:55 +0000 (18:59 -0500)] 
Bump array submodule

Fixes https://github.com/ekmett/ad/issues/62.

2 years agoFix documentation for setByteArray#
Ben Gamari [Wed, 8 Feb 2017 23:55:32 +0000 (18:55 -0500)] 
Fix documentation for setByteArray#

The documentation was previously unusably incomplete.

2 years agousers-guide: Document defaults for remaining optimization flags
Ben Gamari [Wed, 8 Feb 2017 20:49:46 +0000 (15:49 -0500)] 
users-guide: Document defaults for remaining optimization flags

2 years agoAdd dump flags for the renamed and typechecked hsSyn ASTs
Alan Zimmerman [Wed, 8 Feb 2017 11:20:02 +0000 (13:20 +0200)] 
Add dump flags for the renamed and typechecked hsSyn ASTs

Summary:
D2958 brought in the "dump-parsed-ast" functionality.

Extend it to include "dump-rn-ast" and "dump-tc-ast"

Test Plan: ./validate

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3107

2 years agoBack-pedal the fix for Trac #8155
Simon Peyton Jones [Wed, 8 Feb 2017 16:15:11 +0000 (16:15 +0000)] 
Back-pedal the fix for Trac #8155

I implemented a rather elaborate fix for #8155 ages ago, which
which turns out to be
  a) unnecesssary in this particular case
  b) harmful to the defaulting story; see comment:15 of #12923.

So this patch reverts the elaborate bit. The bit I removed is
described in "Historical note" under Note [approximateWC].

2 years agoKill inaccessible-branch complaints in record update
Simon Peyton Jones [Wed, 8 Feb 2017 16:12:36 +0000 (16:12 +0000)] 
Kill inaccessible-branch complaints in record update

Trac #12957 (the original case in the Description) showed a record
update that yielded an "inaccessible code" warning. This should not
happen; it's just some redundant code generated by the desugarer (later
pruned away) and it's not the user's fault.

This patch suppresses the warning.  See Check.hs
Note [Inaccessible warnings for record updates]

2 years agoAdd some commented-out tracing in SpecConstr
Simon Peyton Jones [Wed, 8 Feb 2017 16:12:11 +0000 (16:12 +0000)] 
Add some commented-out tracing in SpecConstr

2 years agoFix stop_thread unwinding information
Ben Gamari [Wed, 8 Feb 2017 04:00:10 +0000 (23:00 -0500)] 
Fix stop_thread unwinding information

This corrects the unwind information for `stg_stop_thread`, which
allows us to unwind back to the C stack after reaching the end of the
STG stack.

Test Plan: Validate

Reviewers: simonmar, austin, erikd

Reviewed By: simonmar

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2746

2 years agoCmmLayoutStack: Correctly annotate Sp adjustments with unwinding information
Ben Gamari [Wed, 8 Feb 2017 03:58:48 +0000 (22:58 -0500)] 
CmmLayoutStack: Correctly annotate Sp adjustments with unwinding information

Test Plan: Validate

Reviewers: austin, simonmar

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3104

2 years agoCmm: Add support for undefined unwinding statements
Ben Gamari [Wed, 8 Feb 2017 03:56:36 +0000 (22:56 -0500)] 
Cmm: Add support for undefined unwinding statements

And use to mark `stg_stack_underflow_frame`, which we are unable to
determine a caller from.

To simplify parsing at the moment we steal the `return` keyword to
indicate an undefined unwind value. Perhaps this should be revisited.

Reviewers: scpmw, simonmar, austin, erikd

Subscribers: dfeuer, thomie

Differential Revision: https://phabricator.haskell.org/D2738

2 years agoCmmLayoutStack: Add unwind information on stack fixups
Ben Gamari [Wed, 8 Feb 2017 03:51:50 +0000 (22:51 -0500)] 
CmmLayoutStack: Add unwind information on stack fixups

Currently stack fixup blocks don't include unwinding information,
leaving a small window where our unwinding information is incorrect. Fix
this by adding unwinding information to emitted fixup blocks.

Reviewers: scpmw, simonmar, austin

Reviewed By: simonmar

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2742

2 years agoGeneralize CmmUnwind and pass unwind information through NCG
Ben Gamari [Wed, 8 Feb 2017 03:49:06 +0000 (22:49 -0500)] 
Generalize CmmUnwind and pass unwind information through NCG

As discussed in D1532, Trac Trac #11337, and Trac Trac #11338, the stack
unwinding information produced by GHC is currently quite approximate.
Essentially we assume that register values do not change at all within a
basic block. While this is somewhat true in normal Haskell code, blocks
containing foreign calls often break this assumption. This results in
unreliable call stacks, especially in the code containing foreign calls.
This is worse than it sounds as unreliable unwinding information can at
times result in segmentation faults.

This patch set attempts to improve this situation by tracking unwinding
information with finer granularity. By dispensing with the assumption of
one unwinding table per block, we allow the compiler to accurately
represent the areas surrounding foreign calls.

Towards this end we generalize the representation of unwind information
in the backend in three ways,

 * Multiple CmmUnwind nodes can occur per block

 * CmmUnwind nodes can now carry unwind information for multiple
   registers (while not strictly necessary; this makes emitting
   unwinding information a bit more convenient in the compiler)

 * The NCG backend is given an opportunity to modify the unwinding
   records since it may need to make adjustments due to, for instance,
   native calling convention requirements for foreign calls (see
   #11353).

This sets the stage for resolving #11337 and #11338.

Test Plan: Validate

Reviewers: scpmw, simonmar, austin, erikd

Subscribers: qnikst, thomie

Differential Revision: https://phabricator.haskell.org/D2741

2 years agoImprove -dsuppress-coercions
Simon Peyton Jones [Wed, 8 Feb 2017 11:31:32 +0000 (11:31 +0000)] 
Improve -dsuppress-coercions

The -dsuppress-coercions flag was being ignored when printing the
CastIt constructor in SimplUtils.SimplCont.  This fixes ths problem,
and improves what is printed when suppressing coercions, to show the
size of the suppressed coercion.

2 years agoImprove the simple optimiser
Simon Peyton Jones [Tue, 7 Feb 2017 00:32:43 +0000 (00:32 +0000)] 
Improve the simple optimiser

The previous version of the simple optimiser would leave
beta-redexes, which was bad for join points.  E.g.

  join j x = ....   -- a join point
  in (\x. j x) y

This would be ok if we beta-reduced the (\x) but not if
we don't.

This patch improves the simple optimiser, to follow the plan
described in "Secrets of the GHC inliner", and implemented in
the Mighty Simplifier.  It turns out not to be too hard to
use the same plan here, and we get slightly better code as
a result.

2 years agoMore typos in comments [skip ci]
Gabor Greif [Tue, 7 Feb 2017 10:55:16 +0000 (11:55 +0100)] 
More typos in comments [skip ci]

2 years agoUpdate hoopl submodule
Ben Gamari [Wed, 8 Feb 2017 02:58:46 +0000 (21:58 -0500)] 
Update hoopl submodule

This is in preparation for an upcoming bump of the containers submodule.

2 years agoPass -v0 to ghc-pkg to reduce noise in build ouput
Matthew Pickering [Wed, 8 Feb 2017 02:39:02 +0000 (21:39 -0500)] 
Pass -v0 to ghc-pkg to reduce noise in build ouput

By default ghc-pkg is quite noisy as it can't find interface files.

Test Plan:
Look at the build log stderr and see if there are lots of "cannot find
any of" errors.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie, snowleopard

Differential Revision: https://phabricator.haskell.org/D3103

2 years agoFix comment (broken link to users_guide) in $(TOP)/
Takenobu Tani [Wed, 8 Feb 2017 02:37:07 +0000 (21:37 -0500)] 
Fix comment (broken link to users_guide) in $(TOP)/

There was a broken link to users_guide at a comment.

* compiler/types/InstEnv.hs
  - type-class-extensions.html -> glasgow_exts.html

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3092

2 years agoFix comment of `section "Exceptions"`
Takenobu Tani [Wed, 8 Feb 2017 02:36:54 +0000 (21:36 -0500)] 
Fix comment of `section "Exceptions"`

I changed comment from `{- .. -}` to `--`.
Because Haddock comment for `section "Exceptions"` [1] was broken.

[1]:
https://downloads.haskell.org/~ghc/latest/docs/html/libraries/ghc-prim-0
.5.0.0/GHC-Prim.html

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3083

2 years agoFix push_bang_into_newtype when the pattern match has no arguments
Matthew Pickering [Wed, 8 Feb 2017 02:35:32 +0000 (21:35 -0500)] 
Fix push_bang_into_newtype when the pattern match has no arguments

Correct behaviour of push_bang_into_newtype when the pattern match has
no arguments. A user can write

```
newtype T = T Int

f :: T -> ()
f !(T {}) = ()
```
in which case we have to push the bang inwards through the newtype in
order to achieve the desired strictness properties. This patch fixes
this special case where the pattern match has no arguments to push the
bang onto. We now make up a wildcard pattern which is wrapped in the
bang pattern.

```
f (T !_) = ()
```

Reviewers: simonpj, austin, bgamari

Reviewed By: simonpj

Subscribers: simonpj, thomie

Differential Revision: https://phabricator.haskell.org/D3057

2 years agoUpdate Core formalize for Levity -> RuntimeRep
Ben Gamari [Wed, 8 Feb 2017 02:34:26 +0000 (21:34 -0500)] 
Update Core formalize for Levity -> RuntimeRep

Reviewers: austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3094

2 years agocpeApp: Make Int accumulator strict
Ben Gamari [Wed, 8 Feb 2017 02:33:16 +0000 (21:33 -0500)] 
cpeApp: Make Int accumulator strict

Test Plan: Validate

Reviewers: austin, dfeuer

Subscribers: dfeuer, thomie

Differential Revision: https://phabricator.haskell.org/D3093

2 years agotestsuite: Bump bytes allocated for T5837
Ben Gamari [Wed, 8 Feb 2017 02:30:15 +0000 (21:30 -0500)] 
testsuite: Bump bytes allocated for T5837

Simon decreased this earlier today but Harbormaster doesn't reproduce his
number. I've done two things here:

 1. increased the allocations number to the Harbormaster value
 2. increased the acceptance threshold from 5% to 7%, since Simon saw a 6.6%
    change in his environment.

2 years agotestsuite: Bump max_bytes_used for T4029
Ben Gamari [Wed, 8 Feb 2017 02:26:49 +0000 (21:26 -0500)] 
testsuite: Bump max_bytes_used for T4029

Unfortunately it's not clear what regressed this.

2 years agoClean up findPartiallyCompletedCycles
David Feuer [Wed, 8 Feb 2017 02:38:34 +0000 (21:38 -0500)] 
Clean up findPartiallyCompletedCycles

Rewrite `findPartiallyCompletedCycles` to use a list comprehension
rather than pattern matching on a list. Make it use `Data.Set`
rather than fussing with lists.

Reviewers: austin, bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3102

2 years agoUse better map operations in CoreMonad
David Feuer [Wed, 8 Feb 2017 02:34:00 +0000 (21:34 -0500)] 
Use better map operations in CoreMonad

Use strict `unionWith` where apparently appropriate, and use
strict `insertWith` rather than lookup followed by insertion.

Reviewers: austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3099

2 years agoAdd Wredundant-constraints to list of flags excluded from -Wall
Siddhanathan Shanmugam [Tue, 7 Feb 2017 16:12:05 +0000 (08:12 -0800)] 
Add Wredundant-constraints to list of flags excluded from -Wall

In light of #10635

2 years agoDocs: Fix typo in glasgow_exts.rst
Daniel Gröber [Tue, 7 Feb 2017 16:07:10 +0000 (17:07 +0100)] 
Docs: Fix typo in glasgow_exts.rst

2 years agoAnother improvement to SetLevels
Simon Peyton Jones [Fri, 23 Dec 2016 14:17:42 +0000 (14:17 +0000)] 
Another improvement to SetLevels

In my recent commit
   commit 432f952ef64641be9f32152a0fbf2b8496d8fe9c
   Float unboxed expressions by boxing
I changed how float_me in lvlMFE worked.  That was right, but
it exposed another bug: an error expression wasn't getting floated
as it should from a case alternative.  And that led to a collection
of minor improvements

* I found a much better way to cast it, by using lvlFloatRhs for
  top-level bindinds as well as nested ones, which is
    (a) more consistent and
    (b) works correctly.

  See Note [Floating from a RHS]

* I also found some delicacy in the "floating to the top" stuff, so I
  greatly elaborated the Note [Floating to the top].

* I simplified the "bottoming-float" stuff; the change is in the treatment
  of bottoming lambdas (\x y. error blah), where we now float the
  (error blah) part instead of the whole lambda (which risks just making
  duplicate lambdas.  See Note [Bottoming floats], esp (2).

Perf effects are minor.

* perf/compiler/T13056 improved sligtly (about 2%) in compiler
  allocations. Also T9233 improved by 1%.  I'm not sure why.

* Some small nofib changes:
    - Generally some very small reductions in run-time
      allocation, except k-nucleotide, which halves for some
      reason.  (I did try to look but it's a big complicated
      function and it was far from obvious.  Had it been a loss
      I would have looked harder!

NB: there's a nearby patch "Do not inline bottoming things" that could
also be responsible for either or both.  I didn't think it was worth
more testing to distinguish.

--------------------------------------------------------------------------------
        Program           Size    Allocs   Runtime   Elapsed  TotalMem
--------------------------------------------------------------------------------
           grep          +0.1%     -0.2%      0.00      0.00     +0.0%
         mandel          -0.1%     -1.4%      0.13      0.13     +0.0%
   k-nucleotide          +0.1%    -51.6%     -1.0%     -1.0%     +0.0%
--------------------------------------------------------------------------------
            Min          -0.3%    -51.6%     -9.4%     -9.1%     -4.0%
            Max          +0.2%     +0.0%    +31.8%    +32.7%     +0.0%
 Geometric Mean          -0.0%     -0.8%     +1.4%     +1.4%     -0.1%

2 years agoComments only
Simon Peyton Jones [Fri, 20 Jan 2017 15:12:17 +0000 (15:12 +0000)] 
Comments only

2 years agoDo not inline bottoming things
Simon Peyton Jones [Fri, 20 Jan 2017 15:12:42 +0000 (15:12 +0000)] 
Do not inline bottoming things

If a function seems small, worker/wrapper won't split it; instead
it turns it into an INLINE function.

But if it's a /bottoming/ function that's a bad idea.  We want
don't want to inline bottoming functions unless they are /really/
small (smaller than the call itself) and that's handled by a
different branch in certainlyWillInline.

So this patch adds a not-bottom test to the UnfIfGoodArgs case of
certainlyWillInline.

No big perf effect, but this will tend to keep error code out of
functions, and hence make them a bit more likely to inline.

I fell over this when fiddling with #13144

2 years agoTypos in comments [skip ci]
Gabor Greif [Tue, 7 Feb 2017 09:25:38 +0000 (10:25 +0100)] 
Typos in comments [skip ci]

2 years agoDerive <$
David Feuer [Tue, 7 Feb 2017 05:16:55 +0000 (00:16 -0500)] 
Derive <$

Using the default definition of `<$` for derived `Functor`
instance is very bad for recursive data types. Derive
the definition instead.

Fixes #13218

Reviewers: austin, bgamari, RyanGlScott

Reviewed By: RyanGlScott

Subscribers: RyanGlScott, thomie

Differential Revision: https://phabricator.haskell.org/D3072

2 years agoRemove unnecessary use of -DGENERICS flag
Ryan Scott [Mon, 6 Feb 2017 19:31:17 +0000 (14:31 -0500)] 
Remove unnecessary use of -DGENERICS flag

This flag was only needed for old versions of binary, and now that we've
upgraded to binary-0.8.4.1, it is no longer necessary.

2 years agoTypos in comments [skip ci]
Gabor Greif [Mon, 6 Feb 2017 16:09:18 +0000 (17:09 +0100)] 
Typos in comments [skip ci]

2 years agoTypos in comments [skip ci]
Gabor Greif [Mon, 6 Feb 2017 11:50:42 +0000 (12:50 +0100)] 
Typos in comments [skip ci]

2 years agoDo Worker/Wrapper for NOINLINE things
Eric Seidel [Mon, 6 Feb 2017 02:29:37 +0000 (21:29 -0500)] 
Do Worker/Wrapper for NOINLINE things

Disabling worker/wrapper for NOINLINE things can cause unnecessary
reboxing of values. Consider

    {-# NOINLINE f #-}
    f :: Int -> a
    f x = error (show x)

    g :: Bool -> Bool -> Int -> Int
    g True  True  p = f p
    g False True  p = p + 1
    g b     False p = g b True p

the strictness analysis will discover f and g are strict, but because f
has no wrapper, the worker for g will rebox p. So we get

    $wg x y p# =
      let p = I# p# in  -- Yikes! Reboxing!
      case x of
        False ->
          case y of
            False -> $wg False True p#
            True -> +# p# 1#
        True ->
          case y of
            False -> $wg True True p#
            True -> case f p of { }

    g x y p = case p of (I# p#) -> $wg x y p#

Now, in this case the reboxing will float into the True branch, an so
the allocation will only happen on the error path. But it won't float
inwards if there are multiple branches that call (f p), so the reboxing
will happen on every call of g. Disaster.

Solution: do worker/wrapper even on NOINLINE things; but move the
NOINLINE pragma to the worker.

Test Plan: make test TEST="13143"

Reviewers: simonpj, bgamari, dfeuer, austin

Reviewed By: simonpj, bgamari

Subscribers: dfeuer, thomie

Differential Revision: https://phabricator.haskell.org/D3046

2 years agotestsuite: Update expected values for T13035 and T12234
Ben Gamari [Mon, 6 Feb 2017 02:23:26 +0000 (21:23 -0500)] 
testsuite: Update expected values for T13035 and T12234

2 years agoFixes for OccurAnal bugs (#13221)
Luke Maurer [Mon, 6 Feb 2017 01:32:20 +0000 (20:32 -0500)] 
Fixes for OccurAnal bugs (#13221)

- OccurAnal: When checking tail calls, count rule's LHS args, not bndrs
Pretty obvious error in retrospect:
```
let $sj = \y ys -> ...
    {-# RULES "SC:j" forall y ys. j (y:ys) = $sj y ys #-}
    j = \xs -> ...
    in ...
```
A jump on the RHS of a rule for a join point is only okay if the rule's
LHS is
saturated - in this case, since the LHS is j (y:ys) and j takes one
argument,
both j and $sj can become join points. See Note [Rules and join points]
in
OccurAnal. By mistake, OccAnal was counting the rule's binders (y and
ys) rather
than the args in its LHS, so $sj wasn't being made a join point.

- Don't zap tail calls in unfoldings

This was causing T7796 to squeal about join points not being
rediscovered.

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3080

2 years agoFix broken link of GHC.RTS.Flags
Takenobu Tani [Mon, 6 Feb 2017 01:29:37 +0000 (20:29 -0500)] 
Fix broken link of GHC.RTS.Flags

There ware broken link to GHC User's Guide.

* libraries/base/GHC/RTS/Flags.hsc
 - runtime-control.html -> runtime_control.html

Reviewers: bgamari, austin, hvr

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3084

2 years agoFix comment (old file names '.hc' ) in libraries/
Takenobu Tani [Mon, 6 Feb 2017 01:27:57 +0000 (20:27 -0500)] 
Fix comment (old file names '.hc' ) in libraries/

There ware some old file names (.hc, ...) at comments.

* libraries/base/GHC/IO.hs
  - StgMiscClosures.hc -> StgStartup.cmm
  - Exceptions.hc -> Exception.cmm
  - Schedule.c -> RaiseAsync.c

A comment of `(un)?blockAsyncExceptionszh_fast` in IO.hs may be old.
Since I don't understand it, I have not modified it yet.

Reviewers: mpickering, bgamari, austin, hvr

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3081

2 years agoDon't return empty initial uncovered set for an unsat context
Matthew Pickering [Mon, 6 Feb 2017 01:27:41 +0000 (20:27 -0500)] 
Don't return empty initial uncovered set for an unsat context

Previously when the checker encountered an unsatisfiable term of type
context it would return an empty initial uncovered set. This caused all
pattern matches in the context to be reported as redudant.

This is arguably correct behaviour as they will never be reached but it
is better to recover and provide accurate warnings for these cases to
avoid error cascades. It would perhaps be better to report an error to
the user about an inacessible branch but this is certainly better than
many confusing redundant match warnings.

Reviewers: gkaracha, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3064

2 years agoDon't replace type family instances with the same LHS in GHCi (#7102)
Reid Barton [Mon, 6 Feb 2017 01:24:06 +0000 (20:24 -0500)] 
Don't replace type family instances with the same LHS in GHCi (#7102)

This fixes the easy part of #7102 by removing the logic that lets the
user replace a type family instance with a new one with the same LHS.
As discussed on that ticket, this is unsound in general. Better to have
the user redefine the type family from scratch.

The example from comment:7 involving loading modules into ghci is not
fixed yet; it actually doesn't rely on the instances having the same LHS.
This commit adds an expect_broken test for that example as well.

Test Plan: T7102a for the fix; T7102 is the test not fixed yet

Reviewers: dfeuer, austin, bgamari, goldfire

Reviewed By: dfeuer

Subscribers: dfeuer, thomie

Differential Revision: https://phabricator.haskell.org/D2994

2 years agoUse proper primitives in Utils.Binary
alexbiehl [Mon, 6 Feb 2017 01:23:09 +0000 (20:23 -0500)] 
Use proper primitives in Utils.Binary

`Word{16,32,64}` are implemented using `getWord8`. This patch introduces
`getWord{16,32,64}` and `putWord{16,32,64}`. This is nicer and
probably a bit faster.

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2908

2 years agoAdd liftA2 to Applicative class
David Feuer [Mon, 6 Feb 2017 00:43:31 +0000 (19:43 -0500)] 
Add liftA2 to Applicative class

* Make `liftA2` a method of `Applicative`.

* Add explicit `liftA2` definitions to instances in `base`.

* Add explicit invocations in `base`.

Reviewers: ekmett, bgamari, RyanGlScott, austin, hvr

Reviewed By: RyanGlScott

Subscribers: ekmett, RyanGlScott, rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3031

2 years agoExpose cseExpr from CSE
Joachim Breitner [Fri, 3 Feb 2017 01:28:29 +0000 (20:28 -0500)] 
Expose cseExpr from CSE

for the benefit of GHC API users who want to CSE single expressions.

Differential Revision: https://phabricator.haskell.org/D3069

2 years agoNew internal dynamic flag: Very aggressive inlining
Joachim Breitner [Fri, 3 Feb 2017 01:28:07 +0000 (20:28 -0500)] 
New internal dynamic flag: Very aggressive inlining

This flag overrides the inliner heuristics to inline something
independent of cost, size, expected gains or boringness of the context.

It still adheres to arity, simplifier phase control and loop breakers.

This is not exposed via a command line flag and added for the benefit of
GHC API users.

Differential Revision: https://phabricator.haskell.org/D3069

2 years agoFix comment (old file names) in mk/ and utils/
Takenobu Tani [Sat, 4 Feb 2017 20:16:10 +0000 (15:16 -0500)] 
Fix comment (old file names) in mk/ and utils/

There ware some old file names (.lhs, ...) at comments.

* mk/config.mk.in
  - compiler/hsSyn/HsExpr.lhs -> HsExpr.hs

* utils/ghc-pkg/Main.hs
  - compiler/main/Packages.lhs -> Packages.hs

* utils/genapply/Main.hs
  - CgRetConv.lhs -> * REMOVE THIS COMMENT (OLDER FILE THAN GHC6) *
  - Constants.lhs -> Constants.hs
  - compiler/codeGen/CgCallConv.lhs -> compiler/codeGen/StgCmmLayout.hs
  - Apply.hc -> Apply.cmm
  - HeapStackCheck.hc -> HeapStackCheck.cmm

Reviewers: mpickering, austin, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3077

2 years agoDon't panic when printing match with RecUpd context
Matthew Pickering [Sat, 4 Feb 2017 20:15:06 +0000 (15:15 -0500)] 
Don't panic when printing match with RecUpd context

Reviewers: bgamari, austin

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3065

GHC Trac Issues: #12957

2 years agoImprove wrapTicks performance with lots of redundant source notes
Peter Wortmann [Sat, 4 Feb 2017 20:14:31 +0000 (15:14 -0500)] 
Improve wrapTicks performance with lots of redundant source notes

The old version had O(n^3) performance for n non-overlapping source
notes and let floats each, which is exactly what happens with -g if we
compile a list literal of length n.

The idea here is simply to establish early which source notes will
actually survive (e.g. use a left fold). The new code should be O(n) for
list literals.

Reviewers: austin, dfeuer, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3037

GHC Trac Issues: #11095

2 years agoUpdate binary submodule to 0.8.4.1
Ben Gamari [Sat, 4 Feb 2017 20:00:59 +0000 (15:00 -0500)] 
Update binary submodule to 0.8.4.1

2 years agoFix minusNatural exception to be Underflow
Oleg Grenrus [Fri, 3 Feb 2017 11:52:25 +0000 (13:52 +0200)] 
Fix minusNatural exception to be Underflow

2 years agoMake split sections by default work again
Reid Barton [Sat, 4 Feb 2017 10:29:17 +0000 (10:29 +0000)] 
Make split sections by default work again

Commit 266a9dc4c changed = to := in one place in mk/config.mk.in.
This broke SupportsSplitSections because the variable LdIsGNULd
that it depends on is not defined until later in the file.

Test Plan: pushed to a wip/ branch for perf to build

Reviewers: DemiMarie, austin, bgamari, mpickering

Reviewed By: mpickering

Subscribers: mpickering, thomie

Differential Revision: https://phabricator.haskell.org/D3070

GHC Trac Issues: #13230

2 years agoFix comment (old filename '.lhs') in libraries/
Takenobu Tani [Sat, 4 Feb 2017 10:25:21 +0000 (10:25 +0000)] 
Fix comment (old filename '.lhs') in libraries/

[skip ci]

There are some old file names (*.lhs) at comments.
(I'm fixing to read source code by newcomers.)

* libraries/base/GHC/Base.hs
  - compiler/deSugar/DsListComp.lhs
  - PrelRules.lhs x2
  - Base.lhs

* libraries/base/GHC/IO.hs
  - PrimOp.lhs
  - GHC.IO.lhs
  - GHC.Exception.lhs

* libraries/base/GHC/Real.hs
  - compiler/prelude/PrelRules.lhs

* libraries/ghc-prim/GHC/Magic.hs
  - MkId.lhs x2

Reviewers: austin, hvr, bgamari

Reviewed By: bgamari

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3060

2 years agoFix comment (old file names) in compiler/
Takenobu Tani [Sat, 4 Feb 2017 10:24:55 +0000 (10:24 +0000)] 
Fix comment (old file names) in compiler/

[skip ci]

There ware some old file names (.lhs, ...) at comments.

* compiler/ghc.mk
  - prelude/PrimOp.lhs -> prelude/PrimOp.hs

* compiler/parser/cutils.h
  - PrimPacked.lhs -> compiler/utils/FastString.hs

Reviewers: bgamari, austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3076

2 years agoFix comment (old file names) in rts/
Takenobu Tani [Sat, 4 Feb 2017 10:24:49 +0000 (10:24 +0000)] 
Fix comment (old file names) in rts/

[skip ci]

There ware some old file names (.lhs, ...) at comments.

* rts/win32/ThrIOManager.c
  - Conc.lhs -> Conc.hs

* rts/PrimOps.cmm
  - ByteCodeLink.lhs -> ByteCodeLink.hs
  - StgMiscClosures.hc -> StgMiscClosures.cmm

* rts/AutoApply.h
  - AutoApply.hc -> AutoApply.cmm

* rts/HeapStackCheck.cmm
  - PrimOps.hc -> PrimOps.cmm

* rts/LdvProfile.h
  - Updates.hc -> Updates.cmm

* rts/Schedule.c
  - StgStartup.hc -> StgStartup.cmm

* rts/Weak.c
  - StgMiscClosures.hc -> StgMiscClosures.cmm

Reviewers: bgamari, austin, erikd, simonmar

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3075

2 years agoFix comment (old file names) in includes/
Takenobu Tani [Sat, 4 Feb 2017 10:24:42 +0000 (10:24 +0000)] 
Fix comment (old file names) in includes/

[skip ci]

There ware some old file names (.lhs, ...) at comments.

* includes/rts/Bytecodes.h
  - ghc/compiler/ghci/ByteCodeGen.lhs -> ByteCodeAsm.hs

* includes/rts/Constants.h
  - libraries/base/GHC/Conc.lhs -> libraries/base/GHC/Conc/Sync.hs

* includes/rts/storage/FunTypes.h
  - utils/genapply/GenApply.hs -> utils/genappl/Main.hs
  - compiler/codeGen/CgCallConv.lhs -> compiler/codeGen/StgCmmLayout.hs

* includes/stg/MiscClosures.h
  - compiler/codeGen/CgStackery.lhs -> compiler/codeGen/StgCmmArgRep.hs
  - HeapStackCheck.hc  -> HeapStackCheck.cmm

Reviewers: bgamari, austin, simonmar, erikd

Reviewed By: erikd

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3074

2 years agoAttempt to make lazy ST thread safe
David Feuer [Fri, 3 Feb 2017 22:24:17 +0000 (17:24 -0500)] 
Attempt to make lazy ST thread safe

Use `noDuplicate#` to prevent lazy `ST` thunks from
being evaluated in multiple GHC threads.

Some lazy `ST` functions added laziness that did not seem to be useful
(e.g.,
creating lazy pairs that will never be matched unless one of their
components
is demanded). Stripped that out.

Reviewers: ekmett, simonpj, bgamari, simonmar, austin, hvr

Subscribers: rwbarton, thomie

Differential Revision: https://phabricator.haskell.org/D3038

GHC Trac Issues: #11760

2 years agoUse tyCoVarsOfType for CTyEqCan in shouldSplitWD
Simon Peyton Jones [Fri, 3 Feb 2017 16:15:56 +0000 (16:15 +0000)] 
Use tyCoVarsOfType for CTyEqCan in shouldSplitWD

An ASSERT failure in rewritableTyVars made me realise
that there was an outright bug in shouldSplitWD.  See
the long Note [Splitting WD constraints].

2 years agoBump performance mark for T9020
Joachim Breitner [Fri, 3 Feb 2017 16:38:16 +0000 (11:38 -0500)] 
Bump performance mark for T9020

according to the graph at perf.haskell.org, it has regressed due to join
points, which moved it very very close to the +10% mark and hence made it
fail just sometimes.

2 years agoGet rid of ProbOneShot
Joachim Breitner [Thu, 2 Feb 2017 17:52:57 +0000 (12:52 -0500)] 
Get rid of ProbOneShot

This fixes #13227. It remains to be seen what the performance impacts
are. Pushing as a branch to get perf.haskell.org answer that for us.

Differential Revision: https://phabricator.haskell.org/D3067

2 years agoDitch static flags
Sylvain Henry [Thu, 2 Feb 2017 19:37:24 +0000 (14:37 -0500)] 
Ditch static flags

This patch converts the 4 lasting static flags (read from the command
line and unsafely stored in immutable global variables) into dynamic
flags. Most use cases have been converted into reading them from a DynFlags.

In cases for which we don't have easy access to a DynFlags, we read from
'unsafeGlobalDynFlags' that is set at the beginning of each 'runGhc'.
It's not perfect (not thread-safe) but it is still better as we can
set/unset these 4 flags before each run when using GHC API.

Updates haddock submodule.

Rebased and finished by: bgamari

Test Plan: validate

Reviewers: goldfire, erikd, hvr, austin, simonmar, bgamari

Reviewed By: simonmar

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D2839

GHC Trac Issues: #8440

2 years agousers-guide: Explain behavior of verbose-core2core + dump-inlinings
Ben Gamari [Fri, 3 Feb 2017 01:17:08 +0000 (20:17 -0500)] 
users-guide: Explain behavior of verbose-core2core + dump-inlinings

2 years agoRemove INLINE pragma on loopbreaker
Matthew Pickering [Thu, 2 Feb 2017 21:00:39 +0000 (21:00 +0000)] 
Remove INLINE pragma on loopbreaker