In attempting to find out what's wrong in PR 48990 (wrong code for MIPS N32 -O1) it looks to me like the issue is that a register is marked dead, then still used afterwards. This causes the delay slot fill logic to make a wrong decision (it brings a load instruction that overwrites the "dead" register into the delay slot from the branch-taken path, even though the fallthrough path still needs the original register value).
The register rewrite in question is made in regcprop. Question: that code doesn't appear to touch REG_DEAD notes at all. Is that right? From the definition of REG_DEAD, it seems that rewriting a later insns to use register x means that a preceding (REG_DEAD x) needs to be deleted. Or moved to the later insn, perhaps. paul