I've just spend some time looking at the above function, and while I
understood what it does, a comment would have helped a lot.
Maybe, something like:
// Determine the end of the live interval for this register
// For physical register, all internvals are within basic blocks so
// we look for the instruction in this basic block which last uses it.
The first loop might have a comment like:
// If the register is dead at instruction which sets it (i.e. not used later)
// the live interval ends at the next instruction
The second loop might have a comment like:
// If the register is not dead at the defining instruction, it must be used
// and killed by some subsequent instruction. Find that instruction now, which
// always exists
Finally, why I've started all this. I forgot to add machine CFG edge and got
misterious crash. I've applied the attached patch, which checks that all
basic blocks are reachable from function entry. Any comments on:
- whether this check is reasonable?
- what's the right place for the check? LiveVariables.cpp is the simplest I
could find, but does not seem right.
- Volodya
LiveVariables.diff (608 Bytes)