Ticket #4044: dump.txt

File dump.txt, 110.5 KB (added by milan, 3 years ago)

The dump of ghc -dcore-lint error message.

Line 
1"ghc-6.12.2"   -H64m -O0 -fasm  -package-conf libraries/bootstrapping.conf  -package-name ghc-6.13 -hide-all-packages -i -icompiler/nativeGen -icompiler/basicTypes -icompiler/cmm -icompiler/codeGen -icompiler/coreSyn -icompiler/deSugar -icompiler/ghci -icompiler/hsSyn -icompiler/iface -icompiler/main -icompiler/parser -icompiler/prelude -icompiler/profiling -icompiler/rename -icompiler/simplCore -icompiler/simplStg -icompiler/specialise -icompiler/stgSyn -icompiler/stranal -icompiler/typecheck -icompiler/types -icompiler/utils -icompiler/vectorise -icompiler/stage1/build -icompiler/stage1/build/autogen -Icompiler/stage1/build -Icompiler/stage1/build/autogen -Icompiler/stage1 -Icompiler/../libraries/base/cbits -Icompiler/../libraries/base/include -Icompiler/. -Icompiler/parser -Icompiler/utils    -optP-include -optPcompiler/stage1/build/autogen/cabal_macros.h -package Cabal-1.9.0 -package array-0.3.0.0 -package base-4.2.0.1 -package bin-package-db-0.0.0.0 -package bytestring-0.9.1.6 -package containers-0.3.0.0 -package directory-1.0.1.1 -package filepath-1.1.0.4 -package hoopl-3.8.0.0 -package hpc-0.5.0.5 -package old-time-1.0.0.4 -package process-1.0.1.2 -package unix-2.4.0.1  -Wall -fno-warn-name-shadowing -fno-warn-orphans -XCPP -XMagicHash -XUnboxedTuples -XPatternGuards -XForeignFunctionInterface -XEmptyDataDecls -XTypeSynonymInstances -XMultiParamTypeClasses -XFlexibleInstances -XRank2Types -XScopedTypeVariables -XDeriveDataTypeable -XRelaxedPolyRec -DSTAGE=1 -O -fasm -dcore-lint     -odir compiler/stage1/build -hidir compiler/stage1/build -stubdir compiler/stage1/build -hisuf hi -osuf  o -hcsuf hc -c compiler/cmm/CmmSpillReload.hs -o compiler/stage1/build/CmmSpillReload.o
2*** Core Lint Errors: in result of Simplifier mode gentle, iteration 1 out of 4 ***
3<no location info>:
4    In the expression: ic_a1xa @ $co$_a1wz
5    Kinds don't match in type application:
6    Type variable: co_wild_B1 :: e_a1tx ~ Compiler.Hoopl.Graph.C
7    Arg type: $co$_a1wz :: e_a1zK ~ Compiler.Hoopl.Graph.C
8*** Offending Program ***
9CmmSpillReload.delFromAvail :: CmmSpillReload.AvailRegs
10                               -> CmmExpr.LocalReg
11                               -> CmmSpillReload.AvailRegs
12LclId
13[Arity 2]
14CmmSpillReload.delFromAvail =
15  \ (ds_d1Kz :: CmmSpillReload.AvailRegs)
16    (r_a15a :: CmmExpr.LocalReg) ->
17    case ds_d1Kz of _ {
18      CmmSpillReload.UniverseMinus s_a159 ->
19        CmmSpillReload.UniverseMinus (CmmExpr.extendRegSet s_a159 r_a15a);
20      CmmSpillReload.AvailRegs s_a15b ->
21        CmmSpillReload.AvailRegs (CmmExpr.deleteFromRegSet s_a15b r_a15a)
22    }
23
24CmmSpillReload.regSlot :: CmmExpr.LocalReg -> CmmExpr.CmmExpr
25LclId
26[Arity 1]
27CmmSpillReload.regSlot =
28  \ (r_a14L :: CmmExpr.LocalReg) ->
29    CmmExpr.CmmStackSlot
30      (CmmExpr.RegSlot r_a14L)
31      (GHC.Base.$
32         @ CmmType.Width
33         @ GHC.Types.Int
34         CmmType.widthInBytes
35         (GHC.Base.$
36            @ CmmType.CmmType
37            @ CmmType.Width
38            CmmType.typeWidth
39            (CmmExpr.localRegType r_a14L)))
40
41CmmSpillReload.spill :: CmmExpr.LocalReg
42                        -> HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.O
43LclId
44[Arity 1]
45CmmSpillReload.spill =
46  \ (r_a14M :: CmmExpr.LocalReg) ->
47    HooplNode.$WCmmStore
48      (CmmSpillReload.regSlot r_a14M)
49      (GHC.Base.$
50         @ CmmExpr.CmmReg
51         @ CmmExpr.CmmExpr
52         CmmExpr.CmmReg
53         (CmmExpr.CmmLocal r_a14M))
54
55CmmSpillReload.reload :: CmmExpr.LocalReg
56                         -> HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.O
57LclId
58[Arity 1]
59CmmSpillReload.reload =
60  \ (r_a14N :: CmmExpr.LocalReg) ->
61    HooplNode.$WCmmAssign
62      (CmmExpr.CmmLocal r_a14N)
63      (GHC.Base.$
64         @ CmmType.CmmType
65         @ CmmExpr.CmmExpr
66         (CmmExpr.CmmLoad (CmmSpillReload.regSlot r_a14N))
67         (CmmExpr.localRegType r_a14N))
68
69CmmSpillReload.kill :: forall a_a126.
70                       (CmmExpr.DefinerOfLocalRegs a_a126) =>
71                       a_a126 -> CmmExpr.RegSet -> CmmExpr.RegSet
72LclId
73[Arity 3]
74CmmSpillReload.kill =
75  \ (@ a_a1td)
76    ($dDefinerOfLocalRegs_a1ti :: CmmExpr.DefinerOfLocalRegs a_a1td)
77    (a_a13w :: a_a1td)
78    (live_a13x :: CmmExpr.RegSet) ->
79    CmmExpr.foldRegsDefd
80      @ a_a1td
81      $dDefinerOfLocalRegs_a1ti
82      @ CmmExpr.RegSet
83      CmmExpr.deleteFromRegSet
84      live_a13x
85      a_a13w
86
87CmmSpillReload.gen :: forall a_a127.
88                      (CmmExpr.UserOfLocalRegs a_a127) =>
89                      a_a127 -> CmmExpr.RegSet -> CmmExpr.RegSet
90LclId
91[Arity 3]
92CmmSpillReload.gen =
93  \ (@ a_a1zM)
94    ($dUserOfLocalRegs_a1zS :: CmmExpr.UserOfLocalRegs a_a1zM)
95    (a_a13u :: a_a1zM)
96    (live_a13v :: CmmExpr.RegSet) ->
97    CmmExpr.foldRegsUsed
98      @ a_a1zM
99      $dUserOfLocalRegs_a1zS
100      @ CmmExpr.RegSet
101      CmmExpr.extendRegSet
102      live_a13v
103      a_a13u
104
105CmmSpillReload.in_regs :: CmmSpillReload.DualLive -> CmmExpr.RegSet
106LclIdX[RecSel]
107[Arity 1]
108CmmSpillReload.in_regs =
109  \ (ds_d1Py :: CmmSpillReload.DualLive) ->
110    case ds_d1Py of _ { CmmSpillReload.DualLive _ ds_d1PA -> ds_d1PA }
111
112CmmSpillReload.changeRegs :: (CmmExpr.RegSet -> CmmExpr.RegSet)
113                             -> CmmSpillReload.DualLive
114                             -> CmmSpillReload.DualLive
115LclId
116[Arity 2]
117CmmSpillReload.changeRegs =
118  \ (f_a12h :: CmmExpr.RegSet -> CmmExpr.RegSet)
119    (live_a12i :: CmmSpillReload.DualLive) ->
120    case live_a12i of _ { CmmSpillReload.DualLive ds_d1O8 _ ->
121    CmmSpillReload.DualLive
122      ds_d1O8 (f_a12h (CmmSpillReload.in_regs live_a12i))
123    }
124
125CmmSpillReload.on_stack :: CmmSpillReload.DualLive
126                           -> CmmExpr.RegSet
127LclIdX[RecSel]
128[Arity 1]
129CmmSpillReload.on_stack =
130  \ (ds_d1Pu :: CmmSpillReload.DualLive) ->
131    case ds_d1Pu of _ { CmmSpillReload.DualLive ds_d1Pv _ -> ds_d1Pv }
132
133CmmSpillReload.dualUnionList :: [CmmSpillReload.DualLive]
134                                -> CmmSpillReload.DualLive
135LclId
136[Arity 1]
137CmmSpillReload.dualUnionList =
138  \ (ls_a12c :: [CmmSpillReload.DualLive]) ->
139    CmmSpillReload.DualLive
140      (GHC.Base.$
141         @ [UniqSet.UniqSet CmmExpr.LocalReg]
142         @ (UniqSet.UniqSet CmmExpr.LocalReg)
143         (UniqSet.unionManyUniqSets @ CmmExpr.LocalReg)
144         (GHC.Base.map
145            @ CmmSpillReload.DualLive
146            @ (UniqSet.UniqSet CmmExpr.LocalReg)
147            CmmSpillReload.on_stack
148            ls_a12c))
149      (GHC.Base.$
150         @ [UniqSet.UniqSet CmmExpr.LocalReg]
151         @ (UniqSet.UniqSet CmmExpr.LocalReg)
152         (UniqSet.unionManyUniqSets @ CmmExpr.LocalReg)
153         (GHC.Base.map
154            @ CmmSpillReload.DualLive
155            @ (UniqSet.UniqSet CmmExpr.LocalReg)
156            CmmSpillReload.in_regs
157            ls_a12c))
158
159add1_a12l :: forall a_a1A4.
160             UniqSet.UniqSet a_a1A4
161             -> UniqSet.UniqSet a_a1A4
162             -> (GHC.Bool.Bool, UniqSet.UniqSet a_a1A4)
163LclId
164[Arity 2]
165add1_a12l =
166  \ (@ a_a1A4)
167    (old_a12w :: UniqSet.UniqSet a_a1A4)
168    (new_a12x :: UniqSet.UniqSet a_a1A4) ->
169    let {
170      join_a12y :: UniqSet.UniqSet a_a1A4
171      LclId
172      []
173      join_a12y = UniqSet.unionUniqSets @ a_a1A4 old_a12w new_a12x } in
174    case GHC.Classes.>
175           @ GHC.Types.Int
176           GHC.Base.$fOrdInt
177           (UniqSet.sizeUniqSet @ a_a1A4 join_a12y)
178           (UniqSet.sizeUniqSet @ a_a1A4 old_a12w)
179    of _ {
180      GHC.Bool.False -> (GHC.Bool.False, old_a12w);
181      GHC.Bool.True -> (GHC.Bool.True, join_a12y)
182    }
183
184add_a12k :: forall t_a1Ao.
185            t_a1Ao
186            -> Compiler.Hoopl.Dataflow.OldFact CmmSpillReload.DualLive
187            -> Compiler.Hoopl.Dataflow.NewFact CmmSpillReload.DualLive
188            -> (Compiler.Hoopl.Dataflow.ChangeFlag, CmmSpillReload.DualLive)
189LclId
190[Arity 3]
191add_a12k =
192  \ (@ t_a1Ao)
193    _
194    (ds_d1NX :: Compiler.Hoopl.Dataflow.OldFact
195                  CmmSpillReload.DualLive)
196    (ds_d1NY :: Compiler.Hoopl.Dataflow.NewFact
197                  CmmSpillReload.DualLive) ->
198    let {
199      ds_d1O3 :: (GHC.Bool.Bool, UniqSet.UniqSet CmmExpr.LocalReg)
200      LclId
201      []
202      ds_d1O3 =
203        add1_a12l
204          @ CmmExpr.LocalReg
205          (CmmSpillReload.in_regs
206             (ds_d1NX
207              `cast` (Compiler.Hoopl.Dataflow.NTCo:OldFact
208                        CmmSpillReload.DualLive
209                      :: Compiler.Hoopl.Dataflow.OldFact CmmSpillReload.DualLive
210                           ~
211                         CmmSpillReload.DualLive)))
212          (CmmSpillReload.in_regs
213             (ds_d1NY
214              `cast` (Compiler.Hoopl.Dataflow.NTCo:NewFact
215                        CmmSpillReload.DualLive
216                      :: Compiler.Hoopl.Dataflow.NewFact CmmSpillReload.DualLive
217                           ~
218                         CmmSpillReload.DualLive))) } in
219    let {
220      ds_d1NZ :: (GHC.Bool.Bool, UniqSet.UniqSet CmmExpr.LocalReg)
221      LclId
222      []
223      ds_d1NZ =
224        add1_a12l
225          @ CmmExpr.LocalReg
226          (CmmSpillReload.on_stack
227             (ds_d1NX
228              `cast` (Compiler.Hoopl.Dataflow.NTCo:OldFact
229                        CmmSpillReload.DualLive
230                      :: Compiler.Hoopl.Dataflow.OldFact CmmSpillReload.DualLive
231                           ~
232                         CmmSpillReload.DualLive)))
233          (CmmSpillReload.on_stack
234             (ds_d1NY
235              `cast` (Compiler.Hoopl.Dataflow.NTCo:NewFact
236                        CmmSpillReload.DualLive
237                      :: Compiler.Hoopl.Dataflow.NewFact CmmSpillReload.DualLive
238                           ~
239                         CmmSpillReload.DualLive))) } in
240    (GHC.Base.$
241       @ GHC.Bool.Bool
242       @ Compiler.Hoopl.Dataflow.ChangeFlag
243       Compiler.Hoopl.Dataflow.changeIf
244       (GHC.Classes.||
245          (case ds_d1NZ of _ { (change1_a1AF, _) -> change1_a1AF })
246          (case ds_d1O3 of _ { (change2_a1Ax, _) -> change2_a1Ax })),
247     CmmSpillReload.DualLive
248       (case ds_d1NZ of _ { (_, stack_a1AH) -> stack_a1AH })
249       (case ds_d1O3 of _ { (_, regs_a1Az) -> regs_a1Az }))
250
251empty_a12j :: CmmSpillReload.DualLive
252LclId
253[]
254empty_a12j =
255  CmmSpillReload.DualLive CmmExpr.emptyRegSet CmmExpr.emptyRegSet
256
257a_s1Tc :: [GHC.Types.Char]
258LclId
259[]
260a_s1Tc =
261  GHC.Base.unpackCString# "variables live in registers and on stack"
262
263CmmSpillReload.dualLiveLattice :: Compiler.Hoopl.Dataflow.DataflowLattice
264                                    CmmSpillReload.DualLive
265LclIdX
266[]
267CmmSpillReload.dualLiveLattice =
268  Compiler.Hoopl.Dataflow.DataflowLattice
269    @ CmmSpillReload.DualLive
270    a_s1Tc
271    empty_a12j
272    (add_a12k @ Compiler.Hoopl.Label.Label)
273    GHC.Bool.False
274
275CmmSpillReload.dualLiveTransfers :: BlockId.BlockId
276                                    -> BlockId.BlockSet
277                                    -> Compiler.Hoopl.Dataflow.BwdTransfer
278                                         HooplNode.CmmNode CmmSpillReload.DualLive
279LclIdX
280[Arity 2]
281CmmSpillReload.dualLiveTransfers =
282  \ (entry_a12D :: BlockId.BlockId)
283    (procPoints_a12E :: BlockId.BlockSet) ->
284    let {
285      ==_a1DN :: GHC.Types.Int -> GHC.Types.Int -> GHC.Bool.Bool
286      LclId
287      []
288      ==_a1DN = GHC.Classes.== @ GHC.Types.Int GHC.Base.$fEqInt } in
289    Compiler.Hoopl.Dataflow.mkBTransfer
290      @ HooplNode.CmmNode
291      @ CmmSpillReload.DualLive
292      (\ (ds_d1Ol :: HooplNode.CmmNode
293                       Compiler.Hoopl.Graph.C Compiler.Hoopl.Graph.O)
294         (live_a12J :: CmmSpillReload.DualLive) ->
295         case ds_d1Ol of _ {
296           __DEFAULT ->
297             Control.Exception.Base.patError
298               @ CmmSpillReload.DualLive
299               "compiler/cmm/CmmSpillReload.hs:(93,10)-(98,95)|function first";
300           HooplNode.CmmEntry @ $coC_a1GI @ $coO_a1GJ id_a12I ->
301             GHC.Base.$
302               @ CmmSpillReload.DualLive
303               @ CmmSpillReload.DualLive
304               (\ (x_a12N :: CmmSpillReload.DualLive) ->
305                  case GHC.Classes.==
306                         @ BlockId.BlockId Compiler.Hoopl.Label.$fEqLabel id_a12I entry_a12D
307                  of _ {
308                    GHC.Bool.False -> x_a12N;
309                    GHC.Bool.True ->
310                      CmmLive.noLiveOnEntry
311                        @ CmmSpillReload.DualLive
312                        id_a12I
313                        (CmmSpillReload.in_regs live_a12J)
314                        x_a12N
315                  })
316               (case GHC.Classes.&&
317                       (GHC.Classes./=
318                          @ Compiler.Hoopl.Label.Label
319                          Compiler.Hoopl.Label.$fEqLabel
320                          id_a12I
321                          entry_a12D)
322                       (Compiler.Hoopl.Collections.setMember
323                          @ BlockId.BlockSet
324                          Compiler.Hoopl.Label.$fIsSetLabelSet
325                          (id_a12I
326                           `cast` (sym
327                                     (trans
328                                        (trans
329                                           (Compiler.Hoopl.Collections.ElemOf BlockId.BlockSet)
330                                           (trans
331                                              Compiler.Hoopl.Label.TFCo:R:ElemOfLabelSet
332                                              (sym Compiler.Hoopl.Label.Label)))
333                                        Compiler.Hoopl.Label.Label)
334                                   :: Compiler.Hoopl.Label.Label
335                                        ~
336                                      Compiler.Hoopl.Collections.ElemOf BlockId.BlockSet))
337                          procPoints_a12E)
338                of _ {
339                  GHC.Bool.False -> live_a12J;
340                  GHC.Bool.True ->
341                    CmmSpillReload.DualLive
342                      (CmmExpr.plusRegSet
343                         (CmmSpillReload.on_stack live_a12J)
344                         (CmmSpillReload.in_regs live_a12J))
345                      CmmExpr.emptyRegSet
346                })
347         })
348      (\ (m_a12O :: HooplNode.CmmNode
349                      Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.O)
350         (live_a12P :: CmmSpillReload.DualLive) ->
351         let {
352           check_a12V :: forall a_a1Fb.
353                         (CmmExpr.Area, GHC.Types.Int, GHC.Types.Int) -> a_a1Fb -> a_a1Fb
354           LclId
355           [Arity 2]
356           check_a12V =
357             \ (@ a_a1Fb)
358               (ds_d1OO :: (CmmExpr.Area, GHC.Types.Int, GHC.Types.Int))
359               (x_a13a :: a_a1Fb) ->
360               let {
361                 fail_d1OS :: GHC.Prim.State# GHC.Prim.RealWorld -> a_a1Fb
362                 LclId
363                 [Arity 1]
364                 fail_d1OS =
365                   \ _ ->
366                     Panic.panic
367                       @ a_a1Fb
368                       (GHC.Base.unpackCString#
369                          "middleDualLiveness unsupported: slices") } in
370               case ds_d1OO of _ { (ds_d1OP, o_a138, w_a139) ->
371               case ds_d1OP of _ {
372                 CmmExpr.RegSlot ds_d1OQ ->
373                   case ds_d1OQ of _ { CmmExpr.LocalReg _ ty_a137 ->
374                   case GHC.Classes.&&
375                          (==_a1DN o_a138 w_a139)
376                          (==_a1DN w_a139 (CmmType.widthInBytes (CmmType.typeWidth ty_a137)))
377                   of _ {
378                     GHC.Bool.False -> fail_d1OS GHC.Prim.realWorld#;
379                     GHC.Bool.True -> x_a13a
380                   }
381                   };
382                 CmmExpr.CallArea ipv_s1TI -> fail_d1OS GHC.Prim.realWorld#
383               }
384               } } in
385         let {
386           reload_a12U :: CmmExpr.RegSet
387                          -> (CmmExpr.Area, GHC.Types.Int, GHC.Types.Int)
388                          -> CmmExpr.RegSet
389           LclId
390           [Arity 2]
391           reload_a12U =
392             \ (live_a133 :: CmmExpr.RegSet)
393               (s_a134 :: (CmmExpr.Area, GHC.Types.Int, GHC.Types.Int)) ->
394               case s_a134 of wild_B1 { (ds_d1OH, ds_d1OI, ds_d1OJ) ->
395               case ds_d1OH of _ {
396                 CmmExpr.RegSlot r_a135 ->
397                   GHC.Base.$
398                     @ CmmExpr.RegSet
399                     @ CmmExpr.RegSet
400                     (check_a12V @ CmmExpr.RegSet wild_B1)
401                     (CmmExpr.extendRegSet live_a133 r_a135);
402                 CmmExpr.CallArea ipv_s1TP -> live_a133
403               }
404               } } in
405         let {
406           spill_a12T :: CmmExpr.RegSet
407                         -> (CmmExpr.Area, GHC.Types.Int, GHC.Types.Int)
408                         -> CmmExpr.RegSet
409           LclId
410           [Arity 2]
411           spill_a12T =
412             \ (live_a12Z :: CmmExpr.RegSet)
413               (s_a130 :: (CmmExpr.Area, GHC.Types.Int, GHC.Types.Int)) ->
414               case s_a130 of wild_B1 { (ds_d1OA, ds_d1OB, ds_d1OC) ->
415               case ds_d1OA of _ {
416                 CmmExpr.RegSlot r_a131 ->
417                   GHC.Base.$
418                     @ CmmExpr.RegSet
419                     @ CmmExpr.RegSet
420                     (check_a12V @ CmmExpr.RegSet wild_B1)
421                     (CmmExpr.deleteFromRegSet live_a12Z r_a131);
422                 CmmExpr.CallArea ipv_s1TS -> live_a12Z
423               }
424               } } in
425         let {
426           f_a12f :: CmmExpr.RegSet -> CmmExpr.RegSet
427           LclId
428           [Arity 1]
429           f_a12f =
430             \ (live_a12Y :: CmmExpr.RegSet) ->
431               CmmExpr.foldSlotsUsed
432                 @ (HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.O)
433                 (HooplNode.$fUserOfSlotsCmmNode
434                    @ Compiler.Hoopl.Graph.O @ Compiler.Hoopl.Graph.O)
435                 @ CmmExpr.RegSet
436                 reload_a12U
437                 (CmmExpr.foldSlotsDefd
438                    @ (HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.O)
439                    (HooplNode.$fDefinerOfSlotsCmmNode
440                       @ Compiler.Hoopl.Graph.O @ Compiler.Hoopl.Graph.O)
441                    @ CmmExpr.RegSet
442                    spill_a12T
443                    live_a12Y
444                    m_a12O)
445                 m_a12O } in
446         GHC.Base.$
447           @ CmmSpillReload.DualLive
448           @ CmmSpillReload.DualLive
449           (\ (live_a12g :: CmmSpillReload.DualLive) ->
450              case live_a12g of _ { CmmSpillReload.DualLive _ ds_d1Oe ->
451              CmmSpillReload.DualLive
452                (f_a12f (CmmSpillReload.on_stack live_a12g)) ds_d1Oe
453              })
454           (CmmSpillReload.changeRegs
455              ((case Compiler.Hoopl.Dataflow.getBTransfers
456                       @ HooplNode.CmmNode @ CmmLive.CmmLive CmmLive.xferLive
457                of _ { (_, middle_a12W, _) ->
458                middle_a12W
459                })
460                 m_a12O)
461              (CmmSpillReload.changeRegs
462                 (\ (live_a12X :: CmmExpr.RegSet) ->
463                    case m_a12O of _ {
464                      __DEFAULT -> live_a12X;
465                      HooplNode.CmmUnsafeForeignCall @ $coO_a1FW @ $coO_a1FX _ _ _ ->
466                        CmmExpr.emptyRegSet
467                    })
468                 live_a12P)))
469      (\ (l_a13b :: HooplNode.CmmNode
470                      Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.C)
471         (fb_a13c :: Compiler.Hoopl.Label.FactBase
472                       CmmSpillReload.DualLive) ->
473         let {
474           empty_a13d :: CmmSpillReload.DualLive
475           LclId
476           []
477           empty_a13d =
478             Compiler.Hoopl.Dataflow.fact_bot
479               @ CmmSpillReload.DualLive CmmSpillReload.dualLiveLattice } in
480         let {
481           lkp_a13e :: Compiler.Hoopl.Label.Label -> CmmSpillReload.DualLive
482           LclId
483           [Arity 1]
484           lkp_a13e =
485             \ (id_a13g :: Compiler.Hoopl.Label.Label) ->
486               Data.Maybe.fromMaybe
487                 @ CmmSpillReload.DualLive
488                 empty_a13d
489                 (Compiler.Hoopl.Label.lookupFact
490                    @ CmmSpillReload.DualLive id_a13g fb_a13c) } in
491         let {
492           call_a13f :: forall a_a1By.
493                        (CmmExpr.UserOfLocalRegs a_a1By) =>
494                        a_a1By -> Compiler.Hoopl.Label.Label -> CmmSpillReload.DualLive
495           LclId
496           [Arity 3]
497           call_a13f =
498             \ (@ a_a1By)
499               ($dUserOfLocalRegs_a1BB :: CmmExpr.UserOfLocalRegs a_a1By)
500               (l_a13h :: a_a1By)
501               (k_a13i :: Compiler.Hoopl.Label.Label) ->
502               CmmSpillReload.DualLive
503                 (CmmSpillReload.on_stack (lkp_a13e k_a13i))
504                 (CmmSpillReload.gen
505                    @ a_a1By $dUserOfLocalRegs_a1BB l_a13h CmmExpr.emptyRegSet) } in
506         case l_a13b of _ {
507           __DEFAULT ->
508             Control.Exception.Base.patError
509               @ CmmSpillReload.DualLive
510               "compiler/cmm/CmmSpillReload.hs:(115,22)-(122,11)|case";
511           HooplNode.CmmBranch @ $coO_a1BD @ $coC_a1BE id_a13j ->
512             lkp_a13e id_a13j;
513           HooplNode.CmmCondBranch @ $coO_a1C9 @ $coC_a1Ca _ t_a13q f_a13r ->
514             GHC.Base.$
515               @ CmmSpillReload.DualLive
516               @ CmmSpillReload.DualLive
517               (CmmSpillReload.changeRegs
518                  (GHC.Base..
519                     @ CmmExpr.RegSet
520                     @ CmmExpr.RegSet
521                     @ CmmExpr.RegSet
522                     (CmmSpillReload.gen
523                        @ (HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.C)
524                        (HooplNode.$fUserOfLocalRegsCmmNode
525                           @ Compiler.Hoopl.Graph.O @ Compiler.Hoopl.Graph.C)
526                        l_a13b)
527                     (CmmSpillReload.kill
528                        @ (HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.C)
529                        (HooplNode.$fDefinerOfLocalRegsCmmNode
530                           @ Compiler.Hoopl.Graph.O @ Compiler.Hoopl.Graph.C)
531                        l_a13b)))
532               (case lkp_a13e t_a13q
533                of _ { CmmSpillReload.DualLive s_a128 r_a129 ->
534                case lkp_a13e f_a13r
535                of _ { CmmSpillReload.DualLive s'_a12a r'_a12b ->
536                CmmSpillReload.DualLive
537                  (UniqSet.unionUniqSets @ CmmExpr.LocalReg s_a128 s'_a12a)
538                  (UniqSet.unionUniqSets @ CmmExpr.LocalReg r_a129 r'_a12b)
539                }
540                });
541           HooplNode.CmmSwitch @ $coO_a1Cp @ $coC_a1Cq _ tbl_a13t ->
542             GHC.Base.$
543               @ CmmSpillReload.DualLive
544               @ CmmSpillReload.DualLive
545               (CmmSpillReload.changeRegs
546                  (GHC.Base..
547                     @ CmmExpr.RegSet
548                     @ CmmExpr.RegSet
549                     @ CmmExpr.RegSet
550                     (CmmSpillReload.gen
551                        @ (HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.C)
552                        (HooplNode.$fUserOfLocalRegsCmmNode
553                           @ Compiler.Hoopl.Graph.O @ Compiler.Hoopl.Graph.C)
554                        l_a13b)
555                     (CmmSpillReload.kill
556                        @ (HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.C)
557                        (HooplNode.$fDefinerOfLocalRegsCmmNode
558                           @ Compiler.Hoopl.Graph.O @ Compiler.Hoopl.Graph.C)
559                        l_a13b)))
560               (GHC.Base.$
561                  @ [CmmSpillReload.DualLive]
562                  @ CmmSpillReload.DualLive
563                  CmmSpillReload.dualUnionList
564                  (GHC.Base.map
565                     @ Compiler.Hoopl.Label.Label
566                     @ CmmSpillReload.DualLive
567                     lkp_a13e
568                     (Data.Maybe.catMaybes @ Compiler.Hoopl.Label.Label tbl_a13t)));
569           HooplNode.CmmCall @ $coO_a1BL @ $coC_a1BM _ ds_d1P4 _ _ _ ->
570             case ds_d1P4 of _ {
571               Data.Maybe.Nothing ->
572                 CmmSpillReload.changeRegs
573                   (GHC.Base..
574                      @ CmmExpr.RegSet
575                      @ CmmExpr.RegSet
576                      @ CmmExpr.RegSet
577                      (CmmSpillReload.gen
578                         @ (HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.C)
579                         (HooplNode.$fUserOfLocalRegsCmmNode
580                            @ Compiler.Hoopl.Graph.O @ Compiler.Hoopl.Graph.C)
581                         l_a13b)
582                      (CmmSpillReload.kill
583                         @ (HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.C)
584                         (HooplNode.$fDefinerOfLocalRegsCmmNode
585                            @ Compiler.Hoopl.Graph.O @ Compiler.Hoopl.Graph.C)
586                         l_a13b))
587                   empty_a13d;
588               Data.Maybe.Just k_a13m ->
589                 call_a13f
590                   @ (HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.C)
591                   (HooplNode.$fUserOfLocalRegsCmmNode
592                      @ Compiler.Hoopl.Graph.O @ Compiler.Hoopl.Graph.C)
593                   l_a13b
594                   k_a13m
595             };
596           HooplNode.CmmForeignCall @ $coO_a1BY @ $coC_a1BZ _ _ _ ds_d1P1 _ ->
597             call_a13f
598               @ (HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.C)
599               (HooplNode.$fUserOfLocalRegsCmmNode
600                  @ Compiler.Hoopl.Graph.O @ Compiler.Hoopl.Graph.C)
601               l_a13b
602               ds_d1P1
603         })
604
605CmmSpillReload.dualLivenessWithInsertion :: BlockId.BlockSet
606                                            -> ZipCfg.LGraph ZipCfgCmmRep.Middle ZipCfgCmmRep.Last
607                                            -> OptimizationFuel.FuelMonad
608                                                 (ZipCfg.LGraph
609                                                    ZipCfgCmmRep.Middle ZipCfgCmmRep.Last)
610LclIdX
611[Arity 2]
612CmmSpillReload.dualLivenessWithInsertion =
613  \ (procPoints_a12z :: BlockId.BlockSet)
614    (g_a12A :: ZipCfg.LGraph ZipCfgCmmRep.Middle ZipCfgCmmRep.Last) ->
615    GHC.Base.$
616      @ (OptimizationFuel.FuelMonad
617           (ZipCfgCmmRep.CmmGraph, BlockId.BlockEnv CmmSpillReload.DualLive))
618      @ (OptimizationFuel.FuelMonad ZipCfgCmmRep.CmmGraph)
619      (Control.Monad.liftM
620         @ OptimizationFuel.FuelMonad
621         @ (ZipCfgCmmRep.CmmGraph, BlockId.BlockEnv CmmSpillReload.DualLive)
622         @ ZipCfgCmmRep.CmmGraph
623         OptimizationFuel.$fMonadFuelMonad
624         (Data.Tuple.fst
625            @ ZipCfgCmmRep.CmmGraph
626            @ (BlockId.BlockEnv CmmSpillReload.DualLive)))
627      (GHC.Base.$
628         @ (Compiler.Hoopl.Dataflow.BwdPass
629              HooplCmm.HooplMonad HooplNode.CmmNode CmmSpillReload.DualLive)
630         @ (OptimizationFuel.FuelMonad
631              (ZipCfgCmmRep.CmmGraph, BlockId.BlockEnv CmmSpillReload.DualLive))
632         (HooplCvt.hooplBwdZ
633            @ CmmSpillReload.DualLive
634            g_a12A
635            (GHC.Types.[] @ (BlockId.BlockId, CmmSpillReload.DualLive)))
636         (HooplUtils.analRewBwd
637            @ CmmSpillReload.DualLive
638            @ HooplCmm.HooplMonad
639            CmmSpillReload.dualLiveLattice
640            (CmmSpillReload.dualLiveTransfers
641               (ZipCfg.lg_entry @ ZipCfgCmmRep.Middle @ ZipCfgCmmRep.Last g_a12A)
642               procPoints_a12z)
643            (case g_a12A of _ { ZipCfg.LGraph entry_a13y blocks_a13z ->
644             Compiler.Hoopl.Combinators.deepBwdRw'
645               @ HooplCmm.HooplMonad
646               @ HooplNode.CmmNode
647               @ CmmSpillReload.DualLive
648               (\ (@ e_a1zK) (@ x_a1zL) ->
649                  let {
650                    ic_a1xa :: (e_a1tx ~ Compiler.Hoopl.Graph.C,
651                                x_a1ty ~ Compiler.Hoopl.Graph.O) =>
652                               GHC.Base.Monad
653                                 (Compiler.Hoopl.Fuel.CheckingFuelMonad OptimizationFuel.FuelMonad)
654                    LclId
655                    []
656                    ic_a1xa =
657                      \ (@ $co$_a1wz::e_a1zK ~ Compiler.Hoopl.Graph.C)
658                        (@ $co$_a1wA::x_a1zL ~ Compiler.Hoopl.Graph.O) ->
659                        Compiler.Hoopl.Fuel.$fMonadCheckingFuelMonad
660                          @ OptimizationFuel.FuelMonad OptimizationFuel.$fMonadFuelMonad } in
661                  let {
662                    ic_a1ye :: (e_a1tx ~ Compiler.Hoopl.Graph.O,
663                                x_a1ty ~ Compiler.Hoopl.Graph.O) =>
664                               GHC.Base.Monad
665                                 (Compiler.Hoopl.Fuel.CheckingFuelMonad OptimizationFuel.FuelMonad)
666                    LclId
667                    []
668                    ic_a1ye =
669                      \ (@ $co$_a1xN::e_a1zK ~ Compiler.Hoopl.Graph.O)
670                        (@ $co$_a1xO::x_a1zL ~ Compiler.Hoopl.Graph.O) ->
671                        Compiler.Hoopl.Fuel.$fMonadCheckingFuelMonad
672                          @ OptimizationFuel.FuelMonad OptimizationFuel.$fMonadFuelMonad } in
673                  let {
674                    ic_a1zs :: (e_a1tx ~ Compiler.Hoopl.Graph.O,
675                                x_a1ty ~ Compiler.Hoopl.Graph.O) =>
676                               (CmmExpr.DefinerOfLocalRegs CmmDecl.CmmFormals,
677                                GHC.Base.Monad
678                                  (Compiler.Hoopl.Fuel.CheckingFuelMonad
679                                     OptimizationFuel.FuelMonad))
680                    LclId
681                    []
682                    ic_a1zs =
683                      \ (@ $co$_a1yU::e_a1zK ~ Compiler.Hoopl.Graph.O)
684                        (@ $co$_a1yV::x_a1zL ~ Compiler.Hoopl.Graph.O) ->
685                        let {
686                          $dMonad_a1zn :: GHC.Base.Monad
687                                            (Compiler.Hoopl.Fuel.CheckingFuelMonad
688                                               OptimizationFuel.FuelMonad)
689                          LclId
690                          []
691                          $dMonad_a1zn =
692                            Compiler.Hoopl.Fuel.$fMonadCheckingFuelMonad
693                              @ OptimizationFuel.FuelMonad OptimizationFuel.$fMonadFuelMonad } in
694                        let {
695                          $dDefinerOfLocalRegs_a1zk :: CmmExpr.DefinerOfLocalRegs
696                                                         CmmDecl.CmmFormals
697                          LclId
698                          []
699                          $dDefinerOfLocalRegs_a1zk =
700                            CmmExpr.$fDefinerOfLocalRegs[]
701                              @ CmmExpr.LocalReg CmmExpr.$fDefinerOfLocalRegsLocalReg } in
702                        ($dDefinerOfLocalRegs_a1zk, $dMonad_a1zn) } in
703                  \ (e_a13E :: HooplNode.CmmNode e_a1zK x_a1zL)
704                    (live_a13G :: Compiler.Hoopl.Dataflow.Fact
705                                    x_a1zL CmmSpillReload.DualLive) ->
706                    case e_a13E of wild_X1A {
707                      __DEFAULT ->
708                        Data.Maybe.Nothing @ (HooplCmm.HooplCmmReplGraph e_a1zK x_a1zL);
709                      HooplNode.CmmEntry @ $co$_a1wz @ $co$_a1wA id_a13F ->
710                        case GHC.Classes.&&
711                               (GHC.Classes./=
712                                  @ Compiler.Hoopl.Label.Label
713                                  Compiler.Hoopl.Label.$fEqLabel
714                                  id_a13F
715                                  entry_a13y)
716                               (Compiler.Hoopl.Collections.setMember
717                                  @ BlockId.BlockSet
718                                  Compiler.Hoopl.Label.$fIsSetLabelSet
719                                  (id_a13F
720                                   `cast` (sym
721                                             (trans
722                                                (trans
723                                                   (Compiler.Hoopl.Collections.ElemOf
724                                                      BlockId.BlockSet)
725                                                   (trans
726                                                      Compiler.Hoopl.Label.TFCo:R:ElemOfLabelSet
727                                                      (sym Compiler.Hoopl.Label.Label)))
728                                                Compiler.Hoopl.Label.Label)
729                                           :: Compiler.Hoopl.Label.Label
730                                                ~
731                                              Compiler.Hoopl.Collections.ElemOf BlockId.BlockSet))
732                                  procPoints_a12z)
733                        of _ {
734                          GHC.Bool.False ->
735                            Data.Maybe.Nothing @ (HooplCmm.HooplCmmReplGraph e_a1zK x_a1zL);
736                          GHC.Bool.True ->
737                            let {
738                              ds_d1N1 :: [HooplNode.CmmNode
739                                            Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.O]
740                              LclId
741                              []
742                              ds_d1N1 =
743                                GHC.Base.map
744                                  @ CmmExpr.LocalReg
745                                  @ (HooplNode.CmmNode
746                                       Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.O)
747                                  CmmSpillReload.reload
748                                  (UniqSet.uniqSetToList
749                                     @ CmmExpr.LocalReg
750                                     (CmmSpillReload.in_regs
751                                        (live_a13G
752                                         `cast` (trans
753                                                   (trans
754                                                      (Compiler.Hoopl.Dataflow.Fact
755                                                         x_a1zL CmmSpillReload.DualLive)
756                                                      (trans
757                                                         (trans
758                                                            (Compiler.Hoopl.Dataflow.Fact
759                                                               x_a1zL CmmSpillReload.DualLive)
760                                                            (trans
761                                                               (Compiler.Hoopl.Dataflow.Fact
762                                                                  $co$_a1wA CmmSpillReload.DualLive)
763                                                               (trans
764                                                                  (Compiler.Hoopl.Dataflow.TFCo:R:FactOf
765                                                                     CmmSpillReload.DualLive)
766                                                                  CmmSpillReload.DualLive)))
767                                                         CmmSpillReload.DualLive))
768                                                   CmmSpillReload.DualLive
769                                                 :: Compiler.Hoopl.Dataflow.Fact
770                                                      x_a1zL CmmSpillReload.DualLive
771                                                      ~
772                                                    CmmSpillReload.DualLive)))) } in
773                            case ds_d1N1 of _ {
774                              [] ->
775                                Data.Maybe.Nothing @ (HooplCmm.HooplCmmReplGraph e_a1zK x_a1zL);
776                              : ipv_s1Vk ipv_s1Vl ->
777                                (GHC.Base.$
778                                   @ (Compiler.Hoopl.Fuel.CheckingFuelMonad
779                                        OptimizationFuel.FuelMonad
780                                        (Compiler.Hoopl.Graph.Graph'
781                                           Compiler.Hoopl.Graph.Block
782                                           HooplNode.CmmNode
783                                           Compiler.Hoopl.Graph.C
784                                           Compiler.Hoopl.Graph.O))
785                                   @ (Data.Maybe.Maybe
786                                        (Compiler.Hoopl.Fuel.CheckingFuelMonad
787                                           OptimizationFuel.FuelMonad
788                                           (Compiler.Hoopl.Graph.Graph'
789                                              Compiler.Hoopl.Graph.Block
790                                              HooplNode.CmmNode
791                                              Compiler.Hoopl.Graph.C
792                                              Compiler.Hoopl.Graph.O)))
793                                   (Data.Maybe.Just
794                                      @ (Compiler.Hoopl.Fuel.CheckingFuelMonad
795                                           OptimizationFuel.FuelMonad
796                                           (Compiler.Hoopl.Graph.Graph'
797                                              Compiler.Hoopl.Graph.Block
798                                              HooplNode.CmmNode
799                                              Compiler.Hoopl.Graph.C
800                                              Compiler.Hoopl.Graph.O)))
801                                   (GHC.Base.$
802                                      @ (Compiler.Hoopl.Graph.Graph'
803                                           Compiler.Hoopl.Graph.Block
804                                           HooplNode.CmmNode
805                                           Compiler.Hoopl.Graph.C
806                                           Compiler.Hoopl.Graph.O)
807                                      @ (Compiler.Hoopl.Fuel.CheckingFuelMonad
808                                           OptimizationFuel.FuelMonad
809                                           (Compiler.Hoopl.Graph.Graph'
810                                              Compiler.Hoopl.Graph.Block
811                                              HooplNode.CmmNode
812                                              Compiler.Hoopl.Graph.C
813                                              Compiler.Hoopl.Graph.O))
814                                      (GHC.Base.return
815                                         @ (Compiler.Hoopl.Fuel.CheckingFuelMonad
816                                              OptimizationFuel.FuelMonad)
817                                         (ic_a1xa @ $co$_a1wz @ $co$_a1wA)
818                                         @ (Compiler.Hoopl.Graph.Graph'
819                                              Compiler.Hoopl.Graph.Block
820                                              HooplNode.CmmNode
821                                              Compiler.Hoopl.Graph.C
822                                              Compiler.Hoopl.Graph.O))
823                                      (Compiler.Hoopl.MkGraph.<*>
824                                         @ (Compiler.Hoopl.Graph.Graph' Compiler.Hoopl.Graph.Block)
825                                         Compiler.Hoopl.MkGraph.$fGraphRepGraph'
826                                         @ HooplNode.CmmNode
827                                         @ Compiler.Hoopl.Graph.C
828                                         @ Compiler.Hoopl.Graph.O
829                                         HooplNode.$fEdgesCmmNode
830                                         (Compiler.Hoopl.MkGraph.mkFirst
831                                            @ (Compiler.Hoopl.Graph.Graph'
832                                                 Compiler.Hoopl.Graph.Block)
833                                            Compiler.Hoopl.MkGraph.$fGraphRepGraph'
834                                            @ HooplNode.CmmNode
835                                            (wild_X1A
836                                             `cast` (HooplNode.CmmNode
837                                                       (trans
838                                                          (trans
839                                                             e_a1zK
840                                                             (trans
841                                                                $co$_a1wz Compiler.Hoopl.Graph.C))
842                                                          Compiler.Hoopl.Graph.C)
843                                                       (trans
844                                                          (trans
845                                                             x_a1zL
846                                                             (trans
847                                                                $co$_a1wA Compiler.Hoopl.Graph.O))
848                                                          Compiler.Hoopl.Graph.O)
849                                                     :: HooplNode.CmmNode e_a1zK x_a1zL
850                                                          ~
851                                                        HooplNode.CmmNode
852                                                          Compiler.Hoopl.Graph.C
853                                                          Compiler.Hoopl.Graph.O)))
854                                         (Compiler.Hoopl.MkGraph.mkMiddles
855                                            @ (Compiler.Hoopl.Graph.Graph'
856                                                 Compiler.Hoopl.Graph.Block)
857                                            Compiler.Hoopl.MkGraph.$fGraphRepGraph'
858                                            @ HooplNode.CmmNode
859                                            HooplNode.$fEdgesCmmNode
860                                            ds_d1N1))))
861                                `cast` (Data.Maybe.Maybe
862                                          (Compiler.Hoopl.Fuel.CheckingFuelMonad
863                                             OptimizationFuel.FuelMonad
864                                             (Compiler.Hoopl.Graph.Graph'
865                                                Compiler.Hoopl.Graph.Block
866                                                HooplNode.CmmNode
867                                                (trans
868                                                   (trans
869                                                      Compiler.Hoopl.Graph.C
870                                                      (sym
871                                                         (trans
872                                                            $co$_a1wz
873                                                            (sym Compiler.Hoopl.Graph.C))))
874                                                   e_a1zK)
875                                                (trans
876                                                   (trans
877                                                      Compiler.Hoopl.Graph.O
878                                                      (sym
879                                                         (trans
880                                                            $co$_a1wA
881                                                            (sym Compiler.Hoopl.Graph.O))))
882                                                   x_a1zL)))
883                                        :: Data.Maybe.Maybe
884                                             (Compiler.Hoopl.Fuel.CheckingFuelMonad
885                                                OptimizationFuel.FuelMonad
886                                                (Compiler.Hoopl.Graph.Graph'
887                                                   Compiler.Hoopl.Graph.Block
888                                                   HooplNode.CmmNode
889                                                   Compiler.Hoopl.Graph.C
890                                                   Compiler.Hoopl.Graph.O))
891                                             ~
892                                           Data.Maybe.Maybe
893                                             (Compiler.Hoopl.Fuel.CheckingFuelMonad
894                                                OptimizationFuel.FuelMonad
895                                                (Compiler.Hoopl.Graph.Graph'
896                                                   Compiler.Hoopl.Graph.Block
897                                                   HooplNode.CmmNode
898                                                   e_a1zK
899                                                   x_a1zL)))
900                            }
901                        };
902                      HooplNode.CmmAssign @ $co$_a1xd @ $co$_a1xe ds_d1Nn ds_d1No ->
903                        case ds_d1Nn of _ {
904                          CmmExpr.CmmLocal reg_a14t ->
905                            let {
906                              fail_d1NN :: GHC.Prim.State# GHC.Prim.RealWorld
907                                           -> Data.Maybe.Maybe
908                                                (Compiler.Hoopl.Fuel.CheckingFuelMonad
909                                                   OptimizationFuel.FuelMonad
910                                                   (Compiler.Hoopl.Graph.Graph'
911                                                      Compiler.Hoopl.Graph.Block
912                                                      HooplNode.CmmNode
913                                                      e_a1zK
914                                                      x_a1zL))
915                              LclId
916                              [Arity 1]
917                              fail_d1NN =
918                                \ _ ->
919                                  case CmmExpr.elemRegSet
920                                         reg_a14t
921                                         (CmmSpillReload.on_stack
922                                            (live_a13G
923                                             `cast` (trans
924                                                       (trans
925                                                          (Compiler.Hoopl.Dataflow.Fact
926                                                             x_a1zL CmmSpillReload.DualLive)
927                                                          (trans
928                                                             (Compiler.Hoopl.Dataflow.Fact
929                                                                $co$_a1xe CmmSpillReload.DualLive)
930                                                             (trans
931                                                                (Compiler.Hoopl.Dataflow.TFCo:R:FactOf
932                                                                   CmmSpillReload.DualLive)
933                                                                CmmSpillReload.DualLive)))
934                                                       CmmSpillReload.DualLive
935                                                     :: Compiler.Hoopl.Dataflow.Fact
936                                                          x_a1zL CmmSpillReload.DualLive
937                                                          ~
938                                                        CmmSpillReload.DualLive)))
939                                  of _ {
940                                    GHC.Bool.False ->
941                                      Data.Maybe.Nothing
942                                        @ (HooplCmm.HooplCmmReplGraph e_a1zK x_a1zL);
943                                    GHC.Bool.True ->
944                                      (GHC.Base.$
945                                         @ (Data.Maybe.Maybe
946                                              (Compiler.Hoopl.Fuel.CheckingFuelMonad
947                                                 OptimizationFuel.FuelMonad
948                                                 (Compiler.Hoopl.Graph.Graph'
949                                                    Compiler.Hoopl.Graph.Block
950                                                    HooplNode.CmmNode
951                                                    Compiler.Hoopl.Graph.O
952                                                    Compiler.Hoopl.Graph.O)))
953                                         @ (Data.Maybe.Maybe
954                                              (Compiler.Hoopl.Fuel.CheckingFuelMonad
955                                                 OptimizationFuel.FuelMonad
956                                                 (Compiler.Hoopl.Graph.Graph'
957                                                    Compiler.Hoopl.Graph.Block
958                                                    HooplNode.CmmNode
959                                                    Compiler.Hoopl.Graph.O
960                                                    Compiler.Hoopl.Graph.O)))
961                                         (\ (a_a165 :: Data.Maybe.Maybe
962                                                         (Compiler.Hoopl.Fuel.CheckingFuelMonad
963                                                            OptimizationFuel.FuelMonad
964                                                            (Compiler.Hoopl.Graph.Graph'
965                                                               Compiler.Hoopl.Graph.Block
966                                                               HooplNode.CmmNode
967                                                               Compiler.Hoopl.Graph.O
968                                                               Compiler.Hoopl.Graph.O))) ->
969                                            a_a165)
970                                         (GHC.Base.$
971                                            @ (Compiler.Hoopl.Fuel.CheckingFuelMonad
972                                                 OptimizationFuel.FuelMonad
973                                                 (Compiler.Hoopl.Graph.Graph'
974                                                    Compiler.Hoopl.Graph.Block
975                                                    HooplNode.CmmNode
976                                                    Compiler.Hoopl.Graph.O
977                                                    Compiler.Hoopl.Graph.O))
978                                            @ (Data.Maybe.Maybe
979                                                 (Compiler.Hoopl.Fuel.CheckingFuelMonad
980                                                    OptimizationFuel.FuelMonad
981                                                    (Compiler.Hoopl.Graph.Graph'
982                                                       Compiler.Hoopl.Graph.Block
983                                                       HooplNode.CmmNode
984                                                       Compiler.Hoopl.Graph.O
985                                                       Compiler.Hoopl.Graph.O)))
986                                            (Data.Maybe.Just
987                                               @ (Compiler.Hoopl.Fuel.CheckingFuelMonad
988                                                    OptimizationFuel.FuelMonad
989                                                    (Compiler.Hoopl.Graph.Graph'
990                                                       Compiler.Hoopl.Graph.Block
991                                                       HooplNode.CmmNode
992                                                       Compiler.Hoopl.Graph.O
993                                                       Compiler.Hoopl.Graph.O)))
994                                            (GHC.Base.$
995                                               @ (Compiler.Hoopl.Graph.Graph'
996                                                    Compiler.Hoopl.Graph.Block
997                                                    HooplNode.CmmNode
998                                                    Compiler.Hoopl.Graph.O
999                                                    Compiler.Hoopl.Graph.O)
1000                                               @ (Compiler.Hoopl.Fuel.CheckingFuelMonad
1001                                                    OptimizationFuel.FuelMonad
1002                                                    (Compiler.Hoopl.Graph.Graph'
1003                                                       Compiler.Hoopl.Graph.Block
1004                                                       HooplNode.CmmNode
1005                                                       Compiler.Hoopl.Graph.O
1006                                                       Compiler.Hoopl.Graph.O))
1007                                               (GHC.Base.return
1008                                                  @ (Compiler.Hoopl.Fuel.CheckingFuelMonad
1009                                                       OptimizationFuel.FuelMonad)
1010                                                  (ic_a1ye @ $co$_a1xd @ $co$_a1xe)
1011                                                  @ (Compiler.Hoopl.Graph.Graph'
1012                                                       Compiler.Hoopl.Graph.Block
1013                                                       HooplNode.CmmNode
1014                                                       Compiler.Hoopl.Graph.O
1015                                                       Compiler.Hoopl.Graph.O))
1016                                               (GHC.Base.$
1017                                                  @ [HooplNode.CmmNode
1018                                                       Compiler.Hoopl.Graph.O
1019                                                       Compiler.Hoopl.Graph.O]
1020                                                  @ (Compiler.Hoopl.Graph.Graph'
1021                                                       Compiler.Hoopl.Graph.Block
1022                                                       HooplNode.CmmNode
1023                                                       Compiler.Hoopl.Graph.O
1024                                                       Compiler.Hoopl.Graph.O)
1025                                                  (Compiler.Hoopl.MkGraph.mkMiddles
1026                                                     @ (Compiler.Hoopl.Graph.Graph'
1027                                                          Compiler.Hoopl.Graph.Block)
1028                                                     Compiler.Hoopl.MkGraph.$fGraphRepGraph'
1029                                                     @ HooplNode.CmmNode
1030                                                     HooplNode.$fEdgesCmmNode)
1031                                                  (GHC.Base.build
1032                                                     @ (HooplNode.CmmNode
1033                                                          Compiler.Hoopl.Graph.O
1034                                                          Compiler.Hoopl.Graph.O)
1035                                                     (\ (@ a_d1Na)
1036                                                        (c_d1Nb :: HooplNode.CmmNode
1037                                                                     Compiler.Hoopl.Graph.O
1038                                                                     Compiler.Hoopl.Graph.O
1039                                                                   -> a_d1Na
1040                                                                   -> a_d1Na)
1041                                                        (n_d1Nc :: a_d1Na) ->
1042                                                        c_d1Nb
1043                                                          (e_a13E
1044                                                           `cast` (HooplNode.CmmNode
1045                                                                     (trans
1046                                                                        (trans
1047                                                                           e_a1zK
1048                                                                           (trans
1049                                                                              $co$_a1xd
1050                                                                              Compiler.Hoopl.Graph.O))
1051                                                                        Compiler.Hoopl.Graph.O)
1052                                                                     (trans
1053                                                                        (trans
1054                                                                           x_a1zL
1055                                                                           (trans
1056                                                                              $co$_a1xe
1057                                                                              Compiler.Hoopl.Graph.O))
1058                                                                        Compiler.Hoopl.Graph.O)
1059                                                                   :: HooplNode.CmmNode
1060                                                                        e_a1zK x_a1zL
1061                                                                        ~
1062                                                                      HooplNode.CmmNode
1063                                                                        Compiler.Hoopl.Graph.O
1064                                                                        Compiler.Hoopl.Graph.O))
1065                                                          (c_d1Nb
1066                                                             (CmmSpillReload.spill reg_a14t)
1067                                                             n_d1Nc)))))))
1068                                      `cast` (Data.Maybe.Maybe
1069                                                (Compiler.Hoopl.Fuel.CheckingFuelMonad
1070                                                   OptimizationFuel.FuelMonad
1071                                                   (Compiler.Hoopl.Graph.Graph'
1072                                                      Compiler.Hoopl.Graph.Block
1073                                                      HooplNode.CmmNode
1074                                                      (trans
1075                                                         (trans
1076                                                            Compiler.Hoopl.Graph.O
1077                                                            (sym
1078                                                               (trans
1079                                                                  $co$_a1xd
1080                                                                  (sym Compiler.Hoopl.Graph.O))))
1081                                                         e_a1zK)
1082                                                      (trans
1083                                                         (trans
1084                                                            Compiler.Hoopl.Graph.O
1085                                                            (sym
1086                                                               (trans
1087                                                                  $co$_a1xe
1088                                                                  (sym Compiler.Hoopl.Graph.O))))
1089                                                         x_a1zL)))
1090                                              :: Data.Maybe.Maybe
1091                                                   (Compiler.Hoopl.Fuel.CheckingFuelMonad
1092                                                      OptimizationFuel.FuelMonad
1093                                                      (Compiler.Hoopl.Graph.Graph'
1094                                                         Compiler.Hoopl.Graph.Block
1095                                                         HooplNode.CmmNode
1096                                                         Compiler.Hoopl.Graph.O
1097                                                         Compiler.Hoopl.Graph.O))
1098                                                   ~
1099                                                 Data.Maybe.Maybe
1100                                                   (Compiler.Hoopl.Fuel.CheckingFuelMonad
1101                                                      OptimizationFuel.FuelMonad
1102                                                      (Compiler.Hoopl.Graph.Graph'
1103                                                         Compiler.Hoopl.Graph.Block
1104                                                         HooplNode.CmmNode
1105                                                         e_a1zK
1106                                                         x_a1zL)))
1107                                  } } in
1108                            case ds_d1No of _ {
1109                              __DEFAULT -> fail_d1NN GHC.Prim.realWorld#;
1110                              CmmExpr.CmmLoad ds_d1Np _ ->
1111                                case ds_d1Np of _ {
1112                                  __DEFAULT -> fail_d1NN GHC.Prim.realWorld#;
1113                                  CmmExpr.CmmStackSlot ds_d1Nr _ ->
1114                                    case ds_d1Nr of _ {
1115                                      CmmExpr.RegSlot reg'_a14u ->
1116                                        case GHC.Classes.==
1117                                               @ CmmExpr.LocalReg
1118                                               CmmExpr.$fEqLocalReg
1119                                               reg_a14t
1120                                               reg'_a14u
1121                                        of _ {
1122                                          GHC.Bool.False -> fail_d1NN GHC.Prim.realWorld#;
1123                                          GHC.Bool.True ->
1124                                            Data.Maybe.Nothing
1125                                              @ (HooplCmm.HooplCmmReplGraph e_a1zK x_a1zL)
1126                                        };
1127                                      CmmExpr.CallArea ipv_s1VQ -> fail_d1NN GHC.Prim.realWorld#
1128                                    }
1129                                }
1130                            };
1131                          CmmExpr.CmmGlobal ipv_s1VS ->
1132                            Data.Maybe.Nothing @ (HooplCmm.HooplCmmReplGraph e_a1zK x_a1zL)
1133                        };
1134                      HooplNode.CmmUnsafeForeignCall @ $co$_a1yU
1135                                                     @ $co$_a1yV
1136                                                     ds_d1Nh
1137                                                     fs_a14z
1138                                                     ds_d1Ni ->
1139                        let {
1140                          ds_d1Nd :: [HooplNode.CmmNode
1141                                        Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.O]
1142                          LclId
1143                          []
1144                          ds_d1Nd =
1145                            GHC.Base.++
1146                              @ (HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.O)
1147                              (GHC.Base.map
1148                                 @ CmmExpr.LocalReg
1149                                 @ (HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.O)
1150                                 CmmSpillReload.spill
1151                                 (GHC.List.filter
1152                                    @ CmmExpr.LocalReg
1153                                    (GHC.Base.flip
1154                                       @ CmmExpr.LocalReg
1155                                       @ CmmExpr.RegSet
1156                                       @ GHC.Bool.Bool
1157                                       CmmExpr.elemRegSet
1158                                       (CmmSpillReload.on_stack
1159                                          (live_a13G
1160                                           `cast` (trans
1161                                                     (trans
1162                                                        (Compiler.Hoopl.Dataflow.Fact
1163                                                           x_a1zL CmmSpillReload.DualLive)
1164                                                        (trans
1165                                                           (Compiler.Hoopl.Dataflow.Fact
1166                                                              $co$_a1yV CmmSpillReload.DualLive)
1167                                                           (trans
1168                                                              (Compiler.Hoopl.Dataflow.TFCo:R:FactOf
1169                                                                 CmmSpillReload.DualLive)
1170                                                              CmmSpillReload.DualLive)))
1171                                                     CmmSpillReload.DualLive
1172                                                   :: Compiler.Hoopl.Dataflow.Fact
1173                                                        x_a1zL CmmSpillReload.DualLive
1174                                                        ~
1175                                                      CmmSpillReload.DualLive))))
1176                                    fs_a14z))
1177                              (GHC.Base.map
1178                                 @ CmmExpr.LocalReg
1179                                 @ (HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.O)
1180                                 CmmSpillReload.reload
1181                                 (UniqSet.uniqSetToList
1182                                    @ CmmExpr.LocalReg
1183                                    (CmmSpillReload.kill
1184                                       @ CmmDecl.CmmFormals
1185                                       (case ic_a1zs @ $co$_a1yU @ $co$_a1yV
1186                                        of _ { ($dDefinerOfLocalRegs_a1zk, _) ->
1187                                        $dDefinerOfLocalRegs_a1zk
1188                                        })
1189                                       fs_a14z
1190                                       (CmmSpillReload.in_regs
1191                                          (live_a13G
1192                                           `cast` (trans
1193                                                     (trans
1194                                                        (Compiler.Hoopl.Dataflow.Fact
1195                                                           x_a1zL CmmSpillReload.DualLive)
1196                                                        (trans
1197                                                           (Compiler.Hoopl.Dataflow.Fact
1198                                                              $co$_a1yV CmmSpillReload.DualLive)
1199                                                           (trans
1200                                                              (Compiler.Hoopl.Dataflow.TFCo:R:FactOf
1201                                                                 CmmSpillReload.DualLive)
1202                                                              CmmSpillReload.DualLive)))
1203                                                     CmmSpillReload.DualLive
1204                                                   :: Compiler.Hoopl.Dataflow.Fact
1205                                                        x_a1zL CmmSpillReload.DualLive
1206                                                        ~
1207                                                      CmmSpillReload.DualLive)))))) } in
1208                        case ds_d1Nd of _ {
1209                          [] ->
1210                            Data.Maybe.Nothing @ (HooplCmm.HooplCmmReplGraph e_a1zK x_a1zL);
1211                          : ipv_s1Wx ipv_s1Wy ->
1212                            (GHC.Base.$
1213                               @ (Compiler.Hoopl.Fuel.CheckingFuelMonad
1214                                    OptimizationFuel.FuelMonad
1215                                    (Compiler.Hoopl.Graph.Graph'
1216                                       Compiler.Hoopl.Graph.Block
1217                                       HooplNode.CmmNode
1218                                       Compiler.Hoopl.Graph.O
1219                                       Compiler.Hoopl.Graph.O))
1220                               @ (Data.Maybe.Maybe
1221                                    (Compiler.Hoopl.Fuel.CheckingFuelMonad
1222                                       OptimizationFuel.FuelMonad
1223                                       (Compiler.Hoopl.Graph.Graph'
1224                                          Compiler.Hoopl.Graph.Block
1225                                          HooplNode.CmmNode
1226                                          Compiler.Hoopl.Graph.O
1227                                          Compiler.Hoopl.Graph.O)))
1228                               (Data.Maybe.Just
1229                                  @ (Compiler.Hoopl.Fuel.CheckingFuelMonad
1230                                       OptimizationFuel.FuelMonad
1231                                       (Compiler.Hoopl.Graph.Graph'
1232                                          Compiler.Hoopl.Graph.Block
1233                                          HooplNode.CmmNode
1234                                          Compiler.Hoopl.Graph.O
1235                                          Compiler.Hoopl.Graph.O)))
1236                               (GHC.Base.$
1237                                  @ (Compiler.Hoopl.Graph.Graph'
1238                                       Compiler.Hoopl.Graph.Block
1239                                       HooplNode.CmmNode
1240                                       Compiler.Hoopl.Graph.O
1241                                       Compiler.Hoopl.Graph.O)
1242                                  @ (Compiler.Hoopl.Fuel.CheckingFuelMonad
1243                                       OptimizationFuel.FuelMonad
1244                                       (Compiler.Hoopl.Graph.Graph'
1245                                          Compiler.Hoopl.Graph.Block
1246                                          HooplNode.CmmNode
1247                                          Compiler.Hoopl.Graph.O
1248                                          Compiler.Hoopl.Graph.O))
1249                                  (GHC.Base.return
1250                                     @ (Compiler.Hoopl.Fuel.CheckingFuelMonad
1251                                          OptimizationFuel.FuelMonad)
1252                                     (case ic_a1zs @ $co$_a1yU @ $co$_a1yV
1253                                      of _ { (_, $dMonad_a1zn) ->
1254                                      $dMonad_a1zn
1255                                      })
1256                                     @ (Compiler.Hoopl.Graph.Graph'
1257                                          Compiler.Hoopl.Graph.Block
1258                                          HooplNode.CmmNode
1259                                          Compiler.Hoopl.Graph.O
1260                                          Compiler.Hoopl.Graph.O))
1261                                  (Compiler.Hoopl.MkGraph.mkMiddles
1262                                     @ (Compiler.Hoopl.Graph.Graph' Compiler.Hoopl.Graph.Block)
1263                                     Compiler.Hoopl.MkGraph.$fGraphRepGraph'
1264                                     @ HooplNode.CmmNode
1265                                     HooplNode.$fEdgesCmmNode
1266                                     (GHC.Types.:
1267                                        @ (HooplNode.CmmNode
1268                                             Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.O)
1269                                        (e_a13E
1270                                         `cast` (HooplNode.CmmNode
1271                                                   (trans
1272                                                      (trans
1273                                                         e_a1zK
1274                                                         (trans $co$_a1yU Compiler.Hoopl.Graph.O))
1275                                                      Compiler.Hoopl.Graph.O)
1276                                                   (trans
1277                                                      (trans
1278                                                         x_a1zL
1279                                                         (trans $co$_a1yV Compiler.Hoopl.Graph.O))
1280                                                      Compiler.Hoopl.Graph.O)
1281                                                 :: HooplNode.CmmNode e_a1zK x_a1zL
1282                                                      ~
1283                                                    HooplNode.CmmNode
1284                                                      Compiler.Hoopl.Graph.O
1285                                                      Compiler.Hoopl.Graph.O))
1286                                        ds_d1Nd))))
1287                            `cast` (Data.Maybe.Maybe
1288                                      (Compiler.Hoopl.Fuel.CheckingFuelMonad
1289                                         OptimizationFuel.FuelMonad
1290                                         (Compiler.Hoopl.Graph.Graph'
1291                                            Compiler.Hoopl.Graph.Block
1292                                            HooplNode.CmmNode
1293                                            (trans
1294                                               (trans
1295                                                  Compiler.Hoopl.Graph.O
1296                                                  (sym
1297                                                     (trans
1298                                                        $co$_a1yU (sym Compiler.Hoopl.Graph.O))))
1299                                               e_a1zK)
1300                                            (trans
1301                                               (trans
1302                                                  Compiler.Hoopl.Graph.O
1303                                                  (sym
1304                                                     (trans
1305                                                        $co$_a1yV (sym Compiler.Hoopl.Graph.O))))
1306                                               x_a1zL)))
1307                                    :: Data.Maybe.Maybe
1308                                         (Compiler.Hoopl.Fuel.CheckingFuelMonad
1309                                            OptimizationFuel.FuelMonad
1310                                            (Compiler.Hoopl.Graph.Graph'
1311                                               Compiler.Hoopl.Graph.Block
1312                                               HooplNode.CmmNode
1313                                               Compiler.Hoopl.Graph.O
1314                                               Compiler.Hoopl.Graph.O))
1315                                         ~
1316                                       Data.Maybe.Maybe
1317                                         (Compiler.Hoopl.Fuel.CheckingFuelMonad
1318                                            OptimizationFuel.FuelMonad
1319                                            (Compiler.Hoopl.Graph.Graph'
1320                                               Compiler.Hoopl.Graph.Block
1321                                               HooplNode.CmmNode
1322                                               e_a1zK
1323                                               x_a1zL)))
1324                        }
1325                    })
1326             })))
1327
1328CmmSpillReload.dualLiveness :: BlockId.BlockSet
1329                               -> ZipCfg.LGraph ZipCfgCmmRep.Middle ZipCfgCmmRep.Last
1330                               -> OptimizationFuel.FuelMonad
1331                                    (BlockId.BlockEnv CmmSpillReload.DualLive)
1332LclIdX
1333[Arity 2]
1334CmmSpillReload.dualLiveness =
1335  \ (procPoints_a12B :: BlockId.BlockSet)
1336    (g_a12C :: ZipCfg.LGraph ZipCfgCmmRep.Middle ZipCfgCmmRep.Last) ->
1337    GHC.Base.$
1338      @ (OptimizationFuel.FuelMonad
1339           (ZipCfgCmmRep.CmmGraph, BlockId.BlockEnv CmmSpillReload.DualLive))
1340      @ (OptimizationFuel.FuelMonad
1341           (BlockId.BlockEnv CmmSpillReload.DualLive))
1342      (Control.Monad.liftM
1343         @ OptimizationFuel.FuelMonad
1344         @ (ZipCfgCmmRep.CmmGraph, BlockId.BlockEnv CmmSpillReload.DualLive)
1345         @ (BlockId.BlockEnv CmmSpillReload.DualLive)
1346         OptimizationFuel.$fMonadFuelMonad
1347         (Data.Tuple.snd
1348            @ ZipCfgCmmRep.CmmGraph
1349            @ (BlockId.BlockEnv CmmSpillReload.DualLive)))
1350      (GHC.Base.$
1351         @ (Compiler.Hoopl.Dataflow.BwdPass
1352              HooplCmm.HooplMonad HooplNode.CmmNode CmmSpillReload.DualLive)
1353         @ (OptimizationFuel.FuelMonad
1354              (ZipCfgCmmRep.CmmGraph, BlockId.BlockEnv CmmSpillReload.DualLive))
1355         (HooplCvt.hooplBwdZ
1356            @ CmmSpillReload.DualLive
1357            g_a12C
1358            (GHC.Types.[] @ (BlockId.BlockId, CmmSpillReload.DualLive)))
1359         (GHC.Base.$
1360            @ (Compiler.Hoopl.Dataflow.BwdTransfer
1361                 HooplNode.CmmNode CmmSpillReload.DualLive)
1362            @ (Compiler.Hoopl.Dataflow.BwdPass
1363                 HooplCmm.HooplMonad HooplNode.CmmNode CmmSpillReload.DualLive)
1364            (HooplUtils.analBwd
1365               @ CmmSpillReload.DualLive
1366               @ HooplCmm.HooplMonad
1367               CmmSpillReload.dualLiveLattice)
1368            (CmmSpillReload.dualLiveTransfers
1369               (ZipCfg.lg_entry @ ZipCfgCmmRep.Middle @ ZipCfgCmmRep.Last g_a12C)
1370               procPoints_a12B)))
1371
1372CmmSpillReload.removeDeadAssignmentsAndReloads :: BlockId.BlockSet
1373                                                  -> ZipCfg.LGraph
1374                                                       ZipCfgCmmRep.Middle ZipCfgCmmRep.Last
1375                                                  -> OptimizationFuel.FuelMonad
1376                                                       (ZipCfg.LGraph
1377                                                          ZipCfgCmmRep.Middle ZipCfgCmmRep.Last)
1378LclIdX
1379[Arity 2]
1380CmmSpillReload.removeDeadAssignmentsAndReloads =
1381  \ (procPoints_a15T :: BlockId.BlockSet)
1382    (g_a15U :: ZipCfg.LGraph ZipCfgCmmRep.Middle ZipCfgCmmRep.Last) ->
1383    let {
1384      ic_s1WZ :: forall e_a1HT x_a1HU.
1385                 (e_a1HT ~ Compiler.Hoopl.Graph.O,
1386                  x_a1HU ~ Compiler.Hoopl.Graph.O) =>
1387                 GHC.Base.Monad
1388                   (Compiler.Hoopl.Fuel.CheckingFuelMonad OptimizationFuel.FuelMonad)
1389      LclId
1390      []
1391      ic_s1WZ =
1392        \ (@ e_a1HT)
1393          (@ x_a1HU)
1394          (@ $co$_a1Ig::e_a1HT ~ Compiler.Hoopl.Graph.O)
1395          (@ $co$_a1Ih::x_a1HU ~ Compiler.Hoopl.Graph.O) ->
1396          Compiler.Hoopl.Fuel.$fMonadCheckingFuelMonad
1397            @ OptimizationFuel.FuelMonad OptimizationFuel.$fMonadFuelMonad } in
1398    let {
1399      rewrite_a15W :: forall e_a15X x_a15Y.
1400                      HooplNode.CmmNode e_a15X x_a15Y
1401                      -> Compiler.Hoopl.Dataflow.Fact x_a15Y CmmSpillReload.DualLive
1402                      -> Data.Maybe.Maybe (HooplCmm.HooplCmmReplGraph e_a15X x_a15Y)
1403      LclId
1404      [Arity 2]
1405      rewrite_a15W =
1406        \ (@ e_a1HT)
1407          (@ x_a1HU)
1408          (ds_X1QP :: HooplNode.CmmNode e_a1HT x_a1HU)
1409          (live_X17t :: Compiler.Hoopl.Dataflow.Fact
1410                          x_a1HU CmmSpillReload.DualLive) ->
1411          case ds_X1QP of _ {
1412            __DEFAULT ->
1413              Data.Maybe.Nothing @ (HooplCmm.HooplCmmReplGraph e_a1HT x_a1HU);
1414            HooplNode.CmmAssign @ $co$_a1Ig @ $co$_a1Ih ds_d1Po _ ->
1415              case ds_d1Po of _ {
1416                CmmExpr.CmmLocal reg'_a15Z ->
1417                  case GHC.Classes.not
1418                         (CmmExpr.elemRegSet
1419                            reg'_a15Z
1420                            (CmmSpillReload.in_regs
1421                               (live_X17t
1422                                `cast` (trans
1423                                          (trans
1424                                             (Compiler.Hoopl.Dataflow.Fact
1425                                                x_a1HU CmmSpillReload.DualLive)
1426                                             (trans
1427                                                (Compiler.Hoopl.Dataflow.Fact
1428                                                   $co$_a1Ih CmmSpillReload.DualLive)
1429                                                (trans
1430                                                   (Compiler.Hoopl.Dataflow.TFCo:R:FactOf
1431                                                      CmmSpillReload.DualLive)
1432                                                   CmmSpillReload.DualLive)))
1433                                          CmmSpillReload.DualLive
1434                                        :: Compiler.Hoopl.Dataflow.Fact
1435                                             x_a1HU CmmSpillReload.DualLive
1436                                             ~
1437                                           CmmSpillReload.DualLive))))
1438                  of _ {
1439                    GHC.Bool.False ->
1440                      Data.Maybe.Nothing @ (HooplCmm.HooplCmmReplGraph e_a1HT x_a1HU);
1441                    GHC.Bool.True ->
1442                      (GHC.Base.$
1443                         @ (Compiler.Hoopl.Fuel.CheckingFuelMonad
1444                              OptimizationFuel.FuelMonad
1445                              (Compiler.Hoopl.Graph.Graph'
1446                                 Compiler.Hoopl.Graph.Block
1447                                 HooplNode.CmmNode
1448                                 Compiler.Hoopl.Graph.O
1449                                 Compiler.Hoopl.Graph.O))
1450                         @ (Data.Maybe.Maybe
1451                              (Compiler.Hoopl.Fuel.CheckingFuelMonad
1452                                 OptimizationFuel.FuelMonad
1453                                 (Compiler.Hoopl.Graph.Graph'
1454                                    Compiler.Hoopl.Graph.Block
1455                                    HooplNode.CmmNode
1456                                    Compiler.Hoopl.Graph.O
1457                                    Compiler.Hoopl.Graph.O)))
1458                         (Data.Maybe.Just
1459                            @ (Compiler.Hoopl.Fuel.CheckingFuelMonad
1460                                 OptimizationFuel.FuelMonad
1461                                 (Compiler.Hoopl.Graph.Graph'
1462                                    Compiler.Hoopl.Graph.Block
1463                                    HooplNode.CmmNode
1464                                    Compiler.Hoopl.Graph.O
1465                                    Compiler.Hoopl.Graph.O)))
1466                         (GHC.Base.return
1467                            @ (Compiler.Hoopl.Fuel.CheckingFuelMonad
1468                                 OptimizationFuel.FuelMonad)
1469                            (ic_s1WZ @ e_a1HT @ x_a1HU @ $co$_a1Ig @ $co$_a1Ih)
1470                            @ (Compiler.Hoopl.Graph.Graph'
1471                                 Compiler.Hoopl.Graph.Block
1472                                 HooplNode.CmmNode
1473                                 Compiler.Hoopl.Graph.O
1474                                 Compiler.Hoopl.Graph.O)
1475                            (Compiler.Hoopl.MkGraph.emptyGraph
1476                               @ (Compiler.Hoopl.Graph.Graph' Compiler.Hoopl.Graph.Block)
1477                               Compiler.Hoopl.MkGraph.$fGraphRepGraph'
1478                               @ HooplNode.CmmNode)))
1479                      `cast` (Data.Maybe.Maybe
1480                                (Compiler.Hoopl.Fuel.CheckingFuelMonad
1481                                   OptimizationFuel.FuelMonad
1482                                   (Compiler.Hoopl.Graph.Graph'
1483                                      Compiler.Hoopl.Graph.Block
1484                                      HooplNode.CmmNode
1485                                      (trans
1486                                         (trans
1487                                            Compiler.Hoopl.Graph.O
1488                                            (sym (trans $co$_a1Ig (sym Compiler.Hoopl.Graph.O))))
1489                                         e_a1HT)
1490                                      (trans
1491                                         (trans
1492                                            Compiler.Hoopl.Graph.O
1493                                            (sym (trans $co$_a1Ih (sym Compiler.Hoopl.Graph.O))))
1494                                         x_a1HU)))
1495                              :: Data.Maybe.Maybe
1496                                   (Compiler.Hoopl.Fuel.CheckingFuelMonad
1497                                      OptimizationFuel.FuelMonad
1498                                      (Compiler.Hoopl.Graph.Graph'
1499                                         Compiler.Hoopl.Graph.Block
1500                                         HooplNode.CmmNode
1501                                         Compiler.Hoopl.Graph.O
1502                                         Compiler.Hoopl.Graph.O))
1503                                   ~
1504                                 Data.Maybe.Maybe
1505                                   (Compiler.Hoopl.Fuel.CheckingFuelMonad
1506                                      OptimizationFuel.FuelMonad
1507                                      (Compiler.Hoopl.Graph.Graph'
1508                                         Compiler.Hoopl.Graph.Block
1509                                         HooplNode.CmmNode
1510                                         e_a1HT
1511                                         x_a1HU)))
1512                  };
1513                CmmExpr.CmmGlobal ipv_s1WW ->
1514                  Data.Maybe.Nothing @ (HooplCmm.HooplCmmReplGraph e_a1HT x_a1HU)
1515              }
1516          } } in
1517    GHC.Base.$
1518      @ (OptimizationFuel.FuelMonad
1519           (ZipCfgCmmRep.CmmGraph, BlockId.BlockEnv CmmSpillReload.DualLive))
1520      @ (OptimizationFuel.FuelMonad ZipCfgCmmRep.CmmGraph)
1521      (Control.Monad.liftM
1522         @ OptimizationFuel.FuelMonad
1523         @ (ZipCfgCmmRep.CmmGraph, BlockId.BlockEnv CmmSpillReload.DualLive)
1524         @ ZipCfgCmmRep.CmmGraph
1525         OptimizationFuel.$fMonadFuelMonad
1526         (Data.Tuple.fst
1527            @ ZipCfgCmmRep.CmmGraph
1528            @ (BlockId.BlockEnv CmmSpillReload.DualLive)))
1529      (GHC.Base.$
1530         @ (Compiler.Hoopl.Dataflow.BwdPass
1531              HooplCmm.HooplMonad HooplNode.CmmNode CmmSpillReload.DualLive)
1532         @ (OptimizationFuel.FuelMonad
1533              (ZipCfgCmmRep.CmmGraph, BlockId.BlockEnv CmmSpillReload.DualLive))
1534         (HooplCvt.hooplBwdZ
1535            @ CmmSpillReload.DualLive
1536            g_a15U
1537            (GHC.Types.[] @ (BlockId.BlockId, CmmSpillReload.DualLive)))
1538         (HooplUtils.analRewBwd
1539            @ CmmSpillReload.DualLive
1540            @ HooplCmm.HooplMonad
1541            CmmSpillReload.dualLiveLattice
1542            (CmmSpillReload.dualLiveTransfers
1543               (ZipCfg.lg_entry @ ZipCfgCmmRep.Middle @ ZipCfgCmmRep.Last g_a15U)
1544               procPoints_a15T)
1545            (Compiler.Hoopl.Combinators.deepBwdRw'
1546               @ (Compiler.Hoopl.Fuel.CheckingFuelMonad
1547                    OptimizationFuel.FuelMonad)
1548               @ HooplNode.CmmNode
1549               @ CmmSpillReload.DualLive
1550               rewrite_a15W)))
1551
1552$dMonad_a1t7 :: GHC.Base.Monad HooplCmm.HooplMonad
1553LclId
1554[]
1555$dMonad_a1t7 =
1556  Compiler.Hoopl.Fuel.$fMonadCheckingFuelMonad
1557    @ OptimizationFuel.FuelMonad OptimizationFuel.$fMonadFuelMonad
1558
1559add_a14P :: forall t_a1mp.
1560            t_a1mp
1561            -> Compiler.Hoopl.Dataflow.OldFact CmmSpillReload.AvailRegs
1562            -> Compiler.Hoopl.Dataflow.NewFact CmmSpillReload.AvailRegs
1563            -> (Compiler.Hoopl.Dataflow.ChangeFlag, CmmSpillReload.AvailRegs)
1564LclId
1565[Arity 3]
1566add_a14P =
1567  \ (@ t_a1mp)
1568    _
1569    (ds_d1MW :: Compiler.Hoopl.Dataflow.OldFact
1570                  CmmSpillReload.AvailRegs)
1571    (ds_d1MX :: Compiler.Hoopl.Dataflow.NewFact
1572                  CmmSpillReload.AvailRegs) ->
1573    let {
1574      join_a14S :: CmmSpillReload.AvailRegs
1575      LclId
1576      []
1577      join_a14S =
1578        case ds_d1MX
1579             `cast` (Compiler.Hoopl.Dataflow.NTCo:NewFact
1580                       CmmSpillReload.AvailRegs
1581                     :: Compiler.Hoopl.Dataflow.NewFact CmmSpillReload.AvailRegs
1582                          ~
1583                        CmmSpillReload.AvailRegs)
1584        of _ {
1585          CmmSpillReload.UniverseMinus s_a14T ->
1586            case ds_d1MW
1587                 `cast` (Compiler.Hoopl.Dataflow.NTCo:OldFact
1588                           CmmSpillReload.AvailRegs
1589                         :: Compiler.Hoopl.Dataflow.OldFact CmmSpillReload.AvailRegs
1590                              ~
1591                            CmmSpillReload.AvailRegs)
1592            of _ {
1593              CmmSpillReload.UniverseMinus s'_a14U ->
1594                CmmSpillReload.UniverseMinus (CmmExpr.plusRegSet s_a14T s'_a14U);
1595              CmmSpillReload.AvailRegs s'_a150 ->
1596                CmmSpillReload.AvailRegs (CmmExpr.minusRegSet s'_a150 s_a14T)
1597            };
1598          CmmSpillReload.AvailRegs s_a14V ->
1599            case ds_d1MW
1600                 `cast` (Compiler.Hoopl.Dataflow.NTCo:OldFact
1601                           CmmSpillReload.AvailRegs
1602                         :: Compiler.Hoopl.Dataflow.OldFact CmmSpillReload.AvailRegs
1603                              ~
1604                            CmmSpillReload.AvailRegs)
1605            of _ {
1606              CmmSpillReload.UniverseMinus s'_a14Y ->
1607                CmmSpillReload.AvailRegs (CmmExpr.minusRegSet s_a14V s'_a14Y);
1608              CmmSpillReload.AvailRegs s'_a14W ->
1609                CmmSpillReload.AvailRegs (CmmExpr.timesRegSet s_a14V s'_a14W)
1610            }
1611        } } in
1612    case case join_a14S of _ {
1613           CmmSpillReload.UniverseMinus ds_d1MF ->
1614             case ds_d1MW
1615                  `cast` (Compiler.Hoopl.Dataflow.NTCo:OldFact
1616                            CmmSpillReload.AvailRegs
1617                          :: Compiler.Hoopl.Dataflow.OldFact CmmSpillReload.AvailRegs
1618                               ~
1619                             CmmSpillReload.AvailRegs)
1620             of _ {
1621               CmmSpillReload.UniverseMinus s'_a154 ->
1622                 GHC.Classes.>
1623                   @ GHC.Types.Int
1624                   GHC.Base.$fOrdInt
1625                   (UniqSet.sizeUniqSet @ CmmExpr.LocalReg ds_d1MF)
1626                   (UniqSet.sizeUniqSet @ CmmExpr.LocalReg s'_a154);
1627               CmmSpillReload.AvailRegs _ -> GHC.Bool.False
1628             };
1629           CmmSpillReload.AvailRegs ds_d1MD ->
1630             case ds_d1MW
1631                  `cast` (Compiler.Hoopl.Dataflow.NTCo:OldFact
1632                            CmmSpillReload.AvailRegs
1633                          :: Compiler.Hoopl.Dataflow.OldFact CmmSpillReload.AvailRegs
1634                               ~
1635                             CmmSpillReload.AvailRegs)
1636             of _ {
1637               CmmSpillReload.UniverseMinus _ -> GHC.Bool.True;
1638               CmmSpillReload.AvailRegs s'_a152 ->
1639                 GHC.Classes.<
1640                   @ GHC.Types.Int
1641                   GHC.Base.$fOrdInt
1642                   (UniqSet.sizeUniqSet @ CmmExpr.LocalReg ds_d1MD)
1643                   (UniqSet.sizeUniqSet @ CmmExpr.LocalReg s'_a152)
1644             }
1645         }
1646    of _ {
1647      GHC.Bool.False ->
1648        (Compiler.Hoopl.Dataflow.NoChange,
1649         ds_d1MW
1650         `cast` (Compiler.Hoopl.Dataflow.NTCo:OldFact
1651                   CmmSpillReload.AvailRegs
1652                 :: Compiler.Hoopl.Dataflow.OldFact CmmSpillReload.AvailRegs
1653                      ~
1654                    CmmSpillReload.AvailRegs));
1655      GHC.Bool.True -> (Compiler.Hoopl.Dataflow.SomeChange, join_a14S)
1656    }
1657
1658empty_a14O :: CmmSpillReload.AvailRegs
1659LclId
1660[]
1661empty_a14O = CmmSpillReload.UniverseMinus CmmExpr.emptyRegSet
1662
1663a_s1X3 :: [GHC.Types.Char]
1664LclId
1665[]
1666a_s1X3 = GHC.Base.unpackCString# "register gotten from reloads"
1667
1668CmmSpillReload.availRegsLattice :: Compiler.Hoopl.Dataflow.DataflowLattice
1669                                     CmmSpillReload.AvailRegs
1670LclIdX
1671[]
1672CmmSpillReload.availRegsLattice =
1673  Compiler.Hoopl.Dataflow.DataflowLattice
1674    @ CmmSpillReload.AvailRegs
1675    a_s1X3
1676    empty_a14O
1677    (add_a14P @ Compiler.Hoopl.Label.Label)
1678    GHC.Bool.False
1679
1680CmmSpillReload.availReloadsTransfer :: Compiler.Hoopl.Dataflow.FwdTransfer
1681                                         HooplNode.CmmNode CmmSpillReload.AvailRegs
1682LclId
1683[]
1684CmmSpillReload.availReloadsTransfer =
1685  Compiler.Hoopl.Dataflow.mkFTransfer
1686    @ HooplNode.CmmNode
1687    @ CmmSpillReload.AvailRegs
1688    (GHC.Base.flip
1689       @ CmmSpillReload.AvailRegs
1690       @ (HooplNode.CmmNode Compiler.Hoopl.Graph.C Compiler.Hoopl.Graph.O)
1691       @ CmmSpillReload.AvailRegs
1692       (GHC.Base.const
1693          @ CmmSpillReload.AvailRegs
1694          @ (HooplNode.CmmNode
1695               Compiler.Hoopl.Graph.C Compiler.Hoopl.Graph.O)))
1696    (\ (ds_d1KF :: HooplNode.CmmNode
1697                     Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.O)
1698       (avail_a15k :: CmmSpillReload.AvailRegs) ->
1699       case ds_d1KF of _ {
1700         __DEFAULT ->
1701           Control.Exception.Base.patError
1702             @ CmmSpillReload.AvailRegs
1703             "compiler/cmm/CmmSpillReload.hs:(246,0)-(254,49)|function middleAvail";
1704         HooplNode.CmmComment @ $coO_a1lA @ $coO_a1lB _ -> avail_a15k;
1705         HooplNode.CmmAssign @ $coO_a1lf @ $coO_a1lg ds_d1Mb ds_d1Mc ->
1706           case ds_d1Mb of _ {
1707             CmmExpr.CmmLocal r_a15i ->
1708               case ds_d1Mc of _ {
1709                 __DEFAULT ->
1710                   CmmExpr.foldRegsDefd
1711                     @ CmmExpr.CmmReg
1712                     CmmExpr.$fDefinerOfLocalRegsCmmReg
1713                     @ CmmSpillReload.AvailRegs
1714                     CmmSpillReload.delFromAvail
1715                     avail_a15k
1716                     ds_d1Mb;
1717                 CmmExpr.CmmLoad l_a15j _ ->
1718                   case CmmExpr.isStackSlotOf l_a15j r_a15i of _ {
1719                     GHC.Bool.False ->
1720                       CmmExpr.foldRegsDefd
1721                         @ CmmExpr.CmmReg
1722                         CmmExpr.$fDefinerOfLocalRegsCmmReg
1723                         @ CmmSpillReload.AvailRegs
1724                         CmmSpillReload.delFromAvail
1725                         avail_a15k
1726                         ds_d1Mb;
1727                     GHC.Bool.True ->
1728                       case avail_a15k of _ {
1729                         CmmSpillReload.UniverseMinus s_a155 ->
1730                           CmmSpillReload.UniverseMinus
1731                             (CmmExpr.deleteFromRegSet s_a155 r_a15i);
1732                         CmmSpillReload.AvailRegs s_a157 ->
1733                           CmmSpillReload.AvailRegs (CmmExpr.extendRegSet s_a157 r_a15i)
1734                       }
1735                   }
1736               };
1737             CmmExpr.CmmGlobal ipv_s1Xo ->
1738               CmmExpr.foldRegsDefd
1739                 @ CmmExpr.CmmReg
1740                 CmmExpr.$fDefinerOfLocalRegsCmmReg
1741                 @ CmmSpillReload.AvailRegs
1742                 CmmSpillReload.delFromAvail
1743                 avail_a15k
1744                 ds_d1Mb
1745           };
1746         HooplNode.CmmStore @ $coO_a1lo @ $coO_a1lp l_a15n ds_d1Mf ->
1747           case ds_d1Mf of _ {
1748             __DEFAULT ->
1749               case l_a15n of _ {
1750                 __DEFAULT -> avail_a15k;
1751                 CmmExpr.CmmStackSlot ds_d1Mh _ ->
1752                   case ds_d1Mh of _ {
1753                     CmmExpr.RegSlot r_a15q ->
1754                       CmmSpillReload.delFromAvail avail_a15k r_a15q;
1755                     CmmExpr.CallArea ipv_s1Xr -> avail_a15k
1756                   }
1757               };
1758             CmmExpr.CmmReg ds_d1Mg ->
1759               case ds_d1Mg of _ {
1760                 CmmExpr.CmmLocal r_a15o ->
1761                   case CmmExpr.isStackSlotOf l_a15n r_a15o of _ {
1762                     GHC.Bool.False ->
1763                       case l_a15n of _ {
1764                         __DEFAULT -> avail_a15k;
1765                         CmmExpr.CmmStackSlot ds_d1Mh _ ->
1766                           case ds_d1Mh of _ {
1767                             CmmExpr.RegSlot r_a15q ->
1768                               CmmSpillReload.delFromAvail avail_a15k r_a15q;
1769                             CmmExpr.CallArea ipv_s1Xr -> avail_a15k
1770                           }
1771                       };
1772                     GHC.Bool.True -> avail_a15k
1773                   };
1774                 CmmExpr.CmmGlobal ipv_s1Xu ->
1775                   case l_a15n of _ {
1776                     __DEFAULT -> avail_a15k;
1777                     CmmExpr.CmmStackSlot ds_d1Mh _ ->
1778                       case ds_d1Mh of _ {
1779                         CmmExpr.RegSlot r_a15q ->
1780                           CmmSpillReload.delFromAvail avail_a15k r_a15q;
1781                         CmmExpr.CallArea ipv_s1Xr -> avail_a15k
1782                       }
1783                   }
1784               }
1785           };
1786         HooplNode.CmmUnsafeForeignCall @ $coO_a1ly @ $coO_a1lz _ _ _ ->
1787           CmmSpillReload.AvailRegs CmmExpr.emptyRegSet
1788       })
1789    (GHC.Base..
1790       @ (CmmSpillReload.AvailRegs
1791          -> [(Compiler.Hoopl.Label.Label, CmmSpillReload.AvailRegs)])
1792       @ (CmmSpillReload.AvailRegs
1793          -> Compiler.Hoopl.Label.FactBase CmmSpillReload.AvailRegs)
1794       @ (HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.C)
1795       (GHC.Base..
1796          @ [(Compiler.Hoopl.Label.Label, CmmSpillReload.AvailRegs)]
1797          @ (Compiler.Hoopl.Label.FactBase CmmSpillReload.AvailRegs)
1798          @ CmmSpillReload.AvailRegs
1799          (Compiler.Hoopl.Label.mkFactBase @ CmmSpillReload.AvailRegs))
1800       (\ (ds_d1Kf :: HooplNode.CmmNode
1801                        Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.C)
1802          (ds_d1Kg :: CmmSpillReload.AvailRegs) ->
1803          let {
1804            fail_d1Kr :: GHC.Prim.State# GHC.Prim.RealWorld
1805                         -> [(Compiler.Hoopl.Label.Label, CmmSpillReload.AvailRegs)]
1806            LclId
1807            [Arity 1]
1808            fail_d1Kr =
1809              \ _ ->
1810                GHC.Base.$
1811                  @ [Compiler.Hoopl.Label.Label]
1812                  @ [(Compiler.Hoopl.Label.Label, CmmSpillReload.AvailRegs)]
1813                  (GHC.Base.map
1814                     @ Compiler.Hoopl.Label.Label
1815                     @ (Compiler.Hoopl.Label.Label, CmmSpillReload.AvailRegs)
1816                     (\ (id_a15y :: Compiler.Hoopl.Label.Label) -> (id_a15y, ds_d1Kg)))
1817                  (Compiler.Hoopl.Graph.successors
1818                     @ HooplNode.CmmNode
1819                     HooplNode.$fEdgesCmmNode
1820                     @ Compiler.Hoopl.Graph.O
1821                     ds_d1Kf) } in
1822          case ds_d1Kf of _ {
1823            __DEFAULT -> fail_d1Kr GHC.Prim.realWorld#;
1824            HooplNode.CmmCall @ $coO_a1iP @ $coC_a1iQ _ ds_d1Kn _ _ _ ->
1825              case ds_d1Kn of _ {
1826                Data.Maybe.Nothing -> fail_d1Kr GHC.Prim.realWorld#;
1827                Data.Maybe.Just k_a15u ->
1828                  GHC.Base.build
1829                    @ (Compiler.Hoopl.Label.Label, CmmSpillReload.AvailRegs)
1830                    (\ (@ a_d1K8)
1831                       (c_d1K9 :: (Compiler.Hoopl.Label.Label, CmmSpillReload.AvailRegs)
1832                                  -> a_d1K8
1833                                  -> a_d1K8)
1834                       (n_d1Ka :: a_d1K8) ->
1835                       c_d1K9
1836                         (k_a15u, CmmSpillReload.AvailRegs CmmExpr.emptyRegSet) n_d1Ka)
1837              };
1838            HooplNode.CmmForeignCall @ $coO_a1jK @ $coC_a1jL _ _ _ ds_d1Kk _ ->
1839              GHC.Base.build
1840                @ (Compiler.Hoopl.Label.Label, CmmSpillReload.AvailRegs)
1841                (\ (@ a_d1Kc)
1842                   (c_d1Kd :: (Compiler.Hoopl.Label.Label, CmmSpillReload.AvailRegs)
1843                              -> a_d1Kc
1844                              -> a_d1Kc)
1845                   (n_d1Ke :: a_d1Kc) ->
1846                   c_d1Kd
1847                     (ds_d1Kk, CmmSpillReload.AvailRegs CmmExpr.emptyRegSet) n_d1Ke)
1848          }))
1849
1850CmmSpillReload.cmmAvailableReloads :: ZipCfg.LGraph
1851                                        ZipCfgCmmRep.Middle ZipCfgCmmRep.Last
1852                                      -> OptimizationFuel.FuelMonad
1853                                           (BlockId.BlockEnv CmmSpillReload.AvailRegs)
1854LclIdX
1855[Arity 1]
1856CmmSpillReload.cmmAvailableReloads =
1857  \ (g_a15h :: ZipCfg.LGraph
1858                 ZipCfgCmmRep.Middle ZipCfgCmmRep.Last) ->
1859    GHC.Base.$
1860      @ (OptimizationFuel.FuelMonad
1861           (ZipCfgCmmRep.CmmGraph, BlockId.BlockEnv CmmSpillReload.AvailRegs))
1862      @ (OptimizationFuel.FuelMonad
1863           (BlockId.BlockEnv CmmSpillReload.AvailRegs))
1864      (Control.Monad.liftM
1865         @ OptimizationFuel.FuelMonad
1866         @ (ZipCfgCmmRep.CmmGraph,
1867            BlockId.BlockEnv CmmSpillReload.AvailRegs)
1868         @ (BlockId.BlockEnv CmmSpillReload.AvailRegs)
1869         OptimizationFuel.$fMonadFuelMonad
1870         (Data.Tuple.snd
1871            @ ZipCfgCmmRep.CmmGraph
1872            @ (BlockId.BlockEnv CmmSpillReload.AvailRegs)))
1873      (GHC.Base.$
1874         @ (Compiler.Hoopl.Dataflow.FwdPass
1875              HooplCmm.HooplMonad HooplNode.CmmNode CmmSpillReload.AvailRegs)
1876         @ (OptimizationFuel.FuelMonad
1877              (ZipCfgCmmRep.CmmGraph, BlockId.BlockEnv CmmSpillReload.AvailRegs))
1878         (HooplCvt.hooplFwdZ
1879            @ CmmSpillReload.AvailRegs
1880            g_a15h
1881            (HooplCvt.botOnEntryZ
1882               @ CmmSpillReload.AvailRegs g_a15h CmmSpillReload.availRegsLattice))
1883         (HooplUtils.analFwd
1884            @ CmmSpillReload.AvailRegs
1885            @ HooplCmm.HooplMonad
1886            CmmSpillReload.availRegsLattice
1887            CmmSpillReload.availReloadsTransfer))
1888
1889CmmSpillReload.insertLateReloads :: ZipCfg.LGraph
1890                                      ZipCfgCmmRep.Middle ZipCfgCmmRep.Last
1891                                    -> OptimizationFuel.FuelMonad
1892                                         (ZipCfg.LGraph ZipCfgCmmRep.Middle ZipCfgCmmRep.Last)
1893LclIdX
1894[Arity 1]
1895CmmSpillReload.insertLateReloads =
1896  \ (g_a15z :: ZipCfg.LGraph
1897                 ZipCfgCmmRep.Middle ZipCfgCmmRep.Last) ->
1898    let {
1899      maybe_reload_before_a15E :: forall e_a1pA
1900                                         (m_a1pR :: * -> *)
1901                                         (g_a1pV :: (* -> * -> *) -> * -> * -> *)
1902                                         x_a1pW.
1903                                  (CmmExpr.UserOfLocalRegs e_a1pA,
1904                                   GHC.Base.Monad m_a1pR,
1905                                   Compiler.Hoopl.MkGraph.GraphRep g_a1pV) =>
1906                                  CmmSpillReload.AvailRegs
1907                                  -> e_a1pA
1908                                  -> g_a1pV HooplNode.CmmNode Compiler.Hoopl.Graph.O x_a1pW
1909                                  -> Data.Maybe.Maybe
1910                                       (m_a1pR (g_a1pV HooplNode.CmmNode Compiler.Hoopl.Graph.O x_a1pW))
1911      LclId
1912      [Arity 6]
1913      maybe_reload_before_a15E =
1914        \ (@ e_a1pA)
1915          (@ m_a1pR::* -> *)
1916          (@ g_a1pV::(* -> * -> *) -> * -> * -> *)
1917          (@ x_a1pW)
1918          ($dUserOfLocalRegs_a1pZ :: CmmExpr.UserOfLocalRegs e_a1pA)
1919          ($dMonad_a1q0 :: GHC.Base.Monad m_a1pR)
1920          ($dGraphRep_a1q1 :: Compiler.Hoopl.MkGraph.GraphRep g_a1pV)
1921          (eta_B3 :: CmmSpillReload.AvailRegs)
1922          (eta_B2 :: e_a1pA)
1923          (eta_B1 :: g_a1pV HooplNode.CmmNode Compiler.Hoopl.Graph.O x_a1pW) ->
1924          let {
1925            reloadTail_a1pX :: UniqSet.UniqSet CmmExpr.LocalReg
1926                               -> g_a1pV HooplNode.CmmNode Compiler.Hoopl.Graph.O x_a1pW
1927                               -> g_a1pV HooplNode.CmmNode Compiler.Hoopl.Graph.O x_a1pW
1928            LclId
1929            [Arity 2]
1930            reloadTail_a1pX =
1931              \ (regset_a15O :: UniqSet.UniqSet CmmExpr.LocalReg)
1932                (t_a15P :: g_a1pV HooplNode.CmmNode Compiler.Hoopl.Graph.O x_a1pW) ->
1933                GHC.Base.$
1934                  @ [CmmExpr.LocalReg]
1935                  @ (g_a1pV HooplNode.CmmNode Compiler.Hoopl.Graph.O x_a1pW)
1936                  (GHC.List.foldl
1937                     @ (g_a1pV HooplNode.CmmNode Compiler.Hoopl.Graph.O x_a1pW)
1938                     @ CmmExpr.LocalReg
1939                     (\ (t_a15R :: g_a1pV HooplNode.CmmNode Compiler.Hoopl.Graph.O x_a1pW)
1940                        (r_a15S :: CmmExpr.LocalReg) ->
1941                        Compiler.Hoopl.MkGraph.<*>
1942                          @ g_a1pV
1943                          $dGraphRep_a1q1
1944                          @ HooplNode.CmmNode
1945                          @ Compiler.Hoopl.Graph.O
1946                          @ x_a1pW
1947                          HooplNode.$fEdgesCmmNode
1948                          (Compiler.Hoopl.MkGraph.mkMiddle
1949                             @ g_a1pV
1950                             $dGraphRep_a1q1
1951                             @ HooplNode.CmmNode
1952                             (CmmSpillReload.reload r_a15S))
1953                          t_a15R)
1954                     t_a15P)
1955                  (UniqSet.uniqSetToList @ CmmExpr.LocalReg regset_a15O) } in
1956          let {
1957            return_a1pS :: forall a_a1pO. a_a1pO -> m_a1pR a_a1pO
1958            LclId
1959            []
1960            return_a1pS = GHC.Base.return @ m_a1pR $dMonad_a1q0 } in
1961          let {
1962            used_a15N :: CmmExpr.RegSet
1963            LclId
1964            []
1965            used_a15N =
1966              CmmExpr.filterRegsUsed
1967                @ e_a1pA
1968                $dUserOfLocalRegs_a1pZ
1969                (\ (r_a15e :: CmmExpr.LocalReg) ->
1970                   case eta_B3 of _ {
1971                     CmmSpillReload.UniverseMinus s_a15d ->
1972                       GHC.Base.$
1973                         @ GHC.Bool.Bool
1974                         @ GHC.Bool.Bool
1975                         GHC.Classes.not
1976                         (CmmExpr.elemRegSet r_a15e s_a15d);
1977                     CmmSpillReload.AvailRegs s_a15f -> CmmExpr.elemRegSet r_a15e s_a15f
1978                   })
1979                eta_B2 } in
1980          case UniqSet.isEmptyUniqSet @ CmmExpr.LocalReg used_a15N of _ {
1981            GHC.Bool.False ->
1982              GHC.Base.$
1983                @ (m_a1pR (g_a1pV HooplNode.CmmNode Compiler.Hoopl.Graph.O x_a1pW))
1984                @ (Data.Maybe.Maybe
1985                     (m_a1pR (g_a1pV HooplNode.CmmNode Compiler.Hoopl.Graph.O x_a1pW)))
1986                (Data.Maybe.Just
1987                   @ (m_a1pR (g_a1pV HooplNode.CmmNode Compiler.Hoopl.Graph.O x_a1pW)))
1988                (GHC.Base.$
1989                   @ (g_a1pV HooplNode.CmmNode Compiler.Hoopl.Graph.O x_a1pW)
1990                   @ (m_a1pR (g_a1pV HooplNode.CmmNode Compiler.Hoopl.Graph.O x_a1pW))
1991                   (return_a1pS
1992                      @ (g_a1pV HooplNode.CmmNode Compiler.Hoopl.Graph.O x_a1pW))
1993                   (reloadTail_a1pX used_a15N eta_B1));
1994            GHC.Bool.True ->
1995              Data.Maybe.Nothing
1996                @ (m_a1pR (g_a1pV HooplNode.CmmNode Compiler.Hoopl.Graph.O x_a1pW))
1997          } } in
1998    GHC.Base.$
1999      @ (OptimizationFuel.FuelMonad
2000           (ZipCfgCmmRep.CmmGraph, BlockId.BlockEnv CmmSpillReload.AvailRegs))
2001      @ (OptimizationFuel.FuelMonad ZipCfgCmmRep.CmmGraph)
2002      (Control.Monad.liftM
2003         @ OptimizationFuel.FuelMonad
2004         @ (ZipCfgCmmRep.CmmGraph,
2005            BlockId.BlockEnv CmmSpillReload.AvailRegs)
2006         @ ZipCfgCmmRep.CmmGraph
2007         OptimizationFuel.$fMonadFuelMonad
2008         (Data.Tuple.fst
2009            @ ZipCfgCmmRep.CmmGraph
2010            @ (BlockId.BlockEnv CmmSpillReload.AvailRegs)))
2011      (GHC.Base.$
2012         @ (Compiler.Hoopl.Dataflow.FwdPass
2013              HooplCmm.HooplMonad HooplNode.CmmNode CmmSpillReload.AvailRegs)
2014         @ (OptimizationFuel.FuelMonad
2015              (ZipCfgCmmRep.CmmGraph, BlockId.BlockEnv CmmSpillReload.AvailRegs))
2016         (HooplCvt.hooplFwdZ
2017            @ CmmSpillReload.AvailRegs
2018            g_a15z
2019            (HooplCvt.botOnEntryZ
2020               @ CmmSpillReload.AvailRegs g_a15z CmmSpillReload.availRegsLattice))
2021         (HooplUtils.analRewFwd
2022            @ CmmSpillReload.AvailRegs
2023            @ HooplCmm.HooplMonad
2024            CmmSpillReload.availRegsLattice
2025            CmmSpillReload.availReloadsTransfer
2026            (Compiler.Hoopl.Combinators.shallowFwdRw
2027               @ HooplCmm.HooplMonad
2028               @ HooplNode.CmmNode
2029               @ CmmSpillReload.AvailRegs
2030               (\ _ _ ->
2031                  Data.Maybe.Nothing
2032                    @ (HooplCmm.HooplMonad
2033                         (Compiler.Hoopl.Graph.Graph
2034                            HooplNode.CmmNode Compiler.Hoopl.Graph.C Compiler.Hoopl.Graph.O)),
2035                \ (m_a15G :: HooplNode.CmmNode
2036                               Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.O)
2037                  (avail_a15H :: CmmSpillReload.AvailRegs) ->
2038                  maybe_reload_before_a15E
2039                    @ (HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.O)
2040                    @ HooplCmm.HooplMonad
2041                    @ (Compiler.Hoopl.Graph.Graph' Compiler.Hoopl.Graph.Block)
2042                    @ Compiler.Hoopl.Graph.O
2043                    (HooplNode.$fUserOfLocalRegsCmmNode
2044                       @ Compiler.Hoopl.Graph.O @ Compiler.Hoopl.Graph.O)
2045                    $dMonad_a1t7
2046                    Compiler.Hoopl.MkGraph.$fGraphRepGraph'
2047                    avail_a15H
2048                    m_a15G
2049                    (Compiler.Hoopl.MkGraph.mkMiddle
2050                       @ (Compiler.Hoopl.Graph.Graph' Compiler.Hoopl.Graph.Block)
2051                       Compiler.Hoopl.MkGraph.$fGraphRepGraph'
2052                       @ HooplNode.CmmNode
2053                       m_a15G),
2054                \ (l_a15I :: HooplNode.CmmNode
2055                               Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.C)
2056                  (avail_a15J :: CmmSpillReload.AvailRegs) ->
2057                  maybe_reload_before_a15E
2058                    @ (HooplNode.CmmNode Compiler.Hoopl.Graph.O Compiler.Hoopl.Graph.C)
2059                    @ HooplCmm.HooplMonad
2060                    @ (Compiler.Hoopl.Graph.Graph' Compiler.Hoopl.Graph.Block)
2061                    @ Compiler.Hoopl.Graph.C
2062                    (HooplNode.$fUserOfLocalRegsCmmNode
2063                       @ Compiler.Hoopl.Graph.O @ Compiler.Hoopl.Graph.C)
2064                    $dMonad_a1t7
2065                    Compiler.Hoopl.MkGraph.$fGraphRepGraph'
2066                    avail_a15J
2067                    l_a15I
2068                    (Compiler.Hoopl.MkGraph.mkLast
2069                       @ (Compiler.Hoopl.Graph.Graph' Compiler.Hoopl.Graph.Block)
2070                       Compiler.Hoopl.MkGraph.$fGraphRepGraph'
2071                       @ HooplNode.CmmNode
2072                       l_a15I)))))
2073
2074ppr_a1gV :: CmmExpr.LocalReg -> Outputable.SDoc
2075LclId
2076[]
2077ppr_a1gV =
2078  Outputable.ppr @ CmmExpr.LocalReg PprCmm.$fOutputableLocalReg
2079
2080CmmSpillReload.ppr_regs :: GHC.Base.String
2081                           -> CmmExpr.RegSet
2082                           -> Outputable.SDoc
2083LclId
2084[Arity 2]
2085CmmSpillReload.ppr_regs =
2086  \ (s_a161 :: GHC.Base.String) (regs_a162 :: CmmExpr.RegSet) ->
2087    Outputable.<+>
2088      (Outputable.text s_a161)
2089      (GHC.Base.$
2090         @ [Outputable.SDoc]
2091         @ (Outputable.PprStyle -> Pretty.Doc)
2092         Outputable.hsep
2093         (Outputable.punctuate
2094            Outputable.comma
2095            (GHC.Base.$
2096               @ [CmmExpr.LocalReg]
2097               @ [Outputable.PprStyle -> Pretty.Doc]
2098               (GHC.Base.map
2099                  @ CmmExpr.LocalReg @ (Outputable.PprStyle -> Pretty.Doc) ppr_a1gV)
2100               (UniqSet.uniqSetToList @ CmmExpr.LocalReg regs_a162))))
2101
2102a_s1Zn :: CmmSpillReload.AvailRegs -> Outputable.SDoc
2103LclId
2104[Arity 1]
2105a_s1Zn =
2106  \ (ds_d1PC :: CmmSpillReload.AvailRegs) ->
2107    case ds_d1PC of _ {
2108      CmmSpillReload.UniverseMinus s_a168 ->
2109        case UniqSet.isEmptyUniqSet @ CmmExpr.LocalReg s_a168 of _ {
2110          GHC.Bool.False ->
2111            CmmSpillReload.ppr_regs
2112              (GHC.Base.unpackCString# "available = all but") s_a168;
2113          GHC.Bool.True ->
2114            Outputable.text (GHC.Base.unpackCString# "<everything available>")
2115        };
2116      CmmSpillReload.AvailRegs s_a169 ->
2117        case UniqSet.isEmptyUniqSet @ CmmExpr.LocalReg s_a169 of _ {
2118          GHC.Bool.False ->
2119            CmmSpillReload.ppr_regs
2120              (GHC.Base.unpackCString# "available = ") s_a169;
2121          GHC.Bool.True ->
2122            Outputable.text (GHC.Base.unpackCString# "<nothing available>")
2123        }
2124    }
2125
2126CmmSpillReload.$fOutputableAvailRegs :: Outputable.Outputable
2127                                          CmmSpillReload.AvailRegs
2128LclIdX[DFunId]
2129[Arity 1]
2130CmmSpillReload.$fOutputableAvailRegs =
2131  a_s1Zn
2132  `cast` (sym (Outputable.NTCo:T:Outputable CmmSpillReload.AvailRegs)
2133          :: (CmmSpillReload.AvailRegs -> Outputable.SDoc)
2134               ~
2135             Outputable.T:Outputable CmmSpillReload.AvailRegs)
2136
2137a_s1ZI :: CmmSpillReload.DualLive
2138          -> Outputable.PprStyle
2139          -> Pretty.Doc
2140LclId
2141[Arity 1]
2142a_s1ZI =
2143  \ (ds_d1PJ :: CmmSpillReload.DualLive) ->
2144    case ds_d1PJ of _ { CmmSpillReload.DualLive ds_d1PK ds_d1PL ->
2145    case GHC.Classes.&&
2146           (UniqSet.isEmptyUniqSet @ CmmExpr.LocalReg ds_d1PL)
2147           (UniqSet.isEmptyUniqSet @ CmmExpr.LocalReg ds_d1PK)
2148    of _ {
2149      GHC.Bool.False ->
2150        GHC.Base.$
2151          @ Outputable.SDoc
2152          @ (Outputable.PprStyle -> Pretty.Doc)
2153          (Outputable.nest (GHC.Types.I# 2))
2154          (Outputable.fsep
2155             (GHC.Base.build
2156                @ Outputable.SDoc
2157                (\ (@ a_d1PG)
2158                   (c_d1PH :: Outputable.SDoc -> a_d1PG -> a_d1PG)
2159                   (n_d1PI :: a_d1PG) ->
2160                   c_d1PH
2161                     (case UniqSet.isEmptyUniqSet @ CmmExpr.LocalReg ds_d1PL of _ {
2162                        GHC.Bool.False ->
2163                          CmmSpillReload.ppr_regs
2164                            (GHC.Base.unpackCString# "live in regs =") ds_d1PL;
2165                        GHC.Bool.True -> Outputable.empty
2166                      })
2167                     (c_d1PH
2168                        (case UniqSet.isEmptyUniqSet @ CmmExpr.LocalReg ds_d1PK of _ {
2169                           GHC.Bool.False ->
2170                             CmmSpillReload.ppr_regs
2171                               (GHC.Base.unpackCString# "live on stack =") ds_d1PK;
2172                           GHC.Bool.True -> Outputable.empty
2173                         })
2174                        n_d1PI))));
2175      GHC.Bool.True ->
2176        Outputable.text (GHC.Base.unpackCString# "<nothing-live>")
2177    }
2178    }
2179
2180CmmSpillReload.$fOutputableDualLive :: Outputable.Outputable
2181                                         CmmSpillReload.DualLive
2182LclIdX[DFunId]
2183[Arity 1]
2184CmmSpillReload.$fOutputableDualLive =
2185  a_s1ZI
2186  `cast` (sym (Outputable.NTCo:T:Outputable CmmSpillReload.DualLive)
2187          :: (CmmSpillReload.DualLive -> Outputable.SDoc)
2188               ~
2189             Outputable.T:Outputable CmmSpillReload.DualLive)
2190
2191*** End of Offense ***
2192
2193
2194<no location info>:
2195Compilation had errors
2196