[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