diff --git a/libc/src/string/CMakeLists.txt b/libc/src/string/CMakeLists.txt --- a/libc/src/string/CMakeLists.txt +++ b/libc/src/string/CMakeLists.txt @@ -251,14 +251,23 @@ "ADD_IMPL" "" # Optional arguments "" # Single value arguments - "REQUIRE;SRCS;HDRS;DEPENDS;COMPILE_OPTIONS" # Multi value arguments + "REQUIRE;SRCS;HDRS;DEPENDS;COMPILE_OPTIONS;MLLVM_COMPILE_OPTIONS" # Multi value arguments ${ARGN}) + + if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") + list(APPEND ADD_IMPL_MLLVM_COMPILE_OPTIONS "-combiner-global-alias-analysis") + # Note that '-mllvm' needs to be prefixed with 'SHELL:' to prevent CMake flag deduplication. + foreach(opt IN LISTS ADD_IMPL_MLLVM_COMPILE_OPTIONS) + list(APPEND ADD_IMPL_COMPILE_OPTIONS "SHELL:-mllvm ${opt}") + endforeach() + endif() + add_entrypoint_object(${impl_name} NAME ${name} SRCS ${ADD_IMPL_SRCS} HDRS ${ADD_IMPL_HDRS} DEPENDS ${ADD_IMPL_DEPENDS} - COMPILE_OPTIONS ${ADD_IMPL_COMPILE_OPTIONS} "SHELL:-mllvm -combiner-global-alias-analysis" + COMPILE_OPTIONS ${ADD_IMPL_COMPILE_OPTIONS} ) get_fq_target_name(${impl_name} fq_target_name) set_target_properties(${fq_target_name} PROPERTIES REQUIRE_CPU_FEATURES "${ADD_IMPL_REQUIRE}") @@ -382,10 +391,9 @@ add_memcpy(memcpy) elseif(${LIBC_TARGET_ARCHITECTURE_IS_AARCH64}) # Disable tail merging as it leads to lower performance. - # Note that '-mllvm' needs to be prefixed with 'SHELL:' to prevent CMake flag deduplication. add_memcpy(memcpy_opt_host COMPILE_OPTIONS ${LIBC_COMPILE_OPTIONS_NATIVE} - COMPILE_OPTIONS "SHELL:-mllvm --tail-merge-threshold=0") - add_memcpy(memcpy COMPILE_OPTIONS "SHELL:-mllvm --tail-merge-threshold=0") + MLLVM_COMPILE_OPTIONS "-tail-merge-threshold=0") + add_memcpy(memcpy MLLVM_COMPILE_OPTIONS "-tail-merge-threshold=0") else() add_memcpy(memcpy_opt_host COMPILE_OPTIONS ${LIBC_COMPILE_OPTIONS_NATIVE}) add_memcpy(memcpy) @@ -418,10 +426,9 @@ add_memmove(memmove) elseif(${LIBC_TARGET_ARCHITECTURE_IS_AARCH64}) # Disable tail merging as it leads to lower performance. - # Note that '-mllvm' needs to be prefixed with 'SHELL:' to prevent CMake flag deduplication. add_memmove(memmove_opt_host COMPILE_OPTIONS ${LIBC_COMPILE_OPTIONS_NATIVE} - COMPILE_OPTIONS "SHELL:-mllvm --tail-merge-threshold=0") - add_memmove(memmove COMPILE_OPTIONS "SHELL:-mllvm --tail-merge-threshold=0") + MLLVM_COMPILE_OPTIONS "-tail-merge-threshold=0") + add_memmove(memmove MLLVM_COMPILE_OPTIONS "-tail-merge-threshold=0") else() add_memmove(memmove_opt_host COMPILE_OPTIONS ${LIBC_COMPILE_OPTIONS_NATIVE}) add_memmove(memmove) @@ -452,9 +459,10 @@ add_memset(memset_opt_host COMPILE_OPTIONS ${LIBC_COMPILE_OPTIONS_NATIVE}) add_memset(memset) elseif(${LIBC_TARGET_ARCHITECTURE_IS_AARCH64}) + # Disable tail merging as it leads to lower performance. add_memset(memset_opt_host COMPILE_OPTIONS ${LIBC_COMPILE_OPTIONS_NATIVE} - COMPILE_OPTIONS "SHELL:-mllvm --tail-merge-threshold=0") - add_memset(memset COMPILE_OPTIONS "SHELL:-mllvm --tail-merge-threshold=0") + MLLVM_COMPILE_OPTIONS "-tail-merge-threshold=0") + add_memset(memset MLLVM_COMPILE_OPTIONS "-tail-merge-threshold=0") else() add_memset(memset_opt_host COMPILE_OPTIONS ${LIBC_COMPILE_OPTIONS_NATIVE}) add_memset(memset)