1 //===-- Performance test for maximum and minimum functions ----------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "BinaryOpSingleOutputPerf.h" 10 #include "src/math/fmaxf.h" 11 #include "src/math/fmaxf16.h" 12 #include "src/math/fmaximum_numf.h" 13 #include "src/math/fmaximum_numf16.h" 14 #include "src/math/fmaximumf.h" 15 #include "src/math/fmaximumf16.h" 16 #include "src/math/fminf.h" 17 #include "src/math/fminf16.h" 18 #include "src/math/fminimum_numf.h" 19 #include "src/math/fminimum_numf16.h" 20 #include "src/math/fminimumf.h" 21 #include "src/math/fminimumf16.h" 22 23 #include <math.h> 24 25 static constexpr size_t FLOAT16_ROUNDS = 20'000; 26 static constexpr size_t FLOAT_ROUNDS = 40; 27 28 // LLVM libc might be the only libc implementation with support for float16 math 29 // functions currently. We can't compare our float16 functions against the 30 // system libc, so we compare them against this placeholder function. 31 float16 placeholder_binaryf16(float16 x, float16 y) { return x; } 32 33 // The system libc might not provide the fmaximum* and fminimum* C23 math 34 // functions either. 35 float placeholder_binaryf(float x, float y) { return x; } 36 37 int main() { 38 BINARY_OP_SINGLE_OUTPUT_PERF_EX(float16, float16, LIBC_NAMESPACE::fmaxf16, 39 placeholder_binaryf16, FLOAT16_ROUNDS, 40 "fmaxf16_perf.log") 41 BINARY_OP_SINGLE_OUTPUT_PERF_EX(float16, float16, LIBC_NAMESPACE::fminf16, 42 placeholder_binaryf16, FLOAT16_ROUNDS, 43 "fminf16_perf.log") 44 BINARY_OP_SINGLE_OUTPUT_PERF_EX(float16, float16, LIBC_NAMESPACE::fmaximumf16, 45 placeholder_binaryf16, FLOAT16_ROUNDS, 46 "fmaximumf16_perf.log") 47 BINARY_OP_SINGLE_OUTPUT_PERF_EX(float16, float16, LIBC_NAMESPACE::fminimumf16, 48 placeholder_binaryf16, FLOAT16_ROUNDS, 49 "fminimumf16_perf.log") 50 BINARY_OP_SINGLE_OUTPUT_PERF_EX( 51 float16, float16, LIBC_NAMESPACE::fmaximum_numf16, placeholder_binaryf16, 52 FLOAT16_ROUNDS, "fmaximum_numf16_perf.log") 53 BINARY_OP_SINGLE_OUTPUT_PERF_EX( 54 float16, float16, LIBC_NAMESPACE::fminimum_numf16, placeholder_binaryf16, 55 FLOAT16_ROUNDS, "fminimum_numf16_perf.log") 56 57 BINARY_OP_SINGLE_OUTPUT_PERF_EX(float, float, LIBC_NAMESPACE::fmaxf, ::fmaxf, 58 FLOAT_ROUNDS, "fmaxf_perf.log") 59 BINARY_OP_SINGLE_OUTPUT_PERF_EX(float, float, LIBC_NAMESPACE::fminf, ::fminf, 60 FLOAT_ROUNDS, "fminf_perf.log") 61 BINARY_OP_SINGLE_OUTPUT_PERF_EX(float, float, LIBC_NAMESPACE::fmaximumf, 62 placeholder_binaryf, FLOAT_ROUNDS, 63 "fmaximumf_perf.log") 64 BINARY_OP_SINGLE_OUTPUT_PERF_EX(float, float, LIBC_NAMESPACE::fminimumf, 65 placeholder_binaryf, FLOAT_ROUNDS, 66 "fminimumf_perf.log") 67 BINARY_OP_SINGLE_OUTPUT_PERF_EX(float, float, LIBC_NAMESPACE::fmaximum_numf, 68 placeholder_binaryf, FLOAT_ROUNDS, 69 "fmaximum_numf_perf.log") 70 BINARY_OP_SINGLE_OUTPUT_PERF_EX(float, float, LIBC_NAMESPACE::fminimum_numf, 71 placeholder_binaryf, FLOAT_ROUNDS, 72 "fminimum_numf_perf.log") 73 74 return 0; 75 } 76