If we have an icmp->brcond->br sequence where the brcond just branches to the
next block jumping over the br, while the br takes the false edge, then we can
emit a Bcc conditional branch to the br's target while inverting the condition.
This means we can eliminate the br as an unconditional branch and also avoid
generating a cset.
This also makes the InstructionSelector instances non-const, because we need to
be able to communicate to the InstructionSelect pass that certain generic
instructions should be deleted. We can't delete these from inside the target
specific selector classes because it would invalidate iterators held up the
call stack. Therefore, the select() virtual functions are no longer const,
but I think this is reasonable.
Improves code size on arm64 -O0 on CTMark by 4.3%.