ghc-hetmet.git
22 years ago[project @ 2001-12-18 12:55:34 by simonmar]
simonmar [Tue, 18 Dec 2001 12:55:34 +0000 (12:55 +0000)]
[project @ 2001-12-18 12:55:34 by simonmar]
merge rev. 1.11.2.2 from ghc-5-02-branch (remove -O2-for-C).

22 years ago[project @ 2001-12-18 12:33:45 by simonmar]
simonmar [Tue, 18 Dec 2001 12:33:45 +0000 (12:33 +0000)]
[project @ 2001-12-18 12:33:45 by simonmar]
remove unnecessary #include

22 years ago[project @ 2001-12-18 12:13:05 by simonmar]
simonmar [Tue, 18 Dec 2001 12:13:05 +0000 (12:13 +0000)]
[project @ 2001-12-18 12:13:05 by simonmar]
Add the missing options list to the section "Replacing the program for
one or more phases".

22 years ago[project @ 2001-12-18 10:37:52 by simonmar]
simonmar [Tue, 18 Dec 2001 10:37:52 +0000 (10:37 +0000)]
[project @ 2001-12-18 10:37:52 by simonmar]
Allow opening char & block devices with openFile.  Opening a char
device gets you a stream, and a block device a file (these are
heuristics since we can't really tell without trying to lseek() on the
device whether it supports seeking or not, but the defaults are at
least safe).

22 years ago[project @ 2001-12-17 18:03:08 by sewardj]
sewardj [Mon, 17 Dec 2001 18:03:09 +0000 (18:03 +0000)]
[project @ 2001-12-17 18:03:08 by sewardj]
Redo translation of array indexing primops in order to insert 8 <-> 32
bit casts when dealing with Char arrays.  Also facilitate future removal
of CMem and MO_{Read,Write}OSBI.

In the process, notice and fix a large bogon in x86/sparc implementation
of signed and unsigned integer widening.

22 years ago[project @ 2001-12-17 16:01:44 by simonmar]
simonmar [Mon, 17 Dec 2001 16:01:44 +0000 (16:01 +0000)]
[project @ 2001-12-17 16:01:44 by simonmar]
comment wibbles

22 years ago[project @ 2001-12-17 12:33:45 by simonmar]
simonmar [Mon, 17 Dec 2001 12:33:45 +0000 (12:33 +0000)]
[project @ 2001-12-17 12:33:45 by simonmar]
Generate better code for case-of-literal (i.e. just do the
assignment).  These crop up now that the simplifier is a bit more
careful about duplicating literal strings.

22 years ago[project @ 2001-12-17 12:32:05 by simonmar]
simonmar [Mon, 17 Dec 2001 12:32:05 +0000 (12:32 +0000)]
[project @ 2001-12-17 12:32:05 by simonmar]
mkLocalNonRec bug fix: we always want to generate a case when the rhs
of a binding is an unlifted type.  Previously the two cases for an
unlifted rhs and a strict binding were handled together which caused
some confusion, so now the cases are separate.

22 years ago[project @ 2001-12-17 10:12:34 by simonmar]
simonmar [Mon, 17 Dec 2001 10:12:34 +0000 (10:12 +0000)]
[project @ 2001-12-17 10:12:34 by simonmar]
slightly clearer fix for previous bogon, and re-indent the function

22 years ago[project @ 2001-12-17 09:30:07 by simonpj]
simonpj [Mon, 17 Dec 2001 09:30:07 +0000 (09:30 +0000)]
[project @ 2001-12-17 09:30:07 by simonpj]
Fix ifdefery bracketing bug on Win32

22 years ago[project @ 2001-12-15 12:03:08 by panne]
panne [Sat, 15 Dec 2001 12:03:08 +0000 (12:03 +0000)]
[project @ 2001-12-15 12:03:08 by panne]
Re-added #ifdef which was lost in last commit

22 years ago[project @ 2001-12-14 17:24:19 by simonpj]
simonpj [Fri, 14 Dec 2001 17:24:19 +0000 (17:24 +0000)]
[project @ 2001-12-14 17:24:19 by simonpj]
Add a rule for foldr k z [x]

22 years ago[project @ 2001-12-14 17:24:03 by simonpj]
simonpj [Fri, 14 Dec 2001 17:24:05 +0000 (17:24 +0000)]
[project @ 2001-12-14 17:24:03 by simonpj]
-------------------------
Performance tuning things
-------------------------

I did some nofib tests, and fixed a number of performance problems.

1.  Things were getting floated to top level, and that prevented
some useful fusion happening.
y = build g
x = foldr k z y

Fixed by arranging that we only get really keen on floating to top
level in the second run of the let-float-out pass.

2.  Some fettling up on the let-floater itself.  It had some parameters
that weren't even being used!  And it was stupidly floating things out
of a one-shot lambda, and the float-in pass didn't float them back in.
I think I fixed both of these problems.

3.  The eta-reducer was not eta-reducing (/\a -> g a) to g.  In general
it has to be a bit careful because "seq" means that (\x -> g x) is
not in general the same as g ---- but it *is* the same for a type lambda.

This turned out to be important in rule matching, where the foldr/build
rule was not firing because the LHS of the rule looked like
foldr k z (/\ a -> g a) = ...
which never matched!  Result, no fusion to speak of!

