xref: /llvm-project/llvm/test/CodeGen/AMDGPU/GlobalISel/atomic_load_local.ll (revision 8e0fadda104df62d3b2206a0530f4ac9c0796f12)
1d8699210SPiotr Sobczak; RUN: llc -global-isel -global-isel-abort=0 -mtriple=amdgcn-amd-amdhsa -mcpu=kaveri -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,CI %s
2d8699210SPiotr Sobczak; RUN: llc -global-isel -global-isel-abort=0 -mtriple=amdgcn-amd-amdhsa -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX9 %s
3d8699210SPiotr Sobczak
4d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_i8:
5d8699210SPiotr Sobczak; GCN: s_waitcnt
6d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0
7d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0
8d8699210SPiotr Sobczak; GCN-NEXT: ds_read_u8 v0, v0{{$}}
9d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0)
10d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64
11*8e0faddaSMatt Arsenaultdefine i8 @atomic_load_monotonic_i8(ptr addrspace(3) %ptr) {
12*8e0faddaSMatt Arsenault  %load = load atomic i8, ptr addrspace(3) %ptr monotonic, align 1
13d8699210SPiotr Sobczak  ret i8 %load
14d8699210SPiotr Sobczak}
15d8699210SPiotr Sobczak
16d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_i8_offset:
17d8699210SPiotr Sobczak; GCN: s_waitcnt
18d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0
19d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0
20d8699210SPiotr Sobczak; GCN-NEXT: ds_read_u8 v0, v0 offset:16{{$}}
21d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0)
22d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64
23*8e0faddaSMatt Arsenaultdefine i8 @atomic_load_monotonic_i8_offset(ptr addrspace(3) %ptr) {
24*8e0faddaSMatt Arsenault  %gep = getelementptr inbounds i8, ptr addrspace(3) %ptr, i8 16
25*8e0faddaSMatt Arsenault  %load = load atomic i8, ptr addrspace(3) %gep monotonic, align 1
26d8699210SPiotr Sobczak  ret i8 %load
27d8699210SPiotr Sobczak}
28d8699210SPiotr Sobczak
29d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_i16:
30d8699210SPiotr Sobczak; GCN: s_waitcnt
31d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0
32d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0
33d8699210SPiotr Sobczak; GCN-NEXT: ds_read_u16 v0, v0{{$}}
34d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0)
35d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64
36*8e0faddaSMatt Arsenaultdefine i16 @atomic_load_monotonic_i16(ptr addrspace(3) %ptr) {
37*8e0faddaSMatt Arsenault  %load = load atomic i16, ptr addrspace(3) %ptr monotonic, align 2
38d8699210SPiotr Sobczak  ret i16 %load
39d8699210SPiotr Sobczak}
40d8699210SPiotr Sobczak
41d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_i16_offset:
42d8699210SPiotr Sobczak; GCN: s_waitcnt
43d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0
44d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0
45d8699210SPiotr Sobczak; GCN-NEXT: ds_read_u16 v0, v0 offset:32{{$}}
46d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0)
47d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64
48*8e0faddaSMatt Arsenaultdefine i16 @atomic_load_monotonic_i16_offset(ptr addrspace(3) %ptr) {
49*8e0faddaSMatt Arsenault  %gep = getelementptr inbounds i16, ptr addrspace(3) %ptr, i16 16
50*8e0faddaSMatt Arsenault  %load = load atomic i16, ptr addrspace(3) %gep monotonic, align 2
51d8699210SPiotr Sobczak  ret i16 %load
52d8699210SPiotr Sobczak}
53d8699210SPiotr Sobczak
54d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_i32:
55d8699210SPiotr Sobczak; GCN: s_waitcnt
56d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0
57d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0
58d8699210SPiotr Sobczak; GCN-NEXT: ds_read_b32 v0, v0{{$}}
59d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0)
60d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64
61*8e0faddaSMatt Arsenaultdefine i32 @atomic_load_monotonic_i32(ptr addrspace(3) %ptr) {
62*8e0faddaSMatt Arsenault  %load = load atomic i32, ptr addrspace(3) %ptr monotonic, align 4
63d8699210SPiotr Sobczak  ret i32 %load
64d8699210SPiotr Sobczak}
65d8699210SPiotr Sobczak
66d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_i32_offset:
67d8699210SPiotr Sobczak; GCN: s_waitcnt
68d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0
69d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0
70d8699210SPiotr Sobczak; GCN-NEXT: ds_read_b32 v0, v0 offset:64{{$}}
71d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0)
72d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64
73*8e0faddaSMatt Arsenaultdefine i32 @atomic_load_monotonic_i32_offset(ptr addrspace(3) %ptr) {
74*8e0faddaSMatt Arsenault  %gep = getelementptr inbounds i32, ptr addrspace(3) %ptr, i32 16
75*8e0faddaSMatt Arsenault  %load = load atomic i32, ptr addrspace(3) %gep monotonic, align 4
76d8699210SPiotr Sobczak  ret i32 %load
77d8699210SPiotr Sobczak}
78d8699210SPiotr Sobczak
79d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_i64:
80d8699210SPiotr Sobczak; GCN: s_waitcnt
81d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0
82d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0
83d8699210SPiotr Sobczak; GCN-NEXT: ds_read_b64 v[0:1], v0{{$}}
84d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0)
85d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64
86*8e0faddaSMatt Arsenaultdefine i64 @atomic_load_monotonic_i64(ptr addrspace(3) %ptr) {
87*8e0faddaSMatt Arsenault  %load = load atomic i64, ptr addrspace(3) %ptr monotonic, align 8
88d8699210SPiotr Sobczak  ret i64 %load
89d8699210SPiotr Sobczak}
90d8699210SPiotr Sobczak
91d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_i64_offset:
92d8699210SPiotr Sobczak; GCN: s_waitcnt
93d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0
94d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0
95d8699210SPiotr Sobczak; GCN-NEXT: ds_read_b64 v[0:1], v0 offset:128{{$}}
96d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0)
97d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64
98*8e0faddaSMatt Arsenaultdefine i64 @atomic_load_monotonic_i64_offset(ptr addrspace(3) %ptr) {
99*8e0faddaSMatt Arsenault  %gep = getelementptr inbounds i64, ptr addrspace(3) %ptr, i32 16
100*8e0faddaSMatt Arsenault  %load = load atomic i64, ptr addrspace(3) %gep monotonic, align 8
101d8699210SPiotr Sobczak  ret i64 %load
102d8699210SPiotr Sobczak}
103d8699210SPiotr Sobczak
104d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_f32_offset:
105d8699210SPiotr Sobczak; GCN: s_waitcnt
106d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0
107d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0
108d8699210SPiotr Sobczak; GCN-NEXT: ds_read_b32 v0, v0 offset:64{{$}}
109d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0)
110d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64
111*8e0faddaSMatt Arsenaultdefine float @atomic_load_monotonic_f32_offset(ptr addrspace(3) %ptr) {
112*8e0faddaSMatt Arsenault  %gep = getelementptr inbounds float, ptr addrspace(3) %ptr, i32 16
113*8e0faddaSMatt Arsenault  %load = load atomic float, ptr addrspace(3) %gep monotonic, align 4
114d8699210SPiotr Sobczak  ret float %load
115d8699210SPiotr Sobczak}
116d8699210SPiotr Sobczak
117d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_f64_offset:
118d8699210SPiotr Sobczak; GCN: s_waitcnt
119d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0
120d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0
121d8699210SPiotr Sobczak; GCN-NEXT: ds_read_b64 v[0:1], v0 offset:128{{$}}
122d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0)
123d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64
124*8e0faddaSMatt Arsenaultdefine double @atomic_load_monotonic_f64_offset(ptr addrspace(3) %ptr) {
125*8e0faddaSMatt Arsenault  %gep = getelementptr inbounds double, ptr addrspace(3) %ptr, i32 16
126*8e0faddaSMatt Arsenault  %load = load atomic double, ptr addrspace(3) %gep monotonic, align 8
127d8699210SPiotr Sobczak  ret double %load
128d8699210SPiotr Sobczak}
129d8699210SPiotr Sobczak
130d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_p0i8_offset:
131d8699210SPiotr Sobczak; GCN: s_waitcnt
132d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0
133d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0
134d8699210SPiotr Sobczak; GCN-NEXT: ds_read_b64 v[0:1], v0 offset:128{{$}}
135d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0)
136d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64
137*8e0faddaSMatt Arsenaultdefine ptr @atomic_load_monotonic_p0i8_offset(ptr addrspace(3) %ptr) {
138*8e0faddaSMatt Arsenault  %gep = getelementptr inbounds ptr, ptr addrspace(3) %ptr, i32 16
139*8e0faddaSMatt Arsenault  %load = load atomic ptr, ptr addrspace(3) %gep monotonic, align 8
140*8e0faddaSMatt Arsenault  ret ptr %load
141d8699210SPiotr Sobczak}
142d8699210SPiotr Sobczak
143d8699210SPiotr Sobczak; GCN-LABEL: {{^}}atomic_load_monotonic_p3i8_offset:
144d8699210SPiotr Sobczak; GCN: s_waitcnt
145d8699210SPiotr Sobczak; GFX9-NOT: s_mov_b32 m0
146d8699210SPiotr Sobczak; CI-NEXT: s_mov_b32 m0
147d8699210SPiotr Sobczak; GCN-NEXT: ds_read_b32 v0, v0 offset:64{{$}}
148d8699210SPiotr Sobczak; GCN-NEXT: s_waitcnt lgkmcnt(0)
149d8699210SPiotr Sobczak; GCN-NEXT: s_setpc_b64
150*8e0faddaSMatt Arsenaultdefine ptr addrspace(3) @atomic_load_monotonic_p3i8_offset(ptr addrspace(3) %ptr) {
151*8e0faddaSMatt Arsenault  %gep = getelementptr inbounds ptr addrspace(3), ptr addrspace(3) %ptr, i32 16
152*8e0faddaSMatt Arsenault  %load = load atomic ptr addrspace(3), ptr addrspace(3) %gep monotonic, align 4
153*8e0faddaSMatt Arsenault  ret ptr addrspace(3) %load
154d8699210SPiotr Sobczak}
155