diff --git a/sycl/doc/extensions/proposed/sycl_ext_oneapi_complex_algorithms.asciidoc b/sycl/doc/extensions/proposed/sycl_ext_oneapi_complex_algorithms.asciidoc index 3f65f58e3341c..da4484d255eb4 100644 --- a/sycl/doc/extensions/proposed/sycl_ext_oneapi_complex_algorithms.asciidoc +++ b/sycl/doc/extensions/proposed/sycl_ext_oneapi_complex_algorithms.asciidoc @@ -125,6 +125,18 @@ NOTE: `sycl::bit_and`, `sycl::bit_or`, `sycl::bit_xor`, `sycl::logical_and`, because their behaviors are defined in terms of operators that `std::complex` does not implement. +=== Known Identities + +This extension adds the following known identities, augmenting https://registry.khronos.org/SYCL/specs/sycl-2020/html/sycl-2020.html#table.identities[Table 123] in the core SYCL specification: +[cols="5,30,70"] +[grid="rows"] +[options="header"] +|======================================== +|Operator|Available When|Identity +|`sycl::plus`|`std::is_same_v, std::complex> \|\| +std::is_same_v, std::complex>`|`AccumulatorT{}` +|======================================== + == Issues None. diff --git a/sycl/include/sycl/known_identity.hpp b/sycl/include/sycl/known_identity.hpp index 39981f9d4720c..dbc42aacce951 100644 --- a/sycl/include/sycl/known_identity.hpp +++ b/sycl/include/sycl/known_identity.hpp @@ -63,6 +63,11 @@ using IsLogicalOR = bool_constant>::value || std::is_same>::value>; +template +using isComplex = + bool_constant>::value || + std::is_same>::value>; + // Identity = 0 template using IsZeroIdentityOp = @@ -70,7 +75,10 @@ using IsZeroIdentityOp = (IsPlus::value || IsBitOR::value || IsBitXOR::value)) || - (is_genfloat::value && IsPlus::value)>; + (is_genfloat::value && + IsPlus::value) || + (isComplex::value && + IsPlus::value)>; // Identity = 1 template