4.  The simplifier was a bit too gung ho about inlining used-once
things bound to constructor args.  The comment is with Simplify.simplNonRecX.

22 years ago[project @ 2001-12-14 16:57:36 by sewardj]
sewardj [Fri, 14 Dec 2001 16:57:36 +0000 (16:57 +0000)]
[project @ 2001-12-14 16:57:36 by sewardj]
Sparc NCG changes to track recent mulIntC# changes.  The Prelude
can now finally be compiled with the sparc NCG.

Also (incidentally) emit sparc integer multiply insns directly
rather than calling a helper routine.  Most sparcs should implement
them by now :)

22 years ago[project @ 2001-12-14 15:26:14 by sewardj]
sewardj [Fri, 14 Dec 2001 15:26:16 +0000 (15:26 +0000)]
[project @ 2001-12-14 15:26:14 by sewardj]
Get rid of multiple-result MachOps (MO_NatS_AddC, MO_NatS_SubC,
MO_NatS_MulC) which implement {add,sub,mul}IntC#.  Supporting gunk
in the NCG disappears as a result.

Instead:

* {add,sub}IntC# are translated out during abstract C simplification,
  turning into the xor-xor-invert-and-shift sequence previously defined
  in PrimOps.h.

* mulIntC# is more difficult to get rid of portably.  Instead we have
  a new single-result PrimOp, mulIntMayOflo, with corresponding MachOp
  MO_NatS_MulMayOflo.  This tells you whether a W x W -> W signed
  multiply might overflow, where W is the word size.  When W=32, is
  implemented by computing a 2W-long result.  When W=64, we use the
  previous approximation.

PrelNum.lhs' implementation of timesInteger changes slightly, to use
the new PrimOp.

22 years ago[project @ 2001-12-14 12:05:15 by simonmar]
simonmar [Fri, 14 Dec 2001 12:05:30 +0000 (12:05 +0000)]
[project @ 2001-12-14 12:05:15 by simonmar]
shiftR# --> shiftRL#

22 years ago[project @ 2001-12-13 23:32:21 by sof]
sof [Thu, 13 Dec 2001 23:32:21 +0000 (23:32 +0000)]
[project @ 2001-12-13 23:32:21 by sof]
shift wibble

22 years ago[project @ 2001-12-13 12:33:49 by sewardj]
sewardj [Thu, 13 Dec 2001 12:33:50 +0000 (12:33 +0000)]
[project @ 2001-12-13 12:33:49 by sewardj]
Sparc NCG fixes for 16 bit loads/stores.

22 years ago[project @ 2001-12-13 11:42:47 by simonmar]
simonmar [Thu, 13 Dec 2001 11:42:47 +0000 (11:42 +0000)]
[project @ 2001-12-13 11:42:47 by simonmar]
SUBDIR builds now happen *after* the current directory, to alleviate
problems caused by the including of _hsc.o files in cbits libs - if
the .hsc file was touched and we recurse into the cbits lib first,
then hsc2hs got run in the cbits lib generating a bogus Foo.hs file in
the current directory which refers to ../Foo_hsc.h.

There was a comment saying that the SUBDIR builds were first because
of something to do with building DLLs in hslibs, but didn't give any
more detail.  If/when DLLs are re-enabled we can revisit this.

22 years ago[project @ 2001-12-13 11:12:27 by simonmar]
simonmar [Thu, 13 Dec 2001 11:12:27 +0000 (11:12 +0000)]
[project @ 2001-12-13 11:12:27 by simonmar]
Add shifty wrappers:

   shiftL#, shiftR# :: Word# -> Int# -> Word#
   iShiftL#, iShiftRA#, iShiftRL# :: Int# -> Int# -> Int#

22 years ago[project @ 2001-12-13 10:48:29 by simonpj]
simonpj [Thu, 13 Dec 2001 10:48:29 +0000 (10:48 +0000)]
[project @ 2001-12-13 10:48:29 by simonpj]
Swap order of test; see comments in code

22 years ago[project @ 2001-12-13 10:47:28 by sewardj]
sewardj [Thu, 13 Dec 2001 10:47:28 +0000 (10:47 +0000)]
[project @ 2001-12-13 10:47:28 by sewardj]
Documentation-only change: say that shift ops have undefined results
for shift amounts outside the range 0 to word size - 1 inclusive.

22 years ago[project @ 2001-12-13 09:23:22 by sof]
sof [Thu, 13 Dec 2001 09:23:23 +0000 (09:23 +0000)]
[project @ 2001-12-13 09:23:22 by sof]
new option, --enable-src-tree-happy, which forces the use of happy/src/happy-inplace as HAPPY

22 years ago[project @ 2001-12-13 01:00:28 by sof]
sof [Thu, 13 Dec 2001 01:00:28 +0000 (01:00 +0000)]
[project @ 2001-12-13 01:00:28 by sof]
Document -i option

22 years ago[project @ 2001-12-13 00:59:57 by sof]
sof [Thu, 13 Dec 2001 00:59:57 +0000 (00:59 +0000)]
[project @ 2001-12-13 00:59:57 by sof]
New option, -i <file> / --input-file=<file>, which controls
where to read new package specs from. If <file> is equal to
"-", stdin is used as input source. The default value for
<file> is "-".

