| // { dg-additional-options "-std=c++11 -O0" } |
| |
| #include <vector> |
| |
| constexpr unsigned |
| fib (unsigned n) |
| { |
| return n <= 2 ? 1 : fib (n-1) + fib (n-2); |
| } |
| |
| int |
| test1 () |
| { |
| std::vector<int> v; |
| |
| for (unsigned i = 0; i <= 9; i++) |
| v.push_back (1); |
| |
| int sum = 0; |
| for (int k = 0; k < 10; k++) |
| #pragma omp tile sizes(fib(4)) |
| for (int i : v) { |
| for (int j = 8; j != -2; --j) |
| sum = sum + i; |
| } |
| |
| return sum; |
| } |
| |
| int |
| test2 () |
| { |
| std::vector<int> v; |
| |
| for (unsigned i = 0; i <= 10; i++) |
| v.push_back (i); |
| |
| int sum = 0; |
| for (int k = 0; k < 10; k++) |
| #pragma omp parallel for collapse(2) reduction(+:sum) |
| #pragma omp tile sizes(fib(4), 1) |
| for (int i : v) |
| for (int j = 8; j > -2; --j) |
| sum = sum + i; |
| |
| return sum; |
| } |
| |
| int |
| main () |
| { |
| if (test1 () != 1000) |
| __builtin_abort (); |
| |
| if (test2 () != 5500) |
| __builtin_abort (); |
| } |