12 years agoFix Trac #3966: warn about useless UNPACK pragmas [Thu, 6 May 2010 16:33:37 +0000 (16:33 +0000)]
Fix Trac #3966: warn about useless UNPACK pragmas

Warning about useless UNPACK pragmas wasn't as easy as I thought.
I did quite a bit of refactoring, which improved the code by refining
the types somewhat.  In particular notice that in DataCon, we have

    dcStrictMarks   :: [HsBang]
    dcRepStrictness :: [StrictnessMarks]

The former relates to the *source-code* annotation, the latter to
GHC's representation choice.

12 years agoMake tcg_dus behave more sanely; fixes a mkUsageInfo panic [Thu, 6 May 2010 16:27:19 +0000 (16:27 +0000)]
Make tcg_dus behave more sanely; fixes a mkUsageInfo panic

The tcg_dus field used to contain *uses* of type and class decls,
but not *defs*.  That was inconsistent, and it really went wrong
for Template Haskell bracket.  What happened was that
 foo = [d| data A = A
           f :: A -> A
           f x = x |]
would find a "use" of A when processing the top level of the module,
which in turn led to a mkUsageInfo panic in MkIface.  The cause was
the fact that the tcg_dus for the nested quote didn't have defs for

12 years agoAdd a HsExplicitFlag to SpliceDecl, to improve Trac #4042 [Thu, 6 May 2010 16:15:23 +0000 (16:15 +0000)]
Add a HsExplicitFlag to SpliceDecl, to improve Trac #4042

The issue here is that

    g :: A -> A
    data A = A

is treated as if you'd written $(f); that is the call of
f is a top-level Template Haskell splice.  This patch
makes sure that we *first* check the -XTemplateHaskellFlag
and bleat about a parse error if it's off.  Othewise we
get strange seeing "A is out of scope" errors.

12 years agoChange an assert to a warn [Thu, 6 May 2010 16:11:11 +0000 (16:11 +0000)]
Change an assert to a warn

This is in the constraint simplifier which I'm about
to rewrite, so I'm hoping the assert isn't fatal!

12 years agoTidy up debug print a little [Thu, 6 May 2010 16:10:27 +0000 (16:10 +0000)]
Tidy up debug print a little

12 years agoRemove useless UNPACK pragmas [Thu, 6 May 2010 16:10:12 +0000 (16:10 +0000)]
Remove useless UNPACK pragmas

12 years agoAdd WARNM2 macro, plus some refactoring [Thu, 6 May 2010 16:08:08 +0000 (16:08 +0000)]
Add WARNM2 macro, plus some refactoring

12 years agoUse -Wwarn for the binary package, becuase it has redundant UNPACK pragmas [Thu, 6 May 2010 16:07:50 +0000 (16:07 +0000)]
Use -Wwarn for the binary package, becuase it has redundant UNPACK pragmas

12 years agoFix Trac #3966: warn about unused UNPACK pragmas [Fri, 9 Apr 2010 20:18:12 +0000 (20:18 +0000)]
Fix Trac #3966: warn about unused UNPACK pragmas

12 years agoFix Trac #3953: fail earlier when using a bogus quasiquoter [Fri, 9 Apr 2010 20:17:48 +0000 (20:17 +0000)]
Fix Trac #3953: fail earlier when using a bogus quasiquoter

12 years agoFix Trac #3965: tighten conditions when deriving Data [Fri, 9 Apr 2010 18:44:20 +0000 (18:44 +0000)]
Fix Trac #3965: tighten conditions when deriving Data

It's tricky to set up the context for a Data instance.  I got it wrong
once, and fixed it -- hence the "extra_constraints" in

