https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85376
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The bug seems to be introduced during cse_local, before that we have: (insn 28 26 31 2 (parallel [ (set (reg:CCZ 17 flags) (compare:CCZ (reg:SI 188) (const_int 0 [0]))) (set (reg:SI 93 [ _13 ]) (ctz:SI (reg:SI 188))) ]) "pr85376.c":12 735 {*bsfsi_1} (expr_list:REG_DEAD (reg:SI 188) (expr_list:REG_UNUSED (reg:SI 93 [ _13 ]) (expr_list:REG_UNUSED (reg:CCZ 17 flags) (nil))))) ... (insn 55 54 56 2 (set (reg:SI 194 [ o ]) (const_int 32 [0x20])) "pr85376.c":14 86 {*movsi_internal} (expr_list:REG_DEAD (reg/v:HI 91 [ o ]) (nil))) (insn 56 55 57 2 (set (reg:QI 108 [ _26+1 ]) (const_int 0 [0])) "pr85376.c":14 88 {*movqi_internal} (nil)) (insn 57 56 58 2 (parallel [ (set (reg:CC 17 flags) (compare:CC (subreg:QI (reg:SI 194 [ o ]) 0) (subreg:QI (reg:SI 104 [ _23 ]) 0))) (set (reg:QI 195) (minus:QI (subreg:QI (reg:SI 194 [ o ]) 0) (subreg:QI (reg:SI 104 [ _23 ]) 0))) ]) "pr85376.c":14 294 {*subqi_3} (expr_list:REG_DEAD (reg:SI 194 [ o ]) (expr_list:REG_DEAD (reg:SI 104 [ _23 ]) (nil)))) But cse_local changes that to: (insn 56 54 57 2 (set (reg:QI 108 [ _26+1 ]) (const_int 0 [0])) "pr85376.c":14 88 {*movqi_internal} (nil)) (insn 57 56 58 2 (parallel [ (set (reg:CC 17 flags) (compare:CC (subreg:QI (reg:SI 93 [ _13 ]) 0) (subreg:QI (reg:SI 104 [ _23 ]) 0))) (set (reg:QI 195) (minus:QI (subreg:QI (reg:SI 93 [ _13 ]) 0) (subreg:QI (reg:SI 104 [ _23 ]) 0))) ]) "pr85376.c":14 294 {*subqi_3} (expr_list:REG_DEAD (reg:SI 194 [ o ]) (expr_list:REG_DEAD (reg:SI 104 [ _23 ]) (nil)))) but pseudo 93 certainly isn't known to contain (const_int 32). I don't think cse pass uses cselib though.