22 years ago[project @ 2001-12-12 18:12:45 by sewardj]
sewardj [Wed, 12 Dec 2001 18:12:46 +0000 (18:12 +0000)]
[project @ 2001-12-12 18:12:45 by sewardj]
Make the sparc native code generator work again after recent
primop hackery.

* Track the change from PrimOp to MachOp at the Stix level.

* Teach the sparc insn selector how to generate 64-bit code.

* Fix various bogons in sparc {Int,Double,Float} <-> {Int,Double,Float}
  conversions which only happened to generate correct code by
  accident, so far.

* Synthesise BaseReg from &MainCapability.r on archs which do not
  have BaseReg in a regiser (eg sparc :)

At the moment {add,sub,mul}Int# are not implemented.  To be fixed.

22 years ago[project @ 2001-12-12 15:59:33 by simonmar]
simonmar [Wed, 12 Dec 2001 15:59:33 +0000 (15:59 +0000)]
[project @ 2001-12-12 15:59:33 by simonmar]
Include the CCS ID in the heap profile, so you can find the full CCS
description in <foo>.prof or the XML profile output.

22 years ago[project @ 2001-12-12 15:13:20 by simonmar]
simonmar [Wed, 12 Dec 2001 15:13:20 +0000 (15:13 +0000)]
[project @ 2001-12-12 15:13:20 by simonmar]
Include the cost-centre-stack ID in the time profiling output.

22 years ago[project @ 2001-12-12 15:01:25 by simonmar]
simonmar [Wed, 12 Dec 2001 15:01:25 +0000 (15:01 +0000)]
[project @ 2001-12-12 15:01:25 by simonmar]
Fix a couple of assertions.

22 years ago[project @ 2001-12-12 14:59:41 by simonmar]
simonmar [Wed, 12 Dec 2001 14:59:41 +0000 (14:59 +0000)]
[project @ 2001-12-12 14:59:41 by simonmar]
Cache whether a particular CCS is "selected" during this heap
profiling run in the CCS structure to save time during heap
censuses. (other changes in previous commit to rts/Profiling.c,
rts/ProfHeap.c).

22 years ago[project @ 2001-12-12 14:58:26 by simonmar]
simonmar [Wed, 12 Dec 2001 14:58:26 +0000 (14:58 +0000)]
[project @ 2001-12-12 14:58:26 by simonmar]
Add -hC flag.

22 years ago[project @ 2001-12-12 14:31:42 by simonmar]
simonmar [Wed, 12 Dec 2001 14:31:43 +0000 (14:31 +0000)]
[project @ 2001-12-12 14:31:42 by simonmar]
- Add a new type of restriction: -hC, which restricts to closures
  whose CCS contains the specified CCs *anywhere* (not just at the
  top).

- Complain if the user tries to request both retainer and biographical
  profiling.  We don't support both simultaneously, because they use
  the same header word in the closure.

- Allow for the fact that the heap might contain some closures which
  don't have a valid retainer set during the heap census.  The only
  known closures of this kind so far are DEAD_WEAK closures.

- Some cruft-removal and renaming of functions to follow conventions.

22 years ago[project @ 2001-12-12 14:25:03 by simonmar]
simonmar [Wed, 12 Dec 2001 14:25:03 +0000 (14:25 +0000)]
[project @ 2001-12-12 14:25:03 by simonmar]
- Relax the restriction that roots must also be retainers, by changing
  the type of the 'r' argument to retainClosure from (StgClosure *) to
  retainer.  Now retainRoot can pass CCS_SYSTEM as the retainer for a
  root if the closure is itself not a retainer.

- Traverse roots from the stable ptr table, which might not also be
  retainers (hence the generalisation above).

22 years ago[project @ 2001-12-12 14:03:30 by simonmar]
simonmar [Wed, 12 Dec 2001 14:03:30 +0000 (14:03 +0000)]
[project @ 2001-12-12 14:03:30 by simonmar]
Add multi-slurp protection

22 years ago[project @ 2001-12-12 13:35:38 by simonpj]
simonpj [Wed, 12 Dec 2001 13:35:38 +0000 (13:35 +0000)]
[project @ 2001-12-12 13:35:38 by simonpj]
Keep wibbling; this fixes the float-out crash

22 years ago[project @ 2001-12-12 12:19:11 by simonmar]
simonmar [Wed, 12 Dec 2001 12:20:10 +0000 (12:20 +0000)]
[project @ 2001-12-12 12:19:11 by simonmar]
shiftery #ifdefs

22 years ago[project @ 2001-12-12 10:46:59 by simonpj]
simonpj [Wed, 12 Dec 2001 10:46:59 +0000 (10:46 +0000)]
[project @ 2001-12-12 10:46:59 by simonpj]
Wibble

22 years ago[project @ 2001-12-12 06:48:20 by chak]
chak [Wed, 12 Dec 2001 06:48:20 +0000 (06:48 +0000)]
[project @ 2001-12-12 06:48:20 by chak]
Added some more details about parsing.

