OLD | NEW |
---|---|
(Empty) | |
1 // Test frontend handling of synchronization builtins which NaCl handles | |
2 // differently. | |
3 // Modified from test/CodeGen/Atomics.c | |
4 // RUN: %clang_cc1 -triple le32-unknown-nacl -emit-llvm %s -o - | FileCheck %s | |
5 | |
6 // CHECK: define void @test_sync_synchronize() | |
7 // CHECK-NEXT: entry: | |
8 void test_sync_synchronize (void) | |
9 { | |
10 __sync_synchronize (); | |
11 // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() | |
jvoung (off chromium)
2013/08/05 23:17:07
Downstream in opt, does this turn into 3-fences in
JF
2013/08/05 23:18:48
Right now, three fences. When I do the changes to
| |
12 // CHECK-NEXT: fence seq_cst | |
13 // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() | |
14 | |
15 // CHECK-NEXT: ret void | |
16 } | |
17 | |
18 // CHECK: define void @test_asm_memory_1() | |
19 // CHECK-NEXT: entry: | |
20 void test_asm_memory_1 (void) | |
21 { | |
22 asm ("":::"memory"); | |
23 // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() | |
24 // CHECK-NEXT: fence seq_cst | |
25 // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() | |
26 | |
27 // CHECK-NEXT: ret void | |
28 } | |
29 | |
30 // CHECK: define void @test_asm_memory_2() | |
31 // CHECK-NEXT: entry: | |
32 void test_asm_memory_2 (void) | |
33 { | |
34 asm volatile ("":::"memory"); | |
35 // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() | |
36 // CHECK-NEXT: fence seq_cst | |
37 // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() | |
38 | |
39 // CHECK-NEXT: ret void | |
40 } | |
41 | |
42 // CHECK: define void @test_asm_memory_3() | |
43 // CHECK-NEXT: entry: | |
44 void test_asm_memory_3 (void) | |
45 { | |
46 __asm__ ("":::"memory"); | |
47 // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() | |
48 // CHECK-NEXT: fence seq_cst | |
49 // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() | |
50 | |
51 // CHECK-NEXT: ret void | |
52 } | |
53 | |
54 // CHECK: define void @test_asm_memory_4() | |
55 // CHECK-NEXT: entry: | |
56 void test_asm_memory_4 (void) | |
57 { | |
58 __asm__ __volatile__ ("":::"memory"); | |
59 // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() | |
60 // CHECK-NEXT: fence seq_cst | |
61 // CHECK-NEXT: call void asm sideeffect "", "~{memory}"() | |
62 | |
63 // CHECK-NEXT: ret void | |
64 } | |
OLD | NEW |