ghc.git
9 years agomore aggressive optimization of coercion terms
tom.schrijvers@cs.kuleuven.be [Sun, 8 Nov 2009 18:51:52 +0000 (18:51 +0000)] 
more aggressive optimization of coercion terms

9 years agoImprove debug-printing of the type environment
simonpj@microsoft.com [Fri, 6 Nov 2009 17:40:32 +0000 (17:40 +0000)] 
Improve debug-printing of the type environment

9 years agoTidy up coercions, and implement csel1, csel2, cselR
simonpj@microsoft.com [Fri, 6 Nov 2009 17:38:01 +0000 (17:38 +0000)] 
Tidy up coercions, and implement csel1, csel2, cselR

In preparation for implementing the PushC rule for coercion-swizzling
in the Simplifier, I had to inmplement the three new decomposition
operators for coercions, which I've called csel1, csel2, and cselR.

     co :: ((s1~t1) => r1) ~ ((s2~t2) => r2)
     ---------------------------------------
              csel1 co :: s1~s2

and similarly csel2, cselR.

On the way I fixed the coercionKind function for types of form
          (s1~t2) => r2
which currently are expressed as a forall type.

And I refactored quite a bit to help myself understand what is
going on.

9 years agoComments in OccurAnal
simonpj@microsoft.com [Fri, 6 Nov 2009 14:58:30 +0000 (14:58 +0000)] 
Comments in OccurAnal

9 years agoBarf on unhandled Mach-O relocations in the ghci linker
Manuel M T Chakravarty [Wed, 11 Nov 2009 02:07:12 +0000 (02:07 +0000)] 
Barf on unhandled Mach-O relocations in the ghci linker

- It might be worthwhile to MERGE this to 6.12, BUT somebody should validate
  it on PPC/Mac OS X first.

9 years agoTrack changes to DPH library
Roman Leshchinskiy [Mon, 9 Nov 2009 13:17:46 +0000 (13:17 +0000)] 
Track changes to DPH library

9 years agoRemove dead code
simonpj@microsoft.com [Mon, 9 Nov 2009 10:39:32 +0000 (10:39 +0000)] 
Remove dead code

9 years agoAllow inlining in "SimplGentle" mode
simonpj@microsoft.com [Mon, 9 Nov 2009 10:39:20 +0000 (10:39 +0000)] 
Allow inlining in "SimplGentle" mode

This change helps to break the mutual recursion generated by
an instance declaration.

See Note [Gentle mode] in SimplUtils

9 years agoAugment panic message
simonpj@microsoft.com [Mon, 9 Nov 2009 10:37:26 +0000 (10:37 +0000)] 
Augment panic message

9 years agoWibble to substituting InlWrappers
simonpj@microsoft.com [Mon, 9 Nov 2009 10:37:03 +0000 (10:37 +0000)] 
Wibble to substituting InlWrappers

See Note [Worker inlining] in CoreSubst

9 years agovalidate fixes
Ben.Lippmeier@anu.edu.au [Fri, 6 Nov 2009 09:08:50 +0000 (09:08 +0000)] 
validate fixes

9 years agoAdd missing CgExtCode to ghc.cabal.in
Ben.Lippmeier@anu.edu.au [Fri, 6 Nov 2009 05:08:24 +0000 (05:08 +0000)] 
Add missing CgExtCode to ghc.cabal.in

9 years ago* Refactor CLabel.RtsLabel to CLabel.CmmLabel
Ben.Lippmeier@anu.edu.au [Fri, 6 Nov 2009 03:05:30 +0000 (03:05 +0000)] 
* Refactor CLabel.RtsLabel to CLabel.CmmLabel

The type of the CmmLabel ctor is now
  CmmLabel :: PackageId -> FastString -> CmmLabelInfo -> CLabel

 - When you construct a CmmLabel you have to explicitly say what
   package it is in. Many of these will just use rtsPackageId, but
   I've left it this way to remind people not to pretend labels are
   in the RTS package when they're not.

 - When parsing a Cmm file, labels that are not defined in the
   current file are assumed to be in the RTS package.

   Labels imported like
      import label
   are assumed to be in a generic "foreign" package, which is different
   from the current one.

   Labels imported like
      import "package-name" label
   are marked as coming from the named package.

   This last one is needed for the integer-gmp library as we want to
   refer to labels that are not in the same compilation unit, but
   are in the same non-rts package.

   This should help remove the nasty #ifdef __PIC__ stuff from
   integer-gmp/cbits/gmp-wrappers.cmm

9 years agoAdd missing case to externallyVisibleCLabel
Ben.Lippmeier@anu.edu.au [Thu, 22 Oct 2009 01:01:05 +0000 (01:01 +0000)] 
Add missing case to externallyVisibleCLabel

9 years agoAdd CLabel.CmmLabel and start refactoring
Ben.Lippmeier@anu.edu.au [Sun, 18 Oct 2009 10:53:16 +0000 (10:53 +0000)] 
Add CLabel.CmmLabel and start refactoring

9 years agoHaddockify and clean up commenting
Ben.Lippmeier@anu.edu.au [Sun, 18 Oct 2009 09:25:04 +0000 (09:25 +0000)] 
Haddockify and clean up commenting

