Don't remove COPYs with implicit defs, unless we know the implicitly
defined register is also zero.
Removing the following mov instruction generated from a COPY
is invalid if the upper 32 bits of x1 is non-zero and x1 will be used.
So, we should avoid this removal.
cbnz w1, b2 b1: mov x1, wzr // set all 64 bits of x1 zero // code assuming upper half of x1 is non-zero
The same fix https://reviews.llvm.org/D29850 as this was abandoned
probably because the above instruction seemed not to be generated.
But the generation of it is depending on the passes executed
before, e.g., register allocator.
So, this assumption should not be made and we should
avoid removing the above COPYs as well as MOVi32imms.