mirror of git://gcc.gnu.org/git/gcc.git
56 lines
990 B
C
56 lines
990 B
C
// { dg-do run }
|
|
|
|
#include <cassert>
|
|
|
|
#define N 256
|
|
|
|
struct doublebuf
|
|
{
|
|
int buf_a[N][N];
|
|
int buf_b[N][N];
|
|
};
|
|
|
|
#pragma omp declare mapper(lo:doublebuf b) map(b.buf_a[0:N/2][0:N]) \
|
|
map(b.buf_b[0:N/2][0:N])
|
|
|
|
#pragma omp declare mapper(hi:doublebuf b) map(b.buf_a[N/2:N/2][0:N]) \
|
|
map(b.buf_b[N/2:N/2][0:N])
|
|
|
|
int main (int argc, char *argv[])
|
|
{
|
|
doublebuf db;
|
|
|
|
for (int i = 0; i < N; i++)
|
|
for (int j = 0; j < N; j++)
|
|
db.buf_a[i][j] = db.buf_b[i][j] = 0;
|
|
|
|
#pragma omp target map(mapper(lo), tofrom:db)
|
|
{
|
|
for (int i = 0; i < N / 2; i++)
|
|
for (int j = 0; j < N; j++)
|
|
{
|
|
db.buf_a[i][j]++;
|
|
db.buf_b[i][j]++;
|
|
}
|
|
}
|
|
|
|
#pragma omp target map(mapper(hi), tofrom:db)
|
|
{
|
|
for (int i = N / 2; i < N; i++)
|
|
for (int j = 0; j < N; j++)
|
|
{
|
|
db.buf_a[i][j]++;
|
|
db.buf_b[i][j]++;
|
|
}
|
|
}
|
|
|
|
for (int i = 0; i < N; i++)
|
|
for (int j = 0; j < N; j++)
|
|
{
|
|
assert (db.buf_a[i][j] == 1);
|
|
assert (db.buf_b[i][j] == 1);
|
|
}
|
|
|
|
return 0;
|
|
}
|