blob: c144bf2aa878c9b04605e81957ee547cf0e35633 [file] [log] [blame]
Jan Veselycd6b12b2016-09-02 18:52:28 +00001; RUN: llc -march=amdgcn -mcpu=verde -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s
2; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s
3; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
4; RUN: llc -march=r600 -mcpu=cayman < %s | FileCheck -check-prefix=CM -check-prefix=FUNC %s
5
6; FUNC-LABEL: {{^}}store_local_i1:
7; EG: LDS_BYTE_WRITE
Jan Vesely00864882016-09-02 19:07:06 +00008
9; CM: LDS_BYTE_WRITE
10
Jan Veselycd6b12b2016-09-02 18:52:28 +000011; GCN: ds_write_b8
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000012define amdgpu_kernel void @store_local_i1(i1 addrspace(3)* %out) {
Jan Veselycd6b12b2016-09-02 18:52:28 +000013entry:
14 store i1 true, i1 addrspace(3)* %out
15 ret void
16}
17
18; FUNC-LABEL: {{^}}store_local_i8:
19; EG: LDS_BYTE_WRITE
20
Jan Vesely00864882016-09-02 19:07:06 +000021; CM: LDS_BYTE_WRITE
22
Jan Veselycd6b12b2016-09-02 18:52:28 +000023; GCN: ds_write_b8
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000024define amdgpu_kernel void @store_local_i8(i8 addrspace(3)* %out, i8 %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +000025 store i8 %in, i8 addrspace(3)* %out
26 ret void
27}
28
29; FUNC-LABEL: {{^}}store_local_i16:
30; EG: LDS_SHORT_WRITE
31
Jan Vesely00864882016-09-02 19:07:06 +000032; CM: LDS_SHORT_WRITE
33
Jan Veselycd6b12b2016-09-02 18:52:28 +000034; GCN: ds_write_b16
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000035define amdgpu_kernel void @store_local_i16(i16 addrspace(3)* %out, i16 %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +000036 store i16 %in, i16 addrspace(3)* %out
37 ret void
38}
39
40; FUNC-LABEL: {{^}}store_local_v2i16:
41; EG: LDS_WRITE
42
43; CM: LDS_WRITE
44
45; GCN: ds_write_b32
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000046define amdgpu_kernel void @store_local_v2i16(<2 x i16> addrspace(3)* %out, <2 x i16> %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +000047entry:
48 store <2 x i16> %in, <2 x i16> addrspace(3)* %out
49 ret void
50}
51
52; FUNC-LABEL: {{^}}store_local_v4i8:
53; EG: LDS_WRITE
54
55; CM: LDS_WRITE
56
57; GCN: ds_write_b32
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000058define amdgpu_kernel void @store_local_v4i8(<4 x i8> addrspace(3)* %out, <4 x i8> %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +000059entry:
60 store <4 x i8> %in, <4 x i8> addrspace(3)* %out
61 ret void
62}
63
Jan Vesely00864882016-09-02 19:07:06 +000064; FUNC-LABEL: {{^}}store_local_v4i8_unaligned:
65; EG: LDS_BYTE_WRITE
66; EG: LDS_BYTE_WRITE
67; EG: LDS_BYTE_WRITE
68; EG: LDS_BYTE_WRITE
69; EG-NOT: LDS_WRITE
70
71; CM: LDS_BYTE_WRITE
72; CM: LDS_BYTE_WRITE
73; CM: LDS_BYTE_WRITE
74; CM: LDS_BYTE_WRITE
75; CM-NOT: LDS_WRITE
76
77; GCN: ds_write_b8
78; GCN: ds_write_b8
79; GCN: ds_write_b8
80; GCN: ds_write_b8
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000081define amdgpu_kernel void @store_local_v4i8_unaligned(<4 x i8> addrspace(3)* %out, <4 x i8> %in) {
Jan Vesely00864882016-09-02 19:07:06 +000082entry:
83 store <4 x i8> %in, <4 x i8> addrspace(3)* %out, align 1
84 ret void
85}
86
87; FUNC-LABEL: {{^}}store_local_v4i8_halfaligned:
88; EG: LDS_SHORT_WRITE
89; EG: LDS_SHORT_WRITE
90; EG-NOT: LDS_WRITE
91
92; CM: LDS_SHORT_WRITE
93; CM: LDS_SHORT_WRITE
94; CM-NOT: LDS_WRITE
95
96; GCN: ds_write_b16
97; GCN: ds_write_b16
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000098define amdgpu_kernel void @store_local_v4i8_halfaligned(<4 x i8> addrspace(3)* %out, <4 x i8> %in) {
Jan Vesely00864882016-09-02 19:07:06 +000099entry:
100 store <4 x i8> %in, <4 x i8> addrspace(3)* %out, align 2
101 ret void
102}
103
Jan Veselycd6b12b2016-09-02 18:52:28 +0000104; FUNC-LABEL: {{^}}store_local_v2i32:
105; EG: LDS_WRITE
106; EG: LDS_WRITE
Jan Vesely00864882016-09-02 19:07:06 +0000107; EG-NOT: LDS_WRITE
Jan Veselycd6b12b2016-09-02 18:52:28 +0000108
109; CM: LDS_WRITE
110; CM: LDS_WRITE
Jan Vesely00864882016-09-02 19:07:06 +0000111; CM-NOT: LDS_WRITE
Jan Veselycd6b12b2016-09-02 18:52:28 +0000112
113; GCN: ds_write_b64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000114define amdgpu_kernel void @store_local_v2i32(<2 x i32> addrspace(3)* %out, <2 x i32> %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +0000115entry:
116 store <2 x i32> %in, <2 x i32> addrspace(3)* %out
117 ret void
118}
119
120; FUNC-LABEL: {{^}}store_local_v4i32:
121; EG: LDS_WRITE
122; EG: LDS_WRITE
123; EG: LDS_WRITE
124; EG: LDS_WRITE
125
126; CM: LDS_WRITE
127; CM: LDS_WRITE
128; CM: LDS_WRITE
129; CM: LDS_WRITE
130
131; GCN: ds_write2_b64
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000132define amdgpu_kernel void @store_local_v4i32(<4 x i32> addrspace(3)* %out, <4 x i32> %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +0000133entry:
134 store <4 x i32> %in, <4 x i32> addrspace(3)* %out
135 ret void
136}
137
138; FUNC-LABEL: {{^}}store_local_v4i32_align4:
139; EG: LDS_WRITE
140; EG: LDS_WRITE
141; EG: LDS_WRITE
142; EG: LDS_WRITE
143
144; CM: LDS_WRITE
145; CM: LDS_WRITE
146; CM: LDS_WRITE
147; CM: LDS_WRITE
148
149; GCN: ds_write2_b32
150; GCN: ds_write2_b32
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000151define amdgpu_kernel void @store_local_v4i32_align4(<4 x i32> addrspace(3)* %out, <4 x i32> %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +0000152entry:
153 store <4 x i32> %in, <4 x i32> addrspace(3)* %out, align 4
154 ret void
155}
156
157; FUNC-LABEL: {{^}}store_local_i64_i8:
158; EG: LDS_BYTE_WRITE
159; GCN: ds_write_b8
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000160define amdgpu_kernel void @store_local_i64_i8(i8 addrspace(3)* %out, i64 %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +0000161entry:
162 %0 = trunc i64 %in to i8
163 store i8 %0, i8 addrspace(3)* %out
164 ret void
165}
166
167; FUNC-LABEL: {{^}}store_local_i64_i16:
168; EG: LDS_SHORT_WRITE
169; GCN: ds_write_b16
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000170define amdgpu_kernel void @store_local_i64_i16(i16 addrspace(3)* %out, i64 %in) {
Jan Veselycd6b12b2016-09-02 18:52:28 +0000171entry:
172 %0 = trunc i64 %in to i16
173 store i16 %0, i16 addrspace(3)* %out
174 ret void
175}