blob: 96d5e06a9e96d7477f980c4918b64a98ccfef0a2 [file] [log] [blame]
Matt Arsenault3f71c0e2017-11-29 00:55:57 +00001; RUN: llc -march=amdgcn -mtriple=amdgcn---amdgiz -mcpu=verde -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,SICIVI,FUNC %s
2; RUN: llc -march=amdgcn -mtriple=amdgcn---amdgiz -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,SICIVI,FUNC %s
3; RUN: llc -march=amdgcn -mtriple=amdgcn---amdgiz -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -check-prefixes=GCN,GFX9,FUNC %s
4; RUN: llc -march=r600 -mtriple=r600---amdgiz -mcpu=redwood < %s | FileCheck -check-prefixes=EG,FUNC %s
5; RUN: llc -march=r600 -mtriple=r600---amdgiz -mcpu=cayman < %s | FileCheck -check-prefixes=CM,FUNC %s
Jan Veselycd6b12b2016-09-02 18:52:28 +00006
7; FUNC-LABEL: {{^}}store_local_i1:
Matt Arsenault3f71c0e2017-11-29 00:55:57 +00008; SICIVI: s_mov_b32 m0
9; GFX9-NOT: m0
10
Jan Veselycd6b12b2016-09-02 18:52:28 +000011; EG: LDS_BYTE_WRITE
Jan Vesely00864882016-09-02 19:07:06 +000012
13; CM: LDS_BYTE_WRITE
14
Jan Veselycd6b12b2016-09-02 18:52:28 +000015; GCN: ds_write_b8
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000016define amdgpu_kernel void @store_local_i1(i1 addrspace(3)* %out) {
Jan Veselycd6b12b2016-09-02 18:52:28 +000017entry:
18 store i1 true, i1 addrspace(3)* %out
19 ret void
20}
21
22; FUNC-LABEL: {{^}}store_local_i8:
Matt Arsenault3f71c0e2017-11-29 00:55:57 +000023; SICIVI: s_mov_b32 m0
24; GFX9-NOT: m0
25
Jan Veselycd6b12b2016-09-02 18:52:28 +000026; EG: LDS_BYTE_WRITE
27
Jan Vesely00864882016-09-02 19:07:06 +000028; CM: LDS_BYTE_WRITE
29
Jan Veselycd6b12b2016-09-02 18:52:28 +000030; GCN: ds_write_b8
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000031define amdgpu_kernel void @store_local_i8(i8 addrspace(3)* %out, i8 %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +000032 store i8 %in, i8 addrspace(3)* %out
33 ret void
34}
35
36; FUNC-LABEL: {{^}}store_local_i16:
Matt Arsenault3f71c0e2017-11-29 00:55:57 +000037; SICIVI: s_mov_b32 m0
38; GFX9-NOT: m0
39
Jan Veselycd6b12b2016-09-02 18:52:28 +000040; EG: LDS_SHORT_WRITE
41
Jan Vesely00864882016-09-02 19:07:06 +000042; CM: LDS_SHORT_WRITE
43
Jan Veselycd6b12b2016-09-02 18:52:28 +000044; GCN: ds_write_b16
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000045define amdgpu_kernel void @store_local_i16(i16 addrspace(3)* %out, i16 %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +000046 store i16 %in, i16 addrspace(3)* %out
47 ret void
48}
49
50; FUNC-LABEL: {{^}}store_local_v2i16:
Matt Arsenault3f71c0e2017-11-29 00:55:57 +000051; SICIVI: s_mov_b32 m0
52; GFX9-NOT: m0
53
Jan Veselycd6b12b2016-09-02 18:52:28 +000054; EG: LDS_WRITE
55
56; CM: LDS_WRITE
57
58; GCN: ds_write_b32
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000059define amdgpu_kernel void @store_local_v2i16(<2 x i16> addrspace(3)* %out, <2 x i16> %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +000060entry:
61 store <2 x i16> %in, <2 x i16> addrspace(3)* %out
62 ret void
63}
64
65; FUNC-LABEL: {{^}}store_local_v4i8:
Matt Arsenault3f71c0e2017-11-29 00:55:57 +000066; SICIVI: s_mov_b32 m0
67; GFX9-NOT: m0
68
Jan Veselycd6b12b2016-09-02 18:52:28 +000069; EG: LDS_WRITE
70
71; CM: LDS_WRITE
72
73; GCN: ds_write_b32
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000074define amdgpu_kernel void @store_local_v4i8(<4 x i8> addrspace(3)* %out, <4 x i8> %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +000075entry:
76 store <4 x i8> %in, <4 x i8> addrspace(3)* %out
77 ret void
78}
79
Jan Vesely00864882016-09-02 19:07:06 +000080; FUNC-LABEL: {{^}}store_local_v4i8_unaligned:
Matt Arsenault3f71c0e2017-11-29 00:55:57 +000081; SICIVI: s_mov_b32 m0
82; GFX9-NOT: m0
83
Jan Vesely00864882016-09-02 19:07:06 +000084; EG: LDS_BYTE_WRITE
85; EG: LDS_BYTE_WRITE
86; EG: LDS_BYTE_WRITE
87; EG: LDS_BYTE_WRITE
88; EG-NOT: LDS_WRITE
89
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
95
96; GCN: ds_write_b8
97; GCN: ds_write_b8
98; GCN: ds_write_b8
99; GCN: ds_write_b8
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000100define amdgpu_kernel void @store_local_v4i8_unaligned(<4 x i8> addrspace(3)* %out, <4 x i8> %in) {
Jan Vesely00864882016-09-02 19:07:06 +0000101entry:
102 store <4 x i8> %in, <4 x i8> addrspace(3)* %out, align 1
103 ret void
104}
105
106; FUNC-LABEL: {{^}}store_local_v4i8_halfaligned:
Matt Arsenault3f71c0e2017-11-29 00:55:57 +0000107; SICIVI: s_mov_b32 m0
108; GFX9-NOT: m0
109
Jan Vesely00864882016-09-02 19:07:06 +0000110; EG: LDS_SHORT_WRITE
111; EG: LDS_SHORT_WRITE
112; EG-NOT: LDS_WRITE
113
114; CM: LDS_SHORT_WRITE
115; CM: LDS_SHORT_WRITE
116; CM-NOT: LDS_WRITE
117
118; GCN: ds_write_b16
119; GCN: ds_write_b16
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000120define amdgpu_kernel void @store_local_v4i8_halfaligned(<4 x i8> addrspace(3)* %out, <4 x i8> %in) {
Jan Vesely00864882016-09-02 19:07:06 +0000121entry:
122 store <4 x i8> %in, <4 x i8> addrspace(3)* %out, align 2
123 ret void
124}
125
Jan Veselycd6b12b2016-09-02 18:52:28 +0000126; FUNC-LABEL: {{^}}store_local_v2i32:
Matt Arsenault3f71c0e2017-11-29 00:55:57 +0000127; SICIVI: s_mov_b32 m0
128; GFX9-NOT: m0
129
Jan Veselycd6b12b2016-09-02 18:52:28 +0000130; EG: LDS_WRITE
131; EG: LDS_WRITE
Jan Vesely00864882016-09-02 19:07:06 +0000132; EG-NOT: LDS_WRITE
Jan Veselycd6b12b2016-09-02 18:52:28 +0000133
134; CM: LDS_WRITE
135; CM: LDS_WRITE
Jan Vesely00864882016-09-02 19:07:06 +0000136; CM-NOT: LDS_WRITE
Jan Veselycd6b12b2016-09-02 18:52:28 +0000137
138; GCN: ds_write_b64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000139define amdgpu_kernel void @store_local_v2i32(<2 x i32> addrspace(3)* %out, <2 x i32> %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +0000140entry:
141 store <2 x i32> %in, <2 x i32> addrspace(3)* %out
142 ret void
143}
144
145; FUNC-LABEL: {{^}}store_local_v4i32:
Matt Arsenault3f71c0e2017-11-29 00:55:57 +0000146; SICIVI: s_mov_b32 m0
147; GFX9-NOT: m0
148
Jan Veselycd6b12b2016-09-02 18:52:28 +0000149; EG: LDS_WRITE
150; EG: LDS_WRITE
151; EG: LDS_WRITE
152; EG: LDS_WRITE
153
154; CM: LDS_WRITE
155; CM: LDS_WRITE
156; CM: LDS_WRITE
157; CM: LDS_WRITE
158
159; GCN: ds_write2_b64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000160define amdgpu_kernel void @store_local_v4i32(<4 x i32> addrspace(3)* %out, <4 x i32> %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +0000161entry:
162 store <4 x i32> %in, <4 x i32> addrspace(3)* %out
163 ret void
164}
165
166; FUNC-LABEL: {{^}}store_local_v4i32_align4:
Matt Arsenault3f71c0e2017-11-29 00:55:57 +0000167; SICIVI: s_mov_b32 m0
168; GFX9-NOT: m0
169
Jan Veselycd6b12b2016-09-02 18:52:28 +0000170; EG: LDS_WRITE
171; EG: LDS_WRITE
172; EG: LDS_WRITE
173; EG: LDS_WRITE
174
175; CM: LDS_WRITE
176; CM: LDS_WRITE
177; CM: LDS_WRITE
178; CM: LDS_WRITE
179
180; GCN: ds_write2_b32
181; GCN: ds_write2_b32
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000182define amdgpu_kernel void @store_local_v4i32_align4(<4 x i32> addrspace(3)* %out, <4 x i32> %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +0000183entry:
184 store <4 x i32> %in, <4 x i32> addrspace(3)* %out, align 4
185 ret void
186}
187
188; FUNC-LABEL: {{^}}store_local_i64_i8:
Matt Arsenault3f71c0e2017-11-29 00:55:57 +0000189; SICIVI: s_mov_b32 m0
190; GFX9-NOT: m0
191
Jan Veselycd6b12b2016-09-02 18:52:28 +0000192; EG: LDS_BYTE_WRITE
193; GCN: ds_write_b8
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000194define amdgpu_kernel void @store_local_i64_i8(i8 addrspace(3)* %out, i64 %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +0000195entry:
196 %0 = trunc i64 %in to i8
197 store i8 %0, i8 addrspace(3)* %out
198 ret void
199}
200
201; FUNC-LABEL: {{^}}store_local_i64_i16:
Matt Arsenault3f71c0e2017-11-29 00:55:57 +0000202; SICIVI: s_mov_b32 m0
203; GFX9-NOT: m0
204
Jan Veselycd6b12b2016-09-02 18:52:28 +0000205; EG: LDS_SHORT_WRITE
206; GCN: ds_write_b16
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000207define amdgpu_kernel void @store_local_i64_i16(i16 addrspace(3)* %out, i64 %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +0000208entry:
209 %0 = trunc i64 %in to i16
210 store i16 %0, i16 addrspace(3)* %out
211 ret void
212}