@@ -251,14 +251,23 @@ function(add_implementation name impl_name)
251
251
"ADD_IMPL"
252
252
"" # Optional arguments
253
253
"" # Single value arguments
254
- "REQUIRE;SRCS;HDRS;DEPENDS;COMPILE_OPTIONS" # Multi value arguments
254
+ "REQUIRE;SRCS;HDRS;DEPENDS;COMPILE_OPTIONS;MLLVM_COMPILE_OPTIONS " # Multi value arguments
255
255
${ARGN} )
256
+
257
+ if ("${CMAKE_CXX_COMPILER_ID} " MATCHES "Clang" )
258
+ list (APPEND ADD_IMPL_MLLVM_COMPILE_OPTIONS "-combiner-global-alias-analysis" )
259
+ # Note that '-mllvm' needs to be prefixed with 'SHELL:' to prevent CMake flag deduplication.
260
+ foreach (opt IN LISTS ADD_IMPL_MLLVM_COMPILE_OPTIONS )
261
+ list (APPEND ADD_IMPL_COMPILE_OPTIONS "SHELL:-mllvm ${opt} " )
262
+ endforeach ()
263
+ endif ()
264
+
256
265
add_entrypoint_object (${impl_name}
257
266
NAME ${name}
258
267
SRCS ${ADD_IMPL_SRCS}
259
268
HDRS ${ADD_IMPL_HDRS}
260
269
DEPENDS ${ADD_IMPL_DEPENDS}
261
- COMPILE_OPTIONS ${ADD_IMPL_COMPILE_OPTIONS} "SHELL:-mllvm -combiner-global-alias-analysis"
270
+ COMPILE_OPTIONS ${ADD_IMPL_COMPILE_OPTIONS}
262
271
)
263
272
get_fq_target_name (${impl_name} fq_target_name )
264
273
set_target_properties (${fq_target_name} PROPERTIES REQUIRE_CPU_FEATURES "${ADD_IMPL_REQUIRE} " )
@@ -382,10 +391,9 @@ if(${LIBC_TARGET_ARCHITECTURE_IS_X86})
382
391
add_memcpy (memcpy )
383
392
elseif (${LIBC_TARGET_ARCHITECTURE_IS_AARCH64} )
384
393
# Disable tail merging as it leads to lower performance.
385
- # Note that '-mllvm' needs to be prefixed with 'SHELL:' to prevent CMake flag deduplication.
386
394
add_memcpy (memcpy_opt_host COMPILE_OPTIONS ${LIBC_COMPILE_OPTIONS_NATIVE}
387
- COMPILE_OPTIONS "SHELL:-mllvm - -tail-merge-threshold=0" )
388
- add_memcpy (memcpy COMPILE_OPTIONS "SHELL:-mllvm - -tail-merge-threshold=0" )
395
+ MLLVM_COMPILE_OPTIONS " -tail-merge-threshold=0" )
396
+ add_memcpy (memcpy MLLVM_COMPILE_OPTIONS " -tail-merge-threshold=0" )
389
397
else ()
390
398
add_memcpy (memcpy_opt_host COMPILE_OPTIONS ${LIBC_COMPILE_OPTIONS_NATIVE} )
391
399
add_memcpy (memcpy )
@@ -418,10 +426,9 @@ if(${LIBC_TARGET_ARCHITECTURE_IS_X86})
418
426
add_memmove (memmove )
419
427
elseif (${LIBC_TARGET_ARCHITECTURE_IS_AARCH64} )
420
428
# Disable tail merging as it leads to lower performance.
421
- # Note that '-mllvm' needs to be prefixed with 'SHELL:' to prevent CMake flag deduplication.
422
429
add_memmove (memmove_opt_host COMPILE_OPTIONS ${LIBC_COMPILE_OPTIONS_NATIVE}
423
- COMPILE_OPTIONS "SHELL:-mllvm - -tail-merge-threshold=0" )
424
- add_memmove (memmove COMPILE_OPTIONS "SHELL:-mllvm - -tail-merge-threshold=0" )
430
+ MLLVM_COMPILE_OPTIONS " -tail-merge-threshold=0" )
431
+ add_memmove (memmove MLLVM_COMPILE_OPTIONS " -tail-merge-threshold=0" )
425
432
else ()
426
433
add_memmove (memmove_opt_host COMPILE_OPTIONS ${LIBC_COMPILE_OPTIONS_NATIVE} )
427
434
add_memmove (memmove )
@@ -452,9 +459,10 @@ if(${LIBC_TARGET_ARCHITECTURE_IS_X86})
452
459
add_memset (memset_opt_host COMPILE_OPTIONS ${LIBC_COMPILE_OPTIONS_NATIVE} )
453
460
add_memset (memset )
454
461
elseif (${LIBC_TARGET_ARCHITECTURE_IS_AARCH64} )
462
+ # Disable tail merging as it leads to lower performance.
455
463
add_memset (memset_opt_host COMPILE_OPTIONS ${LIBC_COMPILE_OPTIONS_NATIVE}
456
- COMPILE_OPTIONS "SHELL:-mllvm - -tail-merge-threshold=0" )
457
- add_memset (memset COMPILE_OPTIONS "SHELL:-mllvm - -tail-merge-threshold=0" )
464
+ MLLVM_COMPILE_OPTIONS " -tail-merge-threshold=0" )
465
+ add_memset (memset MLLVM_COMPILE_OPTIONS " -tail-merge-threshold=0" )
458
466
else ()
459
467
add_memset (memset_opt_host COMPILE_OPTIONS ${LIBC_COMPILE_OPTIONS_NATIVE} )
460
468
add_memset (memset )
0 commit comments