| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
It's morally pure, and we'll need it in a pure context.
|
|
|
|
|
|
|
|
|
| |
You can use ghc -show-packages, in addition to any -package -package-conf
-hide-package, etc flags and see just what ghc's package info looks like.
The format is much like ghc-pkg show.
Like the existing verbose tracing, but a specific mode.
Re-introduce pretty printed package info (Cabal handled this previously).
|
| |
|
|
|
|
| |
in the previous patches in this series
|
| |
|
|
|
|
|
|
|
|
| |
Also start using the new package db file format properly, by using the
ghc-specific section.
This is the main patch in the series for removing the compiler's dep
on the Cabal lib.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The purpose of the new format is to make it possible for the compiler
to not depend on the Cabal library. The new cache file format contains
more or less the same information duplicated in two different sections
using different representations.
One section is basically the same as what the package db contains now,
a list of packages using the types defined in the Cabal library. This
section is read back by ghc-pkg, and used for things like ghc-pkg dump
which have to produce output using the Cabal InstalledPackageInfo text
representation.
The other section is a ghc-local type which contains a subset of the
information from the Cabal InstalledPackageInfo -- just the bits that
the compiler cares about.
The trick is that the compiler can read this second section without
needing to know the representation (or types) of the first part. The
ghc-pkg tool knows about both representations and writes both.
This patch introduces the new cache file format but does not yet use it
properly. More patches to follow. (As of this patch, the compiler reads
the part intended for ghc-pkg so it still depends on Cabal and the
ghc-local package type is not yet fully defined.)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Historically the package db format was a single text file in Read/Show
format containing [InstalledPackageInfo]. For several years now the
default format has been a directory with one file per package, plus a
binary cache.
The old format cannot be supported under the new scheme where the
compiler will not depend on the Cabal library (because it will not
have access to the InstalledPackageInfo type) so we must drop support.
It would still technically be possible to support a single text file
style db (but containing a different type), but there does not seem to
be any compelling reason to do so.
(Part of preparitory work for removing the compiler's dep on Cabal)
|
| |
|
|
|
|
| |
Call sites are much easier to understand than before
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
I hadn't got the new function trimAutoRules quite right, so we had
a left-over rule which mentioned a local variable whose binding had
been discarded. (Result: crash when compiling Haddock.)
This patch merges trimAutoRules into an expanded version of
findExternalRules, gets it right, and adds lots of comments.
See Note [Finding external rules].
And indeed in one regression test we get to trim off more rules
(and hence code) than before.
|
|
|
|
|
|
|
| |
No need to emit (now empty) those special markers.
Markers were needed only in registerised -fvia-C mode.
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
|
|
|
|
|
|
|
|
| |
ghc-stage2: panic! (the 'impossible' happened)
(GHC version 7.9.20140828 for x86_64-unknown-linux):
nameModule $w$smiddle_sfx6
make[1]: *** [utils/haddock/dist/build/Haddock/Backends/Xhtml.dyn_o] Error 1
|
| |
|
| |
|
|
|
|
| |
More modular, less code. No change in behaviour.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Doing so pushes bindings nearer their use site and hence makes
them more likely to be strict. These bindings might only show
up after the inlining from simplification. Example in fulsom,
Csg.calc, where an arg of timesDouble thereby becomes strict.
Very few programs are affected, but it's basically good news.
Program Size Allocs Runtime Elapsed TotalMem
--------------------------------------------------------------------------------
fft -0.2% +1.3% 0.06 0.06 -10.0%
fulsom -0.0% -2.6% -4.3% -4.7% -6.7%
simple +0.0% -0.8% 0.0% 0.0% 0.0%
--------------------------------------------------------------------------------
Min -0.5% -2.6% -4.5% -4.7% -10.0%
Max +0.1% +1.3% +3.3% +3.4% +2.6%
Geometric Mean -0.0% -0.0% -0.6% -0.6% -0.2%
The lossage in fft is the loss of detecting a common sub-expression,
and can be fixed by doing earlier CSE. But that is in any case a bit
of a fluke so I don't mind losing it in exchange for this more reliable
gain.
|
| |
|
|
|
|
|
|
|
| |
The new function TidyPgm.trimAutoRules discards bindings and
rules that were useful, but now have served their purpose.
See Note [Trimming auto rules] in TidyPgm
|
|
|
|
|
|
| |
We were missing the free variables of rules etc. It's correct
for Rec but wrong for NonRec. I'm not sure how this bug hasn't
bitten us before, but it cropped up when I was doing trimAutoRules.
|
|
|
|
|
|
|
|
|
|
| |
This flag specialises any imported overloaded function that has an
unfolding, whether or not it was marked INLINEABLE.
We get a lot of orphan SPEC rules as a result, but that doesn't matter
provided we don't treat orphan auto-generated rules as causing the module
itself to be an orphan module. See Note [Orphans and auto-generated rules]
in MkIface.
|
|
|
|
|
|
|
|
|
|
|
| |
A class op applied to a dictionary doesn't do much work, so it's not
a great idea to float it out (except possibly to the top level.
See Note [Floating over-saturated applications] in SetLevels
I also renamed "floatOutPartialApplications" to "floatOutOverSatApps";
the former is deeply confusing, since there is no partial application
involved -- quite the reverse, it is *over* saturated.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This fixes a long-standing bug: Trac #6056. The trouble was that
INLINEABLE "used up" the unfolding for the Id, so it couldn't be
worker/wrapper'd by the strictness analyser.
This patch allows the w/w to go ahead, and makes the *worker* INLINEABLE
instead, so it can later be specialised.
However, that doesn't completely solve the problem, because the dictionary
argument (which the specialiser treats specially) may be strict and
hence unpacked by w/w, so now the worker won't be specilialised after all.
Solution: never unpack dictionary arguments, which is done by the isClassTyCon
test in WwLib.deepSplitProductType_maybe
|
|
|
|
|
|
| |
CoreSyn.maybeUnfoldingTemplate is used mainly when specialising,
so make DFunUnfoldings respond to it makes it possible to specialise
them properly.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There are two main refactorings here
1. Move the uf_arity field
out of CoreUnfolding
into UnfWhen
It's a lot tidier there. If I've got this right, no behaviour
should change.
2. Define specUnfolding and use it in DsBinds and Specialise
a) commons-up some shared code
b) makes sure that Specialise correctly specialises DFun
unfoldings (which it didn't before)
The two got put together because both ended up interacting in the
specialiser.
They cause zero difference to nofib.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
Before the patch '-fPIC' was passed only to C compiler,
but not to assembler itself.
It led to runtime crash in GHC_DYNAMIC_PROGRAMS=YES mode
on sparc32.
Technical details are in 'Note [-fPIC for assembler]'.
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Test Plan: validate on sparc
Reviewers: simonmar, austin, kgardas
Reviewed By: austin
Subscribers: simonmar, ezyang, carter
Differential Revision: https://phabricator.haskell.org/D177
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
On amd64/UNREG build there is many failing tests trying
to deal with 'Integer' types.
Looking at 'integerConversions' test I've observed
invalid C code generated by GHC.
Cmm code
CInt a = -1; (a == -1)
yields 'False' with optimisations enabled via the following C code:
StgWord64 a = (StgWord32)0xFFFFffffFFFFffffu; (a == 0xFFFFffffFFFFffffu)
The patch fixes it by shrinking emitted literals to required sizes:
StgWord64 a = (StgWord32)0xFFFFffffu; (a == 0xFFFFffffu)
Thanks to Reid Barton for tracking down and fixing the issue.
Signed-off-by: Sergei Trofimovich <slyfox@gentoo.org>
Test Plan: validate on UNREG build (amd64, x86)
Reviewers: simonmar, rwbarton, austin
Subscribers: hvr, simonmar, ezyang, carter
Differential Revision: https://phabricator.haskell.org/D173
|
|
|
|
|
|
|
| |
of named fields, whereas the code in RnPat.rnHsRecFields is
much better set up to do so.
Both easily fixed.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This patch corrects an egregious error introduced by:
commit 022f8750edf6f413fba31293435dcc62600eab77
Author: Simon Peyton Jones <simonpj@microsoft.com>
Date: Thu May 15 16:07:04 2014 +0100
Refactoring around TyCon.isSynTyCon
* Document isSynTyCon better
* Add isTypeSyonymTyCon for regular H98 type synonyms
* Use isTypeSynonymTyCon rather than isSynTyCon where
the former is really intended
At this particular spot in TcValidity we really do mean
isSynTyCon and not isTypeSynonymTyCon.
Fixes Trac #9433
|
|
|
|
|
|
|
|
|
| |
Un-saturated type-family and type-synonym applications are
detected in the front end, but for some reason Lint wasn't
looking for them.
I came across this when wondering why Trac #9433 didn't give
a Core Lint error
|
|
|
|
|
|
|
|
|
|
|
| |
This patch should make no change in behaviour.
* Make RhsInfo into a record
* Include ri_rhs_usg, which previously travelled around separately
* Introduce specRec, specNonRec, and
make them return [OneSpec] rather than SpecInfo
|
|
|
|
|
|
|
|
|
|
| |
This long-standing and egregious bug meant that call information was
being gratuitously copied, leading to an exponential blowup in the
number of calls to be examined when function definitions are deeply
nested. That is what has been causing the blowup in SpecConstr's
running time, not (as I had previously supposed) generating very large code.
See Note [spec_usg includes rhs_usg]
|
|
|
|
|
| |
This is just a small refactoring that makes the code a bit clearer,
using a data type instead of a triple. We get better pretty-printing too.
|
|
|
|
|
|
|
|
| |
The main motivation is that user-style output assumes that everything has been
tidied, not enough uniques are printed by default.
The downside is that pprTrace output now has module prefixes which can be overwhelming,
but -dsuppress-module-prefixes will suppress them.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
These MachOps are used by addIntC# and subIntC#, which in turn are
used in integer-gmp when adding or subtracting small Integers. The
following benchmark shows a ~6% speedup after this commit on x86_64
(building GHC with BuildFlavour=perf).
{-# LANGUAGE MagicHash #-}
import GHC.Exts
import Criterion.Main
count :: Int -> Integer
count (I# n#) = go n# 0
where go :: Int# -> Integer -> Integer
go 0# acc = acc
go n# acc = go (n# -# 1#) $! acc + 1
main = defaultMain [bgroup "count"
[bench "100" $ whnf count 100]]
Differential Revision: https://phabricator.haskell.org/D140
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Summary:
Previously, GHC would look for instances of wired-in packages in the
in-memory package database and null out the version number. This was
necessary when the sourcePackageId was used to determine the linker
symbols; however, we now use a package key, so only that needs to be
updated.
Long-term, we can remove this hack by ensuring that Cabal actually records
the proper package key in the database. This will also fix an unrelated
hack elsewhere.
Keeping version numbers means that wired in packages get rendered differently
when output by GHC. This is the source of all the test-case output changes.
Signed-off-by: Edward Z. Yang <ezyang@cs.stanford.edu>
Test Plan: validate
Reviewers: hvr, austin
Subscribers: simonmar, ezyang, carter
Differential Revision: https://phabricator.haskell.org/D170
|
|
|
|
| |
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>
|
|
|
|
| |
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>
|
|
|
|
| |
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>
|
|
|
|
| |
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>
|