But it still wasn't right!  The tricky bit is that dataCast1 is only
generated when T :: *->*, and dataCast2 when T :: *->*->*. (See
the code in TcGenDeriv for dataCastX.

12 years agoFix Trac #3964: view patterns in DsArrows [Fri, 9 Apr 2010 16:55:57 +0000 (16:55 +0000)]
Fix Trac #3964: view patterns in DsArrows

Just a missing case; I've eliminated the catch-all so
that we get a warning next time we extend HsPat

12 years agoFix Trac #3955: renamer and type variables [Fri, 9 Apr 2010 16:37:10 +0000 (16:37 +0000)]
Fix Trac #3955: renamer and type variables

The renamer wasn't computing the free variables of a type declaration
properly.  This patch refactors a bit, and makes it more robust,
fixing #3955 and several other closely-related bugs.  (We were
omitting some free variables and that could just possibly lead to a
usage-version tracking error.

12 years agoLayout only [Fri, 9 Apr 2010 16:35:06 +0000 (16:35 +0000)]
Layout only

12 years agoGive a better deprecated message for INCLUDE pragmas; fixes #3933
Ian Lynagh [Thu, 6 May 2010 13:09:10 +0000 (13:09 +0000)]
Give a better deprecated message for INCLUDE pragmas; fixes #3933
We now have a DeprecatedFullText constructor, so we can override the
"-#include is deprecated: " part of the warning.

12 years agoDe-haddock a comment that confuses haddock
Ian Lynagh [Thu, 6 May 2010 12:36:07 +0000 (12:36 +0000)]
De-haddock a comment that confuses haddock

12 years agoFix comment to not confuse haddock
Ian Lynagh [Thu, 6 May 2010 11:36:42 +0000 (11:36 +0000)]
Fix comment to not confuse haddock

12 years agoDetect EOF when trying to parse a string in hp2ps
Ian Lynagh [Thu, 6 May 2010 00:08:30 +0000 (00:08 +0000)]
Detect EOF when trying to parse a string in hp2ps

12 years agoMake the demand analyser sdd demands for strict constructors [Wed, 5 May 2010 20:09:36 +0000 (20:09 +0000)]
Make the demand analyser sdd demands for strict constructors

This opportunity was spotted by Roman, and is documented in
Note [Add demands for strict constructors] in DmdAnal.

12 years agoFix interaction of exprIsCheap and the lone-variable inlining check [Wed, 5 May 2010 20:07:23 +0000 (20:07 +0000)]
Fix interaction of exprIsCheap and the lone-variable inlining check

See Note [Interaction of exprIsCheap and lone variables] in CoreUnfold

This buglet meant that a nullary definition with an INLINE pragma
counter-intuitively didn't get inlined at all.  Roman identified
the bug.

12 years agoMatching cases in SpecConstr and Rules [Wed, 5 May 2010 20:05:43 +0000 (20:05 +0000)]
Matching cases in SpecConstr and Rules

This patch has zero effect.  It includes comments,
a bit of refactoring, and a tiny bit of commment-out
code go implement the "matching cases" idea below.

In the end I've left it disabled because while I think
it does no harm I don't think it'll do any good either.
But I didn't want to lose the idea totally. There's
a thread called "Storable and constant memory" on
the list (Apr 2010) about it.

Note [Matching cases]
{- NOTE: This idea is currently disabled.  It really only works if
         the primops involved are OkForSpeculation, and, since
 they have side effects readIntOfAddr and touch are not.
 Maybe we'll get back to this later .  -}

   f (case readIntOffAddr# p# i# realWorld# of { (# s#, n# #) ->
      case touch# fp s# of { _ ->
      I# n# } } )
This happened in a tight loop generated by stream fusion that
Roman encountered.  We'd like to treat this just like the let
case, because the primops concerned are ok-for-speculation.
That is, we'd like to behave as if it had been
   case readIntOffAddr# p# i# realWorld# of { (# s#, n# #) ->
   case touch# fp s# of { _ ->
   f (I# n# } } )

12 years agoComments only [Tue, 4 May 2010 16:36:29 +0000 (16:36 +0000)]
Comments only

12 years agoComments only [Tue, 4 May 2010 16:35:29 +0000 (16:35 +0000)]
Comments only

12 years agoComments only [Tue, 4 May 2010 16:34:57 +0000 (16:34 +0000)]
Comments only

12 years agoComments only (about type families) [Sat, 17 Apr 2010 14:50:32 +0000 (14:50 +0000)]
Comments only (about type families)

12 years agoFix hp2ps when the .hp file has large string literals
Ian Lynagh [Wed, 5 May 2010 19:19:21 +0000 (19:19 +0000)]
Fix hp2ps when the .hp file has large string literals

12 years agoIn build system, call package-config after including package data
Ian Lynagh [Tue, 4 May 2010 22:50:35 +0000 (22:50 +0000)]
In build system, call package-config after including package data
Otherwise the $1_$2_HC_OPTS variable gets clobbered.

12 years agorunghc: flush stdout/stderr on an exception (#3890)
Simon Marlow [Wed, 5 May 2010 13:38:48 +0000 (13:38 +0000)]
runghc: flush stdout/stderr on an exception (#3890)

12 years agoRemove the Unicode alternative for ".." (#3894)
Simon Marlow [Wed, 5 May 2010 12:12:02 +0000 (12:12 +0000)]
Remove the Unicode alternative for ".." (#3894)

12 years agotidyup; no functional changes
Simon Marlow [Wed, 5 May 2010 11:50:15 +0000 (11:50 +0000)]
tidyup; no functional changes

12 years agoMake the running_finalizers flag task-local
Simon Marlow [Wed, 5 May 2010 11:49:47 +0000 (11:49 +0000)]
Make the running_finalizers flag task-local
Fixes a bug reported by Lennart Augustsson, whereby we could get an
incorrect error from the RTS about re-entry from a finalizer,

12 years agoadd a MAYBE_GC() in killThread#, fixes throwto003(threaded2) looping
Simon Marlow [Wed, 5 May 2010 11:47:46 +0000 (11:47 +0000)]
add a MAYBE_GC() in killThread#, fixes throwto003(threaded2) looping

12 years agoAllow filepath-1.2.*
Simon Marlow [Wed, 5 May 2010 10:11:39 +0000 (10:11 +0000)]
Allow filepath-1.2.*

12 years agoBlockedOnMsgThrowTo is possible in resurrectThreads (#4030)
Simon Marlow [Wed, 5 May 2010 09:45:34 +0000 (09:45 +0000)]
BlockedOnMsgThrowTo is possible in resurrectThreads (#4030)

12 years agoDon't raise a throwTo when the target is masking and BlockedOnBlackHole
Simon Marlow [Wed, 5 May 2010 09:45:06 +0000 (09:45 +0000)]
Don't raise a throwTo when the target is masking and BlockedOnBlackHole

12 years agoFix build with GHC 6.10
Ian Lynagh [Tue, 4 May 2010 18:03:02 +0000 (18:03 +0000)]
Fix build with GHC 6.10
In GHC 6.10, intersectionWith is (a -> b -> a) instead of (a -> b -> c),
so we need to jump through some hoops to get the more general type.

12 years agoThe libffi patches are no longer needed
Ian Lynagh [Tue, 4 May 2010 17:16:03 +0000 (17:16 +0000)]
The libffi patches are no longer needed

12 years agoUse the in-tree windres; fixes trac #4032
Ian Lynagh [Tue, 4 May 2010 17:09:41 +0000 (17:09 +0000)]
Use the in-tree windres; fixes trac #4032

12 years agoPrint unfoldings on lambda-bound variables
Simon PJ [Mon, 3 May 2010 18:18:22 +0000 (18:18 +0000)]
Print unfoldings on lambda-bound variables the unusual case where they have one;
see Note [Case binders and join points] in Simplify.lhs

12 years agoReplace FiniteMap and UniqFM with counterparts from containers.
Milan Straka [Mon, 3 May 2010 17:13:15 +0000 (17:13 +0000)]
Replace FiniteMap and UniqFM with counterparts from containers.

The original interfaces are kept. There is small performance improvement:
- when compiling for five nofib, we get following speedups:
    Average                -----           -2.5%
    Average                -----           -0.6%
    Average                -----           -0.5%
    Average                -----           -5.5%
    Average                -----          -10.3%
- when compiling HPC ten times, we get:
    switches                          oldmaps   newmaps
    -O -fasm                          117.402s  116.081s (98.87%)
    -O -fasm -fregs-graph             119.993s  118.735s (98.95%)
    -O -fasm -fregs-iterative         120.191s  118.607s (98.68%)

12 years agoMake the demand analyser take account of lambda-bound unfoldings
Simon PJ [Mon, 3 May 2010 15:16:30 +0000 (15:16 +0000)]
Make the demand analyser take account of lambda-bound unfoldings

This is a long-standing lurking bug. See Note [Lamba-bound unfoldings]
in DmdAnal.

I'm still not really happy with this lambda-bound-unfolding stuff.

12 years agoFix dynamic libs on OS X, and enable them by default
Ian Lynagh [Mon, 3 May 2010 15:03:02 +0000 (15:03 +0000)]
Fix dynamic libs on OS X, and enable them by default

12 years agoSwitch back to using bytestring from the darcs repo; partially fixes #3855
Ian Lynagh [Sun, 2 May 2010 11:34:58 +0000 (11:34 +0000)]
Switch back to using bytestring from the darcs repo; partially fixes #3855

12 years agoFix some cpp warnings when building on FreeBSD; patch from Gabor PALI
Ian Lynagh [Wed, 28 Apr 2010 15:07:00 +0000 (15:07 +0000)]
Fix some cpp warnings when building on FreeBSD; patch from Gabor PALI

12 years agoFix "make 2"
Ian Lynagh [Tue, 27 Apr 2010 16:22:12 +0000 (16:22 +0000)]
Fix "make 2"
The new Makefile logic was enabling the stage 1 rules when stage=2,
so "make 2" was rebuilding stage 1.

12 years agoInplace programs depend on their shell wrappers
Ian Lynagh [Tue, 27 Apr 2010 16:00:38 +0000 (16:00 +0000)]
Inplace programs depend on their shell wrappers

12 years ago--make is now the default (#3515), and -fno-code works with --make (#3783)
Simon Marlow [Tue, 27 Apr 2010 12:28:51 +0000 (12:28 +0000)]
--make is now the default (#3515), and -fno-code works with --make (#3783)
If the command line contains any Haskell source files, then we behave
as if --make had been given.

The meaning of the -c flag has changed (back): -c now selects one-shot
compilation, but stops before linking.  However, to retain backwards
compatibility, -c is still allowed with --make, and means the same as
--make -no-link.  The -no-link flag has been un-deprecated.

-fno-code is now allowed with --make (#3783); the fact that it was
disabled before was largely accidental, it seems.  We also had some
regressions in this area: it seems that -fno-code was causing a .hc
file to be emitted in certain cases.  I've tidied up the code, there
was no need for -fno-code to be a "mode" flag, as far as I can tell.

-fno-code does not emit interface files, nor does it do recompilation
checking, as suggested in #3783.  This would make Haddock emit
interface files, for example, and I'm fairly sure we don't want to do
that.  Compiling with -fno-code is pretty quick anyway, perhaps we can
get away without recompilation checking.

12 years agoremove duplicate docs for -e in --help output (#4010)
Simon Marlow [Mon, 26 Apr 2010 14:06:42 +0000 (14:06 +0000)]
remove duplicate docs for -e in --help output (#4010)

12 years agoworkaround for #4003, fixes HEAD build with 6.12.2
Simon Marlow [Mon, 26 Apr 2010 10:34:28 +0000 (10:34 +0000)]
workaround for #4003, fixes HEAD build with 6.12.2

12 years agoMake sure all the clean rules are always included
Ian Lynagh [Sat, 24 Apr 2010 18:18:23 +0000 (18:18 +0000)]
Make sure all the clean rules are always included
In particular, this fixes a problem where stage3 bits weren't being cleaned

12 years agoCorrect the name of the amd64/FreeBSD platform in PlatformSupportsSharedLibs
Ian Lynagh [Sat, 24 Apr 2010 13:28:30 +0000 (13:28 +0000)]
Correct the name of the amd64/FreeBSD platform in PlatformSupportsSharedLibs
We weren't getting sharedlibs on amd64/FreeBSD because of this

12 years agoInclude DPH docs in bindists
Ian Lynagh [Sat, 24 Apr 2010 12:31:01 +0000 (12:31 +0000)]
Include DPH docs in bindists

12 years agoreinstate eta-expansion during SimplGently, to fix inlining of sequence_
Simon Marlow [Fri, 23 Apr 2010 12:48:53 +0000 (12:48 +0000)]
reinstate eta-expansion during SimplGently, to fix inlining of sequence_

12 years agofix 64-bit value for W_SHIFT, which thankfully appears to be not used
Simon Marlow [Thu, 22 Apr 2010 21:36:05 +0000 (21:36 +0000)]
fix 64-bit value for W_SHIFT, which thankfully appears to be not used

12 years agoAdd missing constant folding and optimisation for unsigned division
Simon Marlow [Thu, 22 Apr 2010 21:34:43 +0000 (21:34 +0000)]
Add missing constant folding and optimisation for unsigned division
Noticed by Denys Rtveliashvili <>, see #4004

12 years agoFix the GHC API link in the main doc index.html
Ian Lynagh [Thu, 22 Apr 2010 21:32:26 +0000 (21:32 +0000)]
Fix the GHC API link in the main doc index.html

12 years agoGive the right exit code in darcs-all
Ian Lynagh [Wed, 21 Apr 2010 17:13:39 +0000 (17:13 +0000)]
Give the right exit code in darcs-all
Our END block was calling system, which alters $?. So now we save and
restore it.

12 years agoUse StgWord64 instead of ullong
Ian Lynagh [Wed, 21 Apr 2010 16:23:36 +0000 (16:23 +0000)]
Use StgWord64 instead of ullong
This patch also fixes ullong_format_string (renamed to showStgWord64)
so that it works with values outside the 32bit range (trac #3979), and
simplifies the without-commas case.

12 years agoImplement try10Times in Makefile
Ian Lynagh [Tue, 20 Apr 2010 16:59:09 +0000 (16:59 +0000)]
Implement try10Times in Makefile
Avoid using seq, as FreeBSD has jot instead.

12 years agoFix crash in non-threaded RTS on Windows
Simon Marlow [Tue, 20 Apr 2010 12:21:25 +0000 (12:21 +0000)]
Fix crash in non-threaded RTS on Windows
The tso->block_info field is now overwritten by pushOnRunQueue(), but
stg_block_async_info was assuming that it still held a pointer to the
StgAsyncIOResult.  We must therefore save this value somewhere safe
before putting the TSO on the run queue.

12 years agoExpand the scope of the event_buf_mutex to cover io_manager_event
Simon Marlow [Tue, 20 Apr 2010 12:20:26 +0000 (12:20 +0000)]
Expand the scope of the event_buf_mutex to cover io_manager_event
I once saw a failure that I think was due to a race on
io_manager_event, this should fix it.

12 years agoFlags -auto and -auto-all operate only on functions not marked INLINE.
Milan Straka [Wed, 31 Mar 2010 19:10:50 +0000 (19:10 +0000)]
Flags -auto and -auto-all operate only on functions not marked INLINE.

12 years agoSpelling correction for LANGUAGE pragmas
Max Bolingbroke [Tue, 13 Apr 2010 19:28:25 +0000 (19:28 +0000)]
Spelling correction for LANGUAGE pragmas

12 years agoUpdate the user guide so it talks about the newer "do rec" notation everywhere
Ian Lynagh [Fri, 16 Apr 2010 20:54:16 +0000 (20:54 +0000)]
Update the user guide so it talks about the newer "do rec" notation everywhere
Some of the problems highlighted in trac #3968.

12 years agoFix typo
Ian Lynagh [Fri, 16 Apr 2010 20:54:12 +0000 (20:54 +0000)]
Fix typo

12 years agoFix Trac #3950: unifying types of different kinds [Mon, 12 Apr 2010 15:18:45 +0000 (15:18 +0000)]
Fix Trac #3950: unifying types of different kinds

I was assuming that the unifer only unified types of the
same kind, but now we can "defer" unsolved constraints that
invariant no longer holds.  Or at least is's more complicated
to ensure.

This patch takes the path of not assuming the invariant, which
is simpler and more robust.  See
Note [Mismatched type lists and application decomposition]

12 years agoFix Trac #3943: incorrect unused-variable warning [Mon, 12 Apr 2010 15:16:30 +0000 (15:16 +0000)]
Fix Trac #3943: incorrect unused-variable warning

In fixing this I did the usual little bit of refactoring

12 years agoConvert boot and boot-pkgs to perl
Ian Lynagh [Thu, 15 Apr 2010 14:39:19 +0000 (14:39 +0000)]
Convert boot and boot-pkgs to perl
This stops us having to worry about sh/sed/... portability.

12 years agoUse $(MAKE), not make, when recursively calling make
Ian Lynagh [Thu, 15 Apr 2010 12:14:53 +0000 (12:14 +0000)]
Use $(MAKE), not make, when recursively calling make

12 years agoRemove the ghc_ge_609 makefile variables
Ian Lynagh [Mon, 12 Apr 2010 23:56:58 +0000 (23:56 +0000)]
Remove the ghc_ge_609 makefile variables
They are now guaranteed to be YES

12 years agoIncrease the minimum version number required to 6.10 in
Ian Lynagh [Mon, 12 Apr 2010 23:53:13 +0000 (23:53 +0000)]
Increase the minimum version number required to 6.10 in

12 years agoThe bootstrapping compiler is now required to be > 609
Ian Lynagh [Fri, 9 Apr 2010 16:10:46 +0000 (16:10 +0000)]
The bootstrapping compiler is now required to be > 609

12 years agoHandle IND_STATIC in isRetainer
Ian Lynagh [Fri, 9 Apr 2010 10:42:07 +0000 (10:42 +0000)]
Handle IND_STATIC in isRetainer
IND_STATIC used to be an error, but at the moment it can happen
as isAlive doesn't look through IND_STATIC as it ignores static
closures. See trac #3956 for a program that hit this error.

12 years agoAdd Data and Typeable instances to HsSyn
David Waern [Tue, 30 Mar 2010 01:10:20 +0000 (01:10 +0000)]
Add Data and Typeable instances to HsSyn

The instances (and deriving declarations) have been taken from the ghc-syb

12 years agoFix for derefing ThreadRelocated TSOs in MVar operations
Simon Marlow [Wed, 7 Apr 2010 09:28:24 +0000 (09:28 +0000)]
Fix for derefing ThreadRelocated TSOs in MVar operations

12 years agosanity check fix
Simon Marlow [Wed, 7 Apr 2010 09:27:46 +0000 (09:27 +0000)]
sanity check fix

12 years agoget the reg liveness right in the putMVar# heap check
Simon Marlow [Wed, 7 Apr 2010 09:27:24 +0000 (09:27 +0000)]
get the reg liveness right in the putMVar# heap check

12 years agoinitialise the headers of MSG_BLACKHOLE objects properly
Simon Marlow [Wed, 7 Apr 2010 08:17:12 +0000 (08:17 +0000)]
initialise the headers of MSG_BLACKHOLE objects properly

12 years agoinitialise the headers of MVAR_TSO_QUEUE objects properly
Simon Marlow [Wed, 7 Apr 2010 08:15:14 +0000 (08:15 +0000)]
initialise the headers of MVAR_TSO_QUEUE objects properly

12 years agoundo debugging code
Simon Marlow [Tue, 6 Apr 2010 14:27:40 +0000 (14:27 +0000)]
undo debugging code

12 years agoputMVar#: fix reg liveness in the heap check
Simon Marlow [Tue, 6 Apr 2010 13:58:32 +0000 (13:58 +0000)]
putMVar#: fix reg liveness in the heap check

12 years agoaccount for the new BLACKHOLEs in the GHCi debugger
Simon Marlow [Tue, 6 Apr 2010 13:34:06 +0000 (13:34 +0000)]
account for the new BLACKHOLEs in the GHCi debugger

12 years agodon't forget to deRefTSO() in tryWakeupThread()
Simon Marlow [Tue, 6 Apr 2010 13:04:11 +0000 (13:04 +0000)]
don't forget to deRefTSO() in tryWakeupThread()

12 years agoFix bug in popRunQueue
Simon Marlow [Tue, 6 Apr 2010 09:14:53 +0000 (09:14 +0000)]
Fix bug in popRunQueue

12 years agofix bug in migrateThread()
Simon Marlow [Thu, 1 Apr 2010 10:58:40 +0000 (10:58 +0000)]
fix bug in migrateThread()

12 years agoRemove the IND_OLDGEN and IND_OLDGEN_PERM closure types
Simon Marlow [Thu, 1 Apr 2010 09:35:19 +0000 (09:35 +0000)]
Remove the IND_OLDGEN and IND_OLDGEN_PERM closure types
These are no longer used: once upon a time they used to have different
layout from IND and IND_PERM respectively, but that is no longer the
case since we changed the remembered set to be an array of addresses
instead of a linked list of closures.

12 years agoChange the representation of the MVar blocked queue
Simon Marlow [Thu, 1 Apr 2010 09:16:05 +0000 (09:16 +0000)]
Change the representation of the MVar blocked queue

The list of threads blocked on an MVar is now represented as a list of
separately allocated objects rather than being linked through the TSOs
themselves.  This lets us remove a TSO from the list in O(1) time
rather than O(n) time, by marking the list object.  Removing this
linear component fixes some pathalogical performance cases where many
threads were blocked on an MVar and became unreachable simultaneously
(nofib/smp/threads007), or when sending an asynchronous exception to a
TSO in a long list of thread blocked on an MVar.

MVar performance has actually improved by a few percent as a result of
this change, slightly to my surprise.

This is the final cleanup in the sequence, which let me remove the old
way of waking up threads (unblockOne(), MSG_WAKEUP) in favour of the
new way (tryWakeupThread and MSG_TRY_WAKEUP, which is idempotent).  It
is now the case that only the Capability that owns a TSO may modify
its state (well, almost), and this simplifies various things.  More of
the RTS is based on message-passing between Capabilities now.

12 years agoeliminate some duplication with a bit of CPP
Simon Marlow [Tue, 30 Mar 2010 15:43:55 +0000 (15:43 +0000)]
eliminate some duplication with a bit of CPP

12 years agoMake ioManagerDie() idempotent
Simon Marlow [Thu, 1 Apr 2010 10:07:05 +0000 (10:07 +0000)]
Make ioManagerDie() idempotent
Avoids screeds of "event buffer overflowed; event dropped" in

12 years agoMove a thread to the front of the run queue when another thread blocks on it
Simon Marlow [Mon, 29 Mar 2010 14:45:21 +0000 (14:45 +0000)]
Move a thread to the front of the run queue when another thread blocks on it
This fixes #3838, and was made possible by the new BLACKHOLE
infrastructure.  To allow reording of the run queue I had to make it
doubly-linked, which entails some extra trickiness with regard to
GC write barriers and suchlike.

12 years agoremove non-existent MUT_CONS symbols
Simon Marlow [Tue, 30 Mar 2010 15:26:00 +0000 (15:26 +0000)]
remove non-existent MUT_CONS symbols

12 years agochange throwTo to use tryWakeupThread rather than unblockOne
Simon Marlow [Mon, 29 Mar 2010 14:46:13 +0000 (14:46 +0000)]
change throwTo to use tryWakeupThread rather than unblockOne

12 years agotiny GC optimisation
Simon Marlow [Mon, 29 Mar 2010 14:45:51 +0000 (14:45 +0000)]
tiny GC optimisation

12 years agoNew implementation of BLACKHOLEs
Simon Marlow [Mon, 29 Mar 2010 14:44:56 +0000 (14:44 +0000)]
New implementation of BLACKHOLEs

This replaces the global blackhole_queue with a clever scheme that
enables us to queue up blocked threads on the closure that they are
blocked on, while still avoiding atomic instructions in the common


 - gets rid of a locked global data structure and some tricky GC code
   (replacing it with some per-thread data structures and different
   tricky GC code :)

 - wakeups are more prompt: parallel/concurrent performance should
   benefit.  I haven't seen anything dramatic in the parallel
   benchmarks so far, but a couple of threading benchmarks do improve
   a bit.

 - waking up a thread blocked on a blackhole is now O(1) (e.g. if
   it is the target of throwTo).

 - less sharing and better separation of Capabilities: communication
   is done with messages, the data structures are strictly owned by a
   Capability and cannot be modified except by sending messages.

 - this change will utlimately enable us to do more intelligent
   scheduling when threads block on each other.  This is what started
   off the whole thing, but it isn't done yet (#3838).

I'll be documenting all this on the wiki in due course.

12 years agoFix warnings (allow pushOnRunQueue() to not be inlined)
Simon Marlow [Thu, 1 Apr 2010 11:45:59 +0000 (11:45 +0000)]
Fix warnings (allow pushOnRunQueue() to not be inlined)

12 years agoremove out of date comment
Simon Marlow [Thu, 1 Apr 2010 10:58:53 +0000 (10:58 +0000)]
remove out of date comment

12 years agotidy up spacing in stderr traces
Simon Marlow [Fri, 26 Mar 2010 16:31:22 +0000 (16:31 +0000)]
tidy up spacing in stderr traces

12 years agoFix an assertion that was not safe when running in parallel
Simon Marlow [Thu, 25 Mar 2010 14:36:56 +0000 (14:36 +0000)]
Fix an assertion that was not safe when running in parallel

12 years agoNever jump directly to a thunk's entry code, even if it is single-entry
Simon Marlow [Thu, 25 Mar 2010 11:48:47 +0000 (11:48 +0000)]
Never jump directly to a thunk's entry code, even if it is single-entry
I don't think this fixes any bugs as we don't have single-entry thunks
at the moment, but it could cause problems for parallel execution if
we ever did re-introduce update avoidance.

12 years agoRename forgotten -dverbose-simpl to -dverbose-core2core in the docs.
Milan Straka [Wed, 31 Mar 2010 15:36:26 +0000 (15:36 +0000)]
Rename forgotten -dverbose-simpl to -dverbose-core2core in the docs.