https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105653
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Ever confirmed|0 |1 Status|UNCONFIRMED |NEW Last reconfirmed| |2022-10-27 --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- IRA adds the REG_EQUIV note even for both with/without -g. But it was removed in peephole2 for -g case. In the -g case we get the following extra output in -g for peephole2 starting with: df_worklist_dataflow_doublequeue: n_basic_blocks 8 n_edges 10 count 9 ( 1.1) .... DCE: Deleting insn 15 deleting insn with uid = 15. ... insn 15 was: (insn:TI 15 13 16 2 (set (reg/f:DI 1 x1 [101]) (plus:DI (reg/f:DI 0 x0 [orig:99 thisD.4083 ] [99]) (const_int 8 [0x8]))) "/app/example.cpp":9:25 discrim 1 141 {*adddi3_aarch64} (expr_list:REG_UNUSED (reg/f:DI 1 x1 [101]) (nil))) in sched_fusion. But in the -g0 case, it was not removed inside peephole2. Someone who understands DF DCE better should look into this on why it was not removed inside peephole2 without -g. The instruction without -g: (insn:TI 8 3 9 2 (set (reg/f:DI 1 x1 [101]) (plus:DI (reg/f:DI 0 x0 [orig:99 this ] [99]) (const_int 8 [0x8]))) "/app/example.cpp":9:25 discrim 1 141 {*adddi3_aarch64} (expr_list:REG_UNUSED (reg/f:DI 1 x1 [101]) (nil))) Which looks exactly the same even.