https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89826
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> --- That REG_UNUSED note on r1 looks weird. In postreload_jump we have: (insn 49 11 50 3 (set (reg:SI 3 r3 [orig:126 iftmp.1_5 ] [126]) (const_int 0 [0])) "pr89826.c":9:14 181 {*arm_movsi_insn} (expr_list:REG_EQUAL (const_int 0 [0]) (nil))) (insn 50 49 12 3 (set (reg:SI 1 r1 [orig:127 iftmp.1_5+4 ] [127]) (const_int 0 [0])) "pr89826.c":9:14 181 {*arm_movsi_insn} (expr_list:REG_EQUAL (const_int 0 [0]) (nil))) (insn 12 50 13 3 (set (reg:SI 3 r3 [orig:126 iftmp.1_5 ] [126]) (not:SI (reg:SI 2 r2 [orig:124 a.0_1 ] [124]))) "pr89826.c":9:14 156 {*arm_one_cmplsi2} (nil)) (insn 13 12 37 3 (set (reg:SI 1 r1 [orig:127 iftmp.1_5+4 ] [127]) (not:SI (reg:SI 12 ip [orig:125 a.0_1+4 ] [125]))) "pr89826.c":9:14 156 {*arm_one_cmplsi2} (nil)) which looks normal, but contains non-DCEd code (that was there since subreg pass that lowered: (insn 35 11 12 3 (set (reg:DI 114 [ iftmp.1_5 ]) (const_int 0 [0])) "pr89826.c":9:14 -1 (nil)) (insn 12 35 13 3 (set (subreg:SI (reg:DI 114 [ iftmp.1_5 ]) 0) (not:SI (subreg:SI (reg:DI 110 [ a.0_1 ]) 0))) "pr89826.c":9:14 156 {*arm_one_cmplsi2} (nil)) (insn 13 12 37 3 (set (subreg:SI (reg:DI 114 [ iftmp.1_5 ]) 4) (not:SI (subreg:SI (reg:DI 110 [ a.0_1 ]) 4))) "pr89826.c":9:14 156 {*arm_one_cmplsi2} (nil)) ). In jump2 we have: (insn 50 49 12 3 (set (reg:SI 1 r1 [orig:127 iftmp.1_5+4 ] [127]) (reg:SI 3 r3 [orig:126 iftmp.1_5 ] [126])) "pr89826.c":9:14 181 {*arm_movsi_insn} (expr_list:REG_DEAD (reg:SI 3 r3 [orig:126 iftmp.1_5 ] [126]) (expr_list:REG_UNUSED (reg:SI 1 r1 [orig:127 iftmp.1_5+4 ] [127]) (expr_list:REG_EQUAL (const_int 0 [0]) (nil))))) (insn 12 50 13 3 (set (reg:SI 3 r3 [orig:126 iftmp.1_5 ] [126]) (not:SI (reg:SI 2 r2 [orig:124 a.0_1 ] [124]))) "pr89826.c":9:14 156 {*arm_one_cmplsi2} (nil)) (insn 13 12 37 3 (set (reg:SI 1 r1 [orig:127 iftmp.1_5+4 ] [127]) (not:SI (reg:SI 12 ip [orig:125 a.0_1+4 ] [125]))) "pr89826.c":9:14 156 {*arm_one_cmplsi2} (nil)) that still has the dead code in there and makes through REG_UNUSED clear it is unused. But then ce3 turns it into: (insn 49 9 50 2 (set (reg:SI 3 r3 [orig:126 iftmp.1_5 ] [126]) (const_int 0 [0])) "pr89826.c":9:14 181 {*arm_movsi_insn} (nil)) (insn 50 49 12 2 (set (reg:SI 1 r1 [orig:127 iftmp.1_5+4 ] [127]) (reg:SI 3 r3 [orig:126 iftmp.1_5 ] [126])) "pr89826.c":9:14 181 {*arm_movsi_insn} (expr_list:REG_DEAD (reg:SI 3 r3 [orig:126 iftmp.1_5 ] [126]) (expr_list:REG_UNUSED (reg:SI 1 r1 [orig:127 iftmp.1_5+4 ] [127]) (nil)))) (insn 12 50 13 2 (cond_exec (eq (reg:CC 100 cc) (const_int 0 [0])) (set (reg:SI 3 r3 [orig:126 iftmp.1_5 ] [126]) (not:SI (reg:SI 2 r2 [orig:124 a.0_1 ] [124])))) "pr89826.c":9:14 3805 {*p *arm_one_cmplsi2} (nil)) (insn 13 12 39 2 (cond_exec (eq (reg:CC 100 cc) (const_int 0 [0])) (set (reg:SI 1 r1 [orig:127 iftmp.1_5+4 ] [127]) (not:SI (reg:SI 12 ip [orig:125 a.0_1+4 ] [125])))) "pr89826.c":9:14 3805 {*p *arm_one_cmplsi2} (nil)) So, if the problem is using REG_UNUSED note, something forgot to recompute the notes problem (regcprop?).