This patch generalizes the fold implemented by foldAndOrOfICmpEqZeroAndICmp,
which are:
(icmp eq X, 0) | (icmp ult Other, X) -> (icmp ule Other, X-1) (icmp ne X, 0) & (icmp uge Other, X) -> (icmp ugt Other, X-1)
to the following:
(icmp eq X, C) | (icmp ult Other, (X - C)) -> (icmp ule Other, (X - (C + 1))) (icmp ne X, C) & (icmp uge Other, (X - C)) -> (icmp ugt Other, (X - (C + 1)))
The function foldAndOrOfICmpEqZeroAndICmp is also renamed to
foldAndOrOfICmpEqConstantAndICmp to reflect the changes.
Proofs: https://alive2.llvm.org/ce/z/yXGv6q
Fixes #63749.
Move this lower, not needed here yet.