@@ -26170,11 +26170,15 @@ decide_alg (HOST_WIDE_INT count, HOST_WI
}
alg = decide_alg (count, new_expected_size, min_size, max_size, memset,
zero_memset, have_as, dynamic_check, noalign);
- gcc_assert (*dynamic_check == -1);
if (TARGET_INLINE_STRINGOPS_DYNAMICALLY)
- *dynamic_check = max;
+ {
+ /* *dynamic_check could be set 128 above because we avoided
+ infinite recursion. */
+ gcc_assert (*dynamic_check == -1 || *dynamic_check == 128);
+ *dynamic_check = max;
+ }
else
- gcc_assert (alg != libcall);
+ gcc_assert (alg != libcall && *dynamic_check == -1);
return alg;
}
return (alg_usable_p (algs->unknown_size, memset, have_as)
@@ -0,0 +1,11 @@
+/* PR target/70062 */
+/* { dg-options "-minline-all-stringops -minline-stringops-dynamically -mmemcpy-strategy=libcall:-1:noalign -Wno-psabi" } */
+/* { dg-additional-options "-mtune=k6-2" { target ia32 } } */
+
+typedef int V __attribute__ ((vector_size (32)));
+
+V
+foo (V x)
+{
+ return (V) { x[0] };
+}