https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71336
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org, | |uros at gcc dot gnu.org --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The problem is that this is done usually during the ce* passes in a target mov<mode>cc expander, but unfortunately that expander doesn't know if the comparison operand has just a single bit set (and which one). For that query the most natural predicate would be nonzero_bits, but only the combiner pass has infrastructure to track non-zero bits in between different instructions. The ce* passes don't even compute a reaching defs df problem nor ud chains, though perhaps the ce* pass just could walk a few insns backwards looking for unconditional setter of the pseudo in the comparison (it would only work then if the masking is done right before comparison though).