diff --git a/gcc/testsuite/gcc.dg/vect/bb-slp-pr98854.c b/gcc/testsuite/gcc.dg/vect/bb-slp-pr98854.c
new file mode 100644
index 0000000000000000000000000000000000000000..0c8141e1d17ad5e5e8c909cc65776b6b8f182ec6
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/vect/bb-slp-pr98854.c
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+
+double a[1024];
+
+int bar();
+void foo (int n)
+{
+  double x = 0, y = 0;
+  int i = 1023;
+  do
+    {
+      x += a[i] + a[i+1];
+      y += a[i] / a[i+1];
+      if (bar ())
+        break;
+    }
+  while (--i);
+  /* We want to avoid vectorizing the LC PHI and insert vector CTORs
+     inside of the loop where it is only needed here.  */
+  a[0] = x;
+  a[1] = y;
+}
+
+/* { dg-final { scan-tree-dump-not "vectorizing SLP node starting from: ._\[0-9\]+ = PHI" "slp1" } } */
diff --git a/gcc/tree-vect-slp.c b/gcc/tree-vect-slp.c
index 4465cf7494ee1608e34ed1091ac2c0428cd4de2e..10b876ff5ede8896eb95abd22f716e458c99416d 100644
--- a/gcc/tree-vect-slp.c
+++ b/gcc/tree-vect-slp.c
@@ -1896,7 +1896,10 @@ fail:
 		n_vector_builds++;
 	    }
 	}
-      if (all_uniform_p || n_vector_builds > 1)
+      if (all_uniform_p
+	  || n_vector_builds > 1
+	  || (n_vector_builds == children.length ()
+	      && is_a <gphi *> (stmt_info->stmt)))
 	{
 	  /* Roll back.  */
 	  matches[0] = false;