The previous operation used quite a few temporary objects which can allocate memory for larger than 64-bit types and made no use of the storage already allocated storage for KnownZeroes/Ones.
This patch tries to make more intelligent reuse of the objects. Computing the overall known bits is still kind of bad as the OR operation for LHS and RHS both create a temporary to hold the OR result.