Truncating the result of a merge means that most likely we could have done without merge in the first place and just used the input merge inputs directly. This can be done in three cases:
- If the truncation result is smaller than the merge source, we can use the source in the trunc directly
- If the sizes are the same, we can replace the register or use a copy
- If the truncation size is a multiple of the merge source size, we can build a smaller merge
This gets rid of most of the larger, hard-to-legalize merges.
It would be nice to just early return here and avoid a level of indentation.