[Vectorizer] Extend fpmin/fpmax tests to test semantic variants This extends the test cases in argmin-argmax-fp to test for the semantic variants of fpmin/fpmax operations. This test will now also cover fpminimum/fpmaximum and fpminimum_num/fpmaximum_num. Change-Id: I33b4b63a3bec60d002a42e3fe14a1abda518d3b0
diff --git a/SingleSource/UnitTests/Vectorizer/argmin-argmax-fp.cpp b/SingleSource/UnitTests/Vectorizer/argmin-argmax-fp.cpp index 4abf26f..716356f 100644 --- a/SingleSource/UnitTests/Vectorizer/argmin-argmax-fp.cpp +++ b/SingleSource/UnitTests/Vectorizer/argmin-argmax-fp.cpp
@@ -58,6 +58,62 @@ } return MaxIdx; \ , Suf) +// Test using fminimum for floating point argmin. +#define T_FMINIMUM(Op, M, I, Start, Inc, InitVal, InitIdx, Suf) \ + TEST( \ + Op, M, I, M Min = InitVal; I MinIdx = InitIdx; \ + , \ + for (unsigned i = Start; i < TC; i += Inc) { \ + M NewMin = fminimum(A[i], Min); \ + if (NewMin != Min) { \ + Min = NewMin; \ + MinIdx = i; \ + } \ + } return MinIdx; \ + , Suf) + +// Test using fmaximum for floating point argmax. +#define T_FMAXIMUM(Op, M, I, Start, Inc, InitVal, InitIdx, Suf) \ + TEST( \ + Op, M, I, M Max = InitVal; I MaxIdx = InitIdx; \ + , \ + for (unsigned i = Start; i < TC; i += Inc) { \ + M NewMax = fmaximum(A[i], Max); \ + if (NewMax != Max) { \ + Max = NewMax; \ + MaxIdx = i; \ + } \ + } return MaxIdx; \ + , Suf) + +// Test using fminimum_num for floating point argmin. +#define T_FMINIMUMNUM(Op, M, I, Start, Inc, InitVal, InitIdx, Suf) \ + TEST( \ + Op, M, I, M Min = InitVal; I MinIdx = InitIdx; \ + , \ + for (unsigned i = Start; i < TC; i += Inc) { \ + M NewMin = fminimum_num(A[i], Min); \ + if (NewMin != Min) { \ + Min = NewMin; \ + MinIdx = i; \ + } \ + } return MinIdx; \ + , Suf) + +// Test using fmaximum_num for floating point argmax. +#define T_FMAXIMUMNUM(Op, M, I, Start, Inc, InitVal, InitIdx, Suf) \ + TEST( \ + Op, M, I, M Max = InitVal; I MaxIdx = InitIdx; \ + , \ + for (unsigned i = Start; i < TC; i += Inc) { \ + M NewMax = fmaximum_num(A[i], Max); \ + if (NewMax != Max) { \ + Max = NewMax; \ + MaxIdx = i; \ + } \ + } return MaxIdx; \ + , Suf) + // Run tests using std::fmin/std::fmax for floating point types. #define RUN_FMIN_FMAX_TESTS_FOR_TYPE(M, I) \ T_FMIN("min", M, I, 0, 1, std::numeric_limits<M>::max(), 0, "_fmin_start_0") \ @@ -69,8 +125,7 @@ T_FMIN("min", M, I, 0, 1, M(0.0), 0, "_fmin_start_pos_zero") \ T_FMIN("min", M, I, 0, 2, std::numeric_limits<M>::max(), 0, \ "_fmin_start_0_inc_2") \ - T_FMIN("min", M, I, 3, 1, std::numeric_limits<M>::max(), 3, \ - "_fmin_start_3") \ + T_FMIN("min", M, I, 3, 1, std::numeric_limits<M>::max(), 3, "_fmin_start_3") \ T_FMIN_ADD("min", M, I, 0, 1, std::numeric_limits<M>::max(), 0, \ "_fmin_add_start_0") \ T_FMIN_ADD("min", M, I, 0, 2, std::numeric_limits<M>::max(), 0, \ @@ -90,7 +145,55 @@ T_FMAX_ADD("max", M, I, 0, 1, std::numeric_limits<M>::lowest(), 0, \ "_fmax_add_start_0") \ T_FMAX_ADD("max", M, I, 0, 2, std::numeric_limits<M>::lowest(), 0, \ - "_fmax_add_start_0_inc_2") + "_fmax_add_start_0_inc_2") \ + T_FMINIMUM("minimum", M, I, 0, 1, std::numeric_limits<M>::max(), 0, \ + "_fminimum_start_0") \ + T_FMINIMUM("minimum", M, I, 0, 1, std::numeric_limits<M>::infinity(), 0, \ + "_fminimum_start_inf") \ + T_FMINIMUM("minimum", M, I, 0, 1, M(-0.0), 0, "_fminimum_start_neg_zero") \ + T_FMINIMUM("minimum", M, I, 0, 1, M(0.0), 0, "_fminimum_start_pos_zero") \ + T_FMINIMUM("minimum", M, I, 0, 2, std::numeric_limits<M>::max(), 0, \ + "_fminimum_start_0_inc_2") \ + T_FMINIMUM("minimum", M, I, 3, 1, std::numeric_limits<M>::max(), 3, \ + "_fminimum_start_3") \ + T_FMAXIMUM("maximum", M, I, 0, 1, std::numeric_limits<M>::lowest(), 0, \ + "_fmaximum_start_0") \ + T_FMAXIMUM("maximum", M, I, 0, 1, -std::numeric_limits<M>::infinity(), 0, \ + "_fmaximum_start_neg_inf") \ + T_FMAXIMUM("maximum", M, I, 0, 1, M(-0.0), 0, "_fmaximum_start_neg_zero") \ + T_FMAXIMUM("maximum", M, I, 0, 1, M(0.0), 0, "_fmaximum_start_pos_zero") \ + T_FMAXIMUM("maximum", M, I, 0, 2, std::numeric_limits<M>::lowest(), 0, \ + "_fmaximum_start_0_inc_2") \ + T_FMAXIMUM("maximum", M, I, 3, 1, std::numeric_limits<M>::lowest(), 3, \ + "_fmaximum_start_3") \ + T_FMINIMUMNUM("minimumnum", M, I, 0, 1, std::numeric_limits<M>::max(), 0, \ + "_fminimumnum_start_0") \ + T_FMINIMUMNUM("minimumnum", M, I, 0, 1, std::numeric_limits<M>::infinity(), \ + 0, "_fminimumnum_start_inf") \ + T_FMINIMUMNUM("minimumnum", M, I, 0, 1, std::numeric_limits<M>::quiet_NaN(), \ + 0, "_fminimumnum_start_nan") \ + T_FMINIMUMNUM("minimumnum", M, I, 0, 1, M(-0.0), 0, \ + "_fminimumnum_start_neg_zero") \ + T_FMINIMUMNUM("minimumnum", M, I, 0, 1, M(0.0), 0, \ + "_fminimumnum_start_pos_zero") \ + T_FMINIMUMNUM("minimumnum", M, I, 0, 2, std::numeric_limits<M>::max(), 0, \ + "_fminimumnum_start_0_inc_2") \ + T_FMINIMUMNUM("minimumnum", M, I, 3, 1, std::numeric_limits<M>::max(), 3, \ + "_fminimumnum_start_3") \ + T_FMAXIMUMNUM("maximumnum", M, I, 0, 1, std::numeric_limits<M>::lowest(), 0, \ + "_fmaximumnum_start_0") \ + T_FMAXIMUMNUM("maximumnum", M, I, 0, 1, -std::numeric_limits<M>::infinity(), \ + 0, "_fmaximumnum_start_neg_inf") \ + T_FMAXIMUMNUM("maximumnum", M, I, 0, 1, std::numeric_limits<M>::quiet_NaN(), \ + 0, "_fmaximumnum_start_nan") \ + T_FMAXIMUMNUM("maximumnum", M, I, 0, 1, M(-0.0), 0, \ + "_fmaximumnum_start_neg_zero") \ + T_FMAXIMUMNUM("maximumnum", M, I, 0, 1, M(0.0), 0, \ + "_fmaximumnum_start_pos_zero") \ + T_FMAXIMUMNUM("maximumnum", M, I, 0, 2, std::numeric_limits<M>::lowest(), 0, \ + "_fmaximumnum_start_0_inc_2") \ + T_FMAXIMUMNUM("maximumnum", M, I, 3, 1, std::numeric_limits<M>::lowest(), 3, \ + "_fmaximumnum_start_3") int main(void) { rng = std::mt19937(15);
diff --git a/SingleSource/UnitTests/Vectorizer/argmin-argmax-fp.reference_output b/SingleSource/UnitTests/Vectorizer/argmin-argmax-fp.reference_output index ff7acf8..a7ed852 100644 --- a/SingleSource/UnitTests/Vectorizer/argmin-argmax-fp.reference_output +++ b/SingleSource/UnitTests/Vectorizer/argmin-argmax-fp.reference_output
@@ -32,6 +32,32 @@ Checking argmax_float_uint32_t_fmax_start_3 Checking argmax_float_uint32_t_fmax_add_start_0 Checking argmax_float_uint32_t_fmax_add_start_0_inc_2 +Checking argminimum_float_uint32_t_fminimum_start_0 +Checking argminimum_float_uint32_t_fminimum_start_inf +Checking argminimum_float_uint32_t_fminimum_start_neg_zero +Checking argminimum_float_uint32_t_fminimum_start_pos_zero +Checking argminimum_float_uint32_t_fminimum_start_0_inc_2 +Checking argminimum_float_uint32_t_fminimum_start_3 +Checking argmaximum_float_uint32_t_fmaximum_start_0 +Checking argmaximum_float_uint32_t_fmaximum_start_neg_inf +Checking argmaximum_float_uint32_t_fmaximum_start_neg_zero +Checking argmaximum_float_uint32_t_fmaximum_start_pos_zero +Checking argmaximum_float_uint32_t_fmaximum_start_0_inc_2 +Checking argmaximum_float_uint32_t_fmaximum_start_3 +Checking argminimumnum_float_uint32_t_fminimumnum_start_0 +Checking argminimumnum_float_uint32_t_fminimumnum_start_inf +Checking argminimumnum_float_uint32_t_fminimumnum_start_nan +Checking argminimumnum_float_uint32_t_fminimumnum_start_neg_zero +Checking argminimumnum_float_uint32_t_fminimumnum_start_pos_zero +Checking argminimumnum_float_uint32_t_fminimumnum_start_0_inc_2 +Checking argminimumnum_float_uint32_t_fminimumnum_start_3 +Checking argmaximumnum_float_uint32_t_fmaximumnum_start_0 +Checking argmaximumnum_float_uint32_t_fmaximumnum_start_neg_inf +Checking argmaximumnum_float_uint32_t_fmaximumnum_start_nan +Checking argmaximumnum_float_uint32_t_fmaximumnum_start_neg_zero +Checking argmaximumnum_float_uint32_t_fmaximumnum_start_pos_zero +Checking argmaximumnum_float_uint32_t_fmaximumnum_start_0_inc_2 +Checking argmaximumnum_float_uint32_t_fmaximumnum_start_3 Checking argmin_float_int32_t_start_0 Checking argmin_float_int32_t_start_0_inc_2 Checking argmin_float_int32_t_start_2 @@ -64,6 +90,32 @@ Checking argmax_float_int32_t_fmax_start_3 Checking argmax_float_int32_t_fmax_add_start_0 Checking argmax_float_int32_t_fmax_add_start_0_inc_2 +Checking argminimum_float_int32_t_fminimum_start_0 +Checking argminimum_float_int32_t_fminimum_start_inf +Checking argminimum_float_int32_t_fminimum_start_neg_zero +Checking argminimum_float_int32_t_fminimum_start_pos_zero +Checking argminimum_float_int32_t_fminimum_start_0_inc_2 +Checking argminimum_float_int32_t_fminimum_start_3 +Checking argmaximum_float_int32_t_fmaximum_start_0 +Checking argmaximum_float_int32_t_fmaximum_start_neg_inf +Checking argmaximum_float_int32_t_fmaximum_start_neg_zero +Checking argmaximum_float_int32_t_fmaximum_start_pos_zero +Checking argmaximum_float_int32_t_fmaximum_start_0_inc_2 +Checking argmaximum_float_int32_t_fmaximum_start_3 +Checking argminimumnum_float_int32_t_fminimumnum_start_0 +Checking argminimumnum_float_int32_t_fminimumnum_start_inf +Checking argminimumnum_float_int32_t_fminimumnum_start_nan +Checking argminimumnum_float_int32_t_fminimumnum_start_neg_zero +Checking argminimumnum_float_int32_t_fminimumnum_start_pos_zero +Checking argminimumnum_float_int32_t_fminimumnum_start_0_inc_2 +Checking argminimumnum_float_int32_t_fminimumnum_start_3 +Checking argmaximumnum_float_int32_t_fmaximumnum_start_0 +Checking argmaximumnum_float_int32_t_fmaximumnum_start_neg_inf +Checking argmaximumnum_float_int32_t_fmaximumnum_start_nan +Checking argmaximumnum_float_int32_t_fmaximumnum_start_neg_zero +Checking argmaximumnum_float_int32_t_fmaximumnum_start_pos_zero +Checking argmaximumnum_float_int32_t_fmaximumnum_start_0_inc_2 +Checking argmaximumnum_float_int32_t_fmaximumnum_start_3 Checking argmin_double_uint64_t_start_0 Checking argmin_double_uint64_t_start_0_inc_2 Checking argmin_double_uint64_t_start_2 @@ -98,6 +150,32 @@ Checking argmax_double_uint64_t_fmax_start_3 Checking argmax_double_uint64_t_fmax_add_start_0 Checking argmax_double_uint64_t_fmax_add_start_0_inc_2 +Checking argminimum_double_uint64_t_fminimum_start_0 +Checking argminimum_double_uint64_t_fminimum_start_inf +Checking argminimum_double_uint64_t_fminimum_start_neg_zero +Checking argminimum_double_uint64_t_fminimum_start_pos_zero +Checking argminimum_double_uint64_t_fminimum_start_0_inc_2 +Checking argminimum_double_uint64_t_fminimum_start_3 +Checking argmaximum_double_uint64_t_fmaximum_start_0 +Checking argmaximum_double_uint64_t_fmaximum_start_neg_inf +Checking argmaximum_double_uint64_t_fmaximum_start_neg_zero +Checking argmaximum_double_uint64_t_fmaximum_start_pos_zero +Checking argmaximum_double_uint64_t_fmaximum_start_0_inc_2 +Checking argmaximum_double_uint64_t_fmaximum_start_3 +Checking argminimumnum_double_uint64_t_fminimumnum_start_0 +Checking argminimumnum_double_uint64_t_fminimumnum_start_inf +Checking argminimumnum_double_uint64_t_fminimumnum_start_nan +Checking argminimumnum_double_uint64_t_fminimumnum_start_neg_zero +Checking argminimumnum_double_uint64_t_fminimumnum_start_pos_zero +Checking argminimumnum_double_uint64_t_fminimumnum_start_0_inc_2 +Checking argminimumnum_double_uint64_t_fminimumnum_start_3 +Checking argmaximumnum_double_uint64_t_fmaximumnum_start_0 +Checking argmaximumnum_double_uint64_t_fmaximumnum_start_neg_inf +Checking argmaximumnum_double_uint64_t_fmaximumnum_start_nan +Checking argmaximumnum_double_uint64_t_fmaximumnum_start_neg_zero +Checking argmaximumnum_double_uint64_t_fmaximumnum_start_pos_zero +Checking argmaximumnum_double_uint64_t_fmaximumnum_start_0_inc_2 +Checking argmaximumnum_double_uint64_t_fmaximumnum_start_3 Checking argmin_double_int64_t_start_0 Checking argmin_double_int64_t_start_0_inc_2 Checking argmin_double_int64_t_start_2 @@ -130,6 +208,32 @@ Checking argmax_double_int64_t_fmax_start_3 Checking argmax_double_int64_t_fmax_add_start_0 Checking argmax_double_int64_t_fmax_add_start_0_inc_2 +Checking argminimum_double_int64_t_fminimum_start_0 +Checking argminimum_double_int64_t_fminimum_start_inf +Checking argminimum_double_int64_t_fminimum_start_neg_zero +Checking argminimum_double_int64_t_fminimum_start_pos_zero +Checking argminimum_double_int64_t_fminimum_start_0_inc_2 +Checking argminimum_double_int64_t_fminimum_start_3 +Checking argmaximum_double_int64_t_fmaximum_start_0 +Checking argmaximum_double_int64_t_fmaximum_start_neg_inf +Checking argmaximum_double_int64_t_fmaximum_start_neg_zero +Checking argmaximum_double_int64_t_fmaximum_start_pos_zero +Checking argmaximum_double_int64_t_fmaximum_start_0_inc_2 +Checking argmaximum_double_int64_t_fmaximum_start_3 +Checking argminimumnum_double_int64_t_fminimumnum_start_0 +Checking argminimumnum_double_int64_t_fminimumnum_start_inf +Checking argminimumnum_double_int64_t_fminimumnum_start_nan +Checking argminimumnum_double_int64_t_fminimumnum_start_neg_zero +Checking argminimumnum_double_int64_t_fminimumnum_start_pos_zero +Checking argminimumnum_double_int64_t_fminimumnum_start_0_inc_2 +Checking argminimumnum_double_int64_t_fminimumnum_start_3 +Checking argmaximumnum_double_int64_t_fmaximumnum_start_0 +Checking argmaximumnum_double_int64_t_fmaximumnum_start_neg_inf +Checking argmaximumnum_double_int64_t_fmaximumnum_start_nan +Checking argmaximumnum_double_int64_t_fmaximumnum_start_neg_zero +Checking argmaximumnum_double_int64_t_fmaximumnum_start_pos_zero +Checking argmaximumnum_double_int64_t_fmaximumnum_start_0_inc_2 +Checking argmaximumnum_double_int64_t_fmaximumnum_start_3 Checking argmin_double_uint32_t_start_0 Checking argmin_double_uint32_t_start_0_inc_2 Checking argmin_double_uint32_t_start_2 @@ -162,6 +266,32 @@ Checking argmax_double_uint32_t_fmax_start_3 Checking argmax_double_uint32_t_fmax_add_start_0 Checking argmax_double_uint32_t_fmax_add_start_0_inc_2 +Checking argminimum_double_uint32_t_fminimum_start_0 +Checking argminimum_double_uint32_t_fminimum_start_inf +Checking argminimum_double_uint32_t_fminimum_start_neg_zero +Checking argminimum_double_uint32_t_fminimum_start_pos_zero +Checking argminimum_double_uint32_t_fminimum_start_0_inc_2 +Checking argminimum_double_uint32_t_fminimum_start_3 +Checking argmaximum_double_uint32_t_fmaximum_start_0 +Checking argmaximum_double_uint32_t_fmaximum_start_neg_inf +Checking argmaximum_double_uint32_t_fmaximum_start_neg_zero +Checking argmaximum_double_uint32_t_fmaximum_start_pos_zero +Checking argmaximum_double_uint32_t_fmaximum_start_0_inc_2 +Checking argmaximum_double_uint32_t_fmaximum_start_3 +Checking argminimumnum_double_uint32_t_fminimumnum_start_0 +Checking argminimumnum_double_uint32_t_fminimumnum_start_inf +Checking argminimumnum_double_uint32_t_fminimumnum_start_nan +Checking argminimumnum_double_uint32_t_fminimumnum_start_neg_zero +Checking argminimumnum_double_uint32_t_fminimumnum_start_pos_zero +Checking argminimumnum_double_uint32_t_fminimumnum_start_0_inc_2 +Checking argminimumnum_double_uint32_t_fminimumnum_start_3 +Checking argmaximumnum_double_uint32_t_fmaximumnum_start_0 +Checking argmaximumnum_double_uint32_t_fmaximumnum_start_neg_inf +Checking argmaximumnum_double_uint32_t_fmaximumnum_start_nan +Checking argmaximumnum_double_uint32_t_fmaximumnum_start_neg_zero +Checking argmaximumnum_double_uint32_t_fmaximumnum_start_pos_zero +Checking argmaximumnum_double_uint32_t_fmaximumnum_start_0_inc_2 +Checking argmaximumnum_double_uint32_t_fmaximumnum_start_3 Checking argmin_double_int32_t_start_0 Checking argmin_double_int32_t_start_0_inc_2 Checking argmin_double_int32_t_start_2 @@ -194,4 +324,30 @@ Checking argmax_double_int32_t_fmax_start_3 Checking argmax_double_int32_t_fmax_add_start_0 Checking argmax_double_int32_t_fmax_add_start_0_inc_2 +Checking argminimum_double_int32_t_fminimum_start_0 +Checking argminimum_double_int32_t_fminimum_start_inf +Checking argminimum_double_int32_t_fminimum_start_neg_zero +Checking argminimum_double_int32_t_fminimum_start_pos_zero +Checking argminimum_double_int32_t_fminimum_start_0_inc_2 +Checking argminimum_double_int32_t_fminimum_start_3 +Checking argmaximum_double_int32_t_fmaximum_start_0 +Checking argmaximum_double_int32_t_fmaximum_start_neg_inf +Checking argmaximum_double_int32_t_fmaximum_start_neg_zero +Checking argmaximum_double_int32_t_fmaximum_start_pos_zero +Checking argmaximum_double_int32_t_fmaximum_start_0_inc_2 +Checking argmaximum_double_int32_t_fmaximum_start_3 +Checking argminimumnum_double_int32_t_fminimumnum_start_0 +Checking argminimumnum_double_int32_t_fminimumnum_start_inf +Checking argminimumnum_double_int32_t_fminimumnum_start_nan +Checking argminimumnum_double_int32_t_fminimumnum_start_neg_zero +Checking argminimumnum_double_int32_t_fminimumnum_start_pos_zero +Checking argminimumnum_double_int32_t_fminimumnum_start_0_inc_2 +Checking argminimumnum_double_int32_t_fminimumnum_start_3 +Checking argmaximumnum_double_int32_t_fmaximumnum_start_0 +Checking argmaximumnum_double_int32_t_fmaximumnum_start_neg_inf +Checking argmaximumnum_double_int32_t_fmaximumnum_start_nan +Checking argmaximumnum_double_int32_t_fmaximumnum_start_neg_zero +Checking argmaximumnum_double_int32_t_fmaximumnum_start_pos_zero +Checking argmaximumnum_double_int32_t_fmaximumnum_start_0_inc_2 +Checking argmaximumnum_double_int32_t_fmaximumnum_start_3 exit 0