| 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:[email protected]]
| 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" <[email protected]>
| Do: "Jan Stolarek" <[email protected]>
| DW: "Simon Peyton-Jones" <[email protected]>, "ghc-devs" <ghc-
| [email protected]>
| 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
[email protected]
http://www.haskell.org/mailman/listinfo/ghc-devs