Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / libc / test / src / math / differential_testing / CMakeLists.txt
blob72bc2f8fb16aaa0e579b170c5f76e764974d9aa6
1 add_library(
2   libc_diff_test_utils
3   Timer.cpp
4   Timer.h
7 # A convenience target to build all differential tests.
8 add_custom_target(libc-math-differential-tests)
10 function(add_diff_binary target_name)
11   cmake_parse_arguments(
12     "DIFF"
13     "" # No optional arguments
14     "SUITE;CXX_STANDARD" # Single value arguments
15     "SRCS;HDRS;DEPENDS;COMPILE_OPTIONS" # Multi-value arguments
16     ${ARGN}
17   )
18   if(NOT DIFF_SRCS)
19     message(FATAL_ERROR "'add_diff_binary' target requires a SRCS list of .cpp "
20                         "files.")
21   endif()
22   if(NOT DIFF_DEPENDS)
23     message(FATAL_ERROR "'add_diff_binary' target requires a DEPENDS list of "
24                         "'add_entrypoint_object' targets.")
25   endif()
27   get_fq_target_name(${target_name} fq_target_name)
28   get_fq_deps_list(fq_deps_list ${DIFF_DEPENDS})
29   get_object_files_for_test(
30       link_object_files skipped_entrypoints_list ${fq_deps_list})
31   if(skipped_entrypoints_list)
32     if(LIBC_CMAKE_VERBOSE_LOGGING)
33       set(msg "Will not build ${fq_target_name} as it has missing deps: "
34               "${skipped_entrypoints_list}.")
35       message(STATUS ${msg})
36     endif()
37     return()
38   endif()
40   add_executable(
41     ${fq_target_name}
42     EXCLUDE_FROM_ALL
43     ${DIFF_SRCS}
44     ${DIFF_HDRS}
45   )
46   target_include_directories(
47     ${fq_target_name}
48     PRIVATE
49       ${LIBC_SOURCE_DIR}
50   )
51   if(DIFF_COMPILE_OPTIONS)
52     target_compile_options(
53       ${fq_target_name}
54       PRIVATE ${DIFF_COMPILE_OPTIONS}
55     )
56   endif()
58   target_link_libraries(
59       ${fq_target_name}
60       PRIVATE ${link_object_files} libc_diff_test_utils)
62   set_target_properties(${fq_target_name}
63     PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
64   
65   if(DIFF_CXX_STANDARD)
66     set_target_properties(
67       ${fq_target_name}
68       PROPERTIES
69         CXX_STANDARD ${DIFF_CXX_STANDARD}
70     )
71   endif()
73   add_dependencies(
74     ${fq_target_name}
75     libc.src.__support.FPUtil.fp_bits
76     ${fq_deps_list}
77   )
78   add_dependencies(libc-math-differential-tests ${fq_target_name})
79 endfunction()
81 add_header_library(
82   single_input_single_output_diff
83   HDRS
84     SingleInputSingleOutputDiff.h
87 add_header_library(
88   binary_op_single_output_diff
89   HDRS
90     BinaryOpSingleOutputDiff.h
93 add_diff_binary(
94   sinf_diff
95   SRCS
96     sinf_diff.cpp
97   DEPENDS
98     .single_input_single_output_diff
99     libc.src.math.sinf
102 add_diff_binary(
103   sinf_perf
104   SRCS
105     sinf_perf.cpp
106   DEPENDS
107     .single_input_single_output_diff
108     libc.src.math.sinf
109   COMPILE_OPTIONS
110     -fno-builtin
113 add_diff_binary(
114   cosf_diff
115   SRCS
116     cosf_diff.cpp
117   DEPENDS
118     .single_input_single_output_diff
119     libc.src.math.cosf
122 add_diff_binary(
123   cosf_perf
124   SRCS
125     cosf_perf.cpp
126   DEPENDS
127     .single_input_single_output_diff
128     libc.src.math.cosf
129   COMPILE_OPTIONS
130     -fno-builtin
133 add_diff_binary(
134   expm1f_diff
135   SRCS
136     expm1f_diff.cpp
137   DEPENDS
138     .single_input_single_output_diff
139     libc.src.math.expm1f
142 add_diff_binary(
143   expm1f_perf
144   SRCS
145     expm1f_perf.cpp
146   DEPENDS
147     .single_input_single_output_diff
148     libc.src.math.expm1f
149   COMPILE_OPTIONS
150     -fno-builtin
153 add_diff_binary(
154   ceilf_diff
155   SRCS
156     ceilf_diff.cpp
157   DEPENDS
158     .single_input_single_output_diff
159     libc.src.math.ceilf
162 add_diff_binary(
163   ceilf_perf
164   SRCS
165     ceilf_perf.cpp
166   DEPENDS
167     .single_input_single_output_diff
168     libc.src.math.ceilf
169   COMPILE_OPTIONS
170     -fno-builtin
173 add_diff_binary(
174   exp2f_diff
175   SRCS
176     exp2f_diff.cpp
177   DEPENDS
178     .single_input_single_output_diff
179     libc.src.math.exp2f
182 add_diff_binary(
183   exp2f_perf
184   SRCS
185     exp2f_perf.cpp
186   DEPENDS
187     .single_input_single_output_diff
188     libc.src.math.exp2f
189   COMPILE_OPTIONS
190     -fno-builtin
193 add_diff_binary(
194   expf_diff
195   SRCS
196     expf_diff.cpp
197   DEPENDS
198     .single_input_single_output_diff
199     libc.src.math.expf
202 add_diff_binary(
203   expf_perf
204   SRCS
205     expf_perf.cpp
206   DEPENDS
207     .single_input_single_output_diff
208     libc.src.math.expf
209   COMPILE_OPTIONS
210     -fno-builtin
213 add_diff_binary(
214   fabsf_diff
215   SRCS
216     fabsf_diff.cpp
217   DEPENDS
218     .single_input_single_output_diff
219     libc.src.math.fabsf
222 add_diff_binary(
223   fabsf_perf
224   SRCS
225     fabsf_perf.cpp
226   DEPENDS
227     .single_input_single_output_diff
228     libc.src.math.fabsf
229   COMPILE_OPTIONS
230     -fno-builtin
233 add_diff_binary(
234   floorf_diff
235   SRCS
236     floorf_diff.cpp
237   DEPENDS
238     .single_input_single_output_diff
239     libc.src.math.floorf
242 add_diff_binary(
243   floorf_perf
244   SRCS
245     floorf_perf.cpp
246   DEPENDS
247     .single_input_single_output_diff
248     libc.src.math.floorf
249   COMPILE_OPTIONS
250     -fno-builtin
253 add_diff_binary(
254   log10f_perf
255   SRCS
256     log10f_perf.cpp
257   DEPENDS
258     .single_input_single_output_diff
259     libc.src.math.log10f
260   COMPILE_OPTIONS
261     -fno-builtin
264 add_diff_binary(
265   log1pf_perf
266   SRCS
267     log1pf_perf.cpp
268   DEPENDS
269     .single_input_single_output_diff
270     libc.src.math.log1pf
271   COMPILE_OPTIONS
272     -fno-builtin
275 add_diff_binary(
276   log2f_diff
277   SRCS
278     log2f_diff.cpp
279   DEPENDS
280     .single_input_single_output_diff
281     libc.src.math.log2f
282   COMPILE_OPTIONS
283     -fno-builtin
286 add_diff_binary(
287   log2f_perf
288   SRCS
289     log2f_perf.cpp
290   DEPENDS
291     .single_input_single_output_diff
292     libc.src.math.log2f
293   COMPILE_OPTIONS
294     -fno-builtin
297 add_diff_binary(
298   logf_diff
299   SRCS
300     logf_diff.cpp
301   DEPENDS
302     .single_input_single_output_diff
303     libc.src.math.logf
304   COMPILE_OPTIONS
305     -fno-builtin
308 add_diff_binary(
309   logf_perf
310   SRCS
311     logf_perf.cpp
312   DEPENDS
313     .single_input_single_output_diff
314     libc.src.math.logf
315   COMPILE_OPTIONS
316     -fno-builtin
319 add_diff_binary(
320   logbf_diff
321   SRCS
322     logbf_diff.cpp
323   DEPENDS
324     .single_input_single_output_diff
325     libc.src.math.logbf
328 add_diff_binary(
329   logbf_perf
330   SRCS
331     logbf_perf.cpp
332   DEPENDS
333     .single_input_single_output_diff
334     libc.src.math.logbf
335   COMPILE_OPTIONS
336     -fno-builtin
339 add_diff_binary(
340   nearbyintf_diff
341   SRCS
342     nearbyintf_diff.cpp
343   DEPENDS
344     .single_input_single_output_diff
345     libc.src.math.nearbyintf
348 add_diff_binary(
349   nearbyintf_perf
350   SRCS
351     nearbyintf_perf.cpp
352   DEPENDS
353     .single_input_single_output_diff
354     libc.src.math.nearbyintf
355   COMPILE_OPTIONS
356     -fno-builtin
359 add_diff_binary(
360   rintf_diff
361   SRCS
362     rintf_diff.cpp
363   DEPENDS
364     .single_input_single_output_diff
365     libc.src.math.rintf
368 add_diff_binary(
369   rintf_perf
370   SRCS
371     rintf_perf.cpp
372   DEPENDS
373     .single_input_single_output_diff
374     libc.src.math.rintf
375   COMPILE_OPTIONS
376     -fno-builtin
379 add_diff_binary(
380   roundf_diff
381   SRCS
382     roundf_diff.cpp
383   DEPENDS
384     .single_input_single_output_diff
385     libc.src.math.roundf
388 add_diff_binary(
389   roundf_perf
390   SRCS
391     roundf_perf.cpp
392   DEPENDS
393     .single_input_single_output_diff
394     libc.src.math.roundf
395   COMPILE_OPTIONS
396     -fno-builtin
399 add_diff_binary(
400   sqrtf_diff
401   SRCS
402     sqrtf_diff.cpp
403   DEPENDS
404     .single_input_single_output_diff
405     libc.src.math.sqrtf
408 add_diff_binary(
409   sqrtf_perf
410   SRCS
411     sqrtf_perf.cpp
412   DEPENDS
413     .single_input_single_output_diff
414     libc.src.math.sqrtf
415   COMPILE_OPTIONS
416     -fno-builtin
419 add_diff_binary(
420   truncf_diff
421   SRCS
422     truncf_diff.cpp
423   DEPENDS
424     .single_input_single_output_diff
425     libc.src.math.truncf
428 add_diff_binary(
429   truncf_perf
430   SRCS
431     truncf_perf.cpp
432   DEPENDS
433     .single_input_single_output_diff
434     libc.src.math.truncf
435   COMPILE_OPTIONS
436     -fno-builtin
439 add_diff_binary(
440   hypotf_diff
441   SRCS
442     hypotf_diff.cpp
443   DEPENDS
444     .binary_op_single_output_diff
445     libc.src.math.hypotf
446   COMPILE_OPTIONS
447     -fno-builtin
450 add_diff_binary(
451   hypotf_perf
452   SRCS
453     hypotf_perf.cpp
454   DEPENDS
455     .binary_op_single_output_diff
456     libc.src.math.hypotf
457   COMPILE_OPTIONS
458     -fno-builtin
461 add_diff_binary(
462   hypot_diff
463   SRCS
464     hypot_diff.cpp
465   DEPENDS
466     .binary_op_single_output_diff
467     libc.src.math.hypot
468   COMPILE_OPTIONS
469     -fno-builtin
472 add_diff_binary(
473   hypot_perf
474   SRCS
475     hypot_perf.cpp
476   DEPENDS
477     .binary_op_single_output_diff
478     libc.src.math.hypot
479   COMPILE_OPTIONS
480     -fno-builtin
483 add_diff_binary(
484   fmodf_diff
485   SRCS
486     fmodf_diff.cpp
487   DEPENDS
488     .single_input_single_output_diff
489     libc.src.math.fmodf
492 add_diff_binary(
493   fmodf_perf
494   SRCS
495     fmodf_perf.cpp
496   DEPENDS
497     .single_input_single_output_diff
498     libc.src.math.fmodf
499   COMPILE_OPTIONS
500     -fno-builtin
503 add_diff_binary(
504   fmod_diff
505   SRCS
506     fmod_diff.cpp
507   DEPENDS
508     .single_input_single_output_diff
509     libc.src.math.fmod
512 add_diff_binary(
513   fmod_perf
514   SRCS
515     fmod_perf.cpp
516   DEPENDS
517     .single_input_single_output_diff
518     libc.src.math.fmod
519   COMPILE_OPTIONS
520     -fno-builtin