This teaches tryOptSelect to handle folding G_ICMP, and removes the requirement that the G_SELECT we're dealing with is floating point.
Some refactoring to make this work nicely as well:
- Factor out the scalar case from the selection code for G_ICMP into emitIntegerCompare.
- Make tryOptCMN return a MachineInstr* instead of a bool.
- Make tryOptCMN not modify the instruction being selected.
- Factor out the CMN emission into emitCMN for readability.
By doing this this way, we can get all of the compare selection optimizations in select emission.