fold (add X, (adde Y, 0, Carry)) -> (adde X, Y, Carry)
fold (addc X, (adde Y, 0, Carry)) -> (adde X, Y, Carry) when Y + 1 cannot overflow.
fold (adde (add|adc X, Y), 0, Carry) -> (adde X, Y, Carry) when carry isn't used.
fold (adde X, (adde 0, 0, Y:Carry), (adde Y, 0, Z):Carry) with Y = (addc A, B) into (adde X, 0, (adde A, B, Z):Carry)
Improves the situation for bug 31719
Is it worth checking that Carry != A:Carry, where A = add X, Y (or A = addc X, Y) ?