- 05 Aug, 2012 1 commit
-
-
ian@well-typed.com authored
-
- 18 Jul, 2012 1 commit
-
-
pcapriotti authored
Commit 3fcf5bdf made the output of -ddump-rule-firings and -ddump-rule-rewrites excessively verbose. Fixed by removing the extra blank lines and separator when the header of dump is empty.
-
- 13 Jul, 2012 1 commit
-
-
pcapriotti authored
Make -ddump-rules, -ddump-rule-firings and -ddump-rule-rewrites behave like the other -ddump flags, by using the dumpSDoc function instance of pprDefiniteTrace.
-
- 27 Jun, 2012 1 commit
-
-
Silent superclass parameters solve the problem that the superclasses of a dicionary construction can easily turn out to be (wrongly) bottom. The problem and solution are described in Note [Silent superclass arguments] in TcInstDcls I first implemented this fix (with Dimitrios) in Dec 2010, but removed it again in Jun 2011 becuase we thought it wasn't necessary any more. (The reason we thought it wasn't necessary is that we'd stopped generating derived superclass constraints for *wanteds*. But we were wrong; that didn't solve the superclass-loop problem.) So we have to re-implement it. It's not hard. Main features: * The IdDetails for a DFunId says how many silent arguments it has * A DFunUnfolding describes which dictionary args are just parameters (DFunLamArg) and which are a function to apply to the parameters (DFunPolyArg). This adds the DFunArg type to CoreSyn * Consequential changes to IfaceSyn. (Binary hi file format changes slightly.) * TcInstDcls changes to generate the right dfuns * CoreSubst.exprIsConApp_maybe handles the new DFunUnfolding The thing taht is *not* done yet is to alter the vectoriser to pass the relevant extra argument when building a PA dictionary.
-
- 12 Jun, 2012 1 commit
-
-
Ian Lynagh authored
-
- 11 Jun, 2012 1 commit
-
-
Ian Lynagh authored
To help with this, we now also pass DynFlags around inside the SpecM monad.
-
- 05 Jun, 2012 1 commit
-
-
Ian Lynagh authored
By using Haskell's debugIsOn rather than CPP's "#ifdef DEBUG", we don't need to kludge things to keep the warning checker happy etc.
-
- 09 May, 2012 2 commits
-
-
Simon Peyton Jones authored
-
Simon Peyton Jones authored
* Put the result type in the Stop continuation * No need for the alts type in Select The result is a modest but useful simplification
-
- 02 May, 2012 1 commit
-
-
Simon Peyton Jones authored
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'
-
- 27 Apr, 2012 4 commits
-
-
Simon Peyton Jones authored
This reverts commit 745ec959. Sigh. Seg fault
-
Simon Peyton Jones authored
This reverts commit e3f8557c. Sigh. Seg fault.
-
Simon Peyton Jones authored
In the previous commit about "aggressive primops" I wanted a new function CoreUtils.exprCertainlyTerminates. In doing this I ended up with a significant refactoring in CoreUtils. The new structure has quite a lot of nice sharing: exprIsCheap = exprIsCheap' isHNFApp exprIsExpandable = exprIsCheap' isConLikeApp exprIsHNF = exprIsHNFlike isHNFApp exprIsConLike = exprIsHNFlike isConLikeApp exprCertainlyTerminates = exprIsHNFlike isTerminatingApp This patch also does some renaming CheapAppFun --> FunAppAnalyser isCheapApp --> isHNFApp isExpandableApp --> isConLikeApp
-
Simon Peyton Jones authored
I'm experimenting with making GHC a bit more aggressive about a) dropping case expressions if the result is unused Simplify.rebuildCase, CaseElim equation b) floating case expressions inwards FloatIn.fiExpr, AnnCase In both cases the new behaviour is gotten with a static (debug) flag -faggressive-primops. The extra "aggression" is to allow discarding and floating in for side-effecting operations. See the new, extensive Note [PrimOp can_fail and has_side_effects] and Note [Aggressive PrimOps] in PrimoOp. When discarding a case with unused binders, in the lifted-type case it's definitely ok if the scrutinee terminates; previously we were checking exprOkForSpeculation, which is significantly worse. There's a related change to CoreUtils/CoreArity, but I'll put that in the next commit.
-
- 30 Mar, 2012 1 commit
-
-
Simon Peyton Jones authored
-
- 21 Mar, 2012 1 commit
-
-
batterseapower authored
Makes the following changes: 1. Generalises the type signatures of some functions relating to alternatives so that the type of "variables" and "expression" is not specified 2. Puts the bulk of the alternative-filtering code into a new function filterAlts (in CoreUtils) that can be used outside of the SimplM monad 3. Allows prepareAlts to return a null alternatives list if none are applicable - it turns out that this case was already handled by the caller (in the simplifier). This should result in a modest optimisation improvement in some cases. Conflicts: compiler/coreSyn/CoreUtils.lhs compiler/simplCore/SimplUtils.lhs
-
- 04 Mar, 2012 1 commit
-
-
Simon Peyton Jones authored
(Roman wanted this.)
-
- 16 Feb, 2012 1 commit
-
-
Simon Peyton Jones authored
-
- 19 Jan, 2012 1 commit
-
-
Ian Lynagh authored
-
- 16 Jan, 2012 1 commit
-
-
Simon Marlow authored
This reverts commit 601c983d.
-
- 13 Jan, 2012 1 commit
-
-
Simon Peyton Jones authored
I'm experimenting with making GHC a bit more aggressive about a) dropping case expressions if the result is unused Simplify.rebuildCase, CaseElim equation b) floating case expressions inwards FloatIn.fiExpr, AnnCase In both cases the new behaviour is gotten with a static (debug) flag -faggressive-primops. The extra "aggression" is to allow discarding and floating in for side-effecting operations. See the new, extensive Note [PrimOp can_fail and has_side_effects] in PrimoOp. When discarding a case with unused binders, in the lifted-type case it's definitely ok if the scrutinee terminates; previously we were checking exprOkForSpeculation, which is significantly worse. So I wanted a new function CoreUtils.exprCertainlyTerminates. In doing this I ended up with a significant refactoring in CoreUtils. The new structure has quite a lot of nice sharing: exprIsCheap = exprIsCheap' isHNFApp exprIsExpandable = exprIsCheap' isConLikeApp exprIsHNF = exprIsHNFlike isHNFApp exprIsConLike = exprIsHNFlike isConLikeApp exprCertainlyTerminates = exprIsHNFlike isTerminatingApp
-
- 12 Jan, 2012 1 commit
-
-
Simon Peyton Jones authored
Two changes here * The main change here is to enhance the FloatIn pass so that it can float case-bindings inwards. In particular the case bindings for array indexing. * Also change the code in Simplify, to allow a case on array indexing (ie can_fail is true) to be discarded altogether if its results are unused. Lots of new comments in PrimOp about can_fail and has_side_effects Some refactoring to share the FloatBind data structure between FloatIn and FloatOut
-
- 09 Jan, 2012 1 commit
-
-
Simon Peyton Jones authored
Otherwise the RHS is utterly bogus. I also added some asserts. Thanks to Max for pointing this out.
-
- 07 Dec, 2011 1 commit
-
-
Simon Marlow authored
We had some special cases to handle things like case (scc c (case E of alts)) of alts' but it only worked when there was a single scc in the way. This generalises the optimisation to handle multiple sccs and ticks, so that we can catch most case-of-case optimisations that would normally apply in the absence of profiling. This fixes the example in #5363, and nofib results (with -prof -fprof-auto) show that allocation universally goes down or stays the same.
-
- 16 Nov, 2011 1 commit
-
-
dimitris authored
-
- 14 Nov, 2011 2 commits
-
-
Simon Peyton Jones authored
-
Simon Marlow authored
See comments for details
-
- 11 Nov, 2011 2 commits
-
-
Simon Peyton Jones authored
-
dreixel authored
This big patch implements a kind-polymorphic core for GHC. The current implementation focuses on making sure that all kind-monomorphic programs still work in the new core; it is not yet guaranteed that kind-polymorphic programs (using the new -XPolyKinds flag) will work. For more information, see http://haskell.org/haskellwiki/GHC/Kinds
-
- 10 Nov, 2011 1 commit
-
-
Simon Marlow authored
Fixes some core-lint errors when compiling with profiling
-
- 09 Nov, 2011 1 commit
-
-
Simon Peyton Jones authored
...and make sure it is, esp in the call to findAlt in the mighty Simplifier. Failing to check this led to searching a bunch of DataAlts for a LitAlt Integer. Naughty. See Trac #5603 for a case in point.
-
- 04 Nov, 2011 2 commits
-
-
Simon Marlow authored
We want to prevent the SCC from getting in the way when we have case-of-scc-of-case, and the case-of-case would transform, so we push the scc inside the inner case to allow the case-of-case to take place. See comments for details.
-
Ian Lynagh authored
We only use it for "compiler" sources, i.e. not for libraries. Many modules have a -fno-warn-tabs kludge for now.
-
- 02 Nov, 2011 2 commits
-
-
Simon Marlow authored
-
Simon Marlow authored
User visible changes ==================== Profilng -------- Flags renamed (the old ones are still accepted for now): OLD NEW --------- ------------ -auto-all -fprof-auto -auto -fprof-exported -caf-all -fprof-cafs New flags: -fprof-auto Annotates all bindings (not just top-level ones) with SCCs -fprof-top Annotates just top-level bindings with SCCs -fprof-exported Annotates just exported bindings with SCCs -fprof-no-count-entries Do not maintain entry counts when profiling (can make profiled code go faster; useful with heap profiling where entry counts are not used) Cost-centre stacks have a new semantics, which should in most cases result in more useful and intuitive profiles. If you find this not to be the case, please let me know. This is the area where I have been experimenting most, and the current solution is probably not the final version, however it does address all the outstanding bugs and seems to be better than GHC 7.2. Stack traces ------------ +RTS -xc now gives more information. If the exception originates from a CAF (as is common, because GHC tends to lift exceptions out to the top-level), then the RTS walks up the stack and reports the stack in the enclosing update frame(s). Result: +RTS -xc is much more useful now - but you still have to compile for profiling to get it. I've played around a little with adding 'head []' to GHC itself, and +RTS -xc does pinpoint the problem quite accurately. I plan to add more facilities for stack tracing (e.g. in GHCi) in the future. Coverage (HPC) -------------- * derived instances are now coloured yellow if they weren't used * likewise record field names * entry counts are more accurate (hpc --fun-entry-count) * tab width is now correct (markup was previously off in source with tabs) Internal changes ================ In Core, the Note constructor has been replaced by Tick (Tickish b) (Expr b) which is used to represent all the kinds of source annotation we support: profiling SCCs, HPC ticks, and GHCi breakpoints. Depending on the properties of the Tickish, different transformations apply to Tick. See CoreUtils.mkTick for details. Tickets ======= This commit closes the following tickets, test cases to follow: - Close #2552: not a bug, but the behaviour is now more intuitive (test is T2552) - Close #680 (test is T680) - Close #1531 (test is result001) - Close #949 (test is T949) - Close #2466: test case has bitrotted (doesn't compile against current version of vector-space package)
-
- 23 Sep, 2011 1 commit
-
-
Simon Peyton Jones authored
This addresses the rare cases where the simplifier diverges (see the above ticket). We were already counting how many simplifier steps were taking place, but with no limit. This patch adds a limit; at which point we halt compilation, and print out useful stats. The stats show what is begin inlined, and how often, which points you directly to the problem. The limit is set based on the size of the program. Instead of halting compilation, we could instead just inhibit inlining, which would let compilation of the module complete. This is a bit harder to implement, and it's likely to mean that you unrolled the function 1143 times and then ran out of ticks; you probably don't want to complete parsing on this highly-unrolled program. Flags: -dsimpl-tick-factor=N. Default is 100 (percent). A bigger number increases the allowed maximum tick count.
-
- 07 Sep, 2011 1 commit
-
-
Simon Peyton Jones authored
-
- 06 Sep, 2011 1 commit
-
-
batterseapower authored
-
- 21 Jul, 2011 1 commit
-
-
Simon Peyton Jones authored
I realised that my recently-added cunning stuff about RULES for imported Ids was simply wrong, so this patch removes it. See Note [Rules for imported functions], which explains it all. This patch also does quite a bit of refactoring in the treatment of loop breakers.
-
- 15 Jul, 2011 1 commit
-
-
Simon Peyton Jones authored
-