fptools build system ==================== This is the top-level directory of the fptools build system. Several packages are part of this build system; if you got this as part of a source distribution (eg. for GHC), then you will have one or more of the following directories: ghc The Glasgow Haskell Compiler hslibs A Collection of Haskell libraries haggis The Haggis GUI toolkit happy The Happy Haskell parser generator hdirect Haskell interop tool green-card A foreign function interface pre-processor for Haskell. nofib The NoFib Haskell benchmarking suite Additional documentation for each project can be found in its respective directory. In addition, the following directories contain project-independent bits: mk GNU make setup used by all of fptools glafp-utils Shared utility programs docs Documentation on the installing and using the fptools build system. distrib Tools and additional bits for building distributions Quick start: the following is *supposed* to work $ ./configure $ make boot $ make $ make install where 'make' is whatever GNU make is called on your system (GNU make is *required*). The configuration script is a standard GNU autoconf script which accepts all the normal arguments, eg. --prefix=<blah> to install the package somewhere other than /usr/local. Try ./configure --help to get a full list of the options. There is usually an ANNOUNCE* file with any distribution. Please consult that, or the <piece>/README file, to find out how to proceed. Full documentation for the fptools build system can be found on the GHC web pages: http://www.haskell.org/ghc/ -- The GHC Team, glasgow-haskell-users@haskell.org
Forked from
Glasgow Haskell Compiler / GHC
62735 commits behind the upstream repository.
Simon Peyton Jones
authored
Simon's Marktoberdorf Commits 1. Tidy up the renaming story for "system binders", such as dictionary functions, default methods, constructor workers etc. These are now documented in HsDecls. The main effect of the change, apart from tidying up, is to make the *type-checker* (instead of the renamer) generate names for dict-funs and default-methods. This is good because Sergei's generic-class stuff generates new classes at typecheck time. 2. Fix the CSE pass so it does not require the no-shadowing invariant. Keith discovered that the simplifier occasionally returns a result with shadowing. After much fiddling around (which has improved the code in the simplifier a bit) I found that it is nearly impossible to arrange that it really does do no-shadowing. So I gave up and fixed the CSE pass (which is the only one to rely on it) instead. 3. Fix a performance bug in the simplifier. The change is in SimplUtils.interestingArg. It computes whether an argment should be considered "interesting"; if a function is applied to an interesting argument, we are more likely to inline that function. Consider this case let x = 3 in f x The 'x' argument was considered "uninteresting" for a silly reason. Since x only occurs once, it was unconditionally substituted, but interestingArg didn't take account of that case. Now it does. I also made interestingArg a bit more liberal. Let's see if we get too much inlining now. 4. In the occurrence analyser, we were choosing a bad loop breaker. Here's the comment that's now in OccurAnal.reOrderRec score ((bndr, rhs), _, _) | exprIsTrivial rhs = 3 -- Practically certain to be inlined -- Used to have also: && not (isExportedId bndr) -- But I found this sometimes cost an extra iteration when we have -- rec { d = (a,b); a = ...df...; b = ...df...; df = d } -- where df is the exported dictionary. Then df makes a really -- bad choice for loop breaker I also increased the score for bindings with a non-functional type, so that dictionaries have a better chance of getting inlined early 5. Add a hash code to the InScopeSet (and make it properly abstract) This should make uniqAway a lot more robust. Simple experiments suggest that uniqAway no longer gets into the long iteration chains that it used to. 6. Fix a bug in the inliner that made the simplifier tend to get into a loop where it would keep iterating ("4 iterations, bailing out" message). In SimplUtils.mkRhsTyLam we float bindings out past a big lambda, thus: x = /\ b -> let g = \x -> f x x in E becomes g* = /\a -> \x -> f x x x = /\ b -> let g = g* b in E It's essential that we don't simply inling g* back into the RHS of g, else we will be back to square 1. The inliner is meant not to do this because there's no benefit to the inlining, but the size calculation was a little off in CoreUnfold. 7. In SetLevels we were bogus-ly building a Subst with an empty in-scope set, so a WARNING popped up when compiling some modules. (knights/ChessSetList was the example that tickled it.) Now in fact the warning wasn't an error, but the Right Thing to do is to carry down a proper Subst in SetLevels, so that is what I have now done. It is very little more expensive.
Name | Last commit | Last update |
---|---|---|
distrib | ||
docs | ||
ghc | ||
glafp-utils | ||
mk | ||
.darcs-boring | ||
Makefile | ||
Makefile.config | ||
README | ||
acconfig.h | ||
aclocal.m4 | ||
config.guess | ||
config.sub | ||
configure.in | ||
install-sh |