This is a preparatory step for D34515
This patch:
- makes nodes `ISD::ADDCARRY` and `ISD::SUBCARRY` legal for `i32`
- lowering is done by first converting the boolean value into the carry flag using `(_, C) ← (ARMISD::ADDC R, -1)` and converted back to an integer value using `(R, _) ← (ARMISD::ADDE 0, 0, C)`. An `ARMISD::ADDE` between the two operations does the actual addition.
- for subtraction, given that `ISD::SUBCARRY` second result is actually a borrow, we need to invert the value of the second operand and result before and after using `ARMISD::SUBE`. We need to invert the carry result of `ARMISD::SUBE` to preserve the semantics.
- given that the generic combiner may lower `ISD::ADDCARRY` and `ISD::SUBCARRY`into `ISD::UADDO` and `ISD::USUBO` we need to update their lowering as well otherwise `i64` operations now would require branches. This implies updating the corresponding test for unsigned.
- add new combiner to remove the redundant conversions from/to carry flags to/from boolean values `(ARMISD::ADDC (ARMISD::ADDE 0, 0, C), -1)` → `C`