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

Reply via email to