This adds a testcase for a bug that was fixed with the
hybrid SLP detection rewrite.

Tested on x86_64-unknown-linux-gnu, pushed.

2021-04-30  Richard Biener  <rguent...@suse.de>

        PR tree-optimization/96513
        * gcc.dg/torture/pr96513.c: New testcase.
---
 gcc/testsuite/gcc.dg/torture/pr96513.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)
 create mode 100644 gcc/testsuite/gcc.dg/torture/pr96513.c

diff --git a/gcc/testsuite/gcc.dg/torture/pr96513.c 
b/gcc/testsuite/gcc.dg/torture/pr96513.c
new file mode 100644
index 00000000000..5ee040e96c8
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/torture/pr96513.c
@@ -0,0 +1,26 @@
+/* { dg-do compile } */
+
+typedef struct {
+  short a;
+  short b;
+} c;
+c *d;
+int e, f, i, j, k, l, m, n, o, p;
+c g, h;
+void q() {
+  do {
+    if (o) {
+      (*d).a = (*d).b = d[e].a = d[e].a * 3 + 1 >> 15;
+      d[e].b = d[e].b * 3 + 1 >> 15;
+    }
+    n = -(d[e].b * g.b) >> 5;
+    m = d[e].b * g.a + 1 >> 5;
+    l = d[f].a * -d[f].b * h.b + 1 >> 5;
+    k = d[f].a * h.b + d[f].b * h.a + 1 >> 5;
+    j = n + l;
+    i = m - k;
+    (*d).a += j;
+    d[e].a -= i;
+    ++d;
+  } while (--p);
+}
-- 
2.26.2

Reply via email to