[Bug tree-optimization/123778] ICE at -O3 on aarch64: verify_gimple failed
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Jan 23 19:19:10 GMT 2026
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123778
--- Comment #8 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:0cdcc61fb9976b9f6ba2fbf5e9211c3e23a9799c
commit r16-7004-g0cdcc61fb9976b9f6ba2fbf5e9211c3e23a9799c
Author: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
Date: Thu Jan 22 23:12:42 2026 -0800
match: Fix some `(op (cnd @0 @1 @2) @3)` patterns [PR123778]
All of these patterns have in common is they try to move
the op inside the cnd if it simplifies. The problem is the
type of the op does not need to be the type of first operand
and instead is the type of the type variable. The fix is to
supply the type to the op like in `(op:type @1 @3)`.
But since they were originally in the `(op! @1 @3)`, it should be:
`(op!:type @1 @3)`. Though this would be rejected as we don't pick
up the next token after parsing the `!` (note `^` has the same issue
which is also fixed here too).
Bootstrapped and tested on x86_64-linux-gnu.
PR tree-optimization/123778
gcc/ChangeLog:
* genmatch.cc (parser::parse_expr): Peek on the next
token after eating the `!` or `^`.
* match.pd (`(op (cnd @0 @1 @2) @3)`, `(op @3 (cnd @0 @1 @2))`):
Add the type to resulting op.
gcc/testsuite/ChangeLog:
* gcc.dg/torture/pr123778-1.c: New test.
Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
More information about the Gcc-bugs
mailing list