22 years ago[project @ 2001-12-12 05:23:34 by chak]
chak [Wed, 12 Dec 2001 05:23:34 +0000 (05:23 +0000)]
[project @ 2001-12-12 05:23:34 by chak]
wibble

22 years ago[project @ 2001-12-11 21:19:35 by panne]
panne [Tue, 11 Dec 2001 21:19:35 +0000 (21:19 +0000)]
[project @ 2001-12-11 21:19:35 by panne]
Strange: Removing getName (which should be accessible via NamedThing(..),
anyway) from the import list is necessary to make this module compile.
Otherwise we get:

   hsSyn/HsCore.lhs:197: Variable not in scope: `getOccName'

Perhaps somebody could enlighten me what's going on here... %-]

22 years ago[project @ 2001-12-11 20:14:57 by panne]
panne [Tue, 11 Dec 2001 20:14:57 +0000 (20:14 +0000)]
[project @ 2001-12-11 20:14:57 by panne]
Never-ending story, part #2: The shifting continues...

22 years ago[project @ 2001-12-11 19:01:17 by panne]
panne [Tue, 11 Dec 2001 19:01:17 +0000 (19:01 +0000)]
[project @ 2001-12-11 19:01:17 by panne]
More shifting #ifdef-ery... :-P

22 years ago[project @ 2001-12-11 18:25:15 by sof]
sof [Tue, 11 Dec 2001 18:25:15 +0000 (18:25 +0000)]
[project @ 2001-12-11 18:25:15 by sof]
restore ForeignObj_CLOSURE_DATA - still used by PprAbsC.ppr_casm_arg

22 years ago[project @ 2001-12-11 17:51:33 by simonpj]
simonpj [Tue, 11 Dec 2001 17:51:33 +0000 (17:51 +0000)]
[project @ 2001-12-11 17:51:33 by simonpj]
More inline/floating fixes; sigh

22 years ago[project @ 2001-12-11 12:39:04 by sewardj]
sewardj [Tue, 11 Dec 2001 12:39:04 +0000 (12:39 +0000)]
[project @ 2001-12-11 12:39:04 by sewardj]
Really Actually fix syntax errors wrt -DDEBUG.

22 years ago[project @ 2001-12-11 12:21:06 by simonmar]
simonmar [Tue, 11 Dec 2001 12:21:06 +0000 (12:21 +0000)]
[project @ 2001-12-11 12:21:06 by simonmar]
Make this module compile with the recent changes to the names of the
shift primops.

22 years ago[project @ 2001-12-11 12:20:22 by simonpj]
simonpj [Tue, 11 Dec 2001 12:20:22 +0000 (12:20 +0000)]
[project @ 2001-12-11 12:20:22 by simonpj]
------------------------------
Don't float out of INLINE blocks
------------------------------

We never want to float stuff out of an INLINE right hand
side.  This has been a long-standing thorn, and I managed
to dislodge it yesterday (hence Lint errors).  Fixed again,
more robustly this time (I hope).

22 years ago[project @ 2001-12-11 12:19:04 by simonpj]
simonpj [Tue, 11 Dec 2001 12:19:04 +0000 (12:19 +0000)]
[project @ 2001-12-11 12:19:04 by simonpj]
Dead code removal

22 years ago[project @ 2001-12-11 12:18:49 by simonpj]
simonpj [Tue, 11 Dec 2001 12:18:49 +0000 (12:18 +0000)]
[project @ 2001-12-11 12:18:49 by simonpj]
More DEBUG syntax errors

22 years ago[project @ 2001-12-11 12:03:23 by simonmar]
simonmar [Tue, 11 Dec 2001 12:03:23 +0000 (12:03 +0000)]
[project @ 2001-12-11 12:03:23 by simonmar]
eliminate warnings

22 years ago[project @ 2001-12-11 11:47:00 by simonmar]
simonmar [Tue, 11 Dec 2001 11:47:00 +0000 (11:47 +0000)]
[project @ 2001-12-11 11:47:00 by simonmar]
Fix typo inside #ifdef DEBUG

22 years ago[project @ 2001-12-11 02:59:17 by chak]
chak [Tue, 11 Dec 2001 02:59:17 +0000 (02:59 +0000)]
[project @ 2001-12-11 02:59:17 by chak]
I guess, this got lost in Julian's commit yesterday.

22 years ago[project @ 2001-12-10 18:06:50 by sof]
sof [Mon, 10 Dec 2001 18:07:35 +0000 (18:07 +0000)]
[project @ 2001-12-10 18:06:50 by sof]
bdescr's back field is now inside a union

22 years ago[project @ 2001-12-10 18:04:51 by sewardj]
sewardj [Mon, 10 Dec 2001 18:04:52 +0000 (18:04 +0000)]
[project @ 2001-12-10 18:04:51 by sewardj]
Add just enough infrastructure to the NCG that it can deal with simple 64-bit
code on 32-bit platforms.  Main changes are:

* Addition of a simple 64-bit instruction selection fn iselExpr64 to MachCode.
  This generates code for a 64-bit value and places the results into two
  virtual registers, related thusly:

* Add a new type VRegUnique, which is used to label Stix virtual registers.
  This type used to be a plain Unique, but that forces the assumption that
  each Abstract-C level C temporary corresponds to exactly one Stix virtual
  register, which is untrue when the C temporary is 64-bit sized on a
  32-bit machine.  In the new scheme, the Unique for the C temporary can
  turn into two related VRegUniques, related by having the same embedded
  unique.

* Made a start on 'target metrics' by adding ncg_target_is_32bits to the
  end of Stix.lhs.

* Cleaned up numerous other gruesomenesses in the NCG which never came
  to light before now.   Got rid of MachMisc.sizeOf, which doesn't make
  sense in a 64-bit setting, and replaced it by calls to
  PrimRep.getPrimRepArrayElemSize, which, as far as I'm concerned, is the
  definitive answer to the questio `How Big Is This PrimRep Really?'

