Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / store-local.ll
blobf338557d29b1f68341531633e9f99095541f458c
1 ; RUN: llc -mtriple=amdgcn-- -mcpu=verde -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,SICIVI,FUNC %s
2 ; RUN: llc -mtriple=amdgcn-- -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,SICIVI,VI,FUNC %s
3 ; RUN: llc -mtriple=amdgcn-- -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX9,FUNC %s
4 ; RUN: llc -march=r600 -mtriple=r600-- -mcpu=redwood < %s | FileCheck -check-prefixes=EG,FUNC %s
5 ; RUN: llc -march=r600 -mtriple=r600-- -mcpu=cayman < %s | FileCheck -check-prefixes=CM,FUNC %s
7 ; FUNC-LABEL: {{^}}store_local_i1:
8 ; SICIVI: s_mov_b32 m0
9 ; GFX9-NOT: m0
11 ; EG: LDS_BYTE_WRITE
13 ; CM: LDS_BYTE_WRITE
15 ; GCN: ds_write_b8
16 define amdgpu_kernel void @store_local_i1(ptr addrspace(3) %out) {
17 entry:
18   store i1 true, ptr addrspace(3) %out
19   ret void
22 ; FUNC-LABEL: {{^}}store_local_i8:
23 ; SICIVI: s_mov_b32 m0
24 ; GFX9-NOT: m0
26 ; EG: LDS_BYTE_WRITE
28 ; CM: LDS_BYTE_WRITE
30 ; GCN: ds_write_b8
31 define amdgpu_kernel void @store_local_i8(ptr addrspace(3) %out, i8 %in) {
32   store i8 %in, ptr addrspace(3) %out
33   ret void
36 ; FUNC-LABEL: {{^}}store_local_i16:
37 ; SICIVI: s_mov_b32 m0
38 ; GFX9-NOT: m0
40 ; EG: LDS_SHORT_WRITE
42 ; CM: LDS_SHORT_WRITE
44 ; GCN: ds_write_b16
45 define amdgpu_kernel void @store_local_i16(ptr addrspace(3) %out, i16 %in) {
46   store i16 %in, ptr addrspace(3) %out
47   ret void
50 ; FUNC-LABEL: {{^}}store_local_v2i16:
51 ; SICIVI: s_mov_b32 m0
52 ; GFX9-NOT: m0
54 ; EG: LDS_WRITE
56 ; CM: LDS_WRITE
58 ; GCN: ds_write_b32
59 define amdgpu_kernel void @store_local_v2i16(ptr addrspace(3) %out, <2 x i16> %in) {
60 entry:
61   store <2 x i16> %in, ptr addrspace(3) %out
62   ret void
65 ; FUNC-LABEL: {{^}}store_local_v4i8:
66 ; SICIVI: s_mov_b32 m0
67 ; GFX9-NOT: m0
69 ; EG: LDS_WRITE
71 ; CM: LDS_WRITE
73 ; GCN: ds_write_b32
74 define amdgpu_kernel void @store_local_v4i8(ptr addrspace(3) %out, <4 x i8> %in) {
75 entry:
76   store <4 x i8> %in, ptr addrspace(3) %out
77   ret void
80 ; FUNC-LABEL: {{^}}store_local_v4i8_unaligned:
81 ; SICIVI: s_mov_b32 m0
82 ; GFX9-NOT: m0
84 ; EG: LDS_BYTE_WRITE
85 ; EG: LDS_BYTE_WRITE
86 ; EG: LDS_BYTE_WRITE
87 ; EG: LDS_BYTE_WRITE
88 ; EG-NOT: LDS_WRITE
90 ; CM: LDS_BYTE_WRITE
91 ; CM: LDS_BYTE_WRITE
92 ; CM: LDS_BYTE_WRITE
93 ; CM: LDS_BYTE_WRITE
94 ; CM-NOT: LDS_WRITE
96 ; GCN: ds_write_b8
97 ; GCN: ds_write_b8
98 ; GCN: ds_write_b8
99 ; GCN: ds_write_b8
100 define amdgpu_kernel void @store_local_v4i8_unaligned(ptr addrspace(3) %out, <4 x i8> %in) {
101 entry:
102   store <4 x i8> %in, ptr addrspace(3) %out, align 1
103   ret void
106 ; FUNC-LABEL: {{^}}store_local_v4i8_halfaligned:
107 ; SICIVI: s_mov_b32 m0
108 ; GFX9-NOT: m0
110 ; EG: LDS_SHORT_WRITE
111 ; EG: LDS_SHORT_WRITE
112 ; EG-NOT: LDS_WRITE
114 ; CM: LDS_SHORT_WRITE
115 ; CM: LDS_SHORT_WRITE
116 ; CM-NOT: LDS_WRITE
118 ; GCN: ds_write_b16
119 ; GCN: ds_write_b16
120 define amdgpu_kernel void @store_local_v4i8_halfaligned(ptr addrspace(3) %out, <4 x i8> %in) {
121 entry:
122   store <4 x i8> %in, ptr addrspace(3) %out, align 2
123   ret void
126 ; FUNC-LABEL: {{^}}store_local_v2i32:
127 ; SICIVI: s_mov_b32 m0
128 ; GFX9-NOT: m0
130 ; EG: LDS_WRITE
131 ; EG: LDS_WRITE
132 ; EG-NOT: LDS_WRITE
134 ; CM: LDS_WRITE
135 ; CM: LDS_WRITE
136 ; CM-NOT: LDS_WRITE
138 ; GCN: ds_write_b64
139 define amdgpu_kernel void @store_local_v2i32(ptr addrspace(3) %out, <2 x i32> %in) {
140 entry:
141   store <2 x i32> %in, ptr addrspace(3) %out
142   ret void
145 ; FUNC-LABEL: {{^}}store_local_v4i32:
146 ; SICIVI: s_mov_b32 m0
147 ; GFX9-NOT: m0
149 ; EG: LDS_WRITE
150 ; EG: LDS_WRITE
151 ; EG: LDS_WRITE
152 ; EG: LDS_WRITE
154 ; CM: LDS_WRITE
155 ; CM: LDS_WRITE
156 ; CM: LDS_WRITE
157 ; CM: LDS_WRITE
159 ; SI: ds_write2_b32
160 ; VI: ds_write_b128
161 ; GFX9: ds_write_b128
162 define amdgpu_kernel void @store_local_v4i32(ptr addrspace(3) %out, <4 x i32> %in) {
163 entry:
164   store <4 x i32> %in, ptr addrspace(3) %out
165   ret void
168 ; FUNC-LABEL: {{^}}store_local_v4i32_align4:
169 ; SICIVI: s_mov_b32 m0
170 ; GFX9-NOT: m0
172 ; EG: LDS_WRITE
173 ; EG: LDS_WRITE
174 ; EG: LDS_WRITE
175 ; EG: LDS_WRITE
177 ; CM: LDS_WRITE
178 ; CM: LDS_WRITE
179 ; CM: LDS_WRITE
180 ; CM: LDS_WRITE
182 ; GCN: ds_write2_b32
183 ; GCN: ds_write2_b32
184 define amdgpu_kernel void @store_local_v4i32_align4(ptr addrspace(3) %out, <4 x i32> %in) {
185 entry:
186   store <4 x i32> %in, ptr addrspace(3) %out, align 4
187   ret void
190 ; FUNC-LABEL: {{^}}store_local_i64_i8:
191 ; SICIVI: s_mov_b32 m0
192 ; GFX9-NOT: m0
194 ; EG: LDS_BYTE_WRITE
195 ; GCN: ds_write_b8
196 define amdgpu_kernel void @store_local_i64_i8(ptr addrspace(3) %out, i64 %in) {
197 entry:
198   %0 = trunc i64 %in to i8
199   store i8 %0, ptr addrspace(3) %out
200   ret void
203 ; FUNC-LABEL: {{^}}store_local_i64_i16:
204 ; SICIVI: s_mov_b32 m0
205 ; GFX9-NOT: m0
207 ; EG: LDS_SHORT_WRITE
208 ; GCN: ds_write_b16
209 define amdgpu_kernel void @store_local_i64_i16(ptr addrspace(3) %out, i64 %in) {
210 entry:
211   %0 = trunc i64 %in to i16
212   store i16 %0, ptr addrspace(3) %out
213   ret void