8 years agoRemove bogus isCoercionKind function and its sole use
Max Bolingbroke [Sun, 14 Aug 2011 07:06:17 +0000 (08:06 +0100)] 
Remove bogus isCoercionKind function and its sole use

8 years agoAdd missing import (fixes #5460).
Erik de Castro Lopo [Mon, 5 Sep 2011 10:24:51 +0000 (20:24 +1000)] 
Add missing import (fixes #5460).

8 years agoAdd s390x to list of supported architectures
Joachim Breitner [Mon, 5 Sep 2011 07:37:24 +0000 (09:37 +0200)] 
Add s390x to list of supported architectures

8 years agofix GhcUnregisterised default, and add kfreebsdgnu to OsSupportsGhci
Simon Marlow [Tue, 6 Sep 2011 13:00:51 +0000 (14:00 +0100)] 
fix GhcUnregisterised default, and add kfreebsdgnu to OsSupportsGhci

8 years agofix the eager-blackholing check, which I inadvertently broke in
Simon Marlow [Tue, 6 Sep 2011 11:57:26 +0000 (12:57 +0100)] 
fix the eager-blackholing check, which I inadvertently broke in
1c2f89535394958f75cfb15c8c5e0433a20953ed (symptom was broken
biographical profiling, see #5451).

8 years agoMinor wording change
Simon Peyton Jones [Mon, 5 Sep 2011 16:33:14 +0000 (17:33 +0100)] 
Minor wording change

8 years agoFix Trac #5455: be a bit more selective in mkSelectorBinds
Simon Peyton Jones [Mon, 5 Sep 2011 16:33:04 +0000 (17:33 +0100)] 
Fix Trac #5455: be a bit more selective in mkSelectorBinds

See Note [mkSelectorBinds]

8 years agoEliminate isHiBootTyCon in favour of isAbstractTyCon
Simon Peyton Jones [Mon, 5 Sep 2011 08:38:50 +0000 (09:38 +0100)] 
Eliminate isHiBootTyCon in favour of isAbstractTyCon

Fixes Trac #5456, which was a buglet arising from

  commit de9b85fa3fb6d4cd593366e1f2383cd0b492c056
  Author: Simon Peyton Jones <>
  Date:   Fri Sep 2 17:43:53 2011 +0100

    Export a tiny bit more info with AbstractTyCon (fixes #5424)

It only shows up when compiling with -O0!

8 years agoLink the de-synonym change to ticket Trac #5458
Simon Peyton Jones [Mon, 5 Sep 2011 07:32:07 +0000 (08:32 +0100)] 
Link the de-synonym change to ticket Trac #5458

8 years agoFix two bugs in caes-floating (fixes Trac #5453)
Simon Peyton Jones [Mon, 5 Sep 2011 07:21:23 +0000 (08:21 +0100)] 
Fix two bugs in caes-floating (fixes Trac #5453)

The problem is documented in the ticket.  The patch
does two things

1. Make exprOkForSpeculation return False for a non-exhaustive case

2. In SetLevels.lvlExpr, look at the *result* scrutinee, not the
   *input* scrutinee, when testing for evaluated-ness

8 years agoComments only
Simon Peyton Jones [Mon, 5 Sep 2011 07:18:10 +0000 (08:18 +0100)] 
Comments only

8 years agoDe-synonym the types of the abtracted term variables in SpecConstr
Simon Peyton Jones [Mon, 5 Sep 2011 07:16:58 +0000 (08:16 +0100)] 
De-synonym the types of the abtracted term variables in SpecConstr

This was making Text.PrettyPrint.HughesPJ give a lint-bug
when the libraries were compiled with -O2.

It's all caused by phantom type synonyms (which are, generally
speaking, a royal pain).  The fix is simple, but a bit brutal.

See Note [Free type variables of the qvar types].

8 years agoExport a tiny bit more info with AbstractTyCon (fixes #5424)
Simon Peyton Jones [Fri, 2 Sep 2011 16:43:53 +0000 (17:43 +0100)] 
Export a tiny bit more info with AbstractTyCon (fixes #5424)

When we compile -O0 we put type constructors in the interface file
without their data constructors -- an AbstractTyCon.  But in a
client module, to give good pattern-match exhaustiveness warnings,
we need to know the difference between a data type and a newtype.
(The latter can be coerced to another type, but a data type can't.)
See Note [Pruning dead case alternatives] in Unify.

Because we weren't conveying this info, we were getting bogus
warnings about inexhaustive patterm matches with GADTs, and
(confusingly) these warnings woudl come and go depending on
whether you were compiling with -O.

This patch makes AbstractTyCon carry a flag indicating whether
the type constructor is "distinct"; two distinct TyCons cannot
be coerced into eachother (except by unsafeCoerce, in which case
all bets are off).

HEADS UP: interface file format changes slightly, so you need
to make clean.

8 years agoBacktrack on the wierd special case of data family exports
Simon Peyton Jones [Fri, 2 Sep 2011 16:34:00 +0000 (17:34 +0100)] 
Backtrack on the wierd special case of data family exports

I had second thoughts on the "data family export" question.
Rather than add a wierd special case it seems better to be
simple and consistent.  So this patch

 * Reverts to the simple behaviour:
     module M where { ... }
   exports only what is defined in M, ie NOT any
   imported data families.
   See Note [Exports of data families] in RnNames

* Documents this behaviour in the user manual, and clarifies
  what was there before.

8 years agoMerge branch 'master' of
Simon Peyton Jones [Fri, 2 Sep 2011 08:29:56 +0000 (09:29 +0100)] 
Merge branch 'master' of

8 years agoSome minor wibbling in printing source locations
Simon Peyton Jones [Fri, 2 Sep 2011 08:25:25 +0000 (09:25 +0100)] 
Some minor wibbling in printing source locations

I found that an imported instance was getting printed with <no
location info>.  Fixing this pushed me into a bit more refactoring
than I intended, but it's all small aesthetic stuff, nothing
fundamental.  Caused some error message to change as a result.

I removed pprDefnLoc from the GHC API because it doesn't seem to be
used.  Name.pprNamedefnLoc and pprDefinedAt are probably more useful

8 years agoTwo bugs in rnExports (fixes Trac #5445)
Simon Peyton Jones [Fri, 2 Sep 2011 08:20:45 +0000 (09:20 +0100)] 
Two bugs in rnExports (fixes Trac #5445)

When constructing export lists, data families pose an awkward problem,
documented in Note [Exports of data families] in RnNames.  Consider

   module M where
             import X( D )
             data instance D Int = M1 | M2

Here M exports M1 and M2, obviously, but does it export D?  It would
not usually do so, but if we don't then no one can import M selectively
like this:
           import M( D(M1,M2) )

So we compromise and export D too.  But I made two mistakes

a) Didn't check for conflicts between the extra export of X.D
   and any other exports called "D"

b) Did the extra export for imported things too, not just ones defined
   in this module (ie made the compromise apply much more widely than

This made Programatica (a complex project) break in an obscure
way; (b) caused an export conflict, (a) meant that the conflict
was not spotted, which in turn caused later chaos.

Anyway the fix is easy, and is documented in the Note.

8 years agoMore debug info on provenance with -dppr-debug
Simon Peyton Jones [Fri, 2 Sep 2011 08:11:50 +0000 (09:11 +0100)] 
More debug info on provenance with -dppr-debug

8 years agoMake Convert.thRdrName give a decent source locations (fixes Trac #5434)
Simon Peyton Jones [Fri, 2 Sep 2011 08:11:24 +0000 (09:11 +0100)] 
Make Convert.thRdrName give a decent source locations (fixes Trac #5434)

thRdrName is used to construct *binders*, and some of them are
Exact RdrNames, so we need to give them a decent source location.

8 years agoFix a buglet in reification of tuples (fixes Trac #5452)
Simon Peyton Jones [Fri, 2 Sep 2011 08:08:21 +0000 (09:08 +0100)] 
Fix a buglet in reification of tuples (fixes Trac #5452)

8 years agoIncrease the "context stack depth" to 200 (from 20)
Simon Peyton Jones [Fri, 2 Sep 2011 08:07:46 +0000 (09:07 +0100)] 
Increase the "context stack depth" to 200 (from 20)

This parameter controls the allowed depth of reasoning in the
type constraint solver.  Perfectly well-behaved programs can
use deep stacks, and 20 is obviously too small.  (Indeed, if
you don't have UndecidableInstances, the constraint solver
is supposed to terminate, so no limit should be needed.)

Responding to Trac #5395 this patch increases the default
to 200.

8 years agoAdd a flag -fno-ghci-history
Ian Lynagh [Thu, 1 Sep 2011 22:39:26 +0000 (23:39 +0100)] 
Add a flag -fno-ghci-history

Allows you to turn off loading/storing the GHCi command history from/to
the ~/.ghc/ghci_history file.

8 years agoWibble to fix of Trac #5439: deal with the error-recovery case
Simon Peyton Jones [Thu, 1 Sep 2011 14:54:39 +0000 (15:54 +0100)] 
Wibble to fix of Trac #5439: deal with the error-recovery case

Even if we are recovering from a typecheck error, we should still do
the right thing for the "closed" flag.  Otherwise we get an assert
failure, and potentially different behaviour when the user fixes
the original type error.

8 years agoFix #4988: we were wrongly running exception handlers in the
Simon Marlow [Wed, 31 Aug 2011 21:45:01 +0000 (22:45 +0100)] 
Fix #4988: we were wrongly running exception handlers in the
maskUninterruptible state instead of ordinary mask, due to a
misinterpretation of the way the TSO_INTERRUPTIBLE flag works.

Remarkably this must have been broken for quite some time.  Indeed we
even had a test that demonstrated the wrong behaviour (conc015a) but
presumably I didn't look hard enough at the output to notice that it
was wrong.

8 years agoTwo small further extensions to associated types
Simon Peyton Jones [Thu, 1 Sep 2011 08:33:58 +0000 (09:33 +0100)] 
Two small further extensions to associated types

a) Allow multiple AT decls for in a single instance
b) Allow a free type parameter to be instantiated

Example   class C a where
            type T a x :: *

  data A
          data B
          instance C Int where
            type T Int A = Int
            type T Int B = Bool

There is no reason to prohibit this, and as we move
towards a proper kind system it may even be useful.

I also updated the documentation to cover this change
and the previous one of allowing free type parameters
for associated families.

8 years agoFix the trimming of bind_fvs (fixes Trac #5439)
Simon Peyton Jones [Thu, 1 Sep 2011 07:28:36 +0000 (08:28 +0100)] 
Fix the trimming of bind_fvs (fixes Trac #5439)

For the bind_fvs field of FunBind/PatBind, we need to be careful to
keep track of uses of all functions in this module (although not
imported ones).  Moreover in TcBinds.decideGeneralisationPlan we
need to take note of uses of lexically scoped type variables.

These two buglets led to a (useful) assertion failure in TcEnv.

8 years agoImprove debug tracing
Simon Peyton Jones [Thu, 1 Sep 2011 06:55:39 +0000 (07:55 +0100)] 
Improve debug tracing

8 years agoGet rid of associated-type default declarations
Simon Peyton Jones [Thu, 1 Sep 2011 06:55:11 +0000 (07:55 +0100)] 
Get rid of associated-type default declarations

We had the idea that you might be able to define
a default instance for an associated type family, thus:

   class C a where
     type T a :: *
     type T a = a -> a

It's an idea that makes sense, but it was only 10% implemented.
This patch just removes that misleading 10%.

8 years agoComments about type-family parents
Simon Peyton Jones [Thu, 1 Sep 2011 06:53:09 +0000 (07:53 +0100)] 
Comments about type-family parents

See Note [Associated families and their parent class]

8 years agoAllow associated types to have fresh parameters
Simon Peyton Jones [Thu, 1 Sep 2011 06:52:11 +0000 (07:52 +0100)] 
Allow associated types to have fresh parameters

This patch allows

     class C a where
       type T a b :: *
     instance C Int
       type T Int b = b -> b

That is, T has a type index 'b' that is not one of the class

On the way I did a good deal of refactoring (as usual), especially in
TcInstDcls.tcLocalInstDecl1, which checks for consistent instantiation
of the class instance and the type instance.  Less code, more
expressiveness.  See Note [Checking consistent instantiation]

8 years agoAdd type sigs to functions in RegAlloc.Graph.Spill
Ian Lynagh [Wed, 31 Aug 2011 19:58:01 +0000 (20:58 +0100)] 
Add type sigs to functions in RegAlloc.Graph.Spill

8 years agoWhitespace only in X86.Instr
Ian Lynagh [Wed, 31 Aug 2011 19:33:48 +0000 (20:33 +0100)] 
Whitespace only in X86.Instr

8 years agoSome CPP removal in X86.Regs
Ian Lynagh [Wed, 31 Aug 2011 19:30:55 +0000 (20:30 +0100)] 
Some CPP removal in X86.Regs

8 years agoWhitespace only in X86.Regs
Ian Lynagh [Wed, 31 Aug 2011 19:11:45 +0000 (20:11 +0100)] 
Whitespace only in X86.Regs

8 years agoTurn off lax dependencies by default
Ian Lynagh [Tue, 30 Aug 2011 20:49:00 +0000 (21:49 +0100)] 
Turn off lax dependencies by default

8 years agoStart de-CPPing X86.Regs
Ian Lynagh [Tue, 30 Aug 2011 20:35:26 +0000 (21:35 +0100)] 
Start de-CPPing X86.Regs

8 years agoMore CPP removal
Ian Lynagh [Tue, 30 Aug 2011 19:47:59 +0000 (20:47 +0100)] 
More CPP removal

8 years agoA little more CPP removal
Ian Lynagh [Tue, 30 Aug 2011 19:32:54 +0000 (20:32 +0100)] 
A little more CPP removal

8 years agoBy default, be lax about dependencies on GHC
Ian Lynagh [Sun, 28 Aug 2011 11:23:04 +0000 (12:23 +0100)] 
By default, be lax about dependencies on GHC

There are a number of things which technically depend on GHC (e.g. if
ghc changes then Haskell files may be compiled differently, or Cabal
packages may be configured differently). However, in practice, having
a real dependency on GHC is just a pain: We normally don't want to
spend time recompiling other things while we're working on the
compiler, and even if we did, GHC will normally decide compilation
isn't needed anyway. So by default we use order-only dependencies on
GHC, i.e. GHC must exist, but if it's newer than other targets then
rebuilding is not necessary.

8 years agofix warning
Simon Marlow [Fri, 26 Aug 2011 21:18:45 +0000 (22:18 +0100)] 
fix warning

8 years agoClean up the handling of the import and :module commands in GHCi
Simon Marlow [Fri, 26 Aug 2011 15:36:05 +0000 (16:36 +0100)] 
Clean up the handling of the import and :module commands in GHCi

Previously we remembered the whole history of commands and replayed
them on every :load/:reload, which lead to some non-linear performance
characteristics (#5317).  The handling of the implicit Prelude import
and the implicit imports of recently loaded modules was also
complicated and wrong in various obscure ways.

The Prelude import works just like the implicit Prelude import in a
Haskell module: it can be overriden with an explicit Prelude

I have added a new ":show imports" command to show which imports are
currently in force.

Prelude> :show imports
import Prelude -- implicit
Prelude> import Prelude ()
Prelude> :show imports
import Prelude ()
Prelude> map

<interactive>:0:1: Not in scope: `map'

Full documentation in the User's Guide.

There are various other little tweaks and improvements, such as when a
module is imported with 'as', we now show the 'as' name in the prompt
rather than the original name.

8 years agosimpleImportDecl: default to unsafe, not safe
Simon Marlow [Fri, 26 Aug 2011 15:15:11 +0000 (16:15 +0100)] 
simpleImportDecl: default to unsafe, not safe

8 years agoexport HscEnv
Simon Marlow [Wed, 6 Jul 2011 19:37:29 +0000 (20:37 +0100)] 
export HscEnv

8 years agoFollow ghc-prim changes
Ian Lynagh [Fri, 26 Aug 2011 20:37:26 +0000 (21:37 +0100)] 
Follow ghc-prim changes

8 years agoMake popCnt# primop work with dynamic compilation
Johan Tibell [Thu, 25 Aug 2011 13:02:58 +0000 (15:02 +0200)] 
Make popCnt# primop work with dynamic compilation

8 years agotypos
Simon Marlow [Thu, 25 Aug 2011 10:11:58 +0000 (11:11 +0100)] 

8 years agodisable a debug trace
Simon Marlow [Thu, 25 Aug 2011 10:11:50 +0000 (11:11 +0100)] 
disable a debug trace

8 years agofix warning
Simon Marlow [Wed, 24 Aug 2011 15:50:55 +0000 (16:50 +0100)] 
fix warning

8 years agorefactoring and fixing the stage 2 compilation
Simon Marlow [Wed, 24 Aug 2011 15:15:50 +0000 (16:15 +0100)] 
refactoring and fixing the stage 2 compilation

8 years agoRefactoring/renaming
Simon Marlow [Wed, 24 Aug 2011 12:42:57 +0000 (13:42 +0100)] 

8 years agoget rid of the cg_rep field of CgIdInfo, which wasn't used anywhere
Simon Marlow [Wed, 24 Aug 2011 11:39:46 +0000 (12:39 +0100)] 
get rid of the cg_rep field of CgIdInfo, which wasn't used anywhere

8 years agoeliminate ConInfo
Simon Marlow [Wed, 24 Aug 2011 10:58:43 +0000 (11:58 +0100)] 
eliminate ConInfo

8 years agoRemove another use of mkConInfo
Simon Marlow [Wed, 24 Aug 2011 10:13:40 +0000 (11:13 +0100)] 
Remove another use of mkConInfo

8 years agobugfix: static constructors were being given the dynamic info table pointer
Simon Marlow [Wed, 24 Aug 2011 09:39:23 +0000 (10:39 +0100)] 
bugfix: static constructors were being given the dynamic info table pointer

8 years agoRefactoring: reduce usage of mkConInfo, with a view to killing it
Simon Marlow [Wed, 24 Aug 2011 09:38:58 +0000 (10:38 +0100)] 
Refactoring: reduce usage of mkConInfo, with a view to killing it

8 years agoremove duplicate dump
Simon Marlow [Tue, 23 Aug 2011 15:08:43 +0000 (16:08 +0100)] 
remove duplicate dump

8 years agorewrite branchChainElim; other refactoring in CmmContFlowOpt
Simon Marlow [Tue, 23 Aug 2011 15:08:34 +0000 (16:08 +0100)] 
rewrite branchChainElim; other refactoring in CmmContFlowOpt

8 years agoavoid record selector error on closureProf
Simon Marlow [Tue, 23 Aug 2011 15:07:22 +0000 (16:07 +0100)] 
avoid record selector error on closureProf

8 years agoadd note about branchChainElim
Simon Marlow [Tue, 23 Aug 2011 15:06:40 +0000 (16:06 +0100)] 
add note about branchChainElim

8 years agouse qualified names for clarity
Simon Marlow [Tue, 23 Aug 2011 15:06:23 +0000 (16:06 +0100)] 
use qualified names for clarity

8 years agorename LRep to ArgRep
Simon Marlow [Tue, 23 Aug 2011 15:06:06 +0000 (16:06 +0100)] 
rename LRep to ArgRep

8 years agoRenaming only
Simon Peyton Jones [Tue, 23 Aug 2011 08:14:46 +0000 (09:14 +0100)] 
Renaming only
   CmmTop -> CmmDecl
   CmmPgm -> CmmGroup

8 years agofix type tags for RTS-defined info tables
Simon Marlow [Mon, 22 Aug 2011 15:27:27 +0000 (16:27 +0100)] 
fix type tags for RTS-defined info tables

8 years agoMore refactoring (CgRep)
Simon Peyton Jones [Mon, 22 Aug 2011 14:24:29 +0000 (15:24 +0100)] 
More refactoring (CgRep)

* Move CgRep (private to old codgen) from SMRep to ClosureInfo
* Avoid using CgRep in new codegen
* Move SMRep and Bitmap from codeGen/ to cmm/

8 years agoSnapshot of codegen refactoring to share with simonpj
Simon Marlow [Mon, 22 Aug 2011 12:56:17 +0000 (13:56 +0100)] 
Snapshot of codegen refactoring to share with simonpj

8 years agoFormatting fixes
David Terei [Thu, 25 Aug 2011 01:32:56 +0000 (18:32 -0700)] 
Formatting fixes

8 years agoUse double method, not the hacked rational method.
David Terei [Thu, 25 Aug 2011 01:32:06 +0000 (18:32 -0700)] 
Use double method, not the hacked rational method.

8 years agoFix name generation for vectorised identifiers
Manuel M T Chakravarty [Wed, 24 Aug 2011 12:34:40 +0000 (22:34 +1000)] 
Fix name generation for vectorised identifiers

8 years agoFixed reading and generating VectInfo as well as naming of vectorised versions of...
Manuel M T Chakravarty [Tue, 23 Aug 2011 13:36:42 +0000 (23:36 +1000)] 
Fixed reading and generating VectInfo as well as naming of vectorised versions of imported identifiers

8 years agoRemove a hack in the type checker (which is no longer needed)
Manuel M T Chakravarty [Mon, 22 Aug 2011 14:00:19 +0000 (00:00 +1000)] 
Remove a hack in the type checker (which is no longer needed)

8 years agoFunctions and types can now be post-hoc vectorised; i.e., in modules where they are...
Manuel M T Chakravarty [Mon, 22 Aug 2011 13:53:04 +0000 (23:53 +1000)] 
Functions and types can now be post-hoc vectorised; i.e., in modules where they are not declared, but only imported

- Types already gained this functionality already in a previous commit
- This commit adds the capability for functions

This is a crucial step towards being able to use the standard Prelude, instead of a special vectorised one.

8 years agoImplement lookupTypeName/lookupValueName, and reification of type family instances
Simon Peyton Jones [Tue, 23 Aug 2011 12:46:43 +0000 (13:46 +0100)] 
Implement lookupTypeName/lookupValueName, and reification of type family instances

This patch (and its TH counterpart) implements
   Trac #4429 (lookupTypeName, lookupValueName)
   Trac #5406 (reification of type/data family instances)

See detailed discussion in those tickets.

TH.ClassInstance is no more; instead reifyInstances returns a [Dec],
which requires fewer data types and natuarally accommodates family

'reify' on a type/data family now returns 'FamilyI', a new data
constructor in 'Info'

8 years agoComments only
Simon Peyton Jones [Tue, 23 Aug 2011 12:43:22 +0000 (13:43 +0100)] 
Comments only

8 years agoMinor wibbles to pretty-printing HsSyn
Simon Peyton Jones [Tue, 23 Aug 2011 12:43:12 +0000 (13:43 +0100)] 
Minor wibbles to pretty-printing HsSyn

Mainly affecting how declarations are printed
Ie by default: laid out with no braces

8 years agoFix DocBook formatting
Simon Peyton Jones [Mon, 22 Aug 2011 11:17:34 +0000 (12:17 +0100)] 
Fix DocBook formatting

8 years agoComments only
Simon Peyton Jones [Mon, 22 Aug 2011 07:58:24 +0000 (08:58 +0100)] 
Comments only

8 years agoMerge branch 'master' of
Simon Peyton Jones [Mon, 22 Aug 2011 07:09:45 +0000 (08:09 +0100)] 
Merge branch 'master' of

8 years agoMore cmm-notes
Simon Peyton Jones [Mon, 22 Aug 2011 07:09:23 +0000 (08:09 +0100)] 
More cmm-notes

8 years agoA batch of changes related to the handling of binders in instance decls
Simon Peyton Jones [Mon, 22 Aug 2011 07:08:50 +0000 (08:08 +0100)] 
A batch of changes related to the handling of binders in instance decls

The issue is that in
    instnace C T where
      data S = ...
      f = ...
neither S nor f is really a binder; they are *occurrences*.  Moreover
Haskell dictates that these particular occurrences are disambiguated
by looking at the class whose instance they occur in.

Some of this was not handled right for associated types.  And
RnNames.getLocalNonValBinders was a bit messhy; this patch tidies it

(And thenM is finally gone from RnSource.)

8 years agoMake pprTyThingInContenxt handle associated types right
Simon Peyton Jones [Mon, 22 Aug 2011 07:03:44 +0000 (08:03 +0100)] 
Make pprTyThingInContenxt handle associated types right

Just as we want to display a data constructor as part of its
parent data type declaration, so with associated types.  This
was simply missing before.

8 years agoPretty-printing improvements in HsSyn
Simon Peyton Jones [Mon, 22 Aug 2011 06:59:52 +0000 (07:59 +0100)] 
Pretty-printing improvements in HsSyn

8 years agoIn :browse, always print output in the *current* context
Simon Peyton Jones [Mon, 22 Aug 2011 06:57:50 +0000 (07:57 +0100)] 
In :browse, always print output in the *current* context

Previously :browse M (without !) printed output relative to
a context that was neither the current one, nor the top-level
context of M, but rather that established
     import Prelude
     import M
This was pretty confusing, so Simon and I agreed to use
a simple, uniform rule: output in GHC is always relative
to the current context.

8 years agoRemove file accidentally added to Karel's patch
Manuel M T Chakravarty [Mon, 22 Aug 2011 00:49:15 +0000 (10:49 +1000)] 
Remove file accidentally added to Karel's patch

8 years agoenable ARM specific target data layout and triple again
Karel Gardas [Sat, 20 Aug 2011 21:58:15 +0000 (23:58 +0200)] 
enable ARM specific target data layout and triple again

This patch is allowed by the 'on ARMv7 with VFPv3[D16] support pass
 appropriate -mattr value to LLVM llc' patch. The trick is that LLVM
by default (probably!) does not enable VFP, but GHC requires it
so LLVM's llc asserts on unavailable floating point register. i.e. GHC/LLVM
backend compiles into LLVM code which is using floats, but llc thinks
no float regs for this are available. Passing appropriate llc option
which is implemented in patch mentioned above fixes this issue.

8 years agoon ARMv7 with VFPv3[D16] support pass appropriate -mattr value to LLVM llc
Karel Gardas [Sat, 20 Aug 2011 21:53:22 +0000 (23:53 +0200)] 
on ARMv7 with VFPv3[D16] support pass appropriate -mattr value to LLVM llc

8 years agoenhance ArchARM with ISA and ISA extensions
Karel Gardas [Sat, 20 Aug 2011 21:49:48 +0000 (23:49 +0200)] 
enhance ArchARM with ISA and ISA extensions

This patch enhances ArchARM with ARM ISA and ISA extensions details
as is suggested in the comment in Platform.hs file. The patch is needed
by future patch which will use ARM ISA information in order to pass
appropriate command-line option to the LLVM llc tool.

8 years agoAdd popcnt support to LLVM backend
David Terei [Sun, 21 Aug 2011 01:32:18 +0000 (18:32 -0700)] 
Add popcnt support to LLVM backend

8 years agoUntil the type checker can use vectorised signatures, we restrict the RHS of VECTORIS...
Manuel M T Chakravarty [Sat, 20 Aug 2011 13:08:10 +0000 (23:08 +1000)] 
Until the type checker can use vectorised signatures, we restrict the RHS of VECTORISE pragmas to be a single identifier only.

- This removes the need to be careful about the order of dictionaries during type inference. A property that is too fragile to try to maintain in the type checker.

8 years agoFix validation problem when GHC is 7.2.1, warnings from binary.
David Terei [Fri, 19 Aug 2011 19:15:17 +0000 (12:15 -0700)] 
Fix validation problem when GHC is 7.2.1, warnings from binary.

8 years ago'Fix' a validation problem when bootstrap is 7.2.1
David Terei [Fri, 19 Aug 2011 19:13:43 +0000 (12:13 -0700)] 
'Fix' a validation problem when bootstrap is 7.2.1

Problem is with GADTs in new code gen and incomplete pattern
warnings. Just disabled the warning really and created #5424
to track an actual fix.

8 years agoFormatting fixes
David Terei [Fri, 19 Aug 2011 18:10:39 +0000 (11:10 -0700)] 
Formatting fixes

8 years agoChange use of if to when
David Terei [Fri, 19 Aug 2011 08:50:57 +0000 (01:50 -0700)] 
Change use of if to when

8 years agoMore info from :issafe ghci command
David Terei [Fri, 19 Aug 2011 08:47:59 +0000 (01:47 -0700)] 
More info from :issafe ghci command

8 years agofix 32-bit build breakage
Simon Marlow [Fri, 19 Aug 2011 07:14:15 +0000 (08:14 +0100)] 
fix 32-bit build breakage

8 years agoImprove import and export of vectorisation information
Manuel M T Chakravarty [Thu, 18 Aug 2011 14:17:10 +0000 (00:17 +1000)] 
Improve import and export of vectorisation information

8 years agoAdd VECTORISE [SCALAR] type pragma
Manuel M T Chakravarty [Wed, 17 Aug 2011 04:41:59 +0000 (14:41 +1000)] 
Add VECTORISE [SCALAR] type pragma

- Pragma to determine how a given type is vectorised
- At this stage only the VECTORISE SCALAR variant is used by the vectoriser.
- '{-# VECTORISE SCALAR type t #-}' implies that 't' cannot contain parallel arrays and may be used in vectorised code.  However, its constructors can only be used in scalar code.  We use this, e.g., for 'Int'.
- May be used on imported types

See also

8 years agoAdd popCnt# primop
Johan Tibell [Wed, 20 Jul 2011 16:29:22 +0000 (18:29 +0200)] 
Add popCnt# primop

8 years agoMajor improvement to pattern bindings
Simon Peyton Jones [Tue, 16 Aug 2011 09:23:52 +0000 (10:23 +0100)] 
Major improvement to pattern bindings

This patch makes a number of related improvements

a) Implements the Haskell Prime semantics for pattern bindings
   (Trac #2357).  That is, a pattern binding p = e is typed
   just as if it had been written
        t = e
        f = case t of p -> f
        g = case t of p -> g
        ... etc ...
   where f,g are the variables bound by p. In paricular it's
   ok to say
      (f,g) = (\x -> x, \y -> True)
   and f and g will get propertly inferred types
      f :: a -> a
      g :: a -> Int

b) Eliminates the MonoPatBinds flag altogether.  (For the moment
   it is deprecated and has no effect.)  Pattern bindings are now
   generalised as per (a).  Fixes Trac #2187 and #4940, in the
   way the users wanted!

c) Improves the OutsideIn algorithm generalisation decision.
   Given a definition without a type signature (implying "infer
   the type"), the published algorithm rule is this:
      - generalise *top-level* functions, and
      - do not generalise *nested* functions
   The new rule is
      - generalise a binding whose free variables have
        Guaranteed Closed Types
      - do not generalise other bindings

   Generally, a top-level let-bound function has a Guaranteed
   Closed Type, and so does a nested function whose free vaiables
   are top-level functions, and so on. (However a top-level
   function that is bitten by the Monomorphism Restriction does
   not have a GCT.)

     f x = let { foo y = y } in ...
   Here 'foo' has no free variables, so it is generalised despite
   being nested.

d) When inferring a type f :: ty for a definition f = e, check that
   the compiler would accept f :: ty as a type signature for that
   same definition.  The type is rejected precisely when the type
   is ambiguous.

      class Wob a b where
        to :: a -> b
        from :: b -> a

      foo x = [x, to (from x)]
   GHC 7.0 would infer the ambiguous type
      foo :: forall a b. Wob a b => b -> [b]
   but that type would give an error whenever it is called; and
   GHC 7.0 would reject that signature if given by the
   programmer.  The new type checker rejects it up front.

   Similarly, with the advent of type families, ambiguous types are
   easy to write by mistake.  See Trac #1897 and linked tickets for
   many examples.  Eg
      type family F a :: *
      f ::: F a -> Int
      f x = 3
   This is rejected because (F a ~ F b) does not imply a~b.  Previously
   GHC would *infer* the above type for f, but was unable to check it.
   Now even the inferred type is rejected -- correctly.

The main implemenation mechanism is to generalise the abe_wrap
field of ABExport (in HsBinds), from [TyVar] to HsWrapper. This
beautiful generalisation turned out to make everything work nicely
with minimal programming effort.  All the work was fiddling around
the edges; the core change was easy!

8 years agoImprove debug printing of Names (respect opt_SuppressModulePrefixes)
Simon Peyton Jones [Tue, 16 Aug 2011 09:19:22 +0000 (10:19 +0100)] 
Improve debug printing of Names (respect opt_SuppressModulePrefixes)

8 years agoFix Trac #5404: looking up signature binders in RnEnv
Simon Peyton Jones [Mon, 15 Aug 2011 07:41:55 +0000 (08:41 +0100)] 
Fix Trac #5404: looking up signature binders in RnEnv

See Note [Looking up Exact RdrNames] in RnEnv