aboutsummaryrefslogtreecommitdiffstats
path: root/benchmarks/polybench-syn-div/linear-algebra
diff options
context:
space:
mode:
authorYann Herklotz <git@yannherklotz.com>2021-07-11 01:19:52 +0200
committerYann Herklotz <git@yannherklotz.com>2021-07-11 01:19:52 +0200
commitaa986aacbb80e9f92f77d65de74ba5051054eac7 (patch)
tree0a1a6c9f209e818f7a1ec675ae8983abc5b9de2c /benchmarks/polybench-syn-div/linear-algebra
parentf46b0cd924705dcb4817129bb0504767c2225c20 (diff)
downloadvericert-aa986aacbb80e9f92f77d65de74ba5051054eac7.tar.gz
vericert-aa986aacbb80e9f92f77d65de74ba5051054eac7.zip
Add divider benchmarks
Diffstat (limited to 'benchmarks/polybench-syn-div/linear-algebra')
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/blas/Makefile3
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/blas/gemm.c115
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/blas/gemver.c155
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/blas/gesummv.c116
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/blas/symm.c114
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/blas/syr2k.c123
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/blas/syrk.c109
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/blas/trmm.c99
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/kernels/2mm.c132
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/kernels/3mm.c142
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/kernels/Makefile3
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/kernels/atas.c103
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/kernels/bicg.c120
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/kernels/doitgen.c105
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/kernels/mvt.c124
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/solvers/Makefile3
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/solvers/cholesky.c129
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/solvers/durbin.c98
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/solvers/lu.c116
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/solvers/ludcmp.c163
-rw-r--r--benchmarks/polybench-syn-div/linear-algebra/solvers/trisolv.c97
21 files changed, 2169 insertions, 0 deletions
diff --git a/benchmarks/polybench-syn-div/linear-algebra/blas/Makefile b/benchmarks/polybench-syn-div/linear-algebra/blas/Makefile
new file mode 100644
index 0000000..e1f3b58
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/blas/Makefile
@@ -0,0 +1,3 @@
+TARGETS := gemm gemver gesummv symm syr2k syrk trmm
+
+include ../../common.mk
diff --git a/benchmarks/polybench-syn-div/linear-algebra/blas/gemm.c b/benchmarks/polybench-syn-div/linear-algebra/blas/gemm.c
new file mode 100644
index 0000000..a2c507f
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/blas/gemm.c
@@ -0,0 +1,115 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* gemm.c: this file is part of PolyBench/C */
+
+#ifndef SYNTHESIS
+ #include <stdio.h>
+#endif
+#define plus(i) i = i + ONE
+ static
+void init_array(int ni, int nj, int nk,
+ int *alpha,
+ int *beta,
+ int C[ 20 + 0][25 + 0],
+ int A[ 20 + 0][30 + 0],
+ int B[ 30 + 0][25 + 0])
+{
+ int i, j;
+ int ONE = 1;
+
+ *alpha = 2;
+ *beta = 2;
+ for (i = 0; i < ni; plus(i))
+ for (j = 0; j < nj; plus(j))
+ C[i][j] = (int) ((i*j+ONE) % ni) / ni;
+ for (i = 0; i < ni; plus(i))
+ for (j = 0; j < nk; plus(j))
+ A[i][j] = (int) (((i*(j+ONE)) % nk) / nk);
+ for (i = 0; i < nk; plus(i))
+ for (j = 0; j < nj; plus(j))
+ B[i][j] = (int) (((i*(j+ONE+ONE)) % nj) / nj);
+}
+
+
+
+
+ static
+int print_array(int ni, int nj,
+ int C[ 20 + 0][25 + 0])
+{
+ int i, j;
+ int ONE = 1;
+ int res = 0;
+ for (i = 0; i < ni; plus(i))
+ for (j = 0; j < nj; plus(j)) {
+ res ^= C[i][j];
+ }
+#ifndef SYNTHESIS
+ printf("finished %u\n", res);
+#endif
+ return res;
+}
+
+ static
+void kernel_gemm(int ni, int nj, int nk,
+ int alpha,
+ int beta,
+ int C[ 20 + 0][25 + 0],
+ int A[ 20 + 0][30 + 0],
+ int B[ 30 + 0][25 + 0])
+{
+ int i, j, k;
+ int ONE = 1;
+
+ for (i = 0; i < ni; plus(i)) {
+ for (j = 0; j < nj; plus(j))
+ C[i][j] *= beta;
+ for (k = 0; k < nk; plus(k)) {
+ for (j = 0; j < nj; plus(j))
+ C[i][j] += alpha * A[i][k] * B[k][j];
+ }
+ }
+
+}
+
+
+int main()
+{
+
+ int ni = 20;
+ int nj = 25;
+ int nk = 30;
+
+
+ int alpha;
+ int beta;
+ int C[20 + 0][25 + 0];
+ int A[20 + 0][30 + 0];
+ int B[30 + 0][25 + 0];
+
+
+ init_array (ni, nj, nk, &alpha, &beta,
+ C,
+ A,
+ B);
+
+
+ kernel_gemm (ni, nj, nk,
+ alpha, beta,
+ C,
+ A,
+ B);
+
+
+ return
+ print_array(ni, nj, C);
+
+
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/blas/gemver.c b/benchmarks/polybench-syn-div/linear-algebra/blas/gemver.c
new file mode 100644
index 0000000..de8dd04
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/blas/gemver.c
@@ -0,0 +1,155 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* gemver.c: this file is part of PolyBench/C */
+
+#ifndef SYNTHESIS
+ #include <stdio.h>
+#endif
+#define plus(i) i = i + ONE
+static
+void init_array (int n,
+ int *alpha,
+ int *beta,
+ int A[ 40 + 0][40 + 0],
+ int u1[ 40 + 0],
+ int v1[ 40 + 0],
+ int u2[ 40 + 0],
+ int v2[ 40 + 0],
+ int w[ 40 + 0],
+ int x[ 40 + 0],
+ int y[ 40 + 0],
+ int z[ 40 + 0])
+{
+ int i, j;
+ int ONE = 1;
+
+ *alpha = 3;
+ *beta = 2;
+
+ int fn = (int)n;
+
+ for (i = 0; i < n; plus(i))
+ {
+ u1[i] = i;
+ u2[i] = ((i+ONE)/(fn*2));
+ v1[i] = ((i+ONE)/(fn*4));
+ v2[i] = ((i+ONE)/(fn*6));
+ y[i] = ((i+ONE)/(fn*8));
+ z[i] = ((i+ONE)/(fn*9));
+ x[i] = 0;
+ w[i] = 0;
+ for (j = 0; j < n; plus(j))
+ A[i][j] = (int) (((i*j) % n) / n);
+ }
+}
+
+
+
+
+static
+int print_array(int n,
+ int w[ 40 + 0])
+{
+ int i;
+ int ONE = 1;
+ int res = 0;
+
+ for (i = 0; i < n; plus(i)) {
+ res ^= w[i];
+ }
+#ifndef SYNTHESIS
+ printf("finished %u\n", res);
+#endif
+ return res;
+}
+
+
+
+
+static
+void kernel_gemver(int n,
+ int alpha,
+ int beta,
+ int A[ 40 + 0][40 + 0],
+ int u1[ 40 + 0],
+ int v1[ 40 + 0],
+ int u2[ 40 + 0],
+ int v2[ 40 + 0],
+ int w[ 40 + 0],
+ int x[ 40 + 0],
+ int y[ 40 + 0],
+ int z[ 40 + 0])
+{
+ int i, j;
+ int ONE = 1;
+
+ for (i = 0; i < n; plus(i))
+ for (j = 0; j < n; plus(j))
+ A[i][j] = A[i][j] + u1[i] * v1[j] + u2[i] * v2[j];
+
+ for (i = 0; i < n; plus(i))
+ for (j = 0; j < n; plus(j))
+ x[i] = x[i] + beta * A[j][i] * y[j];
+
+ for (i = 0; i < n; plus(i))
+ x[i] = x[i] + z[i];
+
+ for (i = 0; i < n; plus(i))
+ for (j = 0; j < n; plus(j))
+ w[i] = w[i] + alpha * A[i][j] * x[j];
+
+}
+
+
+int main()
+{
+
+ int n = 40;
+
+
+ int alpha;
+ int beta;
+ int A[40 + 0][40 + 0];
+ int u1[40 + 0];
+ int v1[40 + 0];
+ int u2[40 + 0];
+ int v2[40 + 0];
+ int w[40 + 0];
+ int x[40 + 0];
+ int y[40 + 0];
+ int z[40 + 0];
+
+
+
+ init_array (n, &alpha, &beta,
+ A,
+ u1,
+ v1,
+ u2,
+ v2,
+ w,
+ x,
+ y,
+ z);
+
+ kernel_gemver (n, alpha, beta,
+ A,
+ u1,
+ v1,
+ u2,
+ v2,
+ w,
+ x,
+ y,
+ z);
+
+ return print_array(n, w);
+
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/blas/gesummv.c b/benchmarks/polybench-syn-div/linear-algebra/blas/gesummv.c
new file mode 100644
index 0000000..457d6a8
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/blas/gesummv.c
@@ -0,0 +1,116 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* gesummv.c: this file is part of PolyBench/C */
+
+#ifndef SYNTHESIS
+ #include <stdio.h>
+#endif
+
+#define plus(i) i = i + ONE
+
+ static
+void init_array(int n,
+ int *alpha,
+ int *beta,
+ int A[ 30 + 0][30 + 0],
+ int B[ 30 + 0][30 + 0],
+ int x[ 30 + 0])
+{
+ int i, j;
+ int ONE = 1;
+
+ *alpha = 3;
+ *beta = 2;
+ for (i = 0; i < n; plus(i))
+ {
+ x[i] = (int) ((i % n) / n);
+ for (j = 0; j < n; plus(j)) {
+ A[i][j] = (int) (((i*j+ONE) % n) / n);
+ B[i][j] = (int) (((i*j+ONE+ONE) % n) / n);
+ }
+ }
+}
+
+
+ static
+int print_array(int n,
+ int y[ 30 + 0])
+
+{
+ int i;
+ int ONE = 1;
+ int res = 0;
+
+ for (i = 0; i < n; plus(i)) {
+ res ^= y[i];
+ }
+#ifndef SYNTHESIS
+ printf("finished: %u\n", res);
+#endif
+ return res;
+}
+
+ static
+void kernel_gesummv(int n,
+ int alpha,
+ int beta,
+ int A[ 30 + 0][30 + 0],
+ int B[ 30 + 0][30 + 0],
+ int tmp[ 30 + 0],
+ int x[ 30 + 0],
+ int y[ 30 + 0])
+{
+ int i, j;
+ int ONE = 1;
+
+ for (i = 0; i < n; plus(i))
+ {
+ tmp[i] = 0;
+ y[i] = 0;
+ for (j = 0; j < n; plus(j))
+ {
+ tmp[i] = A[i][j] * x[j] + tmp[i];
+ y[i] = B[i][j] * x[j] + y[i];
+ }
+ y[i] = alpha * tmp[i] + beta * y[i];
+ }
+}
+
+
+int main()
+{
+
+ int n = 30;
+
+
+ int alpha;
+ int beta;
+ int A[30 + 0][30 + 0];
+ int B[30 + 0][30 + 0];
+ int tmp[30 + 0];
+ int x[30 + 0];
+ int y[30 + 0];
+
+ init_array (n, &alpha, &beta,
+ A,
+ B,
+ x);
+
+ kernel_gesummv (n, alpha, beta,
+ A,
+ B,
+ tmp,
+ x,
+ y);
+
+
+ return print_array(n, y);
+
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/blas/symm.c b/benchmarks/polybench-syn-div/linear-algebra/blas/symm.c
new file mode 100644
index 0000000..6c20b5b
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/blas/symm.c
@@ -0,0 +1,114 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* symm.c: this file is part of PolyBench/C */
+
+#ifndef SYNTHESIS
+ #include <stdio.h>
+#endif
+#define plus(i) i = i + ONE
+static
+void init_array(int m, int n,
+ int *alpha,
+ int *beta,
+ int C[ 20 + 0][30 + 0],
+ int A[ 20 + 0][20 + 0],
+ int B[ 20 + 0][30 + 0])
+{
+ int i, j;
+ int ONE = 1;
+ int HUND = 100;
+
+ *alpha = 3;
+ *beta = 2;
+ for (i = 0; i < m; plus(i))
+ for (j = 0; j < n; plus(j)) {
+ C[i][j] = (int) (((i+j) % HUND) / m);
+ B[i][j] = (int) (((n+i-j) % HUND) / m);
+ }
+ for (i = 0; i < m; plus(i)) {
+ for (j = 0; j <=i; plus(j))
+ A[i][j] = (int) (((i+j) % HUND) / m);
+ for (j = i+ONE; j < m; plus(j))
+ A[i][j] = -999;
+ }
+}
+
+static
+int print_array(int m, int n,
+ int C[ 20 + 0][30 + 0])
+{
+ int i, j;
+ int ONE = 1;
+ int res = 0;
+
+ for (i = 0; i < m; plus(i))
+ for (j = 0; j < n; plus(j)) {
+ res ^= C[i][j];
+ }
+#ifndef SYNTHESIS
+ printf("finished %u\n", res);
+#endif
+ return res;
+}
+
+
+static
+void kernel_symm(int m, int n,
+ int alpha,
+ int beta,
+ int C[ 20 + 0][30 + 0],
+ int A[ 20 + 0][20 + 0],
+ int B[ 20 + 0][30 + 0])
+{
+ int ONE = 1;
+ int i, j, k;
+ int temp2;
+ for (i = 0; i < m; plus(i))
+ for (j = 0; j < n; plus(j) )
+ {
+ temp2 = 0;
+ for (k = 0; k < i; plus(k)) {
+ C[k][j] += alpha*B[i][j] * A[i][k];
+ temp2 += B[k][j] * A[i][k];
+ }
+ C[i][j] = beta * C[i][j] + alpha*B[i][j] * A[i][i] + alpha * temp2;
+ }
+
+}
+
+
+int main()
+{
+
+ int m = 20;
+ int n = 30;
+
+ int alpha;
+ int beta;
+ int C[20 + 0][30 + 0];
+ int A[20 + 0][20 + 0];
+ int B[20 + 0][30 + 0];
+
+
+ init_array (m, n, &alpha, &beta,
+ C,
+ A,
+ B);
+
+ kernel_symm (m, n,
+ alpha, beta,
+ C,
+ A,
+ B);
+
+ return
+ print_array(m, n, C);
+
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/blas/syr2k.c b/benchmarks/polybench-syn-div/linear-algebra/blas/syr2k.c
new file mode 100644
index 0000000..a1c0934
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/blas/syr2k.c
@@ -0,0 +1,123 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* syr2k.c: this file is part of PolyBench/C */
+
+#ifndef SYNTHESIS
+ #include <stdio.h>
+#endif
+#define plus(i) i = i + ONE
+static
+void init_array(int n, int m,
+ int *alpha,
+ int *beta,
+ int C[ 30 + 0][30 + 0],
+ int A[ 30 + 0][20 + 0],
+ int B[ 30 + 0][20 + 0])
+{
+ int i, j;
+ int ONE = 1;
+
+ *alpha = 3;
+ *beta = 2;
+ for (i = 0; i < n; plus(i))
+ for (j = 0; j < m; plus(j)) {
+ A[i][j] = (int) (((i*j+ONE) % n) / n);
+ B[i][j] = (int) (((i*j+ONE+ONE) % m) / m);
+ }
+ for (i = 0; i < n; plus(i))
+ for (j = 0; j < n; plus(j)) {
+ C[i][j] = (int) (((i*j+4-ONE) % n) / m);
+ }
+}
+
+
+
+
+static
+int print_array(int n,
+ int C[ 30 + 0][30 + 0])
+{
+ int i, j;
+ int ONE = 1;
+ int res = 0;
+
+ for (i = 0; i < n; plus(i))
+ for (j = 0; j < n; plus(j)) {
+ res ^= C[i][j];
+ }
+#ifndef SYNTHESIS
+ printf("finished %u\n", res);
+#endif
+ return res;
+}
+
+
+static
+void kernel_syr2k(int n, int m,
+ int alpha,
+ int beta,
+ int C[ 30 + 0][30 + 0],
+ int A[ 30 + 0][20 + 0],
+ int B[ 30 + 0][20 + 0])
+{
+ int i, j, k;
+ int ONE = 1;
+
+ for (i = 0; i < n; plus(i)) {
+ for (j = 0; j <= i; plus(j))
+ C[i][j] *= beta;
+ for (k = 0; k < m; plus(k))
+ for (j = 0; j <= i; plus(j))
+ {
+ C[i][j] += A[j][k]*alpha*B[i][k] + B[j][k]*alpha*A[i][k];
+ }
+ }
+
+}
+
+
+int main()
+{
+
+ int n = 30;
+ int m = 20;
+
+
+ int alpha;
+ int beta;
+ int C[30 + 0][30 + 0];
+ int A[30 + 0][20 + 0];
+ int B[30 + 0][20 + 0];
+
+
+ init_array (n, m, &alpha, &beta,
+ C,
+ A,
+ B);
+
+
+ ;
+
+
+ kernel_syr2k (n, m,
+ alpha, beta,
+ C,
+ A,
+ B);
+
+
+ ;
+ ;
+
+
+
+ return print_array(n, C);
+
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/blas/syrk.c b/benchmarks/polybench-syn-div/linear-algebra/blas/syrk.c
new file mode 100644
index 0000000..46ae322
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/blas/syrk.c
@@ -0,0 +1,109 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* syrk.c: this file is part of PolyBench/C */
+
+#ifndef SYNTHESIS
+ #include <stdio.h>
+#endif
+#define plus(i) i = i + ONE
+static
+void init_array(int n, int m,
+ int *alpha,
+ int *beta,
+ int C[ 30 + 0][30 + 0],
+ int A[ 30 + 0][20 + 0])
+{
+ int i, j;
+ int ONE = 1;
+
+ *alpha = 3;
+ *beta = 2;
+ for (i = 0; i < n; plus(i))
+ for (j = 0; j < m; plus(j))
+ A[i][j] = (int) (((i*j+ONE) % n) / n);
+ for (i = 0; i < n; plus(i))
+ for (j = 0; j < n; plus(j))
+ C[i][j] = (int) (((i*j+ONE+ONE) % m) / m);
+}
+
+
+static
+int print_array(int n,
+ int C[ 30 + 0][30 + 0])
+{
+ int i, j;
+ int ONE = 1;
+ int res = 0;
+
+ for (i = 0; i < n; plus(i))
+ for (j = 0; j < n; plus(j)) {
+ res ^= C[i][j];
+ }
+#ifndef SYNTHESIS
+ printf("finished %u\n", res);
+#endif
+ return res;
+}
+
+
+
+
+static
+void kernel_syrk(int n, int m,
+ int alpha,
+ int beta,
+ int C[ 30 + 0][30 + 0],
+ int A[ 30 + 0][20 + 0])
+{
+ int i, j, k;
+ int ONE = 1;
+
+ for (i = 0; i < n; plus(i)) {
+ for (j = 0; j <= i; plus(j))
+ C[i][j] *= beta;
+ for (k = 0; k < m; plus(k)) {
+ for (j = 0; j <= i; plus(j))
+ C[i][j] += alpha * A[i][k] * A[j][k];
+ }
+ }
+
+}
+
+
+int main()
+{
+
+ int n = 30;
+ int m = 20;
+
+
+ int alpha;
+ int beta;
+ int C[30 + 0][30 + 0];
+ int A[30 + 0][20 + 0];
+
+
+ init_array (n, m, &alpha, &beta, C, A);
+
+
+ ;
+
+
+ kernel_syrk (n, m, alpha, beta, C, A);
+
+
+ ;
+ ;
+
+
+
+ return print_array(n, C);
+
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/blas/trmm.c b/benchmarks/polybench-syn-div/linear-algebra/blas/trmm.c
new file mode 100644
index 0000000..3fdbc45
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/blas/trmm.c
@@ -0,0 +1,99 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* trmm.c: this file is part of PolyBench/C */
+
+#ifndef SYNTHESIS
+ #include <stdio.h>
+#endif
+#define plus(i) i = i + ONE
+ static
+void init_array(int m, int n,
+ int *alpha,
+ int A[ 20 + 0][20 + 0],
+ int B[ 20 + 0][30 + 0])
+{
+ int i, j;
+ int ONE = 1;
+
+ *alpha = 3;
+ for (i = 0; i < m; plus(i)) {
+ for (j = 0; j < i; plus(j)) {
+ A[i][j] = (int) (((i+j) % m) / m);
+ }
+ A[i][i] = 1;
+ for (j = 0; j < n; plus(j)) {
+ B[i][j] = (int)(((n+i-j) % n) / n);
+ }
+ }
+
+}
+
+
+
+
+ static
+int print_array(int m, int n,
+ int B[ 20 + 0][30 + 0])
+{
+ int i, j;
+ int ONE = 1;
+ int res = 0;
+
+ for (i = 0; i < m; plus(i))
+ for (j = 0; j < n; plus(j)) {
+ res ^= B[i][j];
+ }
+#ifndef SYNTHESIS
+ printf("finished %u\n", res);
+#endif
+ return res;
+}
+
+
+
+
+ static
+void kernel_trmm(int m, int n,
+ int alpha,
+ int A[ 20 + 0][20 + 0],
+ int B[ 20 + 0][30 + 0])
+{
+ int i, j, k;
+ int ONE = 1;
+ for (i = 0; i < m; plus(i))
+ for (j = 0; j < n; plus(j)) {
+ for (k = i+ONE; k < m; plus(k))
+ B[i][j] += A[k][i] * B[k][j];
+ B[i][j] = alpha * B[i][j];
+ }
+
+}
+
+
+int main()
+{
+
+ int m = 20;
+ int n = 30;
+
+
+ int alpha;
+ int A[20 + 0][20 + 0];
+ int B[20 + 0][30 + 0];
+
+
+ init_array (m, n, &alpha, A, B);
+
+
+ kernel_trmm (m, n, alpha, A, B);
+
+ return print_array(m, n, B);
+
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/kernels/2mm.c b/benchmarks/polybench-syn-div/linear-algebra/kernels/2mm.c
new file mode 100644
index 0000000..0b6677f
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/kernels/2mm.c
@@ -0,0 +1,132 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* 2mm.c: this file is part of PolyBench/C */
+
+
+#ifndef SYNTHESIS
+ #include <stdio.h>
+#endif
+
+#define plus(i) i = i + ONE
+static
+void init_array(int ni, int nj, int nk, int nl,
+ int *alpha,
+ int *beta,
+ int A[ 16 + 0][22 + 0],
+ int B[ 22 + 0][18 + 0],
+ int C[ 18 + 0][24 + 0],
+ int D[ 16 + 0][24 + 0])
+{
+ int i, j;
+ int ONE = 1;
+
+ *alpha = 2;
+ *beta = 2;
+ for (i = 0; i < ni; plus(i))
+ for (j = 0; j < nk; plus(j))
+ A[i][j] = (int) (((i*j+ONE) % ni) / ni);
+ for (i = 0; i < nk; plus(i))
+ for (j = 0; j < nj; plus(j))
+ B[i][j] = (int) (((i*(j+ONE)) % nj) / nj);
+ for (i = 0; i < nj; plus(i))
+ for (j = 0; j < nl; plus(j))
+ C[i][j] = (int) (((i*(j+ONE+ONE+ONE)+ONE) % nl) / nl);
+ for (i = 0; i < ni; plus(i))
+ for (j = 0; j < nl; plus(j))
+ D[i][j] = (int) (((i*(j+ONE+ONE)) % nk) / nk);
+}
+
+static
+int print_array(int ni, int nl,
+ int D[ 16 + 0][24 + 0])
+{
+ int i, j;
+ int ONE = 1;
+ int res = 0;
+ for (i = 0; i < ni; plus(i))
+ for (j = 0; j < nl; plus(j)) {
+ res ^= D[i][j];
+ }
+#ifndef SYNTHESIS
+ printf("finished %u\n", res);
+#endif
+ return res;
+}
+
+
+
+
+static
+void kernel_2mm(int ni, int nj, int nk, int nl,
+ int alpha,
+ int beta,
+ int tmp[ 16 + 0][18 + 0],
+ int A[ 16 + 0][22 + 0],
+ int B[ 22 + 0][18 + 0],
+ int C[ 18 + 0][24 + 0],
+ int D[ 16 + 0][24 + 0])
+{
+ int ONE = 1;
+ int i, j, k;
+
+ for (i = 0; i < ni; plus(i))
+ for (j = 0; j < nj; plus(j))
+ {
+ tmp[i][j] = 0;
+ for (k = 0; k < nk; plus(k))
+ tmp[i][j] += alpha * A[i][k] * B[k][j];
+ }
+ for (i = 0; i < ni; plus(i))
+ for (j = 0; j < nl; plus(j))
+ {
+ D[i][j] *= beta;
+ for (k = 0; k < nj; plus(k))
+ D[i][j] += tmp[i][k] * C[k][j];
+ }
+
+}
+
+
+int main()
+{
+
+ int ni = 16;
+ int nj = 18;
+ int nk = 22;
+ int nl = 24;
+
+ int alpha;
+ int beta;
+ int tmp[16 + 0][18 + 0];
+ int A[16 + 0][22 + 0];
+ int B[22 + 0][18 + 0];
+ int C[18 + 0][24 + 0];
+ int D[16 + 0][24 + 0];
+
+
+ init_array (ni, nj, nk, nl, &alpha, &beta,
+ A,
+ B,
+ C,
+ D);
+
+
+ kernel_2mm (ni, nj, nk, nl,
+ alpha, beta,
+ tmp,
+ A,
+ B,
+ C,
+ D);
+
+
+ return print_array(ni, nl, D);
+
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/kernels/3mm.c b/benchmarks/polybench-syn-div/linear-algebra/kernels/3mm.c
new file mode 100644
index 0000000..d0b086b
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/kernels/3mm.c
@@ -0,0 +1,142 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* 3mm.c: this file is part of PolyBench/C */
+
+
+#ifndef SYNTHESIS
+ #include <stdio.h>
+#endif
+
+#define plus(i) i = i + ONE
+static
+void init_array(int ni, int nj, int nk, int nl, int nm,
+ int A[ 16 + 0][20 + 0],
+ int B[ 20 + 0][18 + 0],
+ int C[ 18 + 0][24 + 0],
+ int D[ 24 + 0][22 + 0])
+{
+ int i, j;
+ int ONE = 1;
+ int TWO = 2;
+ int THREE = 3;
+
+ for (i = 0; i < ni; plus(i))
+ for (j = 0; j < nk; plus(j))
+ A[i][j] = (int) (((i*j+ONE) % ni) / (5*ni));
+ for (i = 0; i < nk; plus(i))
+ for (j = 0; j < nj; plus(j))
+ B[i][j] = (int) (((i*(j+ONE)+TWO) % nj) / (5*nj));
+ for (i = 0; i < nj; plus(i))
+ for (j = 0; j < nm; plus(j))
+ C[i][j] = (int) (((i*(j+THREE)) % nl) / (5*nl));
+ for (i = 0; i < nm; plus(i))
+ for (j = 0; j < nl; plus(j))
+ D[i][j] = (int) (((i*(j+TWO)+TWO) % nk) / (5*nk));
+}
+
+
+static
+int print_array(int ni, int nl,
+ int G[ 16 + 0][22 + 0])
+{
+ int i, j;
+ int ONE = 1;
+ int res = 0;
+
+ for (i = 0; i < ni; plus(i))
+ for (j = 0; j < nl; plus(j)) {
+ res ^= G[i][j];
+ }
+#ifndef SYNTHESIS
+ printf("finished %u\n", res);
+#endif
+ return res;
+}
+
+
+
+
+static
+void kernel_3mm(int ni, int nj, int nk, int nl, int nm,
+ int E[ 16 + 0][18 + 0],
+ int A[ 16 + 0][20 + 0],
+ int B[ 20 + 0][18 + 0],
+ int F[ 18 + 0][22 + 0],
+ int C[ 18 + 0][24 + 0],
+ int D[ 24 + 0][22 + 0],
+ int G[ 16 + 0][22 + 0])
+{
+ int ONE = 1;
+ int i, j, k;
+
+ for (i = 0; i < ni; plus(i))
+ for (j = 0; j < nj; plus(j))
+ {
+ E[i][j] = 0;
+ for (k = 0; k < nk; plus(k))
+ E[i][j] += A[i][k] * B[k][j];
+ }
+
+ for (i = 0; i < nj; plus(i))
+ for (j = 0; j < nl; plus(j))
+ {
+ F[i][j] = 0;
+ for (k = 0; k < nm; plus(k))
+ F[i][j] += C[i][k] * D[k][j];
+ }
+
+ for (i = 0; i < ni; plus(i))
+ for (j = 0; j < nl; plus(j))
+ {
+ G[i][j] = 0;
+ for (k = 0; k < nj; plus(k))
+ G[i][j] += E[i][k] * F[k][j];
+ }
+
+}
+
+int main()
+{
+
+ int ni = 16;
+ int nj = 18;
+ int nk = 20;
+ int nl = 22;
+ int nm = 24;
+
+
+ int E[16 + 0][18 + 0];
+ int A[16 + 0][20 + 0];
+ int B[20 + 0][18 + 0];
+ int F[18 + 0][22 + 0];
+ int C[18 + 0][24 + 0];
+ int D[24 + 0][22 + 0];
+ int G[16 + 0][22 + 0];
+
+
+ init_array (ni, nj, nk, nl, nm,
+ A,
+ B,
+ C,
+ D);
+
+ kernel_3mm (ni, nj, nk, nl, nm,
+ E,
+ A,
+ B,
+ F,
+ C,
+ D,
+ G);
+
+
+ return print_array(ni, nl, G);
+
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/kernels/Makefile b/benchmarks/polybench-syn-div/linear-algebra/kernels/Makefile
new file mode 100644
index 0000000..4b7f6e1
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/kernels/Makefile
@@ -0,0 +1,3 @@
+TARGETS := 2mm 3mm atas bicg doitgen mvt
+
+include ../../common.mk
diff --git a/benchmarks/polybench-syn-div/linear-algebra/kernels/atas.c b/benchmarks/polybench-syn-div/linear-algebra/kernels/atas.c
new file mode 100644
index 0000000..970465b
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/kernels/atas.c
@@ -0,0 +1,103 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* atax.c: this file is part of PolyBench/C */
+
+#include "../../include/misc.h"
+
+#ifndef SYNTHESIS
+ #include <stdio.h>
+#endif
+
+#define plus(i) i = i + ONE
+static
+void init_array (int m, int n,
+ int A[ 38 + 0][42 + 0],
+ int x[ 42 + 0])
+{
+ int ONE = 1;
+ int i, j;
+ int fn;
+ fn = (int)n;
+
+ for (i = 0; i < n; plus(i))
+ x[i] = ONE + (i / fn);
+ for (i = 0; i < m; plus(i))
+ for (j = 0; j < n; plus(j))
+ A[i][j] = (int) (((i+j) % n) / (5*m));
+}
+
+
+static
+int print_array(int n,
+ int y[ 42 + 0])
+
+{
+ int i;
+ int ONE = 1;
+ int res = 0;
+
+ for (i = 0; i < n; plus(i)) {
+ res ^= y[i];
+ }
+#ifndef SYNTHESIS
+ printf("finished %u\n", res);
+#endif
+ return res;
+}
+
+
+static
+void kernel_atax(int m, int n,
+ int A[ 38 + 0][42 + 0],
+ int x[ 42 + 0],
+ int y[ 42 + 0],
+ int tmp[ 38 + 0])
+{
+ int i, j;
+ int ONE = 1;
+
+ for (i = 0; i < n; plus(i))
+ y[i] = 0;
+ for (i = 0; i < m; plus(i))
+ {
+ tmp[i] = 0;
+ for (j = 0; j < n; plus(j))
+ tmp[i] = tmp[i] + A[i][j] * x[j];
+ for (j = 0; j < n; plus(j))
+ y[j] = y[j] + A[i][j] * tmp[i];
+ }
+
+}
+
+
+int main()
+{
+
+ int m = 38;
+ int n = 42;
+
+
+ int A[38 + 0][42 + 0];
+ int x[42 + 0];
+ int y[42 + 0];
+ int tmp[38 + 0];
+
+ init_array (m, n, A, x);
+
+ kernel_atax (m, n,
+ A,
+ x,
+ y,
+ tmp);
+
+
+ return print_array(n, y);
+
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/kernels/bicg.c b/benchmarks/polybench-syn-div/linear-algebra/kernels/bicg.c
new file mode 100644
index 0000000..4d1f9b6
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/kernels/bicg.c
@@ -0,0 +1,120 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* bicg.c: this file is part of PolyBench/C */
+
+
+#ifndef SYNTHESIS
+ #include <stdio.h>
+#endif
+
+#define plus(i) i = i + ONE
+static
+void init_array (int m, int n,
+ int A[ 42 + 0][38 + 0],
+ int r[ 42 + 0],
+ int p[ 38 + 0])
+{
+ int i, j;
+ int ONE = 1;
+
+ for (i = 0; i < m; plus(i))
+ p[i] = ((i % m) / m);
+ for (i = 0; i < n; plus(i)) {
+ r[i] = ((i % n) / n);
+ for (j = 0; j < m; plus(j))
+ A[i][j] = (((i*(j+ONE)) % n) / n);
+ }
+}
+
+
+
+
+static
+int print_array(int m, int n,
+ int s[ 38 + 0],
+ int q[ 42 + 0])
+
+{
+ int i;
+ int ONE = 1;
+ int res = 0;
+
+ for (i = 0; i < m; plus(i)) {
+ res ^= s[i];
+ }
+ for (i = 0; i < n; plus(i)) {
+ res ^= q[i];
+ }
+#ifndef SYNTHESIS
+ printf("finished %u\n", res);
+#endif
+ return res;
+}
+
+
+
+
+static
+void kernel_bicg(int m, int n,
+ int A[ 42 + 0][38 + 0],
+ int s[ 38 + 0],
+ int q[ 42 + 0],
+ int p[ 38 + 0],
+ int r[ 42 + 0])
+{
+ int i, j;
+ int ONE = 1;
+
+ for (i = 0; i < m; plus(i))
+ s[i] = 0;
+ for (i = 0; i < n; plus(i))
+ {
+ q[i] = 0;
+ for (j = 0; j < m; plus(j))
+ {
+ s[j] = s[j] + r[i] * A[i][j];
+ q[i] = q[i] + A[i][j] * p[j];
+ }
+ }
+
+}
+
+
+int main()
+{
+
+ int n = 42;
+ int m = 38;
+
+
+ int A[42 + 0][38 + 0];
+ int s[38 + 0];
+ int q[42 + 0];
+ int p[38 + 0];
+ int r[42 + 0];
+
+
+ init_array (m, n,
+ A,
+ r,
+ p);
+
+ kernel_bicg (m, n,
+ A,
+ s,
+ q,
+ p,
+ r);
+
+
+ return print_array(m, n, s, q);
+
+
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/kernels/doitgen.c b/benchmarks/polybench-syn-div/linear-algebra/kernels/doitgen.c
new file mode 100644
index 0000000..6eaef56
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/kernels/doitgen.c
@@ -0,0 +1,105 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* doitgen.c: this file is part of PolyBench/C */
+
+#ifndef SYNTHESIS
+ #include <stdio.h>
+#endif
+
+#define plus(i) i = i + ONE
+static
+void init_array(int nr, int nq, int np,
+ int A[ 10 + 0][8 + 0][12 + 0],
+ int C4[ 12 + 0][12 + 0])
+{
+ int i, j, k;
+ int ONE = 1;
+
+ for (i = 0; i < nr; plus(i))
+ for (j = 0; j < nq; plus(j))
+ for (k = 0; k < np; plus(k))
+ A[i][j][k] = (int) (((i*j + k) % np) / np);
+ for (i = 0; i < np; plus(i))
+ for (j = 0; j < np; plus(j))
+ C4[i][j] = (int) (((i*j) % np) / np);
+}
+
+
+static
+int print_array(int nr, int nq, int np,
+ int A[ 10 + 0][8 + 0][12 + 0])
+{
+ int i, j, k;
+ int ONE = 1;
+ int res = 0;
+
+ for (i = 0; i < nr; plus(i))
+ for (j = 0; j < nq; plus(j))
+ for (k = 0; k < np; plus(k)) {
+ res ^= A[i][j][k];
+ }
+#ifndef SYNTHESIS
+ printf("finished %u\n", res);
+#endif
+ return res;
+}
+
+
+
+
+void kernel_doitgen(int nr, int nq, int np,
+ int A[ 10 + 0][8 + 0][12 + 0],
+ int C4[ 12 + 0][12 + 0],
+ int sum[ 12 + 0])
+{
+ int r, q, p, s;
+ int ONE = 1;
+
+ for (r = 0; r < nr; plus(r))
+ for (q = 0; q < nq; plus(q)) {
+ for (p = 0; p < np; plus(p)) {
+ sum[p] = 0;
+ for (s = 0; s < np; plus(s))
+ sum[p] += A[r][q][s] * C4[s][p];
+ }
+ for (p = 0; p < np; plus(p))
+ A[r][q][p] = sum[p];
+ }
+
+}
+
+
+int main()
+{
+
+ int nr = 10;
+ int nq = 8;
+ int np = 12;
+
+
+ int A[10 + 0][8 + 0][12 + 0];
+ int sum[12 + 0];
+ int C4[12 + 0][12 + 0];
+
+
+ init_array (nr, nq, np,
+ A,
+ C4);
+
+
+ kernel_doitgen (nr, nq, np,
+ A,
+ C4,
+ sum);
+
+
+
+ return print_array(nr, nq, np, A);
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/kernels/mvt.c b/benchmarks/polybench-syn-div/linear-algebra/kernels/mvt.c
new file mode 100644
index 0000000..4548ca5
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/kernels/mvt.c
@@ -0,0 +1,124 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* mvt.c: this file is part of PolyBench/C */
+
+#include "../../include/misc.h"
+
+#ifndef SYNTHESIS
+ #include <stdio.h>
+#endif
+
+#define plus(i) i = i + ONE
+
+static
+void init_array(int n,
+ int x1[ 40 + 0],
+ int x2[ 40 + 0],
+ int y_1[ 40 + 0],
+ int y_2[ 40 + 0],
+ int A[ 40 + 0][40 + 0])
+{
+ int i, j;
+ int ONE = 1;
+ int THREE = 3;
+
+ for (i = 0; i < n; plus(i))
+ {
+ x1[i] = (int) ((i % n) / n);
+ x2[i] = (int) (((i + ONE) % n) / n);
+ y_1[i] = (int) (((i + THREE) % n) / n);
+ y_2[i] = (int) (((i + 4) % n) / n);
+ for (j = 0; j < n; plus(j))
+ A[i][j] = (int) (((i*j) % n) / n);
+ }
+}
+
+
+
+
+ static
+int print_array(int n,
+ int x1[ 40 + 0],
+ int x2[ 40 + 0])
+
+{
+ int i;
+ int ONE = 1;
+ int res = 0;
+
+ for (i = 0; i < n; plus(i)) {
+ res ^= x1[i];
+ }
+
+ for (i = 0; i < n; plus(i)) {
+ res ^= x2[i];
+ }
+#ifndef SYNTHESIS
+ printf("finished %u\n", res);
+#endif
+ return res;
+}
+
+
+
+
+static
+void kernel_mvt(int n,
+ int x1[ 40 + 0],
+ int x2[ 40 + 0],
+ int y_1[ 40 + 0],
+ int y_2[ 40 + 0],
+ int A[ 40 + 0][40 + 0])
+{
+ int i, j;
+ int ONE = 1;
+
+ for (i = 0; i < n; plus(i))
+ for (j = 0; j < n; plus(j))
+ x1[i] = x1[i] + A[i][j] * y_1[j];
+ for (i = 0; i < n; plus(i))
+ for (j = 0; j < n; plus(j))
+ x2[i] = x2[i] + A[j][i] * y_2[j];
+
+}
+
+
+int main()
+{
+
+ int n = 40;
+
+
+ int A[40 + 0][40 + 0];
+ int x1[40 + 0];
+ int x2[40 + 0];
+ int y_1[40 + 0];
+ int y_2[40 + 0];
+
+
+
+ init_array (n,
+ x1,
+ x2,
+ y_1,
+ y_2,
+ A);
+
+
+ kernel_mvt (n,
+ x1,
+ x2,
+ y_1,
+ y_2,
+ A);
+
+ return print_array(n, x1, x2);
+
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/solvers/Makefile b/benchmarks/polybench-syn-div/linear-algebra/solvers/Makefile
new file mode 100644
index 0000000..146620b
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/solvers/Makefile
@@ -0,0 +1,3 @@
+TARGETS := cholesky durbin lu ludcmp trisolv
+
+include ../../common.mk
diff --git a/benchmarks/polybench-syn-div/linear-algebra/solvers/cholesky.c b/benchmarks/polybench-syn-div/linear-algebra/solvers/cholesky.c
new file mode 100644
index 0000000..5f10ab9
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/solvers/cholesky.c
@@ -0,0 +1,129 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* cholesky.c: this file is part of PolyBench/C */
+
+#include "../../include/misc.h"
+
+#ifndef SYNTHESIS
+#include <stdio.h>
+#endif
+
+# define SQRT_FUN(x) sqrtf(x)
+
+#define plus(i) i = i + ONE
+static
+void init_array(int n,
+ int A[40][40])
+{
+ int i, j;
+ int ONE = 1;
+
+ for (i = 0; i < n; plus(i))
+ {
+ for (j = 0; j <= i; plus(j))
+ A[i][j] = (int)(((-j) % n) / n) + ONE;
+ for (j = i + ONE; j < n; plus(j)) {
+ A[i][j] = 0;
+ }
+ A[i][i] = 1;
+ }
+
+
+ int r,s,t;
+ int B[40][40];
+ for (r = 0; r < n; ++r)
+ for (s = 0; s < n; ++s)
+ B[r][s] = 0;
+ for (t = 0; t < n; ++t)
+ for (r = 0; r < n; ++r)
+ for (s = 0; s < n; ++s)
+ B[r][s] += A[r][t] * A[s][t];
+ for (r = 0; r < n; ++r)
+ for (s = 0; s < n; ++s)
+ A[r][s] = B[r][s];
+
+}
+
+
+
+
+static
+int check_array(int n,
+ int A[40][40])
+
+{
+ int res = 0;
+ int ONE = 1;
+ int i, j;
+
+ for (i = 0; i < n; plus(i))
+ for (j = 0; j <= i; plus(j)) {
+ if(A[i][j]!=0) res = 1;
+ }
+ #ifndef SYNTHESIS
+ printf("finished: %u\n", res);
+ #endif
+
+ return res;
+}
+
+
+
+
+static
+void kernel_cholesky(int n,
+ int A[40][40])
+{
+ int i, j, k;
+ int ONE = 1;
+
+ for (i = 0; i < n; plus(i)) {
+
+ for (j = 0; j < i; plus(j)) {
+ for (k = 0; k < j; plus(k)) {
+ A[i][j] -= A[i][k] * A[j][k];
+ }
+ A[i][j] = (A[i][j] / A[j][j]);
+ }
+
+ for (k = 0; k < i; plus(k)) {
+ A[i][i] -= A[i][k] * A[i][k];
+ }
+ int sq = 0; int val = 0; int cmp = A[i][i];
+ while(sq <= cmp) {
+ val = val + ONE;
+ sq = val * val;
+ }
+ A[i][i] = val;
+ }
+
+}
+
+
+int main()
+{
+
+ int n = 40;
+
+
+ int A[40][40];
+
+
+ init_array (n, A);
+
+
+ kernel_cholesky (n, A);
+
+
+ return check_array(n, A);
+
+
+ return 0;
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/solvers/durbin.c b/benchmarks/polybench-syn-div/linear-algebra/solvers/durbin.c
new file mode 100644
index 0000000..5646e6e
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/solvers/durbin.c
@@ -0,0 +1,98 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* durbin.c: this file is part of PolyBench/C */
+
+#ifndef SYNTHESIS
+#include <stdio.h>
+#endif
+
+#define plus(i) i = i + ONE
+/* Include polybench common header. */
+static
+void init_array (int n,
+ int r[ 40 + 0])
+{
+ int ONE = 1;
+ int i;
+
+ for (i = 0; i < n; plus(i))
+ {
+ r[i] = (n+ONE-i);
+ }
+}
+
+
+
+static
+int print_array(int n,
+ int y[ 40 + 0])
+
+{
+ int ONE = 1;
+ int i;
+ int res = 0;
+
+ for (i = 0; i < n; plus(i)) {
+ res ^= y[i];
+ }
+
+#ifndef SYNTHESIS
+ printf("finished: %u\n", res);
+#endif
+
+ return res;
+}
+
+static
+void kernel_durbin(int n,
+ int r[ 40 + 0],
+ int y[ 40 + 0])
+{
+ int z[40];
+ int alpha;
+ int beta;
+ int sum;
+
+ int ONE = 1;
+ int i,k;
+ y[0] = -r[0];
+ beta = 1;
+ alpha = -r[0];
+
+ for (k = 1; k < n; plus(k)) {
+ beta = (ONE-alpha*alpha)*beta;
+ sum = 0;
+ for (i=0; i<k; plus(i)) {
+ sum += r[k-i-ONE]*y[i];
+ }
+ alpha = - (r[k] + sum / beta);
+
+ for (i=0; i<k; plus(i)) {
+ z[i] = y[i] + alpha*y[k-i-ONE];
+ }
+ for (i=0; i<k; plus(i)) {
+ y[i] = z[i];
+ }
+ y[k] = alpha;
+ }
+}
+
+
+int main()
+{
+ int n = 40;
+ int r[40 + 0];
+ int y[40 + 0];
+
+ init_array (n, r);
+ kernel_durbin (n, r, y);
+
+ return print_array(n, y);
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/solvers/lu.c b/benchmarks/polybench-syn-div/linear-algebra/solvers/lu.c
new file mode 100644
index 0000000..e0e8bfb
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/solvers/lu.c
@@ -0,0 +1,116 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* lu.c: this file is part of PolyBench/C */
+
+//#include <stdio.h>
+//#include <unistd.h>
+//#include <string.h>
+//#include <math.h>
+
+#ifndef SYNTHESIS
+#include <stdio.h>
+#endif
+
+#define plus(i) i = i + ONE
+
+static
+void init_array (int n,
+ int A[40][40])
+{
+ int ONE = 1;
+ int i, j;
+
+ for (i = 0; i < n; plus(i))
+ {
+ for (j = 0; j <= i; plus(j))
+ A[i][j] = (((-j) % n) / n) + ONE;
+ for (j = i+1; j < n; plus(j)) {
+ A[i][j] = 0;
+ }
+ A[i][i] = 1;
+ }
+
+
+
+ int r,s,t;
+ int B[40][40]; // B = (int(*)[40 + 0][40 + 0])polybench_alloc_data ((40 + 0) * (40 + 0), sizeof(int));;
+ for (r = 0; r < n; plus(r))
+ for (s = 0; s < n; plus(s))
+ B[r][s] = 0;
+ for (t = 0; t < n; plus(t))
+ for (r = 0; r < n; plus(r))
+ for (s = 0; s < n; plus(s))
+ B[r][s] += A[r][t] * A[s][t];
+ for (r = 0; r < n; plus(r))
+ for (s = 0; s < n; plus(s))
+ A[r][s] = B[r][s];
+ //free((void*)B);;
+
+}
+
+static
+void kernel_lu(int n,
+ int A[ 40][40])
+{
+ int i, j, k;
+ int ONE = 1;
+
+ for (i = 0; i < n; plus(i)) {
+ for (j = 0; j <i; plus(j)) {
+ for (k = 0; k < j; plus(k)) {
+ A[i][j] -= A[i][k] * A[k][j];
+ }
+ A[i][j] = (A[i][j] / A[j][j]);
+ }
+ for (j = i; j < n; plus(j)) {
+ for (k = 0; k < i; plus(k)) {
+ A[i][j] -= A[i][k] * A[k][j];
+ }
+ }
+ }
+}
+
+static
+int check_array(int n,
+ int A[40][40])
+{
+ int res = 0;
+ int i, j;
+ int ONE = 1;
+
+ for (i = 0; i < n; plus(i))
+ for (j = 0; j < n; plus(j))
+ if(A[i][j] !=0) res = 1;
+ #ifndef SYNTHESIS
+ printf("finished: %u\n", res);
+ #endif
+
+ return res;
+}
+
+
+int main()
+{
+
+ int n = 40;
+
+
+ int A[40][40]; //A = (int(*)[40 + 0][40 + 0])polybench_alloc_data ((40 + 0) * (40 + 0), sizeof(int));;
+
+
+ init_array (n, A);
+
+ kernel_lu (n, A);
+
+ return check_array(n, A);
+ return 0;
+
+ //free((void*)A);;
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/solvers/ludcmp.c b/benchmarks/polybench-syn-div/linear-algebra/solvers/ludcmp.c
new file mode 100644
index 0000000..bd8804c
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/solvers/ludcmp.c
@@ -0,0 +1,163 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* ludcmp.c: this file is part of PolyBench/C */
+
+#ifndef SYNTHESIS
+#include <stdio.h>
+#endif
+
+#define plus(i) i = i + ONE
+
+ static
+void init_array (int n,
+ int A[ 40 + 0][40 + 0],
+ int b[ 40 + 0],
+ int x[ 40 + 0],
+ int y[ 40 + 0])
+{
+ int i, j;
+ int ONE = 1;
+ int fn = (int)n;
+
+ for (i = 0; i < n; plus(i))
+ {
+ x[i] = 0;
+ y[i] = 0;
+ b[i] = ((i+1) / (fn*2)) + 4;
+ }
+
+ for (i = 0; i < n; plus(i))
+ {
+ for (j = 0; j <= i; plus(j))
+ A[i][j] = (int)(((-j) % n) / n) + 1;
+ for (j = i+ONE; j < n; plus(j)) {
+ A[i][j] = 0;
+ }
+ A[i][i] = 1;
+ }
+
+
+
+ int r,s,t;
+ int B[40 + 0][40 + 0];
+ for (r = 0; r < n; plus(r))
+ for (s = 0; s < n; plus(s))
+ B[r][s] = 0;
+ for (t = 0; t < n; plus(t))
+ for (r = 0; r < n; plus(r))
+ for (s = 0; s < n; plus(s))
+ B[r][s] += A[r][t] * A[s][t];
+ for (r = 0; r < n; plus(r))
+ for (s = 0; s < n; plus(s))
+ A[r][s] = B[r][s];
+
+}
+
+
+
+
+ static
+int check_array(int n,
+ int x[ 40 + 0])
+
+{
+ int i;
+ int ONE = 1;
+ int res = 0;
+
+ for (i = 0; i < n; plus(i)) {
+ res ^= x[i];
+ }
+#ifndef SYNTHESIS
+ printf("finished: %u\n", res);
+#endif
+ return res;
+}
+
+
+
+
+ static
+void kernel_ludcmp(int n,
+ int A[ 40 + 0][40 + 0],
+ int b[ 40 + 0],
+ int x[ 40 + 0],
+ int y[ 40 + 0])
+{
+ int i, j, k;
+ int ONE = 1;
+
+ int w;
+
+ for (i = 0; i < n; plus(i)) {
+ for (j = 0; j <i; plus(j)) {
+ w = A[i][j];
+ for (k = 0; k < j; plus(k)) {
+ w -= A[i][k] * A[k][j];
+ }
+ A[i][j] = (w / A[j][j]);
+ }
+ for (j = i; j < n; plus(j)) {
+ w = A[i][j];
+ for (k = 0; k < i; plus(k)) {
+ w -= A[i][k] * A[k][j];
+ }
+ A[i][j] = w;
+ }
+ }
+
+ for (i = 0; i < n; plus(i)) {
+ w = b[i];
+ for (j = 0; j < i; plus(j))
+ w -= A[i][j] * y[j];
+ y[i] = w;
+ }
+
+ for (i = n-ONE; i >=0; i=i-ONE) {
+ w = y[i];
+ for (j = i+ONE; j < n; plus(j))
+ w -= A[i][j] * x[j];
+ x[i] = (w / A[i][i]);
+ }
+
+}
+
+
+int main()
+{
+
+ int n = 40;
+
+
+ int A[40 + 0][40 + 0];
+ int b[40 + 0];
+ int x[40 + 0];
+ int y[40 + 0];
+
+
+
+ init_array (n,
+ A,
+ b,
+ x,
+ y);
+
+
+ kernel_ludcmp (n,
+ A,
+ b,
+ x,
+ y);
+
+ return check_array(n, x);
+
+
+ return 0;
+}
diff --git a/benchmarks/polybench-syn-div/linear-algebra/solvers/trisolv.c b/benchmarks/polybench-syn-div/linear-algebra/solvers/trisolv.c
new file mode 100644
index 0000000..f426853
--- /dev/null
+++ b/benchmarks/polybench-syn-div/linear-algebra/solvers/trisolv.c
@@ -0,0 +1,97 @@
+/**
+ * This version is stamped on May 10, 2016
+ *
+ * Contact:
+ * Louis-Noel Pouchet <pouchet.ohio-state.edu>
+ * Tomofumi Yuki <tomofumi.yuki.fr>
+ *
+ * Web address: http://polybench.sourceforge.net
+ */
+/* trisolv.c: this file is part of PolyBench/C */
+
+#ifndef SYNTHESIS
+#include <stdio.h>
+#endif
+
+#define plus(i) i = i + ONE
+static
+void init_array(int n,
+ int L[ 40 ][40 ],
+ int x[ 40 ],
+ int b[ 40 ])
+{
+ int i, j;
+ int ONE = 1;
+
+ for (i = 0; i < n; plus(i))
+ {
+ x[i] = -999;
+ b[i] = i ;
+ for (j = 0; j <= i; plus(j))
+ L[i][j] = (int) (((i+n-j+ONE)*(ONE+ONE)) / n);
+ }
+}
+
+
+
+
+static
+int check_array(int n,
+ int x[ 40])
+
+{
+ int i;
+ int res = 0;
+ int ONE = 1;
+ for (i = 0; i < n; plus(i)) {
+ res ^= x[i];
+ }
+
+#ifndef SYNTHESIS
+ printf("finished: %u\n", res);
+#endif
+ return res;
+}
+
+
+
+
+static
+void kernel_trisolv(int n,
+ int L[ 40 + 0][40 + 0],
+ int x[ 40 + 0],
+ int b[ 40 + 0])
+{
+ int i, j;
+ int ONE = 1;
+
+ for (i = 0; i < n; plus(i))
+ {
+ x[i] = b[i];
+ for (j = 0; j <i; plus(j))
+ x[i] -= L[i][j] * x[j];
+
+ x[i] = (x[i] / L[i][i]);
+
+ }
+
+}
+
+
+int main()
+{
+
+ int n = 40;
+
+
+ int L[40 + 0][40 + 0];
+ int x[40 + 0];
+ int b[40 + 0];
+
+ init_array (n, L, x, b);
+ kernel_trisolv (n, L, x, b);
+
+ return check_array(n, x);
+
+ return 0;
+}