member-3.C 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. // { dg-do run }
  2. struct R { R () {}; ~R () {}; int r; };
  3. struct T { T () {}; virtual ~T () {}; int t; };
  4. int c;
  5. struct A : public R, virtual public T { A () : b(c) {} int a; int &b; void m1 (); };
  6. int d[64];
  7. void
  8. A::m1 ()
  9. {
  10. r = 0;
  11. #pragma omp parallel for private (a) reduction(|:R::r)
  12. for (a = 0; A::a < 31; a += 2)
  13. r |= (1 << A::a);
  14. if (r != 0x55555555)
  15. __builtin_abort ();
  16. #pragma omp parallel for simd linear (R::r)
  17. for (R::r = 0; r < 32; R::r++)
  18. d[r + 8] |= 1;
  19. for (int i = 0; i < 64; i++)
  20. if (d[i] != ((i >= 8 && i < 32 + 8) ? 1 : 0))
  21. __builtin_abort ();
  22. #pragma omp parallel for lastprivate (t)
  23. for (T::t = 0; t < 32; t += 3)
  24. d[T::t + 2] |= 2;
  25. if (T::t != 33)
  26. __builtin_abort ();
  27. for (int i = 0; i < 64; i++)
  28. if (d[i] != (((i >= 8 && i < 32 + 8) ? 1 : 0)
  29. | ((i >= 2 && i < 32 + 2 && (i - 2) % 3 == 0) ? 2 : 0)))
  30. __builtin_abort ();
  31. #pragma omp simd linear (t)
  32. for (t = 0; t < 32; t++)
  33. d[T::t + 9] |= 4;
  34. if (t != 32)
  35. __builtin_abort ();
  36. for (int i = 0; i < 64; i++)
  37. if (d[i] != (((i >= 8 && i < 32 + 8) ? 1 : 0)
  38. | ((i >= 2 && i < 32 + 2 && (i - 2) % 3 == 0) ? 2 : 0)
  39. | ((i >= 9 && i < 32 + 9) ? 4 : 0)))
  40. __builtin_abort ();
  41. r = 0;
  42. #pragma omp parallel for reduction(|:r)
  43. for (a = 0; A::a < 31; a += 2)
  44. r |= (1 << A::a);
  45. if (r != 0x55555555)
  46. __builtin_abort ();
  47. #pragma omp parallel for simd
  48. for (R::r = 0; r < 32; R::r += 2)
  49. d[r + 8] |= 8;
  50. for (int i = 0; i < 64; i++)
  51. if (d[i] != (((i >= 8 && i < 32 + 8) ? ((i & 1) ? 1 : (8 | 1)) : 0)
  52. | ((i >= 2 && i < 32 + 2 && (i - 2) % 3 == 0) ? 2 : 0)
  53. | ((i >= 9 && i < 32 + 9) ? 4 : 0)))
  54. __builtin_abort ();
  55. #pragma omp simd collapse(2)
  56. for (T::t = 0; t < 7; t += 2)
  57. for (a = 0; A::a < 8; a++)
  58. d[((t << 2) | a) + 3] |= 16;
  59. if (t != 8 || A::a != 8)
  60. __builtin_abort ();
  61. for (int i = 0; i < 64; i++)
  62. if (d[i] != (((i >= 8 && i < 32 + 8) ? ((i & 1) ? 1 : (8 | 1)) : 0)
  63. | ((i >= 2 && i < 32 + 2 && (i - 2) % 3 == 0) ? 2 : 0)
  64. | ((i >= 9 && i < 32 + 9) ? 4 : 0)
  65. | ((i >= 3 && i < 32 + 3) ? 16 : 0)))
  66. __builtin_abort ();
  67. T::t = 32;
  68. a = 16;
  69. #pragma omp parallel
  70. #pragma omp single
  71. #pragma omp taskloop simd collapse(2)
  72. for (t = 0; T::t < 7; T::t += 2)
  73. for (A::a = 0; a < 8; A::a++)
  74. d[((t << 2) | A::a) + 3] |= 32;
  75. if (T::t != 8 || a != 8)
  76. __builtin_abort ();
  77. for (int i = 0; i < 64; i++)
  78. if (d[i] != (((i >= 8 && i < 32 + 8) ? ((i & 1) ? 1 : (8 | 1)) : 0)
  79. | ((i >= 2 && i < 32 + 2 && (i - 2) % 3 == 0) ? 2 : 0)
  80. | ((i >= 9 && i < 32 + 9) ? 4 : 0)
  81. | ((i >= 3 && i < 32 + 3) ? (16 | 32) : 0)))
  82. __builtin_abort ();
  83. #pragma omp parallel
  84. #pragma omp single
  85. #pragma omp taskloop simd
  86. for (R::r = 0; r < 31; R::r += 2)
  87. d[r + 8] |= 64;
  88. if (r != 32)
  89. __builtin_abort ();
  90. for (int i = 0; i < 64; i++)
  91. if (d[i] != (((i >= 8 && i < 32 + 8) ? ((i & 1) ? 1 : (64 | 8 | 1)) : 0)
  92. | ((i >= 2 && i < 32 + 2 && (i - 2) % 3 == 0) ? 2 : 0)
  93. | ((i >= 9 && i < 32 + 9) ? 4 : 0)
  94. | ((i >= 3 && i < 32 + 3) ? (16 | 32) : 0)))
  95. __builtin_abort ();
  96. }
  97. int
  98. main ()
  99. {
  100. A a;
  101. a.m1 ();
  102. }