1 // RUN: %clang_cc1 -ffreestanding -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \
2 // RUN:         -triple i686--windows -emit-llvm %s -o - \
3 // RUN:         | FileCheck %s -check-prefix=CHECK -check-prefix=CHECK-I386
4 // RUN: %clang_cc1 -ffreestanding -fms-extensions -fms-compatibility -fms-compatibility-version=17.00 \
5 // RUN:         -triple x86_64--windows -emit-llvm %s -o - \
6 // RUN:         | FileCheck %s --check-prefix=CHECK --check-prefix=CHECK-X64
7 
8 // intrin.h needs size_t, but -ffreestanding prevents us from getting it from
9 // stddef.h.  Work around it with this typedef.
10 typedef __SIZE_TYPE__ size_t;
11 
12 #include <intrin.h>
13 
test_ReadWriteBarrier()14 void test_ReadWriteBarrier() { _ReadWriteBarrier(); }
15 // CHECK-LABEL: define dso_local void @test_ReadWriteBarrier
16 // CHECK:   fence syncscope("singlethread") seq_cst
17 // CHECK:   ret void
18 // CHECK: }
19 
test_ReadBarrier()20 void test_ReadBarrier() { _ReadBarrier(); }
21 // CHECK-LABEL: define dso_local void @test_ReadBarrier
22 // CHECK:   fence syncscope("singlethread") seq_cst
23 // CHECK:   ret void
24 // CHECK: }
25 
test_WriteBarrier()26 void test_WriteBarrier() { _WriteBarrier(); }
27 // CHECK-LABEL: define dso_local void @test_WriteBarrier
28 // CHECK:   fence syncscope("singlethread") seq_cst
29 // CHECK:   ret void
30 // CHECK: }
31 
32 #if defined(__x86_64__)
test__faststorefence()33 void test__faststorefence() { __faststorefence(); }
34 // CHECK-X64-LABEL: define dso_local void @test__faststorefence
35 // CHECK-X64:   fence seq_cst
36 // CHECK-X64:   ret void
37 // CHECK-X64: }
38 #endif
39 
40