drreg losing track of spilled registers when called outside of insertion phase.
When using drreg outside of the insertion phase, it defaults to a forward scan of the ilist to determine register liveness. At the beginning of the function drreg_forward_analysis, it flat-rate sets ever_spilled to false for each register. So if you call drreg_reserve_register() more than once, the ever_spilled of the first is false again. As a consequence, registers except the one of the last call of drreg_reserve_register() are never restored.