Two Hoopl questions
Edward Z. Yang
ezyang at MIT.EDU
Wed Jul 31 23:59:59 CEST 2013
By the laws of lattices, A joined with bottom is A. So Hoopl
skips actually doing it, IIRC. It's pretty hard to tell what is
going on here.
Excerpts from Jan Stolarek's message of Wed Jul 31 09:44:46 -0700 2013:
> 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?
> ----- Oryginalna wiadomość -----
> Od: "Edward Z. Yang" <ezyang at MIT.EDU>
> Do: "Jan Stolarek" <jan.stolarek at p.lodz.pl>
> DW: "Simon Peyton-Jones" <simonpj at microsoft.com>, "ghc-devs" <ghc-devs at 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?
> 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
More information about the ghc-devs