@@ -2409,7 +2409,8 @@ mips_cannot_force_const_mem (machine_mode mode, rtx x)
references, reload will consider forcing C into memory and using
one of the instruction's memory alternatives. Returning false
here will force it to use an input reload instead. */
- if (CONST_INT_P (x) && mips_legitimate_constant_p (mode, x))
+ if ((CONST_INT_P (x) || GET_CODE (x) == CONST_VECTOR)
+ && mips_legitimate_constant_p (mode, x))
return true;
split_const (x, &base, &offset);
new file mode 100644
@@ -0,0 +1,31 @@
+/* { dg-do compile } */
+/* { dg-options "-mfp64 -mhard-float -mmsa" } */
+/* { dg-skip-if "code quality test" { *-*-* } { "-Os" "-O0" "-O1" "-O2" } { "" } } */
+
+void foo (void);
+
+void bar (void)
+{
+ int x[4];
+ int y[4];
+ int i;
+
+ while (1)
+ {
+ foo ();
+
+ for (i = 0; i < 4; i++)
+ {
+ x[i] = 0;
+ y[i] = 0;
+ }
+
+ asm volatile (""
+ :
+ :"m"(x), "m"(y)
+ :"memory");
+ }
+}
+
+/* { dg-final { scan-assembler-not "ld.w" } } */
+/* { dg-final { scan-assembler-times "st.w" 2 } } */