[Bug rtl-optimization/119901] wrong code with -O -favoid-store-forwarding -mprefer-vector-width=none -mavx2

2025-07-15 Thread ptomsich at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119901

ptomsich at gcc dot gnu.org changed:

   What|Removed |Added

 Resolution|--- |FIXED
 Status|NEW |RESOLVED
 CC||ptomsich at gcc dot gnu.org

--- Comment #3 from ptomsich at gcc dot gnu.org ---
Fixed by
https://gcc.gnu.org/cgit/gcc/commit/?id=ec5349c37afe972ee79b777ee749630b1a0a007e

[Bug rtl-optimization/119901] wrong code with -O -favoid-store-forwarding -mprefer-vector-width=none -mavx2

2025-06-09 Thread konstantinos.eleftheriou at vrull dot eu via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119901

--- Comment #2 from Konstantinos Eleftheriou  ---
This is fixed by r16-905-gec5349c37afe972ee79b777ee749630b1a0a007e.

The culprit was:

(insn 23 25 22 2 (set (reg:V16HI 108)
(zero_extend:V16HI (reg:V16QI 110))) "testcase.c":8:8 discrim 1 8682
{avx2_zero_extendv16qiv16hi2}
 (nil))

which is replaced now by:

(insn 23 25 22 2 (set (reg:V16HI 108)
(subreg:V16HI (reg:V16QI 110) 0)) "testcase.c":8:8 discrim 1 2403
{movv16hi_internal}
 (nil))

New RTL sequence:

(insn 25 21 23 2 (set (mem/c:V16QI (symbol_ref:DI ("v") [flags 0x2]  ) [0 MEM  [(void *)&v]+0 S16 A256])
(reg:V16QI 110)) "testcase.c":8:8 discrim 1 2401 {movv16qi_internal}
 (nil))
(insn 23 25 22 2 (set (reg:V16HI 108)
(subreg:V16HI (reg:V16QI 110) 0)) "testcase.c":8:8 discrim 1 2403
{movv16hi_internal}
 (nil))
(insn 22 23 20 2 (set (mem/c:V16QI (const:DI (plus:DI (symbol_ref:DI ("v")
[flags 0x2]  )
(const_int 16 [0x10]))) [0 MEM  [(void *)&v]+16
S16 A128])
(reg:V16QI 109)) "testcase.c":8:8 discrim 1 2401 {movv16qi_internal}
 (nil))
(insn 20 22 26 2 (set (subreg:V16QI (reg:V16HI 108) 16)
(reg:V16QI 109)) "testcase.c":8:8 discrim 1 2401 {movv16qi_internal}
 (nil))
(insn 26 20 16 2 (set (reg:V16HI 99 [ _2 ])
(reg:V16HI 108)) "testcase.c":8:8 discrim 1 2403 {movv16hi_internal}
 (nil))
(insn 16 26 0 2 (set (mem:V16HI (reg/f:DI 107 [ r ]) [1 *r_5(D)+0 S32 A256])
(reg:V16HI 99 [ _2 ])) "testcase.c":8:6 discrim 1 2403
{movv16hi_internal}
 (expr_list:REG_DEAD (reg/f:DI 107 [ r ])
(expr_list:REG_DEAD (reg:V16HI 99 [ _2 ])
(nil

Note that the additional instructions are expected, as we update the "loaded"
value using bit insertions.

[Bug rtl-optimization/119901] wrong code with -O -favoid-store-forwarding -mprefer-vector-width=none -mavx2

2025-04-22 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119901

Andrew Pinski  changed:

   What|Removed |Added

   Last reconfirmed||2025-04-22
 Ever confirmed|0   |1
 Status|UNCONFIRMED |NEW

--- Comment #1 from Andrew Pinski  ---
-favoid-store-forwarding produces worse code too.


(insn 12 7 13 2 (set (mem/c:V16QI (symbol_ref:DI ("v") [flags 0x2]  ) [0 MEM  [(void *)&v]+0 S16 A256])
(subreg:V16QI (reg:V4SI 105) 0)) "/app/example.cpp":8:15 2397
{movv16qi_internal}
 (nil))
(insn 13 12 15 2 (set (mem/c:V16QI (const:DI (plus:DI (symbol_ref:DI ("v")
[flags 0x2]  )
(const_int 16 [0x10]))) [0 MEM  [(void *)&v]+16
S16 A128])
(subreg:V16QI (reg:V4SI 105) 0)) "/app/example.cpp":8:15 2397
{movv16qi_internal}
 (expr_list:REG_DEAD (reg:V4SI 105)
(nil)))
(insn 15 13 16 2 (set (reg:V16HI 99 [ _2 ])
(mem:V16HI (symbol_ref:DI ("v") [flags 0x2]  ) [1 MEM[(V *)_1]+0 S32 A256])) "/app/example.cpp":8:8 discrim 1 2399
{movv16hi_internal}
 (nil))


Into:

(insn 25 21 23 2 (set (mem/c:V16QI (symbol_ref:DI ("v") [flags 0x2]  ) [0 MEM  [(void *)&v]+0 S16 A256])
(reg:V16QI 110)) "/app/example.cpp":8:8 discrim 1 2397
{movv16qi_internal}
 (nil))
(insn 23 25 22 2 (set (reg:V16HI 108)
(zero_extend:V16HI (reg:V16QI 110))) "/app/example.cpp":8:8 discrim 1
8682 {avx2_zero_extendv16qiv16hi2}
 (nil))
(insn 22 23 20 2 (set (mem/c:V16QI (const:DI (plus:DI (symbol_ref:DI ("v")
[flags 0x2]  )
(const_int 16 [0x10]))) [0 MEM  [(void *)&v]+16
S16 A128])
(reg:V16QI 109)) "/app/example.cpp":8:8 discrim 1 2397
{movv16qi_internal}
 (nil))
(insn 20 22 26 2 (set (subreg:V16QI (reg:V16HI 108) 16)
(reg:V16QI 109)) "/app/example.cpp":8:8 discrim 1 2397
{movv16qi_internal}
 (nil))
(insn 26 20 16 2 (set (reg:V16HI 99 [ _2 ])
(reg:V16HI 108)) "/app/example.cpp":8:8 discrim 1 2399
{movv16hi_internal}
 (nil))
(insn 16 26 0 2 (set (mem:V16HI (reg/f:DI 107 [ r ]) [1 *r_5(D)+0 S32 A256])
(reg:V16HI 99 [ _2 ])) "/app/example.cpp":8:6 discrim 1 2399
{movv16hi_internal}
 (expr_list:REG_DEAD (reg/f:DI 107 [ r ])
(expr_list:REG_DEAD (reg:V16HI 99 [ _2 ])
(nil