Result: on x86-linux, at least, you can now compile the Entire Prelude
with -fasm!  At this stage I cannot claim that the resulting code is
correct, but it's a start.

22 years ago[project @ 2001-12-10 17:59:54 by sof]
sof [Mon, 10 Dec 2001 17:59:54 +0000 (17:59 +0000)]
[project @ 2001-12-10 17:59:54 by sof]
RTS_SYMBOLS: MainCapability is not defined in SMP-mode

22 years ago[project @ 2001-12-10 17:55:40 by sewardj]
sewardj [Mon, 10 Dec 2001 17:55:40 +0000 (17:55 +0000)]
[project @ 2001-12-10 17:55:40 by sewardj]
Fix a presumably long-standing cut-n-paste-o, wherein HP_CHK_L1 had
exactly the same definition as HP_CHK_D1.

22 years ago[project @ 2001-12-10 14:08:58 by simonmar]
simonmar [Mon, 10 Dec 2001 14:08:58 +0000 (14:08 +0000)]
[project @ 2001-12-10 14:08:58 by simonmar]
Some lifting of the lazy parts of the parse tree so we don't parse too
much when using happy --strict.

22 years ago[project @ 2001-12-10 14:08:14 by simonmar]
simonmar [Mon, 10 Dec 2001 14:08:14 +0000 (14:08 +0000)]
[project @ 2001-12-10 14:08:14 by simonmar]
The flag -fno-cpr is now only present in a DEBUG compiler.

22 years ago[project @ 2001-12-10 14:07:30 by simonmar]
simonmar [Mon, 10 Dec 2001 14:07:31 +0000 (14:07 +0000)]
[project @ 2001-12-10 14:07:30 by simonmar]
Make the inclusion of the old strictness analyser, CPR analyser, and
the relevant IdInfo components, conditional on DEBUG.  This makes
IdInfo smaller by three fields in a non-DEBUG compiler, and reduces
the risk that the unused fields could harbour space leaks.

Eventually these passes will go away altogether.

22 years ago[project @ 2001-12-10 14:05:06 by simonmar]
simonmar [Mon, 10 Dec 2001 14:05:06 +0000 (14:05 +0000)]
[project @ 2001-12-10 14:05:06 by simonmar]
Note that the final call to coreBindsSize is still necessary to
eliminate space leakage from the simplifier.

22 years ago[project @ 2001-12-10 14:02:45 by simonmar]
simonmar [Mon, 10 Dec 2001 14:02:45 +0000 (14:02 +0000)]
[project @ 2001-12-10 14:02:45 by simonmar]
Print the "type description" of a closure for profiling as the user
string, not the Z-encoded string.  Fixes problems with things like
'ZMZN' appearing in profiling output.

22 years ago[project @ 2001-12-10 14:00:35 by simonmar]
simonmar [Mon, 10 Dec 2001 14:00:35 +0000 (14:00 +0000)]
[project @ 2001-12-10 14:00:35 by simonmar]
Make the OccName and SrcLoc fields of a Name strict, to eliminate
space leaks.  This doesn't hurt performance.

22 years ago[project @ 2001-12-10 13:54:35 by simonmar]
simonmar [Mon, 10 Dec 2001 13:54:35 +0000 (13:54 +0000)]
[project @ 2001-12-10 13:54:35 by simonmar]
Don't force the IdInfo of a variable *occurrence* in exprSize, just
the binding sites should be enough.

22 years ago[project @ 2001-12-10 12:26:10 by simonpj]
simonpj [Mon, 10 Dec 2001 12:26:10 +0000 (12:26 +0000)]
[project @ 2001-12-10 12:26:10 by simonpj]
------------------------------
Don't do CPR w/w for constants
------------------------------

We don't want to do a CPR split for a constant
function.  So if the worker will get no (value) args,
we disable the CPR transformation.

This infelicity exposed a buglet in the full laziness
transformation; we were floating an expression outside
an InlineMe context.   I've take the blunderbuss approach
now, of effectively disabling full laziness inside an
InlineMe.  Seems reasonable.

22 years ago[project @ 2001-12-10 01:27:59 by sebc]
sebc [Mon, 10 Dec 2001 01:28:00 +0000 (01:28 +0000)]
[project @ 2001-12-10 01:27:59 by sebc]
MacOS X 10.1 identifies as "darwin"

22 years ago[project @ 2001-12-10 01:21:17 by sebc]
sebc [Mon, 10 Dec 2001 01:21:17 +0000 (01:21 +0000)]
[project @ 2001-12-10 01:21:17 by sebc]
MacOS X 10.1 now has a libm

