- Sep 12, 2008
-
-
Simon Marlow authored
-
Simon Marlow authored
-
Simon Marlow authored
-
chevalier@alum.wellesley.edu authored
Added code for dead code elimination to the ext-core library. This can be used in concert with Language.Core.Merge to produce a single self-contained module without unnecessary cruft.
-
chevalier@alum.wellesley.edu authored
-
chevalier@alum.wellesley.edu authored
Changed the ext-core syntax to include primitive coercions (left, right, sym, trans, etc.) as syntax rather than referring them to their names as in GHC. (I hope I updated the docs to reflect this...)
-
chevalier@alum.wellesley.edu authored
See comments for details.
-
chevalier@alum.wellesley.edu authored
See comments for details.
-
chevalier@alum.wellesley.edu authored
-
chevalier@alum.wellesley.edu authored
isUtupleTy was implemented inefficiently (and is called a lot by the typechecker). Replaced with uglier but faster code.
-
chevalier@alum.wellesley.edu authored
-
chevalier@alum.wellesley.edu authored
I added a new module, Merge, to the ext-core library that combines a list of ext-core modules into a new, uniquely renamed module. See comments in Merge.hs for more details.
-
- Sep 11, 2008
-
-
Ian Lynagh authored
-
Ian Lynagh authored
-
Ian Lynagh authored
-
Ian Lynagh authored
We used to always copy old_size
-
Ian Lynagh authored
-
- Sep 10, 2008
-
-
Simon Peyton Jones authored
This suspicious function had just one call, in BuildTyCl.mkNewTyConRhs. I've done it another way now, which is tidier.
-
- Sep 09, 2008
-
-
Ian Lynagh authored
-
Ian Lynagh authored
-
Ian Lynagh authored
-
- Sep 10, 2008
-
-
Simon Peyton Jones authored
-
Simon Peyton Jones authored
I did the wrong checkSigTyVars, which (happily) triggered an ASSERT failure. This should fix it.
-
Simon Peyton Jones authored
In refactoring instance declarations I'd taken a short cut over scoped type variables, but it wasn't right as #2572 shows. Fixing it required a significant chunk of further refactoring, alas. But it's done! Quite tidily as it turns out. The main issue is that when typechecking a default method, we need two sets of type variables in scope class C a where op :: forall b. ... op = e In 'e', *both* 'a' and 'b' are in scope. But the type of the default method has a nested flavour op :: forall a. C a => forall b. .... and our normal scoping mechanisms don't bring 'b' into scope. (And probably shouldn't.) Solution (which is done for instance methods too) is to use a local defintion, like this: $dmop :: forall a. C a => forall b. .... $dmop a d = let op :: forall b. ... op = e in op and now the scoping works out. I hope I have now see the last of this code for a bit!
-
Simon Peyton Jones authored
Bryan discovered that a non-trivial record selector (non-trivial in the sense that it has to reconstruct the result value because of UNPACK directives) weren't being inlined. The reason was that the unfolding generated by MkId.mRecordSelId was never being optimised *at all*, and hence looked big, and hence wasn't inlined. (The out-of-line version *is* put into the code of the module and *is* optimised, which made this bug pretty puzzling. But the unfolding inside the record-selector-Id itself, which is a GlobalId and hence does not get its inlining updated like LocalIds, was big and fat.) Solution: I wrote a very simple optimiser, CoreUnfold.simplOptExpr, which does enough optimisation to solve this particular problem. It's short, simple, and will be useful in other contexts.
-
Simon Peyton Jones authored
-
Simon Peyton Jones authored
HsWrappers are horribly inconsistent at the moment. I intended that WpLam, WpApp are for evidence abstraction/application WpTyLam, WpTyApp are for type abstraction/application But when we zonk (WpApp co), where co is a coercion variable, we get a *coercion* not a coercion *variable*. So for now I'm making it into a WpTyApp, which the desugarer handles perfectly well. (I'd forgotten to zonk it properly at all; that is the bug that this patch fixes.)
-
Simon Peyton Jones authored
-
Simon Peyton Jones authored
-
Simon Peyton Jones authored
When setting implied flags, do so recursively. So if -Xa implies -Xb, and -Xb implies -Xc, we do the right thing. I thought we needed this, but we don't. But it seems like a good idea anyway.
-
Simon Peyton Jones authored
-
Simon Peyton Jones authored
-
Simon Peyton Jones authored
-
- Sep 09, 2008
-
-
Simon Peyton Jones authored
This one was missed when the error-ids all moved to Control.Exception.Base (The nofib test 'fluid' showed it up.)
-
Simon Peyton Jones authored
See Note [Floating in past a lambda group]. The new thing here is that we previously were not floating in past a group that had (\(a:*) \(x:State# a). e), with a type var *and* a one-shot lambda. The fix makes wave4main allocate 2% less, and doesn't change any other nofib number, so it's not a big deal.
-
Simon Peyton Jones authored
See Note [Inlining in ArgCtxt]. This very small change gives quite a big performance win. Just showing the bigger ones: Program Size Allocs Runtime -------------------------------------------------------------------------------- anna -0.7% -4.3% 0.15 cichelli -0.6% -6.4% 0.15 fulsom -0.4% -18.5% -8.1% gcd -0.6% -12.0% 0.06 integer -0.6% -16.2% -8.4% power -0.7% -19.3% -4.8% -------------------------------------------------------------------------------- Min -0.7% -19.3% -15.7% Max -0.1% +0.1% +5.7% Geometric Mean -0.6% -1.9% -4.3% The original change was to improve a case that Roman found (see test eyeball/inline1) but that seems to work ok now anyway.
-
Simon Marlow authored
-
Simon Marlow authored
Fixes crash when using compacting GC in parallel programs
-
Simon Marlow authored
-
Simon Marlow authored
-