https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65693
--- Comment #7 from Uroš Bizjak <ubizjak at gmail dot com> --- gcc-4.9 combines udivmoddi4 to : (insn 30 5 8 2 (set (reg:DI 103) (const_int 16 [0x10])) pr65693.ii:6 -1 (nil)) [...] (insn 9 8 10 2 (parallel [ (set (reg:DI 94) (udiv:DI (reg:DI 92) (reg:DI 103))) (set (reg:DI 95) (umod:DI (reg:DI 92) (reg:DI 103))) (clobber (reg:CC 17 flags)) ]) pr65693.ii:6 348 {*udivmoddi4} (expr_list:REG_DEAD (reg:DI 103) (expr_list:REG_DEAD (reg:DI 92) (expr_list:REG_UNUSED (reg:DI 95) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil)))))) Trying 30 -> 9: ... Successfully matched this instruction: (set (reg:DI 94) (lshiftrt:DI (reg:DI 92) (const_int 4 [0x4]))) For some reason gcc-5 doesn't do this conversion anymore.