xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/load-local-i16.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s
2*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=FUNC %s
3*9880d681SAndroid Build Coastguard Worker; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_i16:
6*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_u16 v{{[0-9]+}}
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET
9*9880d681SAndroid Build Coastguard Workerdefine void @local_load_i16(i16 addrspace(3)* %out, i16 addrspace(3)* %in) {
10*9880d681SAndroid Build Coastguard Workerentry:
11*9880d681SAndroid Build Coastguard Worker  %ld = load i16, i16 addrspace(3)* %in
12*9880d681SAndroid Build Coastguard Worker  store i16 %ld, i16 addrspace(3)* %out
13*9880d681SAndroid Build Coastguard Worker  ret void
14*9880d681SAndroid Build Coastguard Worker}
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_v2i16:
17*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b32
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET
20*9880d681SAndroid Build Coastguard Workerdefine void @local_load_v2i16(<2 x i16> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) {
21*9880d681SAndroid Build Coastguard Workerentry:
22*9880d681SAndroid Build Coastguard Worker  %ld = load <2 x i16>, <2 x i16> addrspace(3)* %in
23*9880d681SAndroid Build Coastguard Worker  store <2 x i16> %ld, <2 x i16> addrspace(3)* %out
24*9880d681SAndroid Build Coastguard Worker  ret void
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_v3i16:
28*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b64
29*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_write_b32
30*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_write_b16
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Worker; EG-DAG: LDS_USHORT_READ_RET
33*9880d681SAndroid Build Coastguard Worker; EG-DAG: LDS_READ_RET
34*9880d681SAndroid Build Coastguard Workerdefine void @local_load_v3i16(<3 x i16> addrspace(3)* %out, <3 x i16> addrspace(3)* %in) {
35*9880d681SAndroid Build Coastguard Workerentry:
36*9880d681SAndroid Build Coastguard Worker  %ld = load <3 x i16>, <3 x i16> addrspace(3)* %in
37*9880d681SAndroid Build Coastguard Worker  store <3 x i16> %ld, <3 x i16> addrspace(3)* %out
38*9880d681SAndroid Build Coastguard Worker  ret void
39*9880d681SAndroid Build Coastguard Worker}
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_v4i16:
42*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b64
43*9880d681SAndroid Build Coastguard Worker
44*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET
45*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET
46*9880d681SAndroid Build Coastguard Workerdefine void @local_load_v4i16(<4 x i16> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) {
47*9880d681SAndroid Build Coastguard Workerentry:
48*9880d681SAndroid Build Coastguard Worker  %ld = load <4 x i16>, <4 x i16> addrspace(3)* %in
49*9880d681SAndroid Build Coastguard Worker  store <4 x i16> %ld, <4 x i16> addrspace(3)* %out
50*9880d681SAndroid Build Coastguard Worker  ret void
51*9880d681SAndroid Build Coastguard Worker}
52*9880d681SAndroid Build Coastguard Worker
53*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_v8i16:
54*9880d681SAndroid Build Coastguard Worker; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:1{{$}}
55*9880d681SAndroid Build Coastguard Worker
56*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET
57*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET
58*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET
59*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET
60*9880d681SAndroid Build Coastguard Workerdefine void @local_load_v8i16(<8 x i16> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) {
61*9880d681SAndroid Build Coastguard Workerentry:
62*9880d681SAndroid Build Coastguard Worker  %ld = load <8 x i16>, <8 x i16> addrspace(3)* %in
63*9880d681SAndroid Build Coastguard Worker  store <8 x i16> %ld, <8 x i16> addrspace(3)* %out
64*9880d681SAndroid Build Coastguard Worker  ret void
65*9880d681SAndroid Build Coastguard Worker}
66*9880d681SAndroid Build Coastguard Worker
67*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_v16i16:
68*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:3 offset1:2{{$}}
69*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:1{{$}}
70*9880d681SAndroid Build Coastguard Worker
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET
73*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET
74*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET
75*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET
78*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET
79*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET
80*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET
81*9880d681SAndroid Build Coastguard Workerdefine void @local_load_v16i16(<16 x i16> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) {
82*9880d681SAndroid Build Coastguard Workerentry:
83*9880d681SAndroid Build Coastguard Worker  %ld = load <16 x i16>, <16 x i16> addrspace(3)* %in
84*9880d681SAndroid Build Coastguard Worker  store <16 x i16> %ld, <16 x i16> addrspace(3)* %out
85*9880d681SAndroid Build Coastguard Worker  ret void
86*9880d681SAndroid Build Coastguard Worker}
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_i16_to_i32:
89*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_u16
90*9880d681SAndroid Build Coastguard Worker; GCN: ds_write_b32
91*9880d681SAndroid Build Coastguard Worker
92*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET
93*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_i16_to_i32(i32 addrspace(3)* %out, i16 addrspace(3)* %in) #0 {
94*9880d681SAndroid Build Coastguard Worker  %a = load i16, i16 addrspace(3)* %in
95*9880d681SAndroid Build Coastguard Worker  %ext = zext i16 %a to i32
96*9880d681SAndroid Build Coastguard Worker  store i32 %ext, i32 addrspace(3)* %out
97*9880d681SAndroid Build Coastguard Worker  ret void
98*9880d681SAndroid Build Coastguard Worker}
99*9880d681SAndroid Build Coastguard Worker
100*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_i16_to_i32:
101*9880d681SAndroid Build Coastguard Worker; GCN-NOT: s_wqm_b64
102*9880d681SAndroid Build Coastguard Worker; GCN: s_mov_b32 m0
103*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_i16
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET
106*9880d681SAndroid Build Coastguard Worker; EG: BFE_INT
107*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_i16_to_i32(i32 addrspace(3)* %out, i16 addrspace(3)* %in) #0 {
108*9880d681SAndroid Build Coastguard Worker  %a = load i16, i16 addrspace(3)* %in
109*9880d681SAndroid Build Coastguard Worker  %ext = sext i16 %a to i32
110*9880d681SAndroid Build Coastguard Worker  store i32 %ext, i32 addrspace(3)* %out
111*9880d681SAndroid Build Coastguard Worker  ret void
112*9880d681SAndroid Build Coastguard Worker}
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v1i16_to_v1i32:
115*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_u16
116*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v1i16_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 {
117*9880d681SAndroid Build Coastguard Worker  %load = load <1 x i16>, <1 x i16> addrspace(3)* %in
118*9880d681SAndroid Build Coastguard Worker  %ext = zext <1 x i16> %load to <1 x i32>
119*9880d681SAndroid Build Coastguard Worker  store <1 x i32> %ext, <1 x i32> addrspace(3)* %out
120*9880d681SAndroid Build Coastguard Worker  ret void
121*9880d681SAndroid Build Coastguard Worker}
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v1i16_to_v1i32:
124*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_i16
125*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v1i16_to_v1i32(<1 x i32> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 {
126*9880d681SAndroid Build Coastguard Worker  %load = load <1 x i16>, <1 x i16> addrspace(3)* %in
127*9880d681SAndroid Build Coastguard Worker  %ext = sext <1 x i16> %load to <1 x i32>
128*9880d681SAndroid Build Coastguard Worker  store <1 x i32> %ext, <1 x i32> addrspace(3)* %out
129*9880d681SAndroid Build Coastguard Worker  ret void
130*9880d681SAndroid Build Coastguard Worker}
131*9880d681SAndroid Build Coastguard Worker
132*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v2i16_to_v2i32:
133*9880d681SAndroid Build Coastguard Worker; GCN-NOT: s_wqm_b64
134*9880d681SAndroid Build Coastguard Worker; GCN: s_mov_b32 m0
135*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b32
136*9880d681SAndroid Build Coastguard Worker
137*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET
138*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET
139*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v2i16_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 {
140*9880d681SAndroid Build Coastguard Worker  %load = load <2 x i16>, <2 x i16> addrspace(3)* %in
141*9880d681SAndroid Build Coastguard Worker  %ext = zext <2 x i16> %load to <2 x i32>
142*9880d681SAndroid Build Coastguard Worker  store <2 x i32> %ext, <2 x i32> addrspace(3)* %out
143*9880d681SAndroid Build Coastguard Worker  ret void
144*9880d681SAndroid Build Coastguard Worker}
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v2i16_to_v2i32:
147*9880d681SAndroid Build Coastguard Worker; GCN-NOT: s_wqm_b64
148*9880d681SAndroid Build Coastguard Worker; GCN: s_mov_b32 m0
149*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b32
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Worker; EG-DAG: LDS_USHORT_READ_RET
152*9880d681SAndroid Build Coastguard Worker; EG-DAG: LDS_USHORT_READ_RET
153*9880d681SAndroid Build Coastguard Worker; EG-DAG: BFE_INT
154*9880d681SAndroid Build Coastguard Worker; EG-DAG: BFE_INT
155*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v2i16_to_v2i32(<2 x i32> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 {
156*9880d681SAndroid Build Coastguard Worker  %load = load <2 x i16>, <2 x i16> addrspace(3)* %in
157*9880d681SAndroid Build Coastguard Worker  %ext = sext <2 x i16> %load to <2 x i32>
158*9880d681SAndroid Build Coastguard Worker  store <2 x i32> %ext, <2 x i32> addrspace(3)* %out
159*9880d681SAndroid Build Coastguard Worker  ret void
160*9880d681SAndroid Build Coastguard Worker}
161*9880d681SAndroid Build Coastguard Worker
162*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_local_zextload_v3i16_to_v3i32:
163*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b64
164*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_write_b32
165*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_write_b64
166*9880d681SAndroid Build Coastguard Workerdefine void @local_local_zextload_v3i16_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i16> addrspace(3)* %in) {
167*9880d681SAndroid Build Coastguard Workerentry:
168*9880d681SAndroid Build Coastguard Worker  %ld = load <3 x i16>, <3 x i16> addrspace(3)* %in
169*9880d681SAndroid Build Coastguard Worker  %ext = zext <3 x i16> %ld to <3 x i32>
170*9880d681SAndroid Build Coastguard Worker  store <3 x i32> %ext, <3 x i32> addrspace(3)* %out
171*9880d681SAndroid Build Coastguard Worker  ret void
172*9880d681SAndroid Build Coastguard Worker}
173*9880d681SAndroid Build Coastguard Worker
174*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_local_sextload_v3i16_to_v3i32:
175*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b64
176*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_write_b32
177*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_write_b64
178*9880d681SAndroid Build Coastguard Workerdefine void @local_local_sextload_v3i16_to_v3i32(<3 x i32> addrspace(3)* %out, <3 x i16> addrspace(3)* %in) {
179*9880d681SAndroid Build Coastguard Workerentry:
180*9880d681SAndroid Build Coastguard Worker  %ld = load <3 x i16>, <3 x i16> addrspace(3)* %in
181*9880d681SAndroid Build Coastguard Worker  %ext = sext <3 x i16> %ld to <3 x i32>
182*9880d681SAndroid Build Coastguard Worker  store <3 x i32> %ext, <3 x i32> addrspace(3)* %out
183*9880d681SAndroid Build Coastguard Worker  ret void
184*9880d681SAndroid Build Coastguard Worker}
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_local_zextload_v4i16_to_v4i32:
187*9880d681SAndroid Build Coastguard Worker; GCN-NOT: s_wqm_b64
188*9880d681SAndroid Build Coastguard Worker; GCN: s_mov_b32 m0
189*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b64
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET
192*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET
193*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET
194*9880d681SAndroid Build Coastguard Worker; EG: LDS_USHORT_READ_RET
195*9880d681SAndroid Build Coastguard Workerdefine void @local_local_zextload_v4i16_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 {
196*9880d681SAndroid Build Coastguard Worker  %load = load <4 x i16>, <4 x i16> addrspace(3)* %in
197*9880d681SAndroid Build Coastguard Worker  %ext = zext <4 x i16> %load to <4 x i32>
198*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %ext, <4 x i32> addrspace(3)* %out
199*9880d681SAndroid Build Coastguard Worker  ret void
200*9880d681SAndroid Build Coastguard Worker}
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v4i16_to_v4i32:
203*9880d681SAndroid Build Coastguard Worker; GCN-NOT: s_wqm_b64
204*9880d681SAndroid Build Coastguard Worker; GCN: s_mov_b32 m0
205*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b64
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Worker; EG-DAG: LDS_USHORT_READ_RET
208*9880d681SAndroid Build Coastguard Worker; EG-DAG: LDS_USHORT_READ_RET
209*9880d681SAndroid Build Coastguard Worker; EG-DAG: LDS_USHORT_READ_RET
210*9880d681SAndroid Build Coastguard Worker; EG-DAG: LDS_USHORT_READ_RET
211*9880d681SAndroid Build Coastguard Worker; EG-DAG: BFE_INT
212*9880d681SAndroid Build Coastguard Worker; EG-DAG: BFE_INT
213*9880d681SAndroid Build Coastguard Worker; EG-DAG: BFE_INT
214*9880d681SAndroid Build Coastguard Worker; EG-DAG: BFE_INT
215*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v4i16_to_v4i32(<4 x i32> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 {
216*9880d681SAndroid Build Coastguard Worker  %load = load <4 x i16>, <4 x i16> addrspace(3)* %in
217*9880d681SAndroid Build Coastguard Worker  %ext = sext <4 x i16> %load to <4 x i32>
218*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %ext, <4 x i32> addrspace(3)* %out
219*9880d681SAndroid Build Coastguard Worker  ret void
220*9880d681SAndroid Build Coastguard Worker}
221*9880d681SAndroid Build Coastguard Worker
222*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v8i16_to_v8i32:
223*9880d681SAndroid Build Coastguard Worker; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
224*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v8i16_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 {
225*9880d681SAndroid Build Coastguard Worker  %load = load <8 x i16>, <8 x i16> addrspace(3)* %in
226*9880d681SAndroid Build Coastguard Worker  %ext = zext <8 x i16> %load to <8 x i32>
227*9880d681SAndroid Build Coastguard Worker  store <8 x i32> %ext, <8 x i32> addrspace(3)* %out
228*9880d681SAndroid Build Coastguard Worker  ret void
229*9880d681SAndroid Build Coastguard Worker}
230*9880d681SAndroid Build Coastguard Worker
231*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v8i16_to_v8i32:
232*9880d681SAndroid Build Coastguard Worker; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
233*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v8i16_to_v8i32(<8 x i32> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 {
234*9880d681SAndroid Build Coastguard Worker  %load = load <8 x i16>, <8 x i16> addrspace(3)* %in
235*9880d681SAndroid Build Coastguard Worker  %ext = sext <8 x i16> %load to <8 x i32>
236*9880d681SAndroid Build Coastguard Worker  store <8 x i32> %ext, <8 x i32> addrspace(3)* %out
237*9880d681SAndroid Build Coastguard Worker  ret void
238*9880d681SAndroid Build Coastguard Worker}
239*9880d681SAndroid Build Coastguard Worker
240*9880d681SAndroid Build Coastguard Worker; FIXME: Should have 2 ds_read_b64
241*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v16i16_to_v16i32:
242*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:1 offset1:2{{$}}
243*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+$}}
244*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset:24
245*9880d681SAndroid Build Coastguard Worker
246*9880d681SAndroid Build Coastguard Worker; GCN: ds_write2_b64
247*9880d681SAndroid Build Coastguard Worker; GCN: ds_write2_b64
248*9880d681SAndroid Build Coastguard Worker; GCN: ds_write2_b64
249*9880d681SAndroid Build Coastguard Worker; GCN: ds_write2_b64
250*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v16i16_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 {
251*9880d681SAndroid Build Coastguard Worker  %load = load <16 x i16>, <16 x i16> addrspace(3)* %in
252*9880d681SAndroid Build Coastguard Worker  %ext = zext <16 x i16> %load to <16 x i32>
253*9880d681SAndroid Build Coastguard Worker  store <16 x i32> %ext, <16 x i32> addrspace(3)* %out
254*9880d681SAndroid Build Coastguard Worker  ret void
255*9880d681SAndroid Build Coastguard Worker}
256*9880d681SAndroid Build Coastguard Worker
257*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v16i16_to_v16i32:
258*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+$}}
259*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:3 offset1:1{{$}}
260*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset:16{{$}}
261*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v16i16_to_v16i32(<16 x i32> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 {
262*9880d681SAndroid Build Coastguard Worker  %load = load <16 x i16>, <16 x i16> addrspace(3)* %in
263*9880d681SAndroid Build Coastguard Worker  %ext = sext <16 x i16> %load to <16 x i32>
264*9880d681SAndroid Build Coastguard Worker  store <16 x i32> %ext, <16 x i32> addrspace(3)* %out
265*9880d681SAndroid Build Coastguard Worker  ret void
266*9880d681SAndroid Build Coastguard Worker}
267*9880d681SAndroid Build Coastguard Worker
268*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v32i16_to_v32i32:
269*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
270*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3
271*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:4 offset1:5
272*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:6 offset1:7
273*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v32i16_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 {
274*9880d681SAndroid Build Coastguard Worker  %load = load <32 x i16>, <32 x i16> addrspace(3)* %in
275*9880d681SAndroid Build Coastguard Worker  %ext = zext <32 x i16> %load to <32 x i32>
276*9880d681SAndroid Build Coastguard Worker  store <32 x i32> %ext, <32 x i32> addrspace(3)* %out
277*9880d681SAndroid Build Coastguard Worker  ret void
278*9880d681SAndroid Build Coastguard Worker}
279*9880d681SAndroid Build Coastguard Worker
280*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v32i16_to_v32i32:
281*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:1 offset1:2{{$}}
282*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:3 offset1:4
283*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:5{{$}}
284*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:6 offset1:7
285*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v32i16_to_v32i32(<32 x i32> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 {
286*9880d681SAndroid Build Coastguard Worker  %load = load <32 x i16>, <32 x i16> addrspace(3)* %in
287*9880d681SAndroid Build Coastguard Worker  %ext = sext <32 x i16> %load to <32 x i32>
288*9880d681SAndroid Build Coastguard Worker  store <32 x i32> %ext, <32 x i32> addrspace(3)* %out
289*9880d681SAndroid Build Coastguard Worker  ret void
290*9880d681SAndroid Build Coastguard Worker}
291*9880d681SAndroid Build Coastguard Worker
292*9880d681SAndroid Build Coastguard Worker; FIXME: Missed read2
293*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v64i16_to_v64i32:
294*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:11 offset1:15
295*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset1:1{{$}}
296*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:2 offset1:3
297*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:4 offset1:5
298*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:6 offset1:7
299*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset:64
300*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:9 offset1:10
301*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:12 offset1:13
302*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset:112
303*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v64i16_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 {
304*9880d681SAndroid Build Coastguard Worker  %load = load <64 x i16>, <64 x i16> addrspace(3)* %in
305*9880d681SAndroid Build Coastguard Worker  %ext = zext <64 x i16> %load to <64 x i32>
306*9880d681SAndroid Build Coastguard Worker  store <64 x i32> %ext, <64 x i32> addrspace(3)* %out
307*9880d681SAndroid Build Coastguard Worker  ret void
308*9880d681SAndroid Build Coastguard Worker}
309*9880d681SAndroid Build Coastguard Worker
310*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v64i16_to_v64i32:
311*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v64i16_to_v64i32(<64 x i32> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 {
312*9880d681SAndroid Build Coastguard Worker  %load = load <64 x i16>, <64 x i16> addrspace(3)* %in
313*9880d681SAndroid Build Coastguard Worker  %ext = sext <64 x i16> %load to <64 x i32>
314*9880d681SAndroid Build Coastguard Worker  store <64 x i32> %ext, <64 x i32> addrspace(3)* %out
315*9880d681SAndroid Build Coastguard Worker  ret void
316*9880d681SAndroid Build Coastguard Worker}
317*9880d681SAndroid Build Coastguard Worker
318*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_i16_to_i64:
319*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read_u16 v[[LO:[0-9]+]],
320*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0{{$}}
321*9880d681SAndroid Build Coastguard Worker
322*9880d681SAndroid Build Coastguard Worker; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]]
323*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_i16_to_i64(i64 addrspace(3)* %out, i16 addrspace(3)* %in) #0 {
324*9880d681SAndroid Build Coastguard Worker  %a = load i16, i16 addrspace(3)* %in
325*9880d681SAndroid Build Coastguard Worker  %ext = zext i16 %a to i64
326*9880d681SAndroid Build Coastguard Worker  store i64 %ext, i64 addrspace(3)* %out
327*9880d681SAndroid Build Coastguard Worker  ret void
328*9880d681SAndroid Build Coastguard Worker}
329*9880d681SAndroid Build Coastguard Worker
330*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_i16_to_i64:
331*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_i16 v[[LO:[0-9]+]],
332*9880d681SAndroid Build Coastguard Worker; GCN-DAG: v_ashrrev_i32_e32 v[[HI:[0-9]+]], 31, v[[LO]]
333*9880d681SAndroid Build Coastguard Worker
334*9880d681SAndroid Build Coastguard Worker; GCN: ds_write_b64 v{{[0-9]+}}, v{{\[}}[[LO]]:[[HI]]]
335*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_i16_to_i64(i64 addrspace(3)* %out, i16 addrspace(3)* %in) #0 {
336*9880d681SAndroid Build Coastguard Worker  %a = load i16, i16 addrspace(3)* %in
337*9880d681SAndroid Build Coastguard Worker  %ext = sext i16 %a to i64
338*9880d681SAndroid Build Coastguard Worker  store i64 %ext, i64 addrspace(3)* %out
339*9880d681SAndroid Build Coastguard Worker  ret void
340*9880d681SAndroid Build Coastguard Worker}
341*9880d681SAndroid Build Coastguard Worker
342*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v1i16_to_v1i64:
343*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v1i16_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 {
344*9880d681SAndroid Build Coastguard Worker  %load = load <1 x i16>, <1 x i16> addrspace(3)* %in
345*9880d681SAndroid Build Coastguard Worker  %ext = zext <1 x i16> %load to <1 x i64>
346*9880d681SAndroid Build Coastguard Worker  store <1 x i64> %ext, <1 x i64> addrspace(3)* %out
347*9880d681SAndroid Build Coastguard Worker  ret void
348*9880d681SAndroid Build Coastguard Worker}
349*9880d681SAndroid Build Coastguard Worker
350*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v1i16_to_v1i64:
351*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v1i16_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i16> addrspace(3)* %in) #0 {
352*9880d681SAndroid Build Coastguard Worker  %load = load <1 x i16>, <1 x i16> addrspace(3)* %in
353*9880d681SAndroid Build Coastguard Worker  %ext = sext <1 x i16> %load to <1 x i64>
354*9880d681SAndroid Build Coastguard Worker  store <1 x i64> %ext, <1 x i64> addrspace(3)* %out
355*9880d681SAndroid Build Coastguard Worker  ret void
356*9880d681SAndroid Build Coastguard Worker}
357*9880d681SAndroid Build Coastguard Worker
358*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v2i16_to_v2i64:
359*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v2i16_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 {
360*9880d681SAndroid Build Coastguard Worker  %load = load <2 x i16>, <2 x i16> addrspace(3)* %in
361*9880d681SAndroid Build Coastguard Worker  %ext = zext <2 x i16> %load to <2 x i64>
362*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %ext, <2 x i64> addrspace(3)* %out
363*9880d681SAndroid Build Coastguard Worker  ret void
364*9880d681SAndroid Build Coastguard Worker}
365*9880d681SAndroid Build Coastguard Worker
366*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v2i16_to_v2i64:
367*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v2i16_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i16> addrspace(3)* %in) #0 {
368*9880d681SAndroid Build Coastguard Worker  %load = load <2 x i16>, <2 x i16> addrspace(3)* %in
369*9880d681SAndroid Build Coastguard Worker  %ext = sext <2 x i16> %load to <2 x i64>
370*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %ext, <2 x i64> addrspace(3)* %out
371*9880d681SAndroid Build Coastguard Worker  ret void
372*9880d681SAndroid Build Coastguard Worker}
373*9880d681SAndroid Build Coastguard Worker
374*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v4i16_to_v4i64:
375*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v4i16_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 {
376*9880d681SAndroid Build Coastguard Worker  %load = load <4 x i16>, <4 x i16> addrspace(3)* %in
377*9880d681SAndroid Build Coastguard Worker  %ext = zext <4 x i16> %load to <4 x i64>
378*9880d681SAndroid Build Coastguard Worker  store <4 x i64> %ext, <4 x i64> addrspace(3)* %out
379*9880d681SAndroid Build Coastguard Worker  ret void
380*9880d681SAndroid Build Coastguard Worker}
381*9880d681SAndroid Build Coastguard Worker
382*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v4i16_to_v4i64:
383*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v4i16_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i16> addrspace(3)* %in) #0 {
384*9880d681SAndroid Build Coastguard Worker  %load = load <4 x i16>, <4 x i16> addrspace(3)* %in
385*9880d681SAndroid Build Coastguard Worker  %ext = sext <4 x i16> %load to <4 x i64>
386*9880d681SAndroid Build Coastguard Worker  store <4 x i64> %ext, <4 x i64> addrspace(3)* %out
387*9880d681SAndroid Build Coastguard Worker  ret void
388*9880d681SAndroid Build Coastguard Worker}
389*9880d681SAndroid Build Coastguard Worker
390*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v8i16_to_v8i64:
391*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v8i16_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 {
392*9880d681SAndroid Build Coastguard Worker  %load = load <8 x i16>, <8 x i16> addrspace(3)* %in
393*9880d681SAndroid Build Coastguard Worker  %ext = zext <8 x i16> %load to <8 x i64>
394*9880d681SAndroid Build Coastguard Worker  store <8 x i64> %ext, <8 x i64> addrspace(3)* %out
395*9880d681SAndroid Build Coastguard Worker  ret void
396*9880d681SAndroid Build Coastguard Worker}
397*9880d681SAndroid Build Coastguard Worker
398*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v8i16_to_v8i64:
399*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v8i16_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i16> addrspace(3)* %in) #0 {
400*9880d681SAndroid Build Coastguard Worker  %load = load <8 x i16>, <8 x i16> addrspace(3)* %in
401*9880d681SAndroid Build Coastguard Worker  %ext = sext <8 x i16> %load to <8 x i64>
402*9880d681SAndroid Build Coastguard Worker  store <8 x i64> %ext, <8 x i64> addrspace(3)* %out
403*9880d681SAndroid Build Coastguard Worker  ret void
404*9880d681SAndroid Build Coastguard Worker}
405*9880d681SAndroid Build Coastguard Worker
406*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v16i16_to_v16i64:
407*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v16i16_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 {
408*9880d681SAndroid Build Coastguard Worker  %load = load <16 x i16>, <16 x i16> addrspace(3)* %in
409*9880d681SAndroid Build Coastguard Worker  %ext = zext <16 x i16> %load to <16 x i64>
410*9880d681SAndroid Build Coastguard Worker  store <16 x i64> %ext, <16 x i64> addrspace(3)* %out
411*9880d681SAndroid Build Coastguard Worker  ret void
412*9880d681SAndroid Build Coastguard Worker}
413*9880d681SAndroid Build Coastguard Worker
414*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v16i16_to_v16i64:
415*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v16i16_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i16> addrspace(3)* %in) #0 {
416*9880d681SAndroid Build Coastguard Worker  %load = load <16 x i16>, <16 x i16> addrspace(3)* %in
417*9880d681SAndroid Build Coastguard Worker  %ext = sext <16 x i16> %load to <16 x i64>
418*9880d681SAndroid Build Coastguard Worker  store <16 x i64> %ext, <16 x i64> addrspace(3)* %out
419*9880d681SAndroid Build Coastguard Worker  ret void
420*9880d681SAndroid Build Coastguard Worker}
421*9880d681SAndroid Build Coastguard Worker
422*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v32i16_to_v32i64:
423*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v32i16_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 {
424*9880d681SAndroid Build Coastguard Worker  %load = load <32 x i16>, <32 x i16> addrspace(3)* %in
425*9880d681SAndroid Build Coastguard Worker  %ext = zext <32 x i16> %load to <32 x i64>
426*9880d681SAndroid Build Coastguard Worker  store <32 x i64> %ext, <32 x i64> addrspace(3)* %out
427*9880d681SAndroid Build Coastguard Worker  ret void
428*9880d681SAndroid Build Coastguard Worker}
429*9880d681SAndroid Build Coastguard Worker
430*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v32i16_to_v32i64:
431*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v32i16_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i16> addrspace(3)* %in) #0 {
432*9880d681SAndroid Build Coastguard Worker  %load = load <32 x i16>, <32 x i16> addrspace(3)* %in
433*9880d681SAndroid Build Coastguard Worker  %ext = sext <32 x i16> %load to <32 x i64>
434*9880d681SAndroid Build Coastguard Worker  store <32 x i64> %ext, <32 x i64> addrspace(3)* %out
435*9880d681SAndroid Build Coastguard Worker  ret void
436*9880d681SAndroid Build Coastguard Worker}
437*9880d681SAndroid Build Coastguard Worker
438*9880d681SAndroid Build Coastguard Worker; ; XFUNC-LABEL: {{^}}local_zextload_v64i16_to_v64i64:
439*9880d681SAndroid Build Coastguard Worker; define void @local_zextload_v64i16_to_v64i64(<64 x i64> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 {
440*9880d681SAndroid Build Coastguard Worker;   %load = load <64 x i16>, <64 x i16> addrspace(3)* %in
441*9880d681SAndroid Build Coastguard Worker;   %ext = zext <64 x i16> %load to <64 x i64>
442*9880d681SAndroid Build Coastguard Worker;   store <64 x i64> %ext, <64 x i64> addrspace(3)* %out
443*9880d681SAndroid Build Coastguard Worker;   ret void
444*9880d681SAndroid Build Coastguard Worker; }
445*9880d681SAndroid Build Coastguard Worker
446*9880d681SAndroid Build Coastguard Worker; ; XFUNC-LABEL: {{^}}local_sextload_v64i16_to_v64i64:
447*9880d681SAndroid Build Coastguard Worker; define void @local_sextload_v64i16_to_v64i64(<64 x i64> addrspace(3)* %out, <64 x i16> addrspace(3)* %in) #0 {
448*9880d681SAndroid Build Coastguard Worker;   %load = load <64 x i16>, <64 x i16> addrspace(3)* %in
449*9880d681SAndroid Build Coastguard Worker;   %ext = sext <64 x i16> %load to <64 x i64>
450*9880d681SAndroid Build Coastguard Worker;   store <64 x i64> %ext, <64 x i64> addrspace(3)* %out
451*9880d681SAndroid Build Coastguard Worker;   ret void
452*9880d681SAndroid Build Coastguard Worker; }
453*9880d681SAndroid Build Coastguard Worker
454*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind }
455