Two Hoopl questions

Jan Stolarek jan.stolarek at p.lodz.pl
Wed Jul 31 11:00:51 CEST 2013


For some reason they are ignored, or at least the rewritten code looks as if only a single pass was done. I have facts represented like this:

  data AssignmentFactBot a = Bottom
                           | Const (M.Map a CmmExpr)

I initialize the entry node with:

     g' <- dataflowPassFwd graph [(entry_blk, Const M.empty)] $
           analRewFwd cpLattice cpTransfer (cpRewrite dflags)

And lattice is initialized with Bottom. Now the join function:

joinCpFacts        old   Bottom     = panic "AAAAAAAAAAA"
joinCpFacts (Const old) (Const new) = ...
joinCpFacts Bottom Bottom    = panic "Joining bottom with bottom"
joinCpFacts Bottom (Const _) = panic "Joining bottom with const"

Two last panics are intended - they should never happen. The first one is for debugging purposes and surprisingly it is never called - only the second equation is. I'm puzzled. Where did I go wrong?

Janek


----- 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?

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





More information about the ghc-devs mailing list