9 years agoMerge RtsLabelInfo.Rts* with RtsLabelInfo.Rts*FS
Ben.Lippmeier@anu.edu.au [Sun, 18 Oct 2009 08:38:53 +0000 (08:38 +0000)] 
Merge RtsLabelInfo.Rts* with RtsLabelInfo.Rts*FS

9 years agoTell ghc-cabal what strip program to use
Ian Lynagh [Sun, 8 Nov 2009 12:02:04 +0000 (12:02 +0000)] 
Tell ghc-cabal what strip program to use

9 years agoRemove ext-core
Ian Lynagh [Sun, 8 Nov 2009 01:15:46 +0000 (01:15 +0000)] 
Remove ext-core
It is now a separately maintained package, available from hackage:
http://hackage.haskell.org/package/extcore

9 years agoChange a use of xargs to "$(XARGS)" $(XARGS_OPTS)
Ian Lynagh [Sat, 7 Nov 2009 22:43:28 +0000 (22:43 +0000)] 
Change a use of xargs to "$(XARGS)" $(XARGS_OPTS)

9 years agoSplit XARGS into XARGS and XARGS_OPTS
Ian Lynagh [Sat, 7 Nov 2009 22:37:15 +0000 (22:37 +0000)] 
Split XARGS into XARGS and XARGS_OPTS

9 years agoRemove unused distrib/Makefile-bin-vars.in file
Ian Lynagh [Sat, 7 Nov 2009 21:18:17 +0000 (21:18 +0000)] 
Remove unused distrib/Makefile-bin-vars.in file

9 years agoDefine CONF_CC_OPTS/CONF_LD_OPTS in bindists
Ian Lynagh [Sat, 7 Nov 2009 21:17:47 +0000 (21:17 +0000)] 
Define CONF_CC_OPTS/CONF_LD_OPTS in bindists

9 years agoTweak how shell wrappers are built
Ian Lynagh [Sat, 7 Nov 2009 20:50:42 +0000 (20:50 +0000)] 
Tweak how shell wrappers are built

9 years agoghc-stage2 is now renamed to ghc when it is installed
Ian Lynagh [Sat, 7 Nov 2009 18:36:14 +0000 (18:36 +0000)] 
ghc-stage2 is now renamed to ghc when it is installed
This means that we get the right program name in error messages etc.

9 years agoTweak the shell wrapper scripts
Ian Lynagh [Sat, 7 Nov 2009 18:05:02 +0000 (18:05 +0000)] 
Tweak the shell wrapper scripts
We now separate the executable path from the executable name.
This will allow us to change one but not the other easily.

9 years agomkdirhier now just calls mkdir -p
Ian Lynagh [Sat, 7 Nov 2009 12:08:47 +0000 (12:08 +0000)] 
mkdirhier now just calls mkdir -p
The old shell code apparently didn't work properly with /bin/sh=dash

9 years agoFix the build
Ian Lynagh [Fri, 6 Nov 2009 20:49:27 +0000 (20:49 +0000)] 
Fix the build

9 years agoRollback #1185 fix
Simon Marlow [Fri, 6 Nov 2009 14:05:27 +0000 (14:05 +0000)] 
Rollback #1185 fix

As far as I can tell, the hack I was using in rts/Linker.c won't work
on OS X.  Back to the drawing board.

rolling back:

Tue Nov  3 16:05:47 GMT 2009  Simon Marlow <marlowsd@gmail.com>
  * Fix #1185 (RTS part, also needs corresponding change to libraries/base)
  GHC.Conc.ensureIOManagerIsRunning now creates an IO manager thread if
  one does not exist or has died/exited.

  Unfortunately this exposed a problem caused by the fact that we have
  two base packages, and hence two IO managers, in GHCi: see NOTE
  [io-manager-ghci] in rts/Linker.c.  The workaround can go away if/when
  we switch to a dynamically linked GHCi.

    M ./rts/Linker.c -6 +47
    M ./rts/Schedule.c +4
    M ./rts/package.conf.in +16
    M ./rts/posix/Signals.c -1 +7
    M ./rts/posix/Signals.h +2

Wed Nov  4 10:11:03 GMT 2009  Simon Marlow <marlowsd@gmail.com>
  * hopefully fix validate breakage on OS X and Windows

    M ./rts/Linker.c -1 +1

Wed Nov  4 16:27:40 GMT 2009  Simon Marlow <marlowsd@gmail.com>
  * fix build failure on Windows

    M ./rts/Linker.c -1 +1

