Skip to content

Commit 24fa000

Browse files
committed
Improve AVX detection
Signed-off-by: Yuanyuan Chen <[email protected]>
1 parent eb1ae89 commit 24fa000

File tree

1 file changed

+13
-17
lines changed

1 file changed

+13
-17
lines changed

cmake/modules/FindAVX.cmake

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ SET(AVX2_CODE "
5959

6060
MACRO(CHECK_SSE lang type flags)
6161
SET(__FLAG_I 1)
62+
string(REPLACE " " ";" flags "${flags}")
6263
FOREACH(__FLAG ${flags})
6364
IF(NOT ${lang}_${type}_FOUND)
6465
cmake_push_check_state(RESET)
@@ -70,9 +71,7 @@ MACRO(CHECK_SSE lang type flags)
7071
CONTINUE()
7172
ENDIF()
7273
IF(${CHECK_AVX_COMPILE})
73-
SET(${lang}_${type}_FOUND TRUE CACHE BOOL "${lang} ${type} support")
74-
string(REPLACE " " ";" __FLAG "${__FLAG}")
75-
SET(${lang}_${type}_FLAGS "${__FLAG}" CACHE STRING "${lang} ${type} flags")
74+
SET(${lang}_${type}_FLAGS "${${lang}_${type}_FLAGS} ${__FLAG}")
7675
MATH(EXPR __FLAG_I "${__FLAG_I}+1")
7776
CONTINUE()
7877
ENDIF()
@@ -81,34 +80,31 @@ MACRO(CHECK_SSE lang type flags)
8180
unset(${lang}_HAS_${type}_${__FLAG_I} CACHE)
8281
SET(CMAKE_REQUIRED_FLAGS ${__FLAG})
8382
CHECK_SOURCE_RUNS(${lang} "${${type}_CODE}" ${lang}_HAS_${type}_${__FLAG_I})
83+
cmake_pop_check_state()
8484
IF(${lang}_HAS_${type}_${__FLAG_I})
85-
SET(${lang}_${type}_FOUND TRUE CACHE BOOL "${lang} ${type} support")
86-
string(REPLACE " " ";" __FLAG "${__FLAG}")
87-
SET(${lang}_${type}_FLAGS "${__FLAG}" CACHE STRING "${lang} ${type} flags")
85+
SET(${lang}_${type}_FLAGS "${${lang}_${type}_FLAGS} ${__FLAG}")
8886
ENDIF()
8987
MATH(EXPR __FLAG_I "${__FLAG_I}+1")
90-
cmake_pop_check_state()
9188
ENDIF()
9289
ENDFOREACH()
93-
94-
SET(${lang}_${type}_FOUND "${${lang}_${type}_FOUND}" CACHE BOOL "${lang} ${type} support")
95-
SET(${lang}_${type}_FLAGS "${${lang}_${type}_FLAGS}" CACHE STRING "${lang} ${type} flags")
96-
9790
MARK_AS_ADVANCED(${lang}_${type}_FOUND ${lang}_${type}_FLAGS)
91+
if(${lang}_${type}_FLAGS)
92+
SET(${lang}_${type}_FLAGS "${${lang}_${type}_FLAGS}" CACHE STRING "${lang} ${type} flags")
93+
endif()
9894
ENDMACRO()
9995

10096

10197
get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
10298
foreach(lang C;CXX)
10399
if(lang IN_LIST languages)
104100
if(MSVC)
105-
CHECK_SSE(${lang} "AVX" "/arch:AVX;")
106-
CHECK_SSE(${lang} "AVX2" "/arch:AVX2;")
107-
CHECK_SSE(${lang} "AVX512" "/arch:AVX512;")
101+
CHECK_SSE(${lang} "AVX" "/arch:AVX")
102+
CHECK_SSE(${lang} "AVX2" "/arch:AVX2")
103+
CHECK_SSE(${lang} "AVX512" "/arch:AVX512")
108104
else()
109-
CHECK_SSE(${lang} "AVX" "-mavx;")
110-
CHECK_SSE(${lang} "AVX2" "-mavx2 -mfma -mf16c;")
111-
CHECK_SSE(${lang} "AVX512" "-mavx512f -mavx512dq -mavx512vl -mavx512bw -mfma;")
105+
CHECK_SSE(${lang} "AVX" "-mavx")
106+
CHECK_SSE(${lang} "AVX2" "-mavx2 -mfma -mf16c")
107+
CHECK_SSE(${lang} "AVX512" "-mavx512f -mavx512dq -mavx512vl -mavx512bw -mfma")
112108
endif()
113109
endif()
114110
endforeach()

0 commit comments

Comments
 (0)