150
|
1 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=kaveri -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,CI %s
|
|
2 ; RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX9 %s
|
|
3
|
236
|
4 ; GCN-LABEL: {{^}}atomic_store_monotonic_i8:
|
|
5 ; GCN: s_waitcnt
|
|
6 ; GFX9-NOT: s_mov_b32 m0
|
|
7 ; CI-NEXT: s_mov_b32 m0
|
|
8 ; GCN-NEXT: ds_write_b8 v0, v1{{$}}
|
|
9 ; GCN-NEXT: s_waitcnt lgkmcnt(0)
|
|
10 ; GCN-NEXT: s_setpc_b64
|
|
11 define void @atomic_store_monotonic_i8(i8 addrspace(3)* %ptr, i8 %val) {
|
|
12 store atomic i8 %val, i8 addrspace(3)* %ptr monotonic, align 1
|
|
13 ret void
|
|
14 }
|
|
15
|
|
16 ; GCN-LABEL: {{^}}atomic_store_monotonic_offset_i8:
|
|
17 ; GCN: s_waitcnt
|
|
18 ; GFX9-NOT: s_mov_b32 m0
|
|
19 ; CI-NEXT: s_mov_b32 m0
|
|
20 ; GCN-NEXT: ds_write_b8 v0, v1 offset:16{{$}}
|
|
21 ; GCN-NEXT: s_waitcnt lgkmcnt(0)
|
|
22 ; GCN-NEXT: s_setpc_b64
|
|
23 define void @atomic_store_monotonic_offset_i8(i8 addrspace(3)* %ptr, i8 %val) {
|
|
24 %gep = getelementptr inbounds i8, i8 addrspace(3)* %ptr, i8 16
|
|
25 store atomic i8 %val, i8 addrspace(3)* %gep monotonic, align 1
|
|
26 ret void
|
|
27 }
|
|
28
|
|
29 ; GCN-LABEL: {{^}}atomic_store_monotonic_i16:
|
|
30 ; GCN: s_waitcnt
|
|
31 ; GFX9-NOT: s_mov_b32 m0
|
|
32 ; CI-NEXT: s_mov_b32 m0
|
|
33 ; GCN-NEXT: ds_write_b16 v0, v1{{$}}
|
|
34 ; GCN-NEXT: s_waitcnt lgkmcnt(0)
|
|
35 ; GCN-NEXT: s_setpc_b64
|
|
36 define void @atomic_store_monotonic_i16(i16 addrspace(3)* %ptr, i16 %val) {
|
|
37 store atomic i16 %val, i16 addrspace(3)* %ptr monotonic, align 2
|
|
38 ret void
|
|
39 }
|
|
40
|
|
41 ; GCN-LABEL: {{^}}atomic_store_monotonic_offset_i16:
|
|
42 ; GCN: s_waitcnt
|
|
43 ; GFX9-NOT: s_mov_b32 m0
|
|
44 ; CI-NEXT: s_mov_b32 m0
|
|
45 ; GCN-NEXT: ds_write_b16 v0, v1 offset:32{{$}}
|
|
46 ; GCN-NEXT: s_waitcnt lgkmcnt(0)
|
|
47 ; GCN-NEXT: s_setpc_b64
|
|
48 define void @atomic_store_monotonic_offset_i16(i16 addrspace(3)* %ptr, i16 %val) {
|
|
49 %gep = getelementptr inbounds i16, i16 addrspace(3)* %ptr, i16 16
|
|
50 store atomic i16 %val, i16 addrspace(3)* %gep monotonic, align 2
|
|
51 ret void
|
|
52 }
|
|
53
|
150
|
54 ; GCN-LABEL: {{^}}atomic_store_monotonic_i32:
|
|
55 ; GCN: s_waitcnt
|
|
56 ; GFX9-NOT: s_mov_b32 m0
|
|
57 ; CI-NEXT: s_mov_b32 m0
|
|
58 ; GCN-NEXT: ds_write_b32 v0, v1{{$}}
|
|
59 ; GCN-NEXT: s_waitcnt lgkmcnt(0)
|
|
60 ; GCN-NEXT: s_setpc_b64
|
|
61 define void @atomic_store_monotonic_i32(i32 addrspace(3)* %ptr, i32 %val) {
|
|
62 store atomic i32 %val, i32 addrspace(3)* %ptr monotonic, align 4
|
|
63 ret void
|
|
64 }
|
|
65
|
|
66 ; GCN-LABEL: {{^}}atomic_store_monotonic_offset_i32:
|
|
67 ; GCN: s_waitcnt
|
|
68 ; GFX9-NOT: s_mov_b32 m0
|
|
69 ; CI-NEXT: s_mov_b32 m0
|
|
70 ; GCN-NEXT: ds_write_b32 v0, v1 offset:64{{$}}
|
|
71 ; GCN-NEXT: s_waitcnt lgkmcnt(0)
|
|
72 ; GCN-NEXT: s_setpc_b64
|
|
73 define void @atomic_store_monotonic_offset_i32(i32 addrspace(3)* %ptr, i32 %val) {
|
|
74 %gep = getelementptr inbounds i32, i32 addrspace(3)* %ptr, i32 16
|
|
75 store atomic i32 %val, i32 addrspace(3)* %gep monotonic, align 4
|
|
76 ret void
|
|
77 }
|
|
78
|
|
79 ; GCN-LABEL: {{^}}atomic_store_monotonic_i64:
|
|
80 ; GCN: s_waitcnt
|
|
81 ; GFX9-NOT: s_mov_b32 m0
|
|
82 ; CI-NEXT: s_mov_b32 m0
|
|
83 ; GCN-NEXT: ds_write_b64 v0, v[1:2]{{$}}
|
|
84 ; GCN-NEXT: s_waitcnt lgkmcnt(0)
|
|
85 ; GCN-NEXT: s_setpc_b64
|
|
86 define void @atomic_store_monotonic_i64(i64 addrspace(3)* %ptr, i64 %val) {
|
|
87 store atomic i64 %val, i64 addrspace(3)* %ptr monotonic, align 8
|
|
88 ret void
|
|
89 }
|
|
90
|
|
91 ; GCN-LABEL: {{^}}atomic_store_monotonic_offset_i64:
|
|
92 ; GCN: s_waitcnt
|
|
93 ; GFX9-NOT: s_mov_b32 m0
|
|
94 ; CI-NEXT: s_mov_b32 m0
|
|
95 ; GCN-NEXT: ds_write_b64 v0, v[1:2] offset:128{{$}}
|
|
96 ; GCN-NEXT: s_waitcnt lgkmcnt(0)
|
|
97 ; GCN-NEXT: s_setpc_b64
|
|
98 define void @atomic_store_monotonic_offset_i64(i64 addrspace(3)* %ptr, i64 %val) {
|
|
99 %gep = getelementptr inbounds i64, i64 addrspace(3)* %ptr, i64 16
|
|
100 store atomic i64 %val, i64 addrspace(3)* %gep monotonic, align 8
|
|
101 ret void
|
|
102 }
|
|
103
|