"...composable_kernel_onnxruntime.git" did not exist on "8afbb10d18b5e865a7c018064ba856ee77c23bb3"
Commit ed196e59 authored by Uros Petkovic's avatar Uros Petkovic
Browse files

Fix compilation of math functions on Windows

parent 5fe1b075
...@@ -43,7 +43,11 @@ struct float_equal_fn ...@@ -43,7 +43,11 @@ struct float_equal_fn
template <class T, MIGRAPHX_REQUIRES(is_floating_point<T>{})> template <class T, MIGRAPHX_REQUIRES(is_floating_point<T>{})>
static bool apply(T x, T y) static bool apply(T x, T y)
{ {
return std::isfinite(x) and std::isfinite(y) and // The standard library from MSVC does not implement std::isfinite() for integer
// types - no additional overloads are provided. According to the documentation,
// integer types should be treaded as doubles.
// Refer to https://en.cppreference.com/w/cpp/numeric/math/isfinite for more information.
return std::isfinite(static_cast<double>(x)) and std::isfinite(static_cast<double>(y)) and
std::nextafter(x, std::numeric_limits<T>::lowest()) <= y and std::nextafter(x, std::numeric_limits<T>::lowest()) <= y and
std::nextafter(x, std::numeric_limits<T>::max()) >= y; std::nextafter(x, std::numeric_limits<T>::max()) >= y;
} }
......
...@@ -214,10 +214,10 @@ bool compare_literals(instruction_ref ins1, instruction_ref ins2) ...@@ -214,10 +214,10 @@ bool compare_literals(instruction_ref ins1, instruction_ref ins2)
l1.end(), l1.end(),
[&](auto v) { [&](auto v) {
return ((float_equal(v, l1.front())) or return ((float_equal(v, l1.front())) or
(std::isinf(l1.front()) and std::isinf(v))); (std::isinf(static_cast<double>(l1.front())) and std::isinf(static_cast<double>(v))));
}) and }) and
std::all_of(l2.begin(), l2.end(), [&](auto v) { std::all_of(l2.begin(), l2.end(), [&](auto v) {
return ((float_equal(v, l1.front())) or (std::isinf(l1.front()) and std::isinf(v))); return ((float_equal(v, l1.front())) or (std::isinf(static_cast<double>(l1.front())) and std::isinf(static_cast<double>(v))));
}); });
}); });
......
...@@ -39,7 +39,11 @@ using common_type = typename std::common_type<Ts...>::type; ...@@ -39,7 +39,11 @@ using common_type = typename std::common_type<Ts...>::type;
template <class T, MIGRAPHX_REQUIRES(is_floating_point<T>{})> template <class T, MIGRAPHX_REQUIRES(is_floating_point<T>{})>
__device__ bool float_equal_device(T x, T y) __device__ bool float_equal_device(T x, T y)
{ {
return std::isfinite(x) and std::isfinite(y) and // The standard library from MSVC does not implement std::isfinite() for integer
// types - no additional overloads are provided. According to the documentation,
// integer types should be treaded as doubles.
// Refer to https://en.cppreference.com/w/cpp/numeric/math/isfinite for more information.
return std::isfinite(static_cast<double>(x)) and std::isfinite(static_cast<double>(y)) and
std::nextafter(x, std::numeric_limits<T>::lowest()) <= y and std::nextafter(x, std::numeric_limits<T>::lowest()) <= y and
std::nextafter(x, std::numeric_limits<T>::max()) >= y; std::nextafter(x, std::numeric_limits<T>::max()) >= y;
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment