diff --git a/libc/cmake/modules/LLVMLibCFlagRules.cmake b/libc/cmake/modules/LLVMLibCFlagRules.cmake index e5b0e249c9067..7d5e73c2f1214 100644 --- a/libc/cmake/modules/LLVMLibCFlagRules.cmake +++ b/libc/cmake/modules/LLVMLibCFlagRules.cmake @@ -268,23 +268,29 @@ set(EXPLICIT_SIMD_OPT_FLAG "EXPLICIT_SIMD_OPT") set(MISC_MATH_BASIC_OPS_OPT_FLAG "MISC_MATH_BASIC_OPS_OPT") # Skip FMA_OPT flag for targets that don't support fma. -if(NOT((LIBC_TARGET_ARCHITECTURE_IS_X86_64 AND (LIBC_CPU_FEATURES MATCHES "FMA")) OR - LIBC_TARGET_ARCHITECTURE_IS_RISCV64)) - set(SKIP_FLAG_EXPANSION_FMA_OPT TRUE) +if(NOT DEFINED SKIP_FLAG_EXPANSION_FMA_OPT) + if(NOT((LIBC_TARGET_ARCHITECTURE_IS_X86_64 AND (LIBC_CPU_FEATURES MATCHES "FMA")) OR + LIBC_TARGET_ARCHITECTURE_IS_RISCV64)) + set(SKIP_FLAG_EXPANSION_FMA_OPT TRUE) + endif() endif() # Skip EXPLICIT_SIMD_OPT flag for targets that don't support SSE2. # Note: one may want to revisit it if they want to control other explicit SIMD -if(NOT(LIBC_TARGET_ARCHITECTURE_IS_X86_64 AND (LIBC_CPU_FEATURES MATCHES "SSE2"))) - set(SKIP_FLAG_EXPANSION_EXPLICIT_SIMD_OPT TRUE) +if(NOT DEFINED SKIP_FLAG_EXPANSION_EXPLICIT_SIMD_OPT) + if(NOT(LIBC_TARGET_ARCHITECTURE_IS_X86_64 AND (LIBC_CPU_FEATURES MATCHES "SSE2"))) + set(SKIP_FLAG_EXPANSION_EXPLICIT_SIMD_OPT TRUE) + endif() endif() # Skip ROUND_OPT flag for targets that don't support rounding instructions. On # x86, these are SSE4.1 instructions, but we already had code to check for # SSE4.2 support. -if(NOT((LIBC_TARGET_ARCHITECTURE_IS_X86_64 AND (LIBC_CPU_FEATURES MATCHES "SSE4_2")) OR - LIBC_TARGET_ARCHITECTURE_IS_AARCH64 OR LIBC_TARGET_OS_IS_GPU)) - set(SKIP_FLAG_EXPANSION_ROUND_OPT TRUE) +if(NOT DEFINED SKIP_FLAG_EXPANSION_ROUND_OPT) + if(NOT((LIBC_TARGET_ARCHITECTURE_IS_X86_64 AND (LIBC_CPU_FEATURES MATCHES "SSE4_2")) OR + LIBC_TARGET_ARCHITECTURE_IS_AARCH64 OR LIBC_TARGET_OS_IS_GPU)) + set(SKIP_FLAG_EXPANSION_ROUND_OPT TRUE) + endif() endif() # Choose whether time_t is 32- or 64-bit, based on target architecture