9 years agoAccept any non-space characters in a header file (#3624)
Simon Marlow [Fri, 6 Nov 2009 10:23:19 +0000 (10:23 +0000)] 
Accept any non-space characters in a header file (#3624)
The FFI spec doesn't say exactly which characters may occur in a
header file, so to be on the safe side we'll accept anything that
isn't a space.

9 years agoBe a tiny bit keener to inline in the RHS of a let
simonpj@microsoft.com [Thu, 5 Nov 2009 17:04:53 +0000 (17:04 +0000)] 
Be a tiny bit keener to inline in the RHS of a let

Seee Note [RHS of lets] in CoreUnfold

9 years agoAnother refactoring on the shape of an Unfolding
simonpj@microsoft.com [Thu, 5 Nov 2009 17:03:13 +0000 (17:03 +0000)] 
Another refactoring on the shape of an Unfolding

I found that a compulsory unfolding was getting dropped on the floor,
so I took that as a hint to tidy up the data type so that it won't
happen again.  No big change in functionality.

9 years agoAdd notes to cmm-notes, following conversation with John Dias
simonpj@microsoft.com [Thu, 5 Nov 2009 16:55:46 +0000 (16:55 +0000)] 
Add notes to cmm-notes, following conversation with John Dias

9 years agoFix Trac #3640, plus associated refactoring
simonpj@microsoft.com [Thu, 5 Nov 2009 16:55:25 +0000 (16:55 +0000)] 
Fix Trac #3640, plus associated refactoring

In fixing this bug (to do with record puns), I had the usual rush of
blood to the head, and I did quite a bit of refactoring in the way
that duplicate/shadowed names are reported.

I think the result is shorter as well as clearer.

In one place I found it convenient for the renamer to use the ErrCtxt
carried in the monad.  (The renamer used not to have such a context,
but years ago the typechecker and renamer monads became one, so now it
does.)   So now it's availble if you want it in future.

9 years agoComments only
simonpj@microsoft.com [Thu, 5 Nov 2009 16:50:37 +0000 (16:50 +0000)] 
Comments only

9 years agoImprove error reporting when there's an error inside a spliced expression
simonpj@microsoft.com [Thu, 5 Nov 2009 12:07:33 +0000 (12:07 +0000)] 
Improve error reporting when there's an error inside a spliced expression

If an error occurs in *spliced* code, it can be tricky to understand
what is going on.  With this patch, in
     - epxressions
     - types
we give a helpful indicator that it's in the result of a splice.

For declarations it's harder, because they get type-checked in a
group with other non-spliced decls, so I have not made the same improvement.
But it's still better than it was.

9 years agoUpdate layout of error message slightly
simonpj@microsoft.com [Thu, 5 Nov 2009 12:04:43 +0000 (12:04 +0000)] 
Update layout of error message slightly

9 years agoNuke the -finline-if-enough-args flag
simonpj@microsoft.com [Thu, 5 Nov 2009 12:03:59 +0000 (12:03 +0000)] 
Nuke the -finline-if-enough-args flag

By default INLINE functions only inline when they
are given enough arguments, so the flag isn't needed

9 years agoFix some more build bugs exposed by the addition of the ghc dependency to dph
Simon Marlow [Thu, 5 Nov 2009 16:03:21 +0000 (16:03 +0000)] 
Fix some more build bugs exposed by the addition of the ghc dependency to dph
See comments for details.

9 years agoMake installation on *nix work for paths with spaces in their name
Ian Lynagh [Thu, 5 Nov 2009 16:23:00 +0000 (16:23 +0000)] 
Make installation on *nix work for paths with spaces in their name
This means we can remove some conditional stuff from the Makefiles,
and means the testsuite doesn't have to work out whether or not it's
on Windows.

9 years agoFix #3642: m GHC builds using the Haskell Platform
Simon Marlow [Thu, 5 Nov 2009 14:13:10 +0000 (14:13 +0000)] 
Fix #3642: m GHC builds using the Haskell Platform

9 years agoComment only
simonpj@microsoft.com [Wed, 4 Nov 2009 21:41:58 +0000 (21:41 +0000)] 
Comment only

9 years agoComments and layout only, relating to Roman's inlining-and-conlike patch
simonpj@microsoft.com [Thu, 5 Nov 2009 11:48:20 +0000 (11:48 +0000)] 
Comments and layout only, relating to Roman's inlining-and-conlike patch

9 years agoComments only, relating to Roman's new built-in rule for seq
simonpj@microsoft.com [Thu, 5 Nov 2009 11:47:09 +0000 (11:47 +0000)] 
Comments only, relating to Roman's new built-in rule for seq

9 years agoAdd a (DEBUG-only) warning for top-level error thunks with uninformative strictness...
simonpj@microsoft.com [Tue, 3 Nov 2009 15:50:09 +0000 (15:50 +0000)] 
Add a (DEBUG-only) warning for top-level error thunks with uninformative strictness info

In the past I've seen this in an interface file

   foo = error "urk"

but *without* a bottoming strictness info on 'foo'. This WARN just
checks (non-fatally) for the bad case, so that we can track it down easily

9 years agoComment only
simonpj@microsoft.com [Tue, 3 Nov 2009 15:48:11 +0000 (15:48 +0000)] 
Comment only

9 years agoGet the package-data.mk dependencies right
Simon Marlow [Thu, 5 Nov 2009 10:30:25 +0000 (10:30 +0000)] 
Get the package-data.mk dependencies right

9 years agoUpdate docs on ticky-ticky profiling
Simon Marlow [Thu, 5 Nov 2009 10:15:03 +0000 (10:15 +0000)] 
Update docs on ticky-ticky profiling

9 years agoAdd builtin rule to eliminate unnecessary casts in seq
Roman Leshchinskiy [Wed, 4 Nov 2009 23:30:14 +0000 (23:30 +0000)] 
Add builtin rule to eliminate unnecessary casts in seq

The patch adds this rule:

  seq (x `cast` co) y = seq x y

This is subject to the usual treatment of seq rules. It also makes them
match more often: it will rewrite

  seq (f x `cast` co) y = seq (f x) y

and allow a seq rule for f to match.

9 years agoConsider variables with conlike unfoldings interesting
Roman Leshchinskiy [Wed, 4 Nov 2009 14:28:36 +0000 (14:28 +0000)] 
Consider variables with conlike unfoldings interesting

In this expression:

  let x = f (g e1) in e2

the simplifier will inline f if it thinks that (g e1) is an interesting
argument. Until now, this was essentially the case if g was a data constructor
- we'd inline f in the hope that it will inspect and hence eliminate the
constructor application. This patch extends this mechanism to CONLIKE
functions. We consider (g e1) interesting if g is CONLIKE and inline f in the
hope that this will allow rewrite rules to match.

9 years agoTweak simpleOptExpr, so that it respects nested INLINE pragmas
simonpj@microsoft.com [Tue, 3 Nov 2009 15:27:52 +0000 (15:27 +0000)] 
Tweak simpleOptExpr, so that it respects nested INLINE pragmas

9 years agoFix some bugs to do with tools in paths containing spaces
Simon Marlow [Wed, 4 Nov 2009 16:43:43 +0000 (16:43 +0000)] 
Fix some bugs to do with tools in paths containing spaces
Not everything is fixed yet; see #3642

9 years ago#3604: treat TH with -dynamic in the same way as -prof
Simon Marlow [Wed, 4 Nov 2009 16:30:39 +0000 (16:30 +0000)] 
#3604: treat TH with -dynamic in the same way as -prof
That is, you have to build the library/program without -dynamic first,
to get plain object files, and then build it again with -dynamic.

I still need to check whether any changes to Cabal are required to
make this work.

9 years agofix build failure on Windows
Simon Marlow [Wed, 4 Nov 2009 16:27:40 +0000 (16:27 +0000)] 
fix build failure on Windows

9 years agoFinish #3439: -ticky implies -debug at link time; the ticky "way" has gone
Simon Marlow [Wed, 4 Nov 2009 14:55:07 +0000 (14:55 +0000)] 
Finish #3439: -ticky implies -debug at link time; the ticky "way" has gone

To get ticky profiling you still have to compile with -ticky (for
those modules that you want to profile), but you can link with either
-debug or -ticky.

9 years agoadd '-' to the chars allowed in C header file names
Simon Marlow [Wed, 4 Nov 2009 14:40:32 +0000 (14:40 +0000)] 
add '-' to the chars allowed in C header file names

9 years agohopefully fix validate breakage on OS X and Windows
Simon Marlow [Wed, 4 Nov 2009 10:11:03 +0000 (10:11 +0000)] 
hopefully fix validate breakage on OS X and Windows

9 years agoAlways include libraries/dph/ghc.mk in top-level ghc.mk
Roman Leshchinskiy [Wed, 4 Nov 2009 01:19:08 +0000 (01:19 +0000)] 
Always include libraries/dph/ghc.mk in top-level ghc.mk

9 years agoFix non-portable regexp
Roman Leshchinskiy [Wed, 4 Nov 2009 01:18:30 +0000 (01:18 +0000)] 
Fix non-portable regexp

9 years agoFix #1185 (RTS part, also needs corresponding change to libraries/base)
Simon Marlow [Tue, 3 Nov 2009 16:05:47 +0000 (16:05 +0000)] 
Fix #1185 (RTS part, also needs corresponding change to libraries/base)
GHC.Conc.ensureIOManagerIsRunning now creates an IO manager thread if
one does not exist or has died/exited.

Unfortunately this exposed a problem caused by the fact that we have
two base packages, and hence two IO managers, in GHCi: see NOTE
[io-manager-ghci] in rts/Linker.c.  The workaround can go away if/when
we switch to a dynamically linked GHCi.

9 years agoGhciMonad.resume should restore the program's argv and progname
Simon Marlow [Wed, 21 Oct 2009 12:52:40 +0000 (12:52 +0000)] 
GhciMonad.resume should restore the program's argv and progname
I discovered that single-stepping over getArgs gave the wrong answer
sometimes, because we were forgetting to set the program's argv and
progname when resuming at a breakpoint.

Test is ghci.debugger/scripts/getargs.script.

9 years agoRefactor package installation
Ian Lynagh [Tue, 3 Nov 2009 13:33:22 +0000 (13:33 +0000)] 
Refactor package installation
There is now less makefile code duplication.
Also, stage2 packages are registered after GHC, which is important as
they might depend on the ghc package (as dph now does).

9 years agoDocument the CONLIKE pragma
simonpj@microsoft.com [Tue, 3 Nov 2009 13:34:31 +0000 (13:34 +0000)] 
Document the CONLIKE pragma

Do not merge to 6.12

9 years agoDocument the fact that impredicative polymorphism is deprecated
simonpj@microsoft.com [Tue, 3 Nov 2009 13:33:44 +0000 (13:33 +0000)] 
Document the fact that impredicative polymorphism is deprecated

Merge to 6.12

9 years agoMinor change to captalisation in error message only
simonpj@microsoft.com [Mon, 2 Nov 2009 17:22:36 +0000 (17:22 +0000)] 
Minor change to captalisation in error message only

9 years agoImprove documentation of 'rec' in do-notation
simonpj@microsoft.com [Mon, 2 Nov 2009 17:22:17 +0000 (17:22 +0000)] 
Improve documentation of 'rec' in do-notation

Merge to 6.12 along with the main DoRec patch

9 years agoComments only
simonpj@microsoft.com [Mon, 2 Nov 2009 17:21:14 +0000 (17:21 +0000)] 
Comments only

9 years agoMake the arity warning a bit more informative (DEBUG only)
simonpj@microsoft.com [Mon, 2 Nov 2009 17:20:59 +0000 (17:20 +0000)] 
Make the arity warning a bit more informative (DEBUG only)

9 years agoImprove error message for malformed LANGUAGE pragma
simonpj@microsoft.com [Fri, 30 Oct 2009 18:01:14 +0000 (18:01 +0000)] 
Improve error message for malformed LANGUAGE pragma

9 years agoMinor refactoring
simonpj@microsoft.com [Fri, 30 Oct 2009 17:59:07 +0000 (17:59 +0000)] 
Minor refactoring

MkCore.mkCoreTupTy moves to TysWiredIn, where it is called mkBoxedTupleTy

9 years agoRemove unused DYNAMIC_RTS var from rts/ghc.mk
Ben.Lippmeier@anu.edu.au [Tue, 6 Oct 2009 07:25:39 +0000 (07:25 +0000)] 
Remove unused DYNAMIC_RTS var from rts/ghc.mk

9 years agoUse __PIC__ and ming32_TARGET_OS to turn on windows DLL support, not ENABLE_WIN32_DLL...
Ben.Lippmeier@anu.edu.au [Tue, 6 Oct 2009 05:40:32 +0000 (05:40 +0000)] 
Use __PIC__ and ming32_TARGET_OS to turn on windows DLL support, not ENABLE_WIN32_DLL_SUPPORT

9 years agoUse C syntax for casting. 'stgCast' appears to have gone away.
Ben.Lippmeier@anu.edu.au [Tue, 6 Oct 2009 05:34:14 +0000 (05:34 +0000)] 
Use C syntax for casting. 'stgCast' appears to have gone away.

9 years agoHandle deps with numbers in them, like 'wsock32'.
Ben.Lippmeier@anu.edu.au [Tue, 6 Oct 2009 05:26:16 +0000 (05:26 +0000)] 
Handle deps with numbers in them, like 'wsock32'.

9 years agoDefine BootingFromHc in bindists; fixes #3617
Ian Lynagh [Sat, 31 Oct 2009 08:44:26 +0000 (08:44 +0000)] 
Define BootingFromHc in bindists; fixes #3617
This variable is tested when deciding whether or not to add debug to
the list of RTS ways, so it needs to be correctly defined.

9 years agoAdd ghc-cabal dependencies; fixes #3494
Ian Lynagh [Fri, 30 Oct 2009 21:19:28 +0000 (21:19 +0000)] 
Add ghc-cabal dependencies; fixes #3494

9 years agoTurn an ASSERT into a WARN
simonpj@microsoft.com [Fri, 30 Oct 2009 18:00:51 +0000 (18:00 +0000)] 
Turn an ASSERT into a WARN

This is to do with SPECIALISE pragmas in instance declarations,
which I need to think more about

9 years agoBe less noisy in a debug trace (Arity decrease)
simonpj@microsoft.com [Fri, 30 Oct 2009 17:59:43 +0000 (17:59 +0000)] 
Be less noisy in a debug trace (Arity decrease)

9 years agoFix build with DEBUG on
simonpj@microsoft.com [Fri, 30 Oct 2009 17:57:15 +0000 (17:57 +0000)] 
Fix build with DEBUG on

9 years agoCure an assert failure by gathering the right set of free variables
simonpj@microsoft.com [Fri, 30 Oct 2009 17:56:52 +0000 (17:56 +0000)] 
Cure an assert failure by gathering the right set of free variables

9 years agoFix the build with GHC 6.8
Ian Lynagh [Fri, 30 Oct 2009 16:09:08 +0000 (16:09 +0000)] 
Fix the build with GHC 6.8

9 years agoImprove coercion optimisation
simonpj@microsoft.com [Fri, 30 Oct 2009 10:00:34 +0000 (10:00 +0000)] 
Improve coercion optimisation

* Remove trace from optCoercion

* Use simplCoercion for type arguments in the Simplifier
  (because they might be coercions)

9 years agoDeprecate the ImpredicativeTypes feature
simonpj@microsoft.com [Fri, 30 Oct 2009 09:59:29 +0000 (09:59 +0000)] 
Deprecate the ImpredicativeTypes feature

GHC has had an experimental implementation of impredicative
polymorphism for a year or two now (flag -XImpredicativeTypes).
But

  a) The implementation is ridiculously complicated, and the complexity
     is pervasive (in the type checker) rather than localized.
     I'm very unhappy about this, especially as we add more stuff to
     the type checker for type families.

  b) The specification (type system) is well-defined [1], but is also pretty
     complicated, and it's just too hard to predict which programs will
     typecheck and which will not.

