diff gcc/testsuite/c-c++-common/cilk-plus/AN/test_builtin_return.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gcc/testsuite/c-c++-common/cilk-plus/AN/test_builtin_return.c	Fri Oct 27 22:46:09 2017 +0900
@@ -0,0 +1,73 @@
+/* { dg-options "-lm -fcilkplus" } */
+/* { dg-do run } */
+
+#if HAVE_IO
+#include <stdio.h>
+#endif
+#include <math.h>
+#define NUMBER 5
+
+int func1 (int *a1, int *a2)
+{
+  return __sec_reduce_add (a1[0:NUMBER] * a2[0:NUMBER:1]);
+}
+
+int func2 (int *a1, int *a2)
+{
+  return (__sec_reduce_add (a1[0:NUMBER] * a2[0:NUMBER]) + 
+	  __sec_reduce_mul (a1[0:NUMBER] + a2[0:NUMBER]));
+}
+
+int func3 (int *a1, int *a2)
+{
+  return (int) sqrt ((double)(__sec_reduce_add (a1[0:NUMBER] * a2[0:NUMBER]) +
+			      a2[0] + a2[1] + a2[3]));
+}
+
+int func4 (int *a1, int *a2)
+{
+  return a1[NUMBER-1] * (__sec_reduce_add (a1[0:NUMBER] * a2[0:NUMBER]) + a2[0] + a2[1] + a2[3])/a1[NUMBER-2];
+}
+int main(void)
+{
+  int array[NUMBER], array2[NUMBER];
+  int return_value = 0;
+  int ii = 0;
+  int argc = 1;
+  __asm volatile ("" : "+r" (argc));
+  for (ii = 0; ii < NUMBER; ii++)
+    {
+      array[ii] = argc; /* This should calculate to 1.  */
+      array2[ii]  = argc * argc + argc;  /* This should calculate to 2.  */
+    }
+
+  return_value = func1 (array, array2);
+#if HAVE_IO
+  printf("Return_value = %d\n", return_value);
+#endif
+  if (return_value != (2+2+2+2+2))
+    return 1;
+
+  return_value = func2 (array2, array);
+#if HAVE_IO
+  printf("Return_value = %d\n", return_value);
+#endif
+  if (return_value != (3*3*3*3*3) + (2+2+2+2+2))
+    return 2;
+
+  return_value = func3 (array, array2);
+#if HAVE_IO
+  printf("Return_value = %d\n", return_value);
+#endif
+  if (return_value != 4)
+    return 3;
+
+  return_value = func4 (array, array2);
+#if HAVE_IO
+  printf("Return_value = %d\n", return_value);
+#endif
+  if (return_value != 16)
+    return 4;
+
+  return 0;
+}