| /* { dg-do run } */ |
| /* { dg-options "-O3 -ftree-loop-distribution -fdump-tree-ldist-details" } */ |
| |
| extern void abort (void); |
| |
| int a[130], b[128], c[128]; |
| |
| int __attribute__((noinline,noclone)) |
| foo (int len, int x) |
| { |
| int i; |
| for (i = 1; i <= len; ++i) |
| { |
| a[i] = a[i + 2] + 1; |
| b[i] = 0; |
| a[i + 1] = a[i] - 3; |
| if (i < x) |
| c[i] = a[i]; |
| } |
| return i; |
| } |
| |
| int main() |
| { |
| int i; |
| for (i = 0; i < 130; ++i) |
| a[i] = i; |
| foo (127, 67); |
| if (a[0] != 0 || a[1] != 4 || a[127] != 130) |
| abort (); |
| return 0; |
| } |
| |
| /* Loop splitting splits the iteration space so we end up with two |
| loops entering loop distribution. Both should have the b[i] = 0 |
| part split out as memset. */ |
| /* { dg-final { scan-tree-dump-times "distributed: split to 1 loops and 1 library calls" 2 "ldist" } } */ |
| /* { dg-final { scan-tree-dump-times "generated memset zero" 2 "ldist" } } */ |