cps & contification

Matthew Fluet fluet@CS.Cornell.EDU
Tue, 30 Jan 2001 11:44:53 -0500 (EST)


> Now define a directed graph G = (Node, Edge) where
>         Node = Jump U Fun U {Root}
>         Edge = {(Root, fm)}
>                U {(Root, j) | j in Jump}
>                U {(Root, f) | not(Reach(f))}
>                U {(f, g) | (f, g) in T and Reach(f) and Reach(g)}
>                U {(j, g) | (f, g, j) in N and Reach(f) and Reach(g)}

One more simplification: Reach(g) in the fourth and fifth clauses are
implied by Reach(f) and the definition of Reach.  This is nice for the
implementation, because we only check reach once for each function.  If
true, then we do a Exp.foreachCall and don't need to check reach of the
callee.  If false, we add the edge via the third clause.  This is already
done in the file I sent out, but I forgot to mention it in the email.