22 years ago[project @ 2001-12-07 20:57:53 by sof]
sof [Fri, 7 Dec 2001 20:57:53 +0000 (20:57 +0000)]
[project @ 2001-12-07 20:57:53 by sof]
- tidy up TICK_ALLOC_TSO() uses.
- scheduleThread: remove special-case for END_TSO_QUEUE. If you want
  to call schedule(), do so directly. (Only one of the scheduleThread()
  call sites depended on this feature).

22 years ago[project @ 2001-12-07 17:33:26 by simonpj]
simonpj [Fri, 7 Dec 2001 17:33:26 +0000 (17:33 +0000)]
[project @ 2001-12-07 17:33:26 by simonpj]
----------------------------
More jiggling in the renamer
----------------------------

I was a little hasty before.  (Thanks Sigbjorn for finding
this.)  This commit tidies up the handling of AvailEnvs.
Principally:

  * filterImports now deals completely with hiding
    (before it handed off part of the job to mkGlobalRdrEnv)

  * The AvailEnv in an ExportAvails does not have class ops and
    data constructors in its domain.  This makes plusExportAvails
    more efficient, but the main thing is that it collects things
    up right.  (Previously, if we had
import M( C )
import M( op )
    then we got an AvailEnv which had C |-> AvailTC C [C]
    (no 'op').

  * In Rename, we do need a "filled-out" version of the overall
    AvailEnv, full_avail_env, which we construct on the spot in 'rename'.

22 years ago[project @ 2001-12-07 15:49:41 by sof]
sof [Fri, 7 Dec 2001 15:49:41 +0000 (15:49 +0000)]
[project @ 2001-12-07 15:49:41 by sof]
Track the removal of ReallyUnsafePtrEqualityOp + InterTo{Int,Word}64Op primops.

22 years ago[project @ 2001-12-07 11:34:48 by sewardj]
sewardj [Fri, 7 Dec 2001 11:34:48 +0000 (11:34 +0000)]
[project @ 2001-12-07 11:34:48 by sewardj]
Change the story on shifting primops: SllOp, SrlOp, ISllOp, ISraOp, ISrlOp.

In the old primop story, these were implemented by C macros which
checked that the shift amount did not exceed the word size, and if so
returns a suitable value (0 or -1).  This gives consistent, defined
behaviour for any shift amount.  However, these checks were not
implemented on the NCG route, an inconsistency.

New story: these primops do NOT check their args; they just do the shift.
Shift values >= word size give undefined results.  To reflect this, their
Haskell names have been prefixed with 'unchecked'.

The checks are now done on the Bits instances in the Prelude.  This means
all code generation routes are consistently checked, and hopefully the
simplifier will remove the checks for literal shift amounts.

I have tried to fix up the implementation for 64-bit platforms too, but
not having one to hand, I don't know if it will work as-is.

22 years ago[project @ 2001-12-07 11:27:09 by sewardj]
sewardj [Fri, 7 Dec 2001 11:27:09 +0000 (11:27 +0000)]
[project @ 2001-12-07 11:27:09 by sewardj]
Comments only.

22 years ago[project @ 2001-12-07 08:12:53 by sof]
sof [Fri, 7 Dec 2001 08:12:53 +0000 (08:12 +0000)]
[project @ 2001-12-07 08:12:53 by sof]
mkExportAvails: computing the AvailEnv is rather delicate

22 years ago[project @ 2001-12-07 07:37:43 by sof]
sof [Fri, 7 Dec 2001 07:37:43 +0000 (07:37 +0000)]
[project @ 2001-12-07 07:37:43 by sof]
Tidyup - previous instance-decl commit fell a bit short:

 * RnEnv.lookupInstDeclBndr unceremoniously fell over when passed
   an out-of-scope class name.

 * the AvailEnv carried around didn't common up type/class info
   (i.e.,  AvailTCs), but rather type/class and method/label names,
   causing the renamer to (semi)randomly report instance methods as
   being out-of-scope in the presence of multiple imports for a module.

 * didn't support 'hiding' of class / method names (for the purposes
   of checking instance decls).

22 years ago[project @ 2001-12-06 17:33:30 by simonmar]
simonmar [Thu, 6 Dec 2001 17:33:30 +0000 (17:33 +0000)]
[project @ 2001-12-06 17:33:30 by simonmar]
Make the Name field of a Var strict - it doesn't hurt performance (in
fact it makes a tiny improvement) but it can help residency.

22 years ago[project @ 2001-12-06 14:42:56 by simonmar]
simonmar [Thu, 6 Dec 2001 14:42:56 +0000 (14:42 +0000)]
[project @ 2001-12-06 14:42:56 by simonmar]
Turn a lazy pattern match into a strict one in tidyIdBndr.  This
prevents us accidentally hanging onto stuff in the OccName field of a
Name after tidying.

22 years ago[project @ 2001-12-06 14:33:02 by simonmar]
simonmar [Thu, 6 Dec 2001 14:33:02 +0000 (14:33 +0000)]
[project @ 2001-12-06 14:33:02 by simonmar]
- Fix THUNK_SELECTOR printing code
- change some more stderrs into stdouts

