[Bug rtl-optimization/82578] Redundant instructions emitted starting with r204212

krebbel at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Oct 17 09:22:00 GMT 2017


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82578

--- Comment #1 from Andreas Krebbel <krebbel at gcc dot gnu.org> ---
As expected the rtl dumps are identical up to removed "regmove" pass.

The interesting change is in insn 8. With regmove the value already loaded into
r47 is reused while without regmove it is loaded from a0 again.

First thing I'll check is whether a register_move_cost adjustment fixes this.

r204211 202r.regmove:

(insn 5 2 6 2 (set (reg/f:DI 46)
        (mem/u/c:DI (symbol_ref/u:DI ("*.LC0") [flags 0x2]) [3 S8 A64])) t.c:7
63 {*movdi_64}
     (expr_list:REG_EQUAL (const:DI (unspec:DI [
                    (symbol_ref:DI ("counter") [flags 0x2a]  <var_decl
0x3fff6c46a18 counter>)
                ] UNSPEC_NTPOFF))
        (nil)))
(insn 6 5 7 2 (set (reg/f:DI 47)
        (reg:DI 36 %a0)) t.c:7 63 {*movdi_64}
     (expr_list:REG_DEAD (reg:DI 36 %a0)
        (nil)))
(insn 7 6 8 2 (set (reg/f:DI 48)
        (mem/u/c:DI (symbol_ref/u:DI ("*.LC0") [flags 0x2]) [3 S8 A64])) t.c:7
63 {*movdi_64}
     (expr_list:REG_EQUAL (const:DI (unspec:DI [
                    (symbol_ref:DI ("counter") [flags 0x2a]  <var_decl
0x3fff6c46a18 counter>)
                ] UNSPEC_NTPOFF))
        (nil)))
(insn 8 7 9 2 (set (reg/f:DI 49)
        (reg/f:DI 47)) t.c:7 63 {*movdi_64}
     (expr_list:REG_DEAD (reg/f:DI 47)
        (nil)))
(insn 9 8 0 2 (parallel [
            (set (mem/c:SI (plus:DI (reg/f:DI 49)
                        (reg/f:DI 46)) [2 counter+0 S4 A32])
                (plus:SI (mem/c:SI (plus:DI (reg/f:DI 49)
                            (reg/f:DI 48)) [2 counter+0 S4 A32])
                    (const_int 1 [0x1])))
            (clobber (reg:CC 33 %cc))
        ]) t.c:7 327 {*addsi3}
     (expr_list:REG_DEAD (reg/f:DI 49)
        (expr_list:REG_DEAD (reg/f:DI 48)
            (expr_list:REG_DEAD (reg/f:DI 46)
                (expr_list:REG_UNUSED (reg:CC 33 %cc)
                    (nil))))))


r204212 202r.outof_cfglayout:

(insn 5 2 6 2 (set (reg/f:DI 46)
        (mem/u/c:DI (symbol_ref/u:DI ("*.LC0") [flags 0x2]) [3 S8 A64])) t.c:7
63 {*movdi_64}
     (expr_list:REG_EQUAL (const:DI (unspec:DI [
                    (symbol_ref:DI ("counter") [flags 0x2a]  <var_decl
0x3fff6c46a18 counter>)
                ] UNSPEC_NTPOFF))
        (nil)))
(insn 6 5 7 2 (set (reg/f:DI 47)
        (reg:DI 36 %a0)) t.c:7 63 {*movdi_64}
     (nil))
(insn 7 6 8 2 (set (reg/f:DI 48)
        (mem/u/c:DI (symbol_ref/u:DI ("*.LC0") [flags 0x2]) [3 S8 A64])) t.c:7
63 {*movdi_64}
     (expr_list:REG_EQUAL (const:DI (unspec:DI [
                    (symbol_ref:DI ("counter") [flags 0x2a]  <var_decl
0x3fff6c46a18 counter>)
                ] UNSPEC_NTPOFF))
        (nil)))
(insn 8 7 9 2 (set (reg/f:DI 49)
        (reg:DI 36 %a0)) t.c:7 63 {*movdi_64}
     (expr_list:REG_DEAD (reg:DI 36 %a0)
        (nil)))
(insn 9 8 0 2 (parallel [
            (set (mem/c:SI (plus:DI (reg/f:DI 47)
                        (reg/f:DI 46)) [2 counter+0 S4 A32])
                (plus:SI (mem/c:SI (plus:DI (reg/f:DI 49)
                            (reg/f:DI 48)) [2 counter+0 S4 A32])
                    (const_int 1 [0x1])))
            (clobber (reg:CC 33 %cc))
        ]) t.c:7 327 {*addsi3}
     (expr_list:REG_DEAD (reg/f:DI 49)
        (expr_list:REG_DEAD (reg/f:DI 48)
            (expr_list:REG_DEAD (reg/f:DI 47)
                (expr_list:REG_DEAD (reg/f:DI 46)
                    (expr_list:REG_UNUSED (reg:CC 33 %cc)
                        (nil)))))))


More information about the Gcc-bugs mailing list