aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-53.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-53.c')
-rw-r--r--gcc/testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-53.c128
1 files changed, 128 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-53.c b/gcc/testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-53.c
new file mode 100644
index 00000000000..9e36aecca52
--- /dev/null
+++ b/gcc/testsuite/gcc.dg/tree-ssa-chrec/ssa-chrec-53.c
@@ -0,0 +1,128 @@
+/* { dg-do compile } */
+/* { dg-options "-O1 -fscalar-evolutions -fdump-tree-scev-details -fall-data-deps -fdump-tree-ddall" } */
+
+#define N 16
+
+void fbar (float *);
+void ibar (int *);
+void sbar (short *);
+
+/* Should be vectorized */
+
+foo (int n)
+{
+ float a[N+1];
+ float b[N];
+ float c[N];
+ float d[N];
+ int ia[N];
+ int ib[N];
+ int ic[N];
+ double da[N];
+ double db[N];
+ short sa[N];
+ short sb[N];
+ short sc[N];
+ int i,j;
+ int diff = 0;
+ char cb[N];
+ char cc[N];
+ char image[N][N];
+ char block[N][N];
+
+ /* Not vetorizable yet (unknown loop bound). */
+ for (i = 0; i < n; i++){
+ a[i] = b[i];
+ }
+ fbar (a);
+
+ /* Vectorizable. */
+ for (i = 0; i < N; i++){
+ a[i] = b[i];
+ }
+ fbar (a);
+
+ /* Not Vectorizable (mode not supported). */
+ for (i = 0; i < N; i++){
+ da[i] = db[i];
+ }
+ fbar (a);
+
+ /* Not vetorizable yet (constant assignment). */
+ for (i = 0; i < N; i++){
+ a[i] = 5;
+ }
+ fbar (a);
+
+ /* Vectorizable. */
+ for (i = 0; i < N; i++){
+ a[i] = b[i] + c[i] + d[i];
+ }
+ fbar (a);
+
+ /* Vectorizable. */
+ for (i = 0; i < N; i++){
+ a[i] = b[i] * c[i];
+ }
+ fbar (a);
+
+ /* Vectorizable. */
+ for (i = 0; i < N/2; i++){
+ a[i] = b[i+N/2] * c[i+N/2] - b[i] * c[i];
+ d[i] = b[i] * c[i+N/2] + b[i+N/2] * c[i];
+ }
+ fbar (a);
+
+ /* Not vetorizable yet (too conservative dependence test). */
+ for (i = 0; i < N/2; i++){
+ a[i] = b[i+N/2] * c[i+N/2] - b[i] * c[i];
+ a[i+N/2] = b[i] * c[i+N/2] + b[i+N/2] * c[i];
+ }
+ fbar (a);
+
+ /* Not vetorizable yet (access pattern). */
+ for (i = 0; i < N/2; i++){
+ a[i] = b[2*i+1] * c[2*i+1] - b[2*i] * c[2*i];
+ d[i] = b[2*i] * c[2*i+1] + b[2*i+1] * c[2*i];
+ }
+ fbar (a);
+
+ /* Not vetorizable yet (too conservative dependence test; access pattern). */
+ for (i = 0; i < N/2; i++){
+ a[2*i] = b[2*i+1] * c[2*i+1] - b[2*i] * c[2*i];
+ a[2*i+1] = b[2*i] * c[2*i+1] + b[2*i+1] * c[2*i];
+ }
+ fbar (a);
+
+ /* Not vetorizable yet (no support for integer mult). */
+ for (i = 0; i < N; i++){
+ ia[i] = ib[i] * ic[i];
+ }
+ ibar (ia);
+
+ /* Vectorizable. */
+ for (i = 0; i < N; i++){
+ a[i] = b[i] + c[i];
+ d[i] = b[i] + c[i];
+ ia[i] = ib[i] + ic[i];
+ }
+ ibar (ia);
+ fbar (a);
+ fbar (d);
+
+ /* Not vectorizable yet (two types with different nunits in vector). */
+ for (i = 0; i < N; i++){
+ ia[i] = ib[i] + ic[i];
+ sa[i] = sb[i] + sc[i];
+ }
+ ibar (ia);
+ sbar (sa);
+
+ /* Not vetorizable yet (too conservative dependence test). */
+ for (i = 0; i < N; i++){
+ a[i] = b[i] + c[i];
+ a[i+1] = b[i] + c[i];
+ }
+ fbar (a);
+}
+