Ticket #4928: copyarray-clonearray.dpatch

File copyarray-clonearray.dpatch, 94.3 KB (added by pumpkin, 2 years ago)
Line 
16 patches for repository http://darcs.haskell.org/ghc:
2
3Mon Jan 24 02:38:01 EST 2011  Daniel Peebles <pumpkingod@gmail.com>
4  * Add a copyArray# primop that uses memcpy behind the scenes
5
6Fri Jan 28 10:08:17 EST 2011  Daniel Peebles <pumpkingod@gmail.com>
7  * Additional copying primops (cloning is not yet complete, so those functions are only stubs) and adjustments to the card table for GC
8
9Tue Feb  1 01:28:16 EST 2011  Daniel Peebles <pumpkingod@gmail.com>
10  * Finish array copy/clone primops (with card copy that is often fast) and factor out some common code into macros
11
12Tue Feb  1 09:29:53 EST 2011  Johan Tibell <johan.tibell@gmail.com>
13  * Add statements that were accidentally removed during refactoring
14 
15  All the cgrun064 tests now pass.
16
17Tue Feb  1 12:13:40 EST 2011  Daniel Peebles <pumpkingod@gmail.com>
18  * Don't do anything fancy with cards for clones. Also, mark the header of immutable arrays correctly.
19
20Wed Feb  2 15:00:07 EST 2011  Daniel Peebles <pumpkingod@gmail.com>
21  * No need to pass a state token around for cloneArray#
22
23
24New patches:
25
26[Add a copyArray# primop that uses memcpy behind the scenes
27Daniel Peebles <pumpkingod@gmail.com>**20110124073801
28 Ignore-this: e7c09a2faff23b6db0ba4d757de04a72
29] {
30hunk ./compiler/prelude/primops.txt.pp 621
31    out_of_line = True
32    has_side_effects = True
33 
34+primop  CopyArrayOp "copyArray#" GenPrimOp
35+  MutableArray# s a -> Int# -> MutableArray# s a -> Int# -> Int# -> State# s -> State# s
36+  {Copy a range of the first MutableArray# to the specified region in the second MutableArray#}
37+  with
38+  out_of_line = True
39+  has_side_effects = True
40+
41 ------------------------------------------------------------------------
42 section "Byte Arrays"
43        {Operations on {\tt ByteArray\#}. A {\tt ByteArray\#} is a just a region of
44hunk ./rts/PrimOps.cmm 215
45   }
46 }
47 
48+stg_copyArrayzh
49+{
50+  W_ bytes, n, src, dst, src_start, dst_start, src_start_ptr, dst_start_ptr;
51+
52+  src = R1;
53+  src_start = R2;
54+  dst = R3;
55+  dst_start = R4;
56+  n = R5;
57+  MAYBE_GC(R1_PTR & R3_PTR, stg_copyArrayzh);
58+
59+  bytes = WDS(n);
60+
61+  src_start_ptr = src + SIZEOF_StgMutArrPtrs + WDS(src_start);
62+  dst_start_ptr = dst + SIZEOF_StgMutArrPtrs + WDS(dst_start);
63+
64+  foreign "C" memcpy(dst_start_ptr "ptr", src_start_ptr "ptr", bytes);
65+
66+  jump %ENTRY_CODE(Sp(0));
67+}
68+
69 /* -----------------------------------------------------------------------------
70    MutVar primitives
71    -------------------------------------------------------------------------- */
72}
73[Additional copying primops (cloning is not yet complete, so those functions are only stubs) and adjustments to the card table for GC
74Daniel Peebles <pumpkingod@gmail.com>**20110128150817
75 Ignore-this: 124e6f11f57db4010110489a210d4460
76] {
77hunk ./compiler/prelude/primops.txt.pp 622
78    has_side_effects = True
79 
80 primop  CopyArrayOp "copyArray#" GenPrimOp
81+  Array# a -> Int# -> MutableArray# s a -> Int# -> Int# -> State# s -> State# s
82+  {Copy a range of the Array# to the specified region in the MutableArray#.
83+   Both arrays must fully contain the specified ranges, but this is not checked.
84+   The two arrays must not be the same array in different states, but this is not checked either.}
85+  with
86+  out_of_line = True
87+  has_side_effects = True
88+
89+primop  CopyMutableArrayOp "copyMutableArray#" GenPrimOp
90   MutableArray# s a -> Int# -> MutableArray# s a -> Int# -> Int# -> State# s -> State# s
91hunk ./compiler/prelude/primops.txt.pp 632
92-  {Copy a range of the first MutableArray# to the specified region in the second MutableArray#}
93+  {Copy a range of the first MutableArray# to the specified region in the second MutableArray#.
94+   Both arrays must fully contain the specified ranges, but this is not checked.}
95+  with
96+  out_of_line = True
97+  has_side_effects = True
98+
99+primop  CloneArrayOp "cloneArray#" GenPrimOp
100+  Array# a -> Int# -> Int# -> State# s -> (# State# s, Array# a #)
101+  {Return a newly allocated Array# with the specified subrange of the provided Array#.
102+   The provided Array# should contain the full subrange specified by the two Int#s, but this is not checked.}
103+  with
104+  out_of_line = True
105+  has_side_effects = True
106+
107+primop  CloneMutableArrayOp "cloneMutableArray#" GenPrimOp
108+  MutableArray# s a -> Int# -> Int# -> State# s -> (# State# s, MutableArray# s a #)
109+  {Return a newly allocated Array# with the specified subrange of the provided Array#.
110+   The provided MutableArray# should contain the full subrange specified by the two Int#s, but this is not checked.}
111+  with
112+  out_of_line = True
113+  has_side_effects = True
114+
115+primop  FreezeArrayOp "freezeArray#" GenPrimOp
116+  MutableArray# s a -> Int# -> Int# -> State# s -> (# State# s, Array# a #)
117+  {Return a newly allocated Array# with the specified subrange of the provided MutableArray#.
118+   The provided MutableArray# should contain the full subrange specified by the two Int#s, but this is not checked.}
119+  with
120+  out_of_line = True
121+  has_side_effects = True
122+
123+primop  ThawArrayOp "thawArray#" GenPrimOp
124+  Array# a -> Int# -> Int# -> State# s -> (# State# s, MutableArray# s a #)
125+  {Return a newly allocated Array# with the specified subrange of the provided MutableArray#.
126+   The provided Array# should contain the full subrange specified by the two Int#s, but this is not checked.}
127   with
128   out_of_line = True
129   has_side_effects = True
130hunk ./includes/stg/MiscClosures.h 383
131 RTS_FUN_DECL(stg_newPinnedByteArrayzh);
132 RTS_FUN_DECL(stg_newAlignedPinnedByteArrayzh);
133 RTS_FUN_DECL(stg_newArrayzh);
134+RTS_FUN_DECL(stg_copyArrayzh);
135+RTS_FUN_DECL(stg_copyMutableArrayzh);
136+RTS_FUN_DECL(stg_cloneArrayzh);
137+RTS_FUN_DECL(stg_cloneMutableArrayzh);
138+RTS_FUN_DECL(stg_freezzeArrayzh);
139+RTS_FUN_DECL(stg_thawArrayzh);
140 
141 RTS_FUN_DECL(stg_newMutVarzh);
142 RTS_FUN_DECL(stg_atomicModifyMutVarzh);
143hunk ./rts/Linker.c 824
144       SymI_HasProto(stg_myThreadIdzh)                   \
145       SymI_HasProto(stg_labelThreadzh)                  \
146       SymI_HasProto(stg_newArrayzh)                     \
147+      SymI_HasProto(stg_copyArrayzh)                    \
148+      SymI_HasProto(stg_copyMutableArrayzh)             \
149+      SymI_HasProto(stg_cloneArrayzh)                   \
150+      SymI_HasProto(stg_cloneMutableArrayzh)            \
151+      SymI_HasProto(stg_freezzeArrayzh)                 \
152+      SymI_HasProto(stg_thawArrayzh)                    \
153       SymI_HasProto(stg_newBCOzh)                       \
154       SymI_HasProto(stg_newByteArrayzh)                 \
155       SymI_HasProto_redirect(newCAF, newDynCAF)         \
156hunk ./rts/PrimOps.cmm 218
157 stg_copyArrayzh
158 {
159   W_ bytes, n, src, dst, src_start, dst_start, src_start_ptr, dst_start_ptr;
160+  W_ src_cards_start, dst_cards_start, src_start_card, dst_start_card, bytes_card;
161 
162   src = R1;
163   src_start = R2;
164hunk ./rts/PrimOps.cmm 232
165   src_start_ptr = src + SIZEOF_StgMutArrPtrs + WDS(src_start);
166   dst_start_ptr = dst + SIZEOF_StgMutArrPtrs + WDS(dst_start);
167 
168+  src_cards_start = src + SIZEOF_StgMutArrPtrs + WDS(StgMutArrPtrs_ptrs(src));
169+  dst_cards_start = dst + SIZEOF_StgMutArrPtrs + WDS(StgMutArrPtrs_ptrs(dst));
170+
171+  src_start_card = mutArrPtrsCardWords(src_start);
172+  dst_start_card = mutArrPtrsCardWords(dst_start);
173+  bytes_card = WDS(mutArrPtrsCardWords(n));
174+
175+  // Copy data (we assume the arrays aren't overlapping since they're of different types)
176   foreign "C" memcpy(dst_start_ptr "ptr", src_start_ptr "ptr", bytes);
177 
178hunk ./rts/PrimOps.cmm 242
179+  // Copy cards
180+  foreign "C" memcpy(dst_cards_start + WDS(dst_start_card), src_cards_start + WDS(src_start_card), bytes_card);
181+
182+  // Adjust boundary cards (see below)
183+  W_[dst_cards_start + WDS(mutArrPtrsCardWords(dst_start & (~ ((1 << MUT_ARR_PTRS_CARD_BITS) - 1))))] = 1;
184+  W_[dst_cards_start + WDS(dst_start_card) + bytes_card] = 1;
185+
186   jump %ENTRY_CODE(Sp(0));
187 }
188 
189hunk ./rts/PrimOps.cmm 252
190+stg_copyMutableArrayzh
191+{
192+  W_ bytes, n, src, dst, src_start, dst_start, src_start_ptr, dst_start_ptr;
193+  W_ src_cards_start, dst_cards_start, src_start_card, dst_start_card, bytes_card;
194+
195+  src = R1;
196+  src_start = R2;
197+  dst = R3;
198+  dst_start = R4;
199+  n = R5;
200+  MAYBE_GC(R1_PTR & R3_PTR, stg_copyMutableArrayzh);
201+
202+  bytes = WDS(n);
203+
204+  src_start_ptr = src + SIZEOF_StgMutArrPtrs + WDS(src_start);
205+  dst_start_ptr = dst + SIZEOF_StgMutArrPtrs + WDS(dst_start);
206+
207+  src_cards_start = src + SIZEOF_StgMutArrPtrs + WDS(StgMutArrPtrs_ptrs(src));
208+  dst_cards_start = dst + SIZEOF_StgMutArrPtrs + WDS(StgMutArrPtrs_ptrs(dst));
209+
210+  src_start_card = mutArrPtrsCardWords(src_start);
211+  dst_start_card = mutArrPtrsCardWords(dst_start);
212+  bytes_card = WDS(mutArrPtrsCardWords(n));
213+
214+  // The only time the memory might overlap is when the two arrays we were provided are the same array!
215+  if (src == dst) {
216+    // Move possibly overlapping regions around
217+    foreign "C" memmove(dst_start_ptr "ptr", src_start_ptr "ptr", bytes);
218+
219+    // Move relevant cards
220+    foreign "C" memmove(dst_cards_start + WDS(dst_start_card), src_cards_start + WDS(src_start_card), bytes_card);
221+
222+    // For safety around the edges of the card move (since we round), mark the boundary cards as having changed
223+    //
224+    // Example of the "round down" behavior:
225+    // (assuming MUT_ARR_PTRS_CARD_BITS = 7)
226+    // 127 & (~ ((1 << MUT_ARR_PTRS_CARD_BITS) - 1)) = 0
227+    // 128 & (~ ((1 << MUT_ARR_PTRS_CARD_BITS) - 1)) = 128
228+    // 1029 & (~ ((1 << MUT_ARR_PTRS_CARD_BITS) - 1)) = 1024
229+    W_[dst_cards_start + WDS(mutArrPtrsCardWords(dst_start & (~ ((1 << MUT_ARR_PTRS_CARD_BITS) - 1))))] = 1;
230+    W_[dst_cards_start + WDS(dst_start_card) + bytes_card] = 1;
231+  } else {
232+    foreign "C" memcpy(dst_start_ptr "ptr", src_start_ptr "ptr", bytes);
233+
234+    foreign "C" memcpy(dst_cards_start + WDS(dst_start_card), src_cards_start + WDS(src_start_card), bytes_card);
235+
236+    W_[dst_cards_start + WDS(mutArrPtrsCardWords(dst_start & (~ ((1 << MUT_ARR_PTRS_CARD_BITS) - 1))))] = 1;
237+    W_[dst_cards_start + WDS(dst_start_card) + bytes_card] = 1;
238+  }
239+
240+  jump %ENTRY_CODE(Sp(0));
241+}
242+
243+stg_cloneArrayzh
244+{
245+  // Not done yet
246+}
247+
248+stg_cloneMutableArrayzh
249+{
250+  // Not done yet
251+}
252+
253+stg_freezzeArrayzh
254+{
255+  // Not done yet
256+}
257+
258+stg_thawArrayzh
259+{
260+  // Not done yet
261+}
262+
263 /* -----------------------------------------------------------------------------
264    MutVar primitives
265    -------------------------------------------------------------------------- */
266}
267[Finish array copy/clone primops (with card copy that is often fast) and factor out some common code into macros
268Daniel Peebles <pumpkingod@gmail.com>**20110201062816
269 Ignore-this: 515ca98038666b5f37f50446ef925d90
270] {
271hunk ./includes/Cmm.h 467
272 #define StgFunInfoExtra_bitmap(i)     StgFunInfoExtraFwd_bitmap(i)
273 #endif
274 
275+#define mutArrCardMask ((1 << MUT_ARR_PTRS_CARD_BITS) - 1)
276+#define mutArrPtrToCard(i) ((i) >> MUT_ARR_PTRS_CARD_BITS)
277 #define mutArrPtrsCardWords(n) \
278hunk ./includes/Cmm.h 470
279-    ROUNDUP_BYTES_TO_WDS(((n) + (1 << MUT_ARR_PTRS_CARD_BITS) - 1) >> MUT_ARR_PTRS_CARD_BITS)
280+    ROUNDUP_BYTES_TO_WDS(((n) + mutArrCardMask) >> MUT_ARR_PTRS_CARD_BITS)
281 
282 #if defined(PROFILING) || (!defined(THREADED_RTS) && defined(DEBUG))
283 #define OVERWRITING_CLOSURE(c) foreign "C" overwritingClosure(c "ptr")
284hunk ./rts/PrimOps.cmm 215
285   }
286 }
287 
288+#define COPY_CARDS(src_start, src_cards_start, dst_start, dst_cards_start, n, copy) \
289+  if (src_start & mutArrCardMask == dst_start & mutArrCardMask) { \
290+    foreign "C" copy(dst_cards_start + mutArrPtrsCardWords(dst_start), src_cards_start + mutArrPtrToCard(src_start), mutArrPtrToCard(n)); \
291+    \
292+    I8[dst_cards_start + mutArrPtrToCard(dst_start)] = I8[dst_cards_start + mutArrPtrToCard(dst_start)] | I8[src_cards_start + mutArrPtrToCard(src_start)]; \
293+    I8[dst_cards_start + mutArrPtrsCardWords(n)] = I8[dst_cards_start + mutArrPtrsCardWords(dst_start + n)] | I8[src_cards_start + mutArrPtrsCardWords(src_start + n)]; \
294+  } else { \
295+    foreign "C" memset(dst_cards_start "ptr", 1, WDS(mutArrPtrsCardWords(n))); \
296+  }
297+
298 stg_copyArrayzh
299 {
300   W_ bytes, n, src, dst, src_start, dst_start, src_start_ptr, dst_start_ptr;
301hunk ./rts/PrimOps.cmm 228
302-  W_ src_cards_start, dst_cards_start, src_start_card, dst_start_card, bytes_card;
303+  W_ src_cards_start, dst_cards_start;
304 
305   src = R1;
306   src_start = R2;
307hunk ./rts/PrimOps.cmm 242
308   src_start_ptr = src + SIZEOF_StgMutArrPtrs + WDS(src_start);
309   dst_start_ptr = dst + SIZEOF_StgMutArrPtrs + WDS(dst_start);
310 
311-  src_cards_start = src + SIZEOF_StgMutArrPtrs + WDS(StgMutArrPtrs_ptrs(src));
312-  dst_cards_start = dst + SIZEOF_StgMutArrPtrs + WDS(StgMutArrPtrs_ptrs(dst));
313-
314-  src_start_card = mutArrPtrsCardWords(src_start);
315-  dst_start_card = mutArrPtrsCardWords(dst_start);
316-  bytes_card = WDS(mutArrPtrsCardWords(n));
317-
318   // Copy data (we assume the arrays aren't overlapping since they're of different types)
319   foreign "C" memcpy(dst_start_ptr "ptr", src_start_ptr "ptr", bytes);
320 
321hunk ./rts/PrimOps.cmm 245
322-  // Copy cards
323-  foreign "C" memcpy(dst_cards_start + WDS(dst_start_card), src_cards_start + WDS(src_start_card), bytes_card);
324+  // The base address of both source and destination card tables
325+  src_cards_start = src + SIZEOF_StgMutArrPtrs + WDS(StgMutArrPtrs_ptrs(src));
326+  dst_cards_start = dst + SIZEOF_StgMutArrPtrs + WDS(StgMutArrPtrs_ptrs(dst));
327 
328hunk ./rts/PrimOps.cmm 249
329-  // Adjust boundary cards (see below)
330-  W_[dst_cards_start + WDS(mutArrPtrsCardWords(dst_start & (~ ((1 << MUT_ARR_PTRS_CARD_BITS) - 1))))] = 1;
331-  W_[dst_cards_start + WDS(dst_start_card) + bytes_card] = 1;
332+  COPY_CARDS(src_start, src_cards_start, dst_start, dst_cards_start, n, memcpy);
333 
334   jump %ENTRY_CODE(Sp(0));
335 }
336hunk ./rts/PrimOps.cmm 257
337 stg_copyMutableArrayzh
338 {
339   W_ bytes, n, src, dst, src_start, dst_start, src_start_ptr, dst_start_ptr;
340-  W_ src_cards_start, dst_cards_start, src_start_card, dst_start_card, bytes_card;
341+  W_ src_cards_start, dst_cards_start;
342 
343   src = R1;
344   src_start = R2;
345hunk ./rts/PrimOps.cmm 274
346   src_cards_start = src + SIZEOF_StgMutArrPtrs + WDS(StgMutArrPtrs_ptrs(src));
347   dst_cards_start = dst + SIZEOF_StgMutArrPtrs + WDS(StgMutArrPtrs_ptrs(dst));
348 
349-  src_start_card = mutArrPtrsCardWords(src_start);
350-  dst_start_card = mutArrPtrsCardWords(dst_start);
351-  bytes_card = WDS(mutArrPtrsCardWords(n));
352-
353   // The only time the memory might overlap is when the two arrays we were provided are the same array!
354   if (src == dst) {
355hunk ./rts/PrimOps.cmm 276
356-    // Move possibly overlapping regions around
357-    foreign "C" memmove(dst_start_ptr "ptr", src_start_ptr "ptr", bytes);
358-
359-    // Move relevant cards
360-    foreign "C" memmove(dst_cards_start + WDS(dst_start_card), src_cards_start + WDS(src_start_card), bytes_card);
361-
362-    // For safety around the edges of the card move (since we round), mark the boundary cards as having changed
363-    //
364-    // Example of the "round down" behavior:
365-    // (assuming MUT_ARR_PTRS_CARD_BITS = 7)
366-    // 127 & (~ ((1 << MUT_ARR_PTRS_CARD_BITS) - 1)) = 0
367-    // 128 & (~ ((1 << MUT_ARR_PTRS_CARD_BITS) - 1)) = 128
368-    // 1029 & (~ ((1 << MUT_ARR_PTRS_CARD_BITS) - 1)) = 1024
369-    W_[dst_cards_start + WDS(mutArrPtrsCardWords(dst_start & (~ ((1 << MUT_ARR_PTRS_CARD_BITS) - 1))))] = 1;
370-    W_[dst_cards_start + WDS(dst_start_card) + bytes_card] = 1;
371+    COPY_CARDS(src_start, src_cards_start, dst_start, dst_cards_start, n, memmove);
372   } else {
373hunk ./rts/PrimOps.cmm 278
374-    foreign "C" memcpy(dst_start_ptr "ptr", src_start_ptr "ptr", bytes);
375-
376-    foreign "C" memcpy(dst_cards_start + WDS(dst_start_card), src_cards_start + WDS(src_start_card), bytes_card);
377-
378-    W_[dst_cards_start + WDS(mutArrPtrsCardWords(dst_start & (~ ((1 << MUT_ARR_PTRS_CARD_BITS) - 1))))] = 1;
379-    W_[dst_cards_start + WDS(dst_start_card) + bytes_card] = 1;
380+    COPY_CARDS(src_start, src_cards_start, dst_start, dst_cards_start, n, memcpy);
381   }
382 
383   jump %ENTRY_CODE(Sp(0));
384hunk ./rts/PrimOps.cmm 284
385 }
386 
387-stg_cloneArrayzh
388-{
389-  // Not done yet
390-}
391-
392-stg_cloneMutableArrayzh
393-{
394-  // Not done yet
395-}
396+#define ARRAY_CLONE(name) \
397+  name \
398+  { \
399+    W_ src, src_off, words, n, init, arr, src_p, dst_p, size, dst_cards, src_cards; \
400+    \
401+    src = R1; \
402+    src_off = R2; \
403+    n = R3; \
404+    \
405+    MAYBE_GC(R1_PTR, name); \
406+    \
407+    size = n + mutArrPtrsCardWords(n); \
408+    words = BYTES_TO_WDS(SIZEOF_StgMutArrPtrs) + size; \
409+    ("ptr" arr) = foreign "C" allocate(MyCapability() "ptr", words) [R2]; \
410+    TICK_ALLOC_PRIM(SIZEOF_StgMutArrPtrs, WDS(n), 0); \
411+    \
412+    SET_HDR(arr, stg_MUT_ARR_PTRS_DIRTY_info, W_[CCCS]); \
413+    StgMutArrPtrs_ptrs(arr) = n; \
414+    StgMutArrPtrs_size(arr) = size; \
415+    \
416+    dst_p = arr + SIZEOF_StgMutArrPtrs; \
417+    src_p = src + SIZEOF_StgMutArrPtrs + WDS(src_off); \
418+    \
419+    foreign "C" memcpy(dst_p "ptr", src_p "ptr", WDS(n)); \
420+    \
421+    dst_cards = dst_p + WDS(n); \
422+    src_cards = src + SIZEOF_StgMutArrPtrs + WDS(StgMutArrPtrs_ptrs(src)); \
423+    \
424+    if (src_off & mutArrCardMask == 0) { \
425+      foreign "C" memcpy(dst_cards, src_cards, WDS(mutArrPtrsCardWords(n))); \
426+    } else { \
427+      foreign "C" memset(dst_cards, 1, WDS(mutArrPtrsCardWords(n))); \
428+    } \
429+  }
430 
431hunk ./rts/PrimOps.cmm 319
432-stg_freezzeArrayzh
433-{
434-  // Not done yet
435-}
436+ARRAY_CLONE(stg_cloneArrayzh)
437+ARRAY_CLONE(stg_cloneMutableArrayzh)
438+ARRAY_CLONE(stg_freezzeArrayzh)
439+ARRAY_CLONE(stg_thawArrayzh)
440 
441hunk ./rts/PrimOps.cmm 324
442-stg_thawArrayzh
443-{
444-  // Not done yet
445-}
446 
447 /* -----------------------------------------------------------------------------
448    MutVar primitives
449}
450[Add statements that were accidentally removed during refactoring
451Johan Tibell <johan.tibell@gmail.com>**20110201142953
452 Ignore-this: 55e0a539b4a319c8f50940eed1597d39
453 
454 All the cgrun064 tests now pass.
455] {
456hunk ./rts/PrimOps.cmm 276
457 
458   // The only time the memory might overlap is when the two arrays we were provided are the same array!
459   if (src == dst) {
460+    foreign "C" memmove(dst_start_ptr "ptr", src_start_ptr "ptr", bytes);
461     COPY_CARDS(src_start, src_cards_start, dst_start, dst_cards_start, n, memmove);
462   } else {
463hunk ./rts/PrimOps.cmm 279
464+    foreign "C" memcpy(dst_start_ptr "ptr", src_start_ptr "ptr", bytes);
465     COPY_CARDS(src_start, src_cards_start, dst_start, dst_cards_start, n, memcpy);
466   }
467 
468hunk ./rts/PrimOps.cmm 319
469     } else { \
470       foreign "C" memset(dst_cards, 1, WDS(mutArrPtrsCardWords(n))); \
471     } \
472+    RET_P(arr); \
473   }
474 
475 ARRAY_CLONE(stg_cloneArrayzh)
476}
477[Don't do anything fancy with cards for clones. Also, mark the header of immutable arrays correctly.
478Daniel Peebles <pumpkingod@gmail.com>**20110201171340
479 Ignore-this: 69ccfcd2c93901ce17e984034d830674
480] {
481hunk ./rts/PrimOps.cmm 286
482   jump %ENTRY_CODE(Sp(0));
483 }
484 
485-#define ARRAY_CLONE(name) \
486+#define ARRAY_CLONE(name, type) \
487   name \
488   { \
489hunk ./rts/PrimOps.cmm 289
490-    W_ src, src_off, words, n, init, arr, src_p, dst_p, size, dst_cards, src_cards; \
491+    W_ src, src_off, words, n, init, arr, src_p, dst_p, size; \
492     \
493     src = R1; \
494     src_off = R2; \
495hunk ./rts/PrimOps.cmm 302
496     ("ptr" arr) = foreign "C" allocate(MyCapability() "ptr", words) [R2]; \
497     TICK_ALLOC_PRIM(SIZEOF_StgMutArrPtrs, WDS(n), 0); \
498     \
499-    SET_HDR(arr, stg_MUT_ARR_PTRS_DIRTY_info, W_[CCCS]); \
500+    SET_HDR(arr, type, W_[CCCS]); \
501     StgMutArrPtrs_ptrs(arr) = n; \
502     StgMutArrPtrs_size(arr) = size; \
503     \
504hunk ./rts/PrimOps.cmm 311
505     \
506     foreign "C" memcpy(dst_p "ptr", src_p "ptr", WDS(n)); \
507     \
508-    dst_cards = dst_p + WDS(n); \
509-    src_cards = src + SIZEOF_StgMutArrPtrs + WDS(StgMutArrPtrs_ptrs(src)); \
510-    \
511-    if (src_off & mutArrCardMask == 0) { \
512-      foreign "C" memcpy(dst_cards, src_cards, WDS(mutArrPtrsCardWords(n))); \
513-    } else { \
514-      foreign "C" memset(dst_cards, 1, WDS(mutArrPtrsCardWords(n))); \
515-    } \
516+    foreign "C" memset(dst_p + WDS(n), 0, WDS(mutArrPtrsCardWords(n))); \
517     RET_P(arr); \
518   }
519 
520hunk ./rts/PrimOps.cmm 315
521-ARRAY_CLONE(stg_cloneArrayzh)
522-ARRAY_CLONE(stg_cloneMutableArrayzh)
523-ARRAY_CLONE(stg_freezzeArrayzh)
524-ARRAY_CLONE(stg_thawArrayzh)
525+ARRAY_CLONE(stg_cloneArrayzh, stg_MUT_ARR_PTRS_FROZEN0_info)
526+ARRAY_CLONE(stg_cloneMutableArrayzh, stg_MUT_ARR_PTRS_DIRTY_info)
527+ARRAY_CLONE(stg_freezzeArrayzh, stg_MUT_ARR_PTRS_FROZEN0_info)
528+ARRAY_CLONE(stg_thawArrayzh, stg_MUT_ARR_PTRS_DIRTY_info)
529 
530 
531 /* -----------------------------------------------------------------------------
532}
533[No need to pass a state token around for cloneArray#
534Daniel Peebles <pumpkingod@gmail.com>**20110202200007
535 Ignore-this: 8fe508b9513de210946a051ee2f3f215
536] hunk ./compiler/prelude/primops.txt.pp 639
537   has_side_effects = True
538 
539 primop  CloneArrayOp "cloneArray#" GenPrimOp
540-  Array# a -> Int# -> Int# -> State# s -> (# State# s, Array# a #)
541+  Array# a -> Int# -> Int# -> Array# a
542   {Return a newly allocated Array# with the specified subrange of the provided Array#.
543    The provided Array# should contain the full subrange specified by the two Int#s, but this is not checked.}
544   with
545
546Context:
547
548[Fix type checker error message
549simonpj@microsoft.com**20110201122920
550 Ignore-this: 7369cc5f8dae3d81621f580a8ddaf41e
551 
552 See Trac #4940. We had a message
553      The lambda expression `\ x -> x' has one argument one argument,
554 repeating the "one argument" part.  Easy fix.
555]
556[Some refactoring of SpecConstr
557simonpj@microsoft.com**20110201122841
558 Ignore-this: c2966091564a9ca4ceb27a9596d36b7d
559 
560 This was originally to improve the case when SpecConstr generated a
561 function with an unused argument (see Trac #4941), but I ended up
562 giving up on that.  But the refactoring is still an improvement.
563 
564 In particular I got rid of BothOcc, which was unused.
565]
566[Don't make join points when the case has only one non-bottom alternative
567simonpj@microsoft.com**20110201122637
568 Ignore-this: 333b9b62debbfc1338530ef4e710ccbb
569 
570 This fixes Trac #4930.  See Note [Bottom alternatives] in Simplify.lhs
571]
572[Improve Simplifier and SpecConstr behaviour
573simonpj@microsoft.com**20110131113529
574 Ignore-this: e5b96c97cee0950e558ddf15178bb6c9
575 
576 Trac #4908 identified a case where SpecConstr wasn't "seeing" a
577 specialisation it should easily get.  The solution was simple: see
578 Note [Add scrutinee to ValueEnv too] in SpecConstr.
579 
580 Then it turned out that there was an exactly analogous infelicity in
581 the mighty Simplifer too; see Note [Add unfolding for scrutinee] in
582 Simplify. This fix is good for Simplify even in the absence of the
583 SpecConstr change.  (It arose when I moved the binder- swap stuff to
584 OccAnall, not realising that it *remains* valuable to record info
585 about the scrutinee of a case expression.  The Note says why.
586 
587 Together these two changes are unconditionally good.  Better
588 simplification, better specialisation. Thank you Max.
589]
590[fix warning
591Simon Marlow <marlowsd@gmail.com>**20110131135951
592 Ignore-this: e893d9bfbabf1601133a1e09c50b908
593]
594[32-bit fix
595Simon Marlow <marlowsd@gmail.com>**20101013154200
596 Ignore-this: 7508977c263ed2cec321b40a8b5772a
597]
598[update to mingw gcc 4.5.2
599Simon Marlow <marlowsd@gmail.com>**20110119135053
600 Ignore-this: b9d5cb736a48a0adc5e35eb8a0c191cd
601]
602[count fizzled and GC'd sparks separately
603Simon Marlow <marlowsd@gmail.com>**20101111132727
604 Ignore-this: 4cb4b759aed06659b46cdf76e791e5c9
605]
606[count "dud" sparks (expressions that were already evaluated when sparked)
607Simon Marlow <marlowsd@gmail.com>**20101101124143
608 Ignore-this: ca94824c0e75da0b3688300e7285c7e6
609]
610[fix some shutdown memory leaks
611Simon Marlow <marlowsd@gmail.com>**20100820093133
612 Ignore-this: 3e7b80b5f4846d6c56319c150895953d
613]
614[fix DEBUG build
615Simon Marlow <marlowsd@gmail.com>**20110131123433
616 Ignore-this: f2e009eaa66a14a7c8ec6acc7a4bbdb1
617]
618[Fix formatting glitch in documentation
619simonpj@microsoft.com**20110128115400
620 Ignore-this: 6c410ed19956feac7e0cf68bb40b40b1
621]
622[Fix warnings
623Simon Marlow <marlowsd@gmail.com>**20110128103639
624 Ignore-this: aa7f2c9f9b91f9dabc7b5d5ea26121fd
625]
626[Merge in new code generator branch.
627Simon Marlow <marlowsd@gmail.com>**20110124121650
628 Ignore-this: 7762f21082cb84ec94daaeefd70f5ef2
629 This changes the new code generator to make use of the Hoopl package
630 for dataflow analysis.  Hoopl is a new boot package, and is maintained
631 in a separate upstream git repository (as usual, GHC has its own
632 lagging darcs mirror in http://darcs.haskell.org/packages/hoopl).
633 
634 During this merge I squashed recent history into one patch.  I tried
635 to rebase, but the history had some internal conflicts of its own
636 which made rebase extremely confusing, so I gave up. The history I
637 squashed was:
638 
639   - Update new codegen to work with latest Hoopl
640   - Add some notes on new code gen to cmm-notes
641   - Enable Hoopl lag package.
642   - Add SPJ note to cmm-notes
643   - Improve GC calls on new code generator.
644 
645 Work in this branch was done by:
646    - Milan Straka <fox@ucw.cz>
647    - John Dias <dias@cs.tufts.edu>
648    - David Terei <davidterei@gmail.com>
649 
650 Edward Z. Yang <ezyang@mit.edu> merged in further changes from GHC HEAD
651 and fixed a few bugs.
652]
653[Fix an egregious strictness analyser bug (Trac #4924)
654simonpj@microsoft.com**20110128080748
655 Ignore-this: 3bf533c3d30b45a8e78b1fec3d9634f
656 
657 The "virgin" flag was being threaded rather than treated
658 like an environment.  As a result, the second and subsequent
659 recursive definitions in a module were not getting a
660 correctly-initialised fixpoint loop, causing much worse
661 strictness analysis results.  Indeed the symptoms in
662 Trac #4924 were quite bizarre.
663 
664 Anyway, it's easily fixed.  Merge to stable branch.
665]
666[Refine incomplete-pattern checks (Trac #4905)
667simonpj@microsoft.com**20110127131304
668 Ignore-this: cf2e0852f20d1cadc6a2cba4272838f6
669 
670 The changes are:
671 
672 * New flag -fwarn-incomplete-uni-patterns, which checks for
673   incomplete patterns in (a) lambdas, (b) pattern bindings
674 
675 * New flag is not implied by -W or -Wall (too noisy; and many
676   libraries use incomplete pattern bindings)
677 
678 * Actually do the incomplete-pattern check for pattern bindings
679   (previously simply omitted)
680 
681 * Documentation for new flag
682]
683[Fix "make 1" etc following the build system changes
684Ian Lynagh <igloo@earth.li>**20110127001739
685 Ignore-this: 7ae0a41f2753d7740569f362a97ea5fb
686 The logic is now in mk/compiler-ghc.mk rather than being duplicated in
687 ghc/Makefile and compiler/Makefile.
688]
689[Fix vectorisation of recursive types
690Roman Leshchinskiy <rl@cse.unsw.edu.au>**20110126231843
691 Ignore-this: 983fc42a659be2e085da9b16f994aa2e
692]
693[Fix dependencies among specialisations for imported Ids
694simonpj@microsoft.com**20110126172112
695 Ignore-this: 364e09c11affe7bfe8f1b934ea28bbb6
696 
697 This was a subtle one (Trac #4903).  See
698   Note [Glom the bindings if imported functions are specialised]
699 in Speclialise.
700 
701 Fundamentally, a specialised binding for an imported Id was being
702 declared non-recursive, whereas in fact it can become recursive
703 via a RULE.  Once it's specified non-recurive the OccAnal pass
704 treats that as gospel -- and that in turn led to infinite inlining.
705 
706 Easily fixed by glomming all the specialised bindings in a Rec;
707 now the OccAnal will sort them out correctly.
708]
709[Fix bug in roughTopNames
710simonpj@microsoft.com**20110126171803
711 Ignore-this: eca8b144162f1bd94e2ccb433bca1e02
712 
713 roughTopNames was returning a name that in fact might be
714 "looked though" by the rule matcher. Result: a rule
715 that should match was being pre-emptively discarded.
716 
717 See Note [Care with roughTopName].
718 
719 Fixes a bug noticed by Pedro (Trac #4918).
720]
721[Comments only, plus a tiny bit of debug printing
722simonpj@microsoft.com**20110126171255
723 Ignore-this: f84364b2b90fc860e9289dd40d0395ac
724]
725[Comments only
726simonpj@microsoft.com**20110126171235
727 Ignore-this: 79059977f82aaac7f9714ad09e820ea9
728]
729[Look through type synonyms when computing orphans
730simonpj@microsoft.com**20110126171229
731 Ignore-this: 6dfc45dae3a94cdb0022b2d21d6e09f6
732 
733 I renamed functions tyClsNamesOfTypes to oprhNamesOfType,
734 because it's only used in that capacity, and we therefore
735 want to look through type synonyms.  Similarly exprOrphNames.
736 
737 This fixes Trac #4912.
738]
739[Bleat a bit more informatively in unionLists
740simonpj@microsoft.com**20110126171030
741 Ignore-this: 80b276aa3d7971c6d7802b5f6b522d2e
742]
743[Keep separate linker flags, for when we want to link with gcc or ld
744Ian Lynagh <igloo@earth.li>**20110124233121]
745[Fix validate on OS X 64
746Ian Lynagh <igloo@earth.li>**20110124183618]
747[Split main/GHC into GHC and GhcMake
748simonpj@microsoft.com**20110125161632
749 Ignore-this: 502ea034de77ecd81173161836d78287
750 
751 There are two things going on in main/GHC.hs.
752   * It's the root module of the GHC package
753   * It contains lots of stuff for --make
754 It is also gigantic (2.7k lines)
755 
756 This patch splits it into two
757   * GHC.hs is the root module for the GHC package
758       (1.3k lines)
759   * GhcMake.hs contains the stuff for --make
760       (1.4k lines)
761 
762 Happily the functional split divided it almost
763 exactly in half.
764 
765 This is a pure refactoring.  There should be no
766 behavioural change.
767]
768[Comments only
769simonpj@microsoft.com**20110125131115
770 Ignore-this: 7ec4e97a481d06894de940aba59c575d
771]
772[Fix Trac #3717 by making exprOkForSpeculation a bit cleverer
773simonpj@microsoft.com**20110125110525
774 Ignore-this: 13b606b05da69c29bf53aaf408fd602
775 
776 The main change here is to do with dropping redundant seqs.
777 See Note [exprOkForSpeculation: case expressions] in CoreUtils.
778]
779[Improve dataToTag# magic
780simonpj@microsoft.com**20110125110418
781 Ignore-this: 11fdb265e030dec4d5b13ed6b16c9761
782 
783 dataToTag# is a bit unsatisfactory because it requires
784 its argument to be evaluated, and we don't have a good
785 way to enforce that. This patch adds some comments, and
786 makes exprOkForSpeculation a bit less picky in the case
787 of dataToTag# (since the argument may, in fact, not be
788 eval'd).
789]
790[Fix Trac #4917: try a bit harder to unify on-the-fly
791simonpj@microsoft.com**20110125110112
792 Ignore-this: e96e0a19ab8517d4ba648efe91f6b379
793 
794 This is generally a modest improvement but, more important,
795 it fixes a "unify-under-forall" problem.  See Note [Avoid deferring].
796 
797 There's still a lurking unsatisfactory-ness in that we can't
798 defer arbitrary constraints that are trapped under a forall.
799]
800[DPH options updated
801Manuel M T Chakravarty <chak@cse.unsw.edu.au>**20110124043617
802 Ignore-this: 6b7d2949b75f9c923f279c1178d2d042
803 - '-Odph' is now '-O2 -fsimplifier-phases=3 -fsimplifier-iterations=20'
804 - The new option '-fdph-none' is the default; it indicates that no DPH
805   backend is selected and is the only valid option if the DPH libraries
806   are not installed.  If vectorisation is attempted with -fdph-none a
807   suitable error message is generated.
808 - Hence, '-fdph-par' (or '-fdph-seq') needs to be explicitly selected
809   when using vectorisation and when linking vectorised code.  (There
810   seems to be no elegant way to avoid that.)
811]
812[Add build system profiling to build system
813Ian Lynagh <igloo@earth.li>**20110123151408
814 Ignore-this: 75717810be32d60323980f9fd1baa853
815]
816[Fix ghci in stage3
817Ian Lynagh <igloo@earth.li>**20110123120232]
818[Remove use of non-existent $$(dir) variable in the rts ghc.mk
819Ian Lynagh <igloo@earth.li>**20110123021815]
820[Add some missing dependencies
821Ian Lynagh <igloo@earth.li>**20110123004208]
822[Tweak some deps to avoid multiple $(wildcard ...)s
823Ian Lynagh <igloo@earth.li>**20110123001045
824 Ignore-this: 38e53cb6f6b4f27c771ae0ed341f8958
825 Note that some things depending on the rts/includes header files now
826 depend on more files: They used to include depend on includes/*.h, but
827 now they also depend on header files in subdirectories. As far as I can
828 see this was a bug.
829]
830[Use := when assigning the result of $(wildcard ...)
831Ian Lynagh <igloo@earth.li>**20110122224532
832 Ignore-this: 67e2ca2ffbcffb5b7f55bd60c17fc6cf
833 Avoids repeated evaluations of things that need system calls etc
834]
835[Simplify the build system, and remove 2 phases
836Ian Lynagh <igloo@earth.li>**20110122190928
837 Ignore-this: 7b6184088befcbc44ea47b2f4abf85a9
838 From
839     http://hackage.haskell.org/trac/ghc/wiki/Building/Architecture/Idiom/PhaseOrdering
840 
841 Phase 0:
842     Includes: package-data.mk files for things built by the
843               bootstrapping compiler.
844     Builds:   the dependency files for hsc2hs and genprimopcode. We need
845               to do this now, as hsc2hs needs to be buildable in phase 1's
846               includes (so that we can make the hpc library's .hs source
847               files, which in turn is necessary for making its dependency
848               files), and genprimopcode needs to be buildable in phase 1's
849               includes (so that we can make the primop-*.hs-incl files,
850               which are sources for the stage1 compiler library, and thus
851               necessary for making its dependency files).
852 Phase 1:
853     Includes: dependency files for things built by the bootstrapping
854               compiler.
855     Builds:   package-data.mk files for everything else. Note that this
856               requires configuring the packages, which means telling cabal
857               which ghc to use, and thus the stage1 compiler gets built
858               during this phase.
859 Phase "":
860     Includes: dependency files for everything else.
861     Builds:   Everything else.
862]
863[Manually control more of the Cabal flags for the compiler and ghc packages
864Ian Lynagh <igloo@earth.li>**20110121230552
865 Ignore-this: 652b5f6327d246d7e2e47acbca614df2
866 For some reason the Windows HEAD builder has started thinking the ghci
867 flag should be on in stage 1. This should fix it, and generally make
868 things a little more resilient.
869]
870[Remove some hardcoded makefile settings
871Ian Lynagh <igloo@earth.li>**20110121230245
872 Ignore-this: 6b1b68aebdfbe02c15518985d2ea7559
873 Now that we used cabal to configure the ghc-bin package they are no
874 longer needed.
875]
876[tweak newArray# documentation again
877Simon Marlow <marlowsd@gmail.com>**20110119140633
878 Ignore-this: ceee33428dbad7e0f5eabfa0a2590466
879]
880[Fix OSTYPE test
881Ian Lynagh <igloo@earth.li>**20110120000308
882 Ignore-this: 8fa5d5c03297cb507a166bd85675145c
883]
884[Comments only
885simonpj@microsoft.com**20110119222247
886 Ignore-this: ea531428e9093ecedb895735ed537791
887]
888[Add OSTYPE build-system variable, and use it
889simonpj@microsoft.com**20110113155023
890 Ignore-this: c4a75f0bb27a680924e57ca7075ec116
891 
892 The use is in install.mk.in, where we need to know when
893 we're on Cygwin.
894 
895 This fixes the build on my Windows box, where I have
896 both Msys and Cygwin.
897]
898[Remove an extraneous comma that stopped ghc-cabal from building
899Ian Lynagh <igloo@earth.li>**20110119222359]
900[Move some make variables around
901Ian Lynagh <igloo@earth.li>**20110119221545
902 Ignore-this: c57c93f39d72c3baef7c5f466861dd5b
903]
904[Remove a debugging 'info'
905Ian Lynagh <igloo@earth.li>**20110119203305
906 Ignore-this: ea912ba205eaae1d2bcf0cce7c13628d
907]
908[Move the PACKAGE_MAGIC evaluation inside package-data.mk
909Ian Lynagh <igloo@earth.li>**20110119203229
910 Ignore-this: 497c4e83ae75089c24d6c794c4e2891f
911]
912[Fix libraries/index.html's haddock dependency on Windows
913Ian Lynagh <igloo@earth.li>**20110119172310]
914[Add configure phases for the stage 3 compiler
915Ian Lynagh <igloo@earth.li>**20110119130629]
916[Include kfreebsdgnu in the list of Target Platforms.
917Marco Silva <marcot@marcot.eti.br>**20110118222352
918 Ignore-this: 759482baf33903b98cd837636a3f5328
919]
920[Fix documentation bug: newArray# accepts word count, not byte count.
921Edward Z. Yang <ezyang@mit.edu>**20110118221834
922 Ignore-this: 8daab134bf72a740b89d273fb4e983d5
923]
924[Update the location of libffi.dll.a
925Ian Lynagh <igloo@earth.li>**20110118164225
926 As far as I can see this has been wrong for some time, but only bit
927 recently.
928]
929[Update the generics docs; pointed out by Christian Maeder
930Ian Lynagh <igloo@earth.li>**20110117214632]
931[ghc-cabal now adds the language flag being used
932Ian Lynagh <igloo@earth.li>**20110117184833
933 Ignore-this: 8198892ef7f8009561d3181425cde942
934 This means we get -XHaskell98 added to the list of flags, just like we
935 would if we were building with Cabal.
936]
937[Reinstate the OS X flags in the LDFLAGS etc variables
938Ian Lynagh <igloo@earth.li>**20110117200540
939 Ignore-this: 9261baa1843100f65b02fb91c1a0d225
940 I expect this will fix:
941 http://www.haskell.org/pipermail/cvs-ghc/2011-January/059098.html
942]
943[Add NondecreasingIndentation extension to ghc-bin
944Ian Lynagh <igloo@earth.li>**20110117200427
945 Ignore-this: b6b029ee6dfbda482c91d17e835f9000
946]
947[Change an "if ... else return ()" into a "when"
948Ian Lynagh <igloo@earth.li>**20110117191714
949 Ignore-this: 7de58b728e4fce7f86d7d24a3089e6c7
950]
951[Add NondecreasingIndentation to the list of extensions in ghc-pkg
952Ian Lynagh <igloo@earth.li>**20110117190610
953 Ignore-this: 20ce8144b7b64d1f67de2f6983717da3
954]
955[Add NondecreasingIndentation to the list of extensions in the ghc package
956Ian Lynagh <igloo@earth.li>**20110117190404
957 Ignore-this: 516b45e93c1b3bbb66da5414d9aabef1
958]
959[Fix deps on the ghc package
960Ian Lynagh <igloo@earth.li>**20110117173010
961 The standard libraries/$depname scheme doesn't apply, so we need to
962 handle it specially.
963]
964[Tidy up gmp cleaning
965Ian Lynagh <igloo@earth.li>**20110117121155
966 Ignore-this: 61d9a57d14b70732f62d6b2c8d6d197a
967]
968[Remove redundant libraries/cabal-bin.hs
969Ian Lynagh <igloo@earth.li>**20110116194919
970 Ignore-this: 13b4a8d26fa06ec952351603c3bb40ee
971]
972[Turn off dtrace unless you override USE_DTRACE
973Ian Lynagh <igloo@earth.li>**20110116180306
974 Ignore-this: beafc2002091fa7f0e66666004c870a5
975 There are problems with dtrace on 64bit 10.5. For now at least, we
976 just turn dtrace off unless you override USE_DTRACE
977]
978[Simplify a bit of makefile
979Ian Lynagh <igloo@earth.li>**20110116175218
980 Ignore-this: 18f02e40e36eca2e2cab79c152c72541
981]
982[Tweak Windows phase ordering
983Ian Lynagh <igloo@earth.li>**20110116173459
984 Ignore-this: bb8a70741be4574edc149349acd0f4be
985]
986[Handle dependencies of programs on libraries correctly
987Ian Lynagh <igloo@earth.li>**20110116155627]
988[It's not clear if LDFLAGS flags will be given to gcc or ld,
989Ian Lynagh <igloo@earth.li>**20110116151230
990 Ignore-this: a6a2d0b1f550c922c32f6f252e4e3285
991 and they accept different flags, so for now do nothing
992]
993[Fix cross-package dependency generation on Windows
994Ian Lynagh <igloo@earth.li>**20110116150901
995 Ignore-this: f78baaa7074ca36a6a4ff8a7e6f2e35
996]
997[Add some Windows-only CONFIGURE_PHASEs
998Ian Lynagh <igloo@earth.li>**20110116150826
999 Ignore-this: abf1bf498609107eb206b22d483613de
1000]
1001[Simplify, and future-proof, a dependency in the build system
1002Ian Lynagh <igloo@earth.li>**20110116020035
1003 Ignore-this: d089133430828d041b3601b1e9c8b22a
1004]
1005[Remove an unnecessary phase, and some unnecessary deps
1006Ian Lynagh <igloo@earth.li>**20110116015943
1007 Ignore-this: e649b072d006db5db97aee26d3753f65
1008 now that cross-package deps are tracked correctly.
1009]
1010[We can now pass -include-pkg-deps to the bootstrapping compiler
1011Ian Lynagh <igloo@earth.li>**20110116015714
1012 Ignore-this: bdfed941124bb93111f117800be5f2d8
1013]
1014[Remove some flags that are redundant now GHC gets configured by Cabal
1015Ian Lynagh <igloo@earth.li>**20110116003154
1016 Ignore-this: 43a023c5103b72c91d53cf3bed7a4c50
1017]
1018[Change some HC_OPTS var handling
1019Ian Lynagh <igloo@earth.li>**20110116003104
1020 Ignore-this: 629f4a3d37028f71a477c22ed4e8591e
1021 In particular, this means ghc gets built with -rtsopt, -threaded, etc again.
1022]
1023[Remove some unnecessary workarounds
1024Ian Lynagh <igloo@earth.li>**20110116002803
1025 Ignore-this: 5ecc62f765522c08c44aa0814c5b840e
1026 We can now rely on cross-package deps working properly, as we require
1027 GHC 6.12.
1028]
1029[Tidy up a bit
1030Ian Lynagh <igloo@earth.li>**20110116001121
1031 Ignore-this: a2baabc6da0cf2877507b7833d5b0fc7
1032]
1033[Build system improvements
1034Ian Lynagh <igloo@earth.li>**20110115231927
1035 Ignore-this: 92ea6514addc8aa8734d7e0eb61b50cb
1036 We no longer use dummy-ghc; instead we don't configure most packages
1037 until the stage1 compiler is available.
1038   
1039 We also now use Cabal for building the ghc-bin package.
1040 
1041 There are a couple more sanity checks too.
1042]
1043[Whitespace tweak
1044Ian Lynagh <igloo@earth.li>**20110115214149
1045 Ignore-this: 3e564566f311be473e94f6af609bdeaa
1046]
1047[Fix libffi build rules
1048Ian Lynagh <igloo@earth.li>**20110115202104
1049 Ignore-this: 57e1763d2079301b0165be7deba29c85
1050 Fixes a rare race when both libHSffi.a and libHSffi_p.a were being built
1051 at the same time:
1052 
1053 "cp" libffi/dist-install/build/libffi.a libffi/dist-install/build/libHSffi.a
1054 "cp" libffi/dist-install/build/libffi.a libffi/dist-install/build/libHSffi.a
1055 "cp" libffi/dist-install/build/libffi.so libffi/dist-install/build/libHSffi-ghc7.1.20110115.so
1056 cp: cannot create regular file `libffi/dist-install/build/libHSffi.a': File exists
1057]
1058[Fix Trac #4874: specialisation of INLINABLE things
1059simonpj@microsoft.com**20110114163227
1060 Ignore-this: b90543117ebddaf3bbeeaf0af0c18699
1061 
1062 Johan discovered that when INLINABLE things are specialised
1063 bad things can happen. This patch implements a hack -- but
1064 it's a simple hack and it solves the problem.
1065 
1066 See Note [Inline specialisations].
1067 
1068 The hack part is that really INLINABLE should not cause *any* loss
1069 optimisation, and it does; see Note [Don't w/w INLINABLE things] in
1070 WorkWrap.
1071]
1072[Comments only
1073simonpj@microsoft.com**20110114162959
1074 Ignore-this: f76d4d8f527c3fcd2598ec8cc5fd3049
1075]
1076[Fix a buglet in postInlineUnconditionally
1077simonpj@microsoft.com**20110114162927
1078 Ignore-this: 7a7b8610ef863907843d4ae36a8a1a3c
1079 
1080 Under obscure circumstances (actually only shown up when fixing something
1081 else) it was possible for a variable binding to be discarded although
1082 it was still used.  See Note [Top level and postInlineUnconditionally]
1083]
1084[cope with empty libraries/stamp directory (in git repo)
1085Simon Marlow <marlowsd@gmail.com>**20110114142406
1086 Ignore-this: 6e95c44368d784f86a0c1c1d1e24d810
1087]
1088[add .gitignore
1089Simon Marlow <marlowsd@gmail.com>**20110114142353
1090 Ignore-this: 23d7cabd2b04eedfe4c33ad94a120474
1091]
1092[Fix longstanding bug in C-- inlining for functions calls.
1093Edward Z. Yang <ezyang@mit.edu>**20110113130654
1094 Ignore-this: 79001003b1f3cc5005207ccfed980c21
1095]
1096[fix for remote repos without -r
1097Simon Marlow <marlowsd@gmail.com>**20110113131147
1098 Ignore-this: 3ddd8a4c616cad01a2dbdb500fb54279
1099]
1100[add a version of packages that stores all the repos in git
1101Simon Marlow <marlowsd@gmail.com>**20110113111733
1102 Ignore-this: fcca2eb2e753ee20bb5abce7f30f5205
1103]
1104[add the -r flag from darcs-all
1105Simon Marlow <marlowsd@gmail.com>**20110113111654
1106 Ignore-this: ada88377bd95ebb9c668dd48954f321e
1107]
1108[Make Template Haskell classInstances function return [ClassInstance]
1109simonpj@microsoft.com**20110113111421
1110 Ignore-this: d14381f0a94170965414dd8724188356
1111 
1112 This is a recently-introduce function, which was returning
1113 a [Name], being the names of the dfuns.  But what you really
1114 want (obviously!) is the ClassInstances, and we have a TH type
1115 for that.
1116 
1117 This is an API change, so don't merge into GHC 7.0.  But it's
1118 a new part of TH which is still settling down.
1119 
1120 Fixes Trac #4863.
1121]
1122[Improve the finder's error messages
1123simonpj@microsoft.com**20110113111233
1124 Ignore-this: ec4819b0a44af9fd03dc0a8b8e13699d
1125 
1126 I'd done all the work to add fuzzy-match suggestions, but they
1127 weren't really being used!  Here's what you get now
1128 
1129    module Foo where
1130     import Data.Lst
1131 
1132 Foo.hs:3:1:
1133     Failed to load interface for `Data.Lst'
1134     Perhaps you meant
1135       Data.List (from base)
1136       Data.List (needs flag -package haskell2010-1.0.0.0)
1137       Data.Int (needs flag -package haskell2010-1.0.0.0)
1138     Use -v to see a list of the files searched for.
1139]
1140[White space only
1141simonpj@microsoft.com**20110113093931
1142 Ignore-this: 4e46acca5241615a3283996052a634a
1143]
1144[Produce an error message, not a crash, for HsOpApp with non-var operator
1145simonpj@microsoft.com**20110112170719
1146 Ignore-this: df0f6f2e3318f9c33a714609019b0262
1147 
1148 Fixes Trac #4877.
1149]
1150[update to work with current packages file format
1151Simon Marlow <marlowsd@gmail.com>**20110112160224
1152 Ignore-this: da73498734aadbfbf0a31389a9dc44d
1153]
1154[In configure, test that GHC generates code for the correct platform (#4819)
1155Simon Marlow <marlowsd@gmail.com>**20110107163541
1156 Ignore-this: 29541d3896f9c9bcf791510edae70254
1157 Patch supplied by the bug reporter, tidied up by me.
1158 
1159 $ ./configure --with-ghc=$HOME/fp/bin/i386-unknown-linux/ghc --build=x86_64-unknown-linux
1160 checking for gfind... no
1161 checking for find... /usr/bin/find
1162 checking for sort... /usr/bin/sort
1163 checking for GHC version date... inferred 7.1.20110107
1164 checking version of ghc... 7.0.1
1165 checking build system type... x86_64-unknown-linux-gnu
1166 checking host system type... x86_64-unknown-linux-gnu
1167 checking target system type... x86_64-unknown-linux-gnu
1168 Host platform inferred as: i386-unknown-linux
1169 Target platform inferred as: i386-unknown-linux
1170 This GHC (/home/simonmar/fp/bin/i386-unknown-linux/ghc) does not generate code for the build platform
1171    GHC target platform    : i386-unknown-linux
1172    Desired build platform : x86_64-unknown-linux
1173]
1174[Major refactoring of the type inference engine
1175simonpj@microsoft.com**20110112145604
1176 Ignore-this: 6a7fc90c9b798e89505606726cc8090e
1177 
1178 This patch embodies many, many changes to the contraint solver, which
1179 make it simpler, more robust, and more beautiful.  But it has taken
1180 me ages to get right. The forcing issue was some obscure programs
1181 involving recursive dictionaries, but these eventually led to a
1182 massive refactoring sweep.
1183 
1184 Main changes are:
1185  * No more "frozen errors" in the monad.  Instead "insoluble
1186    constraints" are now part of the WantedConstraints type.
1187 
1188  * The WantedConstraint type is a product of bags, instead of (as
1189    before) a bag of sums.  This eliminates a good deal of tagging and
1190    untagging.
1191 
1192  * This same WantedConstraints data type is used
1193      - As the way that constraints are gathered
1194      - As a field of an implication constraint
1195      - As both argument and result of solveWanted
1196      - As the argument to reportUnsolved
1197 
1198  * We do not generate any evidence for Derived constraints. They are
1199    purely there to allow "impovement" by unifying unification
1200    variables.
1201 
1202  * In consequence, nothing is ever *rewritten* by a Derived
1203    constraint.  This removes, by construction, all the horrible
1204    potential recursive-dictionary loops that were making us tear our
1205    hair out.  No more isGoodRecEv search either. Hurrah!
1206 
1207  * We add the superclass Derived constraints during canonicalisation,
1208    after checking for duplicates.  So fewer superclass constraints
1209    are generated than before.
1210 
1211  * Skolem tc-tyvars no longer carry SkolemInfo.  Instead, the
1212    SkolemInfo lives in the GivenLoc of the Implication, where it
1213    can be tidied, zonked, and substituted nicely.  This alone is
1214    a major improvement.
1215 
1216  * Tidying is improved, so that we tend to get t1, t2, t3, rather
1217    than t1, t11, t111, etc
1218 
1219    Moreover, unification variables are always printed with a digit
1220    (thus a0, a1, etc), so that plain 'a' is available for a skolem
1221    arising from a type signature etc. In this way,
1222      (a) We quietly say which variables are unification variables,
1223          for those who know and care
1224      (b) Types tend to get printed as the user expects.  If he writes
1225              f :: a -> a
1226              f = ...blah...
1227          then types involving 'a' get printed with 'a', rather than
1228          some tidied variant.
1229 
1230  * There are significant improvements in error messages, notably
1231    in the "Cannot deduce X from Y" messages.
1232]
1233[Fix installation on cygwin
1234Ian Lynagh <igloo@earth.li>**20110111194838
1235 Ignore-this: fe923d0619da3bd3a34968106c92fdab
1236]
1237[Do dependency analysis when kind-checking type declarations
1238simonpj@microsoft.com**20110110110351
1239 Ignore-this: 17a8dee32694d3e1835cf7bb02d3abb5
1240 
1241 This patch fixes Trac #4875.  The main point is to do dependency
1242 analysis on type and class declarations, and kind-check them in
1243 dependency order, so as to improve error messages.
1244 
1245 This patch means that a few programs that would typecheck before won't
1246 typecheck any more; but before we were (naughtily) going beyond
1247 Haskell 98 without any language-extension flags, and Trac #4875
1248 convinces me that doing so is a Bad Idea.
1249 
1250 Here's an example that won't typecheck any more
1251        data T a b = MkT (a b)
1252        type F k = T k Maybe
1253 
1254 If you look at T on its own you'd default 'a' to kind *->*;
1255 and then kind-checking would fail on F.
1256 
1257 But GHC currently accepts this program beause it looks at
1258 the *occurrences* of T.
1259]
1260[Move imports around (no change in behaviour)
1261simonpj@microsoft.com**20110110105647
1262 Ignore-this: d618cabbc52be7d7968de1e0bdd44082
1263]
1264[Make fuzzy matching a little less eager for short identifiers
1265simonpj@microsoft.com**20110107102855
1266 Ignore-this: a753643e88433d74b44a480cc0f4170c
1267 
1268 For single-character identifiers we now don't make any suggestions
1269 See comments in Util.fuzzyLookup
1270]
1271[Fix Trac #4870: get the inlining for an imported INLINABLE Id
1272simonpj@microsoft.com**20110105002712
1273 Ignore-this: 60c0192eb48590c2e6868d15ba8f84ce
1274 
1275 We need the unfolding even for a *recursive* function (indeed
1276 that's the point) and I was using the wrong function to get it
1277 (idUnfolding rather than realIdUnfolding).
1278]
1279[Rejig the includes/ installation rules
1280Ian Lynagh <igloo@earth.li>**20110109181158
1281 They're a little nicer now, and a regression in the cygwin build is
1282 fixed (the $i in the destination wasn't surviving being passed through
1283 cygpath).
1284]
1285[Make DESTDIR an absolute path when installing; fixes #4883
1286Ian Lynagh <igloo@earth.li>**20110108171635]
1287[Add utils/ghc-cabal/Makefile
1288Ian Lynagh <igloo@earth.li>**20110108144049]
1289[Remove redundant import
1290Ian Lynagh <igloo@earth.li>**20110108130047
1291 Ignore-this: 1c7fdec77b48319c845c9593b5fb94af
1292]
1293[Improve error message of :set in ghci (ticket #4190).
1294Michal Terepeta <michal.terepeta@gmail.com>**20101130211505
1295 Ignore-this: ccc8a0816a900ba8c4a966285a465b23
1296]
1297[Improve error message when importing data constructors (ticket #4058).
1298Michal Terepeta <michal.terepeta@gmail.com>**20101127211338
1299 Ignore-this: 3289a08f0391dd90dfef2e0403a04ccd
1300]
1301[catch SIGTSTP and save/restore terminal settings (#4460)
1302Simon Marlow <marlowsd@gmail.com>**20110107124042
1303 Ignore-this: 38f7f27bf75178899f466404c048241d
1304 As far as I can tell, it is the responsibility of the program to save
1305 and restore its own terminal settings across a suspend/foreground, the
1306 shell doesn't do it (which seems odd).  So I've added a signal handler
1307 for SIGTSTP to the RTS which will save and restore the terminal
1308 settings iff we modified them with hSetBuffering or hSetEcho (we
1309 already restore them at exit time in these cases).
1310]
1311[comment updates
1312Simon Marlow <marlowsd@gmail.com>**20110107094236
1313 Ignore-this: c2b30b0c98645e2847a2749c7fdc167f
1314]
1315[On Cygwin, use a Cygwin-style path for /bin/install's destination
1316Ian Lynagh <igloo@earth.li>**20110106223030
1317 
1318 cygwin's /bin/install doesn't set file modes correctly if the
1319 destination path is a C: style path:
1320 
1321 $ /bin/install -c -m 644 foo /cygdrive/c/cygwin/home/ian/foo2
1322 $ /bin/install -c -m 644 foo c:/cygwin/home/ian/foo3
1323 $ ls -l foo*
1324 -rw-r--r-- 1 ian None 0 2011-01-06 18:28 foo
1325 -rw-r--r-- 1 ian None 0 2011-01-06 18:29 foo2
1326 -rwxrwxrwx 1 ian None 0 2011-01-06 18:29 foo3
1327 
1328 This causes problems for bindisttest/checkBinaries.sh which then
1329 thinks that e.g. the userguide HTML files are binaries.
1330 
1331 We therefore use a /cygdrive path if we are on cygwin
1332]
1333[Fix mkUserGuidePart program name on Windows
1334Ian Lynagh <igloo@earth.li>**20110106143707]
1335[add comment to remind people to update driver/gcc/gcc.c
1336Simon Marlow <marlowsd@gmail.com>**20110106152402
1337 Ignore-this: c07d7ac11eb9221ef821f78aab1807cb
1338]
1339[use Win32 CreateProcess() rather than mingw spawnv() (#4531)
1340Simon Marlow <marlowsd@gmail.com>**20110106133834
1341 Ignore-this: 4c0947853549dad034622c044391af6c
1342]
1343[update paths now that we upgraded gcc to 4.5.0
1344Simon Marlow <marlowsd@gmail.com>**20110106133729
1345 Ignore-this: f8f9bcad984fdd472e0ae958b66bea9d
1346]
1347[fix markup
1348Simon Marlow <marlowsd@gmail.com>**20110106093152
1349 Ignore-this: 555b6e39ae6b5a177b03c5edffc169ab
1350]
1351[fix up multi-line GHCi patch (#4316)
1352Simon Marlow <marlowsd@gmail.com>**20110105154548
1353 Ignore-this: 53d5d489bd2a792c01f2cc56a11f3ce6
1354]
1355[multiline commands in GHCi #4316
1356Vivian McPhail <haskell.vivian.mcphail@gmail.com>**20101105051308
1357 This patch adds support for multiline commands in GHCi.
1358 
1359 The first line of input is lexed.  If there is an active
1360 layout context once the lexer reaches the end of file, the
1361 user is prompted for more input.
1362 
1363 Multiline input is exited by an empty line and can be escaped
1364 with a user interrupt.
1365 
1366 Multiline mode is toggled with `:set +m`
1367]
1368[Replace a #if with a Haskell conditional
1369Ian Lynagh <igloo@earth.li>**20110105183011
1370 Ignore-this: f08f3a4356586efab2725ad8704b2eba
1371]
1372[Whitespace only in X86.Ppr
1373Ian Lynagh <igloo@earth.li>**20110105171124]
1374[Fix error compiling AsmCodeGen.lhs for PPC Mac (unused makeFar addr)
1375naur@post11.tele.dk**20101219213555
1376 Ignore-this: ab25d5f2e2ebe163547d5babaf4b1dbf
1377]
1378[Define cTargetArch and start to use it rather than ifdefs
1379Ian Lynagh <igloo@earth.li>**20110104220013
1380 Using Haskell conditionals means the compiler sees all the code, so
1381 there should be less rot of code specific to uncommon arches. Code
1382 for other platforms should still be optimised away, although if we want
1383 to support targetting other arches then we'll need to compile it
1384 for-real anyway.
1385]
1386[Fix error compiling AsmCodeGen.lhs for PPC Mac (rtsPackageId)
1387naur@post11.tele.dk**20101219212530
1388 Ignore-this: 946f6d3e0d3c3ddf2dc07b85e1f82d85
1389]
1390[Rename the c*Platform variables to c*PlatformString
1391Ian Lynagh <igloo@earth.li>**20110104210250]
1392[Fix #4829 (build does not respect --with-gcc option)
1393gwright@antiope.com**20101221133233
1394 Ignore-this: 37918feb82f911c2beb75915b6e8b97b
1395 
1396 This patch fixes what seems to be the last problem with the --with-gcc
1397 option.  On OS X, we need to pass the path to gcc to dtrace as the
1398 preprocessor.  (Internally, dtrace on OS X sets the default preprocessor
1399 to /usr/bin/gcc.)  ATM, dtrace is only supported on OS X, so we don't
1400 need any conditionalization.  If dtrace is ported to other platforms,
1401 we might need to change this. However, usage on other platforms will
1402 probably be similar to OS X, since many of Apple's changes are to
1403 use the gnu toolchain instead of the Sun toolchain.
1404   
1405]
1406[Drop a seven years old workaround for happy
1407Matthias Kilian <kili@outback.escape.de>**20101231192343
1408 Ignore-this: a9348c91292c113bd967464fbe859f1f
1409]
1410[Add gcc and ld flags to --info output
1411Ian Lynagh <igloo@earth.li>**20101220173520]
1412[Fix Trac #4525: report type errors in terms of the immediate type synonym
1413simonpj@microsoft.com**20101224082520
1414 Ignore-this: a3bd076bfe0e1c6f575b106f77f326c6
1415 
1416 This small change means that if you have
1417      type Age = Int
1418 and you try to unify Age and Bool, you'll get a complaint about
1419 not matching Age and Bool, rather than Int and Bool.  See the notes
1420 with Trac #4525
1421]
1422[Comments only
1423simonpj@microsoft.com**20101224082310
1424 Ignore-this: 1f69fa3244663b653607093efcdf7b0
1425]
1426[Implement fuzzy matching for the Finder
1427simonpj@microsoft.com**20101222175400
1428 Ignore-this: 4dfbbc07bcb59c5f4cee9a902c89d63e
1429 
1430 ..so that you get a more helpful message when
1431 you mis-spell a module name in an 'import'.
1432 
1433 Validates, but not fully tested.
1434 
1435 Based on Max's patch in Trac #2442, but heavily refactored.
1436]
1437[Implement fuzzy matching for the renamer
1438simonpj@microsoft.com**20101222175306
1439 Ignore-this: 66478736249de793a61612f184d484b0
1440 
1441 ...so that you get helpful suggestions when you mis-spell a name
1442 Based on Max's patch in Trac #2442, but heavily refactored.
1443]
1444[Add fuzzyLookup, a variant of fuzzyMatch
1445simonpj@microsoft.com**20101222175124
1446 Ignore-this: f0eafaf275b9edffee176f2fb4effe2f
1447 
1448 Plus, I changed quite a bit of layout to make the lines shorter.
1449]
1450[White space only
1451simonpj@microsoft.com**20101222175001
1452 Ignore-this: ddabada2042f4529e83d1c1ecb052306
1453]
1454[Layout and white space only
1455simonpj@microsoft.com**20101222174950
1456 Ignore-this: bf4e4fd9d39714d0461ab799d6b8ed91
1457]
1458[Tidy up rebindable syntax for MDo
1459simonpj@microsoft.com**20101222132210
1460 Ignore-this: b40ae8709e5a39d75f2b2813169af215
1461 
1462 For a long time an 'mdo' expression has had a SyntaxTable
1463 attached to it.  However, we're busy deprecating SyntaxTables
1464 in favour of rebindable syntax attached to individual Stmts,
1465 and MDoExpr was totally inconsistent with DoExpr in this
1466 regard.
1467 
1468 This patch tidies it all up.  Now there's no SyntaxTable on
1469 MDoExpr, and 'modo' is generally handled much more like 'do'.
1470 
1471 There is resulting small change in behaviour: now MonadFix is
1472 required only if you actually *use* recursion in mdo. This
1473 seems consistent with the implicit dependency analysis that
1474 is done for mdo.
1475 
1476 Still to do:
1477   * Deal with #4148 (this patch is on the way)
1478   * Get rid of the last remaining SyntaxTable on HsCmdTop
1479]
1480[Make the occurrence analyser track preInlineUnconditionally
1481simonpj@microsoft.com**20101222131156
1482 Ignore-this: 82edb06bcca6106327c2cce9d78c4e61
1483 
1484 This fixes a somewhat obscure situation in which an
1485 over-optimistic use of "occurs once" led to an infinite
1486 sequence of simplifier iterations.  Se Note [Cascading inlines]
1487 for the details.
1488 
1489 This showed up when compiling rather large DPH programs, which
1490 run lots of iterations of the simplifier, which in turn made
1491 compilation take much longer than necessary.
1492]
1493[Make mkDFunUnfolding more robust
1494simonpj@microsoft.com**20101222130854
1495 Ignore-this: 10bb4168a7080c843f6613043354151b
1496 
1497 It now uses tcSplitDFunTy, which is designed for the purpose and
1498 allows arbitrary argument types to the dfun, rather than
1499 tcSplitSigmaTy.  This generality is used in DPH, which has
1500 internally-generated dfuns with impliciation-typed arguments.
1501 
1502 To do this I had to make tcSplitDFunTy return the number of
1503 arguments, so there are some minor knock-on effects in other
1504 modules.
1505]
1506[Count allocations more accurately
1507Simon Marlow <marlowsd@gmail.com>**20101221152956
1508 Ignore-this: 33a4ed3a77bf35f232aa5c9078e8e380
1509 The allocation stats (+RTS -s etc.) used to count the slop at the end
1510 of each nursery block (except the last) as allocated space, now we
1511 count the allocated words accurately.  This should make allocation
1512 figures more predictable, too.
1513 
1514 This has the side effect of reducing the apparent allocations by a
1515 small amount (~1%), so remember to take this into account when looking
1516 at nofib results.
1517]
1518[Add a simple arity analyser
1519simonpj@microsoft.com**20101221165800
1520 Ignore-this: d5f3a9f56404d61bb7f374c875b42c49
1521 
1522 I've wanted to do this for ages, but never gotten around to
1523 it.  The main notes are in Note [Arity analysis] in SimplUtils.
1524 
1525 The motivating example for arity analysis is this:
1526 
1527   f = \x. let g = f (x+1)
1528           in \y. ...g...
1529 
1530 What arity does f have?  Really it should have arity 2, but a naive
1531 look at the RHS won't see that.  You need a fixpoint analysis which
1532 says it has arity "infinity" the first time round.
1533 
1534 This makes things more robust to the way in which you write code.  For
1535 example, see Trac #4474 which is fixed by this change.
1536 
1537 Not a huge difference, but worth while:
1538 
1539         Program           Size    Allocs   Runtime   Elapsed
1540 --------------------------------------------------------------------------------
1541             Min          -0.4%     -2.2%    -10.0%    -10.0%
1542             Max          +2.7%     +0.3%     +7.1%     +6.9%
1543  Geometric Mean          -0.3%     -0.2%     -2.1%     -2.2%
1544 
1545 I don't really believe the runtime numbers, because the machine was
1546 busy, but the bottom line is that not much changes, and what does
1547 change reliably (allocation and size) is in the right direction.
1548]
1549[Miscellaneous tidying up and refactoring
1550simonpj@microsoft.com**20101221161931
1551 Ignore-this: 7706d3065e6fc1defafe1cb8975b9969
1552]
1553[Comments only
1554simonpj@microsoft.com**20101221161918
1555 Ignore-this: 3e269a62da5cbec72d3e4b8328689628
1556]
1557[Single-method classes are implemented with a newtype
1558simonpj@microsoft.com**20101221161911
1559 Ignore-this: 4ca00f0b367fbeb8146146bc53116eb7
1560 
1561 This patch changes things so that such classes rely on the coercion
1562 mechanism for inlining (since the constructor is really just a cast)
1563 rather than on the dfun mechanism, therby removing some needless
1564 runtime indirections.
1565]
1566[For single-method classes use newtypes
1567simonpj@microsoft.com**20101101080736
1568 Ignore-this: d3851f92eb2385501411da57066b775e
1569 
1570 This clears up an awkward hack for exprIsConApp_maybe, and
1571 works better too.  See Note [Single-method classes] in
1572 TcInstDcls.
1573]
1574[boundTaskExiting: don't set task->stopped unless this is the last call (#4850)
1575Simon Marlow <marlowsd@gmail.com>**20101221115807
1576 Ignore-this: 7e1b990aa08b3ea9cdaa9385d8e41e48
1577 The bug in this case was that we had a worker thread making a foreign
1578 call which invoked a callback (in this case it was performGC, I
1579 think).  When the callback ended, boundTaskExiting() was setting
1580 task->stopped, but the Task is now per-OS-thread, so it is shared by
1581 the worker that made the original foreign call.  When the foreign call
1582 returned, because task->stopped was set, the worker was not placed on
1583 the queue of spare workers.  Somehow the worker woke up again, and
1584 found the spare_workers queue empty, which lead to a crash.
1585 
1586 Two bugs here: task->stopped should not have been set by
1587 boundTaskExiting (this broke when I split the Task and InCall structs,
1588 in 6.12.2), and releaseCapabilityAndQueueWorker() should not be
1589 testing task->stopped anyway, because it should only ever be called
1590 when task->stopped is false (this is now an assertion).
1591]
1592[releaseCapabilityAndQueueWorker: task->stopped should be false (#4850)
1593Simon Marlow <marlowsd@gmail.com>**20101221114911
1594 Ignore-this: b9c430a4bc9d2e0c7f4140d6d6971eae
1595]
1596[Fix Windows build
1597Simon Marlow <marlowsd@gmail.com>**20101221102101
1598 Ignore-this: f4773e06d030a335c9ac721af193b8d2
1599]
1600[raiseExceptionHelper: update tso->stackobj->sp before calling threadStackOverflow (#4845)
1601Simon Marlow <marlowsd@gmail.com>**20101221101411
1602 Ignore-this: 48495131fcc8c548882a470c2509f9f5
1603]
1604[add 'make re2' for rebuilding stage2 (similarly re1 and re3)
1605Simon Marlow <marlowsd@gmail.com>**20101221100254
1606 Ignore-this: 5c0afe3810b66a5b6e53a3a0fe933945
1607]
1608[fix warning
1609Simon Marlow <marlowsd@gmail.com>**20101216160415
1610 Ignore-this: 54a0eedfa5b7fc15c31dffffb1b10aad
1611]
1612[Small improvement to CorePrep
1613simonpj@microsoft.com**20101220123715
1614 Ignore-this: d0490225ed1895a1a5b97d786ed44260
1615 
1616 This change avoids unnecessary bindings. Example
1617 
1618      foo (let fn = \x.blah in
1619           in fn)
1620 
1621 We were generating something stupid like
1622 
1623     let fn = \x.blah in
1624     let fn' = \eta. fn eta
1625     in foo fn
1626 
1627 Now we don't.  The change is quite small.
1628 
1629 Thanks to Ben for showing me an example of this happening.
1630]
1631[Fix warnings
1632Ian Lynagh <igloo@earth.li>**20101219202711
1633 Ignore-this: 898015b086f684de5371bf97a23b9e2e
1634]
1635[Small refactoring
1636Ian Lynagh <igloo@earth.li>**20101219194032]
1637[Drop GhcWithLlvmCodeGen configuration bits
1638Matthias Kilian <kili@outback.escape.de>**20101219180239
1639 Ignore-this: 815ed46be7650792f85807c232edfcc
1640 The LLVM code generator is always built unconditionally, so both the
1641 configuration variable in mk/config.mk.in as well as the string in
1642 compilerInfo can be removed.
1643]
1644[Pass --hoogle to haddock; fixes trac #4521
1645Ian Lynagh <igloo@earth.li>**20101219125243]
1646[vectoriser: don't always pass superclass dictionaries to PA dfuns
1647Roman Leshchinskiy <rl@cse.unsw.edu.au>**20101218234838
1648 Ignore-this: 77c71976db8fc63aeb83f4abdba994d8
1649 
1650 This is just a guess at how this should work.
1651]
1652[vectoriser: delete dead code
1653Roman Leshchinskiy <rl@cse.unsw.edu.au>**20101218125350
1654 Ignore-this: 437eea71ad15ad5dc7902e596597c577
1655]
1656[vectoriser: adapt to new superclass story part I (dictionary construction)
1657Roman Leshchinskiy <rl@cse.unsw.edu.au>**20101218114953
1658 Ignore-this: 29c9aa46a1622beaae1dcefc4c482a30
1659]
1660[Replace uses of the old try function with the new one
1661Ian Lynagh <igloo@earth.li>**20101218230827
1662 Ignore-this: 5dd6c1a4142405aa1aab3fc4ec07eea6
1663]
1664[Replace uses of the old catch function with the new one
1665Ian Lynagh <igloo@earth.li>**20101218213350]
1666[Create ~/.ghc/ if it doesn't already exist; fixes trac #4522
1667Ian Lynagh <igloo@earth.li>**20101218184925]
1668[Document GADTSyntax extension
1669Ian Lynagh <igloo@earth.li>**20101218150121]
1670[Implement GADTSyntax extension
1671Ian Lynagh <igloo@earth.li>**20101218144550]
1672[Whitespace-only in rts/Linker.c
1673Ian Lynagh <igloo@earth.li>**20101217234124]
1674[Add some casts to fix warnings; patch from Greg Wright
1675Ian Lynagh <igloo@earth.li>**20101217223811]
1676[Put an up-to-date Makefile in docs/Makefile
1677Ian Lynagh <igloo@earth.li>**20101217223707
1678 It doesn't do anything useful yet, but it works with the new build system
1679]
1680[do not compile part of shared lib RTS with -fno-PIC on Solaris
1681Karel Gardas <karel.gardas@centrum.cz>**20101217085133
1682 Ignore-this: 8c8dbb45cac0578a58a3557f1e03c66
1683]
1684[provide shared libraries support on i386-unknown-solaris2 platform
1685Karel Gardas <karel.gardas@centrum.cz>**20101217084617
1686 Ignore-this: b6079c6a39a71200a1ee863573e40828
1687]
1688[fix CPP detection of Solaris in NCG
1689Karel Gardas <karel.gardas@centrum.cz>**20101217084510
1690 Ignore-this: 9d1ce59d469294eab1f0cbc697e48d69
1691]
1692[Fix checkBinaries on OS X
1693Ian Lynagh <igloo@earth.li>**20101216201121]
1694[Remove redundant HpcMap and HpcSet wrappers around Data.{Map,Set}
1695Ian Lynagh <igloo@earth.li>**20101216190605]
1696[Use "-perm -u+x" rather than "-executable" to find executables
1697Ian Lynagh <igloo@earth.li>**20101216145235
1698 On Windows, -executable is matching the html docs.
1699]
1700[Remove a debugging print
1701Ian Lynagh <igloo@earth.li>**20101216011459]
1702[__GLASGOW_HASKELL__ >= 604 is now always true
1703Ian Lynagh <igloo@earth.li>**20101215214656]
1704[Remove more dead code now we require GHC >= 6.12
1705Ian Lynagh <igloo@earth.li>**20101215213715]
1706[refactor and tidy up the section on RTS options
1707Simon Marlow <marlowsd@gmail.com>**20101216123151
1708 Ignore-this: 9cdafd687351d8a3ff879b64347f85d3
1709]
1710[Related to #4826: Some minor tweaks to the wording of the User Guide, section 4.16
1711Orphi <MathematicalOrchid@hotmail.com>**20101209170440
1712 Ignore-this: c3d942d58594be7d4c2eb4dc3a22f19
1713]
1714[FIX #4826 partial: Add -rtsopts and -with-rtsopts to User Guide section 4.11.6
1715Orphi <MathematicalOrchid@hotmail.com>**20101209165152
1716 Ignore-this: 2fc1c0abbb783695773ab0f9c013bbaa
1717]
1718[FIX #4826 partially: Change -f to -? in User Guide section F4.16
1719Orphi <MathematicalOrchid@hotmail.com>**20101209144148
1720 Ignore-this: 73410b350e80c8943ae722dec8dea44b
1721]
1722[fix #3910
1723Simon Marlow <marlowsd@gmail.com>**20101216114452
1724 Ignore-this: 410e95e188344a523520e192a3fb58ea
1725]
1726[remove an optimisation that wasn't
1727Simon Marlow <marlowsd@gmail.com>**20101215152656
1728 Ignore-this: e8413f58e8292c6e7463087d885b3a7d
1729]
1730[fix a warning
1731Simon Marlow <marlowsd@gmail.com>**20101216105723
1732 Ignore-this: ed6024378021a698ce638267ed3e21ab
1733]
1734[use EXTERN_INLINE instead of STATIC_INLINE to avoid some gcc warnings
1735Simon Marlow <marlowsd@gmail.com>**20101216105709
1736 Ignore-this: d4e1586cf318883a8e611b55df7fbf10
1737]
1738[remove dead code
1739Simon Marlow <marlowsd@gmail.com>**20101216104944
1740 Ignore-this: 97a04a3e37c1b28abc222a28bab3d17d
1741]
1742[fix retainer profiling: add missing case for TSO
1743Simon Marlow <marlowsd@gmail.com>**20101216103900
1744 Ignore-this: 11bda81ac159f638d719c1f6177702fb
1745]
1746[add a missing STACK case
1747Simon Marlow <marlowsd@gmail.com>**20101216102100
1748 Ignore-this: ac1c036b5cbf4209b1d10b6ab1c83f27
1749]
1750[Remove code that is dead now that we need >= 6.12 to build
1751Ian Lynagh <igloo@earth.li>**20101215201006]
1752[fix for large stack allocations
1753Simon Marlow <marlowsd@gmail.com>**20101215152419
1754 Ignore-this: d9aca17d68bd99214c126989a2318e79
1755]
1756[Implement stack chunks and separate TSO/STACK objects
1757Simon Marlow <marlowsd@gmail.com>**20101215120843
1758 Ignore-this: 73fa9460314d4a4e54456af12bef7960
1759 
1760 This patch makes two changes to the way stacks are managed:
1761 
1762 1. The stack is now stored in a separate object from the TSO.
1763 
1764 This means that it is easier to replace the stack object for a thread
1765 when the stack overflows or underflows; we don't have to leave behind
1766 the old TSO as an indirection any more.  Consequently, we can remove
1767 ThreadRelocated and deRefTSO(), which were a pain.
1768 
1769 This is obviously the right thing, but the last time I tried to do it
1770 it made performance worse.  This time I seem to have cracked it.
1771 
1772 2. Stacks are now represented as a chain of chunks, rather than
1773    a single monolithic object.
1774 
1775 The big advantage here is that individual chunks are marked clean or
1776 dirty according to whether they contain pointers to the young
1777 generation, and the GC can avoid traversing clean stack chunks during
1778 a young-generation collection.  This means that programs with deep
1779 stacks will see a big saving in GC overhead when using the default GC
1780 settings.
1781 
1782 A secondary advantage is that there is much less copying involved as
1783 the stack grows.  Programs that quickly grow a deep stack will see big
1784 improvements.
1785 
1786 In some ways the implementation is simpler, as nothing special needs
1787 to be done to reclaim stack as the stack shrinks (the GC just recovers
1788 the dead stack chunks).  On the other hand, we have to manage stack
1789 underflow between chunks, so there's a new stack frame
1790 (UNDERFLOW_FRAME), and we now have separate TSO and STACK objects.
1791 The total amount of code is probably about the same as before.
1792 
1793 There are new RTS flags:
1794 
1795    -ki<size> Sets the initial thread stack size (default 1k)  Egs: -ki4k -ki2m
1796    -kc<size> Sets the stack chunk size (default 32k)
1797    -kb<size> Sets the stack chunk buffer size (default 1k)
1798 
1799 -ki was previously called just -k, and the old name is still accepted
1800 for backwards compatibility.  These new options are documented.
1801]
1802[comments on SRC_HC_OPTS (#4829)
1803Simon Marlow <marlowsd@gmail.com>**20101214101340
1804 Ignore-this: e2bdec00f07b68e82837e77a4faf6514
1805]
1806[fix another sanity error, and refactor/tidy up
1807Simon Marlow <marlowsd@gmail.com>**20101209163919
1808 Ignore-this: d5ce953ac78e90fc0e22cd9848d26e2e
1809]
1810[Fix a bug in functorLikeTraverse, which was giving wrong answer for tuples
1811simonpj@microsoft.com**20101215123725
1812 Ignore-this: 560220e92429b5b1a6197a62f94a4ff2
1813 
1814 This bug led to Trac #4816, which is hereby fixed
1815]
1816[Improve printing for -ddump-deriv
1817simonpj@microsoft.com**20101215121955
1818 Ignore-this: 3181c948c4c2471bd99b32c5ee487a1e
1819]
1820[Tighten up what it means to be an "enumeration data constructor"
1821simonpj@microsoft.com**20101215121927
1822 Ignore-this: 459b3f9f7994a13094ed87b0768b33a8
1823 
1824 See Note [Enumeration types] in TyCon, and comments in Trac #4528
1825]
1826[Allow enumerations to have phantom arguments.
1827simonpj@microsoft.com**20101215121817
1828 Ignore-this: 32ef8cb869e6e38c2e43b3ae87b1b9a8
1829 
1830 The bytecode generator was being too eager.
1831 Fixes Trac #4528, or rather, a near variant.
1832]
1833[Instance declaration overlap allowed if *either* has -XOverlappingInstances
1834simonpj@microsoft.com**20101214180500
1835 Ignore-this: f1b1492541a7e0464ebc6adb45510a2e
1836 
1837 This satisfies Trac #3877.  Documentation is changed too.
1838 I'm not sure if this should go in 7.0.2.
1839]
1840[Fix Trac #4841: behave right with TypeSynonymInstances and NoFlexibleInstances
1841simonpj@microsoft.com**20101214174755
1842 Ignore-this: dccd707fdca84904b7885170a296ecb6
1843 
1844 When we have TypeSynonymInstances without FlexibleInstances we should still
1845 insist on a H98-style instance head, after looking through the synonym.
1846 
1847 This patch also make FlexibleInstances imply TypeSynonymInstances.  Anything
1848 else is a bit awkward, and not very useful.
1849 
1850]
1851[Fix Trac #3731: more superclass subtlety (sigh)
1852simonpj@microsoft.com**20101214180344
1853 Ignore-this: f4168e59f3164303ba7be022ba19c37b
1854 
1855 I will add more comments, but I want to commit this tonight,
1856 so the overnight builds get it.
1857]
1858[Less verbose debug print
1859simonpj@microsoft.com**20101214180248
1860 Ignore-this: e405e8545763e913155abe43daf7e36c
1861]
1862[Wibble to InstEnv.instanceHead
1863simonpj@microsoft.com**20101214082939
1864 Ignore-this: 851db517f8638a0aeb7ad461298f7e9f
1865 
1866 Fixes an accidental glitch in T1835
1867]
1868[Remove dead code now that we require the bootstrapping compiler be >= 6.12
1869Ian Lynagh <igloo@earth.li>**20101214011011]
1870[GHC 6.12 is now needed to build the HEAD
1871Ian Lynagh <igloo@earth.li>**20101214010923]
1872[Add libstdc++-4.5.0-1-mingw32-dll-6.tar.lzma to mingw tarballs
1873Ian Lynagh <igloo@earth.li>**20101213223153]
1874[Fix recursive superclasses (again).  Fixes Trac #4809.
1875simonpj@microsoft.com**20101213171511
1876 Ignore-this: b91651397918fd8f0183812f9a070073
1877 
1878 This patch finally deals with the super-delicate question of
1879 superclases in possibly-recursive dictionaries.  The key idea
1880 is the DFun Superclass Invariant (see TcInstDcls):
1881 
1882      In the body of a DFun, every superclass argument to the
1883      returned dictionary is
1884        either   * one of the arguments of the DFun,
1885        or       * constant, bound at top level
1886 
1887 To establish the invariant, we add new "silent" superclass
1888 argument(s) to each dfun, so that the dfun does not do superclass
1889 selection internally.  There's a bit of hoo-ha to make sure that
1890 we don't print those silent arguments in error messages; a knock
1891 on effect was a change in interface-file format.
1892 
1893 A second change is that instead of the complex and fragile
1894 "self dictionary binding" in TcInstDcls and TcClassDcl,
1895 using the same mechanism for existential pattern bindings.
1896 See Note [Subtle interaction of recursion and overlap] in TcInstDcls
1897 and Note [Binding when looking up instances] in InstEnv.
1898 
1899 Main notes are here:
1900 
1901   * Note [Silent Superclass Arguments] in TcInstDcls,
1902     including the DFun Superclass Invariant
1903 
1904 Main code changes are:
1905 
1906   * The code for MkId.mkDictFunId and mkDictFunTy
1907 
1908   * DFunUnfoldings get a little more complicated;
1909     their arguments are a new type DFunArg (in CoreSyn)
1910 
1911   * No "self" argument in tcInstanceMethod
1912   * No special tcSimplifySuperClasss
1913   * No "dependents" argument to EvDFunApp
1914 
1915 IMPORTANT
1916    It turns out that it's quite tricky to generate the right
1917    DFunUnfolding for a specialised dfun, when you use SPECIALISE
1918    INSTANCE.  For now I've just commented it out (in DsBinds) but
1919    that'll lose some optimisation, and I need to get back to
1920    this.
1921]
1922[Doing the smart canonicalization only if we are not simplifying a Rule LHS.
1923dimitris@microsoft.com**20101210132221
1924 Also, same thing now applies for adding superclasses.
1925 
1926]
1927[Moved canonicalisation inside solveInteract
1928dimitris@microsoft.com**20101209141215
1929 
1930 Moreover canonicalisation now is "clever", i.e. it never canonicalizes a class
1931 constraint if it can already discharge it from some other inert or previously
1932 encountered constraints. See Note [Avoiding the superclass explosion]
1933 
1934]
1935[GHCi linker: Assume non-Haskell libraries are dynamic libs
1936Ian Lynagh <igloo@earth.li>**20101213124930
1937 Ignore-this: aa153a8f6e309c7b3dae7e46bb7a9583
1938 This works around a segfault we get when trying to load libiconv.a on
1939 some platforms.
1940]
1941[Add --version support to ghc-cabal
1942Ian Lynagh <igloo@earth.li>**20101212213600
1943 Ignore-this: ef696dcb1b96a23765f9f18e75a56f5
1944]
1945[Don't link the GHC RTS into our C-only programs
1946Ian Lynagh <igloo@earth.li>**20101210185402
1947 Ignore-this: 56f620f7eb16a03e7497a161bc48458e
1948]
1949[Build a copy of ghc-cabal with the in-tree compiler, for the bindist
1950Ian Lynagh <igloo@earth.li>**20101210181123]
1951[Add a test that all programs in the bindist were built with the right GHC
1952Ian Lynagh <igloo@earth.li>**20101210161218
1953 They should use the GHC from the build tree, not the bootstrapping compiler.
1954]
1955[Fix Trac #4534: renamer bug
1956simonpj@microsoft.com**20101210084530
1957 Ignore-this: 8163bfa3a56344cfe89ad17c62e9655d
1958   
1959 The renamer wasn't attaching the right used-variables to a
1960 TransformStmt constructor.
1961 
1962 The real modification is in RnExpr; the rest is just
1963 pretty-printing and white space.
1964]
1965[White space only
1966simonpj@microsoft.com**20101210084255
1967 Ignore-this: 3fcf8a4fc8c15052c379a135951d53ea
1968]
1969[Comments only
1970simonpj@microsoft.com**20101210084116
1971 Ignore-this: 55bb1de129b1c9513751885eaa84b884
1972]
1973[Make the case-to-let transformation a little less eager
1974simonpj@microsoft.com**20101208172251
1975 Ignore-this: 55eaa1b5753af31aeb32ec792cb6b662
1976 
1977 See Note [Case elimination: lifted case].
1978 Thanks to Roman for identifying this case.
1979]
1980[warning fix: don't redefine BLOCKS_PER_MBLOCK
1981Simon Marlow <marlowsd@gmail.com>**20101210094002
1982 Ignore-this: cadba57f1c38f5e2af1de37d0a79c7ee
1983]
1984[Only reset the event log if logging is turned on (addendum to #4512)
1985Simon Marlow <marlowsd@gmail.com>**20101210093951
1986 Ignore-this: c9f85f0de2b11a37337672fba59aecc6
1987]
1988[allocate enough room for the longer filename (addendum to #4512)
1989Simon Marlow <marlowsd@gmail.com>**20101210093906
1990 Ignore-this: 270dc0219d98f1e0f9e006102ade7087
1991]
1992[Fix Windows build: move rtsTimerSignal to the POSIX-only section
1993Simon Marlow <marlowsd@gmail.com>**20101210090045
1994 Ignore-this: aa1844b70b9f1a44447787c4bbe10d44
1995]
1996[Default the value of -dppr-cols when the static flags aren't initialised yet
1997Ben Lippmeier <benl@ouroborus.net>**20101210060154
1998 Ignore-this: 4cea29085ef904f379a8829714c9e180
1999 If GHC's command line options are bad then the options parser uses the
2000 pretty printer before the -dppr-cols flag has been read.
2001]
2002[Defensify naked read in LLVM mangler
2003Ben Lippmeier <benl@ouroborus.net>**20101210045922
2004 Ignore-this: 1373f597863851bd03e7a7254558ed04
2005]
2006[Formatting only
2007Ben Lippmeier <benl@ouroborus.net>**20101210042600
2008 Ignore-this: 20bbcd95c70b59094d0bb8a63e459103
2009]
2010[Always ppr case alts on separate lines
2011Ben Lippmeier <benl@ouroborus.net>**20101208070508
2012 Ignore-this: 7e2edd57a61427621aeb254aef84f0f7
2013]
2014[Add -dppr-colsN to set width of dumps
2015Ben Lippmeier <benl@ouroborus.net>**20101208070245
2016 Ignore-this: edc64fee6c373b895bb80b83b549ce1a
2017]
2018[Add -dppr-case-as-let to print "strict lets" as actual lets
2019Ben Lippmeier <benl@ouroborus.net>**20101208065548
2020 Ignore-this: eb1d122dbd73b5263cae3a9f8259a838
2021]
2022[Suppress more info with -dsuppress-idinfo
2023Ben Lippmeier <benl@ouroborus.net>**20101208063037
2024 Ignore-this: 5e8213d7b8d2905e245917aa3e83efc5
2025]
2026[Implement -dsuppress-type-signatures
2027Ben Lippmeier <benl@ouroborus.net>**20101208062814
2028 Ignore-this: 34dbefe5f8d7fe58ecb26d6a748d1c71
2029]
2030[Add more suppression flags
2031Ben Lippmeier <benl@ouroborus.net>**20101208020723
2032 Ignore-this: b010ba9789a2fde6b815f33494fcc23c
2033  -dsuppress-all
2034  -dsuppress-type-applications
2035  -dsuppress-idinfo
2036]
2037[fix ticket number (#4505)
2038Simon Marlow <marlowsd@gmail.com>**20101209120404
2039 Ignore-this: 5769c5ce2a8d69d62d977a9ae138ec23
2040]
2041[fix warnings
2042Simon Marlow <marlowsd@gmail.com>**20101209115844
2043 Ignore-this: ffff37feb2abbfc5bd12940c7007c208
2044]
2045[Catch too-large allocations and emit an error message (#4505)
2046Simon Marlow <marlowsd@gmail.com>**20101209114005
2047 Ignore-this: c9013ab63dd0bd62ea045060528550c6
2048 
2049 This is a temporary measure until we fix the bug properly (which is
2050 somewhat tricky, and we think might be easier in the new code
2051 generator).
2052 
2053 For now we get:
2054 
2055 ghc-stage2: sorry! (unimplemented feature or known bug)
2056   (GHC version 7.1 for i386-unknown-linux):
2057         Trying to allocate more than 1040384 bytes.
2058 
2059 See: http://hackage.haskell.org/trac/ghc/ticket/4550
2060 Suggestion: read data from a file instead of having large static data
2061 structures in the code.
2062]
2063[Export the value of the signal used by scheduler (#4504)
2064Dmitry Astapov <dastapov@gmail.com>**20101208183755
2065 Ignore-this: 427bf8c2469283fc7a6f759440d07d87
2066]
2067[Tweak the "sorry" message a bit
2068Simon Marlow <marlowsd@gmail.com>**20101208163212
2069 Ignore-this: aa1ce5bc3c27111548204b740572efbe
2070 
2071 -              "sorry! (this is work in progress)\n"
2072 +              "sorry! (unimplemented feature or known bug)\n"
2073]
2074[:unset settings support
2075Boris Lykah <lykahb@gmail.com>**20101123190132
2076 Ignore-this: 5e97c99238f5d2394592858c34c004d
2077 Added support for settings [args, prog, prompt, editor and stop].
2078 Now :unset supports the same set of options as :set.
2079]
2080[Fix Windows memory freeing: add a check for fb == NULL; fixes trac #4506
2081Ian Lynagh <igloo@earth.li>**20101208152349
2082 Also added a few comments, and a load of code got indented 1 level deeper.
2083]
2084[Fixes for #4512: EventLog.c - provides ability to terminate event logging, Schedule.c - uses them in forkProcess.
2085Dmitry Astapov <dastapov@gmail.com>**20101203133950
2086 Ignore-this: 2da7f215d6c22708a18291a416ba8881
2087]
2088[Make CPPFLAGS variables, as well as CFLAGS and LDFLAGS
2089Ian Lynagh <igloo@earth.li>**20101207010033
2090 Ignore-this: 2fc1ca1422aae1988d0fe1d29a8485d9
2091 This fixes the "does unsetenv return void" test in the unix package on
2092 OS X, if I tell it to make 10.4-compatible binaries. The test uses
2093 CPPFLAGS but not CFLAGS, so it thought it returned int (as it was
2094 in 10.5-mode), but the C compiler (using CFLAGS, so in 10.4 mode)
2095 thought it returned void.
2096 
2097 I also added CONF_LD_OPTS_STAGE$3 to the list of things in LDFLAGS,
2098 which looks like an accidental ommission.
2099]
2100[Add a configure message
2101Ian Lynagh <igloo@earth.li>**20101206215201]
2102[Link even programs containing no Haskell modules with GHC
2103Ian Lynagh <igloo@earth.li>**20101206203329
2104 I don't remember why we made it use gcc instead, but going back to
2105 using ghc doesn't seem to break anything, and should fix the build
2106 on OS X 10.6.
2107]
2108[Correct the stage that the includes/ tools are built in
2109Ian Lynagh <igloo@earth.li>**20101206203125]
2110[Tweak the cleaning of inplace/; fixes trac #4320
2111Ian Lynagh <igloo@earth.li>**20101205212048]
2112[Close .ghci files after reading them; fixes trac #4487
2113Ian Lynagh <igloo@earth.li>**20101205205301]
2114[Fix the behaviour of :history for ticks surrounding top level functions
2115pepeiborra@gmail.com**20101203202346
2116 Ignore-this: 8059d4859c52c0c9a235b937cb8cde1d
2117]
2118[Don't warn of duplicate exports in case of module exports.
2119Michal Terepeta <michal.terepeta@gmail.com>**20101127212116
2120 Ignore-this: ea225d517826f971c400bbb68d1405b8
2121 
2122 But only when the module exports refer to different modules.
2123 See ticket #4478.
2124]
2125[Fix whitespace/layout in RnNames.
2126Michal Terepeta <michal.terepeta@gmail.com>**20101030171303
2127 Ignore-this: 707a7955fc4fc51683cc5a1dfe57f93
2128]
2129[Tell gcc to support back to OS X 10.5
2130Ian Lynagh <igloo@earth.li>**20101203201558
2131 Ignore-this: f02d70e5b9cce50137981c6cb2b62a18
2132]
2133[Make RelaxedLayout off by default
2134Ian Lynagh <igloo@earth.li>**20101202140808
2135 I suspect this is a vary rarely used extension to the official layout
2136 rule.
2137]
2138[Fix up TcInstDcls
2139simonpj@microsoft.com**20101203180758
2140 Ignore-this: 9311aeb4ee67c799704afec90b5982d0
2141 
2142 I really don't know how this module got left out of my last
2143 patch, namely
2144   Thu Dec  2 12:35:47 GMT 2010  simonpj@microsoft.com
2145   * Re-jig simplifySuperClass (again)
2146 
2147 I suggest you don't pull either the patch above, or this
2148 one, unless you really have to.  I'm not fully confident
2149 that it works properly yet.  Ran out of time. Sigh.
2150]
2151[throwTo: report the why_blocked value in the barf()
2152Simon Marlow <marlowsd@gmail.com>**20101203094840
2153 Ignore-this: 3b167c581be1c51dfe3586cc6359e1d0
2154]
2155[handle ThreadMigrating in throwTo() (#4811)
2156Simon Marlow <marlowsd@gmail.com>**20101203094818
2157 Ignore-this: 8ef8cb7fd3b50a27f83c29968131d461
2158 If a throwTo targets a thread that has just been created with
2159 forkOnIO, then it is possible the exception strikes while the thread
2160 is still in the process of migrating.  throwTo() didn't handle this
2161 case, but it's fairly straightforward.
2162]
2163[removeThreadFromQueue: stub out the link field before returning (#4813)
2164Simon Marlow <marlowsd@gmail.com>**20101202160838
2165 Ignore-this: 653ae17bc1120d7f4130da94665002a1
2166]
2167[small tidyup
2168Simon Marlow <marlowsd@gmail.com>**20101126140620
2169 Ignore-this: 70b1d5ed4c81a7b29dd5980a2d84aae1
2170]
2171[Fix a recomp bug: make classes/datatypes depend directly on DFuns (#4469)
2172Simon Marlow <marlowsd@gmail.com>**20101202122349
2173 Ignore-this: 61c765583bb1d97caa88cf9b4f45b87c
2174 And remove the old mechanism of recording dfun uses separately,
2175 because it didn't work.
2176 
2177 This wiki page describes recompilation avoidance and fingerprinting.
2178 I'll update it to describe the new method and what went wrong with the
2179 old method:
2180 
2181 http://hackage.haskell.org/trac/ghc/wiki/Commentary/Compiler/RecompilationAvoidance
2182]
2183[make a panic message more informative and suggest -dcore-lint (see #4534)
2184Simon Marlow <marlowsd@gmail.com>**20101201151706
2185 Ignore-this: 2a10761925d6f9f52675948baa30f7a
2186]
2187[Re-jig simplifySuperClass (again)
2188simonpj@microsoft.com**20101202123547
2189 Ignore-this: fe4062b8988258f6748ebd8fbd6515b5
2190 
2191 This fixes the current loop in T3731, and will fix other
2192 reported loops.  The loops show up when we are generating
2193 evidence for superclasses in an instance declaration.
2194 
2195 The trick is to make the "self" dictionary simplifySuperClass
2196 depend *explicitly* on the superclass we are currently trying
2197 to build.  See Note [Dependencies in self dictionaries] in TcSimplify.
2198 
2199 That in turn means that EvDFunApp needs a dependency-list, used
2200 when chasing dependencies in isGoodRecEv.
2201]
2202[A little refactoring (remove redundant argument passed to isGoodRecEv)
2203simonpj@microsoft.com**20101202123110
2204 Ignore-this: e517c5c12109a230f08dafb4d1e386df
2205]
2206[Make rebindable if-then-else a little more permissive
2207simonpj@microsoft.com**20101202122540
2208 Ignore-this: ddb552cfe307607b42d1e4baf4e3bf21
2209 
2210 See Note [Rebindable syntax for if].  Fixes Trac #4798.
2211 Thanks to Nils Schweinsberg <mail@n-sch.de>
2212]
2213[Improve error message (Trac #4799)
2214simonpj@microsoft.com**20101202102706
2215 Ignore-this: d9896e4d182936de1f256c820b96a8cf
2216]
2217[Fix a nasty bug in RULE matching: Trac #4814
2218simonpj@microsoft.com**20101202102618
2219 Ignore-this: ba058ad46a02bd2faf3a14de93fd19c6
2220 
2221 See Note [Matching lets], which explains it all in detail.
2222 It took me a day to think of a nice way to fix the bug,
2223 but I think the result is quite respectable. Subtle, though.
2224]
2225[Rename -XPArr to -XParallelArrays
2226Ben Lippmeier <benl@ouroborus.net>**20101130075415
2227 Ignore-this: 21b37680a7f25800d1200b59ad0b6b39
2228]
2229[FIX #1845 (unconditional relative branch out of range)
2230pho@cielonegro.org**20101130143014
2231 Ignore-this: df234bd8ad937104c455656fe3c33732
2232 
2233 Don't use mmap on powerpc-apple-darwin as mmap doesn't support
2234 reallocating but we need to allocate jump islands just after each
2235 object images. Otherwise relative branches to jump islands can fail
2236 due to 24-bits displacement overflow.
2237]
2238[rts/Linker.c (loadArchive):
2239pho@cielonegro.org**20101130142700
2240 Ignore-this: bc84f9369ce5c2d289440701b7a3a2ab
2241 
2242 This routine should be aware of Mach-O misalignment of malloc'ed memory regions.
2243]
2244[rts/Linker.c (machoGetMisalignment):
2245pho@cielonegro.org**20101130123355
2246 Ignore-this: 75425600049efd587e9873578e26392f
2247 
2248 Use fseek(3) instead of rewind(3) to move the file position indicator back to the initial position. Otherwise we can't use this function in loadArchive().
2249]
2250[rts/Linker.c (ocFlushInstructionCache):
2251pho@cielonegro.org**20101130121425
2252 Ignore-this: 1e2c207e4b1d17387617ec5d645204b7
2253 
2254 I found this function causes a segfault when ocAllocateSymbolExtras() has allocated a separate memory region for jump islands.
2255]
2256[Remove NewQualifiedOperators
2257Ian Lynagh <igloo@earth.li>**20101201181117
2258 The extension was rejected by Haskell', and deprecated in 7.0.
2259]
2260[fix ref to utils/ext-core, which moved to Hackage (extcore package)
2261Simon Marlow <marlowsd@gmail.com>**20101201092147
2262 Ignore-this: 272a7daaa335ef60bcc645db70b4d68b
2263]
2264[fix floating-point/FFI section: fenv is C99, not POSIX
2265Simon Marlow <marlowsd@gmail.com>**20101201092119
2266 Ignore-this: ce8b3edd428e4f77691dd739b5b4ae73
2267]
2268[Fixed some 'unused vars' warnings
2269keller@cse.unsw.edu.au**20101130013425
2270 Ignore-this: 35790d443faa23b87e4ba442e62376a3
2271]
2272[vectScalarLam handles int, float, and double now
2273keller@cse.unsw.edu.au**20101129231043
2274 Ignore-this: 6d67bdc8dd8577184040e791e6f3d0
2275]
2276[Handling of lets, letrec and case when checking if a lambda expr needs to be vectorised
2277keller@cse.unsw.edu.au**20101115051225
2278 Ignore-this: 1db6ed63d7b3f6d093e019322b407ff7
2279]
2280[Document the behaviour of fenv.h functions with GHC (#4391)
2281Simon Marlow <marlowsd@gmail.com>**20101126125336
2282 Ignore-this: bc4eab49428d567505a28add6fed90f1
2283]
2284[Remove the no-ghci-lib warning in ghc-pkg
2285Ian Lynagh <igloo@earth.li>**20101127235805
2286 GHCi libs are no longer necessary, as we can use the .a or .so versions
2287 instead.
2288]
2289[Add GNU-variant support to the .a parser, and other improvements/tidyups
2290Ian Lynagh <igloo@earth.li>**20101127223945]
2291[Re-indent only
2292Ian Lynagh <igloo@earth.li>**20101127191646]
2293[Improve linker debugging for archive files
2294Ian Lynagh <igloo@earth.li>**20101127190907]
2295[Always enable the archive-loading code
2296Ian Lynagh <igloo@earth.li>**20101127173000
2297 If the GHCi .o lib doesn't exist, load the .a instead
2298]
2299[Inherit the ForceSpecConstr flag in non-recursive nested bindings
2300Roman Leshchinskiy <rl@cse.unsw.edu.au>**20101127125025
2301 Ignore-this: 401391eae25cefcb4afaba2e357decc1
2302 
2303 This makes sure that join points are fully specialised in loops which are
2304 marked as ForceSpecConstr.
2305]
2306[Document -ddump-rule-firings and -ddump-rule-rewrites
2307Roman Leshchinskiy <rl@cse.unsw.edu.au>**20101127123528
2308 Ignore-this: beade2efe0cd767c0ce9d4f45a3380ba
2309]
2310[New flag -dddump-rule-rewrites
2311Roman Leshchinskiy <rl@cse.unsw.edu.au>**20101127122022
2312 Ignore-this: c0ef5b8a199fbd1ef020258d2cde85a3
2313 
2314 Now, -ddump-rule-firings only shows the names of the rules that fired (it would
2315 show "before" and "after" with -dverbose-core2core previously) and
2316 -ddump-rule-rewrites always shows the "before" and "after" bits, even without
2317 -dverbose-core2core.
2318]
2319[Acutally, wild-card variables *can* have occurrences
2320simonpj@microsoft.com**20101126162409
2321 Ignore-this: 544bffed75eeccef03a1097f98524eea
2322 
2323 This patch removes the Lint test, and comments why
2324]
2325[Tidy up the handling of wild-card binders, and make Lint check it
2326simonpj@microsoft.com**20101126133210
2327 Ignore-this: 9e0be9f7867d53046ee5b0e478a0f433
2328 
2329 See Note [WildCard binders] in SimplEnv.  Spotted by Roman.
2330]
2331[Substitution should just substitute, not optimise
2332simonpj@microsoft.com**20101125172356
2333 Ignore-this: 657628d9b6796ceb5f915c43d56e4a06
2334 
2335 This was causing Trac #4524, by optimising
2336      (e |> co)  to   e
2337 on the LHS of a rule.  Result, the template variable
2338 'co' wasn't bound any more.
2339 
2340 Now that substition doesn't optimise, it seems sensible to call
2341 simpleOptExpr rather than substExpr when substituting in the
2342 RHS of rules.  Not a big deal either way.
2343]
2344[Make SpecConstr "look through" identity coercions
2345simonpj@microsoft.com**20101125172138
2346 Ignore-this: c1cc585ed890a7702c33987e971e0af6
2347]
2348[Comment only
2349simonpj@microsoft.com**20101125172011
2350 Ignore-this: 3c7be8791badd00dcca9610ebb8981d1
2351]
2352[White space only
2353simonpj@microsoft.com**20101101080748
2354 Ignore-this: f7133fc6b22ae263c6672543a8534a6f
2355]
2356[Keep a maximum of 6 spare worker threads per Capability (#4262)
2357Simon Marlow <marlowsd@gmail.com>**20101125135729
2358 Ignore-this: a020786569656bf2f3a1717b65d463bd
2359]
2360[Unicide OtherNumber category should be allowed in identifiers (#4373)
2361Simon Marlow <marlowsd@gmail.com>**20101115095444
2362 Ignore-this: e331b6ddb17550163ee91bd283348800
2363]
2364[vectoriser: fix warning
2365Ben Lippmeier <benl@ouroborus.net>**20101126044036
2366 Ignore-this: e1a66bb405bf2f3f56b42c3b13fd4bf3
2367]
2368[vectoriser: fix warning
2369Ben Lippmeier <benl@ouroborus.net>**20101126042950
2370 Ignore-this: df8dd25bcfb3946c2974b13953a2f2c7
2371]
2372[vectoriser: take class directly from the instance tycon
2373Ben Lippmeier <benl@ouroborus.net>**20101126042900
2374 Ignore-this: 626a416717a5a059f39e53f4ec95fc66
2375]
2376[vectoriser: comments only
2377Ben Lippmeier <benl@ouroborus.net>**20101125073201
2378 Ignore-this: 8846ea8895307083bd1ebbc5d7fb1c5
2379]
2380[vectoriser: follow changes in mkClass
2381Ben Lippmeier <benl@ouroborus.net>**20101125062349
2382 Ignore-this: d5018cc022686d4272e126ca9a12283a
2383]
2384[vectoriser: tracing wibbles
2385Ben Lippmeier <benl@ouroborus.net>**20101125062332
2386 Ignore-this: c2024d8f03bc03bee2851f4f1c139fd5
2387]
2388[mkDFunUnfolding wants the type of the dfun to be a PredTy
2389benl@ouroborus.net**20100914062939
2390 Ignore-this: 7aa6e6b140746184cf00355b50c83b66
2391]
2392[vectoriser: fix conflicts
2393Ben Lippmeier <benl@ouroborus.net>**20101125060904
2394 Ignore-this: cc3decab1affada8629ca3818b76b3bf
2395]
2396[Comments and formatting only
2397benl@ouroborus.net**20100914062903
2398 Ignore-this: b0fc25f0952cafd56cc25353936327d4
2399]
2400[Comments and formatting to type environment vectoriser
2401benl@ouroborus.net**20100909080405
2402 Ignore-this: ab8549d53f845c9d82ed9a525fda3906
2403]
2404[Don't mix implicit and explicit layout
2405Ian Lynagh <igloo@earth.li>**20101124231514]
2406[Whitespace only
2407Ian Lynagh <igloo@earth.li>**20101124230655]
2408[Separate NondecreasingIndentation out into its own extension
2409Ian Lynagh <igloo@earth.li>**20101124220507]
2410[Add another GHC layout rule relaxation to RelaxedLayout
2411Ian Lynagh <igloo@earth.li>**20101124205957]
2412[Remove an unused build system variable: GhcDir
2413Ian Lynagh <igloo@earth.li>**20101124140455]
2414[Remove unused build system variable: GhcHasEditline
2415Ian Lynagh <igloo@earth.li>**20101124140415]
2416[Remove unused variables from the build system: HBC, NHC, MKDEPENDHS
2417Ian Lynagh <igloo@earth.li>**20101124140052]
2418[Remove references to Haskell 98
2419Ian Lynagh <igloo@earth.li>**20101123233536
2420 They are no longer right, as we have Haskell' generating new Haskell
2421 standards.
2422]
2423[Tweak a configure test
2424Ian Lynagh <igloo@earth.li>**20101123170621]
2425[Add a configure test for the visibility hidden attribute
2426Ian Lynagh <igloo@earth.li>**20101123170541]
2427[sanity: fix places where we weren't filling fresh memory with 0xaa
2428Simon Marlow <marlowsd@gmail.com>**20101029092843
2429 Ignore-this: 2cb18f7f5afcaf33371aeffce67e218f
2430]
2431[Just some alpha renaming
2432Ian Lynagh <igloo@earth.li>**20101121144455
2433 Ignore-this: d5e807c5470840efc199e29f7d50804c
2434]
2435[Fix bug #3165 (:history throws irrefutable pattern failed)
2436pepeiborra@gmail.com**20101115223623
2437 Ignore-this: 73edf56e502b4d0385bc044133b27946
2438 
2439 I ran across this bug and took the time to fix it, closing
2440 a long time due TODO in InteractiveEval.hs
2441 
2442 Instead of looking around to find the enclosing declaration
2443 of a tick, this patch makes use of the information already collected during the
2444 coverage desugaring phase
2445]
2446[For bindists, build ghc-pwd with stage 1
2447Ian Lynagh <igloo@earth.li>**20101121183520
2448 Ignore-this: a3b5c8b78c81ec1b6d5fbf23da346ff5
2449 rather then the bootstrapping compiler. This fixes problems where the
2450 bootstrapping compiler dynamically links against libraries not on the
2451 target machine.
2452]
2453[Makefile tweak
2454Ian Lynagh <igloo@earth.li>**20101121183342
2455 Ignore-this: cd55a2819c1a5fd36da1bc7a75d2ded1
2456]
2457[Fix a makefile include ordering sanity check
2458Ian Lynagh <igloo@earth.li>**20101121174916
2459 Ignore-this: d0bdd41c4b618944d04ecb4f54fdd0f1
2460]
2461[Add an extension for GHC's layout-rule relaxations
2462Ian Lynagh <igloo@earth.li>**20101120215340
2463 Still TODO: Add the other relaxation (#1060) and update the alternative
2464 layout rule to use the extension.
2465]
2466[Tweak the bindist configure.ac.in
2467Ian Lynagh <igloo@earth.li>**20101120173735]
2468[configure.ac tweaks
2469Ian Lynagh <igloo@earth.li>**20101120170245]
2470[When testing the bindist, tell it where gcc is
2471Ian Lynagh <igloo@earth.li>**20101120155920
2472 The location isn't baked into the bindist, as it may differ from
2473 machine to machine.
2474]
2475[Comments only
2476simonpj@microsoft.com**20101119100153
2477 Ignore-this: 7abd5d965ea805770449d6f8dadbb921
2478]
2479[ForceSpecConstr now forces specialisation even for arguments which aren't scrutinised
2480Roman Leshchinskiy <rl@cse.unsw.edu.au>**20101118212839
2481 Ignore-this: db45721d29a694e53746f8b76513efa4
2482]
2483[Move the superclass generation to the canonicaliser
2484simonpj@microsoft.com**20101118120533
2485 Ignore-this: 5e0e525402a240b709f2b8104c1682b2
2486 
2487 Doing superclass generation in the canonicaliser (rather than
2488 TcInteract) uses less code, and is generally more efficient.
2489 
2490 See Note [Adding superclasses] in TcCanonical.
2491 
2492 Fixes Trac #4497.
2493]
2494[Fix the generation of in-scope variables for IfaceLint check
2495simonpj@microsoft.com**20101118090057
2496 Ignore-this: bbcdba61ddf89d07fe69ca99c2017e3f
2497]
2498[Comments only
2499simonpj@microsoft.com**20101118090034
2500 Ignore-this: fa2936d35a0f7be4e4535ea9e2b7bf7b
2501]
2502[Omit bogus test for -XDeriveFunctor
2503simonpj@microsoft.com**20101118090028
2504 Ignore-this: a534243011809ebbb788b910961601c5
2505 
2506 It was duplicated in the case of 'deriving( Functor )'
2507 and wrong for 'deriving( Foldable )'
2508]
2509[Improve error message on advice from a user
2510simonpj@microsoft.com**20101118085306
2511 Ignore-this: bd4f3858ff24e602e985288f27d536f3
2512 
2513 See Trac #4499
2514]
2515[TAG 2010-11-18
2516Ian Lynagh <igloo@earth.li>**20101118011554
2517 Ignore-this: ccadbe7fadd1148d2ee3caa8c8821ec5
2518]
2519Patch bundle hash:
2520f4607aa1c43a9d107f745f0c71c260af1c33c0fe