ghc-hetmet.git
14 years agoFix #3751, also fix some lexical error SrcLocs
Simon Marlow [Thu, 17 Dec 2009 13:26:58 +0000 (13:26 +0000)]
Fix #3751, also fix some lexical error SrcLocs

14 years agokill some old GRAN/PARALLEL_HASKELL code
Simon Marlow [Thu, 17 Dec 2009 10:38:16 +0000 (10:38 +0000)]
kill some old GRAN/PARALLEL_HASKELL code

14 years agoimprove panic messages for srcLocLine, srcLocCol
Simon Marlow [Thu, 17 Dec 2009 10:38:01 +0000 (10:38 +0000)]
improve panic messages for srcLocLine, srcLocCol

14 years agoTweak the build-dependencies rule, and add comments for it
Ian Lynagh [Sat, 19 Dec 2009 14:58:08 +0000 (14:58 +0000)]
Tweak the build-dependencies rule, and add comments for it

14 years agoWhen removing $(TOP) with sed, do so case insensitively
Ian Lynagh [Sat, 19 Dec 2009 13:53:39 +0000 (13:53 +0000)]
When removing $(TOP) with sed, do so case insensitively
This avoids problems on Windows, where drive letters may not be the
case we expect.

14 years agoFix a braino in a comment
Ian Lynagh [Fri, 18 Dec 2009 21:35:41 +0000 (21:35 +0000)]
Fix a braino in a comment

14 years agoAvoid a failing shell command when cleaning
Ian Lynagh [Fri, 18 Dec 2009 20:11:46 +0000 (20:11 +0000)]
Avoid a failing shell command when cleaning
It wasn't fatal, but better to avoid it anyway

14 years agoFix another sed problem on Solaris
Ian Lynagh [Thu, 17 Dec 2009 00:04:21 +0000 (00:04 +0000)]
Fix another sed problem on Solaris

14 years agounused named variables
dias@cs.tufts.edu [Fri, 18 Dec 2009 19:54:30 +0000 (19:54 +0000)]
unused named variables

14 years agomissed a case in a previous fix
dias@cs.tufts.edu [Thu, 17 Dec 2009 21:04:43 +0000 (21:04 +0000)]
missed a case in a previous fix

Here's the obscure problem:
-- However, we also want to allow an assignment to be generated
-- in the case when the types are compatible, because this allows
-- some slightly-dodgy but occasionally-useful casts to be used,
-- such as in RtClosureInspect where we cast an HValue to a MutVar#
-- so we can print out the contents of the MutVar#.  If we generate
-- code that enters the HValue, then we'll get a runtime panic, because
-- the HValue really is a MutVar#.  The types are compatible though,
-- so we can just generate an assignment.

14 years agoFix #650: use a card table to mark dirty sections of mutable arrays
Simon Marlow [Thu, 17 Dec 2009 22:42:28 +0000 (22:42 +0000)]
Fix #650: use a card table to mark dirty sections of mutable arrays
The card table is an array of bytes, placed directly following the
actual array data.  This means that array reading is unaffected, but
array writing needs to read the array size from the header in order to
find the card table.

We use a bytemap rather than a bitmap, because updating the card table
must be multi-thread safe.  Each byte refers to 128 entries of the
array, but this is tunable by changing the constant
MUT_ARR_PTRS_CARD_BITS in includes/Constants.h.

14 years agoFix build with Solaris sed
Ian Lynagh [Wed, 16 Dec 2009 20:43:54 +0000 (20:43 +0000)]
Fix build with Solaris sed
Rather than trying to handle tabs with sed portably, we just use tr to
remove them before we start.

14 years agoBuild and install inplace the count_lines and compareSizes utils
Ian Lynagh [Wed, 16 Dec 2009 16:56:08 +0000 (16:56 +0000)]
Build and install inplace the count_lines and compareSizes utils

14 years agoAdjust Activations for specialise and work/wrap, and better simplify in InlineRules
simonpj@microsoft.com [Wed, 16 Dec 2009 14:52:05 +0000 (14:52 +0000)]
Adjust Activations for specialise and work/wrap, and better simplify in InlineRules

This patch does two main things:

1. Adjusts the way we set the Activation for

   a) The wrappers generated by the strictness analyser
      See Note [Wrapper activation] in WorkWrap

   b) The RULEs generated by Specialise and SpecConstr
      See Note [Auto-specialisation and RULES] in Specialise
          Note [Transfer activation] in SpecConstr

2. Refines how we set the phase when simplifying the right
   hand side of an InlineRule.  See
   Note [Simplifying inside InlineRules] in SimplUtils.