So it's time for a re-think.  I propose to deprecate it in 6.12, and
remove it altogether in 6.14.  We may by then have something else to
put in its place.  (There is no lack of candidates [2,3,4]!)

[1] http://research.microsoft.com/en-us/um/people/simonpj/papers/boxy/
[2] http://research.microsoft.com/en-us/um/people/crusso/qml/
[3] http://research.microsoft.com/en-us/um/people/daan/pubs.html
[4] http://gallium.inria.fr/~remy/mlf/

9 years agoFix Trac #3626: TH should reject unboxed tuples
simonpj@microsoft.com [Fri, 30 Oct 2009 09:19:28 +0000 (09:19 +0000)] 
Fix Trac #3626: TH should reject unboxed tuples

This was just a missing test in DsMeta

9 years agofix and enable coercion optimization
tom.schrijvers@cs.kuleuven.be [Wed, 28 Oct 2009 19:53:59 +0000 (19:53 +0000)] 
fix and enable coercion optimization

9 years agoDon't dump Core after every simplifier iteration with -dverbose-core2core
Roman Leshchinskiy [Fri, 30 Oct 2009 02:09:03 +0000 (02:09 +0000)] 
Don't dump Core after every simplifier iteration with -dverbose-core2core

This just restores the behaviour from before the inline patch.

