An expression like (zext i2 {(trunc i32 (1 + %B) to i2),+,1}<%while.body> to i32) will become zero exactly when the nested value becomes zero in its type. Instead of converting this kind of a zero-extended value into an addrec with predicates, simply remove the zext.
This is the replacement of D47899 (the motivation is explained there).