| /* Autopar with IF conditions. */ | |
| void abort(); | |
| #define N 10000 | |
| #define T 1000 | |
| void foo(void) | |
| { | |
| int i; | |
| int A[2*N], B[2*N]; | |
| /* Initialize array: carried no dependency. */ | |
| for (i = 0; i < 2*N; i++) | |
| B[i] = A[i] = i; | |
| for (i = 0; i < N; i++) | |
| { | |
| if (i < T) | |
| /* loop i1: carried no dependency. */ | |
| A[i] = A[i+T]; | |
| else | |
| /* loop i2: carried dependency. */ | |
| A[i] = A[i+T+1]; | |
| } | |
| /* If it runs a wrong answer, abort. */ | |
| for (i = 0; i < N; i++) | |
| { | |
| if (i < T) | |
| { | |
| if (A[i] != B[i+T]) | |
| abort(); | |
| } | |
| else | |
| { | |
| if (A[i] != B[i+T+1]) | |
| abort(); | |
| } | |
| } | |
| } | |
| int main(void) | |
| { | |
| foo(); | |
| return 0; | |
| } | |
| /* Check that parallel code generation part make the right answer. | |
| ??? XFAILed for i1 because conditional store elimination wrecks | |
| our dependence representation. */ | |
| /* { dg-final { scan-tree-dump-times "2 loops carried no dependency" 1 "graphite" { xfail *-*-* } } } */ | |
| /* { dg-final { scan-tree-dump-times "1 loops carried no dependency" 1 "graphite" } } */ | |
| /* { dg-final { scan-tree-dump-times "loopfn.0" 4 "optimized" } } */ | |
| /* { dg-final { scan-tree-dump-times "loopfn.1" 4 "optimized" } } */ |