22 years ago[project @ 2001-12-06 13:09:19 by sewardj]
sewardj [Thu, 6 Dec 2001 13:09:19 +0000 (13:09 +0000)]
[project @ 2001-12-06 13:09:19 by sewardj]
Make it compile -DDEBUG.

22 years ago[project @ 2001-12-06 13:05:03 by sewardj]
sewardj [Thu, 6 Dec 2001 13:05:03 +0000 (13:05 +0000)]
[project @ 2001-12-06 13:05:03 by sewardj]
Remove out-of-date ASSERT in deRefStablePtr_fast.

22 years ago[project @ 2001-12-06 12:30:13 by chak]
chak [Thu, 6 Dec 2001 12:30:13 +0000 (12:30 +0000)]
[project @ 2001-12-06 12:30:13 by chak]
Make prof package dependency more precise

22 years ago[project @ 2001-12-06 11:50:07 by sewardj]
sewardj [Thu, 6 Dec 2001 11:50:07 +0000 (11:50 +0000)]
[project @ 2001-12-06 11:50:07 by sewardj]
Add constructor CBytesPerWord to (the wildly-misnamed) CAddrMode, and
use this in various places to remove word size dependencies in the
C -> C simplification pass.  Tart up the Stix constant folder a bit
so as to be able to fold out the shift/mask literal expressions.

22 years ago[project @ 2001-12-06 10:45:42 by simonpj]
simonpj [Thu, 6 Dec 2001 10:45:43 +0000 (10:45 +0000)]
[project @ 2001-12-06 10:45:42 by simonpj]
--------------------------
Fix the instance-decl wart
--------------------------

This commit implements the (proposed) H98 rule for
resolving the class-method name in an instance decl.

module M( C( op1, op2 ) ) where
-- NB: op3 not exported
  class C a where
    op1, op2, op3 :: a -> a

module N where
  import qualified M as P( C )
  import qualified M as Q hiding( op2 )

  instance P.C Int where
    op1 x = x
    -- op2, op3 both illegal here

The point is that
  a) only methods that can be named are legal
     in the instance decl
(so op2, op3 are not legal)
  b) but it doesn't matter *how* they can be named
(in this case Q.op1 is in scope, though
the class is called P.C)

The AvailEnv carries the information about what's in scope,
so we now have to carry it around in the monad, so that
instance decl bindings can see it.  Quite simple really.

Same deal for export lists. E.g.

module N( P.C( op1 ) ) where
  import qualified M as P( C )
  import qualified M as Q hiding( op2 )

Actually this is what GHC has always implemented!

22 years ago[project @ 2001-12-06 10:45:14 by simonpj]
simonpj [Thu, 6 Dec 2001 10:45:14 +0000 (10:45 +0000)]
[project @ 2001-12-06 10:45:14 by simonpj]
Comments only

22 years ago[project @ 2001-12-06 10:17:35 by mbs]
mbs [Thu, 6 Dec 2001 10:17:36 +0000 (10:17 +0000)]
[project @ 2001-12-06 10:17:35 by mbs]
Established under cvs.

22 years ago[project @ 2001-12-06 10:00:01 by sewardj]
sewardj [Thu, 6 Dec 2001 10:00:01 +0000 (10:00 +0000)]
[project @ 2001-12-06 10:00:01 by sewardj]
Remove mention of PrimOpHelpers.h.

22 years ago[project @ 2001-12-06 09:21:31 by simonpj]
simonpj [Thu, 6 Dec 2001 09:21:32 +0000 (09:21 +0000)]
[project @ 2001-12-06 09:21:31 by simonpj]
Fix the simplIdInfo inconsistency Sigbjorn found

