Skip to content

[SYCL][NFC] Optimize int-convert.cpp test #12043

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 35 additions & 34 deletions sycl/test-e2e/Basic/vector/int-convert.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ bool check_vectors_equal(sycl::vec<T, 4> a, sycl::vec<T, 4> b,
return result;
}

template <typename From, typename To> bool check_convert() {
template <typename From, typename To> bool check_convert(sycl::queue q) {
sycl::vec<From, 4> input;
if constexpr (std::is_signed_v<From>) {
input = sycl::vec<From, 4>{static_cast<From>(37), static_cast<From>(0),
Expand All @@ -68,7 +68,6 @@ template <typename From, typename To> bool check_convert() {
sycl::vec<To, 4> hostResult = input.template convert<To>();

sycl::buffer<sycl::vec<To, 4>> buf(sycl::range{1});
sycl::queue q;
q.submit([&](sycl::handler &cgh) {
sycl::accessor acc(buf, cgh);
cgh.single_task([=]() { acc[0] = input.template convert<To>(); });
Expand Down Expand Up @@ -106,53 +105,55 @@ constexpr auto has_unsigned_v =
std::is_integral_v<T> && !std::is_same_v<T, bool> &&
!std::is_same_v<T, sycl::byte> && !std::is_same_v<T, std::byte>;

template <typename From, typename To> bool check_signed_unsigned_convert_to() {
template <typename From, typename To>
bool check_signed_unsigned_convert_to(sycl::queue q) {
bool pass = true;
pass &= check_convert<From, To>();
pass &= check_convert<From, To>(q);
if constexpr (has_unsigned_v<To>)
pass &= check_convert<From, std::make_unsigned_t<To>>();
pass &= check_convert<From, std::make_unsigned_t<To>>(q);
if constexpr (has_unsigned_v<From>)
pass &= check_convert<std::make_unsigned_t<From>, To>();
pass &= check_convert<std::make_unsigned_t<From>, To>(q);
if constexpr (has_unsigned_v<To> && has_unsigned_v<From>)
pass &=
check_convert<std::make_unsigned_t<From>, std::make_unsigned_t<To>>();
check_convert<std::make_unsigned_t<From>, std::make_unsigned_t<To>>(q);
return pass;
}

template <typename From> bool check_convert_from() {
template <typename From> bool check_convert_from(sycl::queue q) {
bool pass = true;
pass &= check_signed_unsigned_convert_to<From, sycl::byte>();
pass &= check_signed_unsigned_convert_to<From, std::byte>();
pass &= check_signed_unsigned_convert_to<From, std::int8_t>();
pass &= check_signed_unsigned_convert_to<From, std::int16_t>();
pass &= check_signed_unsigned_convert_to<From, std::int32_t>();
pass &= check_signed_unsigned_convert_to<From, std::int64_t>();
pass &= check_signed_unsigned_convert_to<From, bool>();
pass &= check_signed_unsigned_convert_to<From, char>();
pass &= check_signed_unsigned_convert_to<From, signed char>();
pass &= check_signed_unsigned_convert_to<From, short>();
pass &= check_signed_unsigned_convert_to<From, int>();
pass &= check_signed_unsigned_convert_to<From, long>();
pass &= check_signed_unsigned_convert_to<From, long long>();
pass &= check_signed_unsigned_convert_to<From, sycl::byte>(q);
pass &= check_signed_unsigned_convert_to<From, std::byte>(q);
pass &= check_signed_unsigned_convert_to<From, std::int8_t>(q);
pass &= check_signed_unsigned_convert_to<From, std::int16_t>(q);
pass &= check_signed_unsigned_convert_to<From, std::int32_t>(q);
pass &= check_signed_unsigned_convert_to<From, std::int64_t>(q);
pass &= check_signed_unsigned_convert_to<From, bool>(q);
pass &= check_signed_unsigned_convert_to<From, char>(q);
pass &= check_signed_unsigned_convert_to<From, signed char>(q);
pass &= check_signed_unsigned_convert_to<From, short>(q);
pass &= check_signed_unsigned_convert_to<From, int>(q);
pass &= check_signed_unsigned_convert_to<From, long>(q);
pass &= check_signed_unsigned_convert_to<From, long long>(q);

return pass;
}

int main() {
sycl::queue q;
bool pass = true;
pass &= check_convert_from<sycl::byte>();
pass &= check_convert_from<std::byte>();
pass &= check_convert_from<std::int8_t>();
pass &= check_convert_from<std::int16_t>();
pass &= check_convert_from<std::int32_t>();
pass &= check_convert_from<std::int64_t>();
pass &= check_convert_from<char>();
pass &= check_convert_from<signed char>();
pass &= check_convert_from<short>();
pass &= check_convert_from<int>();
pass &= check_convert_from<long>();
pass &= check_convert_from<long long>();
pass &= check_convert_from<bool>();
pass &= check_convert_from<sycl::byte>(q);
pass &= check_convert_from<std::byte>(q);
pass &= check_convert_from<std::int8_t>(q);
pass &= check_convert_from<std::int16_t>(q);
pass &= check_convert_from<std::int32_t>(q);
pass &= check_convert_from<std::int64_t>(q);
pass &= check_convert_from<char>(q);
pass &= check_convert_from<signed char>(q);
pass &= check_convert_from<short>(q);
pass &= check_convert_from<int>(q);
pass &= check_convert_from<long>(q);
pass &= check_convert_from<long long>(q);
pass &= check_convert_from<bool>(q);

return static_cast<int>(!pass);
}