[Bug tree-optimization/123382] [16 Regression] AArch64: ICE at -O3: invalid mask type in 'vec_perm_expr'
cvs-commit at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Jan 8 00:48:20 GMT 2026
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=123382
--- Comment #3 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:c5ae6aaa9e7ff78d81c5be106e2c12100d3425bc
commit r16-6566-gc5ae6aaa9e7ff78d81c5be106e2c12100d3425bc
Author: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
Date: Sat Jan 3 11:32:02 2026 -0800
vect/ifcvt: Don't factor out VEC_PERM_EXPR with constant masks [PR123382]
VEC_PERM_EXPR is another special case expression where constants can mean
something different from non-constant.
So if we have:
```
if (_5 != 0) goto <bb 4>; else goto <bb 5>;
<bb 4>
t_15 = VEC_PERM_EXPR <t_12, t_12, { 3, 3, 2, 3 }>;
goto <bb 6>; [100.00%]
<bb 5>
t_14 = VEC_PERM_EXPR <t_12, t_12, { 0, 0, 2, 3 }>;
<bb 6>
# t_7 = PHI <t_15(4), t_14(5)>
```
We can't factor out the VEC_PERM_EXPR here since the type
of the vector constant can be different from the type of
the other operands. This is unlike the operand is not a
constant, the mask has to be an integral type which is
similar to the other operands.
Changes since v1:
* v2: Expand comment on why we should reject this.
Bootstrapped and tested on x86_64-linux-gnu.
PR tree-optimization/123382
gcc/ChangeLog:
* tree-if-conv.cc: Reject VEC_PERM_EXPR for factoring
if it is the mask and they are constant.
gcc/testsuite/ChangeLog:
* gcc.dg/torture/pr123382-1.c: New test.
* gcc.dg/torture/pr123382-2.c: New test.
Signed-off-by: Andrew Pinski <andrew.pinski@oss.qualcomm.com>
More information about the Gcc-bugs
mailing list