@@ -119,7 +119,7 @@ inline vec_perm_indices::element_type
vec_perm_indices::clamp (element_type elt) const
{
element_type limit = input_nelts (), elem_within_input;
- int input;
+ HOST_WIDE_INT input;
if (!can_div_trunc_p (elt, limit, &input, &elem_within_input))
return elt;
@@ -0,0 +1,22 @@
+/* PR tree-optimization/85331 */
+
+typedef double V __attribute__((vector_size (2 * sizeof (double))));
+typedef long long W __attribute__((vector_size (2 * sizeof (long long))));
+
+__attribute__((noipa)) void
+foo (V *r)
+{
+ V y = { 1.0, 2.0 };
+ W m = { 10000000001LL, 0LL };
+ *r = __builtin_shuffle (y, m);
+}
+
+int
+main ()
+{
+ V r;
+ foo (&r);
+ if (r[0] != 2.0 || r[1] != 1.0)
+ __builtin_abort ();
+ return 0;
+}