https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93908
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |ASSIGNED Assignee|unassigned at gcc dot gnu.org |jakub at gcc dot gnu.org --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> --- I'd say the bug is in the way how we try to lower the zero_extract store: Trying 19, 13, 21 -> 22: Failed to match this instruction: (set (zero_extract:DI (mem/j:HI (plus:DI (reg/v/f:DI 60 [ s ]) (const_int 10 [0xa])) [0 +0 S2 A16]) (const_int 2 [0x2]) (const_int 7 [0x7])) (const_int -1 [0xffffffffffffffff])) Successfully matched this instruction: (set (reg:HI 67) (const_int -128 [0xffffffffffffff80])) Successfully matched this instruction: (set (mem/j:HI (plus:DI (reg/v/f:DI 60 [ s ]) (const_int 10 [0xa])) [0 +0 S2 A16]) (ior:HI (mem/j:HI (plus:DI (reg/v/f:DI 60 [ s ]) (const_int 10 [0xa])) [0 +0 S2 A16]) (reg:HI 67))) I'd say storing a -1 into a zero_extract is fine, at least IMHO we shouldn't rely on it being zero extended.