if (d->vec_flags == VEC_SVE_PRED
|| !d->one_vector_p
- || !d->perm[0].is_constant (&diff))
+ || !d->perm[0].is_constant (&diff)
+ || !diff)
return false;
size = (diff + 1) * GET_MODE_UNIT_SIZE (d->vmode);
--- /dev/null
+typedef unsigned __attribute__((__vector_size__(8))) V2SI_u;
+typedef int __attribute__((__vector_size__(8))) V2SI_d;
+
+typedef unsigned long __attribute__((__vector_size__(16))) V2DI_u;
+typedef long __attribute__((__vector_size__(16))) V2DI_d;
+
+void id_V2SI(V2SI_d *v)
+{
+ *v = __builtin_shuffle(*v, (V2SI_d)(V2SI_u) { 0, 1 });
+}
+
+void id_V2DI(V2DI_d *v)
+{
+ *v = __builtin_shuffle(*v, (V2DI_d)(V2DI_u) { 0, 1 });
+}
+
+extern void abort(void);
+
+int main(void)
+{
+ V2SI_d si = { 35, 42 };
+ id_V2SI(&si);
+
+ if (si[0] != 35 || si[1] != 42)
+ abort();
+
+ V2DI_d di = { 63, 38 };
+ id_V2DI(&di);
+
+ if (di[0] != 63 || di[1] != 38)
+ abort();
+}