https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109416
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Last reconfirmed| |2023-04-05 Status|UNCONFIRMED |NEW Ever confirmed|0 |1 --- Comment #2 from Andrew Pinski <pinskia at gcc dot gnu.org> --- For the init function: (insn 5 2 6 (set (reg/f:SI 15 a5 [134]) (high:SI (symbol_ref:SI ("Data") [flags 0x86] <var_decl 0x7f183060d900 Data>))) "t4.c":5:10 180 {*movsi_internal} (expr_list:REG_EQUIV (high:SI (symbol_ref:SI ("Data") [flags 0x86] <var_decl 0x7f183060d900 Data>)) (nil))) (insn 6 5 13 (set (reg/f:SI 15 a5 [135]) (lo_sum:SI (reg/f:SI 15 a5 [134]) (symbol_ref:SI ("Data") [flags 0x86] <var_decl 0x7f183060d900 Data>))) "t4.c":5:10 174 {*lowsi} (expr_list:REG_EQUIV (symbol_ref:SI ("Data") [flags 0x86] <var_decl 0x7f183060d900 Data>) (nil))) (insn 13 6 14 (set (reg:SI 13 a3 [137]) (const_int 0 [0])) "t4.c":5:10 180 {*movsi_internal} (nil)) (insn 14 13 15 (set (reg:SI 14 a4 [+4 ]) (const_int 0 [0])) "t4.c":5:10 180 {*movsi_internal} (nil)) (insn 15 14 16 (set (mem/c:SI (reg/f:SI 15 a5 [135]) [1 Data+0 S4 A64]) (reg:SI 13 a3 [137])) "t4.c":5:10 180 {*movsi_internal} (expr_list:REG_DEAD (reg:SI 13 a3 [137]) (nil))) (insn 16 15 23 (set (mem/c:SI (plus:SI (reg/f:SI 15 a5 [135]) (const_int 4 [0x4])) [1 Data+4 S4 A32]) (reg:SI 14 a4 [+4 ])) "t4.c":5:10 180 {*movsi_internal} (expr_list:REG_DEAD (reg/f:SI 15 a5 [135]) (expr_list:REG_DEAD (reg:SI 14 a4 [+4 ]) (nil)))) LRA/reload decides to change: (insn 7 6 10 2 (set (mem/c:DI (reg/f:SI 135) [1 Data+0 S8 A64]) (const_int 0 [0])) "t4.c":5:10 178 {*movdi_32bit} (expr_list:REG_DEAD (reg/f:SI 135) (nil))) To: (insn 7 6 12 2 (set (reg:DI 13 a3 [137]) (const_int 0 [0])) "t4.c":5:10 178 {*movdi_32bit} (nil)) (insn 12 7 10 2 (set (mem/c:DI (reg/f:SI 15 a5 [135]) [1 Data+0 S8 A64]) (reg:DI 13 a3 [137])) "t4.c":5:10 178 {*movdi_32bit} (nil)) I would have expected not have happened ... So the init function is definitely a target issue As LRA should have kept it as one store instruction ...