https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78438
--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- Before combine we have: (insn 6 5 7 2 (parallel [ (set (reg:SI 92) (ashiftrt:SI (reg:SI 93 [ b ]) (const_int 11 [0xb]))) (clobber (reg:CC 17 flags)) ]) "pr78438.c":7 563 {*ashrsi3_1} (expr_list:REG_DEAD (reg:SI 93 [ b ]) (expr_list:REG_UNUSED (reg:CC 17 flags) (expr_list:REG_EQUAL (ashiftrt:SI (mem/c:SI (symbol_ref:DI ("b") [flags 0x2] <var_decl 0x7f8ffbb66ea0 b>) [1 b+0 S4 A32]) (const_int 11 [0xb])) (nil))))) (insn 7 6 8 2 (parallel [ (set (reg:HI 94) (lshiftrt:HI (subreg:HI (reg:SI 92) 0) (const_int 15 [0xf]))) (clobber (reg:CC 17 flags)) ]) "pr78438.c":7 572 {*lshrhi3_1} (expr_list:REG_DEAD (reg:SI 92) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil)))) combine turns that into non-equivalent: (insn 7 6 8 2 (parallel [ (set (reg:SI 94) (ashiftrt:SI (reg:SI 93 [ b ]) (const_int 26 [0x1a]))) (clobber (reg:CC 17 flags)) ]) "pr78438.c":7 563 {*ashrsi3_1} (expr_list:REG_UNUSED (reg:CC 17 flags) (expr_list:REG_DEAD (reg:SI 93 [ b ]) (nil))))