Ticket #8974: T8947_NCG_cmm

File T8947_NCG_cmm, 26.6 KB (added by awson, 5 years ago)
Line 
1
2==================== Cmm produced by new codegen ====================
3[section "data" { __stginit_main:T8947:
4 }]
5
6
7
8==================== Post CPS Cmm ====================
9[section "data" { __stginit_main:T8947:
10 }]
11
12
13
14==================== Output Cmm ====================
15[section "data" { __stginit_main:T8947:
16 }]
17
18
19
20==================== Cmm produced by new codegen ====================
21[section "data" {
22     T8947.t2_closure:
23         const T8947.t2_info;
24         const 0;
25         const 0;
26         const 0;
27 },
28 section "readonly" {
29     c1em_str:
30         I8[] [68,111,110,101]
31 },
32 T8947.t2_entry() //  [R1]
33         { info_tbl: [(c1en,
34                       label: T8947.t2_info
35                       rep:HeapRep static { Thunk })]
36           stack_info: arg_space: 8 updfr_space: Just 8
37         }
38     {offset
39       c1en:
40           _r1c5::P64 = R1;
41           goto c1eh;
42       c1eh:
43           if ((old + 0) - <highSp> < SpLim) goto c1eo; else goto c1ep;
44       c1eo:
45           R1 = _r1c5::P64;
46           call (stg_gc_enter_1)(R1) args: 8, res: 0, upd: 8;
47       c1ep:
48           (_c1ej::I64) = call "ccall" arg hints:  [PtrHint,
49                                                    PtrHint]  result hints:  [PtrHint] newCAF(BaseReg, _r1c5::P64);
50           if (_c1ej::I64 == 0) goto c1el; else goto c1ek;
51       c1el:
52           call (I64[_r1c5::P64])() args: 8, res: 0, upd: 8;
53       c1ek:
54           I64[(old + 24)] = stg_bh_upd_frame_info;
55           I64[(old + 16)] = _c1ej::I64;
56           R2 = c1em_str;
57           call GHC.CString.unpackCString#_info(R2) args: 24, res: 0, upd: 24;
58     }
59 }]
60
61
62
63==================== Post control-flow optimisations ====================
64{offset
65  c1en:
66      _r1c5::P64 = R1;
67      if ((old + 0) - <highSp> < SpLim) goto c1eo; else goto c1ep;
68  c1eo:
69      R1 = _r1c5::P64;
70      call (stg_gc_enter_1)(R1) args: 8, res: 0, upd: 8;
71  c1ep:
72      (_c1ej::I64) = call "ccall" arg hints:  [PtrHint,
73                                               PtrHint]  result hints:  [PtrHint] newCAF(BaseReg, _r1c5::P64);
74      if (_c1ej::I64 == 0) goto c1el; else goto c1ek;
75  c1el:
76      call (I64[_r1c5::P64])() args: 8, res: 0, upd: 8;
77  c1ek:
78      I64[(old + 24)] = stg_bh_upd_frame_info;
79      I64[(old + 16)] = _c1ej::I64;
80      R2 = c1em_str;
81      call GHC.CString.unpackCString#_info(R2) args: 24, res: 0, upd: 24;
82}
83
84
85
86==================== Post common block elimination ====================
87{offset
88  c1en:
89      _r1c5::P64 = R1;
90      if ((old + 0) - <highSp> < SpLim) goto c1eo; else goto c1ep;
91  c1eo:
92      R1 = _r1c5::P64;
93      call (stg_gc_enter_1)(R1) args: 8, res: 0, upd: 8;
94  c1ep:
95      (_c1ej::I64) = call "ccall" arg hints:  [PtrHint,
96                                               PtrHint]  result hints:  [PtrHint] newCAF(BaseReg, _r1c5::P64);
97      if (_c1ej::I64 == 0) goto c1el; else goto c1ek;
98  c1el:
99      call (I64[_r1c5::P64])() args: 8, res: 0, upd: 8;
100  c1ek:
101      I64[(old + 24)] = stg_bh_upd_frame_info;
102      I64[(old + 16)] = _c1ej::I64;
103      R2 = c1em_str;
104      call GHC.CString.unpackCString#_info(R2) args: 24, res: 0, upd: 24;
105}
106
107
108
109==================== Layout Stack ====================
110{offset
111  c1en:
112      _r1c5::P64 = R1;
113      if ((Sp + 8) - 24 < SpLim) goto c1eo; else goto c1ep;
114  c1eo:
115      R1 = _r1c5::P64;
116      call (stg_gc_enter_1)(R1) args: 8, res: 0, upd: 8;
117  c1ep:
118      (_c1ej::I64) = call "ccall" arg hints:  [PtrHint,
119                                               PtrHint]  result hints:  [PtrHint] newCAF(BaseReg, _r1c5::P64);
120      if (_c1ej::I64 == 0) goto c1el; else goto c1ek;
121  c1el:
122      call (I64[_r1c5::P64])() args: 8, res: 0, upd: 8;
123  c1ek:
124      I64[Sp - 16] = stg_bh_upd_frame_info;
125      I64[Sp - 8] = _c1ej::I64;
126      R2 = c1em_str;
127      Sp = Sp - 16;
128      call GHC.CString.unpackCString#_info(R2) args: 24, res: 0, upd: 24;
129}
130
131
132
133==================== Sink assignments ====================
134{offset
135  c1en:
136      if ((Sp + -16) < SpLim) goto c1eo; else goto c1ep;
137  c1eo:
138      R1 = R1;
139      call (stg_gc_enter_1)(R1) args: 8, res: 0, upd: 8;
140  c1ep:
141      (_c1ej::I64) = call "ccall" arg hints:  [PtrHint,
142                                               PtrHint]  result hints:  [PtrHint] newCAF(BaseReg, R1);
143      if (_c1ej::I64 == 0) goto c1el; else goto c1ek;
144  c1el:
145      call (I64[R1])() args: 8, res: 0, upd: 8;
146  c1ek:
147      I64[Sp - 16] = stg_bh_upd_frame_info;
148      I64[Sp - 8] = _c1ej::I64;
149      R2 = c1em_str;
150      Sp = Sp - 16;
151      call GHC.CString.unpackCString#_info(R2) args: 24, res: 0, upd: 24;
152}
153
154
155
156==================== CAFEnv ====================
157[(c1ek, {}), (c1el, {}), (c1en, {}), (c1eo, {}), (c1ep, {})]
158
159
160
161==================== after setInfoTableStackMap ====================
162T8947.t2_entry() //  [R1]
163        { info_tbl: [(c1en,
164                      label: T8947.t2_info
165                      rep:HeapRep static { Thunk })]
166          stack_info: arg_space: 8 updfr_space: Just 8
167        }
168    {offset
169      c1en:
170          if ((Sp + -16) < SpLim) goto c1eo; else goto c1ep;
171      c1eo:
172          R1 = R1;
173          call (stg_gc_enter_1)(R1) args: 8, res: 0, upd: 8;
174      c1ep:
175          (_c1ej::I64) = call "ccall" arg hints:  [PtrHint,
176                                                   PtrHint]  result hints:  [PtrHint] newCAF(BaseReg, R1);
177          if (_c1ej::I64 == 0) goto c1el; else goto c1ek;
178      c1el:
179          call (I64[R1])() args: 8, res: 0, upd: 8;
180      c1ek:
181          I64[Sp - 16] = stg_bh_upd_frame_info;
182          I64[Sp - 8] = _c1ej::I64;
183          R2 = c1em_str;
184          Sp = Sp - 16;
185          call GHC.CString.unpackCString#_info(R2) args: 24, res: 0, upd: 24;
186    }
187}
188
189
190
191==================== Post control-flow optimisations ====================
192T8947.t2_entry() //  [R1]
193        { info_tbl: [(c1en,
194                      label: T8947.t2_info
195                      rep:HeapRep static { Thunk })]
196          stack_info: arg_space: 8 updfr_space: Just 8
197        }
198    {offset
199      c1en:
200          if ((Sp + -16) < SpLim) goto c1eo; else goto c1ep;
201      c1eo:
202          R1 = R1;
203          call (stg_gc_enter_1)(R1) args: 8, res: 0, upd: 8;
204      c1ep:
205          (_c1ej::I64) = call "ccall" arg hints:  [PtrHint,
206                                                   PtrHint]  result hints:  [PtrHint] newCAF(BaseReg, R1);
207          if (_c1ej::I64 == 0) goto c1el; else goto c1ek;
208      c1el:
209          call (I64[R1])() args: 8, res: 0, upd: 8;
210      c1ek:
211          I64[Sp - 16] = stg_bh_upd_frame_info;
212          I64[Sp - 8] = _c1ej::I64;
213          R2 = c1em_str;
214          Sp = Sp - 16;
215          call GHC.CString.unpackCString#_info(R2) args: 24, res: 0, upd: 24;
216    }
217}
218
219
220
221==================== Post CPS Cmm ====================
222[section "data" {
223     T8947.t2_closure:
224         const T8947.t2_info;
225         const 0;
226         const 0;
227         const 0;
228 },
229 section "readonly" {
230     c1em_str:
231         I8[] [68,111,110,101]
232 },
233 T8947.t2_entry() //  [R1]
234         { info_tbl: [(c1en,
235                       label: T8947.t2_info
236                       rep:HeapRep static { Thunk })]
237           stack_info: arg_space: 8 updfr_space: Just 8
238         }
239     {offset
240       c1en:
241           if ((Sp + -16) < SpLim) goto c1eo; else goto c1ep;
242       c1eo:
243           R1 = R1;
244           call (stg_gc_enter_1)(R1) args: 8, res: 0, upd: 8;
245       c1ep:
246           (_c1ej::I64) = call "ccall" arg hints:  [PtrHint,
247                                                    PtrHint]  result hints:  [PtrHint] newCAF(BaseReg, R1);
248           if (_c1ej::I64 == 0) goto c1el; else goto c1ek;
249       c1el:
250           call (I64[R1])() args: 8, res: 0, upd: 8;
251       c1ek:
252           I64[Sp - 16] = stg_bh_upd_frame_info;
253           I64[Sp - 8] = _c1ej::I64;
254           R2 = c1em_str;
255           Sp = Sp - 16;
256           call GHC.CString.unpackCString#_info(R2) args: 24, res: 0, upd: 24;
257     }
258 }]
259
260
261
262==================== Output Cmm ====================
263[section "data" {
264     T8947.t2_closure:
265         const T8947.t2_info;
266         const 0;
267         const 0;
268         const 0;
269 },
270 section "readonly" {
271     c1em_str:
272         I8[] [68,111,110,101]
273 },
274 T8947.t2_entry() //  [R1]
275         { info_tbl: [(c1en,
276                       label: T8947.t2_info
277                       rep:HeapRep static { Thunk })]
278           stack_info: arg_space: 8 updfr_space: Just 8
279         }
280     {offset
281       c1en:
282           if ((Sp + -16) < SpLim) goto c1eo; else goto c1ep;
283       c1eo:
284           R1 = R1;
285           call (stg_gc_enter_1)(R1) args: 8, res: 0, upd: 8;
286       c1ep:
287           (_c1ej::I64) = call "ccall" arg hints:  [PtrHint,
288                                                    PtrHint]  result hints:  [PtrHint] newCAF(BaseReg, R1);
289           if (_c1ej::I64 == 0) goto c1el; else goto c1ek;
290       c1el:
291           call (I64[R1])() args: 8, res: 0, upd: 8;
292       c1ek:
293           I64[Sp - 16] = stg_bh_upd_frame_info;
294           I64[Sp - 8] = _c1ej::I64;
295           R2 = c1em_str;
296           Sp = Sp - 16;
297           call GHC.CString.unpackCString#_info(R2) args: 24, res: 0, upd: 24;
298     }
299 }]
300
301
302
303==================== Cmm produced by new codegen ====================
304[section "data" {
305     T8947.t1_closure:
306         const T8947.t1_info;
307         const 0;
308 },
309 T8947.t1_entry() //  []
310         { info_tbl: [(c1eD,
311                       label: T8947.t1_info
312                       rep:HeapRep static { Fun {arity: 1 fun_type: ArgSpec 3} })]
313           stack_info: arg_space: 8 updfr_space: Just 8
314         }
315     {offset
316       c1eD:
317           goto c1ey;
318       c1ey:
319           if ((old + 0) - <highSp> < SpLim) goto c1eF; else goto c1eG;
320       c1eF:
321           R1 = T8947.t1_closure;
322           call (stg_gc_fun)(R1) args: 8, res: 0, upd: 8;
323       c1eG:
324           goto c1ex;
325       c1ex:
326           _c1eA::I64 = performMajorGC;
327           I64[(young<c1eB> + 8)] = c1eB;
328           foreign call "ccall" arg hints:  []  result hints:  [] (_c1eA::I64)(...) returns to c1eB args: ([]) ress: ([])ret_args: 8ret_off: 8;
329       c1eB:
330           R4 = GHC.Types.True_closure+2;
331           R3 = T8947.t2_closure;
332           R2 = GHC.IO.Handle.FD.stdout_closure;
333           call GHC.IO.Handle.Text.hPutStr2_info(R4,
334                                                 R3,
335                                                 R2) args: 8, res: 0, upd: 8;
336     }
337 }]
338
339
340
341==================== Post control-flow optimisations ====================
342{offset
343  c1eD:
344      if ((old + 0) - <highSp> < SpLim) goto c1eF; else goto c1eG;
345  c1eF:
346      R1 = T8947.t1_closure;
347      call (stg_gc_fun)(R1) args: 8, res: 0, upd: 8;
348  c1eG:
349      _c1eA::I64 = performMajorGC;
350      I64[(young<c1eB> + 8)] = c1eB;
351      foreign call "ccall" arg hints:  []  result hints:  [] (_c1eA::I64)(...) returns to c1eB args: ([]) ress: ([])ret_args: 8ret_off: 8;
352  c1eB:
353      R4 = GHC.Types.True_closure+2;
354      R3 = T8947.t2_closure;
355      R2 = GHC.IO.Handle.FD.stdout_closure;
356      call GHC.IO.Handle.Text.hPutStr2_info(R4,
357                                            R3,
358                                            R2) args: 8, res: 0, upd: 8;
359}
360
361
362
363==================== Post common block elimination ====================
364{offset
365  c1eD:
366      if ((old + 0) - <highSp> < SpLim) goto c1eF; else goto c1eG;
367  c1eF:
368      R1 = T8947.t1_closure;
369      call (stg_gc_fun)(R1) args: 8, res: 0, upd: 8;
370  c1eG:
371      _c1eA::I64 = performMajorGC;
372      I64[(young<c1eB> + 8)] = c1eB;
373      foreign call "ccall" arg hints:  []  result hints:  [] (_c1eA::I64)(...) returns to c1eB args: ([]) ress: ([])ret_args: 8ret_off: 8;
374  c1eB:
375      R4 = GHC.Types.True_closure+2;
376      R3 = T8947.t2_closure;
377      R2 = GHC.IO.Handle.FD.stdout_closure;
378      call GHC.IO.Handle.Text.hPutStr2_info(R4,
379                                            R3,
380                                            R2) args: 8, res: 0, upd: 8;
381}
382
383
384
385==================== Layout Stack ====================
386{offset
387  c1eD:
388      if ((Sp + 8) - 16 < SpLim) goto c1eF; else goto c1eG;
389  c1eF:
390      R1 = T8947.t1_closure;
391      call (stg_gc_fun)(R1) args: 8, res: 0, upd: 8;
392  c1eG:
393      _c1eA::I64 = performMajorGC;
394      I64[Sp - 8] = c1eB;
395      Sp = Sp - 8;
396      I64[I64[CurrentTSO + 24] + 16] = Sp;
397      P64[CurrentNursery + 8] = Hp + 8;
398      (_u1eH::I64) = call "ccall" arg hints:  [PtrHint,]  result hints:  [PtrHint] suspendThread(BaseReg, 0);
399      call "ccall" arg hints:  []  result hints:  [] (_c1eA::I64)();
400      (_u1eI::I64) = call "ccall" arg hints:  [PtrHint]  result hints:  [PtrHint] resumeThread(_u1eH::I64);
401      BaseReg = _u1eI::I64;
402      _u1eJ::P64 = CurrentTSO;
403      _u1eK::P64 = I64[_u1eJ::P64 + 24];
404      Sp = I64[_u1eK::P64 + 16];
405      SpLim = _u1eK::P64 + 192;
406      HpAlloc = 0;
407      Hp = I64[CurrentNursery + 8] - 8;
408      HpLim = I64[CurrentNursery] + (%MO_SS_Conv_W32_W64(I32[CurrentNursery + 48]) * 4096 - 1);
409      call (I64[Sp])() returns to c1eB, args: 8, res: 8, upd: 8;
410  c1eB:
411      R4 = GHC.Types.True_closure+2;
412      R3 = T8947.t2_closure;
413      R2 = GHC.IO.Handle.FD.stdout_closure;
414      Sp = Sp + 8;
415      call GHC.IO.Handle.Text.hPutStr2_info(R4,
416                                            R3,
417                                            R2) args: 8, res: 0, upd: 8;
418}
419
420
421
422==================== Sink assignments ====================
423{offset
424  c1eD:
425      if ((Sp + -8) < SpLim) goto c1eF; else goto c1eG;
426  c1eF:
427      R1 = T8947.t1_closure;
428      call (stg_gc_fun)(R1) args: 8, res: 0, upd: 8;
429  c1eG:
430      I64[Sp - 8] = c1eB;
431      Sp = Sp - 8;
432      I64[I64[CurrentTSO + 24] + 16] = Sp;
433      P64[CurrentNursery + 8] = Hp + 8;
434      (_u1eH::I64) = call "ccall" arg hints:  [PtrHint,]  result hints:  [PtrHint] suspendThread(BaseReg, 0);
435      call "ccall" arg hints:  []  result hints:  [] performMajorGC();
436      (_u1eI::I64) = call "ccall" arg hints:  [PtrHint]  result hints:  [PtrHint] resumeThread(_u1eH::I64);
437      BaseReg = _u1eI::I64;
438      _u1eK::P64 = I64[CurrentTSO + 24];
439      Sp = I64[_u1eK::P64 + 16];
440      SpLim = _u1eK::P64 + 192;
441      HpAlloc = 0;
442      Hp = I64[CurrentNursery + 8] - 8;
443      HpLim = I64[CurrentNursery] + ((%MO_SS_Conv_W32_W64(I32[CurrentNursery + 48]) << 12) - 1);
444      call (I64[Sp])() returns to c1eB, args: 8, res: 8, upd: 8;
445  c1eB:
446      R4 = GHC.Types.True_closure+2;
447      R3 = T8947.t2_closure;
448      R2 = GHC.IO.Handle.FD.stdout_closure;
449      Sp = Sp + 8;
450      call GHC.IO.Handle.Text.hPutStr2_info(R4,
451                                            R3,
452                                            R2) args: 8, res: 0, upd: 8;
453}
454
455
456
457==================== CAFEnv ====================
458[(c1eB,
459  {GHC.IO.Handle.Text.hPutStr2_closure,
460   GHC.IO.Handle.FD.stdout_closure, T8947.t2_closure}),
461 (c1eD,
462  {GHC.IO.Handle.Text.hPutStr2_closure,
463   GHC.IO.Handle.FD.stdout_closure, T8947.t1_closure,
464   T8947.t2_closure}),
465 (c1eF, {T8947.t1_closure}),
466 (c1eG,
467  {GHC.IO.Handle.Text.hPutStr2_closure,
468   GHC.IO.Handle.FD.stdout_closure, T8947.t2_closure})]
469
470
471
472==================== after setInfoTableStackMap ====================
473T8947.t1_entry() //  []
474        { info_tbl: [(c1eB,
475                      label: block_c1eB_info
476                      rep:StackRep []),
477                     (c1eD,
478                      label: T8947.t1_info
479                      rep:HeapRep static { Fun {arity: 1 fun_type: ArgSpec 3} })]
480          stack_info: arg_space: 8 updfr_space: Just 8
481        }
482    {offset
483      c1eD:
484          if ((Sp + -8) < SpLim) goto c1eF; else goto c1eG;
485      c1eF:
486          R1 = T8947.t1_closure;
487          call (stg_gc_fun)(R1) args: 8, res: 0, upd: 8;
488      c1eG:
489          I64[Sp - 8] = c1eB;
490          Sp = Sp - 8;
491          I64[I64[CurrentTSO + 24] + 16] = Sp;
492          P64[CurrentNursery + 8] = Hp + 8;
493          (_u1eH::I64) = call "ccall" arg hints:  [PtrHint,]  result hints:  [PtrHint] suspendThread(BaseReg, 0);
494          call "ccall" arg hints:  []  result hints:  [] performMajorGC();
495          (_u1eI::I64) = call "ccall" arg hints:  [PtrHint]  result hints:  [PtrHint] resumeThread(_u1eH::I64);
496          BaseReg = _u1eI::I64;
497          _u1eK::P64 = I64[CurrentTSO + 24];
498          Sp = I64[_u1eK::P64 + 16];
499          SpLim = _u1eK::P64 + 192;
500          HpAlloc = 0;
501          Hp = I64[CurrentNursery + 8] - 8;
502          HpLim = I64[CurrentNursery] + ((%MO_SS_Conv_W32_W64(I32[CurrentNursery + 48]) << 12) - 1);
503          call (I64[Sp])() returns to c1eB, args: 8, res: 8, upd: 8;
504      c1eB:
505          R4 = GHC.Types.True_closure+2;
506          R3 = T8947.t2_closure;
507          R2 = GHC.IO.Handle.FD.stdout_closure;
508          Sp = Sp + 8;
509          call GHC.IO.Handle.Text.hPutStr2_info(R4,
510                                                R3,
511                                                R2) args: 8, res: 0, upd: 8;
512    }
513}
514
515
516
517==================== Post control-flow optimisations ====================
518T8947.t1_entry() //  []
519        { info_tbl: [(c1eB,
520                      label: block_c1eB_info
521                      rep:StackRep []),
522                     (c1eD,
523                      label: T8947.t1_info
524                      rep:HeapRep static { Fun {arity: 1 fun_type: ArgSpec 3} })]
525          stack_info: arg_space: 8 updfr_space: Just 8
526        }
527    {offset
528      c1eD:
529          if ((Sp + -8) < SpLim) goto c1eF; else goto c1eG;
530      c1eF:
531          R1 = T8947.t1_closure;
532          call (stg_gc_fun)(R1) args: 8, res: 0, upd: 8;
533      c1eG:
534          I64[Sp - 8] = c1eB;
535          Sp = Sp - 8;
536          I64[I64[CurrentTSO + 24] + 16] = Sp;
537          P64[CurrentNursery + 8] = Hp + 8;
538          (_u1eH::I64) = call "ccall" arg hints:  [PtrHint,]  result hints:  [PtrHint] suspendThread(BaseReg, 0);
539          call "ccall" arg hints:  []  result hints:  [] performMajorGC();
540          (_u1eI::I64) = call "ccall" arg hints:  [PtrHint]  result hints:  [PtrHint] resumeThread(_u1eH::I64);
541          BaseReg = _u1eI::I64;
542          _u1eK::P64 = I64[CurrentTSO + 24];
543          Sp = I64[_u1eK::P64 + 16];
544          SpLim = _u1eK::P64 + 192;
545          HpAlloc = 0;
546          Hp = I64[CurrentNursery + 8] - 8;
547          HpLim = I64[CurrentNursery] + ((%MO_SS_Conv_W32_W64(I32[CurrentNursery + 48]) << 12) - 1);
548          call (I64[Sp])() returns to c1eB, args: 8, res: 8, upd: 8;
549      c1eB:
550          R4 = GHC.Types.True_closure+2;
551          R3 = T8947.t2_closure;
552          R2 = GHC.IO.Handle.FD.stdout_closure;
553          Sp = Sp + 8;
554          call GHC.IO.Handle.Text.hPutStr2_info(R4,
555                                                R3,
556                                                R2) args: 8, res: 0, upd: 8;
557    }
558}
559
560
561
562==================== Post CPS Cmm ====================
563[section "data" {
564     T8947.t1_closure:
565         const T8947.t1_info;
566         const 0;
567 },
568 T8947.t1_entry() //  []
569         { info_tbl: [(c1eB,
570                       label: block_c1eB_info
571                       rep:StackRep []),
572                      (c1eD,
573                       label: T8947.t1_info
574                       rep:HeapRep static { Fun {arity: 1 fun_type: ArgSpec 3} })]
575           stack_info: arg_space: 8 updfr_space: Just 8
576         }
577     {offset
578       c1eD:
579           if ((Sp + -8) < SpLim) goto c1eF; else goto c1eG;
580       c1eF:
581           R1 = T8947.t1_closure;
582           call (stg_gc_fun)(R1) args: 8, res: 0, upd: 8;
583       c1eG:
584           I64[Sp - 8] = c1eB;
585           Sp = Sp - 8;
586           I64[I64[CurrentTSO + 24] + 16] = Sp;
587           P64[CurrentNursery + 8] = Hp + 8;
588           (_u1eH::I64) = call "ccall" arg hints:  [PtrHint,]  result hints:  [PtrHint] suspendThread(BaseReg, 0);
589           call "ccall" arg hints:  []  result hints:  [] performMajorGC();
590           (_u1eI::I64) = call "ccall" arg hints:  [PtrHint]  result hints:  [PtrHint] resumeThread(_u1eH::I64);
591           BaseReg = _u1eI::I64;
592           _u1eK::P64 = I64[CurrentTSO + 24];
593           Sp = I64[_u1eK::P64 + 16];
594           SpLim = _u1eK::P64 + 192;
595           HpAlloc = 0;
596           Hp = I64[CurrentNursery + 8] - 8;
597           HpLim = I64[CurrentNursery] + ((%MO_SS_Conv_W32_W64(I32[CurrentNursery + 48]) << 12) - 1);
598           call (I64[Sp])() returns to c1eB, args: 8, res: 8, upd: 8;
599       c1eB:
600           R4 = GHC.Types.True_closure+2;
601           R3 = T8947.t2_closure;
602           R2 = GHC.IO.Handle.FD.stdout_closure;
603           Sp = Sp + 8;
604           call GHC.IO.Handle.Text.hPutStr2_info(R4,
605                                                 R3,
606                                                 R2) args: 8, res: 0, upd: 8;
607     }
608 }]
609
610
611
612==================== Output Cmm ====================
613[section "data" {
614     T8947.t1_closure:
615         const T8947.t1_info;
616         const 0;
617 },
618 T8947.t1_entry() //  []
619         { info_tbl: [(c1eB,
620                       label: block_c1eB_info
621                       rep:StackRep []),
622                      (c1eD,
623                       label: T8947.t1_info
624                       rep:HeapRep static { Fun {arity: 1 fun_type: ArgSpec 3} })]
625           stack_info: arg_space: 8 updfr_space: Just 8
626         }
627     {offset
628       c1eD:
629           if ((Sp + -8) < SpLim) goto c1eF; else goto c1eG;
630       c1eF:
631           R1 = T8947.t1_closure;
632           call (stg_gc_fun)(R1) args: 8, res: 0, upd: 8;
633       c1eG:
634           I64[Sp - 8] = c1eB;
635           Sp = Sp - 8;
636           I64[I64[CurrentTSO + 24] + 16] = Sp;
637           P64[CurrentNursery + 8] = Hp + 8;
638           (_u1eH::I64) = call "ccall" arg hints:  [PtrHint,]  result hints:  [PtrHint] suspendThread(BaseReg, 0);
639           call "ccall" arg hints:  []  result hints:  [] performMajorGC();
640           (_u1eI::I64) = call "ccall" arg hints:  [PtrHint]  result hints:  [PtrHint] resumeThread(_u1eH::I64);
641           BaseReg = _u1eI::I64;
642           _u1eK::P64 = I64[CurrentTSO + 24];
643           Sp = I64[_u1eK::P64 + 16];
644           SpLim = _u1eK::P64 + 192;
645           HpAlloc = 0;
646           Hp = I64[CurrentNursery + 8] - 8;
647           HpLim = I64[CurrentNursery] + ((%MO_SS_Conv_W32_W64(I32[CurrentNursery + 48]) << 12) - 1);
648           call (I64[Sp])() returns to c1eB, args: 8, res: 8, upd: 8;
649       c1eB:
650           R4 = GHC.Types.True_closure+2;
651           R3 = T8947.t2_closure;
652           R2 = GHC.IO.Handle.FD.stdout_closure;
653           Sp = Sp + 8;
654           call GHC.IO.Handle.Text.hPutStr2_info(R4,
655                                                 R3,
656                                                 R2) args: 8, res: 0, upd: 8;
657     }
658 }]
659
660
661
662==================== Cmm produced by new codegen ====================
663[section "data" {
664     T8947.t8947_closure:
665         const T8947.t8947_info;
666         const 0;
667 },
668 T8947.t8947_entry() //  []
669         { info_tbl: [(c1f9,
670                       label: T8947.t8947_info
671                       rep:HeapRep static { Fun {arity: 1 fun_type: ArgSpec 3} })]
672           stack_info: arg_space: 8 updfr_space: Just 8
673         }
674     {offset
675       c1f9:
676           goto c1f7;
677       c1f7:
678           if ((old + 0) - <highSp> < SpLim) goto c1fa; else goto c1fb;
679       c1fa:
680           R1 = T8947.t8947_closure;
681           call (stg_gc_fun)(R1) args: 8, res: 0, upd: 8;
682       c1fb:
683           goto c1f6;
684       c1f6:
685           call T8947.t1_info() args: 8, res: 0, upd: 8;
686     }
687 }]
688
689
690
691==================== Post control-flow optimisations ====================
692{offset
693  c1f9:
694      if ((old + 0) - <highSp> < SpLim) goto c1fa; else goto c1fb;
695  c1fa:
696      R1 = T8947.t8947_closure;
697      call (stg_gc_fun)(R1) args: 8, res: 0, upd: 8;
698  c1fb:
699      call T8947.t1_info() args: 8, res: 0, upd: 8;
700}
701
702
703
704==================== Post common block elimination ====================
705{offset
706  c1f9:
707      if ((old + 0) - <highSp> < SpLim) goto c1fa; else goto c1fb;
708  c1fa:
709      R1 = T8947.t8947_closure;
710      call (stg_gc_fun)(R1) args: 8, res: 0, upd: 8;
711  c1fb:
712      call T8947.t1_info() args: 8, res: 0, upd: 8;
713}
714
715
716
717==================== Layout Stack ====================
718{offset
719  c1f9:
720      goto c1fb;
721  c1fb:
722      call T8947.t1_info() args: 8, res: 0, upd: 8;
723}
724
725
726
727==================== Sink assignments ====================
728{offset
729  c1f9:
730      goto c1fb;
731  c1fb:
732      call T8947.t1_info() args: 8, res: 0, upd: 8;
733}
734
735
736
737==================== CAFEnv ====================
738[(c1f9, {T8947.t1_closure}), (c1fb, {T8947.t1_closure})]
739
740
741
742==================== after setInfoTableStackMap ====================
743T8947.t8947_entry() //  []
744        { info_tbl: [(c1f9,
745                      label: T8947.t8947_info
746                      rep:HeapRep static { Fun {arity: 1 fun_type: ArgSpec 3} })]
747          stack_info: arg_space: 8 updfr_space: Just 8
748        }
749    {offset
750      c1f9:
751          goto c1fb;
752      c1fb:
753          call T8947.t1_info() args: 8, res: 0, upd: 8;
754    }
755}
756
757
758
759==================== Post control-flow optimisations ====================
760T8947.t8947_entry() //  []
761        { info_tbl: [(c1f9,
762                      label: T8947.t8947_info
763                      rep:HeapRep static { Fun {arity: 1 fun_type: ArgSpec 3} })]
764          stack_info: arg_space: 8 updfr_space: Just 8
765        }
766    {offset
767      c1f9:
768          call T8947.t1_info() args: 8, res: 0, upd: 8;
769    }
770}
771
772
773
774==================== Post CPS Cmm ====================
775[section "data" {
776     T8947.t8947_closure:
777         const T8947.t8947_info;
778         const 0;
779 },
780 T8947.t8947_entry() //  []
781         { info_tbl: [(c1f9,
782                       label: T8947.t8947_info
783                       rep:HeapRep static { Fun {arity: 1 fun_type: ArgSpec 3} })]
784           stack_info: arg_space: 8 updfr_space: Just 8
785         }
786     {offset
787       c1f9:
788           call T8947.t1_info() args: 8, res: 0, upd: 8;
789     }
790 }]
791
792
793
794==================== Output Cmm ====================
795[section "data" {
796     T8947.t8947_closure:
797         const T8947.t8947_info;
798         const 0;
799 },
800 T8947.t8947_entry() //  []
801         { info_tbl: [(c1f9,
802                       label: T8947.t8947_info
803                       rep:HeapRep static { Fun {arity: 1 fun_type: ArgSpec 3} })]
804           stack_info: arg_space: 8 updfr_space: Just 8
805         }
806     {offset
807       c1f9:
808           call T8947.t1_info() args: 8, res: 0, upd: 8;
809     }
810 }]
811
812
813
814==================== Output Cmm ====================
815[section "relreadonly" {
816     S1eM_srt:
817         const GHC.IO.Handle.Text.hPutStr2_closure;
818         const GHC.IO.Handle.FD.stdout_closure;
819         const T8947.t2_closure;
820         const T8947.t1_closure;
821 }]
822
823