target-11.c 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /* { dg-require-effective-target offload_device_nonshared_as } */
  2. #include <stdlib.h>
  3. #include <assert.h>
  4. #define N 32
  5. void test_array_section (int *p)
  6. {
  7. #pragma omp target data map(alloc: p[0:N])
  8. {
  9. int ok = 1;
  10. for (int i = 10; i < 10 + 4; i++)
  11. p[i] = 997 * i;
  12. #pragma omp target map(always to:p[10:4]) map(tofrom: ok)
  13. for (int i = 10; i < 10 + 4; i++)
  14. if (p[i] != 997 * i)
  15. ok = 0;
  16. assert (ok);
  17. #pragma omp target map(always from:p[7:9])
  18. for (int i = 0; i < N; i++)
  19. p[i] = i;
  20. }
  21. }
  22. int main ()
  23. {
  24. int aa = 0, bb = 0, cc = 0, dd = 0;
  25. #pragma omp target data map(tofrom: aa) map(to: bb) map(from: cc, dd)
  26. {
  27. int ok;
  28. aa = bb = cc = 1;
  29. /* Set dd on target to 0 for the further check. */
  30. #pragma omp target map(always to: dd)
  31. ;
  32. dd = 1;
  33. #pragma omp target map(tofrom: aa) map(always to: bb) \
  34. map(always from: cc) map(to: dd) map(from: ok)
  35. {
  36. /* bb is always to, aa and dd are not. */
  37. ok = (aa == 0) && (bb == 1) && (dd == 0);
  38. aa = bb = cc = dd = 2;
  39. }
  40. assert (ok);
  41. assert (aa == 1);
  42. assert (bb == 1);
  43. assert (cc == 2); /* cc is always from. */
  44. assert (dd == 1);
  45. dd = 3;
  46. #pragma omp target map(from: cc) map(always to: dd) map(from: ok)
  47. {
  48. ok = (dd == 3); /* dd is always to. */
  49. cc = dd = 4;
  50. }
  51. assert (ok);
  52. assert (cc == 2);
  53. assert (dd == 3);
  54. }
  55. assert (aa == 2);
  56. assert (bb == 1);
  57. assert (cc == 4);
  58. assert (dd == 4);
  59. int *array = calloc (N, sizeof (int));
  60. test_array_section (array);
  61. for (int i = 0; i < 7; i++)
  62. assert (array[i] == 0);
  63. for (int i = 7; i < 7 + 9; i++)
  64. assert (array[i] == i);
  65. for (int i = 7 + 9; i < N; i++)
  66. assert (array[i] == 0);
  67. free (array);
  68. return 0;
  69. }