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: %llvm2ice -O2 --verbose none %s \ | 6 ; TODO(kschimpf) Find out why lc2i is needed. |
| 7 ; RUN: %lc2i -i %s --args -O2 --verbose none \ |
7 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \ | 8 ; RUN: | llvm-mc -triple=i686-none-nacl -x86-asm-syntax=intel -filetype=obj \ |
8 ; RUN: | llvm-objdump -d -symbolize -x86-asm-syntax=intel - | FileCheck %s | 9 ; RUN: | llvm-objdump -d -symbolize -x86-asm-syntax=intel - | FileCheck %s |
9 | 10 |
10 ; TODO(jvoung): llvm-objdump doesn't symbolize global symbols well, so we | 11 ; TODO(jvoung): llvm-objdump doesn't symbolize global symbols well, so we |
11 ; have [0] == g32_a, [4] == g32_b, [8] == g32_c. | 12 ; have [0] == g32_a, [4] == g32_b, [8] == g32_c. |
12 ; g32_d is also [0] because it's in the .data section instead of .bss. | 13 ; g32_d is also [0] because it's in the .data section instead of .bss. |
13 | 14 |
14 declare void @llvm.nacl.atomic.fence.all() | 15 declare void @llvm.nacl.atomic.fence.all() |
15 declare i32 @llvm.nacl.atomic.load.i32(i32*, i32) | 16 declare i32 @llvm.nacl.atomic.load.i32(i32*, i32) |
16 declare void @llvm.nacl.atomic.store.i32(i32, i32*, i32) | 17 declare void @llvm.nacl.atomic.store.i32(i32, i32*, i32) |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
212 ret i32 %z | 213 ret i32 %z |
213 } | 214 } |
214 ; CHECK-LABEL: could_have_hoisted_loads | 215 ; CHECK-LABEL: could_have_hoisted_loads |
215 ; CHECK: dword ptr [0] | 216 ; CHECK: dword ptr [0] |
216 ; CHECK: jne {{.*}} | 217 ; CHECK: jne {{.*}} |
217 ; CHECK: mov {{.*}}, dword ptr | 218 ; CHECK: mov {{.*}}, dword ptr |
218 ; CHECK: ret | 219 ; CHECK: ret |
219 ; CHECK: mfence | 220 ; CHECK: mfence |
220 ; CHECK: mov {{.*}}, dword ptr | 221 ; CHECK: mov {{.*}}, dword ptr |
221 ; CHECK: ret | 222 ; CHECK: ret |
OLD | NEW |