| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
| |
by only passing the demand on the free variables, and whether the
argument (resp. scrunitee) may or will diverge.
|
|
|
|
|
|
| |
Make different postProcess code paths for function arguments (which are
post-processed just to be both'ed) and unsaturated functions (which are
post-processed for other reasons.)
|
|
|
|
|
|
|
|
| |
its first argument is just used for its length (the arity of the call).
So changing the type to Int to reflect that.
Also add a note [Demands from unsaturated function calls] that hopefully
comprehensively and comprehensibly explains what is going on here.
|
| |
|
| |
|
|
|
|
|
| |
this is a small-step-refactoring patch and not very interesting on its
own.
|
| |
|
| |
|
|
|
|
| |
by adding Notes and using easier to understand combinators.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Joachim and I are committing this onto a branch so that we can share it,
but we expect to do a bit more work before merging it onto head.
Nofib staus:
- Most programs, no change
- A few improve
- A couple get worse (cacheprof, tak, rfib)
Investigating the "get worse" set is what's holding up putting this
on head.
The major issue is this. Consider
map (f g) ys
where f's demand signature looks like
f :: <L,C1(C1(U))> -> <L,U> -> .
So 'f' is not saturated. What demand do we place on g?
Answer
C(C1(U))
That is, the inner C1 should stay, even though f is not saturated.
I found that this made a significant difference in the demand signatures
inferred in GHC.IO, which uses lots of higher-order exception handlers.
I also had to add used-once demand signatures for some of the
'catch' primops, so that we know their handlers are only called once.
|
|
|
|
|
| |
This patch was authored by SPJ and extracted from "Improve the handling
of used-once stuff" by Joachim.
|
|
|
|
|
| |
This patch was authored by SPJ, and extracted from "Improve the handling
of used-once stuff" by Joachim.
|
|
|
|
|
| |
This is authored by SPJ, and split out out "Improve the handling of
used-once stuff" by Joachim.
|
|
|
|
|
| |
This was authored by SPJ and extracted from the "Improve the handling of
used-once stuff" patch by Joachim.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
This is a long-standing bug. We were generating a Given
equality between kind variables, and (at least until we support
kind coercions) we can't do that.
The fix is to drop such Given equalities entirely. That may
mean we can't prove some things, but that's fair enough -- the
current proof language can't express such proofs.
See Note [Do not create Given kind equalities] in TcSMonad
|
|
|
|
| |
Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
|
| |
|
|
|
|
|
| |
because it is not a top deman (see previous commit), and it is only used
in an argument to mkStrictSig.
|
|
|
|
|
|
|
|
|
| |
because topDmdType is ''not'' the top of the lattice, as it puts an
implicit absent demand on free variables, but Abs is the bottom of the
Usage lattice.
Why nopDmdType? Becuase it is the demand of doing nothing: Everything
lazy, everything absent, no definite divergence.
|
|
|
|
|
|
|
|
|
| |
but do forget about certain divergence, if required. Fixes one part of
ticket #8598.
The added function (deferAfterIO) can maybe be merged with existing
code, but given the ongoing work in the nested-cpr branch, I defer that
work.
|
|
|
|
|
|
|
| |
The existing flag -ddump-stranal dumps the full Core, which is very
verbose and not always helpful. This adds a more concise output (one
line per top-level bind) that is faster to read, and especially more
suitable to be used when writing test cases for the strictness analiser.
|
|
|
|
|
|
|
| |
On win64 sizeof(long) != sizeof(void*), so debugTrace was casting a
value of incorrect size causing a validate failure.
Signed-off-by: Austin Seipp <austin@well-typed.com>
|
|
|
|
| |
After commit 55c703b8fdb0, this code is no longer used anywhere.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This improves the output of `git shortlog` and others, see
http://git-scm.com/docs/git-shortlog
for more details.
The mapping is in part derived from the Darcs author-spelling file
which was removed some time ago via 47a018026aee9faef28ddc9b4550425dd0000ceb.
There's still a couple of unmapped `<unknown>` authors in the Git history which will
be hopefully mapped in the future as well to provide complete authorship information
throughout all of GHC's recorded development history.
Signed-off-by: Herbert Valerio Riedel <hvr@gnu.org>
|
| |
|
|
|
|
|
| |
The lexer now uses unicode single quotation marks in its error messages
if possible. This is due to the use of the 'quotes' combinator.
|
|
|
|
| |
Helps fix #7396
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This was an egregious error. If e :: T (Q ty1)
then when we have the splice
$e :: ty2
we must ensure that ty1~ty2 before we even think about
running the splice!
I took the opportunity to remove the dead-code tcSpliceDecls
altogether.
|
| |
|
|
|
|
| |
Signed-off-by: Austin Seipp <austin@well-typed.com>
|
|
|
|
| |
Signed-off-by: Austin Seipp <austin@well-typed.com>
|
|
|
|
| |
Signed-off-by: Austin Seipp <austin@well-typed.com>
|
|
|
|
|
|
|
| |
An earlier patch fixes a bug in flushExec on linux only. This
patch uses the fixed code on all operating systems.
Signed-off-by: Austin Seipp <austin@well-typed.com>
|
| |
|
|
|
|
|
|
|
|
|
|
| |
We now do the allocation of the blackhole indirection closure inside the
RTS procedure 'newCAF' instead of generating the allocation code inline
in the closure body of each CAF. This slightly decreases code size in
modules with a lot of CAFs.
As a result of this change, for example, the size of DynFlags.o drops by
~60KB and HsExpr.o by ~100KB.
|
|
|
|
|
| |
as it seems that this code is now dead (due to
[Dropping derived constraints]) (See #8592)
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
| |
we now print the precise class method, with types, where the coercion
failed.
|
| |
|
|
|
|
| |
See #8006 for the reason why. This is not a fix as such; more of a workaround.
|
|
|
|
|
|
| |
If "deriving (C)" fails, it will now, if possible, indicate which
particular field of which constructor has caused the failure. (This
fixes #8576)
|
|
|
|
|
|
| |
When doing non-standalone deriving, annotate each individual
unsimplified constraint with its own CtOrigin. This is just the
refactoring, so the CtOrigin is still CtDeriv in each case.
|