RSSA backend

Stephen Weeks MLton@sourcelight.com
Wed, 16 Jan 2002 17:33:10 -0800


> What liveness information is being stored with MACHINE blocks?

Right now, it is simply the liveness info of the corresponding RSSA
label (see line 719 of backend.fun).

> I see stuff like:
> L_25 {kind = Handler(0), live = (SU(4), RP(14))}:
>     RP(14) = globalpointerNonRoot [0]
>     RP(15) = RP(14)
>     Goto L_124
> 
> where I wouldn't expect to mark RP(14) as live into L_25?

Agreed.  This is wrong because the backend inserts some code for conts
and handlers that defines the formals at the beginning of the block.
I checked in a change that makes the live for cont and handler blocks
the liveNoFormals.  Maybe that's good enough.

But it might be worthwhile, both for debugging now and in the future,
for you to add to the machine type checker some code that checks that
the liveness information meets whatever invariants you want.