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-devs@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

Reply via email to