This patch adds an enum OverflowCheckFlavor and a function
OptimizeOverflowCheck. This will allow InstCombine to optimize
overflow checks without directly introducing an intermediate call to the
llvm.$op.with.overflow instrinsics.
This specific change is a refactoring and does not intend to change
behavior.