The question is: what is the correct fix for the longer term ? is it enough to mark the SMSed block dirty? or do we need also to keep the REG_DEAD correct in each basic-block separately?
You either have to keep all REG_NOTES up to date, or call code that will recompute them. You can recompute REG_DEAD/REG_UNUSED notes by calling back into flow. This is presumably what happens when you mark the block dirty, so that would be a sufficient solution for REG_DEAD/REG_UNUSED.
See for instance code in combine.c that updates REG_NOTES after combination. This is in distribute_notes.
By the way, REG_UNUSED means that this instructions sets a register, and this value dies here. There are no uses of this register before the next set or the end of the function. Thus it holds register life info that is complimentary to REG_DEAD.
--
Jim Wilson, GNU Tools Support, http://www.SpecifixInc.com