22 years ago[project @ 2001-12-06 08:24:36 by sof]
sof [Thu, 6 Dec 2001 08:24:36 +0000 (08:24 +0000)]
[project @ 2001-12-06 08:24:36 by sof]
package rts (mingw32): in installed mode, add gcc-lib/ to library_dirs,
forcing it to be used by default. This allows other backend tools to be
used (e.g., `dllwrap') without haphazardly mixing & matching (import)
libs.

MERGE TO STABLE.

22 years ago[project @ 2001-12-06 07:07:12 by sof]
sof [Thu, 6 Dec 2001 07:07:12 +0000 (07:07 +0000)]
[project @ 2001-12-06 07:07:12 by sof]
startupHaskell: if invoked more than once, do run initModules() each time,
as there might be more than one 'root module'.

22 years ago[project @ 2001-12-05 19:24:53 by sof]
sof [Wed, 5 Dec 2001 19:24:53 +0000 (19:24 +0000)]
[project @ 2001-12-05 19:24:53 by sof]
oops, changes not tested with a stage2 build

22 years ago[project @ 2001-12-05 17:35:12 by sewardj]
sewardj [Wed, 5 Dec 2001 17:35:15 +0000 (17:35 +0000)]
[project @ 2001-12-05 17:35:12 by sewardj]
--------------------------------------------
        Translate out PrimOps at the AbstractC level
        --------------------------------------------

This is the first in what might be a series of changes intended
to make GHC less dependent on its C back end.  The main change is
to translate PrimOps into vanilla abstract C inside the compiler,
rather than having to duplicate that work in each code generation
route.  The main changes are:

* A new type, MachOp, in compiler/absCSyn/MachOp.hs.  A MachOp
  is a primitive operation which we can reasonably expect the
  native code generators to implement.  The set is quite small
  and unlikely to change much, if at all.

* Translations from PrimOps to MachOps, at the end of
  absCSyn/AbsCUtils.  This should perhaps be moved to a different
  module, but it is hard to see how to do this without creating
  a circular dep between it and AbsCUtils.

* The x86 insn selector has been updated to track these changes.  The
  sparc insn selector remains to be done.

As a result of this, it is possible to compile much more code via the
NCG than before.  Almost all the Prelude can be compiled with it.
Currently it does not know how to do 64-bit code generation.  Once
this is fixed, the entire Prelude should be compilable that way.

I also took the opportunity to clean up the NCG infrastructure.
The old Stix data type has been split into StixStmt (statements)
and StixExpr (now denoting values only).  This removes a class
of impossible constructions and clarifies the NCG.

Still to do, in no particular order:

* String and literal lifting, currently done in the NCG at the top
  of nativeGen/MachCode, should be done in the AbstractC flattener,
  for the benefit of all targets.

* Further cleaning up of Stix assignments.

* Remove word-size dependency from Abstract C.  (should be easy).

* Translate out MagicIds in the AbsC -> Stix translation, not
  in the Stix constant folder. (!)

Testsuite failures caused by this:

* memo001 - fails (segfaults) for some unknown reason now.
* arith003 - wrong answer in gcdInt boundary cases.
* arith011 - wrong answer for shifts >= word size.
* cg044 - wrong answer for some FP boundary cases.

These should be fixed, but I don't think they are mission-critical for
anyone.

22 years ago[project @ 2001-12-05 17:21:43 by simonmar]
simonmar [Wed, 5 Dec 2001 17:21:43 +0000 (17:21 +0000)]
[project @ 2001-12-05 17:21:43 by simonmar]
Add -s flag to Happy if we have version 1.12+

22 years ago[project @ 2001-12-05 16:29:54 by sof]
sof [Wed, 5 Dec 2001 16:29:54 +0000 (16:29 +0000)]
[project @ 2001-12-05 16:29:54 by sof]
make it compile - i.e., use Subst.simplIdInfo in a manner
consistent with the repo contents. (wouldn't surprise me
if there's coreSyn/Subst.lhs change that hasn't been
committed yet...)

22 years ago[project @ 2001-12-05 15:00:21 by simonpj]
simonpj [Wed, 5 Dec 2001 15:00:21 +0000 (15:00 +0000)]
[project @ 2001-12-05 15:00:21 by simonpj]
Preserve IdInfo for strict binders

22 years ago[project @ 2001-12-05 13:52:19 by simonmar]
simonmar [Wed, 5 Dec 2001 13:52:19 +0000 (13:52 +0000)]
[project @ 2001-12-05 13:52:19 by simonmar]
Make some record selections strict to reduce space leaks.

22 years ago[project @ 2001-12-05 12:20:39 by simonmar]
simonmar [Wed, 5 Dec 2001 12:20:39 +0000 (12:20 +0000)]
[project @ 2001-12-05 12:20:39 by simonmar]
unbreak inputReady().

22 years ago[project @ 2001-12-05 11:05:21 by simonmar]
simonmar [Wed, 5 Dec 2001 11:05:21 +0000 (11:05 +0000)]
[project @ 2001-12-05 11:05:21 by simonmar]
Add seqDemand, seqDemands, seqDmdType and seqStrictSig.

22 years ago[project @ 2001-12-05 11:00:24 by simonmar]
simonmar [Wed, 5 Dec 2001 11:00:24 +0000 (11:00 +0000)]
[project @ 2001-12-05 11:00:24 by simonmar]
- fix a space leak in the cg_env passed back from the code generator
  to CoreTidy that was keeping the result of CoreToStg alive through
  code generation.

- some cost centre changes

22 years ago[project @ 2001-12-05 00:08:26 by sof]
sof [Wed, 5 Dec 2001 00:08:27 +0000 (00:08 +0000)]
[project @ 2001-12-05 00:08:26 by sof]
- new option, -keep-ilx-file, for stashing away ILX input.
- restrict ILX-specific code/defs to only be visible iff ILX is #defined.

22 years ago[project @ 2001-12-05 00:06:32 by sof]
sof [Wed, 5 Dec 2001 00:06:32 +0000 (00:06 +0000)]
[project @ 2001-12-05 00:06:32 by sof]
reuse Panic.showGhcException

22 years ago[project @ 2001-12-04 19:26:17 by sof]
sof [Tue, 4 Dec 2001 19:26:17 +0000 (19:26 +0000)]
[project @ 2001-12-04 19:26:17 by sof]
Enable the (already advertised) dependency generation options
--exclude-module=<mod> and -x <mod>.

22 years ago[project @ 2001-12-04 16:42:06 by sof]
sof [Tue, 4 Dec 2001 16:42:06 +0000 (16:42 +0000)]
[project @ 2001-12-04 16:42:06 by sof]
genPipeLine: DoMkDll didn't have a stop_phase, causing any use of
--mk-dll to fall over.

MERGE TO STABLE.