From a483255e504fb0c11bfabd02d627567d7774145a Mon Sep 17 00:00:00 2001 From: Marco Antognini Date: Tue, 9 Mar 2021 09:18:40 +0000 Subject: [PATCH] Fold functions for nextafter (#1176) * Add assertion to prove isNextafter is true iff the builtin is nextafter() Signed-off-by: Marco Antognini * Fold functions for nextafter There is no need to differentiate nextafter() from other binary builtin functions when creating the vtbl entries. Signed-off-by: Marco Antognini --- .../math_brute_force/binary_double.cpp | 18 +++--------------- .../math_brute_force/binary_float.cpp | 16 ++-------------- .../math_brute_force/function_list.cpp | 10 +--------- 3 files changed, 6 insertions(+), 38 deletions(-) diff --git a/test_conformance/math_brute_force/binary_double.cpp b/test_conformance/math_brute_force/binary_double.cpp index a4dbd98e..fad03ade 100644 --- a/test_conformance/math_brute_force/binary_double.cpp +++ b/test_conformance/math_brute_force/binary_double.cpp @@ -285,9 +285,7 @@ static size_t specialValuesDoubleCount = static cl_int TestDouble(cl_uint job_id, cl_uint thread_id, void *p); -static int TestFunc_Double_Double_Double_common(const Func *f, MTdata d, - int isNextafter, - bool relaxedMode) +int TestFunc_Double_Double_Double(const Func *f, MTdata d, bool relaxedMode) { TestInfo test_info; cl_int error; @@ -329,7 +327,8 @@ static int TestFunc_Double_Double_Double_common(const Func *f, MTdata d, test_info.isFDim = 0 == strcmp("fdim", f->nameInCode); test_info.skipNanInf = 0; - test_info.isNextafter = isNextafter; + test_info.isNextafter = 0 == strcmp("nextafter", f->nameInCode); + // cl_kernels aren't thread safe, so we make one for each vector size for // every thread for (i = gMinVectorSizeIndex; i < gMaxVectorSizeIndex; i++) @@ -934,14 +933,3 @@ static cl_int TestDouble(cl_uint job_id, cl_uint thread_id, void *data) exit: return error; } - -int TestFunc_Double_Double_Double(const Func *f, MTdata d, bool relaxedMode) -{ - return TestFunc_Double_Double_Double_common(f, d, 0, relaxedMode); -} - -int TestFunc_Double_Double_Double_nextafter(const Func *f, MTdata d, - bool relaxedMode) -{ - return TestFunc_Double_Double_Double_common(f, d, 1, relaxedMode); -} diff --git a/test_conformance/math_brute_force/binary_float.cpp b/test_conformance/math_brute_force/binary_float.cpp index 16012961..a31bfb2f 100644 --- a/test_conformance/math_brute_force/binary_float.cpp +++ b/test_conformance/math_brute_force/binary_float.cpp @@ -273,8 +273,7 @@ typedef struct TestInfo static cl_int TestFloat(cl_uint job_id, cl_uint thread_id, void *p); -static int TestFunc_Float_Float_Float_common(const Func *f, MTdata d, - int isNextafter, bool relaxedMode) +int TestFunc_Float_Float_Float(const Func *f, MTdata d, bool relaxedMode) { TestInfo test_info; cl_int error; @@ -318,7 +317,7 @@ static int TestFunc_Float_Float_Float_common(const Func *f, MTdata d, test_info.relaxedMode = relaxedMode; test_info.isFDim = 0 == strcmp("fdim", f->nameInCode); test_info.skipNanInf = test_info.isFDim && !gInfNanSupport; - test_info.isNextafter = isNextafter; + test_info.isNextafter = 0 == strcmp("nextafter", f->nameInCode); // cl_kernels aren't thread safe, so we make one for each vector size for // every thread @@ -1094,14 +1093,3 @@ exit: if (overflow) free(overflow); return error; } - -int TestFunc_Float_Float_Float(const Func *f, MTdata d, bool relaxedMode) -{ - return TestFunc_Float_Float_Float_common(f, d, 0, relaxedMode); -} - -int TestFunc_Float_Float_Float_nextafter(const Func *f, MTdata d, - bool relaxedMode) -{ - return TestFunc_Float_Float_Float_common(f, d, 1, relaxedMode); -} diff --git a/test_conformance/math_brute_force/function_list.cpp b/test_conformance/math_brute_force/function_list.cpp index ef72a085..3edbb485 100644 --- a/test_conformance/math_brute_force/function_list.cpp +++ b/test_conformance/math_brute_force/function_list.cpp @@ -58,7 +58,6 @@ #define unaryF_u NULL #define macro_unaryF NULL #define binaryF NULL -#define binaryF_nextafter NULL #define binaryOperatorF NULL #define binaryF_i NULL #define macro_binaryF NULL @@ -134,12 +133,6 @@ static constexpr vtbl _binary = { TestFunc_Double_Double_Double, }; -static constexpr vtbl _binary_nextafter = { - "binary_nextafter", - TestFunc_Float_Float_Float_nextafter, - TestFunc_Double_Double_Double_nextafter, -}; - static constexpr vtbl _binary_operator = { "binaryOperator", TestFunc_Float_Float_Float_Operator, @@ -193,7 +186,6 @@ static constexpr vtbl _mad_tbl = { #define unaryF_u &_unary_u #define macro_unaryF &_macro_unary #define binaryF &_binary -#define binaryF_nextafter &_binary_nextafter #define binaryOperatorF &_binary_operator #define binaryF_i &_binary_i #define macro_binaryF &_macro_binary @@ -285,7 +277,7 @@ const Func functionList[] = { ENTRY(minmag, 0.0f, 0.0f, FTZ_OFF, binaryF), ENTRY(modf, 0.0f, 0.0f, FTZ_OFF, unaryF_two_results), ENTRY(nan, 0.0f, 0.0f, FTZ_OFF, unaryF_u), - ENTRY(nextafter, 0.0f, 0.0f, FTZ_OFF, binaryF_nextafter), + ENTRY(nextafter, 0.0f, 0.0f, FTZ_OFF, binaryF), ENTRY_EXT(pow, 16.0f, 16.0f, 8192.0f, FTZ_OFF, binaryF, 8192.0f), // in derived mode the ulp error is calculated as // exp2(y*log2(x)) and in non-derived it is the same as