summaryrefslogtreecommitdiff
path: root/compiler
Commit message (Collapse)AuthorAgeFilesLines
* Fix #3182: 64 bit FP value returned by C calls was getting trashedBen.Lippmeier@anu.edu.au2009-04-241-1/+1
| | | | | movss instruction was being used to move the result into the destination register instead of movsd
* Tiny optimisation to mkInlineMesimonpj@microsoft.com2009-04-241-2/+3
|
* Simplify the placeholder binding for naughty record selectorssimonpj@microsoft.com2009-04-231-18/+23
|
* Fix Trac #3176: intercept naughty record selectorssimonpj@microsoft.com2009-04-231-0/+9
| | | | | | | | When making record selectors into ordinary functions (rather than magial implicit Ids) I forgot that they could therefore show up in the *local* TcEnv, not the global one. This fixes that problem, and thereby Trac #3176.
* Better pretty-printing for IdDetailssimonpj@microsoft.com2009-04-231-3/+5
|
* FIX #3166: include the fixity of classes and type synonyms in their fingerprintsSimon Marlow2009-04-211-6/+12
|
* FIX #2682: banish silly cases of the "module Foo is not loaded" errorSimon Marlow2009-04-213-19/+56
| | | | | | | | | | | | | | | | | | | | | | In GHCi if you say 'import Foo' meaning to load a package module Foo, and Foo.hs is found on the search path, then GHCi replies "module Foo is not loaded", because it knows Foo refers to the source file rather than the package module, and you haven't loaded that module with :load. This is consistent with the usual module-finding semantics. However, it isn't particularly useful. And it leads to silly problems like not being able to start GHCi when you happen to be sitting in libraries/base, because GHCi thinks the Prelude hasn't been loaded. So now I've made a slight change to the way that 'import M' works: if M is loaded, then it refers to the loaded module, otherwise it looks for a package module M. This does what the reporter of #2682 wanted, and since it turns an error condition into meaningful behaviour it can't break anything. The only undesirable consequence is that 'import M' might refer to a different M than ':load M'. Hopefully that won't lead to confusion.
* FIX #2500: Don't log warnings in getHeaderSimon Marlow2009-04-211-2/+4
|
* FIX #3153: we lost an EOF sentinel in the event of a lexical errorSimon Marlow2009-04-211-2/+3
|
* FIX #2845: Allow breakpoints on expressions with unlifted typeSimon Marlow2009-04-202-7/+24
| | | | | | | | | | | | | | | | | | | | | | | | | It turns out we can easily support breakpoints on expressions with unlifted types, by translating case tick# of _ -> e into let f = \s . case tick# of _ -> e in f realWorld# instead of just a plain let-binding. This is the same trick that GHC uses for abstracting join points of unlifted type. In #2845, GHC has eta-expanded the tick expression, changing the result type from IO a to (# State#, a #), which was the reason the tick was suddenly being ignored. By supporting ticks on unlifted expressions we can make it work again, although some confusion might arise because _result will no longer be available (it now has unboxed-tuple type, so we can't bind it in the environment). The underlying problem here is that GHC does transformations like eta-expanding the tick expressions, and there's nothing we can do to prevent that.
* SPARC NCG: validate fixesBen.Lippmeier@anu.edu.au2009-04-202-4/+12
|
* SPARC NCG: Base freeRegs on includes/MachRegs.h againBen.Lippmeier@anu.edu.au2009-04-205-84/+387
|
* Really fix Trac #2611 this timepepe iborra2009-04-191-10/+22
| | | | | My previous patch didn't completely solve the problem. I believe I got it right this time.
* Fix Trac #2611pepe iborra2009-04-181-15/+26
| | | | | Fix a bug in :print affecting data types with unboxed components
* Fix #3170: Allow coalescing of the same node during register allocation.Ben.Lippmeier@anu.edu.au2009-04-181-3/+3
| | | | | | The x86 code generator sometimes generates nop moves like movl %vI_a %vI_a, but we'll just ignore them for coalescing purposes instead of emitting an error. It shouldn't hurt anything.
* Fix my previous patch about type parsingDavid Waern2009-04-181-19/+0
| | | | I forgot to record some additional changes.
* Simplify the type grammarDavid Waern2009-04-171-16/+18
| | | | | | | | | | | Simon P-J suggested the following simplifications in #3097: * Allow nested foralls in `ctype` just like in `ctypedoc`. * Use `gentype` rather than `type` in the LHS of type declarations. * Inline `type` in `ctype`. * Rename `gentype` to `type`. This patch does this. Also, the equivalent thing is done for documented types.
* Tweak a Show instanceIan Lynagh2009-04-071-1/+1
|
* Fix Trac #3155: better error message when -XRankNTypes is omittedsimonpj@microsoft.com2009-04-096-14/+32
| | | | | | | | | | | | | | | | | | | | | This patch sligtly re-adjusts the way in which the syntax of types is handled: * In the lexer, '.' and '*' are always accepted in types (previously it was conditional). This things can't mean anything else in H98, which is the only reason for doing things conditionally in the lexer. * As a result '.' in types is never treated as an operator. Instead, lacking a 'forall' keyword, it turns into a plain parse error. * Test for -XKindSignatures in the renamer when processing a) type variable bindings b) types with sigs (ty :: kind-sig) * Make -XKindSignatures be implied by -XTypeFamilies Previously this was buried in the conditonal lexing of '*'
* Use return instead of returnM, and similar tidy-upssimonpj@microsoft.com2009-04-093-95/+77
|
* Make some showSDoc's use OneLineMode rather than PageModeIan Lynagh2009-03-314-7/+18
|
* Make the showSDoc definition more explicitIan Lynagh2009-03-311-1/+1
|
* eliminate warningsdias@eecs.tufts.edu2009-04-032-2/+1
|
* Debugging by Sesame Street:dias@eecs.tufts.edu2009-04-031-1/+1
| | | | | | | | | | | | | | | | One of these things is not like the others: stdPattern :: [LRep] -> Maybe StgHalfWord stdPattern reps = case reps of [] -> Just ARG_NONE -- just void args, probably [N] -> Just ARG_N [P] -> Just ARG_N [F] -> Just ARG_F [D] -> Just ARG_D [L] -> Just ARG_L Today's debugging session was brought to you by the letter P.
* Buggy optimizations caused function-call return to share the function's ↵dias@eecs.tufts.edu2009-03-311-25/+50
| | | | | | | | | entry point - Block concat and branch-chain elimination were allowing a function call to return to the caller's entry point. But that doesn't leave anywhere for the infotable on the stack, since the SP on return must be the same as the SP on entry to the procedure.
* Better handling of node parameter in calling conventionsdias@eecs.tufts.edu2009-03-254-12/+20
| | | | | | - Previously, the node was taken as a parameter, then ignored, for static closures. Goofy. Now, the vestigial node parameters are gone.
* When calling gc, avoid saving node in static closuresdias@eecs.tufts.edu2009-03-232-4/+5
|
* Code simplifications due to call/return separation; some improvements to how ↵dias@eecs.tufts.edu2009-03-235-68/+35
| | | | node argument is managed
* Code simplification due to separate call/return conventionsdias@eecs.tufts.edu2009-03-233-30/+41
|
* Calls with and without passing node arguments more clearly separateddias@eecs.tufts.edu2009-03-237-22/+36
|
* Another small step: call and return conventions specified separately when ↵dias@eecs.tufts.edu2009-03-239-26/+27
| | | | making calls
* Small step toward call-conv improvement: separate out calls and returnsdias@eecs.tufts.edu2009-03-239-27/+35
|
* Adjust inlining heursiticssimonpj@microsoft.com2009-04-034-216/+316
| | | | | | | | | | | | | | | | | | | | | | | | This patch is the result of a long series of nofib-based experiments to improve GHC's inlining heuristics. In the end, I'm not sure how worthwhile it all was: I only got a 1% decrease in code size 1% decrease in allocation and I don't trust the runtime statistics enough to quote. Still, in doing all this I tidied up the code quite a bit, and I understand it much better now, so I'm going to commit it. The main changes are in CoreUnfold, which has lots of new comments. Other changes: - litSize moves from Literal to CoreUnfold - interestingArg moves from SimplUtils to CoreUnfold - the default unfolding threshold (in StaticFlags) reduces from 8 to 6 (since the size calculation has changed a bit)
* Worker/wrapper should make INLINE if it doesn't w/wsimonpj@microsoft.com2009-04-031-12/+37
| | | | | | | | | | | If worker/wrapper decides not to w/w something on the grounds that it's too small, it should add an INLINE pragma. Otherwise, later in the day that small thing might now be big, and we'd wish we'd done the w/w after all. This only made a difference in one nofib program (bspt), but it's an easy change. See Note [Don't w/w inline things (a) and (b)]
* Rewrite a good chunk of CoreAritysimonpj@microsoft.com2009-04-031-116/+213
| | | | | | | | | | | | I found a couple of shortcomings in arity computation, and did quite a bit of refactoring as a result. Regrettably, I have forgotten the details, but I do remember that one part was to do with the infamous "state hack". If we're going to use the state-hack at all, we'd better do it right. Anyway I think this is an improvement. The comments are more up to date too, and more voluminous.
* Comments only; record remarks about removing 'type' nonterminalsimonpj@microsoft.com2009-04-021-11/+37
|
* Don't float case expressions in full lazinesssimonpj@microsoft.com2009-04-021-0/+12
| | | | | | See Note [Case MFEs]; don't float case expressions from a strict context.
* Fix Trac #3118: missing alternativesimonpj@microsoft.com2009-04-024-41/+79
| | | | | | | This patch fixes a rather obscure bug, whereby it's possible for (case C a b of <alts>) to have altenatives that do not inclue (C a b)! See Note [Unreachable code] in CoreUtils.
* Use a local interestingDict function instead of importing ↵simonpj@microsoft.com2009-04-021-8/+17
| | | | | | | | | | SimplUtils.interestingArg I'm changing the details of SimplUtils.interstingArg, and don't want to mess up the way Specialise works, so this patch makes a specilialised (ha) function, Specialise.interestingDict, that is used locally.
* Better panic reportingsimonpj@microsoft.com2009-04-021-8/+15
| | | | | | | Make idDetails and idInfo into proper functions, rather than record fields, so that we can report more informatively if you use thenm on a non-Id.
* Fix pragmas in binder-swappingsimonpj@microsoft.com2009-04-021-4/+8
| | | | | | | In the case binder-swap operation (which is done in OccurAnal), we deliberately use shadowing. But the new shadowing binder should not inherit any fancy INLINE or NOINLINE pragmas from its parent.
* Float constants to top-level even in first full laziness passsimonpj@microsoft.com2009-04-021-3/+10
| | | | | | | | | This patch changes the compilation pipeline flags so that constants are floated to the top level even in the first full laziness pass. For some reason this was not done before. Fixing this makes a big improvement in 'spectral/rewrite', and has zero effect on any other nofib benchmark.
* SPARC NCG: Fix 64 bit addition, carry bit wasn't getting set.Ben.Lippmeier@anu.edu.au2009-03-302-9/+27
|
* SPARC NCG: HpLim is now always stored on the stack, not in a registerBen.Lippmeier@anu.edu.au2009-03-311-3/+4
| | | | | | | | | | | | This fixes the out of memory errors we were getting on sparc after the following patch: Fri Mar 13 03:45:16 PDT 2009 Simon Marlow <marlowsd@gmail.com> * Instead of a separate context-switch flag, set HpLim to zero Ignore-this: 6c5bbe1ce2c5ef551efe98f288483b0 This reduces the latency between a context-switch being triggered and the thread returning to the scheduler, which in turn should reduce the cost of the GC barrier when there are many cores.
* Allow Haddock comments in type synonymsDavid Waern2009-03-311-22/+22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | We now use `ctypedoc` instead of `ctype` for type synonyms. `ctypedoc` was previously only used for top-level type signatures. This change means that type synonyms now can contain comments, just like top-level type signatures. Note: * I've modified `ctypedoc` so it allows implicit parameters and equational constraints, just like ctype. * Since `ctypedoc` allows nested foralls, we now allow that in type synonyms. * I have inlined some productions into gentypedoc so that there is now a non-doc version of every production with a 'doc' suffix. (Stylistic change only, which should make the code easier to follow). * It would have been nice to simplify the grammar by unifying `ctype` and ctypedoc` into one production, allowing comments on types everywhere (and rejecting them after parsing, where necessary). This is however not possible since it leads to ambiguity. The reason is the support for comments on record fields: > data R = R { field :: Int -- ^ comment on the field } If we allow comments on types here, it's not clear if the comment applies to 'field' or to 'Int'. So we must use `ctype` to describe the type.
* mkErrorAppDs now takes an SDoc rather than a StringIan Lynagh2009-03-316-27/+26
| | | | | This avoids some showSDoc's where the String then gets converted back into an SDoc.
* use a UniqSet for is MathFun, this list is getting quite largeSimon Marlow2009-03-301-4/+5
|
* Fix an nasty black hole, concerning computation of isRecursiveTyConsimonpj@microsoft.com2009-03-302-6/+14
| | | | | | | | | | | | | | | | | | | | Fixing #246 (pattern-match order in record patterns) made GHC go into a black hole, by changing the order of patterm matching in TyCon.isProductTyCon! It turned out that GHC had been avoiding the black hole only by the narrowest of margins up to now! The black hole concerned the computation of which type constructors are recursive, in TcTyDecls.calcRecFlags. We now refrain from using isProductTyCon there, since it triggers the black hole (very indirectly). See the "YUK YUK" comment in the body of calcRecFlags. As it turns out, the fact that TyCon.isProductTyCon matched on the algTcRec field was quite redundant, so I removed that too. However, without the fix to calcRecFlags, this wouldn't fix the black hole because of the use of isRecursiveTyCon in BuildTyCl.mkNewTyConRhs. Anyway, it's fine now.
* Add an extra print to -ddump-tc-tracesimonpj@microsoft.com2009-03-301-1/+2
|
* Remove dead code (dataConsStupidTheta)simonpj@microsoft.com2009-03-301-24/+1
|