https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71779
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
That is the following (I am using ubuntu's 5.3.1 in 1604 right now):
Trying 944, 945 -> 946:
Successfully matched this instruction:
(set (reg:DI 1 x1)
(ior:DI (ashift:DI (reg/f:DI 110 [ obj1$4 ])
(const_int 32 [0x20]))
(reg/f:DI 419)))
Where 944, 945 and 946 was:
(insn 944 943 945 100 (set (zero_extract:DI (reg/v:DI 197 [ obj1 ])
(const_int 32 [0x20])
(const_int 0 [0]))
(reg/f:DI 419)) isl_input.c:2496 687 {*insv_regdi}
(nil))
(insn 945 944 946 100 (set (zero_extract:DI (reg/v:DI 197 [ obj1 ])
(const_int 32 [0x20])
(const_int 32 [0x20]))
(reg/f:DI 110 [ obj1$4 ])) isl_input.c:2496 687 {*insv_regdi}
(expr_list:REG_DEAD (reg/f:DI 110 [ obj1$4 ])
(nil)))
(insn 946 945 947 100 (set (reg:DI 1 x1)
(reg/v:DI 197 [ obj1 ])) isl_input.c:2496 48 {*movdi_aarch64}
(expr_list:REG_DEAD (reg/v:DI 197 [ obj1 ])
(nil)))
Is an invalid combine. GCC must be thinking the upper bits of reg 419 (aka
487) was zero for some reason.