| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
| |
| |
| |
| | |
Fixes 2276_ghci on Win64
|
| |\ |
|
| | |\ |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
To prevent conflicts with GCC builtins, generate identical code for
calls to mem primos and FFI calls.
Based on a patch by Joachim Breitner.
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This patch allows, for the first time, case expressions with an empty
list of alternatives. Max suggested the idea, and Trac #6067 showed
that it is really quite important.
So I've implemented the idea, fixing #6067. Main changes
* See Note [Empty case alternatives] in CoreSyn
* Various foldr1's become foldrs
* IfaceCase does not record the type of the alternatives.
I added IfaceECase for empty-alternative cases.
* Core Lint does not complain about empty cases
* MkCore.castBottomExpr constructs an empty-alternative case
expression (case e of ty {})
* CoreToStg converts '(case e of {})' to just 'e'
|
| | | | |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
We now detect if we are given a value that is out of range for a
32bit relocation, and fail with an error.
Added a load more symbols to rtsSyms.
|
| | |/
| |/|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Without this, we ended up using
(gdb) info symbol 0x7ff756a10ac
msvcrt!free in section .text of C:\Windows\system32\msvcrt.dll
for free, rather than
(gdb) info symbol 0x2584128
free in section .text of C:\m64\ghci2\q/../inplace/bin/ghc-stage2.exe
but we were trying to put the address into a 32bit relocation.
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | | |
In particular, old-time assumes that mingw32_HOST_OS is set when
we are on Windows, and was going wrong on Win64 because it wasn't
defined.
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
It doesn't suffice for checkProddableBlock to just check whether the
largest possible write could be made at the address we are writing,
as if we are making a smaller write then checkProddableBlock may
conservatively think we will write off the end of the block.
Thus we now tell checkProddableBlock how many bytes we will write.
|
| | |
| | |
| | |
| | | |
This reverts commit 29cd6f435f2afb332ad8faf39f5e920ff9c38d9a.
|
| | |
| | |
| | |
| | | |
This reverts commit 02cf6d6f71b5772aa4ddf1b70c192a802886e2c2.
|
| | |
| | |
| | |
| | | |
This reverts commit 27e585bda6ae8ab68f58abdcb9e06806414a6636.
|
| | |
| | |
| | |
| | | |
This reverts commit 05b55c670c7fe3fc01827ca02aafb6926c0b69cb.
|
| | |
| | |
| | |
| | | |
This reverts commit 0042c478f1169ddd9392fb39de7d0aed865a272e.
|
| |/
| |
| |
| | |
This reverts commit e89ef70475fa5e9cf17af01b1b5d7fced0d2e13c.
|
| | |
|
| |\ |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
It was causing assertion failures of
ASSERT(countBlocks(nursery->blocks) == nursery->n_blocks)
at
ghc-stage2: internal error: ASSERTION FAILED: file rts/sm/Sanity.c, line 878
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | |
| | | |
The stage0 compiler might have a different idea as to what type lnat
corresponds to, so cast the value to the type we want.
|
| | | |
|
| | |\ |
|
| | | | |
|
| | |/
| |/|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
There was one place, in type checking parallel list comprehensions
where we were unifying types, but had no convenient way to use the
resulting coercion; instead we just checked that it was Refl. This
was Wrong Wrong; it might fail unpredicably in a GADT-like situation,
and it led to extra error-generation code used only in this one place.
This patch tidies it all up, by moving the 'return' method from the
*comprehension* to the ParStmtBlock. The latter is a new data type,
now used for each sub-chunk of a parallel list comprehension.
Because of the data type change, quite a few modules are touched,
but only in a fairly trivial way. The real changes are in TcMatches
(and corresponding desugaring); plus deleting code from TcUnify.
This patch also fixes the pretty-printing bug in Trac #6060
|
| | | |
|
| | | |
|
| |\ \
| | |/ |
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
#6054)
GHC currently uses the slightly-dodgy plan that when we proote
a TyCon to be a Kind constructor we leave it with the same Name.
That means that to make sense of a IfaceType we need to know wheter
it is really an IfaceType or an IfaceKind, because in the latter an
occurrence of (say) Maybe will be the *promoted* Maybe.
See Note [Checking IfaceTypes vs IfaceKinds] in TcIface
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
* Undoes Max's very aggressive function-inlining change
(see comments with Trac #6048)
* Resticts function application discount to functions
that occur just once in the body. It was the multiple
occurrences that led to the exponential behavour in
Trac #6048.
See Note [Function application discount] in CoreUnfold.
Module binary sizes are down 2% on average, which is good.
Allocations wobble about a bit, but only on a few benchmarks
and not by much, so it seems a price worth paying to avoid
exponential behaviour!
Allocs
Min -1.2%
Max +2.8%
Geometric Mean +0.0%
|
| |/
|/|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
When inlining, we are making a copy of the expression, so we have to
be careful about duplicating work. Previously we were using
exprIsCheap for that, but it is willing to duplicate a cheap primop --
and that is terribly bad if it happens inside some inner array loop
(Trac #5623). So now we use a new function exprIsWorkFree. Even
then there is some wiggle room:
see Note [exprIsWorkFree] in CoreUtils
This commit does make wheel-sieve1 allocate a lot more, but we decided
that's just tough; it's more important for inlining to be robust
about not duplicating work.
|
| |
| |
| |
| |
| |
| | |
This reverts commit 745ec959ff647c3a455767d20f6f37e9a0cc65aa.
Sigh. Seg fault
|
| |
| |
| |
| |
| |
| | |
This reverts commit e3f8557c2aca04cf64eec6a1aacde6e01c0944ff.
Sigh. Seg fault.
|
| |
| |
| |
| |
| |
| | |
This reverts commit a365a58eade7cb2c961af8e60c20b7d78b1b7484.
Sigh. Seg fault. Major sigh.
|
|\ \ |
|
| |\ \ |
|
| | | | |
|
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | | |
This puts back the earlier behaviour (pre "aggressive-primop" patch)
whereby most primpos were considered cheap. In the aggressive-primop
patch we made them ones with bigger "code_size" seem not-cheap, but
this slows down fft2 a lot. So I've reverted to the earlier behaviour.
+++ b/compiler/prelude/PrimOp.lhs
@@ -450,6 +450,8 @@ primOpIsCheap op
-- This is vital; see Note [PrimOp can_fail and has_side_effects]
&& not (primOpOutOfLine op)
- -- && primOpCodeSize op <= primOpCodeSizeDefault
+-- Omitting; it makes fft2 run a lot slower by preventing
+-- eta expansion in an inner loop, with a primop cosDouble#
|
| |/ /
|/| | |
|
|\ \ \ |
|
| |\ \ \ |
|
| | | | | |
|
| | | | | |
|
| | | | | |
|
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | | |
This patch enhances Platform's ArchARM to include ARM ABI value. It also
tweaks configure machinery to detect hard-float ABI and to set it wherever
needed. Finally when hard-float ABI is in use, pass appropriate compiler
option to the LLVM's llc. Fixes #5914.
|
| |\ \ \ \
| | |/ / / |
|