Lemmih [Sat, 4 Mar 2006 13:41:50 +0000 (13:41 +0000)]
Enumerate imports and remove dead code.
Lemmih [Sat, 4 Mar 2006 13:30:08 +0000 (13:30 +0000)]
Use hscCodeGenNothing instead of hscCodeGenSimple.
Lemmih [Sat, 4 Mar 2006 13:27:12 +0000 (13:27 +0000)]
Comments and esthetical changes.
Lemmih [Sat, 4 Mar 2006 13:03:27 +0000 (13:03 +0000)]
Remove the old HscMain code.
Lemmih [Sat, 4 Mar 2006 12:41:11 +0000 (12:41 +0000)]
Use the new HscMain API in DriverPipeline.
Lemmih [Sat, 4 Mar 2006 12:40:51 +0000 (12:40 +0000)]
Export the new HscMain API.
Lemmih [Sat, 4 Mar 2006 12:39:57 +0000 (12:39 +0000)]
Allow hscCompileMake to target HscNothing.
Lemmih [Sat, 4 Mar 2006 12:35:55 +0000 (12:35 +0000)]
Description of the new HscMain.
Lemmih [Sat, 4 Mar 2006 00:24:40 +0000 (00:24 +0000)]
Initial hack on the new low-level compiler API.
None of the new code is in use yet.
The current Haskell compiler (HscMain.hscMain) isn't as typed
and as hack-free as we'd like. Here's a list of the things it
does wrong:
* In one shot mode, it returns the new interface as _|_,
when recompilation isn't required. It's then up to the
users of hscMain to keep their hands off the result.
* (Maybe ModIface) is passed around when it's known that it's
a Just. Hey, we got a type-system, let's use it.
* In one shot mode, the backend is returning _|_ for the
new interface. This is done to prevent space leaks since
we know that the result of a one shot compilation is never
used. Again, it's up to the users of hscMain to keep their
hands off the result.
* It is allowed to compile a hs-boot file to bytecode even
though that doesn't make sense (it always returns
Nothing::Maybe CompiledByteCode).
* Logic and grunt work is completely mixed. The frontend
and backend keeps checking what kind of input they're handling.
This makes it very hard to get an idea of what the functions
actually do.
* Extra work is performed when using a null code generator.
The new code refactors out the frontends (Haskell, Core), the
backends (Haskell, boot) and the code generators (one-shot, make,
nothing, interactive) and allows them to be combined in typesafe ways.
A one-shot compilation doesn't return new interfaces at all so we
don't need the _|_ space-leak hack. In 'make' mode (when not
targeting bytecode) the result doesn't contain
Nothing::Maybe CompiledByteCode. In interactive mode, the result
is always a CompiledByteCode. The code gens are completely separate
so compiling to Nothing doesn't perform any extra work.
DriverPipeline needs a bit of work before it can use the new
API.
Simon Marlow [Fri, 3 Mar 2006 13:31:35 +0000 (13:31 +0000)]
callerSaveVolatileRegs: fix the Nothing case
When the volatile regs attached to a CmmCall is Nothing, it means
"save everything", not "save nothing".
wolfgang.thaller@gmx.net [Thu, 9 Feb 2006 06:16:09 +0000 (06:16 +0000)]
Darwin/x86: Support __IMPORT segments in the Linker
wolfgang.thaller@gmx.net [Sun, 5 Feb 2006 16:26:18 +0000 (16:26 +0000)]
Darwin/x86 Mangler: Make sure each imported symbol stub gets a separate chunk.
wolfgang.thaller@gmx.net [Sun, 5 Feb 2006 16:24:53 +0000 (16:24 +0000)]
Darwin/x86: Print 64-bit literals in a way Apple understands.
wolfgang.thaller@gmx.net [Fri, 3 Feb 2006 03:52:20 +0000 (03:52 +0000)]
Darwin/x86: Handle IMPORT sections in mangler
simonpj@microsoft.com [Thu, 2 Mar 2006 17:52:47 +0000 (17:52 +0000)]
Fix free-variable finder
After a long hunt I discovered that the reason that GHC.Enum.eftIntFB
was being marked as a loop-breaker was the bizare behaviour of exprFreeVars,
which returned not only the free variables of an expression but also the
free variables of RULES attached to variables occuring in the expression!
This was clearly deliberate (the comment was CoreFVs rev 1.1 in 1999) but
I've removed it; I've left the comment with further notes in case there
turns out to be a Deep Reason.
Simon Marlow [Thu, 2 Mar 2006 17:05:05 +0000 (17:05 +0000)]
Make -split-objs work with --make
This turned out to be a lot easier than I thought. Just moving a few
bits of -split-objs support from the build system into the compiler
was enough. The only thing that Cabal needs to do in order to support
-split-objs now is to pass the names of the split objects rather than
the monolithic ones to 'ar'.
Simon Marlow [Thu, 2 Mar 2006 16:30:59 +0000 (16:30 +0000)]
fix for compiling the base package with --make
Simon Marlow [Thu, 2 Mar 2006 14:16:28 +0000 (14:16 +0000)]
replace several 'fromJust's with 'expectJust's
Simon Marlow [Thu, 2 Mar 2006 14:08:18 +0000 (14:08 +0000)]
minor cleanup; remove one use of fromJust
simonpj@microsoft.com [Thu, 2 Mar 2006 13:52:58 +0000 (13:52 +0000)]
Sigh: one more fix to undoing the erroneous patch
Lemmih [Wed, 1 Mar 2006 19:41:45 +0000 (19:41 +0000)]
Remember the free vars in HsRule.
simonpj@microsoft.com [Wed, 1 Mar 2006 17:56:00 +0000 (17:56 +0000)]
Complete undo of Simplify-the-IdInfo-before-any-RHSs
Simon Marlow [Wed, 1 Mar 2006 16:53:41 +0000 (16:53 +0000)]
Disable the NCG if GhcUnregisterised=YES
The NCG cannot be used in an unregisterised compiler, so there's no
point in including it.
simonpj@microsoft.com [Wed, 1 Mar 2006 16:14:23 +0000 (16:14 +0000)]
Undo patch Simplify-the-IdInfo-before-any-RHSs
Sadly the above patch wasn't right, because it fouls
up pre/postInlineUnconditionally. This patch puts
things back as they were functionally, but with slightly
tidied-up code.
Simon Marlow [Wed, 1 Mar 2006 16:07:01 +0000 (16:07 +0000)]
fix parse error
Simon Marlow [Wed, 1 Mar 2006 14:09:31 +0000 (14:09 +0000)]
fix compilation with older GHCs
Simon Marlow [Wed, 1 Mar 2006 13:07:36 +0000 (13:07 +0000)]
update docs w.r.t. dllMain() definition (EXTFUN is no more)
Simon Marlow [Wed, 1 Mar 2006 13:20:18 +0000 (13:20 +0000)]
add comments
Simon Marlow [Wed, 1 Mar 2006 13:19:48 +0000 (13:19 +0000)]
add ':set prompt' command
contributed by Neil Mitchell <ndmitchell@gmail.com>, with docs by me.
Simon Marlow [Wed, 1 Mar 2006 11:35:36 +0000 (11:35 +0000)]
Add support for Data.Char.generalCategory to libcompat
this is so that the stage1 compiler has proper support for Unicode.
Should fix these errors:
lexical error in string/character literal at character '\8759'
when building the stage2 compiler.
Simon Marlow [Tue, 28 Feb 2006 16:37:24 +0000 (16:37 +0000)]
takeMVar/putMVar were missing some write barriers when modifying a TSO
This relates to the recent introduction of clean/dirty TSOs, and the
consqeuent write barriers required. We were missing some write
barriers in the takeMVar/putMVar family of primops, when performing
the take/put directly on another TSO.
Fixes #705, and probably some test failures.
Simon Marlow [Tue, 28 Feb 2006 15:36:40 +0000 (15:36 +0000)]
A better x86_64 register mapping, with more argument registers.
Now that we can handle using C argument registers as global registers,
extend the x86_64 register mapping. We now have 5 integer argument
registers, 4 float, and 2 double (all caller-saves). This results in a
reasonable speedup on x86_64.
Simon Marlow [Tue, 28 Feb 2006 15:31:34 +0000 (15:31 +0000)]
filter the messages generated by gcc
Eliminate things like "warning: call-clobbered register used as global
register variable", which is an non-suppressible warning from gcc.
Simon Marlow [Tue, 28 Feb 2006 15:29:42 +0000 (15:29 +0000)]
Allow C argument regs to be used as global regs (R1, R2, etc.)
The problem here was that we generated C calls with expressions
involving R1 etc. as parameters. When some of the R registers are
also C argument registers, both GCC and the native code generator
generate incorrect code. The hacky workaround is to assign
problematic arguments to temporaries first; fortunately this works
with both GCC and the NCG, but we have to be careful not to undo this
with later optimisations (see changes to CmmOpt).
Simon Marlow [Tue, 28 Feb 2006 15:25:24 +0000 (15:25 +0000)]
pass arguments to unknown function calls in registers
We now have more stg_ap entry points: stg_ap_*_fast, which take
arguments in registers according to the platform calling convention.
This is faster if the function being called is evaluated and has the
right arity, which is the common case (see the eval/apply paper for
measurements).
We still need the stg_ap_*_info entry points for stack-based
application, such as an overflows when a function is applied to too
many argumnets. The stg_ap_*_fast functions actually just check for
an evaluated function, and if they don't find one, push the args on
the stack and invoke stg_ap_*_info. (this might be slightly slower in
some cases, but not the common case).
Simon Marlow [Tue, 28 Feb 2006 15:18:15 +0000 (15:18 +0000)]
fix live register annotations on foreign calls
fix one incorrect case, and made several more accurate
simonpj@microsoft.com [Tue, 28 Feb 2006 13:31:57 +0000 (13:31 +0000)]
Simplify the IdInfo before any RHSs
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Simplfy (i.e. substitute) the IdInfo of a recursive group of Ids
before looking at the RHSs of *any* of them. That way, the rules
are available throughout the letrec, which means we don't have to
be careful about function to put first.
Before, we just simplified the IdInfo of f before looking at f's RHS,
but that's not so good when f and g both have RULES, and both rules
mention the other.
This change makes things simpler, but shouldn't change performance.
simonpj@microsoft.com [Tue, 28 Feb 2006 11:45:02 +0000 (11:45 +0000)]
Add floating-point symbols to the list
Simon Marlow [Mon, 27 Feb 2006 15:38:28 +0000 (15:38 +0000)]
slightly better dependencies for GenApply.hs
Simon Marlow [Mon, 27 Feb 2006 15:28:22 +0000 (15:28 +0000)]
x86_64: include .type and .size directives in the output, for valgrind
kr.angelov@gmail.com [Wed, 22 Feb 2006 20:29:12 +0000 (20:29 +0000)]
The initStablePtrTable should be called before ACQUIRE_LOCK(&stable_mutex)
kr.angelov@gmail.com [Wed, 22 Feb 2006 20:17:21 +0000 (20:17 +0000)]
support LOCK_DEBUG for Windows
Simon Marlow [Mon, 27 Feb 2006 11:11:03 +0000 (11:11 +0000)]
mmap() errors on Darwin: use errorBelch/exit instead of barf()
The most likely cause is out-of-memory, not an RTS error.
Simon Marlow [Mon, 27 Feb 2006 10:59:39 +0000 (10:59 +0000)]
remove empty .SECONDARY target
This works around a problem with recent versions of GNU make that take
a long time when all targets are declared intermediate with
.SECONDARY. See
https://savannah.gnu.org/bugs/?func=detailitem&item_id=15584
for discussion of the GNU make issue.
claus.reinke@talk21.com [Sat, 25 Feb 2006 21:59:45 +0000 (21:59 +0000)]
these tables have four columns, not three
Lemmih [Sun, 26 Feb 2006 12:04:07 +0000 (12:04 +0000)]
Remove comment about imports and exports not being in the renamer result.
wolfgang.thaller@gmx.net [Sat, 25 Feb 2006 22:59:20 +0000 (22:59 +0000)]
NCG: fix mkRegRegMoveInstr for x86-64
wolfgang.thaller@gmx.net [Sat, 25 Feb 2006 03:39:54 +0000 (03:39 +0000)]
NCG: Fix Typo in Register Allocator Loop Patch
Fix previous patch "NCG: Handle loops in register allocator"
Of course, I broke it when correcting a style problem just before committing.
wolfgang.thaller@gmx.net [Sat, 25 Feb 2006 03:14:34 +0000 (03:14 +0000)]
NCG: Handle loops in register allocator
Fill in the missing parts in the register allocator so that it can
handle loops.
*) The register allocator now runs in the UniqSuppy monad, as it needs
to be able to generate unique labels for fixup code blocks.
*) A few functions have been added to RegAllocInfo:
mkRegRegMoveInstr -- generates a good old move instruction
mkBranchInstr -- used to be MachCodeGen.genBranch
patchJump -- Change the destination of a jump
*) The register allocator now makes sure that only one spill slot is used
for each temporary, even if it is spilled and reloaded several times.
This obviates the need for memory-to-memory moves in fixup code.
LIMITATIONS:
*) The case where the fixup code needs to cyclically permute a group of
registers is currently unhandled. This will need more work once we come
accross code where this actually happens.
*) Register allocation for code with loop is probably very inefficient
(both at compile-time and at run-time).
*) We still cannot compile the RTS via NCG, for various other reasons.
Lemmih [Fri, 24 Feb 2006 22:37:04 +0000 (22:37 +0000)]
Oops, I got a little trigger happy while trimming package.conf.in.
Lemmih [Fri, 24 Feb 2006 21:50:20 +0000 (21:50 +0000)]
Prettify parts of RnNames. No change of functionality.
Lemmih [Fri, 24 Feb 2006 21:27:48 +0000 (21:27 +0000)]
Remove duplicate code from RnNames.
Lemmih [Fri, 24 Feb 2006 20:37:27 +0000 (20:37 +0000)]
Remove non-existing modules from package.conf.in
Lemmih [Fri, 24 Feb 2006 16:54:09 +0000 (16:54 +0000)]
Remove some unused bindings frm RnNames.
Lemmih [Fri, 24 Feb 2006 15:47:04 +0000 (15:47 +0000)]
Rather large refactoring of RnNames.
This restructoring makes the renamed export and import lists
available in IDE mode.
Simon Marlow [Fri, 24 Feb 2006 14:41:26 +0000 (14:41 +0000)]
add file to go with "extract some of the generic..." patch
Simon Marlow [Fri, 24 Feb 2006 14:30:51 +0000 (14:30 +0000)]
oops, undo accidental addition of package-time settings
Simon Marlow [Fri, 24 Feb 2006 12:46:08 +0000 (12:46 +0000)]
turn off a trace
Simon Marlow [Fri, 24 Feb 2006 12:43:49 +0000 (12:43 +0000)]
add instance Outputable CLabel
Simon Marlow [Fri, 24 Feb 2006 12:40:33 +0000 (12:40 +0000)]
-O2 implies -optc-O2 now
Simon Marlow [Fri, 24 Feb 2006 11:17:53 +0000 (11:17 +0000)]
extract some of the generic C-- optimisations from the NCG
Simon Marlow [Thu, 23 Feb 2006 15:51:20 +0000 (15:51 +0000)]
lag/drag/void: add an extra assertion, and some commentary
Simon Marlow [Thu, 23 Feb 2006 15:50:46 +0000 (15:50 +0000)]
lag/drag/void profiling fix
We were searching the wrong part of the heap for dead objects, this
was broken by recent changes to the step structure: from-space is now
in step->old_blocks, not step->blocks. Fortunately some assertions in
ProfHeap picked up the problem.
Simon Marlow [Thu, 23 Feb 2006 15:48:59 +0000 (15:48 +0000)]
add (trivial) support for STM objects in lag/drag/void profiling
Simon Marlow [Thu, 23 Feb 2006 15:09:04 +0000 (15:09 +0000)]
bugfix for LDV profiling on 64-bit platforms
There was an integer overflow in the definition of LDV_RECORD_CREATE
when StgWord is 64 bits.
Simon Marlow [Thu, 23 Feb 2006 14:45:37 +0000 (14:45 +0000)]
warning fix
Simon Marlow [Thu, 23 Feb 2006 14:30:13 +0000 (14:30 +0000)]
further fix for floating point primitives
simonpj@microsoft.com [Thu, 23 Feb 2006 14:21:01 +0000 (14:21 +0000)]
Comment wibbles
simonpj@microsoft.com [Thu, 23 Feb 2006 13:41:54 +0000 (13:41 +0000)]
Wibbles to instance validity checking
simonpj@microsoft.com [Thu, 23 Feb 2006 13:01:04 +0000 (13:01 +0000)]
Fix comment
simonpj@microsoft.com [Thu, 23 Feb 2006 13:00:29 +0000 (13:00 +0000)]
Improve error reporting for type-improvement errors
simonpj@microsoft.com [Thu, 23 Feb 2006 12:59:58 +0000 (12:59 +0000)]
Reject polytypes in instance declarations (for now anyway)
simonpj@microsoft.com [Fri, 10 Feb 2006 10:40:28 +0000 (10:40 +0000)]
Remove duplicate comment
Lemmih [Wed, 22 Feb 2006 17:36:48 +0000 (17:36 +0000)]
Add renamed fixities to HsGroup.
Simon Marlow [Wed, 22 Feb 2006 16:38:27 +0000 (16:38 +0000)]
oops, initialize atomic_modify_mutvar_mutex
Simon Marlow [Wed, 22 Feb 2006 16:07:33 +0000 (16:07 +0000)]
check black holes before doing GC in scheduleDoHeapProfile()
fixes #687, see comment for details.
Simon Marlow [Wed, 22 Feb 2006 14:18:36 +0000 (14:18 +0000)]
fix for ASSIGN_BaseReg() in the unregisterised way
Simon Marlow [Wed, 22 Feb 2006 14:07:19 +0000 (14:07 +0000)]
floating-point fix for x86_64
For 32-bit float primtives like sinFloat#, we currently call the
double versions of the C library functions (sin(), cos() etc.). It
seems more correct to call the float versions (sinf(), cosf() etc.).
This makes a difference on x86_64, I'm not entirely sure why, but this
way at least generates more consistent results and avoids extra
promotion/demotion instructions when calling these primitives.
Simon Marlow [Tue, 21 Feb 2006 16:37:11 +0000 (16:37 +0000)]
fix a deadlock in atomicModifyMutVar#
atomicModifyMutVar# was re-using the storage manager mutex (sm_mutex)
to get its atomicity guarantee in SMP mode. But recently the addition
of a call to dirty_MUT_VAR() to implement the read barrier lead to a
rare deadlock case, because dirty_MUT_VAR() very occasionally needs to
allocate a new block to chain on the mutable list, which requires
sm_mutex.
Simon Marlow [Tue, 21 Feb 2006 16:33:08 +0000 (16:33 +0000)]
warning fix
Lemmih [Tue, 21 Feb 2006 10:51:47 +0000 (10:51 +0000)]
Mention the 'Encoding' module in package.conf.in
Ross Paterson [Mon, 13 Feb 2006 16:10:44 +0000 (16:10 +0000)]
Loosen the rules for instance declarations (Part 3)
Relax the restrictions on derived instances in the same way, so we
can write
data MinHeap h a = H a (h a) deriving (Show)
kr.angelov@gmail.com [Sun, 12 Feb 2006 09:50:19 +0000 (09:50 +0000)]
If we don't have libreadline then we need some dummy definition for complete* functions.
wolfgang.thaller@gmx.net [Sun, 12 Feb 2006 03:47:36 +0000 (03:47 +0000)]
SMP bugfix: reload capability from task->cap after scheduleDoGC
wolfgang.thaller@gmx.net [Sun, 12 Feb 2006 03:33:52 +0000 (03:33 +0000)]
SMP support (xchg(), cas() and mb()) for PowerPC
Lemmih [Fri, 10 Feb 2006 18:13:19 +0000 (18:13 +0000)]
Bugfix in completion code for :set and :unset.
Lemmih [Fri, 10 Feb 2006 17:17:28 +0000 (17:17 +0000)]
Completion for :set, :unset and :undef.
Simon Marlow [Fri, 10 Feb 2006 15:32:36 +0000 (15:32 +0000)]
oops, forgot some more SMP->THREADED_RTS conversions
Simon Marlow [Fri, 10 Feb 2006 12:35:52 +0000 (12:35 +0000)]
fix test for REG_BaseReg (it's spelled REG_Base)
Duncan Coutts [Thu, 9 Feb 2006 09:32:04 +0000 (09:32 +0000)]
Change CVS for _darcs in dirs to prune during make dist
Simon Marlow [Fri, 10 Feb 2006 12:00:21 +0000 (12:00 +0000)]
fix for dirty_MUT_VAR: don't try to recordMutableCap in gen 0
Simon Marlow [Fri, 10 Feb 2006 11:21:11 +0000 (11:21 +0000)]
STM fix from Tim Harris
Fixes assertion failures with STM and -debug. Tim says:
Sorry, it's a problem in how nested transactions are handled in
non-SMP builds. It'll bite when trying to commit a nested transaction
which has read from a TVar but not updated it.
The call to validate_and_acquire_ownership in
stmCommitNestedTransaction should be the same as that in
stmCommitNestedTransaction, i.e.:
result = validate_and_acquire_ownership(trec, (!use_read_phase), TRUE);
Simon Marlow [Thu, 9 Feb 2006 12:30:56 +0000 (12:30 +0000)]
improvement to the deadlock detection
When the RTS is idle, as detected by the timer signal, instead of
prodding capabilities from the signal handler (which is not guaranteed
to work - pthread_cond_signal() can't be called from signal handlers),
create a new thread to do it.
Lemmih [Fri, 10 Feb 2006 09:46:01 +0000 (09:46 +0000)]
Simplify the -B handling. The interface to the ghc library has changed slightly.
simonpj@microsoft.com [Thu, 9 Feb 2006 17:53:28 +0000 (17:53 +0000)]
Fix desugaring of unboxed tuples
This patch is a slightly-unsatisfactory fix to desugaring unboxed
tuples; it fixes ds057 which has been failing for some time.
Unsatisfactory because rather ad hoc -- but that applies to lots
of the unboxed tuple stuff.
Simon Marlow [Thu, 9 Feb 2006 16:22:47 +0000 (16:22 +0000)]
x86_64: fix case of out-of-range operands to leaq
Simon Marlow [Thu, 9 Feb 2006 15:44:49 +0000 (15:44 +0000)]
Merge the smp and threaded RTS ways
Now, the threaded RTS also includes SMP support. The -smp flag is a
synonym for -threaded. The performance implications of this are small
to negligible, and it results in a code cleanup and reduces the number
of combinations we have to test.
Simon Marlow [Thu, 9 Feb 2006 15:04:20 +0000 (15:04 +0000)]
change dirty_MUT_VAR() to use recordMutableCap()
rather than recordMutableGen(), the former works better in SMP
Simon Marlow [Thu, 9 Feb 2006 12:30:56 +0000 (12:30 +0000)]
improvement to the deadlock detection
When the RTS is idle, as detected by the timer signal, instead of
prodding capabilities from the signal handler (which is not guaranteed
to work - pthread_cond_signal() can't be called from signal handlers),
create a new thread to do it.
simonpj@microsoft.com [Thu, 9 Feb 2006 12:42:08 +0000 (12:42 +0000)]
Fix typo