Thank you Edward. I am aware of these requirements - my problem is writing the 
code in which these 
will always hold (I'm optimizing Cmm and hand-written Cmm files tend to cause 
many problems that 
don't appear in automatically generated Cmm). Having a debugging tool in form 
of Fuel would be 
helpful for me, because instead of getting a freeze and seeing no output from 
-ddump-cmm I would 
see incorrectly transformed Cmm that would allow me to track bugs more easily.

> > • The transfer function must be monotonic: given a more infor-
> > mative fact in, it must produce a more informative fact out.
I spent some considerable time thinking about this. Consider a simple example 
of copy propagation. 
Let's assume that { x = NAC }, i.e. we know that x has been defined earlier but 
is Not-A-Constant 
and so we cannot rewrite it. Now we have something llike this:

x := 3;
y := x;

Here we are allowed to rewrite y := x with y := 3, because after first 
statement we learn that { x 
= 3 }. Now consider this:

x := 3;
x := very_unsafe_stg_call();
y := x;

Here, after the first statement we learn that { x = 3 }, but after the second 
one we learn once 
again that x is NAC and so we are not allowed to rewrite statement y := x. So 
the value of x can 
change from NAC to a constant and from constant to a NAC. Is such a transfer 
function monotonic?

Janek

_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://www.haskell.org/mailman/listinfo/ghc-devs

Reply via email to