https://gcc.gnu.org/bugzilla/show_bug.cgi?id=115464
Tamar Christina <tnfchris at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |rsandifo at gcc dot gnu.org --- Comment #4 from Tamar Christina <tnfchris at gcc dot gnu.org> --- Looks like the Neon lowpart optimization doesn't take into account aggregate vectors. That means simplest reproduction is: #include <arm_neon.h> #include <arm_sve.h> #include <arm_neon_sve_bridge.h> svuint16_t convolve4_4_x (uint16x8x2_t permute_tbl) { return svset_neonq_u16 (svundef_u16 (), permute_tbl.val[1]); } This generates a subreg between from E_V2x8HImode to E_VNx8HImode. This subreg is an invalid paradoxical subreg as there's no strict ordered relationship between the modes. This fails because ordered_p does not have a relationship defined between a poly vector and an aggregate non-poly vector. I think one should probably be provided, essentially the NEON<->SVE bridge is broken for aggregate types in general at the moment. I don't know the exact semantics for poly-ints. I tried patching ordered_p but the ICE just moves. Any thoughts Richard?