CWS paper

Matthew Fluet fluet@CS.Cornell.EDU
Wed, 6 Dec 2000 11:46:15 -0500 (EST)


I was looking at the revised contify analysis that I proposed, and I
realized that there isn't any need to make a distinction between function
labels and "return to f" labels.  It still all works out with the ordering

bot <=l l' <=l l   forall l' in Label

the join operation:

Gamma1 V Gamma2
 = {l |--> r | l in Label
               r = case (Gamma1(x), Gamma2(x))
                     of (bot, r') => r'
                      | (r', bot) => r'
                      | (r1, r2) => if r1 = r2
                                     then r1
                                     else l}

and the condition

If Gamma = Anal[program]  and Gamma(l) = r  and  r <> l, r <> bot,
 then the function with label l has exactly one continuation 
 and is contifiable.
Further, if Gamma(l) = bot, then the function with label l is never called.