| Does Hoopl handle Bottom internally? By "Bottom" I mean the loop-breaking thing | that means "this predecessor does not execute". From the debugging output I
I don't think so. You supply a lattice data DataflowLattice a = DataflowLattice { fact_name :: String -- Documentation , fact_bot :: a -- Lattice bottom element , fact_join :: JoinFun a -- Lattice join plus change flag -- (changes iff result > old fact) } and the fact_bot value should really be the bottom element. Simon | -----Original Message----- | From: Jan Stolarek [mailto:jan.stola...@p.lodz.pl] | Sent: 31 July 2013 17:45 | To: Edward Z. Yang | Cc: Simon Peyton-Jones; ghc-devs | Subject: Re: Two Hoopl questions | | Does Hoopl handle Bottom internally? By "Bottom" I mean the loop-breaking thing | that means "this predecessor does not execute". From the debugging output I | added to my code it looks that it in fact does because it doesn't do a join when | first analyzing a block with two predecessors. If this is really the case then what is | the purpose of defining bottom in DataflowLattice? | | Janek | | ----- Oryginalna wiadomość ----- | Od: "Edward Z. Yang" <ezy...@mit.edu> | Do: "Jan Stolarek" <jan.stola...@p.lodz.pl> | DW: "Simon Peyton-Jones" <simo...@microsoft.com>, "ghc-devs" <ghc- | d...@haskell.org> | Wysłane: wtorek, 30 lipiec 2013 20:40:53 | Temat: Re: Two Hoopl questions | | What happens when you put a loop in your code? | | Edward | | Excerpts from Jan Stolarek's message of Tue Jul 30 08:34:44 -0700 2013: | > I'll allow myself to ask my second question again: | > | > 2) In my algorithm I need to initialize all of the blocks in a graph with bottom | element of a lattice, except for the entry block, which needs some other initial | values. I've written something like this: | > | > cmmCopyPropagation dflags graph = do | > let entry_blk = g_entry graph | > g' <- dataflowPassFwd graph [(entry_blk, (Top, Top))] $ | > analRewFwd cpLattice cpTransfer cpRewrite | > return . fst $ g' | > | > cpLattice = DataflowLattice "copy propagation" (Bottom, Bottom) cpJoin | > | > However, it seems that Bottom values passed to cpLattice are ignored - I could | replace second parameter to DataflowLattice with `undefined` and the code would | still run without causing an error. Is there something obviously wrong in the way I | pass initial fact values to dataflowPassFwd, or should I look for the problem in | other parts of my code? | > | > Janek | _______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://www.haskell.org/mailman/listinfo/ghc-devs