https://gcc.gnu.org/g:94334a764b073fe5011db1a53bc5693b30b57fae
commit 94334a764b073fe5011db1a53bc5693b30b57fae Author: Thomas Schwinge <tschwi...@baylibre.com> Date: Fri May 30 11:37:46 2025 +0200 libgomp: Add testcases for concurrent access to standard C++ containers on offload targets, a number of USM variants libgomp/ * testsuite/libgomp.c++/target-std__array-concurrent-usm.C: New. * testsuite/libgomp.c++/target-std__array-concurrent.C: Adjust. * testsuite/libgomp.c++/target-std__bitset-concurrent-usm.C: New. * testsuite/libgomp.c++/target-std__bitset-concurrent.C: Adjust. * testsuite/libgomp.c++/target-std__deque-concurrent-usm.C: New. * testsuite/libgomp.c++/target-std__deque-concurrent.C: Adjust. * testsuite/libgomp.c++/target-std__forward_list-concurrent-usm.C: New. * testsuite/libgomp.c++/target-std__forward_list-concurrent.C: Adjust. * testsuite/libgomp.c++/target-std__list-concurrent-usm.C: New. * testsuite/libgomp.c++/target-std__list-concurrent.C: Adjust. * testsuite/libgomp.c++/target-std__map-concurrent-usm.C: New. * testsuite/libgomp.c++/target-std__map-concurrent.C: Adjust. * testsuite/libgomp.c++/target-std__multimap-concurrent-usm.C: New. * testsuite/libgomp.c++/target-std__multimap-concurrent.C: Adjust. * testsuite/libgomp.c++/target-std__multiset-concurrent-usm.C: New. * testsuite/libgomp.c++/target-std__multiset-concurrent.C: Adjust. * testsuite/libgomp.c++/target-std__set-concurrent-usm.C: New. * testsuite/libgomp.c++/target-std__set-concurrent.C: Adjust. * testsuite/libgomp.c++/target-std__span-concurrent-usm.C: New. * testsuite/libgomp.c++/target-std__span-concurrent.C: Adjust. * testsuite/libgomp.c++/target-std__valarray-concurrent-usm.C: New. * testsuite/libgomp.c++/target-std__valarray-concurrent.C: Adjust. * testsuite/libgomp.c++/target-std__vector-concurrent-usm.C: New. * testsuite/libgomp.c++/target-std__vector-concurrent.C: Adjust. (cherry picked from commit 83ca283853f195a08d2f758580a369bc6a076122) Diff: --- libgomp/testsuite/libgomp.c++/target-std__array-concurrent-usm.C | 5 +++++ libgomp/testsuite/libgomp.c++/target-std__array-concurrent.C | 2 ++ libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent-usm.C | 5 +++++ libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent.C | 2 ++ libgomp/testsuite/libgomp.c++/target-std__deque-concurrent-usm.C | 5 +++++ libgomp/testsuite/libgomp.c++/target-std__deque-concurrent.C | 2 ++ .../libgomp.c++/target-std__forward_list-concurrent-usm.C | 5 +++++ .../testsuite/libgomp.c++/target-std__forward_list-concurrent.C | 2 ++ libgomp/testsuite/libgomp.c++/target-std__list-concurrent-usm.C | 5 +++++ libgomp/testsuite/libgomp.c++/target-std__list-concurrent.C | 2 ++ libgomp/testsuite/libgomp.c++/target-std__map-concurrent-usm.C | 5 +++++ libgomp/testsuite/libgomp.c++/target-std__map-concurrent.C | 4 ++++ .../testsuite/libgomp.c++/target-std__multimap-concurrent-usm.C | 5 +++++ libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent.C | 4 ++++ .../testsuite/libgomp.c++/target-std__multiset-concurrent-usm.C | 5 +++++ libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent.C | 2 ++ libgomp/testsuite/libgomp.c++/target-std__set-concurrent-usm.C | 5 +++++ libgomp/testsuite/libgomp.c++/target-std__set-concurrent.C | 2 ++ libgomp/testsuite/libgomp.c++/target-std__span-concurrent-usm.C | 7 +++++++ libgomp/testsuite/libgomp.c++/target-std__span-concurrent.C | 4 ++++ .../testsuite/libgomp.c++/target-std__valarray-concurrent-usm.C | 5 +++++ libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent.C | 2 ++ libgomp/testsuite/libgomp.c++/target-std__vector-concurrent-usm.C | 5 +++++ libgomp/testsuite/libgomp.c++/target-std__vector-concurrent.C | 2 ++ 24 files changed, 92 insertions(+) diff --git a/libgomp/testsuite/libgomp.c++/target-std__array-concurrent-usm.C b/libgomp/testsuite/libgomp.c++/target-std__array-concurrent-usm.C new file mode 100644 index 000000000000..9923783bcb12 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-std__array-concurrent-usm.C @@ -0,0 +1,5 @@ +#pragma omp requires unified_shared_memory self_maps + +#define MEM_SHARED + +#include "target-std__array-concurrent.C" diff --git a/libgomp/testsuite/libgomp.c++/target-std__array-concurrent.C b/libgomp/testsuite/libgomp.c++/target-std__array-concurrent.C index e97bfe60a615..c42105a65ed6 100644 --- a/libgomp/testsuite/libgomp.c++/target-std__array-concurrent.C +++ b/libgomp/testsuite/libgomp.c++/target-std__array-concurrent.C @@ -33,7 +33,9 @@ int main (void) srand (time (NULL)); init (data); +#ifndef MEM_SHARED #pragma omp target data map (to: data[:N]) map (alloc: arr) +#endif { #pragma omp target { diff --git a/libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent-usm.C b/libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent-usm.C new file mode 100644 index 000000000000..9023ef85c55b --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent-usm.C @@ -0,0 +1,5 @@ +#pragma omp requires unified_shared_memory self_maps + +#define MEM_SHARED + +#include "target-std__bitset-concurrent.C" diff --git a/libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent.C b/libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent.C index aa27662314bf..4fcce9321728 100644 --- a/libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent.C +++ b/libgomp/testsuite/libgomp.c++/target-std__bitset-concurrent.C @@ -40,7 +40,9 @@ int main (void) srand (time (NULL)); init (data); +#ifndef MEM_SHARED #pragma omp target data map (to: data[:N]) map (alloc: _set) +#endif { #pragma omp target { diff --git a/libgomp/testsuite/libgomp.c++/target-std__deque-concurrent-usm.C b/libgomp/testsuite/libgomp.c++/target-std__deque-concurrent-usm.C new file mode 100644 index 000000000000..863a1de76874 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-std__deque-concurrent-usm.C @@ -0,0 +1,5 @@ +#pragma omp requires unified_shared_memory self_maps + +#define MEM_SHARED + +#include "target-std__deque-concurrent.C" diff --git a/libgomp/testsuite/libgomp.c++/target-std__deque-concurrent.C b/libgomp/testsuite/libgomp.c++/target-std__deque-concurrent.C index 5f08bfb002b2..9c2d6fa57b41 100644 --- a/libgomp/testsuite/libgomp.c++/target-std__deque-concurrent.C +++ b/libgomp/testsuite/libgomp.c++/target-std__deque-concurrent.C @@ -38,7 +38,9 @@ int main (void) std::deque<int> _deque; #endif +#ifndef MEM_SHARED #pragma omp target data map (to: data[:N]) map (alloc: _deque) +#endif { #ifndef MEM_SHARED #pragma omp target diff --git a/libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent-usm.C b/libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent-usm.C new file mode 100644 index 000000000000..60d5cee5ef36 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent-usm.C @@ -0,0 +1,5 @@ +#pragma omp requires unified_shared_memory self_maps + +#define MEM_SHARED + +#include "target-std__forward_list-concurrent.C" diff --git a/libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent.C b/libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent.C index f8ab53e30df2..6b0ee65493e2 100644 --- a/libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent.C +++ b/libgomp/testsuite/libgomp.c++/target-std__forward_list-concurrent.C @@ -43,7 +43,9 @@ int main (void) std::forward_list<int> list; #endif +#ifndef MEM_SHARED #pragma omp target data map (to: data[:N]) map (alloc: list) +#endif { #ifndef MEM_SHARED #pragma omp target diff --git a/libgomp/testsuite/libgomp.c++/target-std__list-concurrent-usm.C b/libgomp/testsuite/libgomp.c++/target-std__list-concurrent-usm.C new file mode 100644 index 000000000000..5057bf96fef6 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-std__list-concurrent-usm.C @@ -0,0 +1,5 @@ +#pragma omp requires unified_shared_memory self_maps + +#define MEM_SHARED + +#include "target-std__list-concurrent.C" diff --git a/libgomp/testsuite/libgomp.c++/target-std__list-concurrent.C b/libgomp/testsuite/libgomp.c++/target-std__list-concurrent.C index ce3b4265ee04..1f44a17ca091 100644 --- a/libgomp/testsuite/libgomp.c++/target-std__list-concurrent.C +++ b/libgomp/testsuite/libgomp.c++/target-std__list-concurrent.C @@ -43,7 +43,9 @@ int main (void) std::list<int> _list; #endif +#ifndef MEM_SHARED #pragma omp target data map (to: data[:N]) map (alloc: _list) +#endif { #ifndef MEM_SHARED #pragma omp target diff --git a/libgomp/testsuite/libgomp.c++/target-std__map-concurrent-usm.C b/libgomp/testsuite/libgomp.c++/target-std__map-concurrent-usm.C new file mode 100644 index 000000000000..fe37426b8c80 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-std__map-concurrent-usm.C @@ -0,0 +1,5 @@ +#pragma omp requires unified_shared_memory self_maps + +#define MEM_SHARED + +#include "target-std__map-concurrent.C" diff --git a/libgomp/testsuite/libgomp.c++/target-std__map-concurrent.C b/libgomp/testsuite/libgomp.c++/target-std__map-concurrent.C index 254c490afdbb..36556ef0660a 100644 --- a/libgomp/testsuite/libgomp.c++/target-std__map-concurrent.C +++ b/libgomp/testsuite/libgomp.c++/target-std__map-concurrent.C @@ -38,7 +38,9 @@ int main (void) init (keys, true); init (data, false); +#ifndef MEM_SHARED #pragma omp target enter data map (to: keys[:N], data[:N]) map (alloc: _map) +#endif #pragma omp target { @@ -59,7 +61,9 @@ int main (void) _map.~map (); #endif +#ifndef MEM_SHARED #pragma omp target exit data map (release: _map) +#endif bool ok = validate (sum, keys, data); return ok ? 0 : 1; diff --git a/libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent-usm.C b/libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent-usm.C new file mode 100644 index 000000000000..79f9245117f4 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent-usm.C @@ -0,0 +1,5 @@ +#pragma omp requires unified_shared_memory self_maps + +#define MEM_SHARED + +#include "target-std__multimap-concurrent.C" diff --git a/libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent.C b/libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent.C index 65e6732cba3d..6a4a4e80d34e 100644 --- a/libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent.C +++ b/libgomp/testsuite/libgomp.c++/target-std__multimap-concurrent.C @@ -32,7 +32,9 @@ int main (void) init (keys, KEY_MAX); init (data, RAND_MAX); +#ifndef MEM_SHARED #pragma omp target enter data map (to: keys[:N], data[:N]) map (alloc: _map) +#endif #pragma omp target { @@ -57,7 +59,9 @@ int main (void) _map.~multimap (); #endif +#ifndef MEM_SHARED #pragma omp target exit data map (release: _map) +#endif bool ok = validate (sum, keys, data); return ok ? 0 : 1; diff --git a/libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent-usm.C b/libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent-usm.C new file mode 100644 index 000000000000..2d8075663bd3 --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent-usm.C @@ -0,0 +1,5 @@ +#pragma omp requires unified_shared_memory self_maps + +#define MEM_SHARED + +#include "target-std__multiset-concurrent.C" diff --git a/libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent.C b/libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent.C index 0b16ca53953f..b12402e8e0c3 100644 --- a/libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent.C +++ b/libgomp/testsuite/libgomp.c++/target-std__multiset-concurrent.C @@ -34,7 +34,9 @@ int main (void) srand (time (NULL)); init (data); +#ifndef MEM_SHARED #pragma omp target data map (to: data[:N]) map (alloc: set) +#endif { #pragma omp target { diff --git a/libgomp/testsuite/libgomp.c++/target-std__set-concurrent-usm.C b/libgomp/testsuite/libgomp.c++/target-std__set-concurrent-usm.C new file mode 100644 index 000000000000..54f62e3e84ba --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-std__set-concurrent-usm.C @@ -0,0 +1,5 @@ +#pragma omp requires unified_shared_memory self_maps + +#define MEM_SHARED + +#include "target-std__set-concurrent.C" diff --git a/libgomp/testsuite/libgomp.c++/target-std__set-concurrent.C b/libgomp/testsuite/libgomp.c++/target-std__set-concurrent.C index 6953b6352a21..cd23128a652f 100644 --- a/libgomp/testsuite/libgomp.c++/target-std__set-concurrent.C +++ b/libgomp/testsuite/libgomp.c++/target-std__set-concurrent.C @@ -39,7 +39,9 @@ int main (void) srand (time (NULL)); init (data); +#ifndef MEM_SHARED #pragma omp target data map (to: data[:N]) map (alloc: _set) +#endif { #pragma omp target { diff --git a/libgomp/testsuite/libgomp.c++/target-std__span-concurrent-usm.C b/libgomp/testsuite/libgomp.c++/target-std__span-concurrent-usm.C new file mode 100644 index 000000000000..7ef16bfb574c --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-std__span-concurrent-usm.C @@ -0,0 +1,7 @@ +// { dg-additional-options "-std=c++20" } + +#pragma omp requires unified_shared_memory self_maps + +#define MEM_SHARED + +#include "target-std__span-concurrent.C" diff --git a/libgomp/testsuite/libgomp.c++/target-std__span-concurrent.C b/libgomp/testsuite/libgomp.c++/target-std__span-concurrent.C index ac89a8980c62..046b3c1a0868 100644 --- a/libgomp/testsuite/libgomp.c++/target-std__span-concurrent.C +++ b/libgomp/testsuite/libgomp.c++/target-std__span-concurrent.C @@ -34,7 +34,9 @@ int main (void) srand (time (NULL)); init (data); +#ifndef MEM_SHARED #pragma omp target enter data map (to: data[:N]) map (alloc: elements, span) +#endif #pragma omp target { @@ -56,7 +58,9 @@ int main (void) #endif } +#ifndef MEM_SHARED #pragma omp target exit data map (release: elements, span) +#endif return ok ? 0 : 1; } diff --git a/libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent-usm.C b/libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent-usm.C new file mode 100644 index 000000000000..41ec80ee900d --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent-usm.C @@ -0,0 +1,5 @@ +#pragma omp requires unified_shared_memory self_maps + +#define MEM_SHARED + +#include "target-std__valarray-concurrent.C" diff --git a/libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent.C b/libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent.C index 127aec436f51..8933072bb2b2 100644 --- a/libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent.C +++ b/libgomp/testsuite/libgomp.c++/target-std__valarray-concurrent.C @@ -37,7 +37,9 @@ int main (void) std::valarray<int> arr; #endif +#ifndef MEM_SHARED #pragma omp target data map (to: data[:N]) map (alloc: arr) +#endif { #pragma omp target { diff --git a/libgomp/testsuite/libgomp.c++/target-std__vector-concurrent-usm.C b/libgomp/testsuite/libgomp.c++/target-std__vector-concurrent-usm.C new file mode 100644 index 000000000000..967bff3b81ad --- /dev/null +++ b/libgomp/testsuite/libgomp.c++/target-std__vector-concurrent-usm.C @@ -0,0 +1,5 @@ +#pragma omp requires unified_shared_memory self_maps + +#define MEM_SHARED + +#include "target-std__vector-concurrent.C" diff --git a/libgomp/testsuite/libgomp.c++/target-std__vector-concurrent.C b/libgomp/testsuite/libgomp.c++/target-std__vector-concurrent.C index 1367f9655275..a94b4cfe9645 100644 --- a/libgomp/testsuite/libgomp.c++/target-std__vector-concurrent.C +++ b/libgomp/testsuite/libgomp.c++/target-std__vector-concurrent.C @@ -37,7 +37,9 @@ int main (void) std::vector<int> vec; #endif +#ifndef MEM_SHARED #pragma omp target data map (to: data[:N]) map (alloc: vec) +#endif { #ifndef MEM_SHARED #pragma omp target