xref: /aosp_15_r20/external/llvm/test/CodeGen/AMDGPU/load-local-i32.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
6*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_i32:
7*9880d681SAndroid Build Coastguard Worker; GCN-NOT: s_wqm_b64
8*9880d681SAndroid Build Coastguard Worker; GCN: s_mov_b32 m0, -1
9*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b32
10*9880d681SAndroid Build Coastguard Worker
11*9880d681SAndroid Build Coastguard Worker; EG: LDS_READ_RET
12*9880d681SAndroid Build Coastguard Workerdefine void @local_load_i32(i32 addrspace(3)* %out, i32 addrspace(3)* %in) #0 {
13*9880d681SAndroid Build Coastguard Workerentry:
14*9880d681SAndroid Build Coastguard Worker  %ld = load i32, i32 addrspace(3)* %in
15*9880d681SAndroid Build Coastguard Worker  store i32 %ld, i32 addrspace(3)* %out
16*9880d681SAndroid Build Coastguard Worker  ret void
17*9880d681SAndroid Build Coastguard Worker}
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_v2i32:
20*9880d681SAndroid Build Coastguard Worker; GCN: ds_read_b64
21*9880d681SAndroid Build Coastguard Workerdefine void @local_load_v2i32(<2 x i32> addrspace(3)* %out, <2 x i32> addrspace(3)* %in) #0 {
22*9880d681SAndroid Build Coastguard Workerentry:
23*9880d681SAndroid Build Coastguard Worker  %ld = load <2 x i32>, <2 x i32> addrspace(3)* %in
24*9880d681SAndroid Build Coastguard Worker  store <2 x i32> %ld, <2 x i32> addrspace(3)* %out
25*9880d681SAndroid Build Coastguard Worker  ret void
26*9880d681SAndroid Build Coastguard Worker}
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_v3i32:
29*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read_b64
30*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read_b32
31*9880d681SAndroid Build Coastguard Workerdefine void @local_load_v3i32(<3 x i32> addrspace(3)* %out, <3 x i32> addrspace(3)* %in) #0 {
32*9880d681SAndroid Build Coastguard Workerentry:
33*9880d681SAndroid Build Coastguard Worker  %ld = load <3 x i32>, <3 x i32> addrspace(3)* %in
34*9880d681SAndroid Build Coastguard Worker  store <3 x i32> %ld, <3 x i32> addrspace(3)* %out
35*9880d681SAndroid Build Coastguard Worker  ret void
36*9880d681SAndroid Build Coastguard Worker}
37*9880d681SAndroid Build Coastguard Worker
38*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_v4i32:
39*9880d681SAndroid Build Coastguard Worker; GCN: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:1{{$}}
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerdefine void @local_load_v4i32(<4 x i32> addrspace(3)* %out, <4 x i32> addrspace(3)* %in) #0 {
42*9880d681SAndroid Build Coastguard Workerentry:
43*9880d681SAndroid Build Coastguard Worker  %ld = load <4 x i32>, <4 x i32> addrspace(3)* %in
44*9880d681SAndroid Build Coastguard Worker  store <4 x i32> %ld, <4 x i32> addrspace(3)* %out
45*9880d681SAndroid Build Coastguard Worker  ret void
46*9880d681SAndroid Build Coastguard Worker}
47*9880d681SAndroid Build Coastguard Worker
48*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_v8i32:
49*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:3 offset1:2{{$}}
50*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:1{{$}}
51*9880d681SAndroid Build Coastguard Workerdefine void @local_load_v8i32(<8 x i32> addrspace(3)* %out, <8 x i32> addrspace(3)* %in) #0 {
52*9880d681SAndroid Build Coastguard Workerentry:
53*9880d681SAndroid Build Coastguard Worker  %ld = load <8 x i32>, <8 x i32> addrspace(3)* %in
54*9880d681SAndroid Build Coastguard Worker  store <8 x i32> %ld, <8 x i32> addrspace(3)* %out
55*9880d681SAndroid Build Coastguard Worker  ret void
56*9880d681SAndroid Build Coastguard Worker}
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_load_v16i32:
59*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:3 offset1:4{{$}}
60*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:5 offset1:6{{$}}
61*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:7{{$}}
62*9880d681SAndroid Build Coastguard Worker; GCN-DAG: ds_read2_b64 v{{\[[0-9]+:[0-9]+\]}}, v{{[0-9]+}} offset0:1 offset1:2{{$}}
63*9880d681SAndroid Build Coastguard Workerdefine void @local_load_v16i32(<16 x i32> addrspace(3)* %out, <16 x i32> addrspace(3)* %in) #0 {
64*9880d681SAndroid Build Coastguard Workerentry:
65*9880d681SAndroid Build Coastguard Worker  %ld = load <16 x i32>, <16 x i32> addrspace(3)* %in
66*9880d681SAndroid Build Coastguard Worker  store <16 x i32> %ld, <16 x i32> addrspace(3)* %out
67*9880d681SAndroid Build Coastguard Worker  ret void
68*9880d681SAndroid Build Coastguard Worker}
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_i32_to_i64:
71*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_i32_to_i64(i64 addrspace(3)* %out, i32 addrspace(3)* %in) #0 {
72*9880d681SAndroid Build Coastguard Worker  %ld = load i32, i32 addrspace(3)* %in
73*9880d681SAndroid Build Coastguard Worker  %ext = zext i32 %ld to i64
74*9880d681SAndroid Build Coastguard Worker  store i64 %ext, i64 addrspace(3)* %out
75*9880d681SAndroid Build Coastguard Worker  ret void
76*9880d681SAndroid Build Coastguard Worker}
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_i32_to_i64:
79*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_i32_to_i64(i64 addrspace(3)* %out, i32 addrspace(3)* %in) #0 {
80*9880d681SAndroid Build Coastguard Worker  %ld = load i32, i32 addrspace(3)* %in
81*9880d681SAndroid Build Coastguard Worker  %ext = sext i32 %ld to i64
82*9880d681SAndroid Build Coastguard Worker  store i64 %ext, i64 addrspace(3)* %out
83*9880d681SAndroid Build Coastguard Worker  ret void
84*9880d681SAndroid Build Coastguard Worker}
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v1i32_to_v1i64:
87*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v1i32_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i32> addrspace(3)* %in) #0 {
88*9880d681SAndroid Build Coastguard Worker  %ld = load <1 x i32>, <1 x i32> addrspace(3)* %in
89*9880d681SAndroid Build Coastguard Worker  %ext = zext <1 x i32> %ld to <1 x i64>
90*9880d681SAndroid Build Coastguard Worker  store <1 x i64> %ext, <1 x i64> addrspace(3)* %out
91*9880d681SAndroid Build Coastguard Worker  ret void
92*9880d681SAndroid Build Coastguard Worker}
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v1i32_to_v1i64:
95*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v1i32_to_v1i64(<1 x i64> addrspace(3)* %out, <1 x i32> addrspace(3)* %in) #0 {
96*9880d681SAndroid Build Coastguard Worker  %ld = load <1 x i32>, <1 x i32> addrspace(3)* %in
97*9880d681SAndroid Build Coastguard Worker  %ext = sext <1 x i32> %ld to <1 x i64>
98*9880d681SAndroid Build Coastguard Worker  store <1 x i64> %ext, <1 x i64> addrspace(3)* %out
99*9880d681SAndroid Build Coastguard Worker  ret void
100*9880d681SAndroid Build Coastguard Worker}
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v2i32_to_v2i64:
103*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v2i32_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i32> addrspace(3)* %in) #0 {
104*9880d681SAndroid Build Coastguard Worker  %ld = load <2 x i32>, <2 x i32> addrspace(3)* %in
105*9880d681SAndroid Build Coastguard Worker  %ext = zext <2 x i32> %ld to <2 x i64>
106*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %ext, <2 x i64> addrspace(3)* %out
107*9880d681SAndroid Build Coastguard Worker  ret void
108*9880d681SAndroid Build Coastguard Worker}
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v2i32_to_v2i64:
111*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v2i32_to_v2i64(<2 x i64> addrspace(3)* %out, <2 x i32> addrspace(3)* %in) #0 {
112*9880d681SAndroid Build Coastguard Worker  %ld = load <2 x i32>, <2 x i32> addrspace(3)* %in
113*9880d681SAndroid Build Coastguard Worker  %ext = sext <2 x i32> %ld to <2 x i64>
114*9880d681SAndroid Build Coastguard Worker  store <2 x i64> %ext, <2 x i64> addrspace(3)* %out
115*9880d681SAndroid Build Coastguard Worker  ret void
116*9880d681SAndroid Build Coastguard Worker}
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v4i32_to_v4i64:
119*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v4i32_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i32> addrspace(3)* %in) #0 {
120*9880d681SAndroid Build Coastguard Worker  %ld = load <4 x i32>, <4 x i32> addrspace(3)* %in
121*9880d681SAndroid Build Coastguard Worker  %ext = zext <4 x i32> %ld to <4 x i64>
122*9880d681SAndroid Build Coastguard Worker  store <4 x i64> %ext, <4 x i64> addrspace(3)* %out
123*9880d681SAndroid Build Coastguard Worker  ret void
124*9880d681SAndroid Build Coastguard Worker}
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v4i32_to_v4i64:
127*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v4i32_to_v4i64(<4 x i64> addrspace(3)* %out, <4 x i32> addrspace(3)* %in) #0 {
128*9880d681SAndroid Build Coastguard Worker  %ld = load <4 x i32>, <4 x i32> addrspace(3)* %in
129*9880d681SAndroid Build Coastguard Worker  %ext = sext <4 x i32> %ld to <4 x i64>
130*9880d681SAndroid Build Coastguard Worker  store <4 x i64> %ext, <4 x i64> addrspace(3)* %out
131*9880d681SAndroid Build Coastguard Worker  ret void
132*9880d681SAndroid Build Coastguard Worker}
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v8i32_to_v8i64:
135*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v8i32_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i32> addrspace(3)* %in) #0 {
136*9880d681SAndroid Build Coastguard Worker  %ld = load <8 x i32>, <8 x i32> addrspace(3)* %in
137*9880d681SAndroid Build Coastguard Worker  %ext = zext <8 x i32> %ld to <8 x i64>
138*9880d681SAndroid Build Coastguard Worker  store <8 x i64> %ext, <8 x i64> addrspace(3)* %out
139*9880d681SAndroid Build Coastguard Worker  ret void
140*9880d681SAndroid Build Coastguard Worker}
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v8i32_to_v8i64:
143*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v8i32_to_v8i64(<8 x i64> addrspace(3)* %out, <8 x i32> addrspace(3)* %in) #0 {
144*9880d681SAndroid Build Coastguard Worker  %ld = load <8 x i32>, <8 x i32> addrspace(3)* %in
145*9880d681SAndroid Build Coastguard Worker  %ext = sext <8 x i32> %ld to <8 x i64>
146*9880d681SAndroid Build Coastguard Worker  store <8 x i64> %ext, <8 x i64> addrspace(3)* %out
147*9880d681SAndroid Build Coastguard Worker  ret void
148*9880d681SAndroid Build Coastguard Worker}
149*9880d681SAndroid Build Coastguard Worker
150*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v16i32_to_v16i64:
151*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v16i32_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i32> addrspace(3)* %in) #0 {
152*9880d681SAndroid Build Coastguard Worker  %ld = load <16 x i32>, <16 x i32> addrspace(3)* %in
153*9880d681SAndroid Build Coastguard Worker  %ext = sext <16 x i32> %ld to <16 x i64>
154*9880d681SAndroid Build Coastguard Worker  store <16 x i64> %ext, <16 x i64> addrspace(3)* %out
155*9880d681SAndroid Build Coastguard Worker  ret void
156*9880d681SAndroid Build Coastguard Worker}
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_zextload_v16i32_to_v16i64
159*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v16i32_to_v16i64(<16 x i64> addrspace(3)* %out, <16 x i32> addrspace(3)* %in) #0 {
160*9880d681SAndroid Build Coastguard Worker  %ld = load <16 x i32>, <16 x i32> addrspace(3)* %in
161*9880d681SAndroid Build Coastguard Worker  %ext = zext <16 x i32> %ld to <16 x i64>
162*9880d681SAndroid Build Coastguard Worker  store <16 x i64> %ext, <16 x i64> addrspace(3)* %out
163*9880d681SAndroid Build Coastguard Worker  ret void
164*9880d681SAndroid Build Coastguard Worker}
165*9880d681SAndroid Build Coastguard Worker
166*9880d681SAndroid Build Coastguard Worker; FUNC-LABEL: {{^}}local_sextload_v32i32_to_v32i64:
167*9880d681SAndroid Build Coastguard Workerdefine void @local_sextload_v32i32_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i32> addrspace(3)* %in) #0 {
168*9880d681SAndroid Build Coastguard Worker  %ld = load <32 x i32>, <32 x i32> addrspace(3)* %in
169*9880d681SAndroid Build Coastguard Worker  %ext = sext <32 x i32> %ld to <32 x i64>
170*9880d681SAndroid Build Coastguard Worker  store <32 x i64> %ext, <32 x i64> 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_zextload_v32i32_to_v32i64:
175*9880d681SAndroid Build Coastguard Workerdefine void @local_zextload_v32i32_to_v32i64(<32 x i64> addrspace(3)* %out, <32 x i32> addrspace(3)* %in) #0 {
176*9880d681SAndroid Build Coastguard Worker  %ld = load <32 x i32>, <32 x i32> addrspace(3)* %in
177*9880d681SAndroid Build Coastguard Worker  %ext = zext <32 x i32> %ld to <32 x i64>
178*9880d681SAndroid Build Coastguard Worker  store <32 x i64> %ext, <32 x i64> addrspace(3)* %out
179*9880d681SAndroid Build Coastguard Worker  ret void
180*9880d681SAndroid Build Coastguard Worker}
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Workerattributes #0 = { nounwind }
183