Most of the extra lines are comments!

The merit of (2) is that a bit more stuff happens inside InlineRules,
and that in turn allows better dead-code elimination.

14 years agoComments only
simonpj@microsoft.com [Wed, 16 Dec 2009 14:49:08 +0000 (14:49 +0000)]
Comments only

14 years agofix up libm detection and use (#3724)
Simon Marlow [Wed, 16 Dec 2009 11:36:52 +0000 (11:36 +0000)]
fix up libm detection and use (#3724)

14 years agoconfigure.ac: fix libm checks (Trac #3730)
Sergei Trofimovich [Fri, 4 Dec 2009 21:40:12 +0000 (21:40 +0000)]
configure.ac: fix libm checks (Trac #3730)

libbfd pulled libm as dependency and broke LIBM= detection.

Patch moves libm in library tests as early as possible.
Thanks to asuffield for suggesting such a simple fix.
Thanks to Roie Kerstein and Renato Gallo for finding
and tracking down the issue.

14 years ago#include <sys/select.h> if we have it (#3760)
Simon Marlow [Wed, 16 Dec 2009 09:55:01 +0000 (09:55 +0000)]
#include <sys/select.h> if we have it (#3760)

14 years agoadd a couple of assertions
Simon Marlow [Mon, 23 Nov 2009 10:19:18 +0000 (10:19 +0000)]
add a couple of assertions

14 years agoAdd comments
simonpj@microsoft.com [Wed, 16 Dec 2009 09:03:44 +0000 (09:03 +0000)]
Add comments

14 years agoRefactor to combine two eqExpr functions
simonpj@microsoft.com [Wed, 16 Dec 2009 08:50:33 +0000 (08:50 +0000)]
Refactor to combine two eqExpr functions

I'd forgotten that Rules.lhs already has an eqExpr function.  This
patch combines Rules.eqExpr with the (recent) CoreUtils.eqExpr.

I also did a little refactoring by defining CoreSyn.expandUnfolding_maybe
(see Note [Expanding variables] in Rules.lhs), and using it in
     a) CoreUnfold.exprIsConApp_maybe
     b) Rule matching

14 years agoTwo improvements to optCoercion
simonpj@microsoft.com [Wed, 16 Dec 2009 08:47:06 +0000 (08:47 +0000)]
Two improvements to optCoercion

* Fix a bug that meant that
     (right (inst (forall tv.co) ty))
  wasn't getting optimised.  This showed up in the
  compiled code for ByteCodeItbls

* Add a substitution to optCoercion, so that it simultaneously
  substitutes and optimises.  Both call sites wanted this, and
  optCoercion itself can use it, so it seems a win all round.

14 years agoComments only
simonpj@microsoft.com [Wed, 16 Dec 2009 08:45:58 +0000 (08:45 +0000)]
Comments only

14 years agoMake setInlineActivation left-associative
simonpj@microsoft.com [Wed, 16 Dec 2009 08:45:36 +0000 (08:45 +0000)]
Make setInlineActivation left-associative

14 years agoFix a long-standing infelicity in the type pretty printer
simonpj@microsoft.com [Wed, 16 Dec 2009 08:45:13 +0000 (08:45 +0000)]
Fix a long-standing infelicity in the type pretty printer

We weren't parenthesising
   List (C Int)
correctly, when (C Int) is a PredTy

14 years agoDeal with warnings in Coercion.lhs
simonpj@microsoft.com [Wed, 16 Dec 2009 08:40:53 +0000 (08:40 +0000)]
Deal with warnings in Coercion.lhs

14 years agoFix a bug in the in-scope set that led to some lookupIdSubst errors
simonpj@microsoft.com [Tue, 15 Dec 2009 16:02:16 +0000 (16:02 +0000)]
Fix a bug in the in-scope set that led to some lookupIdSubst errors

14 years agoFix Trac #3717: exprOkForSpeculation should look through case expressions
simonpj@microsoft.com [Tue, 15 Dec 2009 16:01:24 +0000 (16:01 +0000)]
Fix Trac #3717: exprOkForSpeculation should look through case expressions

See Note [exprOkForSpeculation: case expressions] in CoreUtils

14 years agoAdd a size-comparison util
Ian Lynagh [Tue, 15 Dec 2009 20:26:36 +0000 (20:26 +0000)]
Add a size-comparison util

14 years agoJust make C dependencies once, rather than each way
Ian Lynagh [Tue, 15 Dec 2009 13:53:50 +0000 (13:53 +0000)]
Just make C dependencies once, rather than each way
This makes generating C dependencies for the RTS take 3 seconds, rather
than 30.

14 years agoMake addCFileDeps quieter
Ian Lynagh [Tue, 15 Dec 2009 13:40:33 +0000 (13:40 +0000)]
Make addCFileDeps quieter
Move a comment out of the definition, so it doesn't get printed as
a shell command every time we call the definition

14 years agoDon't make C deps for compiler/parser/cutils.c in stage1
Ian Lynagh [Tue, 15 Dec 2009 12:37:57 +0000 (12:37 +0000)]
Don't make C deps for compiler/parser/cutils.c in stage1
CPP finds the Rts.h, RtsFlags.h etc from the tree, rather than the
bootstrapping compiler, and then fails because it doesn't think
RtsFlags.h should be used any more.

14 years agoTidy up computation of result discounts in CoreUnfold
simonpj@microsoft.com [Mon, 14 Dec 2009 13:46:47 +0000 (13:46 +0000)]
Tidy up computation of result discounts in CoreUnfold

Mostly this patch is a tidy-up, but it did reveal one inconsistency
that I fixed.  When computing result discounts for case expressions,
we were *adding* result-discounts for cases on non-arguments, but
*picking the one for the max-size branch* for arguments. I think you
could argue the toss, but it seems neater (and the code is nicer)
to be consistent (ie always add).  See Note [addAltSize result discounts].

The nofib results seem fine

        Program           Size    Allocs   Runtime   Elapsed
--------------------------------------------------------------------------------
          boyer          -0.8%     -4.8%      0.06      0.07
         sphere          -0.7%     -2.5%      0.15      0.16
--------------------------------------------------------------------------------
            Min          -0.8%     -4.8%    -19.1%    -24.8%
            Max          -0.5%     +0.0%     +3.4%   +127.1%
 Geometric Mean          -0.7%     -0.1%     -4.3%     -1.3%

The +127% elapsed is a timing error; I re-ran the same binary and it's
unchanged from the baseline.

14 years agoUse full equality for CSE
simonpj@microsoft.com [Fri, 11 Dec 2009 17:39:20 +0000 (17:39 +0000)]
Use full equality for CSE

In CSE we were getting lots of apprarently-unequal expressions with
the same hash code.  In fact they were perfectly equal -- but we were
using a cheap-and-cheerful equality tests for CoreExpr that said False
for any lambda expression!

This patch adds a proper equality test for Core, with alpha-renaming.
It's easy to do, and will avoid silly cases of CSE failing to fire.

We should get less of this:
  WARNING: file compiler/simplCore/CSE.lhs line 326
  extendCSEnv: long list, length 18
from a compiler built with -DDEBUG

14 years agoImprove strictness analysis for bottoming functions
simonpj@microsoft.com [Fri, 11 Dec 2009 16:23:24 +0000 (16:23 +0000)]
Improve strictness analysis for bottoming functions

I found the following results from strictness analyis:
  f x = error (fst x)      -- Strictness U(SA)b
  g x = error ('y':fst x)  -- Strictness Tb

Surely 'g' is no less strict on 'x' than 'f' is!  The fix turned out
be to very nice and simple.  See Note [Bottom demands] in DmdAnal.

14 years agoBottom extraction: float out bottoming expressions to top level
simonpj@microsoft.com [Fri, 11 Dec 2009 16:19:28 +0000 (16:19 +0000)]
Bottom extraction: float out bottoming expressions to top level

The idea is to float out bottoming expressions to top level,
abstracting them over any variables they mention, if necessary.  This
is good because it makes functions smaller (and more likely to
inline), by keeping error code out of line.

See Note [Bottoming floats] in SetLevels.

On the way, this fixes the HPC failures for cg059 and friends.

I've been meaning to do this for some time.  See Maessen's paper 1999
"Bottom extraction: factoring error handling out of functional
programs" (unpublished I think).

Here are the nofib results:

        Program           Size    Allocs   Runtime   Elapsed
--------------------------------------------------------------------------------
            Min          +0.1%     -7.8%    -14.4%    -32.5%
            Max          +0.5%     +0.2%     +1.6%    +13.8%
 Geometric Mean          +0.4%     -0.2%     -4.9%     -6.7%

Module sizes
        -1 s.d.                -----           -2.6%
        +1 s.d.                -----           +2.3%
        Average                -----           -0.2%

Compile times:
        -1 s.d.                -----          -11.4%
        +1 s.d.                -----           +4.3%
        Average                -----           -3.8%

I'm think program sizes have crept up because the base library
is bigger -- module sizes in nofib decrease very slightly.  In turn
I think that may be because the floating generates a call where
there was no call before.  Anyway I think it's acceptable.

The main changes are:

* SetLevels floats out things that exprBotStrictness_maybe
  identifies as bottom.  Make sure to pin on the right
  strictness info to the newly created Ids, so that the
  info ends up in interface files.

  Since FloatOut is run twice, we have to be careful that we
  don't treat the function created by the first float-out as
  a candidate for the second; this is what worthFloating does.

  See SetLevels Note [Bottoming floats]
                Note [Bottoming floats: eta expansion]

* Be careful not to inline top-level bottoming functions; this
  would just undo what the floating transformation achieves.
  See CoreUnfold Note [Do not inline top-level bottoming functions

  Ensuring this requires a bit of extra plumbing, but nothing drastic..

* Similarly pre/postInlineUnconditionally should be
  careful not to re-inline top-level bottoming things!
  See SimplUtils Note [Top-level botomming Ids]
                 Note [Top level and postInlineUnconditionally]

14 years agoExpose all EventLog events as DTrace probes
Manuel M T Chakravarty [Sat, 12 Dec 2009 10:08:09 +0000 (10:08 +0000)]
Expose all EventLog events as DTrace probes
- Defines a DTrace provider, called 'HaskellEvent', that provides a probe
  for every event of the eventlog framework.
- In contrast to the original eventlog, the DTrace probes are available in
  all flavours of the runtime system (DTrace probes have virtually no
  overhead if not enabled); when -DTRACING is defined both the regular
  event log as well as DTrace probes can be used.
- Currently, Mac OS X only.  User-space DTrace probes are implemented
  differently on Mac OS X than in the original DTrace implementation.
  Nevertheless, it shouldn't be too hard to enable these probes on other
  platforms, too.
- Documentation is at http://hackage.haskell.org/trac/ghc/wiki/DTrace

14 years agoFix two related bugs in u_tys
simonpj@microsoft.com [Fri, 11 Dec 2009 12:01:22 +0000 (12:01 +0000)]
Fix two related bugs in u_tys

When we normalise a type family application we must recursively call
uTys, *not* 'go', because the latter loop is only there to look
through type synonyms.  This bug made the type checker generate
ill-typed coercions, which were rejected by Core Lint.

A related bug only affects the size of coercions.  If faced with
  (m a) ~ (F b c)
where F has arity 1, we want to decompose to
   m ~ F Int,  a ~ c
rather than deferring.  The application decomposition was being
tried last, so we were missing this opportunity.

Thanks to Roman for an example that showed all this up.

14 years agoFix spelling in comment
simonpj@microsoft.com [Fri, 11 Dec 2009 11:57:44 +0000 (11:57 +0000)]
Fix spelling in comment

14 years agoMake -ddump-simpl-stats a bit more informative by default
simonpj@microsoft.com [Tue, 8 Dec 2009 17:54:45 +0000 (17:54 +0000)]
Make -ddump-simpl-stats a bit more informative by default

This mades -ddump-simpl-stats print out per-rule and per-id
information by default, rather than requiring -dppr-debug.
On the whole that is what you want.  The -dppr-debug flag
now just controls printing of the log.

14 years agoImprove dumping for rules, and documentation of same
simonpj@microsoft.com [Tue, 8 Dec 2009 10:55:56 +0000 (10:55 +0000)]
Improve dumping for rules, and documentation of same

Inspired by Trac #3703

14 years agoFix #3741, simplifying things in the process
Simon Marlow [Thu, 10 Dec 2009 16:09:09 +0000 (16:09 +0000)]
Fix #3741, simplifying things in the process
The problem in #3741 was that we had confused column numbers with byte
offsets, which fails in the case of UTF-8 (amongst other things).
Fortunately we're tracking correct column offsets now, so we didn't
have to make a calculation based on a byte offset.  I got rid of two
fields from the PState (last_line_len and last_offs).and one field
from the AI (alex input) constructor.

14 years agoAllow spaces at either end of the C import spec (#3742)
Simon Marlow [Thu, 10 Dec 2009 12:45:37 +0000 (12:45 +0000)]
Allow spaces at either end of the C import spec (#3742)

14 years agoPut README and INSTALL into bindists
Ian Lynagh [Wed, 9 Dec 2009 17:43:05 +0000 (17:43 +0000)]
Put README and INSTALL into bindists
Also tidied up the way configure.ac gets into bindists

14 years agoFix typo
Ian Lynagh [Wed, 9 Dec 2009 15:22:23 +0000 (15:22 +0000)]
Fix typo

14 years agoFix the stage1 version number munging
Ian Lynagh [Wed, 9 Dec 2009 15:17:15 +0000 (15:17 +0000)]
Fix the stage1 version number munging
It was munging 6.12.1 into 62

14 years agoAdd a comment about why $(CPP) is defined the way it is in config.mk.in
Ian Lynagh [Wed, 9 Dec 2009 13:19:17 +0000 (13:19 +0000)]
Add a comment about why $(CPP) is defined the way it is in config.mk.in

14 years agoadd a missing unlockTSO()
Simon Marlow [Wed, 9 Dec 2009 12:41:13 +0000 (12:41 +0000)]
add a missing unlockTSO()

14 years agoEliminate mkdependC
Ian Lynagh [Wed, 9 Dec 2009 12:39:29 +0000 (12:39 +0000)]
Eliminate mkdependC
We now just call gcc to get the dependencies directly

14 years agoChange some HC_OPTS to CC_OPTS, so they are used when making dependencies
Ian Lynagh [Tue, 8 Dec 2009 20:03:15 +0000 (20:03 +0000)]
Change some HC_OPTS to CC_OPTS, so they are used when making dependencies

14 years agoAdd -Iincludes to hp2ps's CC_OPTS
Ian Lynagh [Tue, 8 Dec 2009 17:57:18 +0000 (17:57 +0000)]
Add -Iincludes to hp2ps's CC_OPTS
Making C deps for hp2ps always failed, but we used to carry on regardless

14 years agoadd locking in mkWeakForeignEnv#
Simon Marlow [Tue, 8 Dec 2009 10:12:29 +0000 (10:12 +0000)]
add locking in mkWeakForeignEnv#

14 years agodeclare g0 (fixes compilation failure with -fvia-C)
Simon Marlow [Tue, 8 Dec 2009 10:09:25 +0000 (10:09 +0000)]
declare g0 (fixes compilation failure with -fvia-C)

14 years agosimplify weak pointer processing
Simon Marlow [Tue, 8 Dec 2009 09:48:22 +0000 (09:48 +0000)]
simplify weak pointer processing

14 years agosimplification/optimisation: update tso->bound->tso when scavenging the TSO
Simon Marlow [Tue, 8 Dec 2009 08:57:39 +0000 (08:57 +0000)]
simplification/optimisation: update tso->bound->tso when scavenging the TSO

14 years agothreadStackUnderflow: fix recently introduced bug (conc068(threaded1) failure)
Simon Marlow [Mon, 7 Dec 2009 17:01:27 +0000 (17:01 +0000)]
threadStackUnderflow: fix recently introduced bug (conc068(threaded1) failure)

bug introduced by "threadStackUnderflow: put the new TSO on the mut
list if necessary"

14 years agoneed locking around use of weak_ptr_list in mkWeak#
Simon Marlow [Mon, 7 Dec 2009 14:52:13 +0000 (14:52 +0000)]
need locking around use of weak_ptr_list in mkWeak#

14 years agoremove global 'total_allocated', seems to be the same as 'GC_tot_alloc'
Simon Marlow [Mon, 7 Dec 2009 11:53:59 +0000 (11:53 +0000)]
remove global 'total_allocated', seems to be the same as 'GC_tot_alloc'

14 years agoAdd some explanation about overlapping instances
simonpj@microsoft.com [Mon, 7 Dec 2009 15:39:15 +0000 (15:39 +0000)]
Add some explanation about overlapping instances

Trac #3734 suggested addding some extra guidance about
incoherence and overlap; now done

14 years agoTidy up deriving error messages
simonpj@microsoft.com [Mon, 7 Dec 2009 13:08:50 +0000 (13:08 +0000)]
Tidy up deriving error messages

I did this in response to a suggestion in Trac #3702

14 years agoFix profiling build
Simon Marlow [Mon, 7 Dec 2009 09:23:14 +0000 (09:23 +0000)]
Fix profiling build

14 years agoMinor refactoring to remove redundant code
simonpj@microsoft.com [Mon, 7 Dec 2009 08:33:12 +0000 (08:33 +0000)]
Minor refactoring to remove redundant code

14 years agoFix a nasty (and long-standing) FloatOut performance bug
simonpj@microsoft.com [Mon, 7 Dec 2009 08:32:46 +0000 (08:32 +0000)]
Fix a nasty (and long-standing) FloatOut performance bug

The effect was that, in deeply-nested applications, FloatOut would
take quadratic time.  A good example was compiling
    programs/barton-mangler-bug/Expected.hs
in which FloatOut had a visible pause of a couple of seconds!
Profiling showed that 40% of the entire compile time was being
consumbed by the single function partitionByMajorLevel.

The bug was that the floating bindings (type FloatBinds) was kept
as a list, which was partitioned at each binding site.  In programs
with deeply nested lists, such as
       e1 : e2 : e3 : .... : e5000 : []
this led to quadratic behaviour.

The solution is to use a proper finite-map representation;
see the new definition of FloatBinds near the bottom of FloatOut.

14 years agoAdd a new to-do to cmm-notes
simonpj@microsoft.com [Mon, 7 Dec 2009 08:11:30 +0000 (08:11 +0000)]
Add a new to-do to cmm-notes

14 years agoComments only, principally about IfaceDeclExtras
simonpj@microsoft.com [Mon, 7 Dec 2009 08:11:08 +0000 (08:11 +0000)]
Comments only, principally about IfaceDeclExtras

14 years agoComments only, about RULE plumbing
simonpj@microsoft.com [Mon, 7 Dec 2009 08:04:42 +0000 (08:04 +0000)]
Comments only, about RULE plumbing

14 years agoAdd splitUFM to UniqFM (used in a forthcoming patch)
simonpj@microsoft.com [Fri, 4 Dec 2009 16:08:20 +0000 (16:08 +0000)]
Add splitUFM to UniqFM (used in a forthcoming patch)

splitUFM :: Uniquable key => UniqFM elt -> key -> (UniqFM elt, Maybe elt, UniqFM elt)
   -- Splits a UFM into things less than, equal to, and greater than the key

14 years agoAdd lengthBag to Bag (using in forthcoming patch)
simonpj@microsoft.com [Fri, 4 Dec 2009 15:50:55 +0000 (15:50 +0000)]
Add lengthBag to Bag (using in forthcoming patch)

14 years agoUse addToUFM_Acc where appropriate
simonpj@microsoft.com [Fri, 4 Dec 2009 15:50:36 +0000 (15:50 +0000)]
Use addToUFM_Acc where appropriate

This way of extending a UniqFM has existed for some time, but
we weren't really using it.

addToUFM_Acc :: Uniquable key =>
      (elt -> elts -> elts) -- Add to existing
   -> (elt -> elts) -- New element
   -> UniqFM elts  -- old
   -> key -> elt  -- new
   -> UniqFM elts -- result

14 years agoAdd comments to "OPTIONS_GHC -fno-warn-orphans" pragmas
Ian Lynagh [Sat, 5 Dec 2009 16:57:21 +0000 (16:57 +0000)]
Add comments to "OPTIONS_GHC -fno-warn-orphans" pragmas

14 years agoAdd some missing exports back for GHC package users; fixes trac #3715
Ian Lynagh [Sat, 5 Dec 2009 15:35:32 +0000 (15:35 +0000)]
Add some missing exports back for GHC package users; fixes trac #3715

14 years agoAdd some comments on the alternative layout rule state
Ian Lynagh [Sat, 5 Dec 2009 15:20:39 +0000 (15:20 +0000)]
Add some comments on the alternative layout rule state

14 years agoTweak layout for alternative layout rule
Ian Lynagh [Thu, 3 Dec 2009 16:44:24 +0000 (16:44 +0000)]
Tweak layout for alternative layout rule

14 years agoLink all dynamic libraries with the correct install_name on Mac OS/X.
Ian Lynagh [Fri, 4 Dec 2009 14:36:14 +0000 (14:36 +0000)]
Link all dynamic libraries with the correct install_name on Mac OS/X.
This is a rerecord of
    Stephen Blackheath <oversensitive.pastors.stephen@blacksapphire.com>**20090930222855
to avoid conflicts.

14 years agoDocument the new -dylib-install-name option in the user's guide.
Stephen Blackheath [Thu, 1 Oct 2009 05:16:37 +0000 (05:16 +0000)]
Document the new -dylib-install-name option in the user's guide.

14 years agoAdd -dylib-install-name option to GHC so the install name can be set for dynamic...
Stephen Blackheath [Wed, 30 Sep 2009 22:37:08 +0000 (22:37 +0000)]
Add -dylib-install-name option to GHC so the install name can be set for dynamic libs on Mac OS/X.

14 years agoForce -fPIC when linking against dynamic libraries on Mac OS/X.
Stephen Blackheath [Mon, 28 Sep 2009 20:38:00 +0000 (20:38 +0000)]
Force -fPIC when linking against dynamic libraries on Mac OS/X.
Otherwise you get
/tmp/ghc7602_0/ghc7602_0.s:207:0:
   non-relocatable subtraction expression, "___stginit_Lib_dyn" minus "L1x2;4"
/tmp/ghc7602_0/ghc7602_0.s:207:0:
   symbol: "___stginit_Lib_dyn" can't be undefined in a subtraction expression

14 years agoevaluate_large: evaluate large objects to bd->dest rather than gen->to
Simon Marlow [Fri, 4 Dec 2009 11:10:37 +0000 (11:10 +0000)]
evaluate_large: evaluate large objects to bd->dest rather than gen->to
This fixes aging of large objects in the new scheme.  Bug found by
perf/space_leaks/space_leak_001.  Yay perf regressions tests.

14 years agoCorrection to the allocation stats following earlier refactoring
Simon Marlow [Fri, 4 Dec 2009 11:08:39 +0000 (11:08 +0000)]
Correction to the allocation stats following earlier refactoring

14 years agoexport g0
Simon Marlow [Thu, 3 Dec 2009 16:52:09 +0000 (16:52 +0000)]
export g0

14 years agoGC refactoring, remove "steps"
Simon Marlow [Thu, 3 Dec 2009 15:07:28 +0000 (15:07 +0000)]
GC refactoring, remove "steps"

The GC had a two-level structure, G generations each of T steps.
Steps are for aging within a generation, mostly to avoid premature
promotion.

Measurements show that more than 2 steps is almost never worthwhile,
and 1 step is usually worse than 2.  In theory fractional steps are
possible, so the ideal number of steps is somewhere between 1 and 3.
GHC's default has always been 2.

We can implement 2 steps quite straightforwardly by having each block
point to the generation to which objects in that block should be
promoted, so blocks in the nursery point to generation 0, and blocks
in gen 0 point to gen 1, and so on.

This commit removes the explicit step structures, merging generations
with steps, thus simplifying a lot of code.  Performance is
unaffected.  The tunable number of steps is now gone, although it may
be replaced in the future by a way to tune the aging in generation 0.

14 years agofix error message on Windows (fixes rtsflags001)
Simon Marlow [Wed, 2 Dec 2009 14:11:35 +0000 (14:11 +0000)]
fix error message on Windows (fixes rtsflags001)

14 years agoFix loading of annotations
Roman Leshchinskiy [Fri, 4 Dec 2009 02:42:59 +0000 (02:42 +0000)]
Fix loading of annotations

The problem was that we collected all annotations we knew about once when the
simplifier started and threaded them through the CoreM monad. If new interface
files were loaded during simplification, their annotations would not be
visible to the simplifier.

Now, we rebuild the annotation list at the start of every simplifier pass that
needs it (which is only SpecConstr at the moment). This ensures that we see
all annotations that have been loaded so far. This is somewhat similar to how
RULES are handled.

14 years agoAdd new ForceSpecConstr annotation
Roman Leshchinskiy [Thu, 3 Dec 2009 06:54:55 +0000 (06:54 +0000)]
Add new ForceSpecConstr annotation

Annotating a type with {-# ANN type T ForceSpecConstr #-} makes SpecConstr
ignore -fspec-constr-threshold and -fspec-constr-count for recursive functions
that have arguments of type T. Such functions will be specialised regardless
of their size and there is no upper bound on the number of specialisations
that can be generated. This also works if T is embedded in other types such as
Maybe T (but not T -> T).

T should not be a product type because it could be eliminated by the
worker/wrapper transformation. For instance, in

data T = T Int Int

foo :: T -> Int
foo (T m n) = ... foo (T m' n') ...

SpecConstr will never see the T because w/w will get rid of it. I'm still
thinking about whether fixing this is worthwhile.

14 years agoGenerate INLINE pragmas for PA methods
Roman Leshchinskiy [Thu, 3 Dec 2009 03:14:52 +0000 (03:14 +0000)]
Generate INLINE pragmas for PA methods

14 years agoAdd a GHC layout extension to the alternative layout rule
Ian Lynagh [Thu, 3 Dec 2009 15:57:08 +0000 (15:57 +0000)]
Add a GHC layout extension to the alternative layout rule

14 years agoFix HPC column numbers, following the column number changes in GHC
Ian Lynagh [Thu, 3 Dec 2009 13:55:20 +0000 (13:55 +0000)]
Fix HPC column numbers, following the column number changes in GHC

14 years agoWhitespace only
Ian Lynagh [Thu, 3 Dec 2009 13:22:59 +0000 (13:22 +0000)]
Whitespace only

14 years agoFix column numbers used when highlighting :list output
Ian Lynagh [Thu, 3 Dec 2009 13:03:28 +0000 (13:03 +0000)]
Fix column numbers used when highlighting :list output

14 years agoadd a missing lock around allocGroup()
Simon Marlow [Thu, 3 Dec 2009 11:02:09 +0000 (11:02 +0000)]
add a missing lock around allocGroup()

14 years agoremove unused cap->in_gc flag
Simon Marlow [Wed, 2 Dec 2009 15:42:40 +0000 (15:42 +0000)]
remove unused cap->in_gc flag

14 years agoRefactoring only
Simon Marlow [Wed, 2 Dec 2009 12:38:06 +0000 (12:38 +0000)]
Refactoring only

14 years agomove sanity checking code from Storage.c to Sanity.c
Simon Marlow [Wed, 2 Dec 2009 12:11:41 +0000 (12:11 +0000)]
move sanity checking code from Storage.c to Sanity.c

14 years agostg_ap_0_fast: sanity-check only the topmost frame, not the whole stack
Simon Marlow [Wed, 2 Dec 2009 11:51:09 +0000 (11:51 +0000)]
stg_ap_0_fast: sanity-check only the topmost frame, not the whole stack
Sanity checking was getting too slow in some cases, this returns it to
a constant-factor overhead.

14 years agoFix profiling build
Simon Marlow [Thu, 3 Dec 2009 08:59:30 +0000 (08:59 +0000)]
Fix profiling build

14 years agoMore work on the simplifier's inlining strategies
simonpj@microsoft.com [Wed, 2 Dec 2009 17:42:56 +0000 (17:42 +0000)]
More work on the simplifier's inlining strategies

This patch collects a small raft of related changes

* Arrange that during
     (a) rule matching and
     (b) uses of exprIsConApp_maybe
  we "look through" unfoldings only if they are active
  in the phase. Doing this for (a) required a bit of
  extra plumbing in the rule matching code, but I think
  it's worth it.

  One wrinkle is that even if inlining is off (in the 'gentle'
  phase of simplification) during rule matching we want to
  "look through" things with inlinings.
   See SimplUtils.activeUnfInRule.

  This fixes a long-standing bug, where things that were
  supposed to be (say) NOINLINE, could still be poked into
  via exprIsConApp_maybe.

* In the above cases, also check for (non-rule) loop breakers;
  we never look through these.  This fixes a bug that could make
  the simplifier diverge (and did for Roman).
  Test = simplCore/should_compile/dfun-loop

* Try harder not to choose a DFun as a loop breaker. This is
  just a small adjustment in the OccurAnal scoring function

* In the scoring function in OccurAnal, look at the InlineRule
  unfolding (if there is one) not the actual RHS, beause the
  former is what'll be inlined.

* Make the application of any function to dictionary arguments
  CONLIKE.  Thus (f d1 d2) is CONLIKE.
  Encapsulated in CoreUtils.isExpandableApp
  Reason: see Note [Expandable overloadings] in CoreUtils

* Make case expressions seem slightly smaller in CoreUnfold.
  This reverses an unexpected consequences of charging for
  alternatives.

Refactorings
~~~~~~~~~~~~
* Signficantly refactor the data type for Unfolding (again).
  The result is much nicer.

* Add type synonym BasicTypes.CompilerPhase = Int
  and use it

Many of the files touched by this patch are simply knock-on
consequences of these two refactorings.

14 years agoFix Trac #3100: reifyType
simonpj@microsoft.com [Mon, 30 Nov 2009 17:52:04 +0000 (17:52 +0000)]
Fix Trac #3100: reifyType

A type without any leading foralls may still have constraints
   eg:  ?x::Int => Int -> Int

But reifyType was failing in this case.

Merge to 6.12.

14 years agoFix Trac #3102: pre-matching polytypes
simonpj@microsoft.com [Mon, 30 Nov 2009 17:44:41 +0000 (17:44 +0000)]
Fix Trac #3102: pre-matching polytypes

When *pre-matching* two types
     forall a. C1 => t1  ~  forall a. C2 => t2
we were matching t1~t2, but totally ignoring C1,C2
That's utterly wrong when pre-matching
       (?p::Int) => String  ~  a
because we emerge with a:=String!

All this is part of the impredicative story, which is about
to go away, but still.

Worth merging this to 6.12

14 years agothreadStackUnderflow: put the new TSO on the mut list if necessary
Simon Marlow [Wed, 2 Dec 2009 14:45:49 +0000 (14:45 +0000)]
threadStackUnderflow: put the new TSO on the mut list if necessary

14 years agodon't sanity check the whole stack when switching interp<->compiled
Simon Marlow [Wed, 2 Dec 2009 13:41:21 +0000 (13:41 +0000)]
don't sanity check the whole stack when switching interp<->compiled