Comparisons GVN


Optimizations performed here:

Eliminating intermediate boolean values when the result of a comparison is used by a compare-branch.
Folding comparisons where both inputs are literal.
Folding comparisons where both inputs are congruent.
Converting compare instructions into compare-imm instructions.