mirror of
https://forge.sourceware.org/marek/gcc.git
synced 2026-02-22 12:00:11 -05:00
Implements the OpenMP 5.2 C and C++ deprecations. Uses the warning established in patch 1/4, -Wdeprecated-openmp, for said deprecations. Not implemented is 'uses_allocators', since the base is not yet in mainline, along with the relaxing of constraints for the interop construct, since this is not a deprecation. Additionally does not deprecate 'destroy' with no arguments on depobj construct, since this was undeprecated in OpenMP 6.0. Adds new tests. gcc/c/ChangeLog: * c-parser.cc (c_parser_omp_clause_reduction): Deprecate '-' operator for reductions. (c_parser_omp_clause_linear): Deprecate modifiers with parens. (c_parser_omp_clause_depend): Deprecate 'sink' and 'source' modifiers for 'depend' clause. (c_parser_omp_clause_map): Map clause modifiers comma-separated. (c_parser_omp_declare_target): Deprecate synonymous omp declare target for omp begin declare target. Deprecate 'to' clause. (c_parser_omp_metadirective): Deprecate default clause on metadirectives. gcc/cp/ChangeLog: * parser.cc (cp_parser_omp_clause_reduction): Deprecate '-' operator. (cp_parser_omp_clause_linear): Deprecate modifiers with parens. (cp_parser_omp_clause_depend): Deprecate sink and source. (cp_parser_omp_clause_map): Map clause modifiers comma-separated. (cp_parser_omp_declare_target): Deprecate synonymous omp declare target for omp begin declare target. Deprecate to clause. (cp_parser_omp_metadirective): Deprecate default clause on metadirectives. libgomp/ChangeLog: * testsuite/libgomp.c++/declare_target-1.C: Suppress warnings. * testsuite/libgomp.c++/depobj-1.C: Ditto. * testsuite/libgomp.c++/doacross-1.C: Ditto. * testsuite/libgomp.c++/for-15.C: Ditto. * testsuite/libgomp.c++/for-24.C: Ditto. * testsuite/libgomp.c++/pr101544-1-O0.C: Ditto. * testsuite/libgomp.c++/pr101544-1.C: Ditto. * testsuite/libgomp.c++/pr96835-1-O0.C: Ditto. * testsuite/libgomp.c++/pr96835-1.C: Ditto. * testsuite/libgomp.c++/static-aggr-constructor-destructor-1.C: Ditto. * testsuite/libgomp.c++/static-aggr-constructor-destructor-2.C: Ditto. * testsuite/libgomp.c++/static-aggr-constructor-destructor-3.C: Ditto. * testsuite/libgomp.c++/target-13.C: Ditto. * testsuite/libgomp.c++/target-cdtor-1.C: Ditto. * testsuite/libgomp.c++/target-cdtor-2.C: Ditto. * testsuite/libgomp.c++/target-std__array-concurrent-usm.C: Ditto. * testsuite/libgomp.c++/target-std__array-concurrent.C: Ditto. * testsuite/libgomp.c++/target-std__cmath.C: Ditto. * testsuite/libgomp.c++/target-std__complex.C: Ditto. * testsuite/libgomp.c++/target-std__deque-concurrent-usm.C: Ditto. * testsuite/libgomp.c++/target-std__deque-concurrent.C: Ditto. * testsuite/libgomp.c++/target-std__forward_list-concurrent-usm.C: Ditto. * testsuite/libgomp.c++/target-std__forward_list-concurrent.C: Ditto. * testsuite/libgomp.c++/target-std__list-concurrent-usm.C: Ditto. * testsuite/libgomp.c++/target-std__list-concurrent.C: Ditto. * testsuite/libgomp.c++/target-std__numbers.C: Ditto. * testsuite/libgomp.c++/target-std__span-concurrent-usm.C: Ditto. * testsuite/libgomp.c++/target-std__span-concurrent.C: Ditto. * testsuite/libgomp.c++/target-std__valarray-1.C: Ditto. * testsuite/libgomp.c++/target-std__valarray-concurrent-usm.C: Ditto. * testsuite/libgomp.c++/target-std__valarray-concurrent.C: Ditto. * testsuite/libgomp.c++/target-std__vector-concurrent-usm.C: Ditto. * testsuite/libgomp.c++/target-std__vector-concurrent.C: Ditto. * testsuite/libgomp.c-c++-common/declare_target-1.c: Ditto. * testsuite/libgomp.c-c++-common/depend-2.c: Ditto. * testsuite/libgomp.c-c++-common/depobj-1.c: Ditto. * testsuite/libgomp.c-c++-common/for-11.c: Ditto. * testsuite/libgomp.c-c++-common/for-12.c: Ditto. * testsuite/libgomp.c-c++-common/for-16.c: Ditto. * testsuite/libgomp.c-c++-common/for-3.c: Ditto. * testsuite/libgomp.c-c++-common/for-5.c: Ditto. * testsuite/libgomp.c-c++-common/for-6.c: Ditto. * testsuite/libgomp.c-c++-common/for-9.c: Ditto. * testsuite/libgomp.c-c++-common/function-not-offloaded.c: Ditto. * testsuite/libgomp.c-c++-common/metadirective-1.c: Ditto. * testsuite/libgomp.c-c++-common/metadirective-2.c: Ditto. * testsuite/libgomp.c-c++-common/metadirective-3.c: Ditto. * testsuite/libgomp.c-c++-common/metadirective-5.c: Ditto. * testsuite/libgomp.c-c++-common/monotonic-1.c: Ditto. * testsuite/libgomp.c-c++-common/monotonic-2.c: Ditto. * testsuite/libgomp.c-c++-common/pr100059-1.c: Ditto. * testsuite/libgomp.c-c++-common/pr66199-2.c: Ditto. * testsuite/libgomp.c-c++-common/pr66199-4.c: Ditto. * testsuite/libgomp.c-c++-common/pr66199-5.c: Ditto. * testsuite/libgomp.c-c++-common/pr66199-6.c: Ditto. * testsuite/libgomp.c-c++-common/pr66199-7.c: Ditto. * testsuite/libgomp.c-c++-common/pr66199-8.c: Ditto. * testsuite/libgomp.c-c++-common/pr66199-9.c: Ditto. * testsuite/libgomp.c-c++-common/ptr-attach-1.c: Ditto. * testsuite/libgomp.c-c++-common/reverse-offload-1.c: Ditto. * testsuite/libgomp.c-c++-common/target-1.c: Ditto. * testsuite/libgomp.c-c++-common/target-10.c: Ditto. * testsuite/libgomp.c-c++-common/target-40.c: Ditto. * testsuite/libgomp.c-c++-common/target-abi-struct-1-O0.c: Ditto. * testsuite/libgomp.c-c++-common/target-abi-struct-1.c: Ditto. * testsuite/libgomp.c-c++-common/target-cdtor-1.c: Ditto. * testsuite/libgomp.c-c++-common/target-same-name-1.c: Ditto. * testsuite/libgomp.c-c++-common/task-reduction-14.c: Ditto. * testsuite/libgomp.c-c++-common/variable-not-offloaded.c: Ditto. * testsuite/libgomp.c/declare-variant-3.c: Ditto. * testsuite/libgomp.c/declare-variant-4.c: Ditto. * testsuite/libgomp.c/doacross-1.c: Ditto. * testsuite/libgomp.c/doacross-2.c: Ditto. * testsuite/libgomp.c/doacross-3.c: Ditto. * testsuite/libgomp.c/examples-4/async_target-1.c: Ditto. * testsuite/libgomp.c/examples-4/declare_target-1.c: Ditto. * testsuite/libgomp.c/examples-4/declare_target-3.c: Ditto. * testsuite/libgomp.c/examples-4/declare_target-4.c: Ditto. * testsuite/libgomp.c/examples-4/declare_target-5.c: Ditto. * testsuite/libgomp.c/max_vf-1.c: Ditto. * testsuite/libgomp.c/pr81778.c: Ditto. * testsuite/libgomp.c/pr86660.c: Ditto. * testsuite/libgomp.c/reduction-4.c: Ditto. * testsuite/libgomp.c/switch-conversion.c: Ditto. * testsuite/libgomp.c/target-26.c: Ditto. * testsuite/libgomp.c/target-28.c: Ditto. * testsuite/libgomp.c/target-30.c: Ditto. * testsuite/libgomp.c/target-32.c: Ditto. * testsuite/libgomp.c/target-35.c: Ditto. * testsuite/libgomp.c/target-38.c: Ditto. * testsuite/libgomp.c/target-39.c: Ditto. * testsuite/libgomp.c/target-9.c: Ditto. * testsuite/libgomp.c/target-link-1.c: Ditto. * testsuite/libgomp.c/target-teams-1.c: Ditto. * testsuite/libgomp.c/thread-limit-2.c: Ditto. * testsuite/libgomp.oacc-c-c++-common/vred2d-128.c: Ditto. gcc/testsuite/ChangeLog: * c-c++-common/gomp/Wparentheses-2.c: Suppress warnings. * c-c++-common/gomp/attrs-metadirective-1.c: Ditto. * c-c++-common/gomp/attrs-metadirective-2.c: Ditto. * c-c++-common/gomp/attrs-metadirective-3.c: Ditto. * c-c++-common/gomp/attrs-metadirective-4.c: Ditto. * c-c++-common/gomp/attrs-metadirective-5.c: Ditto. * c-c++-common/gomp/attrs-metadirective-8.c: Ditto. * c-c++-common/gomp/begin-declare-target-1.c: Ditto. * c-c++-common/gomp/begin-declare-target-2.c: Ditto. * c-c++-common/gomp/clauses-3.c: Ditto. * c-c++-common/gomp/declare-target-1.c: Ditto. * c-c++-common/gomp/declare-target-2.c: Ditto. * c-c++-common/gomp/declare-target-3.c: Ditto. * c-c++-common/gomp/declare-target-4.c: Ditto. * c-c++-common/gomp/declare-target-5.c: Ditto. * c-c++-common/gomp/declare-target-7.c: Ditto. * c-c++-common/gomp/declare-target-indirect-1.c: Ditto. * c-c++-common/gomp/declare-target-indirect-2.c: Ditto. * c-c++-common/gomp/declare-variant-10.c: Ditto. * c-c++-common/gomp/declare-variant-8.c: Ditto. * c-c++-common/gomp/defaultmap-2.c: Ditto. * c-c++-common/gomp/defaultmap-3.c: Ditto. * c-c++-common/gomp/depend-iterator-2.c: Ditto. * c-c++-common/gomp/depobj-1.c: Ditto. * c-c++-common/gomp/directive-1.c: Ditto. * c-c++-common/gomp/distribute-1.c: Ditto. * c-c++-common/gomp/doacross-1.c: Ditto. * c-c++-common/gomp/doacross-2.c: Ditto. * c-c++-common/gomp/doacross-3.c: Ditto. * c-c++-common/gomp/doacross-4.c: Ditto. * c-c++-common/gomp/doacross-8.c: Ditto. * c-c++-common/gomp/linear-1.c: Ditto. * c-c++-common/gomp/linear-2.c: Ditto. * c-c++-common/gomp/linear-3.c: Ditto. * c-c++-common/gomp/loop-6.c: Ditto. * c-c++-common/gomp/map-1.c: Ditto. * c-c++-common/gomp/map-3.c: Ditto. * c-c++-common/gomp/map-6.c: Ditto. * c-c++-common/gomp/metadirective-1.c: Ditto. * c-c++-common/gomp/metadirective-2.c: Ditto. * c-c++-common/gomp/metadirective-3.c: Ditto. * c-c++-common/gomp/metadirective-4.c: Ditto. * c-c++-common/gomp/metadirective-5.c: Ditto. * c-c++-common/gomp/metadirective-8.c: Ditto. * c-c++-common/gomp/metadirective-construct.c: Ditto. * c-c++-common/gomp/metadirective-device.c: Ditto. * c-c++-common/gomp/metadirective-target-device-1.c: Ditto. * c-c++-common/gomp/metadirective-target-device-2.c: Ditto. * c-c++-common/gomp/order-2.c: Ditto. * c-c++-common/gomp/ordered-3.c: Ditto. * c-c++-common/gomp/ordered-5.c: Ditto. * c-c++-common/gomp/pr102640.c: Ditto. * c-c++-common/gomp/pr106836.c: Ditto. * c-c++-common/gomp/pr120180-1.c: Ditto. * c-c++-common/gomp/pr88203-1.c: Ditto. * c-c++-common/gomp/pr88203-2.c: Ditto. * c-c++-common/gomp/pr88203-3.c: Ditto. * c-c++-common/gomp/pr91401-2.c: Ditto. * c-c++-common/gomp/pr91987.c: Ditto. * c-c++-common/gomp/reverse-offload-1.c: Ditto. * c-c++-common/gomp/schedule-modifiers-1.c: Ditto. * c-c++-common/gomp/sink-1.c: Ditto. * c-c++-common/gomp/sink-2.c: Ditto. * c-c++-common/gomp/sink-3.c: Ditto. * c-c++-common/gomp/sink-4.c: Ditto. * c-c++-common/gomp/sink-5.c: Ditto. * c-c++-common/gomp/target-teams-1.c: Ditto. * g++.dg/gomp/attrs-12.C: Ditto. * g++.dg/gomp/attrs-5.C: Ditto. * g++.dg/gomp/attrs-9.C: Ditto. * g++.dg/gomp/clause-3.C: Ditto. * g++.dg/gomp/declare-simd-3.C: Ditto. * g++.dg/gomp/declare-simd-4.C: Ditto. * g++.dg/gomp/declare-simd-6.C: Ditto. * g++.dg/gomp/declare-simd-7.C: Ditto. * g++.dg/gomp/declare-simd-8.C: Ditto. * g++.dg/gomp/declare-target-1.C: Ditto. * g++.dg/gomp/declare-target-2.C: Ditto. * g++.dg/gomp/declare-target-3.C: Ditto. * g++.dg/gomp/declare-target-indirect-1.C: Ditto. * g++.dg/gomp/depend-iterator-2.C: Ditto. * g++.dg/gomp/depobj-1.C: Ditto. * g++.dg/gomp/doacross-2.C: Ditto. * g++.dg/gomp/linear-1.C: Ditto. * g++.dg/gomp/linear-2.C: Ditto. * g++.dg/gomp/linear-3.C: Ditto. * g++.dg/gomp/linear-5.C: Ditto. * g++.dg/gomp/map-1.C: Ditto. * g++.dg/gomp/pr118876.C: Ditto. * g++.dg/gomp/pr119370.C: Ditto. * g++.dg/gomp/sink-1.C: Ditto. * g++.dg/gomp/sink-2.C: Ditto. * g++.dg/gomp/sink-3.C: Ditto. * g++.dg/gomp/target-simd-clone-1.C: Ditto. * g++.dg/gomp/target-simd-clone-2.C: Ditto. * g++.dg/gomp/target-teams-1.C: Ditto. * g++.dg/gomp/udr-5.C: Ditto. * gcc.dg/gomp/attrs-12.c: Ditto. * gcc.dg/gomp/attrs-5.c: Ditto. * gcc.dg/gomp/attrs-9.c: Ditto. * gcc.dg/gomp/clause-1.c: Ditto. * gcc.dg/gomp/declare-simd-3.c: Ditto. * gcc.dg/gomp/linear-1.c: Ditto. * gcc.dg/gomp/metadirective-1.c: Ditto. * gcc.dg/gomp/pr104757.c: Ditto. * gcc.dg/gomp/sink-fold-1.c: Ditto. * gcc.dg/gomp/sink-fold-2.c: Ditto. * gcc.dg/gomp/sink-fold-3.c: Ditto. * gcc.dg/gomp/target-simd-clone-1.c: Ditto. * gcc.dg/gomp/target-simd-clone-2.c: Ditto. * gcc.dg/gomp/target-simd-clone-3.c: Ditto. * gcc.dg/gomp/target-simd-clone-4.c: Ditto. * gcc.dg/gomp/target-simd-clone-5.c: Ditto. * gcc.dg/gomp/target-simd-clone-6.c: Ditto. * gcc.dg/gomp/target-simd-clone-7.c: Ditto. * gcc.dg/gomp/target-simd-clone-8.c: Ditto. * gcc.dg/gomp/workshare-reduction-55.c: Ditto. * gcc.dg/gomp/workshare-reduction-56.c: Ditto. * gcc.dg/gomp/workshare-reduction-57.c: Ditto. * gcc.dg/gomp/workshare-reduction-58.c: Ditto. * c-c++-common/gomp/52-deps.c: New test. * g++.dg/gomp/map-csm-dep.C: New test. * gcc.dg/gomp/map-csm-dep.c: New test.
180 lines
4.8 KiB
C
180 lines
4.8 KiB
C
// { dg-additional-options -std=c++20 }
|
||
// { dg-output-file target-std__valarray-1.output }
|
||
// { dg-additional-options "-Wno-deprecated-openmp" }
|
||
#include <valarray>
|
||
#include <ostream>
|
||
#include <sstream>
|
||
|
||
|
||
/*TODO Work around PR118484 "ICE during IPA pass: cp, segfault in determine_versionability ipa-cp.cc:467".
|
||
|
||
We can't:
|
||
|
||
#pragma omp declare target(std::basic_streambuf<char, std::char_traits<char>>::basic_streambuf)
|
||
|
||
... because:
|
||
|
||
error: overloaded function name ‘std::basic_streambuf<char>::__ct ’ in clause ‘enter’
|
||
|
||
Therefore, use dummy classes in '#pragma omp declare target':
|
||
*/
|
||
|
||
#pragma omp declare target
|
||
|
||
// For 'std::basic_streambuf<char, std::char_traits<char> >::basic_streambuf':
|
||
|
||
class dummy_basic_streambuf__char
|
||
: public std::basic_streambuf<char>
|
||
{
|
||
public:
|
||
dummy_basic_streambuf__char() {}
|
||
};
|
||
|
||
// For 'std::basic_ios<char, std::char_traits<char> >::basic_ios()':
|
||
|
||
class dummy_basic_ios__char
|
||
: public std::basic_ios<char>
|
||
{
|
||
public:
|
||
dummy_basic_ios__char() {}
|
||
};
|
||
|
||
#pragma omp end declare target
|
||
|
||
|
||
int main()
|
||
{
|
||
// Due to PR120021 "Offloading vs. C++ 'std::initializer_list'", we can't construct these on the device.
|
||
std::initializer_list<int> v1_i = {10, 20, 30, 40, 50};
|
||
const int *v1_i_data = std::data(v1_i);
|
||
size_t v1_i_size = v1_i.size();
|
||
std::initializer_list<int> v2_i = {5, 4, 3, 2, 1};
|
||
const int *v2_i_data = std::data(v2_i);
|
||
size_t v2_i_size = v2_i.size();
|
||
std::initializer_list<int> shiftData_i = {1, 2, 3, 4, 5};
|
||
const int *shiftData_i_data = std::data(shiftData_i);
|
||
size_t shiftData_i_size = shiftData_i.size();
|
||
#pragma omp target \
|
||
defaultmap(none) \
|
||
map(to: v1_i_data[ :v1_i_size], v1_i_size, \
|
||
v2_i_data[ :v2_i_size], v2_i_size, \
|
||
shiftData_i_data[ :shiftData_i_size], shiftData_i_size)
|
||
{
|
||
/* Manually set up a buffer we can stream into, similar to 'cout << [...]', and print it at the end of region. */
|
||
std::stringbuf out_b;
|
||
std::ostream out(&out_b);
|
||
|
||
std::valarray<int> v1(v1_i_data, v1_i_size);
|
||
out << "\nv1:";
|
||
for (auto val : v1)
|
||
out << " " << val;
|
||
|
||
std::valarray<int> v2(v2_i_data, v2_i_size);
|
||
out << "\nv2:";
|
||
for (auto val : v2)
|
||
out << " " << val;
|
||
|
||
std::valarray<int> sum = v1 + v2;
|
||
out << "\nv1 + v2:";
|
||
for (auto val : sum)
|
||
out << " " << val;
|
||
|
||
std::valarray<int> diff = v1 - v2;
|
||
out << "\nv1 - v2:";
|
||
for (auto val : diff)
|
||
out << " " << val;
|
||
|
||
std::valarray<int> product = v1 * v2;
|
||
out << "\nv1 * v2:";
|
||
for (auto val : product)
|
||
out << " " << val;
|
||
|
||
std::valarray<int> quotient = v1 / v2;
|
||
out << "\nv1 / v2:";
|
||
for (auto val : quotient)
|
||
out << " " << val;
|
||
|
||
std::valarray<int> squares = pow(v1, 2);
|
||
out << "\npow(v1, 2):";
|
||
for (auto val : squares)
|
||
out << " " << val;
|
||
|
||
std::valarray<int> sinhs = sinh(v2);
|
||
out << "\nsinh(v2):";
|
||
for (auto val : sinhs)
|
||
out << " " << val;
|
||
|
||
std::valarray<int> logs = log(v1 * v2);
|
||
out << "\nlog(v1 * v2):";
|
||
for (auto val : logs)
|
||
out << " " << val;
|
||
|
||
std::valarray<int> data(12);
|
||
for (size_t i = 0; i < data.size(); ++i)
|
||
data[i] = i;
|
||
out << "\nOriginal array:";
|
||
for (auto val : data)
|
||
out << " " << val;
|
||
|
||
std::slice slice1(2, 5, 1);
|
||
std::valarray<int> sliced1 = data[slice1];
|
||
out << "\nSlice(2, 5, 1):";
|
||
for (auto val : sliced1)
|
||
out << " " << val;
|
||
|
||
std::slice slice2(1, 4, 3);
|
||
std::valarray<int> sliced2 = data[slice2];
|
||
out << "\nSlice(1, 4, 3):";
|
||
for (auto val : sliced2)
|
||
out << " " << val;
|
||
|
||
data[slice1] = 99;
|
||
out << "\nArray after slice modification:";
|
||
for (auto val : data)
|
||
out << " " << val;
|
||
|
||
std::valarray<bool> mask = (v1 > 20);
|
||
out << "\nElements of v1 > 20:";
|
||
for (size_t i = 0; i < v1.size(); ++i)
|
||
{
|
||
if (mask[i])
|
||
out << " " << v1[i];
|
||
}
|
||
|
||
std::valarray<int> masked = v1[mask];
|
||
out << "\nMasked array:";
|
||
for (auto val : masked)
|
||
out << " " << val;
|
||
|
||
std::valarray<int> shiftData(shiftData_i_data, shiftData_i_size);
|
||
out << "\nOriginal shiftData:";
|
||
for (auto val : shiftData)
|
||
out << " " << val;
|
||
|
||
std::valarray<int> shifted = shiftData.shift(2);
|
||
out << "\nshift(2):";
|
||
for (auto val : shifted)
|
||
out << " " << val;
|
||
|
||
std::valarray<int> cshifted = shiftData.cshift(-1);
|
||
out << "\ncshift(-1):";
|
||
for (auto val : cshifted)
|
||
out << " " << val;
|
||
|
||
out << "\nSum(v1): " << v1.sum();
|
||
out << "\nMin(v1): " << v1.min();
|
||
out << "\nMax(v1): " << v1.max();
|
||
|
||
out << "\n";
|
||
|
||
/* Terminate with a NUL. Otherwise, we'd have to use:
|
||
__builtin_printf("%.*s", (int) out_b_sv.size(), out_b_sv.data());
|
||
... which nvptx 'printf', as implemented via PTX 'vprintf', doesn't support (TODO). */
|
||
out << '\0';
|
||
std::string_view out_b_sv = out_b.view();
|
||
__builtin_printf("%s", out_b_sv.data());
|
||
}
|
||
|
||
return 0;
|
||
}
|