The code was previously checking that candidates for sinking had exactly one use or were a store instruction (which can't have uses). This meant we could sink call instructions only if they had a use.
That limitation seemed a bit arbitrary, so this patch changes it to "instruction has zero or one use" which seems more natural and removes the need to special-case stores.
Please take a look!
Actually this isn't quite right. I0 might not have a use but one of the other instructions might, or vice-versa. Same problem for the checks below...