================ @@ -1306,14 +1306,50 @@ float min(float __x, float __y) { return __builtin_fminf(__x, __y); } __DEVICE__ double min(double __x, double __y) { return __builtin_fmin(__x, __y); } +// Define host min/max functions. + #if !defined(__HIPCC_RTC__) && !defined(__OPENMP_AMDGCN__) -__host__ inline static int min(int __arg1, int __arg2) { - return __arg1 < __arg2 ? __arg1 : __arg2; -} -__host__ inline static int max(int __arg1, int __arg2) { - return __arg1 > __arg2 ? __arg1 : __arg2; -} +#pragma push_macro("DEFINE_MIN_MAX_FUNCTIONS") +#define DEFINE_MIN_MAX_FUNCTIONS(type1, type2) \ +static inline auto min(const type1 __a, const type2 __b) \ + -> typename std::remove_reference<decltype(__a < __b ? __a : __b)>::type { \ + return (__a < __b) ? __a : __b; \ +} \ +static inline auto max(const type1 __a, const type2 __b) \ + -> typename std::remove_reference<decltype(__a > __b ? __a : __b)>::type { \ + return (__a > __b) ? __a : __b; \ +} + +// Define min and max functions for same type comparisons +DEFINE_MIN_MAX_FUNCTIONS(int, int) ---------------- jhuber6 wrote:
Could we not do something like this w/ the appropriate static assertion? Or is there an important restriction on the specific types for this function. ```c template <typename T, typename U> static inline auto min(const T &__a, const U &__b) { return (__a < __b) ? __a : __b; } ``` https://github.com/llvm/llvm-project/pull/82956 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits