I have two questions about using Hoopl:
1) I'm debugging some Hoopl transformations that often fall into an infinite
loop. Probably the easiest way to find the cause would be to allow only a
limited number of iterations and then examining the rewritten output. I think
that optimization fuel was designed exactly with this scenario in mind, but
Compiler.Hoopl module in hoopl library does not re-export functions needed to
use Fuel (e.g. runWithFuel). Why are these functions hidden? Is there another
interface for using fuel?
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 them 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