Skip to content

Commit da017f8

Browse files
author
Pavel Chupin
authored
Revert "[SYCL] Fix return type of relational functions on scalars (#5975)" (#6088)
This reverts commit fd2aa65.
1 parent 5f0eeba commit da017f8

File tree

4 files changed

+80
-396
lines changed

4 files changed

+80
-396
lines changed

sycl/include/CL/sycl/builtins.hpp

Lines changed: 79 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,138 +1109,198 @@ fast_normalize(T p) __NOEXC {
11091109
return __sycl_std::__invoke_fast_normalize<T>(p);
11101110
}
11111111

1112-
/* SYCL 1.2.1 ---- 4.13.7 Relational functions. -----------------------------*/
1113-
/* SYCL 2020 ---- 4.17.9 Relational functions. -----------------------------*/
1114-
1112+
/* --------------- 4.13.7 Relational functions. Device version --------------*/
1113+
// int isequal (half x, half y)
1114+
// shortn isequal (halfn x, halfn y)
1115+
// igeninteger32bit isequal (genfloatf x, genfloatf y)
1116+
// int isequal (double x,double y);
1117+
// longn isequal (doublen x, doublen y)
11151118
template <typename T,
11161119
typename = detail::enable_if_t<detail::is_genfloat<T>::value, T>>
11171120
detail::common_rel_ret_t<T> isequal(T x, T y) __NOEXC {
11181121
return detail::RelConverter<T>::apply(
11191122
__sycl_std::__invoke_FOrdEqual<detail::rel_ret_t<T>>(x, y));
11201123
}
11211124

1125+
// int isnotequal (half x, half y)
1126+
// shortn isnotequal (halfn x, halfn y)
1127+
// igeninteger32bit isnotequal (genfloatf x, genfloatf y)
1128+
// int isnotequal (double x, double y)
1129+
// longn isnotequal (doublen x, doublen y)
11221130
template <typename T,
11231131
typename = detail::enable_if_t<detail::is_genfloat<T>::value, T>>
11241132
detail::common_rel_ret_t<T> isnotequal(T x, T y) __NOEXC {
11251133
return detail::RelConverter<T>::apply(
11261134
__sycl_std::__invoke_FUnordNotEqual<detail::rel_ret_t<T>>(x, y));
11271135
}
11281136

1137+
// int isgreater (half x, half y)
1138+
// shortn isgreater (halfn x, halfn y)
1139+
// igeninteger32bit isgreater (genfloatf x, genfloatf y)
1140+
// int isgreater (double x, double y)
1141+
// longn isgreater (doublen x, doublen y)
11291142
template <typename T,
11301143
typename = detail::enable_if_t<detail::is_genfloat<T>::value, T>>
11311144
detail::common_rel_ret_t<T> isgreater(T x, T y) __NOEXC {
11321145
return detail::RelConverter<T>::apply(
11331146
__sycl_std::__invoke_FOrdGreaterThan<detail::rel_ret_t<T>>(x, y));
11341147
}
11351148

1149+
// int isgreaterequal (half x, half y)
1150+
// shortn isgreaterequal (halfn x, halfn y)
1151+
// igeninteger32bit isgreaterequal (genfloatf x, genfloatf y)
1152+
// int isgreaterequal (double x, double y)
1153+
// longn isgreaterequal (doublen x, doublen y)
11361154
template <typename T,
11371155
typename = detail::enable_if_t<detail::is_genfloat<T>::value, T>>
11381156
detail::common_rel_ret_t<T> isgreaterequal(T x, T y) __NOEXC {
11391157
return detail::RelConverter<T>::apply(
11401158
__sycl_std::__invoke_FOrdGreaterThanEqual<detail::rel_ret_t<T>>(x, y));
11411159
}
11421160

1161+
// int isless (half x, half y)
1162+
// shortn isless (halfn x, halfn y)
1163+
// igeninteger32bit isless (genfloatf x, genfloatf y)
1164+
// int isless (long x, long y)
1165+
// longn isless (doublen x, doublen y)
11431166
template <typename T,
11441167
typename = detail::enable_if_t<detail::is_genfloat<T>::value, T>>
11451168
detail::common_rel_ret_t<T> isless(T x, T y) __NOEXC {
11461169
return detail::RelConverter<T>::apply(
11471170
__sycl_std::__invoke_FOrdLessThan<detail::rel_ret_t<T>>(x, y));
11481171
}
11491172

1173+
// int islessequal (half x, half y)
1174+
// shortn islessequal (halfn x, halfn y)
1175+
// igeninteger32bit islessequal (genfloatf x, genfloatf y)
1176+
// int islessequal (double x, double y)
1177+
// longn islessequal (doublen x, doublen y)
11501178
template <typename T,
11511179
typename = detail::enable_if_t<detail::is_genfloat<T>::value, T>>
11521180
detail::common_rel_ret_t<T> islessequal(T x, T y) __NOEXC {
11531181
return detail::RelConverter<T>::apply(
11541182
__sycl_std::__invoke_FOrdLessThanEqual<detail::rel_ret_t<T>>(x, y));
11551183
}
11561184

1185+
// int islessgreater (half x, half y)
1186+
// shortn islessgreater (halfn x, halfn y)
1187+
// igeninteger32bit islessgreater (genfloatf x, genfloatf y)
1188+
// int islessgreater (double x, double y)
1189+
// longn islessgreater (doublen x, doublen y)
11571190
template <typename T,
11581191
typename = detail::enable_if_t<detail::is_genfloat<T>::value, T>>
11591192
detail::common_rel_ret_t<T> islessgreater(T x, T y) __NOEXC {
11601193
return detail::RelConverter<T>::apply(
11611194
__sycl_std::__invoke_FOrdNotEqual<detail::rel_ret_t<T>>(x, y));
11621195
}
11631196

1197+
// int isfinite (half x)
1198+
// shortn isfinite (halfn x)
1199+
// igeninteger32bit isfinite (genfloatf x)
1200+
// int isfinite (double x)
1201+
// longn isfinite (doublen x)
11641202
template <typename T,
11651203
typename = detail::enable_if_t<detail::is_genfloat<T>::value, T>>
11661204
detail::common_rel_ret_t<T> isfinite(T x) __NOEXC {
11671205
return detail::RelConverter<T>::apply(
11681206
__sycl_std::__invoke_IsFinite<detail::rel_ret_t<T>>(x));
11691207
}
11701208

1209+
// int isinf (half x)
1210+
// shortn isinf (halfn x)
1211+
// igeninteger32bit isinf (genfloatf x)
1212+
// int isinf (double x)
1213+
// longn isinf (doublen x)
11711214
template <typename T,
11721215
typename = detail::enable_if_t<detail::is_genfloat<T>::value, T>>
11731216
detail::common_rel_ret_t<T> isinf(T x) __NOEXC {
11741217
return detail::RelConverter<T>::apply(
11751218
__sycl_std::__invoke_IsInf<detail::rel_ret_t<T>>(x));
11761219
}
11771220

1221+
// int isnan (half x)
1222+
// shortn isnan (halfn x)
1223+
// igeninteger32bit isnan (genfloatf x)
1224+
// int isnan (double x)
1225+
// longn isnan (doublen x)
11781226
template <typename T,
11791227
typename = detail::enable_if_t<detail::is_genfloat<T>::value, T>>
11801228
detail::common_rel_ret_t<T> isnan(T x) __NOEXC {
11811229
return detail::RelConverter<T>::apply(
11821230
__sycl_std::__invoke_IsNan<detail::rel_ret_t<T>>(x));
11831231
}
11841232

1233+
// int isnormal (half x)
1234+
// shortn isnormal (halfn x)
1235+
// igeninteger32bit isnormal (genfloatf x)
1236+
// int isnormal (double x)
1237+
// longn isnormal (doublen x)
11851238
template <typename T,
11861239
typename = detail::enable_if_t<detail::is_genfloat<T>::value, T>>
11871240
detail::common_rel_ret_t<T> isnormal(T x) __NOEXC {
11881241
return detail::RelConverter<T>::apply(
11891242
__sycl_std::__invoke_IsNormal<detail::rel_ret_t<T>>(x));
11901243
}
11911244

1245+
// int isordered (half x)
1246+
// shortn isordered (halfn x, halfn y)
1247+
// igeninteger32bit isordered (genfloatf x, genfloatf y)
1248+
// int isordered (double x, double y)
1249+
// longn isordered (doublen x, doublen y)
11921250
template <typename T,
11931251
typename = detail::enable_if_t<detail::is_genfloat<T>::value, T>>
11941252
detail::common_rel_ret_t<T> isordered(T x, T y) __NOEXC {
11951253
return detail::RelConverter<T>::apply(
11961254
__sycl_std::__invoke_Ordered<detail::rel_ret_t<T>>(x, y));
11971255
}
11981256

1257+
// int isunordered (half x, half y)
1258+
// shortn isunordered (halfn x, halfn y)
1259+
// igeninteger32bit isunordered (genfloatf x, genfloatf y)
1260+
// int isunordered (double x, double y)
1261+
// longn isunordered (doublen x, doublen y)
11991262
template <typename T,
12001263
typename = detail::enable_if_t<detail::is_genfloat<T>::value, T>>
12011264
detail::common_rel_ret_t<T> isunordered(T x, T y) __NOEXC {
12021265
return detail::RelConverter<T>::apply(
12031266
__sycl_std::__invoke_Unordered<detail::rel_ret_t<T>>(x, y));
12041267
}
12051268

1269+
// int signbit (half x)
1270+
// shortn signbit (halfn x)
1271+
// igeninteger32bit signbit (genfloatf x)
1272+
// int signbit (double)
1273+
// longn signbit (doublen x)
12061274
template <typename T,
12071275
typename = detail::enable_if_t<detail::is_genfloat<T>::value, T>>
12081276
detail::common_rel_ret_t<T> signbit(T x) __NOEXC {
12091277
return detail::RelConverter<T>::apply(
12101278
__sycl_std::__invoke_SignBitSet<detail::rel_ret_t<T>>(x));
12111279
}
12121280

1213-
namespace detail {
1214-
#if defined(SYCL2020_CONFORMANT_APIS) && SYCL_LANGUAGE_VERSION >= 202001
1215-
using anyall_ret_t = bool;
1216-
#else
1217-
using anyall_ret_t = int;
1218-
#endif
1219-
} // namespace detail
1220-
1281+
// int any (sigeninteger x)
12211282
template <typename T>
1222-
detail::enable_if_t<detail::is_sigeninteger<T>::value, detail::anyall_ret_t>
1223-
any(T x) __NOEXC {
1283+
detail::enable_if_t<detail::is_sigeninteger<T>::value, int> any(T x) __NOEXC {
12241284
return detail::Boolean<1>(int(detail::msbIsSet(x)));
12251285
}
12261286

1287+
// int any (vigeninteger x)
12271288
template <typename T>
1228-
detail::enable_if_t<detail::is_vigeninteger<T>::value, detail::anyall_ret_t>
1229-
any(T x) __NOEXC {
1289+
detail::enable_if_t<detail::is_vigeninteger<T>::value, int> any(T x) __NOEXC {
12301290
return detail::rel_sign_bit_test_ret_t<T>(
12311291
__sycl_std::__invoke_Any<detail::rel_sign_bit_test_ret_t<T>>(
12321292
detail::rel_sign_bit_test_arg_t<T>(x)));
12331293
}
12341294

1295+
// int all (sigeninteger x)
12351296
template <typename T>
1236-
detail::enable_if_t<detail::is_sigeninteger<T>::value, detail::anyall_ret_t>
1237-
all(T x) __NOEXC {
1297+
detail::enable_if_t<detail::is_sigeninteger<T>::value, int> all(T x) __NOEXC {
12381298
return detail::Boolean<1>(int(detail::msbIsSet(x)));
12391299
}
12401300

1301+
// int all (vigeninteger x)
12411302
template <typename T>
1242-
detail::enable_if_t<detail::is_vigeninteger<T>::value, detail::anyall_ret_t>
1243-
all(T x) __NOEXC {
1303+
detail::enable_if_t<detail::is_vigeninteger<T>::value, int> all(T x) __NOEXC {
12441304
return detail::rel_sign_bit_test_ret_t<T>(
12451305
__sycl_std::__invoke_All<detail::rel_sign_bit_test_ret_t<T>>(
12461306
detail::rel_sign_bit_test_arg_t<T>(x)));

sycl/include/CL/sycl/detail/boolean.hpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,8 +110,7 @@ template <> struct Boolean<1> {
110110

111111
// Cast to a signed interger type
112112
template <typename T> operator T() const {
113-
static_assert(std::is_same<T, bool>::value || is_sgeninteger<T>::value,
114-
"Invalid conversion");
113+
static_assert(is_sgeninteger<T>::value, "Invalid conversion");
115114
return value;
116115
}
117116

sycl/include/CL/sycl/detail/generic_type_traits.hpp

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -501,31 +501,9 @@ template <typename T> inline constexpr bool msbIsSet(const T x) {
501501
return (x & msbMask(x));
502502
}
503503

504-
#if defined(SYCL2020_CONFORMANT_APIS) && SYCL_LANGUAGE_VERSION >= 202001
505-
// SYCL 2020 4.17.9 (Relation functions), e.g. table 178
506-
//
507-
// genbool isequal (genfloatf x, genfloatf y)
508-
// genbool isequal (genfloatd x, genfloatd y)
509-
//
510-
// TODO: marray support isn't implemented yet.
511-
template <typename T>
512-
using common_rel_ret_t =
513-
conditional_t<is_vgentype<T>::value, make_singed_integer_t<T>, bool>;
514-
#else
515-
// SYCL 1.2.1 4.13.7 (Relation functions), e.g.
516-
//
517-
// igeninteger32bit isequal (genfloatf x, genfloatf y)
518-
// igeninteger64bit isequal (genfloatd x, genfloatd y)
519-
//
520-
// However, we have pre-existing bug so
521-
//
522-
// igeninteger32bit isequal (genfloatd x, genfloatd y)
523-
//
524-
// Fixing it would be an ABI-breaking change so isn't done.
525504
template <typename T>
526505
using common_rel_ret_t =
527506
conditional_t<is_vgentype<T>::value, make_singed_integer_t<T>, int>;
528-
#endif
529507

530508
// forward declaration
531509
template <int N> struct Boolean;

0 commit comments

Comments
 (0)