More Liveness
Yesterday, and the plan for today
Well, yesterday was the weekend, but on Friday I got a bit of work done on the
liveness analysis. In particular, I implemented much of the gen
function. Today, the plan is to clarify those few questions I had about gen,
and to write kill.
Questions about gen
opaque
For now, I think it's easiest not to do any special handling of opaque. I can
always change it later, and I'm more afraid of messing up the liveness analysis
than I am of accidentally un-opqaueing something.
Blocks
I'm still not quite sure what the correct way to handle blocks are. Perhaps
gen and kill are not quite sufficient in their current incarnations? In
fact, perhaps gen and kill should only be called on blocks themselves, and
not the nested blocks. Then in and out are responsible for bridging the two?
Enter FreeIn
Of course, I'm not the first one to be needing this kind of information in the
Futhark compiler, and so I just realized that the FreeIn type class provides
me with everything I need. I knew about it before, but didn't understand exactly
what it was that it did. Looking at it now, I can see that it returns the list
of VName in some IR thing. This makes gen and kill much easier to make.
Indeed, after deciding to use freeIn, I was able to do the actual liveness
analysis for most of the constructs in Futhark quite easily. The only major
things left hanging are the Op instructions.
Tomorrow
A day at DIKU!