9 years agoAdapt vectoriser to new inlining mechanism
Roman Leshchinskiy [Fri, 30 Oct 2009 00:41:37 +0000 (00:41 +0000)] 
Adapt vectoriser to new inlining mechanism

9 years agoUse packByTag instead of pack in the vectoriser
Roman Leshchinskiy [Fri, 30 Oct 2009 00:30:11 +0000 (00:30 +0000)] 
Use packByTag instead of pack in the vectoriser

9 years agoThe Big INLINE Patch: totally reorganise way that INLINE pragmas work
simonpj@microsoft.com [Thu, 29 Oct 2009 14:30:51 +0000 (14:30 +0000)] 
The Big INLINE Patch: totally reorganise way that INLINE pragmas work

This patch has been a long time in gestation and has, as a
result, accumulated some extra bits and bobs that are only
loosely related.  I separated the bits that are easy to split
off, but the rest comes as one big patch, I'm afraid.

Note that:
 * It comes together with a patch to the 'base' library
 * Interface file formats change slightly, so you need to
   recompile all libraries

The patch is mainly giant tidy-up, driven in part by the
particular stresses of the Data Parallel Haskell project. I don't
expect a big performance win for random programs.  Still, here are the
nofib results, relative to the state of affairs without the patch

        Program           Size    Allocs   Runtime   Elapsed
