Add a testcase for PR target/64114
authorH.J. Lu <hongjiu.lu@intel.com>
Sat, 29 Nov 2014 15:57:32 +0000 (15:57 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Sat, 29 Nov 2014 15:57:32 +0000 (07:57 -0800)
PR target/64114
* gcc.target/i386/pr64114.c: New test.

From-SVN: r218182

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr64114.c [new file with mode: 0644]

index 888c5964c9ff23893b11702c1a20454ce27edaf1..023e5d94e9c75bc3296dd4da2e1844ba8eea4d0c 100644 (file)
@@ -1,3 +1,8 @@
+2014-11-29  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/64114
+       * gcc.target/i386/pr64114.c: New test.
+
 2014-11-29  Joseph Myers  <joseph@codesourcery.com>
 
        PR preprocessor/41698
diff --git a/gcc/testsuite/gcc.target/i386/pr64114.c b/gcc/testsuite/gcc.target/i386/pr64114.c
new file mode 100644 (file)
index 0000000..d948684
--- /dev/null
@@ -0,0 +1,24 @@
+/* { dg-do compile } */
+/* { dg-options "-O -mstringop-strategy=vector_loop -mno-push-args" } */
+
+extern float *ptrs[];
+extern int incs[];
+
+struct big
+{
+  int i[0x10000];
+};
+
+extern void bar (struct big b);
+
+struct big
+foo (int n)
+{
+  struct big b;
+
+  int inc14 = incs[15], inc16 = n, inc17 = n, inc19 = incs[3];
+  float *ptr0 = ptrs[1], *ptr14 = ptrs[14], *ptr16 = ptrs[16];
+  while (n--)
+    *ptr0 += *ptr14 += inc14 += *ptr16 += inc16 += inc17 += inc19, bar (b);
+  return b;
+}