--- /dev/null
+/* { dg-add-options ieee } */
+/* { dg-additional-options "-fno-associative-math -fsigned-zeros" } */
+
+double x[4] = {-0.0, 0.0, -0.0, 0.0};
+float y[8] = {-0.0, 0.0, -0.0, 0.0, -0.0, -0.0, 0.0, 0.0};
+
+static __attribute__ ((always_inline)) inline void
+test (int factor)
+{
+ double a[4];
+ float b[8];
+
+ asm ("" ::: "memory");
+
+ for (int i = 0; i < 2 * factor; i++)
+ a[i] = -x[i];
+
+ for (int i = 0; i < 4 * factor; i++)
+ b[i] = -y[i];
+
+#pragma GCC novector
+ for (int i = 0; i < 2 * factor; i++)
+ if (__builtin_signbit (a[i]) == __builtin_signbit (x[i]))
+ __builtin_abort ();
+
+#pragma GCC novector
+ for (int i = 0; i < 4 * factor; i++)
+ if (__builtin_signbit (b[i]) == __builtin_signbit (y[i]))
+ __builtin_abort ();
+}
+
+int
+main (void)
+{
+ test (1);
+ test (2);
+ return 0;
+}