Index: test/CodeGen/NaCl/atomics.c |
diff --git a/test/CodeGen/NaCl/atomics.c b/test/CodeGen/NaCl/atomics.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..9922e9363038c65903804dd383f128fda801329e |
--- /dev/null |
+++ b/test/CodeGen/NaCl/atomics.c |
@@ -0,0 +1,64 @@ |
+// Test frontend handling of synchronization builtins which NaCl handles |
+// differently. |
+// Modified from test/CodeGen/Atomics.c |
+// RUN: %clang_cc1 -triple le32-unknown-nacl -emit-llvm %s -o - | FileCheck %s |
+ |
+// CHECK: define void @test_sync_synchronize() |
+// CHECK-NEXT: entry: |
+void test_sync_synchronize (void) |
+{ |
+ __sync_synchronize (); |
+ // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() |
+ // CHECK-NEXT: fence seq_cst |
+ // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() |
+ |
+ // CHECK-NEXT: ret void |
+} |
+ |
+// CHECK: define void @test_asm_memory_1() |
+// CHECK-NEXT: entry: |
+void test_asm_memory_1 (void) |
+{ |
+ asm ("":::"memory"); |
+ // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() |
+ // CHECK-NEXT: fence seq_cst |
+ // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() |
+ |
+ // CHECK-NEXT: ret void |
+} |
+ |
+// CHECK: define void @test_asm_memory_2() |
+// CHECK-NEXT: entry: |
+void test_asm_memory_2 (void) |
+{ |
+ asm volatile ("":::"memory"); |
+ // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() |
+ // CHECK-NEXT: fence seq_cst |
+ // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() |
+ |
+ // CHECK-NEXT: ret void |
+} |
+ |
+// CHECK: define void @test_asm_memory_3() |
+// CHECK-NEXT: entry: |
+void test_asm_memory_3 (void) |
+{ |
+ __asm__ ("":::"memory"); |
+ // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() |
+ // CHECK-NEXT: fence seq_cst |
+ // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() |
+ |
+ // CHECK-NEXT: ret void |
+} |
+ |
+// CHECK: define void @test_asm_memory_4() |
+// CHECK-NEXT: entry: |
+void test_asm_memory_4 (void) |
+{ |
+ __asm__ __volatile__ ("":::"memory"); |
+ // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() |
+ // CHECK-NEXT: fence seq_cst |
+ // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() |
+ |
+ // CHECK-NEXT: ret void |
+} |