[Bug middle-end/106892] [11/12/13 Regression] Wrong code at -O3 on x86_64-linux-gnu since r11-963-g80d6f89e78fc3b77
rguenth at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Sep 9 09:05:29 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106892
Richard Biener <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Assignee|unassigned at gcc dot gnu.org |rguenth at gcc dot gnu.org
Status|NEW |ASSIGNED
--- Comment #8 from Richard Biener <rguenth at gcc dot gnu.org> ---
-fno-gcse-lm fixes the testcase. The only difference from the bisected
revision is
(insn 56 55 57 15 (set (mem:SI (plus:DI (mult:DI (reg:DI 102)
(const_int 4 [0x4]))
- (reg/f:DI 99)) [1 f S4 A32])
+ (reg/f:DI 99)) [1 f[_137]+0 S4 A32])
(reg:SI 105)) "t.c":19:21 -1
(nil))
and PRE then does
-PRE GCSE of j, 23 basic blocks, 3800 bytes needed, 0 substs, 0 insns created
+scanning new insn with uid = 106.
+deleting insn with uid = 54.
+PRE: redundant insn 54 (expression 5) in bb 15, reaching reg is 107
+PRE: edge (14,15), copy expression 5
+scanning new insn with uid = 107.
+PRE GCSE of j, 23 basic blocks, 3848 bytes needed, 1 substs, 1 insns created
it looks like RTL PRE hoists
(insn 54 50 55 15 (set (reg:SI 106 [ MEM[(int *)_20 + 16B] ])
(mem:SI (plus:DI (reg/f:DI 86 [ _20 ])
(const_int 16 [0x10])) [1 MEM[(int *)_20 + 16B]+0 S4 A32]))
"t.c":19:21 67 {*movsi_internal}
(nil))
out of the loop, across
(insn 56 55 57 15 (set (mem:SI (plus:DI (mult:DI (reg:DI 102)
(const_int 4 [0x4]))
(symbol_ref:DI ("f") [flags 0x2] <var_decl 0x7fb59de26e10 f>))
[1 f[_137]+0 S4 A32])
(reg:SI 105)) "t.c":19:21 67 {*movsi_internal}
(expr_list:REG_DEAD (reg:SI 105)
(expr_list:REG_DEAD (reg:DI 102)
(expr_list:REG_DEAD (reg/f:DI 99)
(nil)))))
I will see why exactly.
More information about the Gcc-bugs
mailing list