blob: 0d63a82b97a06090085764e806670ac207eac476 [file] [log] [blame]
Xerxes Ranby6215c622009-07-17 19:22:41 +00001# atomic builtins are required for threading support.
2
3INCLUDE(CheckCXXSourceCompiles)
Oscar Fuentes87e98072009-12-05 23:19:33 +00004
Oscar Fuentesc595e6c2009-12-06 00:06:33 +00005CHECK_CXX_SOURCE_COMPILES("
Oscar Fuentes87e98072009-12-05 23:19:33 +00006#ifdef _MSC_VER
7#include <windows.h>
8#endif
Xerxes Ranby6215c622009-07-17 19:22:41 +00009int main() {
Oscar Fuentes87e98072009-12-05 23:19:33 +000010#ifdef _MSC_VER
11 volatile LONG val = 1;
12 MemoryBarrier();
13 InterlockedCompareExchange(&val, 0, 1);
14 InterlockedIncrement(&val);
15 InterlockedDecrement(&val);
16#else
Xerxes Ranby6215c622009-07-17 19:22:41 +000017 volatile unsigned long val = 1;
18 __sync_synchronize();
19 __sync_val_compare_and_swap(&val, 1, 0);
20 __sync_add_and_fetch(&val, 1);
21 __sync_sub_and_fetch(&val, 1);
Oscar Fuentes87e98072009-12-05 23:19:33 +000022#endif
Xerxes Ranby6215c622009-07-17 19:22:41 +000023 return 0;
24 }
Eric Christopher627445f2011-09-19 20:43:23 +000025" LLVM_HAS_ATOMICS)
Xerxes Ranby6215c622009-07-17 19:22:41 +000026
Eric Christopher627445f2011-09-19 20:43:23 +000027if( NOT LLVM_HAS_ATOMICS )
Xerxes Ranby6215c622009-07-17 19:22:41 +000028 message(STATUS "Warning: LLVM will be built thread-unsafe because atomic builtins are missing")
29endif()