--------------------------------------------------------------------------------
            Min         -12.7%    -14.5%    -17.5%    -17.8%
            Max          +4.7%    +10.9%     +9.1%     +8.4%
 Geometric Mean          +0.9%     -0.1%     -5.6%     -7.3%

The +10.9% allocation outlier is rewrite, which happens to have a
very delicate optimisation opportunity involving an interaction
of CSE and inlining (see nofib/Simon-nofib-notes). The fact that
the 'before' case found the optimisation is somewhat accidental.
Runtimes seem to go down, but I never kno wwhether to really trust
this number.  Binary sizes wobble a bit, but nothing drastic.

The Main Ideas are as follows.

InlineRules
~~~~~~~~~~~
When you say
      {-# INLINE f #-}
      f x = <rhs>
you intend that calls (f e) are replaced by <rhs>[e/x] So we
should capture (\x.<rhs>) in the Unfolding of 'f', and never meddle
with it.  Meanwhile, we can optimise <rhs> to our heart's content,
leaving the original unfolding intact in Unfolding of 'f'.

So the representation of an Unfolding has changed quite a bit
(see CoreSyn).  An INLINE pragma gives rise to an InlineRule
unfolding.

Moreover, it's only used when 'f' is applied to the
specified number of arguments; that is, the number of argument on
the LHS of the '=' sign in the original source definition.
For example, (.) is now defined in the libraries like this
   {-# INLINE (.) #-}
   (.) f g = \x -> f (g x)
so that it'll inline when applied to two arguments. If 'x' appeared
on the left, thus
   (.) f g x = f (g x)
it'd only inline when applied to three arguments.  This slightly-experimental
change was requested by Roman, but it seems to make sense.

Other associated changes

* Moving the deck chairs in DsBinds, which processes the INLINE pragmas

* In the old system an INLINE pragma made the RHS look like
   (Note InlineMe <rhs>)
  The Note switched off optimisation in <rhs>.  But it was quite
  fragile in corner cases. The new system is more robust, I believe.
  In any case, the InlineMe note has disappeared

* The workerInfo of an Id has also been combined into its Unfolding,
  so it's no longer a separate field of the IdInfo.

* Many changes in CoreUnfold, esp in callSiteInline, which is the critical
  function that decides which function to inline.  Lots of comments added!

* exprIsConApp_maybe has moved to CoreUnfold, since it's so strongly
  associated with "does this expression unfold to a constructor application".
  It can now do some limited beta reduction too, which Roman found
  was an important.

Instance declarations
~~~~~~~~~~~~~~~~~~~~~
It's always been tricky to get the dfuns generated from instance
declarations to work out well.  This is particularly important in
the Data Parallel Haskell project, and I'm now on my fourth attempt,
more or less.

There is a detailed description in TcInstDcls, particularly in
Note [How instance declarations are translated].   Roughly speaking
we now generate a top-level helper function for every method definition
in an instance declaration, so that the dfun takes a particularly
stylised form:
  dfun a d1 d2 = MkD (op1 a d1 d2) (op2 a d1 d2) ...etc...

In fact, it's *so* stylised that we never need to unfold a dfun.
Instead ClassOps have a special rewrite rule that allows us to
short-cut dictionary selection.  Suppose dfun :: Ord a -> Ord [a]
                                            d :: Ord a
Then
    compare (dfun a d)  -->   compare_list a d
in one rewrite, without first inlining the 'compare' selector
and the body of the dfun.

To support this
a) ClassOps have a BuiltInRule (see MkId.dictSelRule)
b) DFuns have a special form of unfolding (CoreSyn.DFunUnfolding)
   which is exploited in CoreUnfold.exprIsConApp_maybe

