simonpj@microsoft.com [Wed, 21 Jul 2010 14:42:57 +0000 (14:42 +0000)]
Comments only
simonpj@microsoft.com [Wed, 21 Jul 2010 14:42:48 +0000 (14:42 +0000)]
Fix inlining for default methods
This was discombobulated by a patch a week ago;
now fixed, quite straightforwardly. See
Note [Default methods and instances]
simonpj@microsoft.com [Wed, 21 Jul 2010 09:04:37 +0000 (09:04 +0000)]
Allow reification of existentials and GADTs
It turns out that TH.Syntax is rich enough to express even GADTs,
provided we express them in equality-predicate form. So for
example
data T a where
MkT1 :: a -> T [a]
MkT2 :: T Int
will appear in TH syntax like this
data T a = forall b. (a ~ [b]) => MkT1 b
| (a ~ Int) => MkT2
While I was at it I also improved the reification of types,
so that we use TH.TupleT and TH.ListT when we can.
Simon Marlow [Tue, 20 Jul 2010 15:37:46 +0000 (15:37 +0000)]
add numSparks# primop (#4167)
David Terei [Tue, 20 Jul 2010 16:09:38 +0000 (16:09 +0000)]
LLVM: Decrease max opt level used under OSX to avoid bug
Currently, many programs compiled with GHC at -O2 and LLVM
set to -O3 will segfault (only under OSX). Until this issue
is fixed I have simply 'solved' the segfault by lowering
the max opt level for LLVM used to -O2 under OSX.
All these recent changes to OSX should mean its finally as
stable as Linux and Windows.
David Terei [Tue, 20 Jul 2010 16:08:45 +0000 (16:08 +0000)]
LLVM: Fix OSX to work again with TNTC disabled.
David Terei [Tue, 20 Jul 2010 16:03:02 +0000 (16:03 +0000)]
LLVM: Fix printing of local vars so LLVM works with -fnew-codegen
Simon Marlow [Fri, 16 Jul 2010 15:08:32 +0000 (15:08 +0000)]
Use a separate mutex to protect all_tasks, avoiding a lock-order-reversal
In GHC 6.12.x I found a rare deadlock caused by this
lock-order-reversal:
AQ cap->lock
startWorkerTask
newTask
AQ sched_mutex
scheduleCheckBlackHoles
AQ sched_mutex
unblockOne_
wakeupThreadOnCapabilty
AQ cap->lock
so sched_mutex and cap->lock are taken in a different order in two
places.
This doesn't happen in the HEAD because we don't have
scheduleCheckBlackHoles, but I thought it would be prudent to make
this less likely to happen in the future by using a different mutex in
newTask. We can clearly see that the all_tasks mutex cannot be
involved in a deadlock, becasue we never call anything else while
holding it.
Simon Marlow [Thu, 15 Jul 2010 12:59:04 +0000 (12:59 +0000)]
'make fast' in a package does not build any compilers
David Terei [Mon, 19 Jul 2010 10:48:23 +0000 (10:48 +0000)]
LLVM: Fix up botched last commit
David Terei [Mon, 19 Jul 2010 10:34:11 +0000 (10:34 +0000)]
LLVM: Fix warning introduce in last commit.
David Terei [Sun, 18 Jul 2010 23:10:00 +0000 (23:10 +0000)]
LLVM: Use mangler to fix up stack alignment issues on OSX
illissius@gmail.com [Thu, 15 Jul 2010 13:41:34 +0000 (13:41 +0000)]
Fix #4195 (isGadtSyntaxTyCon returns opposite result)
Ian Lynagh [Sat, 17 Jul 2010 18:18:10 +0000 (18:18 +0000)]
Update to time 1.2.0.3
Ian Lynagh [Sat, 17 Jul 2010 16:23:56 +0000 (16:23 +0000)]
Reorder RTS --info output
Ian Lynagh [Sat, 17 Jul 2010 14:28:32 +0000 (14:28 +0000)]
Fix unreg prof build: Define CCS_SYSTEM in stg/MiscClosures.h
Ian Lynagh [Sat, 17 Jul 2010 00:08:27 +0000 (00:08 +0000)]
Make mkDerivedConstants as a stage 1 program
This way it gets the defines for the right platform when cross-compiling
Ian Lynagh [Sat, 17 Jul 2010 00:08:00 +0000 (00:08 +0000)]
Don't generate Haskell dependencies if we don't have any Haskell sources
Ian Lynagh [Fri, 16 Jul 2010 23:53:03 +0000 (23:53 +0000)]
Link programs that have no Haskell objects with gcc rather than ghc
Ian Lynagh [Fri, 16 Jul 2010 22:37:03 +0000 (22:37 +0000)]
Use gcc to build C programs for stages >= 1
Ian Lynagh [Fri, 16 Jul 2010 14:19:53 +0000 (14:19 +0000)]
Add platform info to "ghc --info" output
Ian Lynagh [Fri, 16 Jul 2010 14:06:30 +0000 (14:06 +0000)]
Tidy up Config.hs generation
Ian Lynagh [Fri, 16 Jul 2010 01:08:08 +0000 (01:08 +0000)]
Fix HC porting test in makefiles
Now that we are trying to support cross compilation, we can't use
"$(TARGETPLATFORM)" != "$(HOSTPLATFORM)"
as a test for HC-porting.
Ian Lynagh [Fri, 16 Jul 2010 00:25:58 +0000 (00:25 +0000)]
Change a BUILD var to a HOST var
Ian Lynagh [Thu, 15 Jul 2010 23:39:30 +0000 (23:39 +0000)]
Remove an unnecessary #include
Ian Lynagh [Thu, 15 Jul 2010 15:22:37 +0000 (15:22 +0000)]
Split up some make commands, so that errors aren't overlooked
When we ask make to run "a | b", if a fails then the pipeline might
still exit successfuly.
Ian Lynagh [Thu, 15 Jul 2010 14:30:00 +0000 (14:30 +0000)]
Remove an unnecessary #include
Ian Lynagh [Thu, 15 Jul 2010 14:25:00 +0000 (14:25 +0000)]
Simplify some more CPP __GLASGOW_HASKELL__ tests
Ian Lynagh [Thu, 15 Jul 2010 14:17:20 +0000 (14:17 +0000)]
Remove some code only used with GHC 6.11.*
Ian Lynagh [Thu, 15 Jul 2010 14:15:44 +0000 (14:15 +0000)]
__GLASGOW_HASKELL__ >= 609 is now always true
Ian Lynagh [Wed, 14 Jul 2010 22:37:17 +0000 (22:37 +0000)]
Correct the values in ghc_boot_platform.h
Ian Lynagh [Wed, 14 Jul 2010 18:47:15 +0000 (18:47 +0000)]
Change some TARGET checks to HOST checks
David Terei [Wed, 14 Jul 2010 15:25:30 +0000 (15:25 +0000)]
LLVM: Add inline assembly to binding.
David Terei [Wed, 14 Jul 2010 15:33:39 +0000 (15:33 +0000)]
LLVM: Fix mistype in last commit which broke TNTC under win/linux.
Ian Lynagh [Tue, 13 Jul 2010 15:37:04 +0000 (15:37 +0000)]
Remove unnecessary #include
Ian Lynagh [Tue, 13 Jul 2010 14:10:34 +0000 (14:10 +0000)]
Change some TARGET tests to HOST tests in the RTS
Which was being used seemed to be random
David Terei [Tue, 13 Jul 2010 18:32:43 +0000 (18:32 +0000)]
LLVM: Add in new LLVM mangler for implementing TNTC on OSX
simonpj@microsoft.com [Tue, 13 Jul 2010 11:57:33 +0000 (11:57 +0000)]
Refactor where an error message is generated
simonpj@microsoft.com [Tue, 13 Jul 2010 11:57:03 +0000 (11:57 +0000)]
Comments only
simonpj@microsoft.com [Tue, 13 Jul 2010 11:56:40 +0000 (11:56 +0000)]
Comments on data type families
simonpj@microsoft.com [Wed, 7 Jul 2010 13:59:45 +0000 (13:59 +0000)]
Fix Trac #T4136: take care with nullary symbol constructors
When a nullary constructor is a symbol eg (:=:) we need
to take care. Annoying.
simonpj@microsoft.com [Wed, 7 Jul 2010 12:31:25 +0000 (12:31 +0000)]
Fix Trac #4127 (and hence #4173)
The change involves a little refactoring, so that the default
method Ids are brought into scope earlier, before the value
declarations are compiled. (Since a value decl may contain
an instance decl in a quote.)
See Note [Default method Ids and Template Haskell] in
TcTyClsDcls.
simonpj@microsoft.com [Thu, 1 Jul 2010 14:01:24 +0000 (14:01 +0000)]
Fix second bug in Trac #4127
This bug concerned the awkward shadowing we do for
Template Haskell declaration brackets. Lots of
comments in
Note [Top-level Names in Template Haskell decl quotes]
Sergei Trofimovich [Fri, 9 Jul 2010 21:39:22 +0000 (21:39 +0000)]
ia64: switch handling of 'foreign import wrapper' (FIW) to libffi
I tried to build darcs-2.4.4 with ghc-6.12.3 and got coredumps when darcs is used
in interactive mode. I tried test from ticket #3516 and found out FIW code is broken.
Instead of fixing it I just switched to libffi. Result built successfully, passed
'foreign import wrapper' test from ticket #3516 and builds working darcs.
Sergei Trofimovich [Fri, 9 Jul 2010 11:59:17 +0000 (11:59 +0000)]
* storage manager: preserve upper address bits on 64bit machines (thanks to zygoloid)
Patch does not touch amd64 as it's address lengts is 48 bits at most, so amd64 is unaffected.
the issue: during ia64 ghc bootstrap (both 6.10.4 and 6.12.3) I
got the failure on stage2 phase:
"inplace/bin/ghc-stage2" -H32m -O -H64m -O0 -w ...
ghc-stage2: internal error: evacuate: strange closure type 15
(GHC version 6.12.3 for ia64_unknown_linux)
Please report this as a GHC bug: http://www.haskell.org/ghc/reportabug
make[1]: *** [libraries/dph/dph-base/dist-install/build/Data/Array/Parallel/Base/Hyperstrict.o] Aborted
gdb backtrace (break on 'barf'):
Breakpoint 1 at 0x400000000469ec31: file rts/RtsMessages.c, line 39.
(gdb) run -B/var/tmp/portage/dev-lang/ghc-6.12.3/work/ghc-6.12.3/inplace/bin --info
Starting program: /var/tmp/portage/dev-lang/ghc-6.12.3/work/ghc-6.12.3/inplace/lib/ghc-stage2 -B/var/tmp/portage/dev-lang/ghc-6.12.3/work/ghc-6.12.3/inplace/bin --info
[Thread debugging using libthread_db enabled]
Breakpoint 1, barf (s=0x40000000047915b0 "evacuate: strange closure type %d") at rts/RtsMessages.c:39
39 va_start(ap,s);
(gdb) bt
#0 barf (s=0x40000000047915b0 "evacuate: strange closure type %d") at rts/RtsMessages.c:39
#1 0x400000000474a1e0 in evacuate (p=0x6000000000147958) at rts/sm/Evac.c:756
#2 0x40000000046d68c0 in scavenge_srt (srt=0x6000000000147958, srt_bitmap=7) at rts/sm/Scav.c:348
...
> 16:52:53 < zygoloid> slyfox: i'm no ghc expert but it looks like HEAP_ALLOCED_GC(q)
> is returning true for a FUN_STATIC closure
> 17:18:43 < zygoloid> try: p HEAP_ALLOCED_miss((unsigned long)(*p) >> 20, *p)
> 17:19:12 < slyfox> (gdb) p HEAP_ALLOCED_miss((unsigned long)(*p) >> 20, *p)
> 17:19:12 < slyfox> $1 = 0
> 17:19:40 < zygoloid> i /think/ that means the mblock_cache is broken
> 17:22:45 < zygoloid> i can't help further. however i am suspicious that you seem to have pointers with similar-looking low 33
> bits and different high 4 bits, and it looks like such pointers get put into the same bucket in
> mblock_cache.
...
> 17:36:16 < zygoloid> slyfox: try changing the definition of MbcCacheLine to StgWord64, see if that helps
> 17:36:31 < zygoloid> that's in includes/rts/storage/MBlock.h
And it helped!
Sergei Trofimovich [Thu, 8 Jul 2010 18:09:43 +0000 (18:09 +0000)]
Fixing link failure of compiler on ia64 ('-Wl,' prefixed value passed directly to ld)
/usr/bin/ld -Wl,--relax -r -o dist-stage1/build/HSghc-6.10.4.o \
dist-stage1/build/BasicTypes.o dist-stage1/build/DataCon.o ...
/usr/bin/ld: unrecognized option '-Wl,--relax'
If we just drop '-Wl,' part it will not help as '-r' and '--relax' are incompatible.
Looks like '-Wl,--relax' was skipped by earlier binutils' ld as unknown option.
Removing ia64 specific path.
David Terei [Mon, 12 Jul 2010 15:25:29 +0000 (15:25 +0000)]
LLVM: Allow getelementptr to use LlvmVar for indexes.
Ian Lynagh [Sat, 10 Jul 2010 16:17:23 +0000 (16:17 +0000)]
Move all the warning workarounds to one place
Ian Lynagh [Sat, 10 Jul 2010 14:46:35 +0000 (14:46 +0000)]
xhtml is now warning-free
Ian Lynagh [Fri, 9 Jul 2010 22:45:34 +0000 (22:45 +0000)]
Move a bit of build system code
Simon Marlow [Fri, 9 Jul 2010 12:52:38 +0000 (12:52 +0000)]
adapt to the new async exceptions API
Simon Marlow [Fri, 9 Jul 2010 09:15:21 +0000 (09:15 +0000)]
quiet some new spewage
Simon Marlow [Thu, 8 Jul 2010 14:48:51 +0000 (14:48 +0000)]
New asynchronous exception control API (ghc parts)
As discussed on the libraries/haskell-cafe mailing lists
http://www.haskell.org/pipermail/libraries/2010-April/013420.html
This is a replacement for block/unblock in the asychronous exceptions
API to fix a problem whereby a function could unblock asynchronous
exceptions even if called within a blocked context.
The new terminology is "mask" rather than "block" (to avoid confusion
due to overloaded meanings of the latter).
In GHC, we changed the names of some primops:
blockAsyncExceptions# -> maskAsyncExceptions#
unblockAsyncExceptions# -> unmaskAsyncExceptions#
asyncExceptionsBlocked# -> getMaskingState#
and added one new primop:
maskUninterruptible#
See the accompanying patch to libraries/base for the API changes.
Simon Marlow [Thu, 8 Jul 2010 10:08:40 +0000 (10:08 +0000)]
remove outdated comment
Simon Marlow [Thu, 8 Jul 2010 10:08:17 +0000 (10:08 +0000)]
remove 'mode: xml' emacs settings (#2208)
Simon Marlow [Wed, 16 Jun 2010 11:13:59 +0000 (11:13 +0000)]
typo in comment
Simon Marlow [Thu, 8 Jul 2010 09:32:23 +0000 (09:32 +0000)]
Win32 getProcessElapsedTime: use a higher-resolution time source
QueryPerformanceCounter() on Windows gives much better resolution than
GetSystemTimeAsFileTime().
Sergei Trofimovich [Thu, 8 Jul 2010 06:53:18 +0000 (06:53 +0000)]
alpha: switch handling of 'foreign import wrapper' (FIW) to libffi
I tried to build ghc-6.12.3 and found out FIW part of code
does not compile anymore. It uses absent functions under #ifdef.
Instead of fixing it I just switched to libffi. Result built successfully
and passed 'foreign import wrapper' test I wrote for trac ticket #3516.
I didn't try to build -HEAD yet, but this patch only removes code, so
it should not make -HEAD worse.
Ian Lynagh [Thu, 8 Jul 2010 20:35:23 +0000 (20:35 +0000)]
Reorder the CPP flags so -optP can override the platform defines
Ian Lynagh [Wed, 7 Jul 2010 23:09:07 +0000 (23:09 +0000)]
Add docs for DatatypeContexts extension
Ian Lynagh [Wed, 7 Jul 2010 21:25:29 +0000 (21:25 +0000)]
Make datatype contexts an extension (on by default) (DatatypeContexts)
David Terei [Wed, 7 Jul 2010 22:04:48 +0000 (22:04 +0000)]
LLVM: Fix various typos in comments
Ian Lynagh [Wed, 7 Jul 2010 12:04:23 +0000 (12:04 +0000)]
Handle haddock headers when looking for LANGUAGE/OPTIONS_GHC pragmas
Ian Lynagh [Tue, 6 Jul 2010 17:30:07 +0000 (17:30 +0000)]
Make pragState call mkPState, rather than duplicating everything
This also means that extsBitmap gets set, whereas is was just being set
to 0 before.
David Terei [Wed, 7 Jul 2010 14:20:53 +0000 (14:20 +0000)]
LLVM: Add alias type defenitions to LlvmModule.
David Terei [Wed, 7 Jul 2010 12:03:20 +0000 (12:03 +0000)]
LLVM: Use packed structure type instead of structure type
The regular structure type adds padding to conform to the platform ABI,
which causes problems with structures storing doubles under windows since
we don't conform to the platform ABI there. So we use packed structures
instead now that don't do any padding.
Ian Lynagh [Tue, 6 Jul 2010 17:26:11 +0000 (17:26 +0000)]
Make mkPState and pragState take their arguments in the same order
Ian Lynagh [Tue, 6 Jul 2010 17:22:17 +0000 (17:22 +0000)]
Remove an out-of-date comment
David Terei [Mon, 5 Jul 2010 16:26:29 +0000 (16:26 +0000)]
LLVM: Stop llvm saving stg caller-save regs across C calls
This is already handled by the Cmm code generator so LLVM is simply
duplicating work. LLVM also doesn't know which ones are actually live
so saves them all which causes a fair performance overhead for C calls
on x64. We stop llvm saving them across the call by storing undef to
them just before the call.
David Terei [Mon, 5 Jul 2010 16:15:44 +0000 (16:15 +0000)]
LLVM: Add in literal undefined value to binding
David Terei [Mon, 5 Jul 2010 16:13:08 +0000 (16:13 +0000)]
LLVM: Add a literal NULL value to binding
Patch from Erik de Castro Lopo <erikd@mega-nerd.com>.
Simon Marlow [Mon, 5 Jul 2010 10:45:57 +0000 (10:45 +0000)]
refactor import declaration support (#2362)
Simon Marlow [Mon, 5 Jul 2010 10:30:14 +0000 (10:30 +0000)]
Disable dynamic linking optimisations on OS X
To improve performance of the RTS when dynamically linked on x86, I
previously disabled -fPIC for certain critical modules (the GC, and a
few others). However, build reports suggest that the dynamic linker
on OS X doesn't like this, so I'm disabling this optimsation on that
platform.
amsay@amsay.net [Fri, 25 Jun 2010 03:26:32 +0000 (03:26 +0000)]
trac #2362 (full import syntax in ghci)
'import' syntax is seperate from ':module' syntax
Ian Lynagh [Sun, 4 Jul 2010 18:41:55 +0000 (18:41 +0000)]
Simplify ghc-pkg's Cabal dependencies
We no longer support building with a compiler that doesn't come with
base 4.
Ian Lynagh [Sun, 4 Jul 2010 13:26:12 +0000 (13:26 +0000)]
Use Cabal to configure the dist-install ghc-pkg; fixes trac #4156
Ian Lynagh [Thu, 1 Jul 2010 16:20:58 +0000 (16:20 +0000)]
Remove dead code (standalone deriving flag no longer used in parser)
David Terei [Fri, 2 Jul 2010 16:05:11 +0000 (16:05 +0000)]
LLVM: Use the inbounds keyword for getelementptr instructions.
Simon Marlow [Thu, 1 Jul 2010 08:50:46 +0000 (08:50 +0000)]
threadPaused: fix pointer arithmetic
Noticed by Henrique Ferreiro <hferreiro@udc.es>, thanks!
David Terei [Thu, 1 Jul 2010 16:18:56 +0000 (16:18 +0000)]
LLVM: Change more operations to use getelementptr
Simon Marlow [Wed, 30 Jun 2010 12:55:32 +0000 (12:55 +0000)]
Add the haskell2010 package
David Terei [Wed, 30 Jun 2010 18:11:57 +0000 (18:11 +0000)]
LLVM: Use getelementptr instruction for a lot of situations
LLVM supports creating pointers in two ways, firstly through
pointer arithmetic (by casting between pointers and ints)
and secondly using the getelementptr instruction. The second way
is preferable as it gives LLVM more information to work with.
This patch changes a lot of pointer related code from the first
method to the getelementptr method.
Simon Marlow [Fri, 25 Jun 2010 10:03:13 +0000 (10:03 +0000)]
remove out of date comments; point to the wiki
benl@ouroborus.net [Tue, 29 Jun 2010 05:43:21 +0000 (05:43 +0000)]
NCG: allocatableRegs is only giving us 8 SSE regs to allocate to
David Terei [Mon, 28 Jun 2010 18:29:49 +0000 (18:29 +0000)]
LLVM: Use intrinsic functions for pow, sqrt, sin, cos
Instead of calling the C library for these Cmm functions
we use intrinsic functions provided by llvm. LLVM will
then either create a compile time constant if possible, or
use a cpu instruction or as a last resort call the C
library.
David Terei [Mon, 28 Jun 2010 16:52:56 +0000 (16:52 +0000)]
LLVM: Fix test '2047' under linux-x64
David Terei [Mon, 28 Jun 2010 15:53:55 +0000 (15:53 +0000)]
LLVM: Fix test 'ffi005' under linux-x64
David Terei [Mon, 28 Jun 2010 14:40:37 +0000 (14:40 +0000)]
LLVM: Update to use new fp ops introduced in 2.7
David Terei [Mon, 28 Jun 2010 11:51:20 +0000 (11:51 +0000)]
Add noalias and nocapture attributes to pointer stg registers
At the moment this gives a very slight performance boost of around 1 - 2%.
Future changes to the generated code though so that pointers are kept as
pointers more often instead of being cast to integer types straight away
should hopefully improve the benefit this brings.
Simon Marlow [Mon, 28 Jun 2010 09:05:36 +0000 (09:05 +0000)]
during shutdown, only free the heap if we waited for foreign calls to exit
shelarcy [Sun, 20 Jun 2010 07:07:59 +0000 (07:07 +0000)]
Fix typo in -ddump-pass's document.
dmp@rice.edu [Thu, 24 Jun 2010 16:35:14 +0000 (16:35 +0000)]
Add #undefs for posix source symbols when including papi.h
Validation fails when validating with PAPI support (i.e. GhcRtsWithPapi = YES
in validate.mk). The problem is that the posix symbols are defined by a header
included from papi.h. Compilation then fails because these symbols are
redefined in PosixSource.h.
This patch adds an undefine for the posix symbols after including papi.h and
before including PosixSource.h. The #undefines are localized to Papi.c since
that is the only case where they are getting defined twice.
Ian Lynagh [Fri, 25 Jun 2010 22:09:53 +0000 (22:09 +0000)]
Use machdepCCOpts in runPhase_MoveBinary; fixes trac #3952
David Terei [Fri, 25 Jun 2010 11:57:29 +0000 (11:57 +0000)]
LLVM: Fix bug with calling tail with empty list
benl@ouroborus.net [Thu, 24 Jun 2010 09:13:39 +0000 (09:13 +0000)]
Fix warnings
benl@ouroborus.net [Thu, 24 Jun 2010 08:31:21 +0000 (08:31 +0000)]
NCG: Comments and formatting only
benl@ouroborus.net [Thu, 24 Jun 2010 08:27:17 +0000 (08:27 +0000)]
NCG: Do the actual reversing of SCCs
benl@ouroborus.net [Thu, 24 Jun 2010 08:26:25 +0000 (08:26 +0000)]
NCG: Fix dumping of graphs in regalloc stats for graph allocator
benl@ouroborus.net [Thu, 24 Jun 2010 08:24:37 +0000 (08:24 +0000)]
NCG: Reverse SCCs after each round in the graph allocator
benl@ouroborus.net [Thu, 24 Jun 2010 08:14:45 +0000 (08:14 +0000)]
NCG: Don't actually complain on unreachable code blocks