https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91611
--- Comment #1 from Tom de Vries <vries at gcc dot gnu.org> --- FWIW, the debug experience does not feel very O0-ish because of the missing "b = a" assignment. Using this demonstrator patch: ... diff --git a/gcc/lra-spills.c b/gcc/lra-spills.c index a322da81544..db18ff43281 100644 --- a/gcc/lra-spills.c +++ b/gcc/lra-spills.c @@ -785,7 +785,7 @@ lra_final_code_change (void) unless next insn is USE marking the return reg (we should save this as some subsequent optimizations assume that such original insns are saved). */ - if (NONJUMP_INSN_P (insn) && GET_CODE (pat) == SET + if (0 && NONJUMP_INSN_P (insn) && GET_CODE (pat) == SET && REG_P (SET_SRC (pat)) && REG_P (SET_DEST (pat)) && REGNO (SET_SRC (pat)) == REGNO (SET_DEST (pat)) && (! return_regno_p (REGNO (SET_SRC (pat))) @@ -834,7 +834,7 @@ lra_final_code_change (void) if (insn_change_p) lra_update_operator_dups (id); - if ((set = single_set (insn)) != NULL + if (0 && (set = single_set (insn)) != NULL && REG_P (SET_SRC (set)) && REG_P (SET_DEST (set)) && REGNO (SET_SRC (set)) == REGNO (SET_DEST (set))) { diff --git a/gcc/recog.c b/gcc/recog.c index a9f584bc0dc..1ae158cb69d 100644 --- a/gcc/recog.c +++ b/gcc/recog.c @@ -2995,7 +2995,7 @@ split_all_insns (void) is too risky to try to do this before register allocation, and there are unlikely to be very many nops then anyways. */ - if (reload_completed) + if (0 && reload_completed) delete_insn_and_edges (insn); if (note) need_cfg_cleanup = true; ... we manage to produce the "b = a" assignment in the assembly: ... #(insn 6 26 30 2 (set (reg/v:SF 21 xmm1 [orig:84 b ] [84]) # (reg/v:SF 21 xmm1 [orig:83 a ] [83])) "test.c":7:5 112 {*movsf_internal} # (nil)) movaps %xmm1, %xmm1 # 6 [c=4 l=3] *movsf_internal/6 ... and get O0-ish behaviour: ... $ gdb -q a.out -ex start Reading symbols from a.out...done. Temporary breakpoint 1 at 0x4004b0: file test.c, line 3. Starting program: /data/gcc_versions/devel/a.out Temporary breakpoint 1, main () at test.c:3 3 { (gdb) n 6 a = 1.0; (gdb) 7 b = a; (gdb) p a $1 = 1 (gdb) n 8 return b == 1.0; (gdb) p b $2 = 1 ...