OLD | NEW |
1 ; Test that loads/stores don't move across a nacl.atomic.fence.all. | 1 ; Test that loads/stores don't move across a nacl.atomic.fence.all. |
2 ; This should apply to both atomic and non-atomic loads/stores | 2 ; This should apply to both atomic and non-atomic loads/stores |
3 ; (unlike the non-"all" variety of nacl.atomic.fence, which only | 3 ; (unlike the non-"all" variety of nacl.atomic.fence, which only |
4 ; applies to atomic load/stores). | 4 ; applies to atomic load/stores). |
5 ; | 5 ; |
6 ; RUN: %p2i -i %s --args -O2 --verbose none \ | 6 ; RUN: %p2i -i %s --args -O2 --verbose none \ |
7 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \ | 7 ; RUN: | llvm-mc -triple=i686-none-nacl -filetype=obj \ |
8 ; RUN: | llvm-objdump -d -r -symbolize -x86-asm-syntax=intel - | FileCheck %s | 8 ; RUN: | llvm-objdump -d -r -symbolize -x86-asm-syntax=intel - | FileCheck %s |
9 | 9 |
10 ; TODO(jvoung): llvm-objdump doesn't symbolize global symbols well, so we | 10 ; TODO(jvoung): llvm-objdump doesn't symbolize global symbols well, so we |
11 ; have 0 == g32_a, 4 == g32_b, 8 == g32_c, 12 == g32_d | 11 ; have 0 == g32_a, 4 == g32_b, 8 == g32_c, 12 == g32_d |
12 | 12 |
13 declare void @llvm.nacl.atomic.fence.all() | 13 declare void @llvm.nacl.atomic.fence.all() |
14 declare i32 @llvm.nacl.atomic.load.i32(i32*, i32) | 14 declare i32 @llvm.nacl.atomic.load.i32(i32*, i32) |
15 declare void @llvm.nacl.atomic.store.i32(i32, i32*, i32) | 15 declare void @llvm.nacl.atomic.store.i32(i32, i32*, i32) |
16 | 16 |
17 @g32_a = internal global [4 x i8] zeroinitializer, align 4 | 17 @g32_a = internal global [4 x i8] zeroinitializer, align 4 |
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 } | 212 } |
213 ; CHECK-LABEL: could_have_hoisted_loads | 213 ; CHECK-LABEL: could_have_hoisted_loads |
214 ; CHECK: jne {{.*}} | 214 ; CHECK: jne {{.*}} |
215 ; CHECK: mov {{.*}}, dword ptr [12] | 215 ; CHECK: mov {{.*}}, dword ptr [12] |
216 ; CHECK-NEXT: R_386_32 | 216 ; CHECK-NEXT: R_386_32 |
217 ; CHECK: ret | 217 ; CHECK: ret |
218 ; CHECK: mfence | 218 ; CHECK: mfence |
219 ; CHECK: mov {{.*}}, dword ptr [12] | 219 ; CHECK: mov {{.*}}, dword ptr [12] |
220 ; CHECK-NEXT: R_386_32 | 220 ; CHECK-NEXT: R_386_32 |
221 ; CHECK: ret | 221 ; CHECK: ret |
OLD | NEW |