This patch adds support to sink side-effecting calls that are legal to
sink to the successor use block. We can sink such calls as long as these
two conditions are satisfied:
- The instruction would be trivially dead (i.e. if there were no uses of the instruction, we can remove the instruction).
- There are no side-effecting instructions between the current one until the end of the block.
This helps with sinking allocations down to use blocks when safe to do
so (see added testcases).
What if I has implicit control flow, e.g. may call system exit?