[Bug rtl-optimization/123308] Recent ifcvt's change causes RISC-V regressions
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Mon Dec 29 18:28:57 GMT 2025
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123308
--- Comment #4 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Andrew Pinski <pinskia@gcc.gnu.org>:
https://gcc.gnu.org/g:92f2a86794ad88d773b102c753e13be1b6f05ff9
commit r16-6436-g92f2a86794ad88d773b102c753e13be1b6f05ff9
Author: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
Date: Fri Dec 26 12:07:26 2025 -0800
ifcvt: Handle lowpart subregs if noce_emit_cmove fails in
noce_try_cond_zero_arith [PR123308]
This fixes up a missed optimization regression for riscv in ifcvt after
r16-6350-g9e61a171244110.
The problem is noce_emit_cmove will fail for QImode. This can show up when
dealing with shifts
and the right hand side is `(subreg:QI (reg:DI) lowpart)`. Trying first for
the subreg mode
fails so the need to try to unwrap the subreg and try for the full mode.
This fixes test_ShiftLeft_eqz in gcc.target/riscv/zicond_ifcvt_opt.c.
Bootstrapped and tested on x86_64-linux-gnu.
PR rtl-optimization/123308
gcc/ChangeLog:
* ifcvt.cc (noce_try_cond_zero_arith): If noce_emit_cmove fails
for a lowpart subreg case, then try the full reg cmove and
take the lowpart subreg afterwards.
Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
More information about the Gcc-bugs
mailing list