https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80770
--- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- For aarch64 we get this from combine: ``` Trying 8, 10 -> 12: 8: r92:SI=r96:QI#0&0x1 10: r93:SI=r92:SI^0x1 REG_DEAD r92:SI 12: zero_extract(r99:QI#0,0x1,0)=r93:SI REG_DEAD r93:SI Failed to match this instruction: (set (zero_extract:SI (subreg:SI (reg:QI 99 [ s_4(D)->b1D.4388 ]) 0) (const_int 1 [0x1]) (const_int 0 [0])) (not:SI (subreg:SI (reg:QI 96 [ *s_4(D) ]) 0))) ``` But I don't understand why it does not try to see we could get this: (set (reg:SI 93) (not:SI (subreg:SI (reg:QI 96 [ *s_4(D) ]) 0))) (set (zero_extract:SI (subreg:SI (reg:QI 99 [ s_4(D)->b1D.4388 ]) 0) (const_int 1 [0x1]) (const_int 0 [0])) (reg:SI 93))