Implmenting all this required a root-and-branch rework of TcInstDcls
and bits of TcClassDcl.

Default methods
~~~~~~~~~~~~~~~
If you give an INLINE pragma to a default method, it should be just
as if you'd written out that code in each instance declaration, including
the INLINE pragma.  I think that it now *is* so.  As a result, library
code can be simpler; less duplication.

The CONLIKE pragma
~~~~~~~~~~~~~~~~~~
In the DPH project, Roman found cases where he had

   p n k = let x = replicate n k
           in ...(f x)...(g x)....

   {-# RULE f (replicate x) = f_rep x #-}

Normally the RULE would not fire, because doing so involves
(in effect) duplicating the redex (replicate n k).  A new
experimental modifier to the INLINE pragma, {-# INLINE CONLIKE
replicate #-}, allows you to tell GHC to be prepared to duplicate
a call of this function if it allows a RULE to fire.

See Note [CONLIKE pragma] in BasicTypes

Join points
~~~~~~~~~~~
See Note [Case binders and join points] in Simplify

Other refactoring
~~~~~~~~~~~~~~~~~
* I moved endPass from CoreLint to CoreMonad, with associated jigglings

* Better pretty-printing of Core

* The top-level RULES (ones that are not rules for locally-defined things)
  are now substituted on every simplifier iteration.  I'm not sure how
  we got away without doing this before.  This entails a bit more plumbing
  in SimplCore.

* The necessary stuff to serialise and deserialise the new
  info across interface files.

* Something about bottoming floats in SetLevels
      Note [Bottoming floats]

* substUnfolding has moved from SimplEnv to CoreSubs, where it belongs

--------------------------------------------------------------------------------
        Program           Size    Allocs   Runtime   Elapsed
--------------------------------------------------------------------------------
           anna          +2.4%     -0.5%      0.16      0.17
           ansi          +2.6%     -0.1%      0.00      0.00
           atom          -3.8%     -0.0%     -1.0%     -2.5%
         awards          +3.0%     +0.7%      0.00      0.00
         banner          +3.3%     -0.0%      0.00      0.00
     bernouilli          +2.7%     +0.0%     -4.6%     -6.9%
          boyer          +2.6%     +0.0%      0.06      0.07
         boyer2          +4.4%     +0.2%      0.01      0.01
           bspt          +3.2%     +9.6%      0.02      0.02
      cacheprof          +1.4%     -1.0%    -12.2%    -13.6%
       calendar          +2.7%     -1.7%      0.00      0.00
       cichelli          +3.7%     -0.0%      0.13      0.14
        circsim          +3.3%     +0.0%     -2.3%     -9.9%
       clausify          +2.7%     +0.0%      0.05      0.06
  comp_lab_zift          +2.6%     -0.3%     -7.2%     -7.9%
       compress          +3.3%     +0.0%     -8.5%     -9.6%
      compress2          +3.6%     +0.0%    -15.1%    -17.8%
    constraints          +2.7%     -0.6%    -10.0%    -10.7%
   cryptarithm1          +4.5%     +0.0%     -4.7%     -5.7%
   cryptarithm2          +4.3%    -14.5%      0.02      0.02
            cse          +4.4%     -0.0%      0.00      0.00
          eliza          +2.8%     -0.1%      0.00      0.00
          event          +2.6%     -0.0%     -4.9%     -4.4%
         exp3_8          +2.8%     +0.0%     -4.5%     -9.5%
         expert          +2.7%     +0.3%      0.00      0.00
            fem          -2.0%     +0.6%      0.04      0.04
            fft          -6.0%     +1.8%      0.05      0.06
           fft2          -4.8%     +2.7%      0.13      0.14
       fibheaps          +2.6%     -0.6%      0.05      0.05
           fish          +4.1%     +0.0%      0.03      0.04
          fluid          -2.1%     -0.2%      0.01      0.01
         fulsom          -4.8%     +9.2%     +9.1%     +8.4%
         gamteb          -7.1%     -1.3%      0.10      0.11
            gcd          +2.7%     +0.0%      0.05      0.05
    gen_regexps          +3.9%     -0.0%      0.00      0.00
         genfft          +2.7%     -0.1%      0.05      0.06
             gg          -2.7%     -0.1%      0.02      0.02
           grep          +3.2%     -0.0%      0.00      0.00
         hidden          -0.5%     +0.0%    -11.9%    -13.3%
            hpg          -3.0%     -1.8%     +0.0%     -2.4%
            ida          +2.6%     -1.2%      0.17     -9.0%
          infer          +1.7%     -0.8%      0.08      0.09
        integer          +2.5%     -0.0%     -2.6%     -2.2%
      integrate          -5.0%     +0.0%     -1.3%     -2.9%
        knights          +4.3%     -1.5%      0.01      0.01
           lcss          +2.5%     -0.1%     -7.5%     -9.4%
           life          +4.2%     +0.0%     -3.1%     -3.3%
           lift          +2.4%     -3.2%      0.00      0.00
      listcompr          +4.0%     -1.6%      0.16      0.17
       listcopy          +4.0%     -1.4%      0.17      0.18
       maillist          +4.1%     +0.1%      0.09      0.14
         mandel          +2.9%     +0.0%      0.11      0.12
        mandel2          +4.7%     +0.0%      0.01      0.01
        minimax          +3.8%     -0.0%      0.00      0.00
        mkhprog          +3.2%     -4.2%      0.00      0.00
     multiplier          +2.5%     -0.4%     +0.7%     -1.3%
       nucleic2          -9.3%     +0.0%      0.10      0.10
           para          +2.9%     +0.1%     -0.7%     -1.2%
      paraffins         -10.4%     +0.0%      0.20     -1.9%
         parser          +3.1%     -0.0%      0.05      0.05
        parstof          +1.9%     -0.0%      0.00      0.01
            pic          -2.8%     -0.8%      0.01      0.02
          power          +2.1%     +0.1%     -8.5%     -9.0%
         pretty         -12.7%     +0.1%      0.00      0.00
         primes          +2.8%     +0.0%      0.11      0.11
      primetest          +2.5%     -0.0%     -2.1%     -3.1%
         prolog          +3.2%     -7.2%      0.00      0.00
         puzzle          +4.1%     +0.0%     -3.5%     -8.0%
         queens          +2.8%     +0.0%      0.03      0.03
        reptile          +2.2%     -2.2%      0.02      0.02
        rewrite          +3.1%    +10.9%      0.03      0.03
           rfib          -5.2%     +0.2%      0.03      0.03
            rsa          +2.6%     +0.0%      0.05      0.06
            scc          +4.6%     +0.4%      0.00      0.00
          sched          +2.7%     +0.1%      0.03      0.03
            scs          -2.6%     -0.9%     -9.6%    -11.6%
         simple          -4.0%     +0.4%    -14.6%    -14.9%
          solid          -5.6%     -0.6%     -9.3%    -14.3%
        sorting          +3.8%     +0.0%      0.00      0.00
         sphere          -3.6%     +8.5%      0.15      0.16
         symalg          -1.3%     +0.2%      0.03      0.03
            tak          +2.7%     +0.0%      0.02      0.02
      transform          +2.0%     -2.9%     -8.0%     -8.8%
       treejoin          +3.1%     +0.0%    -17.5%    -17.8%
      typecheck          +2.9%     -0.3%     -4.6%     -6.6%
        veritas          +3.9%     -0.3%      0.00      0.00
           wang          -6.2%     +0.0%      0.18     -9.8%
      wave4main         -10.3%     +2.6%     -2.1%     -2.3%
   wheel-sieve1          +2.7%     -0.0%     +0.3%     -0.6%
   wheel-sieve2          +2.7%     +0.0%     -3.7%     -7.5%
           x2n1          -4.1%     +0.1%      0.03      0.04
--------------------------------------------------------------------------------
            Min         -12.7%    -14.5%    -17.5%    -17.8%
            Max          +4.7%    +10.9%     +9.1%     +8.4%
 Geometric Mean          +0.9%     -0.1%     -5.6%     -7.3%

9 years agoComments and -ddump-tc-trace wibbles only
simonpj@microsoft.com [Thu, 29 Oct 2009 12:22:27 +0000 (12:22 +0000)] 
Comments and -ddump-tc-trace wibbles only

9 years agoWhite space only
simonpj@microsoft.com [Thu, 29 Oct 2009 12:19:22 +0000 (12:19 +0000)] 
White space only

9 years agoComments and variable naming only
simonpj@microsoft.com [Thu, 29 Oct 2009 12:18:31 +0000 (12:18 +0000)] 
Comments and variable naming only

9 years agoAdd static flag -funfolding-dict-discount (plus layout changes)
simonpj@microsoft.com [Thu, 29 Oct 2009 12:17:58 +0000 (12:17 +0000)] 
Add static flag -funfolding-dict-discount (plus layout changes)

9 years agoTidy up pretty-printing (use ppUnless)
simonpj@microsoft.com [Thu, 29 Oct 2009 12:16:01 +0000 (12:16 +0000)] 
Tidy up pretty-printing (use ppUnless)

9 years agoA small refactoring in the code for desugaring explicit lists
simonpj@microsoft.com [Thu, 29 Oct 2009 12:14:34 +0000 (12:14 +0000)] 
A small refactoring in the code for desugaring explicit lists

9 years agoWhite space layout only
simonpj@microsoft.com [Thu, 29 Oct 2009 12:04:09 +0000 (12:04 +0000)] 
White space layout only

9 years agoMake `consBag` infixr, and `snocBag` infixl
simonpj@microsoft.com [Thu, 29 Oct 2009 12:02:37 +0000 (12:02 +0000)] 
Make `consBag` infixr, and `snocBag` infixl

9 years agoAdd Outputable.blankLine and use it
simonpj@microsoft.com [Thu, 29 Oct 2009 12:01:55 +0000 (12:01 +0000)] 
Add Outputable.blankLine and use it

9 years agoComments only
simonpj@microsoft.com [Thu, 29 Oct 2009 11:55:39 +0000 (11:55 +0000)] 
Comments only

9 years agoAdd support for NoSpecConstr annotation
Roman Leshchinskiy [Thu, 29 Oct 2009 14:47:43 +0000 (14:47 +0000)] 
Add support for NoSpecConstr annotation

Annotating a type with NoSpecConstr will prevent SpecConstr from specialising
on arguments of that type. The syntax is

import SpecConstr
{-# ANN type T NoSpecConstr #-}