[Bug rtl-optimization/119785] [12/13/14/15 Regression] UBSAN errors in machmode.h on sparc

2025-04-14 Thread cvs-commit at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119785

--- Comment #5 from GCC Commits  ---
The master branch has been updated by Jakub Jelinek :

https://gcc.gnu.org/g:f96a54350afcf7f3c90d0ecb51d7683d826acc00

commit r15-9458-gf96a54350afcf7f3c90d0ecb51d7683d826acc00
Author: Jakub Jelinek 
Date:   Mon Apr 14 19:34:22 2025 +0200

expmed: Always use QImode for init_expmed set_zero_cost [PR119785]

This is a regression on some targets introduced I believe by r6-2055
which added mode argument to set_src_cost.

The problem here is that in the first iteration, mode is always QImode
and we get as -Os zero cost set_src_cost (const0_rtx, QImode, false).
But then we use the mode variable for iterating over int, partial int
and vector int modes, so for the second iteration we call set_src_cost
with mode which is at that time (machine_mode) (MAX_MODE_VECTOR_INT + 1).

In the x86 case that happens to be V2HFmode and we don't crash (and
compute the same 0 cost as we would for QImode).
But e.g. in the SPARC case (machine_mode) (MAX_MODE_VECTOR_INT + 1) is
MAX_MACHINE_MODE and that does all kinds of weird things especially
when doing ubsan bootstrap.

Fixed by always using QImode.

2025-04-14  Jakub Jelinek  

PR rtl-optimization/119785
* expmed.cc (init_expmed): Always pass QImode rather than mode to
set_src_cost passed to set_zero_cost.

[Bug rtl-optimization/119785] [12/13/14/15 Regression] UBSAN errors in machmode.h on sparc

2025-04-14 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119785

Jakub Jelinek  changed:

   What|Removed |Added

Summary|UBSAN errors in machmode.h  |[12/13/14/15 Regression]
   |on sparc|UBSAN errors in machmode.h
   ||on sparc
   Target Milestone|--- |12.5
   Priority|P3  |P2