https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126602
Bug ID: 126602
Summary: [17 Regression] error: invalid types in nop conversion
with SVE fnms
Product: gcc
Version: 17.0
Status: UNCONFIRMED
Keywords: aarch64-sve, ice-on-valid-code
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: ktkachov at gcc dot gnu.org
CC: tnfchris at gcc dot gnu.org
Target Milestone: ---
Target: aarch64
#include <arm_sve.h>
typedef svfloat32_t sv8f __attribute__((arm_sve_vector_bits(256)));
typedef float v8f __attribute__((vector_size(32)));
/* c - (sv8f)(a * b), multiply in the GNU vector type. */
void p (v8f *pa, v8f *pb, sv8f *pc)
{
v8f a = *pa, b = *pb;
v8f m = a * b;
*pc = *pc - (sv8f)m;
}
/* Mirrored: multiply in the SVE type, addend a GNU vector. */
void q (sv8f *pa, sv8f *pb, v8f *pc)
{
sv8f m = *pa * *pb;
*pc = *pc - (v8f)m;
}
/* Explicit negate of a multiplicand. */
void r (v8f *pa, v8f *pb, sv8f *pc)
{
v8f m = (-*pa) * *pb;
*pc = *pc + (sv8f)m;
}
ICEs on aarch64 with -O2 -march=armv9-a -msve-vector-bits=256
<source>:6:6: error: invalid types in nop conversion
6 | void p (v8f *pa, v8f *pb, sv8f *pc)
| ^
unsigned int
float
_15 = (vector(8) unsigned int) a_6;
<source>:6:6: error: invalid types in nop conversion
unsigned int
float
_16 = (vector(8) unsigned int) _13;
<source>:6:6: error: invalid types in nop conversion
unsigned int
float
_17 = (vector(8) unsigned int) _1;
<source>:6:6: error: invalid types in nop conversion
float
unsigned int
_3 = (svfloat32_t __attribute__((arm_sve_vector_bits(256)))) _18;
during GIMPLE pass: widening_mul
<source>:6:6: internal compiler error: verify_gimple failed