[OpenACC] Create AST nodes for 'data' constructs
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / llvm.amdgcn.permlane.ll
blob71961a57bd080dddd6c802be934d8f0aee88c011
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -global-isel=0 -amdgpu-load-store-vectorizer=0 -mtriple=amdgcn -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10,GFX10-SDAG %s
3 ; RUN: llc -global-isel=1 -amdgpu-load-store-vectorizer=0 -mtriple=amdgcn -mcpu=gfx1010 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX10,GFX10-GISEL %s
4 ; RUN: llc -global-isel=0 -amdgpu-load-store-vectorizer=0 -mtriple=amdgcn -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX11,GFX11-SDAG %s
5 ; RUN: llc -global-isel=1 -amdgpu-load-store-vectorizer=0 -mtriple=amdgcn -mcpu=gfx1100 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX11,GFX11-GISEL %s
6 ; RUN: llc -global-isel=0 -amdgpu-load-store-vectorizer=0 -mtriple=amdgcn -mcpu=gfx1200 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX12,GFX12-SDAG %s
7 ; RUN: llc -global-isel=1 -amdgpu-load-store-vectorizer=0 -mtriple=amdgcn -mcpu=gfx1200 -verify-machineinstrs < %s | FileCheck -check-prefixes=GFX12,GFX12-GISEL %s
9 declare i32 @llvm.amdgcn.permlane16(i32, i32, i32, i32, i1, i1)
10 declare i32 @llvm.amdgcn.permlanex16(i32, i32, i32, i32, i1, i1)
11 declare i32 @llvm.amdgcn.workitem.id.x()
12 declare i32 @llvm.amdgcn.workitem.id.y()
14 define amdgpu_kernel void @v_permlane16_b32_vss_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
15 ; GFX10-LABEL: v_permlane16_b32_vss_i32:
16 ; GFX10:       ; %bb.0:
17 ; GFX10-NEXT:    s_clause 0x1
18 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
19 ; GFX10-NEXT:    s_load_dword s6, s[4:5], 0x34
20 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
21 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
22 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
23 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s3, s6
24 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
25 ; GFX10-NEXT:    s_endpgm
27 ; GFX11-LABEL: v_permlane16_b32_vss_i32:
28 ; GFX11:       ; %bb.0:
29 ; GFX11-NEXT:    s_clause 0x1
30 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
31 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
32 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
33 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
34 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
35 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s3, s4
36 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
37 ; GFX11-NEXT:    s_endpgm
39 ; GFX12-LABEL: v_permlane16_b32_vss_i32:
40 ; GFX12:       ; %bb.0:
41 ; GFX12-NEXT:    s_clause 0x1
42 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
43 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
44 ; GFX12-NEXT:    s_wait_kmcnt 0x0
45 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
46 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
47 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s3, s4
48 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
49 ; GFX12-NEXT:    s_endpgm
50   %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 false, i1 false)
51   store i32 %v, ptr addrspace(1) %out
52   ret void
55 define amdgpu_kernel void @v_permlane16_b32_vss_f32(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {
56 ; GFX10-LABEL: v_permlane16_b32_vss_f32:
57 ; GFX10:       ; %bb.0:
58 ; GFX10-NEXT:    s_clause 0x1
59 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
60 ; GFX10-NEXT:    s_load_dword s6, s[4:5], 0x34
61 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
62 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
63 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
64 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s3, s6
65 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
66 ; GFX10-NEXT:    s_endpgm
68 ; GFX11-LABEL: v_permlane16_b32_vss_f32:
69 ; GFX11:       ; %bb.0:
70 ; GFX11-NEXT:    s_clause 0x1
71 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
72 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
73 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
74 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
75 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
76 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s3, s4
77 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
78 ; GFX11-NEXT:    s_endpgm
80 ; GFX12-LABEL: v_permlane16_b32_vss_f32:
81 ; GFX12:       ; %bb.0:
82 ; GFX12-NEXT:    s_clause 0x1
83 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
84 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
85 ; GFX12-NEXT:    s_wait_kmcnt 0x0
86 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
87 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
88 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s3, s4
89 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
90 ; GFX12-NEXT:    s_endpgm
91   %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 %src1, i32 %src2, i1 false, i1 false)
92   store float %v, ptr addrspace(1) %out
93   ret void
96 define amdgpu_kernel void @v_permlane16_b32_vss_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1, i32 %src2) {
97 ; GFX10-SDAG-LABEL: v_permlane16_b32_vss_i64:
98 ; GFX10-SDAG:       ; %bb.0:
99 ; GFX10-SDAG-NEXT:    s_clause 0x1
100 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
101 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
102 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
103 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
104 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
105 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
106 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s6, s7
107 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s6, s7
108 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
109 ; GFX10-SDAG-NEXT:    s_endpgm
111 ; GFX10-GISEL-LABEL: v_permlane16_b32_vss_i64:
112 ; GFX10-GISEL:       ; %bb.0:
113 ; GFX10-GISEL-NEXT:    s_clause 0x1
114 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
115 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
116 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
117 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
118 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
119 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
120 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s6, s7
121 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s6, s7
122 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
123 ; GFX10-GISEL-NEXT:    s_endpgm
125 ; GFX11-SDAG-LABEL: v_permlane16_b32_vss_i64:
126 ; GFX11-SDAG:       ; %bb.0:
127 ; GFX11-SDAG-NEXT:    s_clause 0x1
128 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
129 ; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
130 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
131 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
132 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
133 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
134 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5
135 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5
136 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
137 ; GFX11-SDAG-NEXT:    s_endpgm
139 ; GFX11-GISEL-LABEL: v_permlane16_b32_vss_i64:
140 ; GFX11-GISEL:       ; %bb.0:
141 ; GFX11-GISEL-NEXT:    s_clause 0x1
142 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
143 ; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
144 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
145 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
146 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
147 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
148 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5
149 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5
150 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
151 ; GFX11-GISEL-NEXT:    s_endpgm
153 ; GFX12-SDAG-LABEL: v_permlane16_b32_vss_i64:
154 ; GFX12-SDAG:       ; %bb.0:
155 ; GFX12-SDAG-NEXT:    s_clause 0x1
156 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
157 ; GFX12-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
158 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
159 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
160 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
161 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
162 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5
163 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5
164 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
165 ; GFX12-SDAG-NEXT:    s_endpgm
167 ; GFX12-GISEL-LABEL: v_permlane16_b32_vss_i64:
168 ; GFX12-GISEL:       ; %bb.0:
169 ; GFX12-GISEL-NEXT:    s_clause 0x1
170 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
171 ; GFX12-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
172 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
173 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
174 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
175 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
176 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5
177 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5
178 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
179 ; GFX12-GISEL-NEXT:    s_endpgm
180   %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %src2, i1 false, i1 false)
181   store i64 %v, ptr addrspace(1) %out
182   ret void
185 define amdgpu_kernel void @v_permlane16_b32_vss_f64(ptr addrspace(1) %out, double %src0, i32 %src1, i32 %src2) {
186 ; GFX10-SDAG-LABEL: v_permlane16_b32_vss_f64:
187 ; GFX10-SDAG:       ; %bb.0:
188 ; GFX10-SDAG-NEXT:    s_clause 0x1
189 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
190 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
191 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
192 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
193 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
194 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
195 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s6, s7
196 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s6, s7
197 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
198 ; GFX10-SDAG-NEXT:    s_endpgm
200 ; GFX10-GISEL-LABEL: v_permlane16_b32_vss_f64:
201 ; GFX10-GISEL:       ; %bb.0:
202 ; GFX10-GISEL-NEXT:    s_clause 0x1
203 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
204 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
205 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
206 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
207 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
208 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
209 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s6, s7
210 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s6, s7
211 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
212 ; GFX10-GISEL-NEXT:    s_endpgm
214 ; GFX11-SDAG-LABEL: v_permlane16_b32_vss_f64:
215 ; GFX11-SDAG:       ; %bb.0:
216 ; GFX11-SDAG-NEXT:    s_clause 0x1
217 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
218 ; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
219 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
220 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
221 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
222 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
223 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5
224 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5
225 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
226 ; GFX11-SDAG-NEXT:    s_endpgm
228 ; GFX11-GISEL-LABEL: v_permlane16_b32_vss_f64:
229 ; GFX11-GISEL:       ; %bb.0:
230 ; GFX11-GISEL-NEXT:    s_clause 0x1
231 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
232 ; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
233 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
234 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
235 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
236 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
237 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5
238 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5
239 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
240 ; GFX11-GISEL-NEXT:    s_endpgm
242 ; GFX12-SDAG-LABEL: v_permlane16_b32_vss_f64:
243 ; GFX12-SDAG:       ; %bb.0:
244 ; GFX12-SDAG-NEXT:    s_clause 0x1
245 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
246 ; GFX12-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
247 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
248 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
249 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
250 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
251 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5
252 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5
253 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
254 ; GFX12-SDAG-NEXT:    s_endpgm
256 ; GFX12-GISEL-LABEL: v_permlane16_b32_vss_f64:
257 ; GFX12-GISEL:       ; %bb.0:
258 ; GFX12-GISEL-NEXT:    s_clause 0x1
259 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
260 ; GFX12-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
261 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
262 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
263 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
264 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
265 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5
266 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5
267 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
268 ; GFX12-GISEL-NEXT:    s_endpgm
269   %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 %src1, i32 %src2, i1 false, i1 false)
270   store double %v, ptr addrspace(1) %out
271   ret void
274 define amdgpu_kernel void @v_permlane16_b32_vii_i32(ptr addrspace(1) %out, i32 %src0) {
275 ; GFX10-LABEL: v_permlane16_b32_vii_i32:
276 ; GFX10:       ; %bb.0:
277 ; GFX10-NEXT:    s_clause 0x1
278 ; GFX10-NEXT:    s_load_dword s2, s[4:5], 0x2c
279 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
280 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
281 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
282 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
283 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, 1, 2
284 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
285 ; GFX10-NEXT:    s_endpgm
287 ; GFX11-LABEL: v_permlane16_b32_vii_i32:
288 ; GFX11:       ; %bb.0:
289 ; GFX11-NEXT:    s_clause 0x1
290 ; GFX11-NEXT:    s_load_b32 s2, s[4:5], 0x2c
291 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
292 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
293 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
294 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
295 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, 1, 2
296 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
297 ; GFX11-NEXT:    s_endpgm
299 ; GFX12-LABEL: v_permlane16_b32_vii_i32:
300 ; GFX12:       ; %bb.0:
301 ; GFX12-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24
302 ; GFX12-NEXT:    s_wait_kmcnt 0x0
303 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
304 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
305 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, 1, 2
306 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
307 ; GFX12-NEXT:    s_endpgm
308   %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 1, i32 2, i1 false, i1 false)
309   store i32 %v, ptr addrspace(1) %out
310   ret void
313 define amdgpu_kernel void @v_permlane16_b32_vii_f32(ptr addrspace(1) %out, float %src0) {
314 ; GFX10-LABEL: v_permlane16_b32_vii_f32:
315 ; GFX10:       ; %bb.0:
316 ; GFX10-NEXT:    s_clause 0x1
317 ; GFX10-NEXT:    s_load_dword s2, s[4:5], 0x2c
318 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
319 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
320 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
321 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
322 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, 1, 2
323 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
324 ; GFX10-NEXT:    s_endpgm
326 ; GFX11-LABEL: v_permlane16_b32_vii_f32:
327 ; GFX11:       ; %bb.0:
328 ; GFX11-NEXT:    s_clause 0x1
329 ; GFX11-NEXT:    s_load_b32 s2, s[4:5], 0x2c
330 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
331 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
332 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
333 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
334 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, 1, 2
335 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
336 ; GFX11-NEXT:    s_endpgm
338 ; GFX12-LABEL: v_permlane16_b32_vii_f32:
339 ; GFX12:       ; %bb.0:
340 ; GFX12-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24
341 ; GFX12-NEXT:    s_wait_kmcnt 0x0
342 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
343 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
344 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, 1, 2
345 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
346 ; GFX12-NEXT:    s_endpgm
347   %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 1, i32 2, i1 false, i1 false)
348   store float %v, ptr addrspace(1) %out
349   ret void
352 define amdgpu_kernel void @v_permlane16_b32_vii_i64(ptr addrspace(1) %out, i64 %src0) {
353 ; GFX10-SDAG-LABEL: v_permlane16_b32_vii_i64:
354 ; GFX10-SDAG:       ; %bb.0:
355 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
356 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
357 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
358 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
359 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
360 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, 1, 2
361 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, 1, 2
362 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
363 ; GFX10-SDAG-NEXT:    s_endpgm
365 ; GFX10-GISEL-LABEL: v_permlane16_b32_vii_i64:
366 ; GFX10-GISEL:       ; %bb.0:
367 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
368 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
369 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
370 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
371 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
372 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, 1, 2
373 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, 1, 2
374 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
375 ; GFX10-GISEL-NEXT:    s_endpgm
377 ; GFX11-SDAG-LABEL: v_permlane16_b32_vii_i64:
378 ; GFX11-SDAG:       ; %bb.0:
379 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
380 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
381 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
382 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
383 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
384 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, 1, 2
385 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, 1, 2
386 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
387 ; GFX11-SDAG-NEXT:    s_endpgm
389 ; GFX11-GISEL-LABEL: v_permlane16_b32_vii_i64:
390 ; GFX11-GISEL:       ; %bb.0:
391 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
392 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
393 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
394 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
395 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
396 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, 1, 2
397 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, 1, 2
398 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
399 ; GFX11-GISEL-NEXT:    s_endpgm
401 ; GFX12-SDAG-LABEL: v_permlane16_b32_vii_i64:
402 ; GFX12-SDAG:       ; %bb.0:
403 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
404 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
405 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
406 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
407 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
408 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, 1, 2
409 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, 1, 2
410 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
411 ; GFX12-SDAG-NEXT:    s_endpgm
413 ; GFX12-GISEL-LABEL: v_permlane16_b32_vii_i64:
414 ; GFX12-GISEL:       ; %bb.0:
415 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
416 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
417 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
418 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
419 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
420 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, 1, 2
421 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, 1, 2
422 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
423 ; GFX12-GISEL-NEXT:    s_endpgm
424   %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 1, i32 2, i1 false, i1 false)
425   store i64 %v, ptr addrspace(1) %out
426   ret void
429 define amdgpu_kernel void @v_permlane16_b32_vii_f64(ptr addrspace(1) %out, double %src0) {
430 ; GFX10-SDAG-LABEL: v_permlane16_b32_vii_f64:
431 ; GFX10-SDAG:       ; %bb.0:
432 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
433 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
434 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
435 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
436 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
437 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, 1, 2
438 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, 1, 2
439 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
440 ; GFX10-SDAG-NEXT:    s_endpgm
442 ; GFX10-GISEL-LABEL: v_permlane16_b32_vii_f64:
443 ; GFX10-GISEL:       ; %bb.0:
444 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
445 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
446 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
447 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
448 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
449 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, 1, 2
450 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, 1, 2
451 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
452 ; GFX10-GISEL-NEXT:    s_endpgm
454 ; GFX11-SDAG-LABEL: v_permlane16_b32_vii_f64:
455 ; GFX11-SDAG:       ; %bb.0:
456 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
457 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
458 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
459 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
460 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
461 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, 1, 2
462 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, 1, 2
463 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
464 ; GFX11-SDAG-NEXT:    s_endpgm
466 ; GFX11-GISEL-LABEL: v_permlane16_b32_vii_f64:
467 ; GFX11-GISEL:       ; %bb.0:
468 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
469 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
470 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
471 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
472 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
473 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, 1, 2
474 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, 1, 2
475 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
476 ; GFX11-GISEL-NEXT:    s_endpgm
478 ; GFX12-SDAG-LABEL: v_permlane16_b32_vii_f64:
479 ; GFX12-SDAG:       ; %bb.0:
480 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
481 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
482 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
483 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
484 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
485 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, 1, 2
486 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, 1, 2
487 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
488 ; GFX12-SDAG-NEXT:    s_endpgm
490 ; GFX12-GISEL-LABEL: v_permlane16_b32_vii_f64:
491 ; GFX12-GISEL:       ; %bb.0:
492 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
493 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
494 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
495 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
496 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
497 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, 1, 2
498 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, 1, 2
499 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
500 ; GFX12-GISEL-NEXT:    s_endpgm
501   %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 1, i32 2, i1 false, i1 false)
502   store double %v, ptr addrspace(1) %out
503   ret void
506 ; FIXME-GFX10PLUS: It is allowed to have both immediates as literals
507 define amdgpu_kernel void @v_permlane16_b32_vll_i32(ptr addrspace(1) %out, i32 %src0) {
508 ; GFX10-LABEL: v_permlane16_b32_vll_i32:
509 ; GFX10:       ; %bb.0:
510 ; GFX10-NEXT:    s_clause 0x1
511 ; GFX10-NEXT:    s_load_dword s2, s[4:5], 0x2c
512 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
513 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
514 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
515 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
516 ; GFX10-NEXT:    s_movk_i32 s2, 0x1234
517 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
518 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
519 ; GFX10-NEXT:    s_endpgm
521 ; GFX11-LABEL: v_permlane16_b32_vll_i32:
522 ; GFX11:       ; %bb.0:
523 ; GFX11-NEXT:    s_clause 0x1
524 ; GFX11-NEXT:    s_load_b32 s2, s[4:5], 0x2c
525 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
526 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
527 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
528 ; GFX11-NEXT:    s_movk_i32 s2, 0x1234
529 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
530 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
531 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
532 ; GFX11-NEXT:    s_endpgm
534 ; GFX12-LABEL: v_permlane16_b32_vll_i32:
535 ; GFX12:       ; %bb.0:
536 ; GFX12-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24
537 ; GFX12-NEXT:    s_wait_kmcnt 0x0
538 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
539 ; GFX12-NEXT:    s_movk_i32 s2, 0x1234
540 ; GFX12-NEXT:    s_wait_alu 0xfffe
541 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
542 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
543 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
544 ; GFX12-NEXT:    s_endpgm
545   %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 4660, i32 49617, i1 false, i1 false)
546   store i32 %v, ptr addrspace(1) %out
547   ret void
550 define amdgpu_kernel void @v_permlane16_b32_vll_i64(ptr addrspace(1) %out, i64 %src0) {
551 ; GFX10-SDAG-LABEL: v_permlane16_b32_vll_i64:
552 ; GFX10-SDAG:       ; %bb.0:
553 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
554 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
555 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
556 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
557 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
558 ; GFX10-SDAG-NEXT:    s_movk_i32 s2, 0x1234
559 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s2, 0xc1d1
560 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
561 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
562 ; GFX10-SDAG-NEXT:    s_endpgm
564 ; GFX10-GISEL-LABEL: v_permlane16_b32_vll_i64:
565 ; GFX10-GISEL:       ; %bb.0:
566 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
567 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
568 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
569 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
570 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
571 ; GFX10-GISEL-NEXT:    s_movk_i32 s2, 0x1234
572 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
573 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s2, 0xc1d1
574 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
575 ; GFX10-GISEL-NEXT:    s_endpgm
577 ; GFX11-SDAG-LABEL: v_permlane16_b32_vll_i64:
578 ; GFX11-SDAG:       ; %bb.0:
579 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
580 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
581 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
582 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
583 ; GFX11-SDAG-NEXT:    s_movk_i32 s2, 0x1234
584 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
585 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s2, 0xc1d1
586 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
587 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
588 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
589 ; GFX11-SDAG-NEXT:    s_endpgm
591 ; GFX11-GISEL-LABEL: v_permlane16_b32_vll_i64:
592 ; GFX11-GISEL:       ; %bb.0:
593 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
594 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
595 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
596 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
597 ; GFX11-GISEL-NEXT:    s_movk_i32 s2, 0x1234
598 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
599 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
600 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
601 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s2, 0xc1d1
602 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
603 ; GFX11-GISEL-NEXT:    s_endpgm
605 ; GFX12-SDAG-LABEL: v_permlane16_b32_vll_i64:
606 ; GFX12-SDAG:       ; %bb.0:
607 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
608 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
609 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
610 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
611 ; GFX12-SDAG-NEXT:    s_movk_i32 s2, 0x1234
612 ; GFX12-SDAG-NEXT:    s_wait_alu 0xfffe
613 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
614 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s2, 0xc1d1
615 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
616 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
617 ; GFX12-SDAG-NEXT:    s_endpgm
619 ; GFX12-GISEL-LABEL: v_permlane16_b32_vll_i64:
620 ; GFX12-GISEL:       ; %bb.0:
621 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
622 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
623 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
624 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
625 ; GFX12-GISEL-NEXT:    s_movk_i32 s2, 0x1234
626 ; GFX12-GISEL-NEXT:    s_wait_alu 0xfffe
627 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
628 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
629 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s2, 0xc1d1
630 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
631 ; GFX12-GISEL-NEXT:    s_endpgm
632   %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 4660, i32 49617, i1 false, i1 false)
633   store i64 %v, ptr addrspace(1) %out
634   ret void
637 define amdgpu_kernel void @v_permlane16_b32_vll_f32(ptr addrspace(1) %out,float %src0) {
638 ; GFX10-LABEL: v_permlane16_b32_vll_f32:
639 ; GFX10:       ; %bb.0:
640 ; GFX10-NEXT:    s_clause 0x1
641 ; GFX10-NEXT:    s_load_dword s2, s[4:5], 0x2c
642 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
643 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
644 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
645 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
646 ; GFX10-NEXT:    s_movk_i32 s2, 0x1234
647 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
648 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
649 ; GFX10-NEXT:    s_endpgm
651 ; GFX11-LABEL: v_permlane16_b32_vll_f32:
652 ; GFX11:       ; %bb.0:
653 ; GFX11-NEXT:    s_clause 0x1
654 ; GFX11-NEXT:    s_load_b32 s2, s[4:5], 0x2c
655 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
656 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
657 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
658 ; GFX11-NEXT:    s_movk_i32 s2, 0x1234
659 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
660 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
661 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
662 ; GFX11-NEXT:    s_endpgm
664 ; GFX12-LABEL: v_permlane16_b32_vll_f32:
665 ; GFX12:       ; %bb.0:
666 ; GFX12-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24
667 ; GFX12-NEXT:    s_wait_kmcnt 0x0
668 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
669 ; GFX12-NEXT:    s_movk_i32 s2, 0x1234
670 ; GFX12-NEXT:    s_wait_alu 0xfffe
671 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
672 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
673 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
674 ; GFX12-NEXT:    s_endpgm
675   %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 4660, i32 49617, i1 false, i1 false)
676   store float %v, ptr addrspace(1) %out
677   ret void
680 define amdgpu_kernel void @v_permlane16_b32_vll_f64(ptr addrspace(1) %out, double %src0) {
681 ; GFX10-SDAG-LABEL: v_permlane16_b32_vll_f64:
682 ; GFX10-SDAG:       ; %bb.0:
683 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
684 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
685 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
686 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
687 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
688 ; GFX10-SDAG-NEXT:    s_movk_i32 s2, 0x1234
689 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s2, 0xc1d1
690 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
691 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
692 ; GFX10-SDAG-NEXT:    s_endpgm
694 ; GFX10-GISEL-LABEL: v_permlane16_b32_vll_f64:
695 ; GFX10-GISEL:       ; %bb.0:
696 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
697 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
698 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
699 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
700 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
701 ; GFX10-GISEL-NEXT:    s_movk_i32 s2, 0x1234
702 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
703 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s2, 0xc1d1
704 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
705 ; GFX10-GISEL-NEXT:    s_endpgm
707 ; GFX11-SDAG-LABEL: v_permlane16_b32_vll_f64:
708 ; GFX11-SDAG:       ; %bb.0:
709 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
710 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
711 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
712 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
713 ; GFX11-SDAG-NEXT:    s_movk_i32 s2, 0x1234
714 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
715 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s2, 0xc1d1
716 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
717 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
718 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
719 ; GFX11-SDAG-NEXT:    s_endpgm
721 ; GFX11-GISEL-LABEL: v_permlane16_b32_vll_f64:
722 ; GFX11-GISEL:       ; %bb.0:
723 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
724 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
725 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
726 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
727 ; GFX11-GISEL-NEXT:    s_movk_i32 s2, 0x1234
728 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
729 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
730 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
731 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s2, 0xc1d1
732 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
733 ; GFX11-GISEL-NEXT:    s_endpgm
735 ; GFX12-SDAG-LABEL: v_permlane16_b32_vll_f64:
736 ; GFX12-SDAG:       ; %bb.0:
737 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
738 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
739 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
740 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
741 ; GFX12-SDAG-NEXT:    s_movk_i32 s2, 0x1234
742 ; GFX12-SDAG-NEXT:    s_wait_alu 0xfffe
743 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
744 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s2, 0xc1d1
745 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
746 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
747 ; GFX12-SDAG-NEXT:    s_endpgm
749 ; GFX12-GISEL-LABEL: v_permlane16_b32_vll_f64:
750 ; GFX12-GISEL:       ; %bb.0:
751 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
752 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
753 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
754 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
755 ; GFX12-GISEL-NEXT:    s_movk_i32 s2, 0x1234
756 ; GFX12-GISEL-NEXT:    s_wait_alu 0xfffe
757 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
758 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s2, 0xc1d1
759 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s2, 0xc1d1
760 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
761 ; GFX12-GISEL-NEXT:    s_endpgm
762   %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 4660, i32 49617, i1 false, i1 false)
763   store double %v, ptr addrspace(1) %out
764   ret void
767 define amdgpu_kernel void @v_permlane16_b32_vvv_i32(ptr addrspace(1) %out, i32 %src0) {
768 ; GFX10-SDAG-LABEL: v_permlane16_b32_vvv_i32:
769 ; GFX10-SDAG:       ; %bb.0:
770 ; GFX10-SDAG-NEXT:    s_clause 0x1
771 ; GFX10-SDAG-NEXT:    s_load_dword s2, s[4:5], 0x2c
772 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
773 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s3, v0
774 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
775 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
776 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s2, v1
777 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, 0
778 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s3, s2
779 ; GFX10-SDAG-NEXT:    global_store_dword v1, v0, s[0:1]
780 ; GFX10-SDAG-NEXT:    s_endpgm
782 ; GFX10-GISEL-LABEL: v_permlane16_b32_vvv_i32:
783 ; GFX10-GISEL:       ; %bb.0:
784 ; GFX10-GISEL-NEXT:    s_clause 0x1
785 ; GFX10-GISEL-NEXT:    s_load_dword s2, s[4:5], 0x2c
786 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
787 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s3, v0
788 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
789 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v1
790 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0
791 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
792 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
793 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s3, s4
794 ; GFX10-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]
795 ; GFX10-GISEL-NEXT:    s_endpgm
797 ; GFX11-SDAG-LABEL: v_permlane16_b32_vvv_i32:
798 ; GFX11-SDAG:       ; %bb.0:
799 ; GFX11-SDAG-NEXT:    s_clause 0x1
800 ; GFX11-SDAG-NEXT:    s_load_b32 s2, s[4:5], 0x2c
801 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
802 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
803 ; GFX11-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
804 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
805 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s3, v1
806 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
807 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v1, s2
808 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
809 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, 0
810 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
811 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s3, s2
812 ; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
813 ; GFX11-SDAG-NEXT:    s_endpgm
815 ; GFX11-GISEL-LABEL: v_permlane16_b32_vvv_i32:
816 ; GFX11-GISEL:       ; %bb.0:
817 ; GFX11-GISEL-NEXT:    s_clause 0x1
818 ; GFX11-GISEL-NEXT:    s_load_b32 s2, s[4:5], 0x2c
819 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
820 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
821 ; GFX11-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
822 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
823 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
824 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
825 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, s2
826 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s3, v1
827 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v1, 0
828 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s3, s4
829 ; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
830 ; GFX11-GISEL-NEXT:    s_endpgm
832 ; GFX12-SDAG-LABEL: v_permlane16_b32_vvv_i32:
833 ; GFX12-SDAG:       ; %bb.0:
834 ; GFX12-SDAG-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24
835 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
836 ; GFX12-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
837 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
838 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s3, v1
839 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
840 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v1, s2
841 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
842 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, 0
843 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
844 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s3, s2
845 ; GFX12-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
846 ; GFX12-SDAG-NEXT:    s_endpgm
848 ; GFX12-GISEL-LABEL: v_permlane16_b32_vvv_i32:
849 ; GFX12-GISEL:       ; %bb.0:
850 ; GFX12-GISEL-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24
851 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
852 ; GFX12-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
853 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
854 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
855 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
856 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v0, s2
857 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s3, v1
858 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v1, 0
859 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s3, s4
860 ; GFX12-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
861 ; GFX12-GISEL-NEXT:    s_endpgm
862   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
863   %tidy = call i32 @llvm.amdgcn.workitem.id.y()
864   %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 %tidx, i32 %tidy, i1 false, i1 false)
865   store i32 %v, ptr addrspace(1) %out
866   ret void
869 define amdgpu_kernel void @v_permlane16_b32_vvv_i64(ptr addrspace(1) %out, i64 %src0) {
870 ; GFX10-SDAG-LABEL: v_permlane16_b32_vvv_i64:
871 ; GFX10-SDAG:       ; %bb.0:
872 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
873 ; GFX10-SDAG-NEXT:    s_mov_b32 null, 0
874 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v0
875 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s5, v1
876 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
877 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
878 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
879 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
880 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5
881 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5
882 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
883 ; GFX10-SDAG-NEXT:    s_endpgm
885 ; GFX10-GISEL-LABEL: v_permlane16_b32_vvv_i64:
886 ; GFX10-GISEL:       ; %bb.0:
887 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
888 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
889 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
890 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s5, v1
891 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
892 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
893 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
894 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
895 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5
896 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5
897 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
898 ; GFX10-GISEL-NEXT:    s_endpgm
900 ; GFX11-LABEL: v_permlane16_b32_vvv_i64:
901 ; GFX11:       ; %bb.0:
902 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
903 ; GFX11-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
904 ; GFX11-NEXT:    v_bfe_u32 v0, v0, 10, 10
905 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0
906 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
907 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v0
908 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
909 ; GFX11-NEXT:    v_mov_b32_e32 v0, s2
910 ; GFX11-NEXT:    v_readfirstlane_b32 s4, v1
911 ; GFX11-NEXT:    v_mov_b32_e32 v1, s3
912 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s4, s5
913 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
914 ; GFX11-NEXT:    v_permlane16_b32 v1, v1, s4, s5
915 ; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
916 ; GFX11-NEXT:    s_endpgm
918 ; GFX12-LABEL: v_permlane16_b32_vvv_i64:
919 ; GFX12:       ; %bb.0:
920 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
921 ; GFX12-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
922 ; GFX12-NEXT:    v_bfe_u32 v0, v0, 10, 10
923 ; GFX12-NEXT:    v_mov_b32_e32 v2, 0
924 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
925 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v0
926 ; GFX12-NEXT:    s_wait_kmcnt 0x0
927 ; GFX12-NEXT:    v_mov_b32_e32 v0, s2
928 ; GFX12-NEXT:    v_readfirstlane_b32 s4, v1
929 ; GFX12-NEXT:    v_mov_b32_e32 v1, s3
930 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s4, s5
931 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)
932 ; GFX12-NEXT:    v_permlane16_b32 v1, v1, s4, s5
933 ; GFX12-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
934 ; GFX12-NEXT:    s_endpgm
935   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
936   %tidy = call i32 @llvm.amdgcn.workitem.id.y()
937   %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 %tidx, i32 %tidy, i1 false, i1 false)
938   store i64 %v, ptr addrspace(1) %out
939   ret void
942 define amdgpu_kernel void @v_permlane16_b32_vvv_f32(ptr addrspace(1) %out, float %src0) {
943 ; GFX10-SDAG-LABEL: v_permlane16_b32_vvv_f32:
944 ; GFX10-SDAG:       ; %bb.0:
945 ; GFX10-SDAG-NEXT:    s_clause 0x1
946 ; GFX10-SDAG-NEXT:    s_load_dword s2, s[4:5], 0x2c
947 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
948 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s3, v0
949 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
950 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
951 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s2, v1
952 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, 0
953 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s3, s2
954 ; GFX10-SDAG-NEXT:    global_store_dword v1, v0, s[0:1]
955 ; GFX10-SDAG-NEXT:    s_endpgm
957 ; GFX10-GISEL-LABEL: v_permlane16_b32_vvv_f32:
958 ; GFX10-GISEL:       ; %bb.0:
959 ; GFX10-GISEL-NEXT:    s_clause 0x1
960 ; GFX10-GISEL-NEXT:    s_load_dword s2, s[4:5], 0x2c
961 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
962 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s3, v0
963 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
964 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v1
965 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0
966 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
967 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
968 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s3, s4
969 ; GFX10-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]
970 ; GFX10-GISEL-NEXT:    s_endpgm
972 ; GFX11-SDAG-LABEL: v_permlane16_b32_vvv_f32:
973 ; GFX11-SDAG:       ; %bb.0:
974 ; GFX11-SDAG-NEXT:    s_clause 0x1
975 ; GFX11-SDAG-NEXT:    s_load_b32 s2, s[4:5], 0x2c
976 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
977 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
978 ; GFX11-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
979 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
980 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s3, v1
981 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
982 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v1, s2
983 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
984 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, 0
985 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
986 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s3, s2
987 ; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
988 ; GFX11-SDAG-NEXT:    s_endpgm
990 ; GFX11-GISEL-LABEL: v_permlane16_b32_vvv_f32:
991 ; GFX11-GISEL:       ; %bb.0:
992 ; GFX11-GISEL-NEXT:    s_clause 0x1
993 ; GFX11-GISEL-NEXT:    s_load_b32 s2, s[4:5], 0x2c
994 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
995 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
996 ; GFX11-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
997 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
998 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
999 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1000 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1001 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s3, v1
1002 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v1, 0
1003 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s3, s4
1004 ; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
1005 ; GFX11-GISEL-NEXT:    s_endpgm
1007 ; GFX12-SDAG-LABEL: v_permlane16_b32_vvv_f32:
1008 ; GFX12-SDAG:       ; %bb.0:
1009 ; GFX12-SDAG-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24
1010 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
1011 ; GFX12-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
1012 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
1013 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s3, v1
1014 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
1015 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v1, s2
1016 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
1017 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, 0
1018 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1019 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s3, s2
1020 ; GFX12-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
1021 ; GFX12-SDAG-NEXT:    s_endpgm
1023 ; GFX12-GISEL-LABEL: v_permlane16_b32_vvv_f32:
1024 ; GFX12-GISEL:       ; %bb.0:
1025 ; GFX12-GISEL-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24
1026 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
1027 ; GFX12-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
1028 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
1029 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
1030 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
1031 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1032 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s3, v1
1033 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v1, 0
1034 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s3, s4
1035 ; GFX12-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
1036 ; GFX12-GISEL-NEXT:    s_endpgm
1037   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
1038   %tidy = call i32 @llvm.amdgcn.workitem.id.y()
1039   %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 %tidx, i32 %tidy, i1 false, i1 false)
1040   store float %v, ptr addrspace(1) %out
1041   ret void
1044 define amdgpu_kernel void @v_permlane16_b32_vvv_f64(ptr addrspace(1) %out, double %src0) {
1045 ; GFX10-SDAG-LABEL: v_permlane16_b32_vvv_f64:
1046 ; GFX10-SDAG:       ; %bb.0:
1047 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1048 ; GFX10-SDAG-NEXT:    s_mov_b32 null, 0
1049 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v0
1050 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s5, v1
1051 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
1052 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1053 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
1054 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
1055 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5
1056 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5
1057 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1058 ; GFX10-SDAG-NEXT:    s_endpgm
1060 ; GFX10-GISEL-LABEL: v_permlane16_b32_vvv_f64:
1061 ; GFX10-GISEL:       ; %bb.0:
1062 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1063 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
1064 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
1065 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s5, v1
1066 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
1067 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1068 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1069 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
1070 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5
1071 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5
1072 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1073 ; GFX10-GISEL-NEXT:    s_endpgm
1075 ; GFX11-LABEL: v_permlane16_b32_vvv_f64:
1076 ; GFX11:       ; %bb.0:
1077 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1078 ; GFX11-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
1079 ; GFX11-NEXT:    v_bfe_u32 v0, v0, 10, 10
1080 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0
1081 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
1082 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v0
1083 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1084 ; GFX11-NEXT:    v_mov_b32_e32 v0, s2
1085 ; GFX11-NEXT:    v_readfirstlane_b32 s4, v1
1086 ; GFX11-NEXT:    v_mov_b32_e32 v1, s3
1087 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s4, s5
1088 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1089 ; GFX11-NEXT:    v_permlane16_b32 v1, v1, s4, s5
1090 ; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1091 ; GFX11-NEXT:    s_endpgm
1093 ; GFX12-LABEL: v_permlane16_b32_vvv_f64:
1094 ; GFX12:       ; %bb.0:
1095 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1096 ; GFX12-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
1097 ; GFX12-NEXT:    v_bfe_u32 v0, v0, 10, 10
1098 ; GFX12-NEXT:    v_mov_b32_e32 v2, 0
1099 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
1100 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v0
1101 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1102 ; GFX12-NEXT:    v_mov_b32_e32 v0, s2
1103 ; GFX12-NEXT:    v_readfirstlane_b32 s4, v1
1104 ; GFX12-NEXT:    v_mov_b32_e32 v1, s3
1105 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s4, s5
1106 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1107 ; GFX12-NEXT:    v_permlane16_b32 v1, v1, s4, s5
1108 ; GFX12-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1109 ; GFX12-NEXT:    s_endpgm
1110   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
1111   %tidy = call i32 @llvm.amdgcn.workitem.id.y()
1112   %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 %tidx, i32 %tidy, i1 false, i1 false)
1113   store double %v, ptr addrspace(1) %out
1114   ret void
1117 define amdgpu_kernel void @v_permlane16_b32_vvs_i32(ptr addrspace(1) %out, i32 %src0, i32 %src2) {
1118 ; GFX10-SDAG-LABEL: v_permlane16_b32_vvs_i32:
1119 ; GFX10-SDAG:       ; %bb.0:
1120 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1121 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1122 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s2
1123 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
1124 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, 0
1125 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s2, s3
1126 ; GFX10-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]
1127 ; GFX10-SDAG-NEXT:    s_endpgm
1129 ; GFX10-GISEL-LABEL: v_permlane16_b32_vvs_i32:
1130 ; GFX10-GISEL:       ; %bb.0:
1131 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1132 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
1133 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
1134 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0
1135 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1136 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1137 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s3
1138 ; GFX10-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]
1139 ; GFX10-GISEL-NEXT:    s_endpgm
1141 ; GFX11-SDAG-LABEL: v_permlane16_b32_vvs_i32:
1142 ; GFX11-SDAG:       ; %bb.0:
1143 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1144 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1145 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0
1146 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1147 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
1148 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, 0
1149 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s2, s3
1150 ; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
1151 ; GFX11-SDAG-NEXT:    s_endpgm
1153 ; GFX11-GISEL-LABEL: v_permlane16_b32_vvs_i32:
1154 ; GFX11-GISEL:       ; %bb.0:
1155 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1156 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
1157 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1158 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
1159 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1160 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1161 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s3
1162 ; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
1163 ; GFX11-GISEL-NEXT:    s_endpgm
1165 ; GFX12-SDAG-LABEL: v_permlane16_b32_vvs_i32:
1166 ; GFX12-SDAG:       ; %bb.0:
1167 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1168 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
1169 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0
1170 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1171 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
1172 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, 0
1173 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s2, s3
1174 ; GFX12-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
1175 ; GFX12-SDAG-NEXT:    s_endpgm
1177 ; GFX12-GISEL-LABEL: v_permlane16_b32_vvs_i32:
1178 ; GFX12-GISEL:       ; %bb.0:
1179 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1180 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
1181 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1182 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
1183 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
1184 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1185 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s3
1186 ; GFX12-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
1187 ; GFX12-GISEL-NEXT:    s_endpgm
1188   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
1189   %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 %tidx, i32 %src2, i1 false, i1 false)
1190   store i32 %v, ptr addrspace(1) %out
1191   ret void
1194 define amdgpu_kernel void @v_permlane16_b32_vvs_i64(ptr addrspace(1) %out, i64 %src0, i32 %src2) {
1195 ; GFX10-SDAG-LABEL: v_permlane16_b32_vvs_i64:
1196 ; GFX10-SDAG:       ; %bb.0:
1197 ; GFX10-SDAG-NEXT:    s_clause 0x1
1198 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1199 ; GFX10-SDAG-NEXT:    s_load_dword s6, s[4:5], 0x34
1200 ; GFX10-SDAG-NEXT:    s_mov_b32 null, 0
1201 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v0
1202 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
1203 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1204 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
1205 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
1206 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s6
1207 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s6
1208 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1209 ; GFX10-SDAG-NEXT:    s_endpgm
1211 ; GFX10-GISEL-LABEL: v_permlane16_b32_vvs_i64:
1212 ; GFX10-GISEL:       ; %bb.0:
1213 ; GFX10-GISEL-NEXT:    s_clause 0x1
1214 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1215 ; GFX10-GISEL-NEXT:    s_load_dword s6, s[4:5], 0x34
1216 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
1217 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
1218 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
1219 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1220 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1221 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
1222 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s6
1223 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s6
1224 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1225 ; GFX10-GISEL-NEXT:    s_endpgm
1227 ; GFX11-LABEL: v_permlane16_b32_vvs_i64:
1228 ; GFX11:       ; %bb.0:
1229 ; GFX11-NEXT:    s_clause 0x1
1230 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1231 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
1232 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1233 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1234 ; GFX11-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
1235 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1236 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v0
1237 ; GFX11-NEXT:    v_mov_b32_e32 v0, s2
1238 ; GFX11-NEXT:    v_permlane16_b32 v1, v1, s5, s4
1239 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1240 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s5, s4
1241 ; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1242 ; GFX11-NEXT:    s_endpgm
1244 ; GFX12-LABEL: v_permlane16_b32_vvs_i64:
1245 ; GFX12:       ; %bb.0:
1246 ; GFX12-NEXT:    s_clause 0x1
1247 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1248 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
1249 ; GFX12-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1250 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1251 ; GFX12-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
1252 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1253 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v0
1254 ; GFX12-NEXT:    v_mov_b32_e32 v0, s2
1255 ; GFX12-NEXT:    v_permlane16_b32 v1, v1, s5, s4
1256 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1257 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s5, s4
1258 ; GFX12-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1259 ; GFX12-NEXT:    s_endpgm
1260   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
1261   %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 %tidx, i32 %src2, i1 false, i1 false)
1262   store i64 %v, ptr addrspace(1) %out
1263   ret void
1266 define amdgpu_kernel void @v_permlane16_b32_vvs_f32(ptr addrspace(1) %out, float %src0, i32 %src2) {
1267 ; GFX10-SDAG-LABEL: v_permlane16_b32_vvs_f32:
1268 ; GFX10-SDAG:       ; %bb.0:
1269 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1270 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1271 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s2
1272 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
1273 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, 0
1274 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s2, s3
1275 ; GFX10-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]
1276 ; GFX10-SDAG-NEXT:    s_endpgm
1278 ; GFX10-GISEL-LABEL: v_permlane16_b32_vvs_f32:
1279 ; GFX10-GISEL:       ; %bb.0:
1280 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1281 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
1282 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
1283 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0
1284 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1285 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1286 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s3
1287 ; GFX10-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]
1288 ; GFX10-GISEL-NEXT:    s_endpgm
1290 ; GFX11-SDAG-LABEL: v_permlane16_b32_vvs_f32:
1291 ; GFX11-SDAG:       ; %bb.0:
1292 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1293 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1294 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0
1295 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1296 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
1297 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, 0
1298 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s2, s3
1299 ; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
1300 ; GFX11-SDAG-NEXT:    s_endpgm
1302 ; GFX11-GISEL-LABEL: v_permlane16_b32_vvs_f32:
1303 ; GFX11-GISEL:       ; %bb.0:
1304 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1305 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
1306 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1307 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
1308 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1309 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1310 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s3
1311 ; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
1312 ; GFX11-GISEL-NEXT:    s_endpgm
1314 ; GFX12-SDAG-LABEL: v_permlane16_b32_vvs_f32:
1315 ; GFX12-SDAG:       ; %bb.0:
1316 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1317 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
1318 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0
1319 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1320 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
1321 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, 0
1322 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s2, s3
1323 ; GFX12-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
1324 ; GFX12-SDAG-NEXT:    s_endpgm
1326 ; GFX12-GISEL-LABEL: v_permlane16_b32_vvs_f32:
1327 ; GFX12-GISEL:       ; %bb.0:
1328 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1329 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
1330 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1331 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
1332 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
1333 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1334 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s3
1335 ; GFX12-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
1336 ; GFX12-GISEL-NEXT:    s_endpgm
1337   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
1338   %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 %tidx, i32 %src2, i1 false, i1 false)
1339   store float %v, ptr addrspace(1) %out
1340   ret void
1343 define amdgpu_kernel void @v_permlane16_b32_vvs_f64(ptr addrspace(1) %out, double %src0, i32 %src2) {
1344 ; GFX10-SDAG-LABEL: v_permlane16_b32_vvs_f64:
1345 ; GFX10-SDAG:       ; %bb.0:
1346 ; GFX10-SDAG-NEXT:    s_clause 0x1
1347 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1348 ; GFX10-SDAG-NEXT:    s_load_dword s6, s[4:5], 0x34
1349 ; GFX10-SDAG-NEXT:    s_mov_b32 null, 0
1350 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v0
1351 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
1352 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1353 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
1354 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
1355 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s6
1356 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s6
1357 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1358 ; GFX10-SDAG-NEXT:    s_endpgm
1360 ; GFX10-GISEL-LABEL: v_permlane16_b32_vvs_f64:
1361 ; GFX10-GISEL:       ; %bb.0:
1362 ; GFX10-GISEL-NEXT:    s_clause 0x1
1363 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1364 ; GFX10-GISEL-NEXT:    s_load_dword s6, s[4:5], 0x34
1365 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
1366 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
1367 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
1368 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1369 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1370 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
1371 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s6
1372 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s6
1373 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1374 ; GFX10-GISEL-NEXT:    s_endpgm
1376 ; GFX11-LABEL: v_permlane16_b32_vvs_f64:
1377 ; GFX11:       ; %bb.0:
1378 ; GFX11-NEXT:    s_clause 0x1
1379 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1380 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
1381 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1382 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1383 ; GFX11-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
1384 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1385 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v0
1386 ; GFX11-NEXT:    v_mov_b32_e32 v0, s2
1387 ; GFX11-NEXT:    v_permlane16_b32 v1, v1, s5, s4
1388 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1389 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s5, s4
1390 ; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1391 ; GFX11-NEXT:    s_endpgm
1393 ; GFX12-LABEL: v_permlane16_b32_vvs_f64:
1394 ; GFX12:       ; %bb.0:
1395 ; GFX12-NEXT:    s_clause 0x1
1396 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1397 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
1398 ; GFX12-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
1399 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1400 ; GFX12-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
1401 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1402 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v0
1403 ; GFX12-NEXT:    v_mov_b32_e32 v0, s2
1404 ; GFX12-NEXT:    v_permlane16_b32 v1, v1, s5, s4
1405 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1406 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s5, s4
1407 ; GFX12-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1408 ; GFX12-NEXT:    s_endpgm
1409   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
1410   %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 %tidx, i32 %src2, i1 false, i1 false)
1411   store double %v, ptr addrspace(1) %out
1412   ret void
1415 define amdgpu_kernel void @v_permlane16_b32_vsv_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1) {
1416 ; GFX10-SDAG-LABEL: v_permlane16_b32_vsv_i32:
1417 ; GFX10-SDAG:       ; %bb.0:
1418 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1419 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1420 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
1421 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s2, v1
1422 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, 0
1423 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s3, s2
1424 ; GFX10-SDAG-NEXT:    global_store_dword v1, v0, s[0:1]
1425 ; GFX10-SDAG-NEXT:    s_endpgm
1427 ; GFX10-GISEL-LABEL: v_permlane16_b32_vsv_i32:
1428 ; GFX10-GISEL:       ; %bb.0:
1429 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1430 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
1431 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v1
1432 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0
1433 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1434 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1435 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s3, s4
1436 ; GFX10-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]
1437 ; GFX10-GISEL-NEXT:    s_endpgm
1439 ; GFX11-SDAG-LABEL: v_permlane16_b32_vsv_i32:
1440 ; GFX11-SDAG:       ; %bb.0:
1441 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1442 ; GFX11-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
1443 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1444 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v1, s2
1445 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1446 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
1447 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, 0
1448 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s3, s2
1449 ; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
1450 ; GFX11-SDAG-NEXT:    s_endpgm
1452 ; GFX11-GISEL-LABEL: v_permlane16_b32_vsv_i32:
1453 ; GFX11-GISEL:       ; %bb.0:
1454 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1455 ; GFX11-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
1456 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v1, 0
1457 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1458 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
1459 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1460 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1461 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s3, s4
1462 ; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
1463 ; GFX11-GISEL-NEXT:    s_endpgm
1465 ; GFX12-SDAG-LABEL: v_permlane16_b32_vsv_i32:
1466 ; GFX12-SDAG:       ; %bb.0:
1467 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1468 ; GFX12-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
1469 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
1470 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v1, s2
1471 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1472 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
1473 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, 0
1474 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s3, s2
1475 ; GFX12-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
1476 ; GFX12-SDAG-NEXT:    s_endpgm
1478 ; GFX12-GISEL-LABEL: v_permlane16_b32_vsv_i32:
1479 ; GFX12-GISEL:       ; %bb.0:
1480 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1481 ; GFX12-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
1482 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v1, 0
1483 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1484 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
1485 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
1486 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1487 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s3, s4
1488 ; GFX12-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
1489 ; GFX12-GISEL-NEXT:    s_endpgm
1490   %tidy = call i32 @llvm.amdgcn.workitem.id.y()
1491   %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %tidy, i1 false, i1 false)
1492   store i32 %v, ptr addrspace(1) %out
1493   ret void
1496 define amdgpu_kernel void @v_permlane16_b32_vsv_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1) {
1497 ; GFX10-SDAG-LABEL: v_permlane16_b32_vsv_i64:
1498 ; GFX10-SDAG:       ; %bb.0:
1499 ; GFX10-SDAG-NEXT:    s_clause 0x1
1500 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1501 ; GFX10-SDAG-NEXT:    s_load_dword s6, s[4:5], 0x34
1502 ; GFX10-SDAG-NEXT:    s_mov_b32 null, 0
1503 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v1
1504 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
1505 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1506 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
1507 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
1508 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s6, s4
1509 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s6, s4
1510 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1511 ; GFX10-SDAG-NEXT:    s_endpgm
1513 ; GFX10-GISEL-LABEL: v_permlane16_b32_vsv_i64:
1514 ; GFX10-GISEL:       ; %bb.0:
1515 ; GFX10-GISEL-NEXT:    s_clause 0x1
1516 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1517 ; GFX10-GISEL-NEXT:    s_load_dword s6, s[4:5], 0x34
1518 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
1519 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v1
1520 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
1521 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1522 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1523 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
1524 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s6, s4
1525 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s6, s4
1526 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1527 ; GFX10-GISEL-NEXT:    s_endpgm
1529 ; GFX11-SDAG-LABEL: v_permlane16_b32_vsv_i64:
1530 ; GFX11-SDAG:       ; %bb.0:
1531 ; GFX11-SDAG-NEXT:    s_clause 0x1
1532 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1533 ; GFX11-SDAG-NEXT:    s_load_b32 s4, s[4:5], 0x34
1534 ; GFX11-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
1535 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
1536 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1537 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s5, v0
1538 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1539 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v0, s2
1540 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5
1541 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1542 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5
1543 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1544 ; GFX11-SDAG-NEXT:    s_endpgm
1546 ; GFX11-GISEL-LABEL: v_permlane16_b32_vsv_i64:
1547 ; GFX11-GISEL:       ; %bb.0:
1548 ; GFX11-GISEL-NEXT:    s_clause 0x1
1549 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1550 ; GFX11-GISEL-NEXT:    s_load_b32 s4, s[4:5], 0x34
1551 ; GFX11-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
1552 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
1553 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1554 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s5, v0
1555 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1556 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
1557 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5
1558 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1559 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5
1560 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1561 ; GFX11-GISEL-NEXT:    s_endpgm
1563 ; GFX12-SDAG-LABEL: v_permlane16_b32_vsv_i64:
1564 ; GFX12-SDAG:       ; %bb.0:
1565 ; GFX12-SDAG-NEXT:    s_clause 0x1
1566 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1567 ; GFX12-SDAG-NEXT:    s_load_b32 s4, s[4:5], 0x34
1568 ; GFX12-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
1569 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
1570 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1571 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s5, v0
1572 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
1573 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v0, s2
1574 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5
1575 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1576 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5
1577 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1578 ; GFX12-SDAG-NEXT:    s_endpgm
1580 ; GFX12-GISEL-LABEL: v_permlane16_b32_vsv_i64:
1581 ; GFX12-GISEL:       ; %bb.0:
1582 ; GFX12-GISEL-NEXT:    s_clause 0x1
1583 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1584 ; GFX12-GISEL-NEXT:    s_load_b32 s4, s[4:5], 0x34
1585 ; GFX12-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
1586 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
1587 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1588 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s5, v0
1589 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
1590 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
1591 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5
1592 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1593 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5
1594 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1595 ; GFX12-GISEL-NEXT:    s_endpgm
1596   %tidy = call i32 @llvm.amdgcn.workitem.id.y()
1597   %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %tidy, i1 false, i1 false)
1598   store i64 %v, ptr addrspace(1) %out
1599   ret void
1602 define amdgpu_kernel void @v_permlane16_b32_vsv_f32(ptr addrspace(1) %out, float %src0, i32 %src1) {
1603 ; GFX10-SDAG-LABEL: v_permlane16_b32_vsv_f32:
1604 ; GFX10-SDAG:       ; %bb.0:
1605 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1606 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1607 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
1608 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s2, v1
1609 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, 0
1610 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s3, s2
1611 ; GFX10-SDAG-NEXT:    global_store_dword v1, v0, s[0:1]
1612 ; GFX10-SDAG-NEXT:    s_endpgm
1614 ; GFX10-GISEL-LABEL: v_permlane16_b32_vsv_f32:
1615 ; GFX10-GISEL:       ; %bb.0:
1616 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1617 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
1618 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v1
1619 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0
1620 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1621 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1622 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s3, s4
1623 ; GFX10-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]
1624 ; GFX10-GISEL-NEXT:    s_endpgm
1626 ; GFX11-SDAG-LABEL: v_permlane16_b32_vsv_f32:
1627 ; GFX11-SDAG:       ; %bb.0:
1628 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1629 ; GFX11-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
1630 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1631 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v1, s2
1632 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1633 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
1634 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, 0
1635 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s3, s2
1636 ; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
1637 ; GFX11-SDAG-NEXT:    s_endpgm
1639 ; GFX11-GISEL-LABEL: v_permlane16_b32_vsv_f32:
1640 ; GFX11-GISEL:       ; %bb.0:
1641 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1642 ; GFX11-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
1643 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v1, 0
1644 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1645 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
1646 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1647 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1648 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s3, s4
1649 ; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
1650 ; GFX11-GISEL-NEXT:    s_endpgm
1652 ; GFX12-SDAG-LABEL: v_permlane16_b32_vsv_f32:
1653 ; GFX12-SDAG:       ; %bb.0:
1654 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1655 ; GFX12-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
1656 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
1657 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v1, s2
1658 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
1659 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
1660 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, 0
1661 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s3, s2
1662 ; GFX12-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
1663 ; GFX12-SDAG-NEXT:    s_endpgm
1665 ; GFX12-GISEL-LABEL: v_permlane16_b32_vsv_f32:
1666 ; GFX12-GISEL:       ; %bb.0:
1667 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1668 ; GFX12-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
1669 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v1, 0
1670 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1671 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
1672 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
1673 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1674 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s3, s4
1675 ; GFX12-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
1676 ; GFX12-GISEL-NEXT:    s_endpgm
1677   %tidy = call i32 @llvm.amdgcn.workitem.id.y()
1678   %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 %src1, i32 %tidy, i1 false, i1 false)
1679   store float %v, ptr addrspace(1) %out
1680   ret void
1683 define amdgpu_kernel void @v_permlane16_b32_vsv_f64(ptr addrspace(1) %out, double %src0, i32 %src1) {
1684 ; GFX10-SDAG-LABEL: v_permlane16_b32_vsv_f64:
1685 ; GFX10-SDAG:       ; %bb.0:
1686 ; GFX10-SDAG-NEXT:    s_clause 0x1
1687 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1688 ; GFX10-SDAG-NEXT:    s_load_dword s6, s[4:5], 0x34
1689 ; GFX10-SDAG-NEXT:    s_mov_b32 null, 0
1690 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v1
1691 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
1692 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1693 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
1694 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
1695 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s6, s4
1696 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s6, s4
1697 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1698 ; GFX10-SDAG-NEXT:    s_endpgm
1700 ; GFX10-GISEL-LABEL: v_permlane16_b32_vsv_f64:
1701 ; GFX10-GISEL:       ; %bb.0:
1702 ; GFX10-GISEL-NEXT:    s_clause 0x1
1703 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1704 ; GFX10-GISEL-NEXT:    s_load_dword s6, s[4:5], 0x34
1705 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
1706 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v1
1707 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
1708 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1709 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1710 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
1711 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s6, s4
1712 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s6, s4
1713 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1714 ; GFX10-GISEL-NEXT:    s_endpgm
1716 ; GFX11-SDAG-LABEL: v_permlane16_b32_vsv_f64:
1717 ; GFX11-SDAG:       ; %bb.0:
1718 ; GFX11-SDAG-NEXT:    s_clause 0x1
1719 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1720 ; GFX11-SDAG-NEXT:    s_load_b32 s4, s[4:5], 0x34
1721 ; GFX11-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
1722 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
1723 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1724 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s5, v0
1725 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1726 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v0, s2
1727 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5
1728 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1729 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5
1730 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1731 ; GFX11-SDAG-NEXT:    s_endpgm
1733 ; GFX11-GISEL-LABEL: v_permlane16_b32_vsv_f64:
1734 ; GFX11-GISEL:       ; %bb.0:
1735 ; GFX11-GISEL-NEXT:    s_clause 0x1
1736 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1737 ; GFX11-GISEL-NEXT:    s_load_b32 s4, s[4:5], 0x34
1738 ; GFX11-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
1739 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
1740 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1741 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s5, v0
1742 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1743 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
1744 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5
1745 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1746 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5
1747 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1748 ; GFX11-GISEL-NEXT:    s_endpgm
1750 ; GFX12-SDAG-LABEL: v_permlane16_b32_vsv_f64:
1751 ; GFX12-SDAG:       ; %bb.0:
1752 ; GFX12-SDAG-NEXT:    s_clause 0x1
1753 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1754 ; GFX12-SDAG-NEXT:    s_load_b32 s4, s[4:5], 0x34
1755 ; GFX12-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
1756 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
1757 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1758 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s5, v0
1759 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
1760 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v0, s2
1761 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5
1762 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1763 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5
1764 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1765 ; GFX12-SDAG-NEXT:    s_endpgm
1767 ; GFX12-GISEL-LABEL: v_permlane16_b32_vsv_f64:
1768 ; GFX12-GISEL:       ; %bb.0:
1769 ; GFX12-GISEL-NEXT:    s_clause 0x1
1770 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1771 ; GFX12-GISEL-NEXT:    s_load_b32 s4, s[4:5], 0x34
1772 ; GFX12-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
1773 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
1774 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
1775 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s5, v0
1776 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
1777 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
1778 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5
1779 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
1780 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5
1781 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1782 ; GFX12-GISEL-NEXT:    s_endpgm
1783   %tidy = call i32 @llvm.amdgcn.workitem.id.y()
1784   %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 %src1, i32 %tidy, i1 false, i1 false)
1785   store double %v, ptr addrspace(1) %out
1786   ret void
1789 define amdgpu_kernel void @v_permlane16_b32_vss_fi_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
1790 ; GFX10-LABEL: v_permlane16_b32_vss_fi_i32:
1791 ; GFX10:       ; %bb.0:
1792 ; GFX10-NEXT:    s_clause 0x1
1793 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1794 ; GFX10-NEXT:    s_load_dword s6, s[4:5], 0x34
1795 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
1796 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
1797 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
1798 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s3, s6 op_sel:[1,0]
1799 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
1800 ; GFX10-NEXT:    s_endpgm
1802 ; GFX11-LABEL: v_permlane16_b32_vss_fi_i32:
1803 ; GFX11:       ; %bb.0:
1804 ; GFX11-NEXT:    s_clause 0x1
1805 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1806 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
1807 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1808 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
1809 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1810 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s3, s4 op_sel:[1,0]
1811 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
1812 ; GFX11-NEXT:    s_endpgm
1814 ; GFX12-LABEL: v_permlane16_b32_vss_fi_i32:
1815 ; GFX12:       ; %bb.0:
1816 ; GFX12-NEXT:    s_clause 0x1
1817 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1818 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
1819 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1820 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
1821 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1822 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s3, s4 op_sel:[1,0]
1823 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
1824 ; GFX12-NEXT:    s_endpgm
1825   %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 true, i1 false)
1826   store i32 %v, ptr addrspace(1) %out
1827   ret void
1830 define amdgpu_kernel void @v_permlane16_b32_vss_fi_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1, i32 %src2) {
1831 ; GFX10-SDAG-LABEL: v_permlane16_b32_vss_fi_i64:
1832 ; GFX10-SDAG:       ; %bb.0:
1833 ; GFX10-SDAG-NEXT:    s_clause 0x1
1834 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1835 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
1836 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
1837 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1838 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
1839 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
1840 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s6, s7 op_sel:[1,0]
1841 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s6, s7 op_sel:[1,0]
1842 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1843 ; GFX10-SDAG-NEXT:    s_endpgm
1845 ; GFX10-GISEL-LABEL: v_permlane16_b32_vss_fi_i64:
1846 ; GFX10-GISEL:       ; %bb.0:
1847 ; GFX10-GISEL-NEXT:    s_clause 0x1
1848 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1849 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
1850 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
1851 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1852 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1853 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
1854 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s6, s7 op_sel:[1,0]
1855 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s6, s7 op_sel:[1,0]
1856 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1857 ; GFX10-GISEL-NEXT:    s_endpgm
1859 ; GFX11-SDAG-LABEL: v_permlane16_b32_vss_fi_i64:
1860 ; GFX11-SDAG:       ; %bb.0:
1861 ; GFX11-SDAG-NEXT:    s_clause 0x1
1862 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1863 ; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
1864 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1865 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
1866 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
1867 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1868 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,0]
1869 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,0]
1870 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1871 ; GFX11-SDAG-NEXT:    s_endpgm
1873 ; GFX11-GISEL-LABEL: v_permlane16_b32_vss_fi_i64:
1874 ; GFX11-GISEL:       ; %bb.0:
1875 ; GFX11-GISEL-NEXT:    s_clause 0x1
1876 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1877 ; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
1878 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
1879 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1880 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
1881 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
1882 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,0]
1883 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,0]
1884 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1885 ; GFX11-GISEL-NEXT:    s_endpgm
1887 ; GFX12-SDAG-LABEL: v_permlane16_b32_vss_fi_i64:
1888 ; GFX12-SDAG:       ; %bb.0:
1889 ; GFX12-SDAG-NEXT:    s_clause 0x1
1890 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1891 ; GFX12-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
1892 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
1893 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
1894 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
1895 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1896 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,0]
1897 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,0]
1898 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1899 ; GFX12-SDAG-NEXT:    s_endpgm
1901 ; GFX12-GISEL-LABEL: v_permlane16_b32_vss_fi_i64:
1902 ; GFX12-GISEL:       ; %bb.0:
1903 ; GFX12-GISEL-NEXT:    s_clause 0x1
1904 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1905 ; GFX12-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
1906 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
1907 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
1908 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
1909 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
1910 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,0]
1911 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,0]
1912 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
1913 ; GFX12-GISEL-NEXT:    s_endpgm
1914   %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %src2, i1 true, i1 false)
1915   store i64 %v, ptr addrspace(1) %out
1916   ret void
1919 define amdgpu_kernel void @v_permlane16_b32_vss_fi_f32(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {
1920 ; GFX10-LABEL: v_permlane16_b32_vss_fi_f32:
1921 ; GFX10:       ; %bb.0:
1922 ; GFX10-NEXT:    s_clause 0x1
1923 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1924 ; GFX10-NEXT:    s_load_dword s6, s[4:5], 0x34
1925 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
1926 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
1927 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
1928 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s3, s6 op_sel:[1,0]
1929 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
1930 ; GFX10-NEXT:    s_endpgm
1932 ; GFX11-LABEL: v_permlane16_b32_vss_fi_f32:
1933 ; GFX11:       ; %bb.0:
1934 ; GFX11-NEXT:    s_clause 0x1
1935 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1936 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
1937 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1938 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
1939 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1940 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s3, s4 op_sel:[1,0]
1941 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
1942 ; GFX11-NEXT:    s_endpgm
1944 ; GFX12-LABEL: v_permlane16_b32_vss_fi_f32:
1945 ; GFX12:       ; %bb.0:
1946 ; GFX12-NEXT:    s_clause 0x1
1947 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1948 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
1949 ; GFX12-NEXT:    s_wait_kmcnt 0x0
1950 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
1951 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1952 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s3, s4 op_sel:[1,0]
1953 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
1954 ; GFX12-NEXT:    s_endpgm
1955   %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 %src1, i32 %src2, i1 true, i1 false)
1956   store float %v, ptr addrspace(1) %out
1957   ret void
1960 define amdgpu_kernel void @v_permlane16_b32_vss_fi_f64(ptr addrspace(1) %out, double %src0, i32 %src1, i32 %src2) {
1961 ; GFX10-SDAG-LABEL: v_permlane16_b32_vss_fi_f64:
1962 ; GFX10-SDAG:       ; %bb.0:
1963 ; GFX10-SDAG-NEXT:    s_clause 0x1
1964 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1965 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
1966 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
1967 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1968 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
1969 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
1970 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s6, s7 op_sel:[1,0]
1971 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s6, s7 op_sel:[1,0]
1972 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1973 ; GFX10-SDAG-NEXT:    s_endpgm
1975 ; GFX10-GISEL-LABEL: v_permlane16_b32_vss_fi_f64:
1976 ; GFX10-GISEL:       ; %bb.0:
1977 ; GFX10-GISEL-NEXT:    s_clause 0x1
1978 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
1979 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
1980 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
1981 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
1982 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
1983 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
1984 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s6, s7 op_sel:[1,0]
1985 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s6, s7 op_sel:[1,0]
1986 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
1987 ; GFX10-GISEL-NEXT:    s_endpgm
1989 ; GFX11-SDAG-LABEL: v_permlane16_b32_vss_fi_f64:
1990 ; GFX11-SDAG:       ; %bb.0:
1991 ; GFX11-SDAG-NEXT:    s_clause 0x1
1992 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
1993 ; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
1994 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
1995 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
1996 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
1997 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
1998 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,0]
1999 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,0]
2000 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2001 ; GFX11-SDAG-NEXT:    s_endpgm
2003 ; GFX11-GISEL-LABEL: v_permlane16_b32_vss_fi_f64:
2004 ; GFX11-GISEL:       ; %bb.0:
2005 ; GFX11-GISEL-NEXT:    s_clause 0x1
2006 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2007 ; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2008 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2009 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2010 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
2011 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2012 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,0]
2013 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,0]
2014 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2015 ; GFX11-GISEL-NEXT:    s_endpgm
2017 ; GFX12-SDAG-LABEL: v_permlane16_b32_vss_fi_f64:
2018 ; GFX12-SDAG:       ; %bb.0:
2019 ; GFX12-SDAG-NEXT:    s_clause 0x1
2020 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2021 ; GFX12-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2022 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
2023 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
2024 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2025 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2026 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,0]
2027 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,0]
2028 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2029 ; GFX12-SDAG-NEXT:    s_endpgm
2031 ; GFX12-GISEL-LABEL: v_permlane16_b32_vss_fi_f64:
2032 ; GFX12-GISEL:       ; %bb.0:
2033 ; GFX12-GISEL-NEXT:    s_clause 0x1
2034 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2035 ; GFX12-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2036 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2037 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
2038 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
2039 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2040 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,0]
2041 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,0]
2042 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2043 ; GFX12-GISEL-NEXT:    s_endpgm
2044   %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 %src1, i32 %src2, i1 true, i1 false)
2045   store double %v, ptr addrspace(1) %out
2046   ret void
2049 define amdgpu_kernel void @v_permlane16_b32_vss_bc_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
2050 ; GFX10-LABEL: v_permlane16_b32_vss_bc_i32:
2051 ; GFX10:       ; %bb.0:
2052 ; GFX10-NEXT:    s_clause 0x1
2053 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2054 ; GFX10-NEXT:    s_load_dword s6, s[4:5], 0x34
2055 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
2056 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2057 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
2058 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s3, s6 op_sel:[0,1]
2059 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
2060 ; GFX10-NEXT:    s_endpgm
2062 ; GFX11-LABEL: v_permlane16_b32_vss_bc_i32:
2063 ; GFX11:       ; %bb.0:
2064 ; GFX11-NEXT:    s_clause 0x1
2065 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2066 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
2067 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2068 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
2069 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2070 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s3, s4 op_sel:[0,1]
2071 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
2072 ; GFX11-NEXT:    s_endpgm
2074 ; GFX12-LABEL: v_permlane16_b32_vss_bc_i32:
2075 ; GFX12:       ; %bb.0:
2076 ; GFX12-NEXT:    s_clause 0x1
2077 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2078 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
2079 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2080 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
2081 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2082 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s3, s4 op_sel:[0,1]
2083 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
2084 ; GFX12-NEXT:    s_endpgm
2085   %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 false, i1 true)
2086   store i32 %v, ptr addrspace(1) %out
2087   ret void
2090 define amdgpu_kernel void @v_permlane16_b32_vss_bc_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1, i32 %src2) {
2091 ; GFX10-SDAG-LABEL: v_permlane16_b32_vss_bc_i64:
2092 ; GFX10-SDAG:       ; %bb.0:
2093 ; GFX10-SDAG-NEXT:    s_clause 0x1
2094 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2095 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
2096 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
2097 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2098 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
2099 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2100 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s6, s7 op_sel:[0,1]
2101 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s6, s7 op_sel:[0,1]
2102 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
2103 ; GFX10-SDAG-NEXT:    s_endpgm
2105 ; GFX10-GISEL-LABEL: v_permlane16_b32_vss_bc_i64:
2106 ; GFX10-GISEL:       ; %bb.0:
2107 ; GFX10-GISEL-NEXT:    s_clause 0x1
2108 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2109 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
2110 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2111 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2112 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
2113 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
2114 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s6, s7 op_sel:[0,1]
2115 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s6, s7 op_sel:[0,1]
2116 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
2117 ; GFX10-GISEL-NEXT:    s_endpgm
2119 ; GFX11-SDAG-LABEL: v_permlane16_b32_vss_bc_i64:
2120 ; GFX11-SDAG:       ; %bb.0:
2121 ; GFX11-SDAG-NEXT:    s_clause 0x1
2122 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2123 ; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2124 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2125 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
2126 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2127 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2128 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[0,1]
2129 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[0,1]
2130 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2131 ; GFX11-SDAG-NEXT:    s_endpgm
2133 ; GFX11-GISEL-LABEL: v_permlane16_b32_vss_bc_i64:
2134 ; GFX11-GISEL:       ; %bb.0:
2135 ; GFX11-GISEL-NEXT:    s_clause 0x1
2136 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2137 ; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2138 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2139 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2140 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
2141 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2142 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[0,1]
2143 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[0,1]
2144 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2145 ; GFX11-GISEL-NEXT:    s_endpgm
2147 ; GFX12-SDAG-LABEL: v_permlane16_b32_vss_bc_i64:
2148 ; GFX12-SDAG:       ; %bb.0:
2149 ; GFX12-SDAG-NEXT:    s_clause 0x1
2150 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2151 ; GFX12-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2152 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
2153 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
2154 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2155 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2156 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[0,1]
2157 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[0,1]
2158 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2159 ; GFX12-SDAG-NEXT:    s_endpgm
2161 ; GFX12-GISEL-LABEL: v_permlane16_b32_vss_bc_i64:
2162 ; GFX12-GISEL:       ; %bb.0:
2163 ; GFX12-GISEL-NEXT:    s_clause 0x1
2164 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2165 ; GFX12-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2166 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2167 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
2168 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
2169 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2170 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[0,1]
2171 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[0,1]
2172 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2173 ; GFX12-GISEL-NEXT:    s_endpgm
2174   %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %src2, i1 false, i1 true)
2175   store i64 %v, ptr addrspace(1) %out
2176   ret void
2179 define amdgpu_kernel void @v_permlane16_b32_vss_bc_f32(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {
2180 ; GFX10-LABEL: v_permlane16_b32_vss_bc_f32:
2181 ; GFX10:       ; %bb.0:
2182 ; GFX10-NEXT:    s_clause 0x1
2183 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2184 ; GFX10-NEXT:    s_load_dword s6, s[4:5], 0x34
2185 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
2186 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2187 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
2188 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s3, s6 op_sel:[0,1]
2189 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
2190 ; GFX10-NEXT:    s_endpgm
2192 ; GFX11-LABEL: v_permlane16_b32_vss_bc_f32:
2193 ; GFX11:       ; %bb.0:
2194 ; GFX11-NEXT:    s_clause 0x1
2195 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2196 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
2197 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2198 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
2199 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2200 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s3, s4 op_sel:[0,1]
2201 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
2202 ; GFX11-NEXT:    s_endpgm
2204 ; GFX12-LABEL: v_permlane16_b32_vss_bc_f32:
2205 ; GFX12:       ; %bb.0:
2206 ; GFX12-NEXT:    s_clause 0x1
2207 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2208 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
2209 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2210 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
2211 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2212 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s3, s4 op_sel:[0,1]
2213 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
2214 ; GFX12-NEXT:    s_endpgm
2215   %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 %src1, i32 %src2, i1 false, i1 true)
2216   store float %v, ptr addrspace(1) %out
2217   ret void
2220 define amdgpu_kernel void @v_permlane16_b32_vss_bc_f64(ptr addrspace(1) %out, double %src0, i32 %src1, i32 %src2) {
2221 ; GFX10-SDAG-LABEL: v_permlane16_b32_vss_bc_f64:
2222 ; GFX10-SDAG:       ; %bb.0:
2223 ; GFX10-SDAG-NEXT:    s_clause 0x1
2224 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2225 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
2226 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
2227 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2228 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
2229 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2230 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s6, s7 op_sel:[0,1]
2231 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s6, s7 op_sel:[0,1]
2232 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
2233 ; GFX10-SDAG-NEXT:    s_endpgm
2235 ; GFX10-GISEL-LABEL: v_permlane16_b32_vss_bc_f64:
2236 ; GFX10-GISEL:       ; %bb.0:
2237 ; GFX10-GISEL-NEXT:    s_clause 0x1
2238 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2239 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
2240 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2241 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2242 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
2243 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
2244 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s6, s7 op_sel:[0,1]
2245 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s6, s7 op_sel:[0,1]
2246 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
2247 ; GFX10-GISEL-NEXT:    s_endpgm
2249 ; GFX11-SDAG-LABEL: v_permlane16_b32_vss_bc_f64:
2250 ; GFX11-SDAG:       ; %bb.0:
2251 ; GFX11-SDAG-NEXT:    s_clause 0x1
2252 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2253 ; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2254 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2255 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
2256 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2257 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2258 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[0,1]
2259 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[0,1]
2260 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2261 ; GFX11-SDAG-NEXT:    s_endpgm
2263 ; GFX11-GISEL-LABEL: v_permlane16_b32_vss_bc_f64:
2264 ; GFX11-GISEL:       ; %bb.0:
2265 ; GFX11-GISEL-NEXT:    s_clause 0x1
2266 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2267 ; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2268 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2269 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2270 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
2271 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2272 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[0,1]
2273 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[0,1]
2274 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2275 ; GFX11-GISEL-NEXT:    s_endpgm
2277 ; GFX12-SDAG-LABEL: v_permlane16_b32_vss_bc_f64:
2278 ; GFX12-SDAG:       ; %bb.0:
2279 ; GFX12-SDAG-NEXT:    s_clause 0x1
2280 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2281 ; GFX12-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2282 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
2283 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
2284 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2285 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2286 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[0,1]
2287 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[0,1]
2288 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2289 ; GFX12-SDAG-NEXT:    s_endpgm
2291 ; GFX12-GISEL-LABEL: v_permlane16_b32_vss_bc_f64:
2292 ; GFX12-GISEL:       ; %bb.0:
2293 ; GFX12-GISEL-NEXT:    s_clause 0x1
2294 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2295 ; GFX12-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2296 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2297 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
2298 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
2299 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2300 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[0,1]
2301 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[0,1]
2302 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2303 ; GFX12-GISEL-NEXT:    s_endpgm
2304   %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 %src1, i32 %src2, i1 false, i1 true)
2305   store double %v, ptr addrspace(1) %out
2306   ret void
2309 define amdgpu_kernel void @v_permlane16_b32_vss_fi_bc_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
2310 ; GFX10-LABEL: v_permlane16_b32_vss_fi_bc_i32:
2311 ; GFX10:       ; %bb.0:
2312 ; GFX10-NEXT:    s_clause 0x1
2313 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2314 ; GFX10-NEXT:    s_load_dword s6, s[4:5], 0x34
2315 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
2316 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2317 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
2318 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s3, s6 op_sel:[1,1]
2319 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
2320 ; GFX10-NEXT:    s_endpgm
2322 ; GFX11-LABEL: v_permlane16_b32_vss_fi_bc_i32:
2323 ; GFX11:       ; %bb.0:
2324 ; GFX11-NEXT:    s_clause 0x1
2325 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2326 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
2327 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2328 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
2329 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2330 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s3, s4 op_sel:[1,1]
2331 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
2332 ; GFX11-NEXT:    s_endpgm
2334 ; GFX12-LABEL: v_permlane16_b32_vss_fi_bc_i32:
2335 ; GFX12:       ; %bb.0:
2336 ; GFX12-NEXT:    s_clause 0x1
2337 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2338 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
2339 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2340 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
2341 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2342 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s3, s4 op_sel:[1,1]
2343 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
2344 ; GFX12-NEXT:    s_endpgm
2345   %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 true, i1 true)
2346   store i32 %v, ptr addrspace(1) %out
2347   ret void
2350 define amdgpu_kernel void @v_permlane16_b32_vss_fi_bc_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1, i32 %src2) {
2351 ; GFX10-SDAG-LABEL: v_permlane16_b32_vss_fi_bc_i64:
2352 ; GFX10-SDAG:       ; %bb.0:
2353 ; GFX10-SDAG-NEXT:    s_clause 0x1
2354 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2355 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
2356 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
2357 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2358 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
2359 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2360 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s6, s7 op_sel:[1,1]
2361 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s6, s7 op_sel:[1,1]
2362 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
2363 ; GFX10-SDAG-NEXT:    s_endpgm
2365 ; GFX10-GISEL-LABEL: v_permlane16_b32_vss_fi_bc_i64:
2366 ; GFX10-GISEL:       ; %bb.0:
2367 ; GFX10-GISEL-NEXT:    s_clause 0x1
2368 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2369 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
2370 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2371 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2372 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
2373 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
2374 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s6, s7 op_sel:[1,1]
2375 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s6, s7 op_sel:[1,1]
2376 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
2377 ; GFX10-GISEL-NEXT:    s_endpgm
2379 ; GFX11-SDAG-LABEL: v_permlane16_b32_vss_fi_bc_i64:
2380 ; GFX11-SDAG:       ; %bb.0:
2381 ; GFX11-SDAG-NEXT:    s_clause 0x1
2382 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2383 ; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2384 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2385 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
2386 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2387 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2388 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,1]
2389 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,1]
2390 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2391 ; GFX11-SDAG-NEXT:    s_endpgm
2393 ; GFX11-GISEL-LABEL: v_permlane16_b32_vss_fi_bc_i64:
2394 ; GFX11-GISEL:       ; %bb.0:
2395 ; GFX11-GISEL-NEXT:    s_clause 0x1
2396 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2397 ; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2398 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2399 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2400 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
2401 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2402 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,1]
2403 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,1]
2404 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2405 ; GFX11-GISEL-NEXT:    s_endpgm
2407 ; GFX12-SDAG-LABEL: v_permlane16_b32_vss_fi_bc_i64:
2408 ; GFX12-SDAG:       ; %bb.0:
2409 ; GFX12-SDAG-NEXT:    s_clause 0x1
2410 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2411 ; GFX12-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2412 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
2413 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
2414 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2415 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2416 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,1]
2417 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,1]
2418 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2419 ; GFX12-SDAG-NEXT:    s_endpgm
2421 ; GFX12-GISEL-LABEL: v_permlane16_b32_vss_fi_bc_i64:
2422 ; GFX12-GISEL:       ; %bb.0:
2423 ; GFX12-GISEL-NEXT:    s_clause 0x1
2424 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2425 ; GFX12-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2426 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2427 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
2428 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
2429 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2430 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,1]
2431 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,1]
2432 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2433 ; GFX12-GISEL-NEXT:    s_endpgm
2434   %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %src2, i1 true, i1 true)
2435   store i64 %v, ptr addrspace(1) %out
2436   ret void
2439 define amdgpu_kernel void @v_permlane16_b32_vss_fi_bc_f32(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {
2440 ; GFX10-LABEL: v_permlane16_b32_vss_fi_bc_f32:
2441 ; GFX10:       ; %bb.0:
2442 ; GFX10-NEXT:    s_clause 0x1
2443 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2444 ; GFX10-NEXT:    s_load_dword s6, s[4:5], 0x34
2445 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
2446 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2447 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
2448 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s3, s6 op_sel:[1,1]
2449 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
2450 ; GFX10-NEXT:    s_endpgm
2452 ; GFX11-LABEL: v_permlane16_b32_vss_fi_bc_f32:
2453 ; GFX11:       ; %bb.0:
2454 ; GFX11-NEXT:    s_clause 0x1
2455 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2456 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
2457 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2458 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
2459 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2460 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s3, s4 op_sel:[1,1]
2461 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
2462 ; GFX11-NEXT:    s_endpgm
2464 ; GFX12-LABEL: v_permlane16_b32_vss_fi_bc_f32:
2465 ; GFX12:       ; %bb.0:
2466 ; GFX12-NEXT:    s_clause 0x1
2467 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2468 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
2469 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2470 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
2471 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2472 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s3, s4 op_sel:[1,1]
2473 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
2474 ; GFX12-NEXT:    s_endpgm
2475   %v = call float @llvm.amdgcn.permlane16.f32(float %src0, float %src0, i32 %src1, i32 %src2, i1 true, i1 true)
2476   store float %v, ptr addrspace(1) %out
2477   ret void
2480 define amdgpu_kernel void @v_permlane16_b32_vss_fi_bc_f64(ptr addrspace(1) %out, double %src0, i32 %src1, i32 %src2) {
2481 ; GFX10-SDAG-LABEL: v_permlane16_b32_vss_fi_bc_f64:
2482 ; GFX10-SDAG:       ; %bb.0:
2483 ; GFX10-SDAG-NEXT:    s_clause 0x1
2484 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2485 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
2486 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
2487 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2488 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
2489 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2490 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s6, s7 op_sel:[1,1]
2491 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s6, s7 op_sel:[1,1]
2492 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
2493 ; GFX10-SDAG-NEXT:    s_endpgm
2495 ; GFX10-GISEL-LABEL: v_permlane16_b32_vss_fi_bc_f64:
2496 ; GFX10-GISEL:       ; %bb.0:
2497 ; GFX10-GISEL-NEXT:    s_clause 0x1
2498 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2499 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
2500 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2501 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2502 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
2503 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
2504 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s6, s7 op_sel:[1,1]
2505 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s6, s7 op_sel:[1,1]
2506 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
2507 ; GFX10-GISEL-NEXT:    s_endpgm
2509 ; GFX11-SDAG-LABEL: v_permlane16_b32_vss_fi_bc_f64:
2510 ; GFX11-SDAG:       ; %bb.0:
2511 ; GFX11-SDAG-NEXT:    s_clause 0x1
2512 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2513 ; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2514 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2515 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
2516 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2517 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2518 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,1]
2519 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,1]
2520 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2521 ; GFX11-SDAG-NEXT:    s_endpgm
2523 ; GFX11-GISEL-LABEL: v_permlane16_b32_vss_fi_bc_f64:
2524 ; GFX11-GISEL:       ; %bb.0:
2525 ; GFX11-GISEL-NEXT:    s_clause 0x1
2526 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2527 ; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2528 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2529 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2530 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
2531 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2532 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,1]
2533 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,1]
2534 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2535 ; GFX11-GISEL-NEXT:    s_endpgm
2537 ; GFX12-SDAG-LABEL: v_permlane16_b32_vss_fi_bc_f64:
2538 ; GFX12-SDAG:       ; %bb.0:
2539 ; GFX12-SDAG-NEXT:    s_clause 0x1
2540 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2541 ; GFX12-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2542 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
2543 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
2544 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2545 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2546 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,1]
2547 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,1]
2548 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2549 ; GFX12-SDAG-NEXT:    s_endpgm
2551 ; GFX12-GISEL-LABEL: v_permlane16_b32_vss_fi_bc_f64:
2552 ; GFX12-GISEL:       ; %bb.0:
2553 ; GFX12-GISEL-NEXT:    s_clause 0x1
2554 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2555 ; GFX12-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2556 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2557 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
2558 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
2559 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2560 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s4, s5 op_sel:[1,1]
2561 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s4, s5 op_sel:[1,1]
2562 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2563 ; GFX12-GISEL-NEXT:    s_endpgm
2564   %v = call double @llvm.amdgcn.permlane16.f64(double %src0, double %src0, i32 %src1, i32 %src2, i1 true, i1 true)
2565   store double %v, ptr addrspace(1) %out
2566   ret void
2569 define amdgpu_kernel void @v_permlanex16_b32_vss_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
2570 ; GFX10-LABEL: v_permlanex16_b32_vss_i32:
2571 ; GFX10:       ; %bb.0:
2572 ; GFX10-NEXT:    s_clause 0x1
2573 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2574 ; GFX10-NEXT:    s_load_dword s6, s[4:5], 0x34
2575 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
2576 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2577 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
2578 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s3, s6
2579 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
2580 ; GFX10-NEXT:    s_endpgm
2582 ; GFX11-LABEL: v_permlanex16_b32_vss_i32:
2583 ; GFX11:       ; %bb.0:
2584 ; GFX11-NEXT:    s_clause 0x1
2585 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2586 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
2587 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2588 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
2589 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2590 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s3, s4
2591 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
2592 ; GFX11-NEXT:    s_endpgm
2594 ; GFX12-LABEL: v_permlanex16_b32_vss_i32:
2595 ; GFX12:       ; %bb.0:
2596 ; GFX12-NEXT:    s_clause 0x1
2597 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2598 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
2599 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2600 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
2601 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2602 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s3, s4
2603 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
2604 ; GFX12-NEXT:    s_endpgm
2605   %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 false, i1 false)
2606   store i32 %v, ptr addrspace(1) %out
2607   ret void
2610 define amdgpu_kernel void @v_permlanex16_b32_vss_f32(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {
2611 ; GFX10-LABEL: v_permlanex16_b32_vss_f32:
2612 ; GFX10:       ; %bb.0:
2613 ; GFX10-NEXT:    s_clause 0x1
2614 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2615 ; GFX10-NEXT:    s_load_dword s6, s[4:5], 0x34
2616 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
2617 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2618 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
2619 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s3, s6
2620 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
2621 ; GFX10-NEXT:    s_endpgm
2623 ; GFX11-LABEL: v_permlanex16_b32_vss_f32:
2624 ; GFX11:       ; %bb.0:
2625 ; GFX11-NEXT:    s_clause 0x1
2626 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2627 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
2628 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2629 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
2630 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2631 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s3, s4
2632 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
2633 ; GFX11-NEXT:    s_endpgm
2635 ; GFX12-LABEL: v_permlanex16_b32_vss_f32:
2636 ; GFX12:       ; %bb.0:
2637 ; GFX12-NEXT:    s_clause 0x1
2638 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2639 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
2640 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2641 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
2642 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2643 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s3, s4
2644 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
2645 ; GFX12-NEXT:    s_endpgm
2646   %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 %src1, i32 %src2, i1 false, i1 false)
2647   store float %v, ptr addrspace(1) %out
2648   ret void
2651 define amdgpu_kernel void @v_permlanex16_b32_vss_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1, i32 %src2) {
2652 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vss_i64:
2653 ; GFX10-SDAG:       ; %bb.0:
2654 ; GFX10-SDAG-NEXT:    s_clause 0x1
2655 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2656 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
2657 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
2658 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2659 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
2660 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2661 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s6, s7
2662 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s6, s7
2663 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
2664 ; GFX10-SDAG-NEXT:    s_endpgm
2666 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vss_i64:
2667 ; GFX10-GISEL:       ; %bb.0:
2668 ; GFX10-GISEL-NEXT:    s_clause 0x1
2669 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2670 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
2671 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2672 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2673 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
2674 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
2675 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s6, s7
2676 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s6, s7
2677 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
2678 ; GFX10-GISEL-NEXT:    s_endpgm
2680 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vss_i64:
2681 ; GFX11-SDAG:       ; %bb.0:
2682 ; GFX11-SDAG-NEXT:    s_clause 0x1
2683 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2684 ; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2685 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2686 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
2687 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2688 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2689 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
2690 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
2691 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2692 ; GFX11-SDAG-NEXT:    s_endpgm
2694 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vss_i64:
2695 ; GFX11-GISEL:       ; %bb.0:
2696 ; GFX11-GISEL-NEXT:    s_clause 0x1
2697 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2698 ; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2699 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2700 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2701 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
2702 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2703 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
2704 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
2705 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2706 ; GFX11-GISEL-NEXT:    s_endpgm
2708 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vss_i64:
2709 ; GFX12-SDAG:       ; %bb.0:
2710 ; GFX12-SDAG-NEXT:    s_clause 0x1
2711 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2712 ; GFX12-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2713 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
2714 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
2715 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2716 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2717 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
2718 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
2719 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2720 ; GFX12-SDAG-NEXT:    s_endpgm
2722 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vss_i64:
2723 ; GFX12-GISEL:       ; %bb.0:
2724 ; GFX12-GISEL-NEXT:    s_clause 0x1
2725 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2726 ; GFX12-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2727 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2728 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
2729 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
2730 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2731 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
2732 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
2733 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2734 ; GFX12-GISEL-NEXT:    s_endpgm
2735   %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %src2, i1 false, i1 false)
2736   store i64 %v, ptr addrspace(1) %out
2737   ret void
2740 define amdgpu_kernel void @v_permlanex16_b32_vss_f64(ptr addrspace(1) %out, double %src0, i32 %src1, i32 %src2) {
2741 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vss_f64:
2742 ; GFX10-SDAG:       ; %bb.0:
2743 ; GFX10-SDAG-NEXT:    s_clause 0x1
2744 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2745 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
2746 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
2747 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2748 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
2749 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2750 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s6, s7
2751 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s6, s7
2752 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
2753 ; GFX10-SDAG-NEXT:    s_endpgm
2755 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vss_f64:
2756 ; GFX10-GISEL:       ; %bb.0:
2757 ; GFX10-GISEL-NEXT:    s_clause 0x1
2758 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2759 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
2760 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2761 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2762 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
2763 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
2764 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s6, s7
2765 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s6, s7
2766 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
2767 ; GFX10-GISEL-NEXT:    s_endpgm
2769 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vss_f64:
2770 ; GFX11-SDAG:       ; %bb.0:
2771 ; GFX11-SDAG-NEXT:    s_clause 0x1
2772 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2773 ; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2774 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2775 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
2776 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2777 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2778 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
2779 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
2780 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2781 ; GFX11-SDAG-NEXT:    s_endpgm
2783 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vss_f64:
2784 ; GFX11-GISEL:       ; %bb.0:
2785 ; GFX11-GISEL-NEXT:    s_clause 0x1
2786 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2787 ; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2788 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2789 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2790 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
2791 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2792 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
2793 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
2794 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2795 ; GFX11-GISEL-NEXT:    s_endpgm
2797 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vss_f64:
2798 ; GFX12-SDAG:       ; %bb.0:
2799 ; GFX12-SDAG-NEXT:    s_clause 0x1
2800 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2801 ; GFX12-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2802 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
2803 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
2804 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2805 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2806 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
2807 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
2808 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2809 ; GFX12-SDAG-NEXT:    s_endpgm
2811 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vss_f64:
2812 ; GFX12-GISEL:       ; %bb.0:
2813 ; GFX12-GISEL-NEXT:    s_clause 0x1
2814 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2815 ; GFX12-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
2816 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2817 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
2818 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
2819 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2820 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
2821 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
2822 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2823 ; GFX12-GISEL-NEXT:    s_endpgm
2824   %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 %src1, i32 %src2, i1 false, i1 false)
2825   store double %v, ptr addrspace(1) %out
2826   ret void
2829 define amdgpu_kernel void @v_permlanex16_b32_vii_i32(ptr addrspace(1) %out, i32 %src0) {
2830 ; GFX10-LABEL: v_permlanex16_b32_vii_i32:
2831 ; GFX10:       ; %bb.0:
2832 ; GFX10-NEXT:    s_clause 0x1
2833 ; GFX10-NEXT:    s_load_dword s2, s[4:5], 0x2c
2834 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
2835 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
2836 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2837 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
2838 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
2839 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
2840 ; GFX10-NEXT:    s_endpgm
2842 ; GFX11-LABEL: v_permlanex16_b32_vii_i32:
2843 ; GFX11:       ; %bb.0:
2844 ; GFX11-NEXT:    s_clause 0x1
2845 ; GFX11-NEXT:    s_load_b32 s2, s[4:5], 0x2c
2846 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
2847 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2848 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
2849 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2850 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
2851 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
2852 ; GFX11-NEXT:    s_endpgm
2854 ; GFX12-LABEL: v_permlanex16_b32_vii_i32:
2855 ; GFX12:       ; %bb.0:
2856 ; GFX12-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24
2857 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2858 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
2859 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2860 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
2861 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
2862 ; GFX12-NEXT:    s_endpgm
2863   %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 1, i32 2, i1 false, i1 false)
2864   store i32 %v, ptr addrspace(1) %out
2865   ret void
2868 define amdgpu_kernel void @v_permlanex16_b32_vii_f32(ptr addrspace(1) %out, float %src0) {
2869 ; GFX10-LABEL: v_permlanex16_b32_vii_f32:
2870 ; GFX10:       ; %bb.0:
2871 ; GFX10-NEXT:    s_clause 0x1
2872 ; GFX10-NEXT:    s_load_dword s2, s[4:5], 0x2c
2873 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
2874 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
2875 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
2876 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
2877 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
2878 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
2879 ; GFX10-NEXT:    s_endpgm
2881 ; GFX11-LABEL: v_permlanex16_b32_vii_f32:
2882 ; GFX11:       ; %bb.0:
2883 ; GFX11-NEXT:    s_clause 0x1
2884 ; GFX11-NEXT:    s_load_b32 s2, s[4:5], 0x2c
2885 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
2886 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
2887 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
2888 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2889 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
2890 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
2891 ; GFX11-NEXT:    s_endpgm
2893 ; GFX12-LABEL: v_permlanex16_b32_vii_f32:
2894 ; GFX12:       ; %bb.0:
2895 ; GFX12-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24
2896 ; GFX12-NEXT:    s_wait_kmcnt 0x0
2897 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
2898 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
2899 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
2900 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
2901 ; GFX12-NEXT:    s_endpgm
2902   %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 1, i32 2, i1 false, i1 false)
2903   store float %v, ptr addrspace(1) %out
2904   ret void
2907 define amdgpu_kernel void @v_permlanex16_b32_vii_i64(ptr addrspace(1) %out, i64 %src0) {
2908 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vii_i64:
2909 ; GFX10-SDAG:       ; %bb.0:
2910 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2911 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
2912 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2913 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
2914 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2915 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, 1, 2
2916 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
2917 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
2918 ; GFX10-SDAG-NEXT:    s_endpgm
2920 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vii_i64:
2921 ; GFX10-GISEL:       ; %bb.0:
2922 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2923 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2924 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2925 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
2926 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
2927 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
2928 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, 1, 2
2929 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
2930 ; GFX10-GISEL-NEXT:    s_endpgm
2932 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vii_i64:
2933 ; GFX11-SDAG:       ; %bb.0:
2934 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2935 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2936 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
2937 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2938 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2939 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, 1, 2
2940 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
2941 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2942 ; GFX11-SDAG-NEXT:    s_endpgm
2944 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vii_i64:
2945 ; GFX11-GISEL:       ; %bb.0:
2946 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2947 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2948 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
2949 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
2950 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2951 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
2952 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, 1, 2
2953 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2954 ; GFX11-GISEL-NEXT:    s_endpgm
2956 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vii_i64:
2957 ; GFX12-SDAG:       ; %bb.0:
2958 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2959 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
2960 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
2961 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2962 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
2963 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, 1, 2
2964 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
2965 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2966 ; GFX12-SDAG-NEXT:    s_endpgm
2968 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vii_i64:
2969 ; GFX12-GISEL:       ; %bb.0:
2970 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
2971 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
2972 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
2973 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
2974 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
2975 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
2976 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, 1, 2
2977 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
2978 ; GFX12-GISEL-NEXT:    s_endpgm
2979   %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 1, i32 2, i1 false, i1 false)
2980   store i64 %v, ptr addrspace(1) %out
2981   ret void
2984 define amdgpu_kernel void @v_permlanex16_b32_vii_f64(ptr addrspace(1) %out, double %src0) {
2985 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vii_f64:
2986 ; GFX10-SDAG:       ; %bb.0:
2987 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
2988 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
2989 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
2990 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
2991 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
2992 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, 1, 2
2993 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
2994 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
2995 ; GFX10-SDAG-NEXT:    s_endpgm
2997 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vii_f64:
2998 ; GFX10-GISEL:       ; %bb.0:
2999 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3000 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3001 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3002 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3003 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
3004 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
3005 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, 1, 2
3006 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
3007 ; GFX10-GISEL-NEXT:    s_endpgm
3009 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vii_f64:
3010 ; GFX11-SDAG:       ; %bb.0:
3011 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3012 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3013 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
3014 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
3015 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
3016 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, 1, 2
3017 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
3018 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3019 ; GFX11-SDAG-NEXT:    s_endpgm
3021 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vii_f64:
3022 ; GFX11-GISEL:       ; %bb.0:
3023 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3024 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3025 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3026 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
3027 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
3028 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
3029 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, 1, 2
3030 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3031 ; GFX11-GISEL-NEXT:    s_endpgm
3033 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vii_f64:
3034 ; GFX12-SDAG:       ; %bb.0:
3035 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3036 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
3037 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
3038 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
3039 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
3040 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, 1, 2
3041 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
3042 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3043 ; GFX12-SDAG-NEXT:    s_endpgm
3045 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vii_f64:
3046 ; GFX12-GISEL:       ; %bb.0:
3047 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3048 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3049 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
3050 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
3051 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
3052 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, 1, 2
3053 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, 1, 2
3054 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3055 ; GFX12-GISEL-NEXT:    s_endpgm
3056   %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 1, i32 2, i1 false, i1 false)
3057   store double %v, ptr addrspace(1) %out
3058   ret void
3061 ; FIXME-GFX10PLUS: It is allowed to have both immediates as literals
3062 define amdgpu_kernel void @v_permlanex16_b32_vll_i32(ptr addrspace(1) %out, i32 %src0) {
3063 ; GFX10-LABEL: v_permlanex16_b32_vll_i32:
3064 ; GFX10:       ; %bb.0:
3065 ; GFX10-NEXT:    s_clause 0x1
3066 ; GFX10-NEXT:    s_load_dword s2, s[4:5], 0x2c
3067 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
3068 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
3069 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
3070 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
3071 ; GFX10-NEXT:    s_movk_i32 s2, 0x1234
3072 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3073 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
3074 ; GFX10-NEXT:    s_endpgm
3076 ; GFX11-LABEL: v_permlanex16_b32_vll_i32:
3077 ; GFX11:       ; %bb.0:
3078 ; GFX11-NEXT:    s_clause 0x1
3079 ; GFX11-NEXT:    s_load_b32 s2, s[4:5], 0x2c
3080 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
3081 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
3082 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
3083 ; GFX11-NEXT:    s_movk_i32 s2, 0x1234
3084 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
3085 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3086 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
3087 ; GFX11-NEXT:    s_endpgm
3089 ; GFX12-LABEL: v_permlanex16_b32_vll_i32:
3090 ; GFX12:       ; %bb.0:
3091 ; GFX12-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24
3092 ; GFX12-NEXT:    s_wait_kmcnt 0x0
3093 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
3094 ; GFX12-NEXT:    s_movk_i32 s2, 0x1234
3095 ; GFX12-NEXT:    s_wait_alu 0xfffe
3096 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3097 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3098 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
3099 ; GFX12-NEXT:    s_endpgm
3100   %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 4660, i32 49617, i1 false, i1 false)
3101   store i32 %v, ptr addrspace(1) %out
3102   ret void
3105 define amdgpu_kernel void @v_permlanex16_b32_vll_f32(ptr addrspace(1) %out, float %src0) {
3106 ; GFX10-LABEL: v_permlanex16_b32_vll_f32:
3107 ; GFX10:       ; %bb.0:
3108 ; GFX10-NEXT:    s_clause 0x1
3109 ; GFX10-NEXT:    s_load_dword s2, s[4:5], 0x2c
3110 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
3111 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
3112 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
3113 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
3114 ; GFX10-NEXT:    s_movk_i32 s2, 0x1234
3115 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3116 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
3117 ; GFX10-NEXT:    s_endpgm
3119 ; GFX11-LABEL: v_permlanex16_b32_vll_f32:
3120 ; GFX11:       ; %bb.0:
3121 ; GFX11-NEXT:    s_clause 0x1
3122 ; GFX11-NEXT:    s_load_b32 s2, s[4:5], 0x2c
3123 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
3124 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
3125 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
3126 ; GFX11-NEXT:    s_movk_i32 s2, 0x1234
3127 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
3128 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3129 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
3130 ; GFX11-NEXT:    s_endpgm
3132 ; GFX12-LABEL: v_permlanex16_b32_vll_f32:
3133 ; GFX12:       ; %bb.0:
3134 ; GFX12-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24
3135 ; GFX12-NEXT:    s_wait_kmcnt 0x0
3136 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
3137 ; GFX12-NEXT:    s_movk_i32 s2, 0x1234
3138 ; GFX12-NEXT:    s_wait_alu 0xfffe
3139 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
3140 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3141 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
3142 ; GFX12-NEXT:    s_endpgm
3143   %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 4660, i32 49617, i1 false, i1 false)
3144   store float %v, ptr addrspace(1) %out
3145   ret void
3148 define amdgpu_kernel void @v_permlanex16_b32_vll_i64(ptr addrspace(1) %out, i64 %src0) {
3149 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vll_i64:
3150 ; GFX10-SDAG:       ; %bb.0:
3151 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3152 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
3153 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3154 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
3155 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
3156 ; GFX10-SDAG-NEXT:    s_movk_i32 s2, 0x1234
3157 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s2, 0xc1d1
3158 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3159 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
3160 ; GFX10-SDAG-NEXT:    s_endpgm
3162 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vll_i64:
3163 ; GFX10-GISEL:       ; %bb.0:
3164 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3165 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3166 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3167 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3168 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
3169 ; GFX10-GISEL-NEXT:    s_movk_i32 s2, 0x1234
3170 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3171 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s2, 0xc1d1
3172 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
3173 ; GFX10-GISEL-NEXT:    s_endpgm
3175 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vll_i64:
3176 ; GFX11-SDAG:       ; %bb.0:
3177 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3178 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3179 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
3180 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
3181 ; GFX11-SDAG-NEXT:    s_movk_i32 s2, 0x1234
3182 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
3183 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s2, 0xc1d1
3184 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3185 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3186 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3187 ; GFX11-SDAG-NEXT:    s_endpgm
3189 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vll_i64:
3190 ; GFX11-GISEL:       ; %bb.0:
3191 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3192 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3193 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3194 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
3195 ; GFX11-GISEL-NEXT:    s_movk_i32 s2, 0x1234
3196 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
3197 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3198 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3199 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s2, 0xc1d1
3200 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3201 ; GFX11-GISEL-NEXT:    s_endpgm
3203 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vll_i64:
3204 ; GFX12-SDAG:       ; %bb.0:
3205 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3206 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
3207 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
3208 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
3209 ; GFX12-SDAG-NEXT:    s_movk_i32 s2, 0x1234
3210 ; GFX12-SDAG-NEXT:    s_wait_alu 0xfffe
3211 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
3212 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s2, 0xc1d1
3213 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3214 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3215 ; GFX12-SDAG-NEXT:    s_endpgm
3217 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vll_i64:
3218 ; GFX12-GISEL:       ; %bb.0:
3219 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3220 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3221 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
3222 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
3223 ; GFX12-GISEL-NEXT:    s_movk_i32 s2, 0x1234
3224 ; GFX12-GISEL-NEXT:    s_wait_alu 0xfffe
3225 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
3226 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3227 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s2, 0xc1d1
3228 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3229 ; GFX12-GISEL-NEXT:    s_endpgm
3230   %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 4660, i32 49617, i1 false, i1 false)
3231   store i64 %v, ptr addrspace(1) %out
3232   ret void
3235 define amdgpu_kernel void @v_permlanex16_b32_vll_f64(ptr addrspace(1) %out, double %src0) {
3236 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vll_f64:
3237 ; GFX10-SDAG:       ; %bb.0:
3238 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3239 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
3240 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3241 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
3242 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
3243 ; GFX10-SDAG-NEXT:    s_movk_i32 s2, 0x1234
3244 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s2, 0xc1d1
3245 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3246 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
3247 ; GFX10-SDAG-NEXT:    s_endpgm
3249 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vll_f64:
3250 ; GFX10-GISEL:       ; %bb.0:
3251 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3252 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3253 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3254 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3255 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
3256 ; GFX10-GISEL-NEXT:    s_movk_i32 s2, 0x1234
3257 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3258 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s2, 0xc1d1
3259 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
3260 ; GFX10-GISEL-NEXT:    s_endpgm
3262 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vll_f64:
3263 ; GFX11-SDAG:       ; %bb.0:
3264 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3265 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3266 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
3267 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
3268 ; GFX11-SDAG-NEXT:    s_movk_i32 s2, 0x1234
3269 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instid1(SALU_CYCLE_1)
3270 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s2, 0xc1d1
3271 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3272 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3273 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3274 ; GFX11-SDAG-NEXT:    s_endpgm
3276 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vll_f64:
3277 ; GFX11-GISEL:       ; %bb.0:
3278 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3279 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3280 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3281 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
3282 ; GFX11-GISEL-NEXT:    s_movk_i32 s2, 0x1234
3283 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instid1(SALU_CYCLE_1)
3284 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3285 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3286 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s2, 0xc1d1
3287 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3288 ; GFX11-GISEL-NEXT:    s_endpgm
3290 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vll_f64:
3291 ; GFX12-SDAG:       ; %bb.0:
3292 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3293 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
3294 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
3295 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
3296 ; GFX12-SDAG-NEXT:    s_movk_i32 s2, 0x1234
3297 ; GFX12-SDAG-NEXT:    s_wait_alu 0xfffe
3298 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
3299 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s2, 0xc1d1
3300 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3301 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3302 ; GFX12-SDAG-NEXT:    s_endpgm
3304 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vll_f64:
3305 ; GFX12-GISEL:       ; %bb.0:
3306 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3307 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3308 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
3309 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
3310 ; GFX12-GISEL-NEXT:    s_movk_i32 s2, 0x1234
3311 ; GFX12-GISEL-NEXT:    s_wait_alu 0xfffe
3312 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
3313 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s2, 0xc1d1
3314 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s2, 0xc1d1
3315 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3316 ; GFX12-GISEL-NEXT:    s_endpgm
3317   %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 4660, i32 49617, i1 false, i1 false)
3318   store double %v, ptr addrspace(1) %out
3319   ret void
3322 define amdgpu_kernel void @v_permlanex16_b32_vvv_i32(ptr addrspace(1) %out, i32 %src0) {
3323 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vvv_i32:
3324 ; GFX10-SDAG:       ; %bb.0:
3325 ; GFX10-SDAG-NEXT:    s_clause 0x1
3326 ; GFX10-SDAG-NEXT:    s_load_dword s2, s[4:5], 0x2c
3327 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
3328 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s3, v0
3329 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3330 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
3331 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s2, v1
3332 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, 0
3333 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s3, s2
3334 ; GFX10-SDAG-NEXT:    global_store_dword v1, v0, s[0:1]
3335 ; GFX10-SDAG-NEXT:    s_endpgm
3337 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vvv_i32:
3338 ; GFX10-GISEL:       ; %bb.0:
3339 ; GFX10-GISEL-NEXT:    s_clause 0x1
3340 ; GFX10-GISEL-NEXT:    s_load_dword s2, s[4:5], 0x2c
3341 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
3342 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s3, v0
3343 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
3344 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v1
3345 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0
3346 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3347 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3348 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s3, s4
3349 ; GFX10-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]
3350 ; GFX10-GISEL-NEXT:    s_endpgm
3352 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vvv_i32:
3353 ; GFX11-SDAG:       ; %bb.0:
3354 ; GFX11-SDAG-NEXT:    s_clause 0x1
3355 ; GFX11-SDAG-NEXT:    s_load_b32 s2, s[4:5], 0x2c
3356 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
3357 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
3358 ; GFX11-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
3359 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
3360 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s3, v1
3361 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3362 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v1, s2
3363 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
3364 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, 0
3365 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3366 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s3, s2
3367 ; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
3368 ; GFX11-SDAG-NEXT:    s_endpgm
3370 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vvv_i32:
3371 ; GFX11-GISEL:       ; %bb.0:
3372 ; GFX11-GISEL-NEXT:    s_clause 0x1
3373 ; GFX11-GISEL-NEXT:    s_load_b32 s2, s[4:5], 0x2c
3374 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
3375 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
3376 ; GFX11-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
3377 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
3378 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
3379 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3380 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3381 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s3, v1
3382 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v1, 0
3383 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s3, s4
3384 ; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
3385 ; GFX11-GISEL-NEXT:    s_endpgm
3387 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vvv_i32:
3388 ; GFX12-SDAG:       ; %bb.0:
3389 ; GFX12-SDAG-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24
3390 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
3391 ; GFX12-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
3392 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
3393 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s3, v1
3394 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
3395 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v1, s2
3396 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
3397 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, 0
3398 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3399 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s3, s2
3400 ; GFX12-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
3401 ; GFX12-SDAG-NEXT:    s_endpgm
3403 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vvv_i32:
3404 ; GFX12-GISEL:       ; %bb.0:
3405 ; GFX12-GISEL-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24
3406 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
3407 ; GFX12-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
3408 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
3409 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
3410 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
3411 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3412 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s3, v1
3413 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v1, 0
3414 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s3, s4
3415 ; GFX12-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
3416 ; GFX12-GISEL-NEXT:    s_endpgm
3417   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
3418   %tidy = call i32 @llvm.amdgcn.workitem.id.y()
3419   %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 %tidx, i32 %tidy, i1 false, i1 false)
3420   store i32 %v, ptr addrspace(1) %out
3421   ret void
3424 define amdgpu_kernel void @v_permlanex16_b32_vvv_f32(ptr addrspace(1) %out, float %src0) {
3425 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vvv_f32:
3426 ; GFX10-SDAG:       ; %bb.0:
3427 ; GFX10-SDAG-NEXT:    s_clause 0x1
3428 ; GFX10-SDAG-NEXT:    s_load_dword s2, s[4:5], 0x2c
3429 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
3430 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s3, v0
3431 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3432 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
3433 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s2, v1
3434 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, 0
3435 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s3, s2
3436 ; GFX10-SDAG-NEXT:    global_store_dword v1, v0, s[0:1]
3437 ; GFX10-SDAG-NEXT:    s_endpgm
3439 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vvv_f32:
3440 ; GFX10-GISEL:       ; %bb.0:
3441 ; GFX10-GISEL-NEXT:    s_clause 0x1
3442 ; GFX10-GISEL-NEXT:    s_load_dword s2, s[4:5], 0x2c
3443 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x24
3444 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s3, v0
3445 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
3446 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v1
3447 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0
3448 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3449 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3450 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s3, s4
3451 ; GFX10-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]
3452 ; GFX10-GISEL-NEXT:    s_endpgm
3454 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vvv_f32:
3455 ; GFX11-SDAG:       ; %bb.0:
3456 ; GFX11-SDAG-NEXT:    s_clause 0x1
3457 ; GFX11-SDAG-NEXT:    s_load_b32 s2, s[4:5], 0x2c
3458 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
3459 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
3460 ; GFX11-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
3461 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
3462 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s3, v1
3463 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3464 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v1, s2
3465 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
3466 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, 0
3467 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3468 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s3, s2
3469 ; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
3470 ; GFX11-SDAG-NEXT:    s_endpgm
3472 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vvv_f32:
3473 ; GFX11-GISEL:       ; %bb.0:
3474 ; GFX11-GISEL-NEXT:    s_clause 0x1
3475 ; GFX11-GISEL-NEXT:    s_load_b32 s2, s[4:5], 0x2c
3476 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x24
3477 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
3478 ; GFX11-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
3479 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
3480 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
3481 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3482 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3483 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s3, v1
3484 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v1, 0
3485 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s3, s4
3486 ; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
3487 ; GFX11-GISEL-NEXT:    s_endpgm
3489 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vvv_f32:
3490 ; GFX12-SDAG:       ; %bb.0:
3491 ; GFX12-SDAG-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24
3492 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
3493 ; GFX12-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
3494 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_3)
3495 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s3, v1
3496 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
3497 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v1, s2
3498 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
3499 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, 0
3500 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3501 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s3, s2
3502 ; GFX12-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
3503 ; GFX12-SDAG-NEXT:    s_endpgm
3505 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vvv_f32:
3506 ; GFX12-GISEL:       ; %bb.0:
3507 ; GFX12-GISEL-NEXT:    s_load_b96 s[0:2], s[4:5], 0x24
3508 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
3509 ; GFX12-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
3510 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_4) | instid1(VALU_DEP_2)
3511 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
3512 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
3513 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3514 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s3, v1
3515 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v1, 0
3516 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s3, s4
3517 ; GFX12-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
3518 ; GFX12-GISEL-NEXT:    s_endpgm
3519   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
3520   %tidy = call i32 @llvm.amdgcn.workitem.id.y()
3521   %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 %tidx, i32 %tidy, i1 false, i1 false)
3522   store float %v, ptr addrspace(1) %out
3523   ret void
3526 define amdgpu_kernel void @v_permlanex16_b32_vvv_i64(ptr addrspace(1) %out, i64 %src0) {
3527 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vvv_i64:
3528 ; GFX10-SDAG:       ; %bb.0:
3529 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3530 ; GFX10-SDAG-NEXT:    s_mov_b32 null, 0
3531 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v0
3532 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s5, v1
3533 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
3534 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3535 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
3536 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
3537 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
3538 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
3539 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
3540 ; GFX10-SDAG-NEXT:    s_endpgm
3542 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vvv_i64:
3543 ; GFX10-GISEL:       ; %bb.0:
3544 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3545 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
3546 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
3547 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s5, v1
3548 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3549 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3550 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3551 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
3552 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
3553 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
3554 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
3555 ; GFX10-GISEL-NEXT:    s_endpgm
3557 ; GFX11-LABEL: v_permlanex16_b32_vvv_i64:
3558 ; GFX11:       ; %bb.0:
3559 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3560 ; GFX11-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
3561 ; GFX11-NEXT:    v_bfe_u32 v0, v0, 10, 10
3562 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0
3563 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
3564 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v0
3565 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
3566 ; GFX11-NEXT:    v_mov_b32_e32 v0, s2
3567 ; GFX11-NEXT:    v_readfirstlane_b32 s4, v1
3568 ; GFX11-NEXT:    v_mov_b32_e32 v1, s3
3569 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
3570 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3571 ; GFX11-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
3572 ; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3573 ; GFX11-NEXT:    s_endpgm
3575 ; GFX12-LABEL: v_permlanex16_b32_vvv_i64:
3576 ; GFX12:       ; %bb.0:
3577 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3578 ; GFX12-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
3579 ; GFX12-NEXT:    v_bfe_u32 v0, v0, 10, 10
3580 ; GFX12-NEXT:    v_mov_b32_e32 v2, 0
3581 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
3582 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v0
3583 ; GFX12-NEXT:    s_wait_kmcnt 0x0
3584 ; GFX12-NEXT:    v_mov_b32_e32 v0, s2
3585 ; GFX12-NEXT:    v_readfirstlane_b32 s4, v1
3586 ; GFX12-NEXT:    v_mov_b32_e32 v1, s3
3587 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
3588 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3589 ; GFX12-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
3590 ; GFX12-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3591 ; GFX12-NEXT:    s_endpgm
3592   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
3593   %tidy = call i32 @llvm.amdgcn.workitem.id.y()
3594   %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 %tidx, i32 %tidy, i1 false, i1 false)
3595   store i64 %v, ptr addrspace(1) %out
3596   ret void
3599 define amdgpu_kernel void @v_permlanex16_b32_vvv_f64(ptr addrspace(1) %out, double %src0) {
3600 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vvv_f64:
3601 ; GFX10-SDAG:       ; %bb.0:
3602 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3603 ; GFX10-SDAG-NEXT:    s_mov_b32 null, 0
3604 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v0
3605 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s5, v1
3606 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
3607 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3608 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
3609 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
3610 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
3611 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
3612 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
3613 ; GFX10-SDAG-NEXT:    s_endpgm
3615 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vvv_f64:
3616 ; GFX10-GISEL:       ; %bb.0:
3617 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3618 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
3619 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
3620 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s5, v1
3621 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3622 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3623 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3624 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
3625 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
3626 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
3627 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
3628 ; GFX10-GISEL-NEXT:    s_endpgm
3630 ; GFX11-LABEL: v_permlanex16_b32_vvv_f64:
3631 ; GFX11:       ; %bb.0:
3632 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3633 ; GFX11-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
3634 ; GFX11-NEXT:    v_bfe_u32 v0, v0, 10, 10
3635 ; GFX11-NEXT:    v_mov_b32_e32 v2, 0
3636 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
3637 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v0
3638 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
3639 ; GFX11-NEXT:    v_mov_b32_e32 v0, s2
3640 ; GFX11-NEXT:    v_readfirstlane_b32 s4, v1
3641 ; GFX11-NEXT:    v_mov_b32_e32 v1, s3
3642 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
3643 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3644 ; GFX11-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
3645 ; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3646 ; GFX11-NEXT:    s_endpgm
3648 ; GFX12-LABEL: v_permlanex16_b32_vvv_f64:
3649 ; GFX12:       ; %bb.0:
3650 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3651 ; GFX12-NEXT:    v_and_b32_e32 v1, 0x3ff, v0
3652 ; GFX12-NEXT:    v_bfe_u32 v0, v0, 10, 10
3653 ; GFX12-NEXT:    v_mov_b32_e32 v2, 0
3654 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_4) | instid1(VALU_DEP_2)
3655 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v0
3656 ; GFX12-NEXT:    s_wait_kmcnt 0x0
3657 ; GFX12-NEXT:    v_mov_b32_e32 v0, s2
3658 ; GFX12-NEXT:    v_readfirstlane_b32 s4, v1
3659 ; GFX12-NEXT:    v_mov_b32_e32 v1, s3
3660 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
3661 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3662 ; GFX12-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
3663 ; GFX12-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3664 ; GFX12-NEXT:    s_endpgm
3665   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
3666   %tidy = call i32 @llvm.amdgcn.workitem.id.y()
3667   %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 %tidx, i32 %tidy, i1 false, i1 false)
3668   store double %v, ptr addrspace(1) %out
3669   ret void
3672 define amdgpu_kernel void @v_permlanex16_b32_vvs_i32(ptr addrspace(1) %out, i32 %src0, i32 %src2) {
3673 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vvs_i32:
3674 ; GFX10-SDAG:       ; %bb.0:
3675 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3676 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3677 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s2
3678 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
3679 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, 0
3680 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s2, s3
3681 ; GFX10-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]
3682 ; GFX10-SDAG-NEXT:    s_endpgm
3684 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vvs_i32:
3685 ; GFX10-GISEL:       ; %bb.0:
3686 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3687 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
3688 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
3689 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0
3690 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3691 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3692 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s3
3693 ; GFX10-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]
3694 ; GFX10-GISEL-NEXT:    s_endpgm
3696 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vvs_i32:
3697 ; GFX11-SDAG:       ; %bb.0:
3698 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3699 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3700 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0
3701 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3702 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
3703 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, 0
3704 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s2, s3
3705 ; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
3706 ; GFX11-SDAG-NEXT:    s_endpgm
3708 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vvs_i32:
3709 ; GFX11-GISEL:       ; %bb.0:
3710 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3711 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
3712 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
3713 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
3714 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3715 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3716 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s3
3717 ; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
3718 ; GFX11-GISEL-NEXT:    s_endpgm
3720 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vvs_i32:
3721 ; GFX12-SDAG:       ; %bb.0:
3722 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3723 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
3724 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0
3725 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3726 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
3727 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, 0
3728 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s2, s3
3729 ; GFX12-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
3730 ; GFX12-SDAG-NEXT:    s_endpgm
3732 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vvs_i32:
3733 ; GFX12-GISEL:       ; %bb.0:
3734 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3735 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
3736 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
3737 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
3738 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
3739 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3740 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s3
3741 ; GFX12-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
3742 ; GFX12-GISEL-NEXT:    s_endpgm
3743   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
3744   %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 %tidx, i32 %src2, i1 false, i1 false)
3745   store i32 %v, ptr addrspace(1) %out
3746   ret void
3749 define amdgpu_kernel void @v_permlanex16_b32_vvs_f32(ptr addrspace(1) %out, float %src0, i32 %src2) {
3750 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vvs_f32:
3751 ; GFX10-SDAG:       ; %bb.0:
3752 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3753 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3754 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s2
3755 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
3756 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, 0
3757 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s2, s3
3758 ; GFX10-SDAG-NEXT:    global_store_dword v0, v1, s[0:1]
3759 ; GFX10-SDAG-NEXT:    s_endpgm
3761 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vvs_f32:
3762 ; GFX10-GISEL:       ; %bb.0:
3763 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3764 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
3765 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
3766 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0
3767 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3768 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3769 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s3
3770 ; GFX10-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]
3771 ; GFX10-GISEL-NEXT:    s_endpgm
3773 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vvs_f32:
3774 ; GFX11-SDAG:       ; %bb.0:
3775 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3776 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3777 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0
3778 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3779 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
3780 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, 0
3781 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s2, s3
3782 ; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
3783 ; GFX11-SDAG-NEXT:    s_endpgm
3785 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vvs_f32:
3786 ; GFX11-GISEL:       ; %bb.0:
3787 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3788 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
3789 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
3790 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
3791 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3792 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3793 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s3
3794 ; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
3795 ; GFX11-GISEL-NEXT:    s_endpgm
3797 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vvs_f32:
3798 ; GFX12-SDAG:       ; %bb.0:
3799 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3800 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
3801 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v1, s2 :: v_dual_and_b32 v0, 0x3ff, v0
3802 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3803 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
3804 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, 0
3805 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s2, s3
3806 ; GFX12-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
3807 ; GFX12-SDAG-NEXT:    s_endpgm
3809 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vvs_f32:
3810 ; GFX12-GISEL:       ; %bb.0:
3811 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3812 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
3813 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(SKIP_2) | instid1(VALU_DEP_1)
3814 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
3815 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
3816 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3817 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s3
3818 ; GFX12-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
3819 ; GFX12-GISEL-NEXT:    s_endpgm
3820   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
3821   %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 %tidx, i32 %src2, i1 false, i1 false)
3822   store float %v, ptr addrspace(1) %out
3823   ret void
3826 define amdgpu_kernel void @v_permlanex16_b32_vvs_i64(ptr addrspace(1) %out, i64 %src0, i32 %src2) {
3827 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vvs_i64:
3828 ; GFX10-SDAG:       ; %bb.0:
3829 ; GFX10-SDAG-NEXT:    s_clause 0x1
3830 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3831 ; GFX10-SDAG-NEXT:    s_load_dword s6, s[4:5], 0x34
3832 ; GFX10-SDAG-NEXT:    s_mov_b32 null, 0
3833 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v0
3834 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
3835 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3836 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
3837 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
3838 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s6
3839 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s6
3840 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
3841 ; GFX10-SDAG-NEXT:    s_endpgm
3843 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vvs_i64:
3844 ; GFX10-GISEL:       ; %bb.0:
3845 ; GFX10-GISEL-NEXT:    s_clause 0x1
3846 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3847 ; GFX10-GISEL-NEXT:    s_load_dword s6, s[4:5], 0x34
3848 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
3849 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
3850 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3851 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3852 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3853 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
3854 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s6
3855 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s6
3856 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
3857 ; GFX10-GISEL-NEXT:    s_endpgm
3859 ; GFX11-LABEL: v_permlanex16_b32_vvs_i64:
3860 ; GFX11:       ; %bb.0:
3861 ; GFX11-NEXT:    s_clause 0x1
3862 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3863 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
3864 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
3865 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
3866 ; GFX11-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
3867 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3868 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v0
3869 ; GFX11-NEXT:    v_mov_b32_e32 v0, s2
3870 ; GFX11-NEXT:    v_permlanex16_b32 v1, v1, s5, s4
3871 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3872 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s5, s4
3873 ; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3874 ; GFX11-NEXT:    s_endpgm
3876 ; GFX12-LABEL: v_permlanex16_b32_vvs_i64:
3877 ; GFX12:       ; %bb.0:
3878 ; GFX12-NEXT:    s_clause 0x1
3879 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3880 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
3881 ; GFX12-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
3882 ; GFX12-NEXT:    s_wait_kmcnt 0x0
3883 ; GFX12-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
3884 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3885 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v0
3886 ; GFX12-NEXT:    v_mov_b32_e32 v0, s2
3887 ; GFX12-NEXT:    v_permlanex16_b32 v1, v1, s5, s4
3888 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3889 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s5, s4
3890 ; GFX12-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3891 ; GFX12-NEXT:    s_endpgm
3892   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
3893   %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 %tidx, i32 %src2, i1 false, i1 false)
3894   store i64 %v, ptr addrspace(1) %out
3895   ret void
3898 define amdgpu_kernel void @v_permlanex16_b32_vvs_f64(ptr addrspace(1) %out, double %src0, i32 %src2) {
3899 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vvs_f64:
3900 ; GFX10-SDAG:       ; %bb.0:
3901 ; GFX10-SDAG-NEXT:    s_clause 0x1
3902 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3903 ; GFX10-SDAG-NEXT:    s_load_dword s6, s[4:5], 0x34
3904 ; GFX10-SDAG-NEXT:    s_mov_b32 null, 0
3905 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v0
3906 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
3907 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3908 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
3909 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
3910 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s6
3911 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s6
3912 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
3913 ; GFX10-SDAG-NEXT:    s_endpgm
3915 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vvs_f64:
3916 ; GFX10-GISEL:       ; %bb.0:
3917 ; GFX10-GISEL-NEXT:    s_clause 0x1
3918 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3919 ; GFX10-GISEL-NEXT:    s_load_dword s6, s[4:5], 0x34
3920 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
3921 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
3922 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
3923 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3924 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3925 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
3926 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s6
3927 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s6
3928 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
3929 ; GFX10-GISEL-NEXT:    s_endpgm
3931 ; GFX11-LABEL: v_permlanex16_b32_vvs_f64:
3932 ; GFX11:       ; %bb.0:
3933 ; GFX11-NEXT:    s_clause 0x1
3934 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3935 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
3936 ; GFX11-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
3937 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
3938 ; GFX11-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
3939 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3940 ; GFX11-NEXT:    v_readfirstlane_b32 s5, v0
3941 ; GFX11-NEXT:    v_mov_b32_e32 v0, s2
3942 ; GFX11-NEXT:    v_permlanex16_b32 v1, v1, s5, s4
3943 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3944 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s5, s4
3945 ; GFX11-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3946 ; GFX11-NEXT:    s_endpgm
3948 ; GFX12-LABEL: v_permlanex16_b32_vvs_f64:
3949 ; GFX12:       ; %bb.0:
3950 ; GFX12-NEXT:    s_clause 0x1
3951 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3952 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
3953 ; GFX12-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
3954 ; GFX12-NEXT:    s_wait_kmcnt 0x0
3955 ; GFX12-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
3956 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
3957 ; GFX12-NEXT:    v_readfirstlane_b32 s5, v0
3958 ; GFX12-NEXT:    v_mov_b32_e32 v0, s2
3959 ; GFX12-NEXT:    v_permlanex16_b32 v1, v1, s5, s4
3960 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_2)
3961 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s5, s4
3962 ; GFX12-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
3963 ; GFX12-NEXT:    s_endpgm
3964   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
3965   %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 %tidx, i32 %src2, i1 false, i1 false)
3966   store double %v, ptr addrspace(1) %out
3967   ret void
3970 define amdgpu_kernel void @v_permlanex16_b32_vsv_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1) {
3971 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vsv_i32:
3972 ; GFX10-SDAG:       ; %bb.0:
3973 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3974 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3975 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
3976 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s2, v1
3977 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, 0
3978 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s3, s2
3979 ; GFX10-SDAG-NEXT:    global_store_dword v1, v0, s[0:1]
3980 ; GFX10-SDAG-NEXT:    s_endpgm
3982 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vsv_i32:
3983 ; GFX10-GISEL:       ; %bb.0:
3984 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
3985 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
3986 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v1
3987 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0
3988 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
3989 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
3990 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s3, s4
3991 ; GFX10-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]
3992 ; GFX10-GISEL-NEXT:    s_endpgm
3994 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vsv_i32:
3995 ; GFX11-SDAG:       ; %bb.0:
3996 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
3997 ; GFX11-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
3998 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
3999 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v1, s2
4000 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
4001 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
4002 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, 0
4003 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s3, s2
4004 ; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
4005 ; GFX11-SDAG-NEXT:    s_endpgm
4007 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vsv_i32:
4008 ; GFX11-GISEL:       ; %bb.0:
4009 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4010 ; GFX11-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
4011 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v1, 0
4012 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
4013 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
4014 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4015 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, s2
4016 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s3, s4
4017 ; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
4018 ; GFX11-GISEL-NEXT:    s_endpgm
4020 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vsv_i32:
4021 ; GFX12-SDAG:       ; %bb.0:
4022 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4023 ; GFX12-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
4024 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
4025 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v1, s2
4026 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
4027 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
4028 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, 0
4029 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s3, s2
4030 ; GFX12-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
4031 ; GFX12-SDAG-NEXT:    s_endpgm
4033 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vsv_i32:
4034 ; GFX12-GISEL:       ; %bb.0:
4035 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4036 ; GFX12-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
4037 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v1, 0
4038 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
4039 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
4040 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
4041 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v0, s2
4042 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s3, s4
4043 ; GFX12-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
4044 ; GFX12-GISEL-NEXT:    s_endpgm
4045   %tidy = call i32 @llvm.amdgcn.workitem.id.y()
4046   %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %tidy, i1 false, i1 false)
4047   store i32 %v, ptr addrspace(1) %out
4048   ret void
4051 define amdgpu_kernel void @v_permlanex16_b32_vsv_f32(ptr addrspace(1) %out, float %src0, i32 %src1) {
4052 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vsv_f32:
4053 ; GFX10-SDAG:       ; %bb.0:
4054 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4055 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4056 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4057 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s2, v1
4058 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, 0
4059 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s3, s2
4060 ; GFX10-SDAG-NEXT:    global_store_dword v1, v0, s[0:1]
4061 ; GFX10-SDAG-NEXT:    s_endpgm
4063 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vsv_f32:
4064 ; GFX10-GISEL:       ; %bb.0:
4065 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4066 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
4067 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v1
4068 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0
4069 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4070 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
4071 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s3, s4
4072 ; GFX10-GISEL-NEXT:    global_store_dword v1, v0, s[0:1]
4073 ; GFX10-GISEL-NEXT:    s_endpgm
4075 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vsv_f32:
4076 ; GFX11-SDAG:       ; %bb.0:
4077 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4078 ; GFX11-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
4079 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4080 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v1, s2
4081 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
4082 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
4083 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, 0
4084 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s3, s2
4085 ; GFX11-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
4086 ; GFX11-SDAG-NEXT:    s_endpgm
4088 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vsv_f32:
4089 ; GFX11-GISEL:       ; %bb.0:
4090 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4091 ; GFX11-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
4092 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v1, 0
4093 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
4094 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
4095 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4096 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, s2
4097 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s3, s4
4098 ; GFX11-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
4099 ; GFX11-GISEL-NEXT:    s_endpgm
4101 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vsv_f32:
4102 ; GFX12-SDAG:       ; %bb.0:
4103 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4104 ; GFX12-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
4105 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
4106 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v1, s2
4107 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_1) | instid1(VALU_DEP_2)
4108 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s2, v0
4109 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, 0
4110 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s3, s2
4111 ; GFX12-SDAG-NEXT:    global_store_b32 v0, v1, s[0:1]
4112 ; GFX12-SDAG-NEXT:    s_endpgm
4114 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vsv_f32:
4115 ; GFX12-GISEL:       ; %bb.0:
4116 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4117 ; GFX12-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
4118 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v1, 0
4119 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
4120 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s4, v0
4121 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
4122 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v0, s2
4123 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s3, s4
4124 ; GFX12-GISEL-NEXT:    global_store_b32 v1, v0, s[0:1]
4125 ; GFX12-GISEL-NEXT:    s_endpgm
4126   %tidy = call i32 @llvm.amdgcn.workitem.id.y()
4127   %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 %src1, i32 %tidy, i1 false, i1 false)
4128   store float %v, ptr addrspace(1) %out
4129   ret void
4132 define amdgpu_kernel void @v_permlanex16_b32_vsv_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1) {
4133 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vsv_i64:
4134 ; GFX10-SDAG:       ; %bb.0:
4135 ; GFX10-SDAG-NEXT:    s_clause 0x1
4136 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4137 ; GFX10-SDAG-NEXT:    s_load_dword s6, s[4:5], 0x34
4138 ; GFX10-SDAG-NEXT:    s_mov_b32 null, 0
4139 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v1
4140 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
4141 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4142 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
4143 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4144 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s6, s4
4145 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s6, s4
4146 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
4147 ; GFX10-SDAG-NEXT:    s_endpgm
4149 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vsv_i64:
4150 ; GFX10-GISEL:       ; %bb.0:
4151 ; GFX10-GISEL-NEXT:    s_clause 0x1
4152 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4153 ; GFX10-GISEL-NEXT:    s_load_dword s6, s[4:5], 0x34
4154 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
4155 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v1
4156 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4157 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4158 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
4159 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
4160 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s6, s4
4161 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s6, s4
4162 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
4163 ; GFX10-GISEL-NEXT:    s_endpgm
4165 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vsv_i64:
4166 ; GFX11-SDAG:       ; %bb.0:
4167 ; GFX11-SDAG-NEXT:    s_clause 0x1
4168 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4169 ; GFX11-SDAG-NEXT:    s_load_b32 s4, s[4:5], 0x34
4170 ; GFX11-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
4171 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
4172 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
4173 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s5, v0
4174 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4175 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v0, s2
4176 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
4177 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
4178 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
4179 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4180 ; GFX11-SDAG-NEXT:    s_endpgm
4182 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vsv_i64:
4183 ; GFX11-GISEL:       ; %bb.0:
4184 ; GFX11-GISEL-NEXT:    s_clause 0x1
4185 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4186 ; GFX11-GISEL-NEXT:    s_load_b32 s4, s[4:5], 0x34
4187 ; GFX11-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
4188 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4189 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
4190 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s5, v0
4191 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4192 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
4193 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
4194 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
4195 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
4196 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4197 ; GFX11-GISEL-NEXT:    s_endpgm
4199 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vsv_i64:
4200 ; GFX12-SDAG:       ; %bb.0:
4201 ; GFX12-SDAG-NEXT:    s_clause 0x1
4202 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4203 ; GFX12-SDAG-NEXT:    s_load_b32 s4, s[4:5], 0x34
4204 ; GFX12-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
4205 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
4206 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
4207 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s5, v0
4208 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
4209 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v0, s2
4210 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
4211 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
4212 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
4213 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4214 ; GFX12-SDAG-NEXT:    s_endpgm
4216 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vsv_i64:
4217 ; GFX12-GISEL:       ; %bb.0:
4218 ; GFX12-GISEL-NEXT:    s_clause 0x1
4219 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4220 ; GFX12-GISEL-NEXT:    s_load_b32 s4, s[4:5], 0x34
4221 ; GFX12-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
4222 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4223 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
4224 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s5, v0
4225 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
4226 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
4227 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
4228 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
4229 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
4230 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4231 ; GFX12-GISEL-NEXT:    s_endpgm
4232   %tidy = call i32 @llvm.amdgcn.workitem.id.y()
4233   %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %tidy, i1 false, i1 false)
4234   store i64 %v, ptr addrspace(1) %out
4235   ret void
4238 define amdgpu_kernel void @v_permlanex16_b32_vsv_f64(ptr addrspace(1) %out, double %src0, i32 %src1) {
4239 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vsv_f64:
4240 ; GFX10-SDAG:       ; %bb.0:
4241 ; GFX10-SDAG-NEXT:    s_clause 0x1
4242 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4243 ; GFX10-SDAG-NEXT:    s_load_dword s6, s[4:5], 0x34
4244 ; GFX10-SDAG-NEXT:    s_mov_b32 null, 0
4245 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v1
4246 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
4247 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4248 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
4249 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4250 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s6, s4
4251 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s6, s4
4252 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
4253 ; GFX10-SDAG-NEXT:    s_endpgm
4255 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vsv_f64:
4256 ; GFX10-GISEL:       ; %bb.0:
4257 ; GFX10-GISEL-NEXT:    s_clause 0x1
4258 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4259 ; GFX10-GISEL-NEXT:    s_load_dword s6, s[4:5], 0x34
4260 ; GFX10-GISEL-NEXT:    s_mov_b32 null, 0
4261 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v1
4262 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4263 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4264 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
4265 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
4266 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s6, s4
4267 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s6, s4
4268 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
4269 ; GFX10-GISEL-NEXT:    s_endpgm
4271 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vsv_f64:
4272 ; GFX11-SDAG:       ; %bb.0:
4273 ; GFX11-SDAG-NEXT:    s_clause 0x1
4274 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4275 ; GFX11-SDAG-NEXT:    s_load_b32 s4, s[4:5], 0x34
4276 ; GFX11-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
4277 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
4278 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
4279 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s5, v0
4280 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4281 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v0, s2
4282 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
4283 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
4284 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
4285 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4286 ; GFX11-SDAG-NEXT:    s_endpgm
4288 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vsv_f64:
4289 ; GFX11-GISEL:       ; %bb.0:
4290 ; GFX11-GISEL-NEXT:    s_clause 0x1
4291 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4292 ; GFX11-GISEL-NEXT:    s_load_b32 s4, s[4:5], 0x34
4293 ; GFX11-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
4294 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4295 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
4296 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s5, v0
4297 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4298 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
4299 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
4300 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
4301 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
4302 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4303 ; GFX11-GISEL-NEXT:    s_endpgm
4305 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vsv_f64:
4306 ; GFX12-SDAG:       ; %bb.0:
4307 ; GFX12-SDAG-NEXT:    s_clause 0x1
4308 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4309 ; GFX12-SDAG-NEXT:    s_load_b32 s4, s[4:5], 0x34
4310 ; GFX12-SDAG-NEXT:    v_bfe_u32 v0, v0, 10, 10
4311 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
4312 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
4313 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s5, v0
4314 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
4315 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v1, s3 :: v_dual_mov_b32 v0, s2
4316 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
4317 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2)
4318 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
4319 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4320 ; GFX12-SDAG-NEXT:    s_endpgm
4322 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vsv_f64:
4323 ; GFX12-GISEL:       ; %bb.0:
4324 ; GFX12-GISEL-NEXT:    s_clause 0x1
4325 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4326 ; GFX12-GISEL-NEXT:    s_load_b32 s4, s[4:5], 0x34
4327 ; GFX12-GISEL-NEXT:    v_bfe_u32 v0, v0, 10, 10
4328 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4329 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_2) | instid1(VALU_DEP_1)
4330 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s5, v0
4331 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
4332 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
4333 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5
4334 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2)
4335 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5
4336 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4337 ; GFX12-GISEL-NEXT:    s_endpgm
4338   %tidy = call i32 @llvm.amdgcn.workitem.id.y()
4339   %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 %src1, i32 %tidy, i1 false, i1 false)
4340   store double %v, ptr addrspace(1) %out
4341   ret void
4344 define amdgpu_kernel void @v_permlanex16_b32_vss_fi_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
4345 ; GFX10-LABEL: v_permlanex16_b32_vss_fi_i32:
4346 ; GFX10:       ; %bb.0:
4347 ; GFX10-NEXT:    s_clause 0x1
4348 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4349 ; GFX10-NEXT:    s_load_dword s6, s[4:5], 0x34
4350 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
4351 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
4352 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
4353 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s3, s6 op_sel:[1,0]
4354 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
4355 ; GFX10-NEXT:    s_endpgm
4357 ; GFX11-LABEL: v_permlanex16_b32_vss_fi_i32:
4358 ; GFX11:       ; %bb.0:
4359 ; GFX11-NEXT:    s_clause 0x1
4360 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4361 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
4362 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
4363 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
4364 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4365 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s3, s4 op_sel:[1,0]
4366 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
4367 ; GFX11-NEXT:    s_endpgm
4369 ; GFX12-LABEL: v_permlanex16_b32_vss_fi_i32:
4370 ; GFX12:       ; %bb.0:
4371 ; GFX12-NEXT:    s_clause 0x1
4372 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4373 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
4374 ; GFX12-NEXT:    s_wait_kmcnt 0x0
4375 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
4376 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4377 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s3, s4 op_sel:[1,0]
4378 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
4379 ; GFX12-NEXT:    s_endpgm
4380   %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 true, i1 false)
4381   store i32 %v, ptr addrspace(1) %out
4382   ret void
4385 define amdgpu_kernel void @v_permlanex16_b32_vss_fi_f32(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {
4386 ; GFX10-LABEL: v_permlanex16_b32_vss_fi_f32:
4387 ; GFX10:       ; %bb.0:
4388 ; GFX10-NEXT:    s_clause 0x1
4389 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4390 ; GFX10-NEXT:    s_load_dword s6, s[4:5], 0x34
4391 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
4392 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
4393 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
4394 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s3, s6 op_sel:[1,0]
4395 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
4396 ; GFX10-NEXT:    s_endpgm
4398 ; GFX11-LABEL: v_permlanex16_b32_vss_fi_f32:
4399 ; GFX11:       ; %bb.0:
4400 ; GFX11-NEXT:    s_clause 0x1
4401 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4402 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
4403 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
4404 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
4405 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4406 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s3, s4 op_sel:[1,0]
4407 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
4408 ; GFX11-NEXT:    s_endpgm
4410 ; GFX12-LABEL: v_permlanex16_b32_vss_fi_f32:
4411 ; GFX12:       ; %bb.0:
4412 ; GFX12-NEXT:    s_clause 0x1
4413 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4414 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
4415 ; GFX12-NEXT:    s_wait_kmcnt 0x0
4416 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
4417 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4418 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s3, s4 op_sel:[1,0]
4419 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
4420 ; GFX12-NEXT:    s_endpgm
4421   %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 %src1, i32 %src2, i1 true, i1 false)
4422   store float %v, ptr addrspace(1) %out
4423   ret void
4426 define amdgpu_kernel void @v_permlanex16_b32_vss_fi_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1, i32 %src2) {
4427 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vss_fi_i64:
4428 ; GFX10-SDAG:       ; %bb.0:
4429 ; GFX10-SDAG-NEXT:    s_clause 0x1
4430 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4431 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
4432 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
4433 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4434 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
4435 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4436 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s6, s7 op_sel:[1,0]
4437 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s6, s7 op_sel:[1,0]
4438 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
4439 ; GFX10-SDAG-NEXT:    s_endpgm
4441 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vss_fi_i64:
4442 ; GFX10-GISEL:       ; %bb.0:
4443 ; GFX10-GISEL-NEXT:    s_clause 0x1
4444 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4445 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
4446 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4447 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4448 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
4449 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
4450 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s6, s7 op_sel:[1,0]
4451 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s6, s7 op_sel:[1,0]
4452 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
4453 ; GFX10-GISEL-NEXT:    s_endpgm
4455 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vss_fi_i64:
4456 ; GFX11-SDAG:       ; %bb.0:
4457 ; GFX11-SDAG-NEXT:    s_clause 0x1
4458 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4459 ; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4460 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4461 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
4462 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4463 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
4464 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,0]
4465 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,0]
4466 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4467 ; GFX11-SDAG-NEXT:    s_endpgm
4469 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vss_fi_i64:
4470 ; GFX11-GISEL:       ; %bb.0:
4471 ; GFX11-GISEL-NEXT:    s_clause 0x1
4472 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4473 ; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4474 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4475 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4476 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
4477 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
4478 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,0]
4479 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,0]
4480 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4481 ; GFX11-GISEL-NEXT:    s_endpgm
4483 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vss_fi_i64:
4484 ; GFX12-SDAG:       ; %bb.0:
4485 ; GFX12-SDAG-NEXT:    s_clause 0x1
4486 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4487 ; GFX12-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4488 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
4489 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
4490 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4491 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
4492 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,0]
4493 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,0]
4494 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4495 ; GFX12-SDAG-NEXT:    s_endpgm
4497 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vss_fi_i64:
4498 ; GFX12-GISEL:       ; %bb.0:
4499 ; GFX12-GISEL-NEXT:    s_clause 0x1
4500 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4501 ; GFX12-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4502 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4503 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
4504 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
4505 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
4506 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,0]
4507 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,0]
4508 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4509 ; GFX12-GISEL-NEXT:    s_endpgm
4510   %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %src2, i1 true, i1 false)
4511   store i64 %v, ptr addrspace(1) %out
4512   ret void
4515 define amdgpu_kernel void @v_permlanex16_b32_vss_fi_f64(ptr addrspace(1) %out, double %src0, i32 %src1, i32 %src2) {
4516 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vss_fi_f64:
4517 ; GFX10-SDAG:       ; %bb.0:
4518 ; GFX10-SDAG-NEXT:    s_clause 0x1
4519 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4520 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
4521 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
4522 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4523 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
4524 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4525 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s6, s7 op_sel:[1,0]
4526 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s6, s7 op_sel:[1,0]
4527 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
4528 ; GFX10-SDAG-NEXT:    s_endpgm
4530 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vss_fi_f64:
4531 ; GFX10-GISEL:       ; %bb.0:
4532 ; GFX10-GISEL-NEXT:    s_clause 0x1
4533 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4534 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
4535 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4536 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4537 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
4538 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
4539 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s6, s7 op_sel:[1,0]
4540 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s6, s7 op_sel:[1,0]
4541 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
4542 ; GFX10-GISEL-NEXT:    s_endpgm
4544 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vss_fi_f64:
4545 ; GFX11-SDAG:       ; %bb.0:
4546 ; GFX11-SDAG-NEXT:    s_clause 0x1
4547 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4548 ; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4549 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4550 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
4551 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4552 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
4553 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,0]
4554 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,0]
4555 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4556 ; GFX11-SDAG-NEXT:    s_endpgm
4558 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vss_fi_f64:
4559 ; GFX11-GISEL:       ; %bb.0:
4560 ; GFX11-GISEL-NEXT:    s_clause 0x1
4561 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4562 ; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4563 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4564 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4565 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
4566 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
4567 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,0]
4568 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,0]
4569 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4570 ; GFX11-GISEL-NEXT:    s_endpgm
4572 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vss_fi_f64:
4573 ; GFX12-SDAG:       ; %bb.0:
4574 ; GFX12-SDAG-NEXT:    s_clause 0x1
4575 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4576 ; GFX12-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4577 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
4578 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
4579 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4580 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
4581 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,0]
4582 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,0]
4583 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4584 ; GFX12-SDAG-NEXT:    s_endpgm
4586 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vss_fi_f64:
4587 ; GFX12-GISEL:       ; %bb.0:
4588 ; GFX12-GISEL-NEXT:    s_clause 0x1
4589 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4590 ; GFX12-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4591 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4592 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
4593 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
4594 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
4595 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,0]
4596 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,0]
4597 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4598 ; GFX12-GISEL-NEXT:    s_endpgm
4599   %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 %src1, i32 %src2, i1 true, i1 false)
4600   store double %v, ptr addrspace(1) %out
4601   ret void
4604 define amdgpu_kernel void @v_permlanex16_b32_vss_bc_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
4605 ; GFX10-LABEL: v_permlanex16_b32_vss_bc_i32:
4606 ; GFX10:       ; %bb.0:
4607 ; GFX10-NEXT:    s_clause 0x1
4608 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4609 ; GFX10-NEXT:    s_load_dword s6, s[4:5], 0x34
4610 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
4611 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
4612 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
4613 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s3, s6 op_sel:[0,1]
4614 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
4615 ; GFX10-NEXT:    s_endpgm
4617 ; GFX11-LABEL: v_permlanex16_b32_vss_bc_i32:
4618 ; GFX11:       ; %bb.0:
4619 ; GFX11-NEXT:    s_clause 0x1
4620 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4621 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
4622 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
4623 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
4624 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4625 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s3, s4 op_sel:[0,1]
4626 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
4627 ; GFX11-NEXT:    s_endpgm
4629 ; GFX12-LABEL: v_permlanex16_b32_vss_bc_i32:
4630 ; GFX12:       ; %bb.0:
4631 ; GFX12-NEXT:    s_clause 0x1
4632 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4633 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
4634 ; GFX12-NEXT:    s_wait_kmcnt 0x0
4635 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
4636 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4637 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s3, s4 op_sel:[0,1]
4638 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
4639 ; GFX12-NEXT:    s_endpgm
4640   %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 false, i1 true)
4641   store i32 %v, ptr addrspace(1) %out
4642   ret void
4645 define amdgpu_kernel void @v_permlanex16_b32_vss_bc_f32(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {
4646 ; GFX10-LABEL: v_permlanex16_b32_vss_bc_f32:
4647 ; GFX10:       ; %bb.0:
4648 ; GFX10-NEXT:    s_clause 0x1
4649 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4650 ; GFX10-NEXT:    s_load_dword s6, s[4:5], 0x34
4651 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
4652 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
4653 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
4654 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s3, s6 op_sel:[0,1]
4655 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
4656 ; GFX10-NEXT:    s_endpgm
4658 ; GFX11-LABEL: v_permlanex16_b32_vss_bc_f32:
4659 ; GFX11:       ; %bb.0:
4660 ; GFX11-NEXT:    s_clause 0x1
4661 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4662 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
4663 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
4664 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
4665 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4666 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s3, s4 op_sel:[0,1]
4667 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
4668 ; GFX11-NEXT:    s_endpgm
4670 ; GFX12-LABEL: v_permlanex16_b32_vss_bc_f32:
4671 ; GFX12:       ; %bb.0:
4672 ; GFX12-NEXT:    s_clause 0x1
4673 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4674 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
4675 ; GFX12-NEXT:    s_wait_kmcnt 0x0
4676 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
4677 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4678 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s3, s4 op_sel:[0,1]
4679 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
4680 ; GFX12-NEXT:    s_endpgm
4681   %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 %src1, i32 %src2, i1 false, i1 true)
4682   store float %v, ptr addrspace(1) %out
4683   ret void
4686 define amdgpu_kernel void @v_permlanex16_b32_vss_bc_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1, i32 %src2) {
4687 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vss_bc_i64:
4688 ; GFX10-SDAG:       ; %bb.0:
4689 ; GFX10-SDAG-NEXT:    s_clause 0x1
4690 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4691 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
4692 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
4693 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4694 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
4695 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4696 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s6, s7 op_sel:[0,1]
4697 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s6, s7 op_sel:[0,1]
4698 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
4699 ; GFX10-SDAG-NEXT:    s_endpgm
4701 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vss_bc_i64:
4702 ; GFX10-GISEL:       ; %bb.0:
4703 ; GFX10-GISEL-NEXT:    s_clause 0x1
4704 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4705 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
4706 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4707 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4708 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
4709 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
4710 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s6, s7 op_sel:[0,1]
4711 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s6, s7 op_sel:[0,1]
4712 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
4713 ; GFX10-GISEL-NEXT:    s_endpgm
4715 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vss_bc_i64:
4716 ; GFX11-SDAG:       ; %bb.0:
4717 ; GFX11-SDAG-NEXT:    s_clause 0x1
4718 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4719 ; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4720 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4721 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
4722 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4723 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
4724 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[0,1]
4725 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[0,1]
4726 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4727 ; GFX11-SDAG-NEXT:    s_endpgm
4729 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vss_bc_i64:
4730 ; GFX11-GISEL:       ; %bb.0:
4731 ; GFX11-GISEL-NEXT:    s_clause 0x1
4732 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4733 ; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4734 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4735 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4736 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
4737 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
4738 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[0,1]
4739 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[0,1]
4740 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4741 ; GFX11-GISEL-NEXT:    s_endpgm
4743 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vss_bc_i64:
4744 ; GFX12-SDAG:       ; %bb.0:
4745 ; GFX12-SDAG-NEXT:    s_clause 0x1
4746 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4747 ; GFX12-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4748 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
4749 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
4750 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4751 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
4752 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[0,1]
4753 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[0,1]
4754 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4755 ; GFX12-SDAG-NEXT:    s_endpgm
4757 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vss_bc_i64:
4758 ; GFX12-GISEL:       ; %bb.0:
4759 ; GFX12-GISEL-NEXT:    s_clause 0x1
4760 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4761 ; GFX12-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4762 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4763 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
4764 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
4765 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
4766 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[0,1]
4767 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[0,1]
4768 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4769 ; GFX12-GISEL-NEXT:    s_endpgm
4770   %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %src2, i1 false, i1 true)
4771   store i64 %v, ptr addrspace(1) %out
4772   ret void
4775 define amdgpu_kernel void @v_permlanex16_b32_vss_bc_f64(ptr addrspace(1) %out, double %src0, i32 %src1, i32 %src2) {
4776 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vss_bc_f64:
4777 ; GFX10-SDAG:       ; %bb.0:
4778 ; GFX10-SDAG-NEXT:    s_clause 0x1
4779 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4780 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
4781 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
4782 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4783 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
4784 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4785 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s6, s7 op_sel:[0,1]
4786 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s6, s7 op_sel:[0,1]
4787 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
4788 ; GFX10-SDAG-NEXT:    s_endpgm
4790 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vss_bc_f64:
4791 ; GFX10-GISEL:       ; %bb.0:
4792 ; GFX10-GISEL-NEXT:    s_clause 0x1
4793 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4794 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
4795 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4796 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4797 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
4798 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
4799 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s6, s7 op_sel:[0,1]
4800 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s6, s7 op_sel:[0,1]
4801 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
4802 ; GFX10-GISEL-NEXT:    s_endpgm
4804 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vss_bc_f64:
4805 ; GFX11-SDAG:       ; %bb.0:
4806 ; GFX11-SDAG-NEXT:    s_clause 0x1
4807 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4808 ; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4809 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4810 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
4811 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4812 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
4813 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[0,1]
4814 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[0,1]
4815 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4816 ; GFX11-SDAG-NEXT:    s_endpgm
4818 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vss_bc_f64:
4819 ; GFX11-GISEL:       ; %bb.0:
4820 ; GFX11-GISEL-NEXT:    s_clause 0x1
4821 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4822 ; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4823 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4824 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4825 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
4826 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
4827 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[0,1]
4828 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[0,1]
4829 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4830 ; GFX11-GISEL-NEXT:    s_endpgm
4832 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vss_bc_f64:
4833 ; GFX12-SDAG:       ; %bb.0:
4834 ; GFX12-SDAG-NEXT:    s_clause 0x1
4835 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4836 ; GFX12-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4837 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
4838 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
4839 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4840 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
4841 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[0,1]
4842 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[0,1]
4843 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4844 ; GFX12-SDAG-NEXT:    s_endpgm
4846 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vss_bc_f64:
4847 ; GFX12-GISEL:       ; %bb.0:
4848 ; GFX12-GISEL-NEXT:    s_clause 0x1
4849 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4850 ; GFX12-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4851 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4852 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
4853 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
4854 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
4855 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[0,1]
4856 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[0,1]
4857 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4858 ; GFX12-GISEL-NEXT:    s_endpgm
4859   %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 %src1, i32 %src2, i1 false, i1 true)
4860   store double %v, ptr addrspace(1) %out
4861   ret void
4864 define amdgpu_kernel void @v_permlanex16_b32_vss_fi_bc_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
4865 ; GFX10-LABEL: v_permlanex16_b32_vss_fi_bc_i32:
4866 ; GFX10:       ; %bb.0:
4867 ; GFX10-NEXT:    s_clause 0x1
4868 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4869 ; GFX10-NEXT:    s_load_dword s6, s[4:5], 0x34
4870 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
4871 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
4872 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
4873 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s3, s6 op_sel:[1,1]
4874 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
4875 ; GFX10-NEXT:    s_endpgm
4877 ; GFX11-LABEL: v_permlanex16_b32_vss_fi_bc_i32:
4878 ; GFX11:       ; %bb.0:
4879 ; GFX11-NEXT:    s_clause 0x1
4880 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4881 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
4882 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
4883 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
4884 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4885 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s3, s4 op_sel:[1,1]
4886 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
4887 ; GFX11-NEXT:    s_endpgm
4889 ; GFX12-LABEL: v_permlanex16_b32_vss_fi_bc_i32:
4890 ; GFX12:       ; %bb.0:
4891 ; GFX12-NEXT:    s_clause 0x1
4892 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4893 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
4894 ; GFX12-NEXT:    s_wait_kmcnt 0x0
4895 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
4896 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4897 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s3, s4 op_sel:[1,1]
4898 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
4899 ; GFX12-NEXT:    s_endpgm
4900   %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %src0, i32 %src0, i32 %src1, i32 %src2, i1 true, i1 true)
4901   store i32 %v, ptr addrspace(1) %out
4902   ret void
4905 define amdgpu_kernel void @v_permlanex16_b32_vss_fi_bc_f32(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {
4906 ; GFX10-LABEL: v_permlanex16_b32_vss_fi_bc_f32:
4907 ; GFX10:       ; %bb.0:
4908 ; GFX10-NEXT:    s_clause 0x1
4909 ; GFX10-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4910 ; GFX10-NEXT:    s_load_dword s6, s[4:5], 0x34
4911 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
4912 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
4913 ; GFX10-NEXT:    v_mov_b32_e32 v0, s2
4914 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s3, s6 op_sel:[1,1]
4915 ; GFX10-NEXT:    global_store_dword v1, v0, s[0:1]
4916 ; GFX10-NEXT:    s_endpgm
4918 ; GFX11-LABEL: v_permlanex16_b32_vss_fi_bc_f32:
4919 ; GFX11:       ; %bb.0:
4920 ; GFX11-NEXT:    s_clause 0x1
4921 ; GFX11-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4922 ; GFX11-NEXT:    s_load_b32 s4, s[4:5], 0x34
4923 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
4924 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
4925 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4926 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s3, s4 op_sel:[1,1]
4927 ; GFX11-NEXT:    global_store_b32 v1, v0, s[0:1]
4928 ; GFX11-NEXT:    s_endpgm
4930 ; GFX12-LABEL: v_permlanex16_b32_vss_fi_bc_f32:
4931 ; GFX12:       ; %bb.0:
4932 ; GFX12-NEXT:    s_clause 0x1
4933 ; GFX12-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4934 ; GFX12-NEXT:    s_load_b32 s4, s[4:5], 0x34
4935 ; GFX12-NEXT:    s_wait_kmcnt 0x0
4936 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_mov_b32 v0, s2
4937 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
4938 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s3, s4 op_sel:[1,1]
4939 ; GFX12-NEXT:    global_store_b32 v1, v0, s[0:1]
4940 ; GFX12-NEXT:    s_endpgm
4941   %v = call float @llvm.amdgcn.permlanex16.f32(float %src0, float %src0, i32 %src1, i32 %src2, i1 true, i1 true)
4942   store float %v, ptr addrspace(1) %out
4943   ret void
4946 define amdgpu_kernel void @v_permlanex16_b32_vss_fi_bc_i64(ptr addrspace(1) %out, i64 %src0, i32 %src1, i32 %src2) {
4947 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vss_fi_bc_i64:
4948 ; GFX10-SDAG:       ; %bb.0:
4949 ; GFX10-SDAG-NEXT:    s_clause 0x1
4950 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4951 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
4952 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
4953 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4954 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
4955 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4956 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s6, s7 op_sel:[1,1]
4957 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s6, s7 op_sel:[1,1]
4958 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
4959 ; GFX10-SDAG-NEXT:    s_endpgm
4961 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vss_fi_bc_i64:
4962 ; GFX10-GISEL:       ; %bb.0:
4963 ; GFX10-GISEL-NEXT:    s_clause 0x1
4964 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
4965 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
4966 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4967 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4968 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
4969 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
4970 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s6, s7 op_sel:[1,1]
4971 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s6, s7 op_sel:[1,1]
4972 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
4973 ; GFX10-GISEL-NEXT:    s_endpgm
4975 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vss_fi_bc_i64:
4976 ; GFX11-SDAG:       ; %bb.0:
4977 ; GFX11-SDAG-NEXT:    s_clause 0x1
4978 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4979 ; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4980 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
4981 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
4982 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
4983 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
4984 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,1]
4985 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,1]
4986 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
4987 ; GFX11-SDAG-NEXT:    s_endpgm
4989 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vss_fi_bc_i64:
4990 ; GFX11-GISEL:       ; %bb.0:
4991 ; GFX11-GISEL-NEXT:    s_clause 0x1
4992 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
4993 ; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
4994 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
4995 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
4996 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
4997 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
4998 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,1]
4999 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,1]
5000 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
5001 ; GFX11-GISEL-NEXT:    s_endpgm
5003 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vss_fi_bc_i64:
5004 ; GFX12-SDAG:       ; %bb.0:
5005 ; GFX12-SDAG-NEXT:    s_clause 0x1
5006 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
5007 ; GFX12-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
5008 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
5009 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
5010 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
5011 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
5012 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,1]
5013 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,1]
5014 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
5015 ; GFX12-SDAG-NEXT:    s_endpgm
5017 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vss_fi_bc_i64:
5018 ; GFX12-GISEL:       ; %bb.0:
5019 ; GFX12-GISEL-NEXT:    s_clause 0x1
5020 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
5021 ; GFX12-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
5022 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5023 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
5024 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
5025 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
5026 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,1]
5027 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,1]
5028 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
5029 ; GFX12-GISEL-NEXT:    s_endpgm
5030   %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %src0, i64 %src0, i32 %src1, i32 %src2, i1 true, i1 true)
5031   store i64 %v, ptr addrspace(1) %out
5032   ret void
5035 define amdgpu_kernel void @v_permlanex16_b32_vss_fi_bc_f64(ptr addrspace(1) %out, double %src0, i32 %src1, i32 %src2) {
5036 ; GFX10-SDAG-LABEL: v_permlanex16_b32_vss_fi_bc_f64:
5037 ; GFX10-SDAG:       ; %bb.0:
5038 ; GFX10-SDAG-NEXT:    s_clause 0x1
5039 ; GFX10-SDAG-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
5040 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
5041 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5042 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5043 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, s3
5044 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v0, s2
5045 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s6, s7 op_sel:[1,1]
5046 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s6, s7 op_sel:[1,1]
5047 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
5048 ; GFX10-SDAG-NEXT:    s_endpgm
5050 ; GFX10-GISEL-LABEL: v_permlanex16_b32_vss_fi_bc_f64:
5051 ; GFX10-GISEL:       ; %bb.0:
5052 ; GFX10-GISEL-NEXT:    s_clause 0x1
5053 ; GFX10-GISEL-NEXT:    s_load_dwordx4 s[0:3], s[4:5], 0x24
5054 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[6:7], s[4:5], 0x34
5055 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5056 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5057 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, s2
5058 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, s3
5059 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s6, s7 op_sel:[1,1]
5060 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s6, s7 op_sel:[1,1]
5061 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[0:1]
5062 ; GFX10-GISEL-NEXT:    s_endpgm
5064 ; GFX11-SDAG-LABEL: v_permlanex16_b32_vss_fi_bc_f64:
5065 ; GFX11-SDAG:       ; %bb.0:
5066 ; GFX11-SDAG-NEXT:    s_clause 0x1
5067 ; GFX11-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
5068 ; GFX11-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
5069 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5070 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
5071 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v0, s2
5072 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
5073 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,1]
5074 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,1]
5075 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
5076 ; GFX11-SDAG-NEXT:    s_endpgm
5078 ; GFX11-GISEL-LABEL: v_permlanex16_b32_vss_fi_bc_f64:
5079 ; GFX11-GISEL:       ; %bb.0:
5080 ; GFX11-GISEL-NEXT:    s_clause 0x1
5081 ; GFX11-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
5082 ; GFX11-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
5083 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5084 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5085 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
5086 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
5087 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,1]
5088 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,1]
5089 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
5090 ; GFX11-GISEL-NEXT:    s_endpgm
5092 ; GFX12-SDAG-LABEL: v_permlanex16_b32_vss_fi_bc_f64:
5093 ; GFX12-SDAG:       ; %bb.0:
5094 ; GFX12-SDAG-NEXT:    s_clause 0x1
5095 ; GFX12-SDAG-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
5096 ; GFX12-SDAG-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
5097 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
5098 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, s3
5099 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v0, s2
5100 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
5101 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,1]
5102 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,1]
5103 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
5104 ; GFX12-SDAG-NEXT:    s_endpgm
5106 ; GFX12-GISEL-LABEL: v_permlanex16_b32_vss_fi_bc_f64:
5107 ; GFX12-GISEL:       ; %bb.0:
5108 ; GFX12-GISEL-NEXT:    s_clause 0x1
5109 ; GFX12-GISEL-NEXT:    s_load_b128 s[0:3], s[4:5], 0x24
5110 ; GFX12-GISEL-NEXT:    s_load_b64 s[4:5], s[4:5], 0x34
5111 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5112 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
5113 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v0, s2 :: v_dual_mov_b32 v1, s3
5114 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
5115 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s4, s5 op_sel:[1,1]
5116 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s4, s5 op_sel:[1,1]
5117 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[0:1]
5118 ; GFX12-GISEL-NEXT:    s_endpgm
5119   %v = call double @llvm.amdgcn.permlanex16.f64(double %src0, double %src0, i32 %src1, i32 %src2, i1 true, i1 true)
5120   store double %v, ptr addrspace(1) %out
5121   ret void
5124 define amdgpu_kernel void @v_permlane16_b32_tid_tid_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
5125 ; GFX10-LABEL: v_permlane16_b32_tid_tid_i32:
5126 ; GFX10:       ; %bb.0:
5127 ; GFX10-NEXT:    s_clause 0x1
5128 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5129 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5130 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
5131 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
5132 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5133 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
5134 ; GFX10-NEXT:    s_endpgm
5136 ; GFX11-LABEL: v_permlane16_b32_tid_tid_i32:
5137 ; GFX11:       ; %bb.0:
5138 ; GFX11-NEXT:    s_clause 0x1
5139 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5140 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5141 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
5142 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
5143 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5144 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5145 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
5146 ; GFX11-NEXT:    s_endpgm
5148 ; GFX12-LABEL: v_permlane16_b32_tid_tid_i32:
5149 ; GFX12:       ; %bb.0:
5150 ; GFX12-NEXT:    s_clause 0x1
5151 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5152 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5153 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
5154 ; GFX12-NEXT:    s_wait_kmcnt 0x0
5155 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5156 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5157 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
5158 ; GFX12-NEXT:    s_endpgm
5159   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
5160   %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %tidx, i32 %tidx, i32 %src1, i32 %src2, i1 false, i1 false)
5161   store i32 %v, ptr addrspace(1) %out
5162   ret void
5165 define amdgpu_kernel void @v_permlane16_b32_tid_tid_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
5166 ; GFX10-LABEL: v_permlane16_b32_tid_tid_f32:
5167 ; GFX10:       ; %bb.0:
5168 ; GFX10-NEXT:    s_clause 0x1
5169 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5170 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5171 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
5172 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
5173 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5174 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
5175 ; GFX10-NEXT:    s_endpgm
5177 ; GFX11-LABEL: v_permlane16_b32_tid_tid_f32:
5178 ; GFX11:       ; %bb.0:
5179 ; GFX11-NEXT:    s_clause 0x1
5180 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5181 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5182 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
5183 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
5184 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5185 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5186 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
5187 ; GFX11-NEXT:    s_endpgm
5189 ; GFX12-LABEL: v_permlane16_b32_tid_tid_f32:
5190 ; GFX12:       ; %bb.0:
5191 ; GFX12-NEXT:    s_clause 0x1
5192 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5193 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5194 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
5195 ; GFX12-NEXT:    s_wait_kmcnt 0x0
5196 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5197 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5198 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
5199 ; GFX12-NEXT:    s_endpgm
5200   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
5201   %tidx_f32 = bitcast i32 %tidx to float
5202   %v = call float @llvm.amdgcn.permlane16.f32(float %tidx_f32, float %tidx_f32, i32 %src1, i32 %src2, i1 false, i1 false)
5203   store float %v, ptr addrspace(1) %out
5204   ret void
5207 define amdgpu_kernel void @v_permlane16_b32_tid_tid_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
5208 ; GFX10-SDAG-LABEL: v_permlane16_b32_tid_tid_i64:
5209 ; GFX10-SDAG:       ; %bb.0:
5210 ; GFX10-SDAG-NEXT:    s_clause 0x1
5211 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5212 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5213 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, 0
5214 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5215 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5216 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5217 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5218 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
5219 ; GFX10-SDAG-NEXT:    s_endpgm
5221 ; GFX10-GISEL-LABEL: v_permlane16_b32_tid_tid_i64:
5222 ; GFX10-GISEL:       ; %bb.0:
5223 ; GFX10-GISEL-NEXT:    s_clause 0x1
5224 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5225 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5226 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0
5227 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5228 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5229 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5230 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5231 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
5232 ; GFX10-GISEL-NEXT:    s_endpgm
5234 ; GFX11-SDAG-LABEL: v_permlane16_b32_tid_tid_i64:
5235 ; GFX11-SDAG:       ; %bb.0:
5236 ; GFX11-SDAG-NEXT:    s_clause 0x1
5237 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5238 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5239 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
5240 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5241 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5242 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
5243 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5244 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5245 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
5246 ; GFX11-SDAG-NEXT:    s_endpgm
5248 ; GFX11-GISEL-LABEL: v_permlane16_b32_tid_tid_i64:
5249 ; GFX11-GISEL:       ; %bb.0:
5250 ; GFX11-GISEL-NEXT:    s_clause 0x1
5251 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5252 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5253 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
5254 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5255 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5256 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
5257 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5258 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5259 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
5260 ; GFX11-GISEL-NEXT:    s_endpgm
5262 ; GFX12-SDAG-LABEL: v_permlane16_b32_tid_tid_i64:
5263 ; GFX12-SDAG:       ; %bb.0:
5264 ; GFX12-SDAG-NEXT:    s_clause 0x1
5265 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5266 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5267 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
5268 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5269 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
5270 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
5271 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5272 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5273 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
5274 ; GFX12-SDAG-NEXT:    s_endpgm
5276 ; GFX12-GISEL-LABEL: v_permlane16_b32_tid_tid_i64:
5277 ; GFX12-GISEL:       ; %bb.0:
5278 ; GFX12-GISEL-NEXT:    s_clause 0x1
5279 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5280 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5281 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
5282 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5283 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
5284 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
5285 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5286 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5287 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
5288 ; GFX12-GISEL-NEXT:    s_endpgm
5289   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
5290   %tidx_i64 = zext i32 %tidx to i64
5291   %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %tidx_i64, i64 %tidx_i64, i32 %src1, i32 %src2, i1 false, i1 false)
5292   store i64 %v, ptr addrspace(1) %out
5293   ret void
5296 define amdgpu_kernel void @v_permlane16_b32_tid_tid_f64(ptr addrspace(1) %out, float %src0, i32 %src1, i32 %src2) {
5297 ; GFX10-SDAG-LABEL: v_permlane16_b32_tid_tid_f64:
5298 ; GFX10-SDAG:       ; %bb.0:
5299 ; GFX10-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5300 ; GFX10-SDAG-NEXT:    s_clause 0x1
5301 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5302 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5303 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5304 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5305 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5306 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5307 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
5308 ; GFX10-SDAG-NEXT:    s_endpgm
5310 ; GFX10-GISEL-LABEL: v_permlane16_b32_tid_tid_f64:
5311 ; GFX10-GISEL:       ; %bb.0:
5312 ; GFX10-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5313 ; GFX10-GISEL-NEXT:    s_clause 0x1
5314 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5315 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5316 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5317 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5318 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5319 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5320 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
5321 ; GFX10-GISEL-NEXT:    s_endpgm
5323 ; GFX11-SDAG-LABEL: v_permlane16_b32_tid_tid_f64:
5324 ; GFX11-SDAG:       ; %bb.0:
5325 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5326 ; GFX11-SDAG-NEXT:    s_clause 0x1
5327 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5328 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5329 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5330 ; GFX11-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5331 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5332 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
5333 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5334 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5335 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
5336 ; GFX11-SDAG-NEXT:    s_endpgm
5338 ; GFX11-GISEL-LABEL: v_permlane16_b32_tid_tid_f64:
5339 ; GFX11-GISEL:       ; %bb.0:
5340 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5341 ; GFX11-GISEL-NEXT:    s_clause 0x1
5342 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5343 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5344 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5345 ; GFX11-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5346 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5347 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
5348 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5349 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5350 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
5351 ; GFX11-GISEL-NEXT:    s_endpgm
5353 ; GFX12-SDAG-LABEL: v_permlane16_b32_tid_tid_f64:
5354 ; GFX12-SDAG:       ; %bb.0:
5355 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5356 ; GFX12-SDAG-NEXT:    s_clause 0x1
5357 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5358 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5359 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5360 ; GFX12-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5361 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
5362 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
5363 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5364 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5365 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
5366 ; GFX12-SDAG-NEXT:    s_endpgm
5368 ; GFX12-GISEL-LABEL: v_permlane16_b32_tid_tid_f64:
5369 ; GFX12-GISEL:       ; %bb.0:
5370 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5371 ; GFX12-GISEL-NEXT:    s_clause 0x1
5372 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5373 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5374 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5375 ; GFX12-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5376 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
5377 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
5378 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5379 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5380 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
5381 ; GFX12-GISEL-NEXT:    s_endpgm
5382   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
5383   %tidx_f32 = bitcast i32 %tidx to float
5384   %tidx_f64 = fpext float %tidx_f32 to double
5385   %v = call double @llvm.amdgcn.permlane16.f64(double %tidx_f64, double %tidx_f64, i32 %src1, i32 %src2, i1 false, i1 false)
5386   store double %v, ptr addrspace(1) %out
5387   ret void
5390 define amdgpu_kernel void @v_permlane16_b32_undef_tid_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
5391 ; GFX10-LABEL: v_permlane16_b32_undef_tid_i32:
5392 ; GFX10:       ; %bb.0:
5393 ; GFX10-NEXT:    s_clause 0x1
5394 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5395 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5396 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
5397 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
5398 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5399 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
5400 ; GFX10-NEXT:    s_endpgm
5402 ; GFX11-LABEL: v_permlane16_b32_undef_tid_i32:
5403 ; GFX11:       ; %bb.0:
5404 ; GFX11-NEXT:    s_clause 0x1
5405 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5406 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5407 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
5408 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
5409 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5410 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5411 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
5412 ; GFX11-NEXT:    s_endpgm
5414 ; GFX12-LABEL: v_permlane16_b32_undef_tid_i32:
5415 ; GFX12:       ; %bb.0:
5416 ; GFX12-NEXT:    s_clause 0x1
5417 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5418 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5419 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
5420 ; GFX12-NEXT:    s_wait_kmcnt 0x0
5421 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5422 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5423 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
5424 ; GFX12-NEXT:    s_endpgm
5425   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
5426   %undef = freeze i32 poison
5427   %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %undef, i32 %tidx, i32 %src1, i32 %src2, i1 false, i1 false)
5428   store i32 %v, ptr addrspace(1) %out
5429   ret void
5432 define amdgpu_kernel void @v_permlane16_b32_undef_tid_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
5433 ; GFX10-LABEL: v_permlane16_b32_undef_tid_f32:
5434 ; GFX10:       ; %bb.0:
5435 ; GFX10-NEXT:    s_clause 0x1
5436 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5437 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5438 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
5439 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
5440 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5441 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
5442 ; GFX10-NEXT:    s_endpgm
5444 ; GFX11-LABEL: v_permlane16_b32_undef_tid_f32:
5445 ; GFX11:       ; %bb.0:
5446 ; GFX11-NEXT:    s_clause 0x1
5447 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5448 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5449 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
5450 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
5451 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5452 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5453 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
5454 ; GFX11-NEXT:    s_endpgm
5456 ; GFX12-LABEL: v_permlane16_b32_undef_tid_f32:
5457 ; GFX12:       ; %bb.0:
5458 ; GFX12-NEXT:    s_clause 0x1
5459 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5460 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5461 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
5462 ; GFX12-NEXT:    s_wait_kmcnt 0x0
5463 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5464 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5465 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
5466 ; GFX12-NEXT:    s_endpgm
5467   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
5468   %tidx_f32 = bitcast i32 %tidx to float
5469   %undef = freeze float poison
5470   %v = call float @llvm.amdgcn.permlane16.f32(float %undef, float %tidx_f32, i32 %src1, i32 %src2, i1 false, i1 false)
5471   store float %v, ptr addrspace(1) %out
5472   ret void
5475 define amdgpu_kernel void @v_permlane16_b32_undef_tid_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
5476 ; GFX10-SDAG-LABEL: v_permlane16_b32_undef_tid_i64:
5477 ; GFX10-SDAG:       ; %bb.0:
5478 ; GFX10-SDAG-NEXT:    s_clause 0x1
5479 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5480 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5481 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5482 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5483 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v2, s0, s1
5484 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5485 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
5486 ; GFX10-SDAG-NEXT:    s_endpgm
5488 ; GFX10-GISEL-LABEL: v_permlane16_b32_undef_tid_i64:
5489 ; GFX10-GISEL:       ; %bb.0:
5490 ; GFX10-GISEL-NEXT:    s_clause 0x1
5491 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5492 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5493 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5494 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5495 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5496 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v2, s0, s1
5497 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
5498 ; GFX10-GISEL-NEXT:    s_endpgm
5500 ; GFX11-SDAG-LABEL: v_permlane16_b32_undef_tid_i64:
5501 ; GFX11-SDAG:       ; %bb.0:
5502 ; GFX11-SDAG-NEXT:    s_clause 0x1
5503 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5504 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5505 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5506 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5507 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5508 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
5509 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v2, s0, s1
5510 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5511 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
5512 ; GFX11-SDAG-NEXT:    s_endpgm
5514 ; GFX11-GISEL-LABEL: v_permlane16_b32_undef_tid_i64:
5515 ; GFX11-GISEL:       ; %bb.0:
5516 ; GFX11-GISEL-NEXT:    s_clause 0x1
5517 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5518 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5519 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5520 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5521 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5522 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
5523 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5524 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v2, s0, s1
5525 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
5526 ; GFX11-GISEL-NEXT:    s_endpgm
5528 ; GFX12-SDAG-LABEL: v_permlane16_b32_undef_tid_i64:
5529 ; GFX12-SDAG:       ; %bb.0:
5530 ; GFX12-SDAG-NEXT:    s_clause 0x1
5531 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5532 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5533 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5534 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5535 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
5536 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
5537 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v2, s0, s1
5538 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5539 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
5540 ; GFX12-SDAG-NEXT:    s_endpgm
5542 ; GFX12-GISEL-LABEL: v_permlane16_b32_undef_tid_i64:
5543 ; GFX12-GISEL:       ; %bb.0:
5544 ; GFX12-GISEL-NEXT:    s_clause 0x1
5545 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5546 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5547 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5548 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5549 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
5550 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
5551 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5552 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v2, s0, s1
5553 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
5554 ; GFX12-GISEL-NEXT:    s_endpgm
5555   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
5556   %tidx_i64 = zext i32 %tidx to i64
5557   %undef = freeze i64 poison
5558   %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %undef, i64 %tidx_i64, i32 %src1, i32 %src2, i1 false, i1 false)
5559   store i64 %v, ptr addrspace(1) %out
5560   ret void
5563 define amdgpu_kernel void @v_permlane16_b32_undef_tid_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
5564 ; GFX10-SDAG-LABEL: v_permlane16_b32_undef_tid_f64:
5565 ; GFX10-SDAG:       ; %bb.0:
5566 ; GFX10-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5567 ; GFX10-SDAG-NEXT:    s_clause 0x1
5568 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5569 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5570 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5571 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5572 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5573 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5574 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
5575 ; GFX10-SDAG-NEXT:    s_endpgm
5577 ; GFX10-GISEL-LABEL: v_permlane16_b32_undef_tid_f64:
5578 ; GFX10-GISEL:       ; %bb.0:
5579 ; GFX10-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5580 ; GFX10-GISEL-NEXT:    s_clause 0x1
5581 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5582 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5583 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5584 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5585 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5586 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5587 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
5588 ; GFX10-GISEL-NEXT:    s_endpgm
5590 ; GFX11-SDAG-LABEL: v_permlane16_b32_undef_tid_f64:
5591 ; GFX11-SDAG:       ; %bb.0:
5592 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5593 ; GFX11-SDAG-NEXT:    s_clause 0x1
5594 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5595 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5596 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5597 ; GFX11-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5598 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5599 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
5600 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5601 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5602 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
5603 ; GFX11-SDAG-NEXT:    s_endpgm
5605 ; GFX11-GISEL-LABEL: v_permlane16_b32_undef_tid_f64:
5606 ; GFX11-GISEL:       ; %bb.0:
5607 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5608 ; GFX11-GISEL-NEXT:    s_clause 0x1
5609 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5610 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5611 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5612 ; GFX11-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5613 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5614 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
5615 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5616 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5617 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
5618 ; GFX11-GISEL-NEXT:    s_endpgm
5620 ; GFX12-SDAG-LABEL: v_permlane16_b32_undef_tid_f64:
5621 ; GFX12-SDAG:       ; %bb.0:
5622 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5623 ; GFX12-SDAG-NEXT:    s_clause 0x1
5624 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5625 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5626 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5627 ; GFX12-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5628 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
5629 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
5630 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5631 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5632 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
5633 ; GFX12-SDAG-NEXT:    s_endpgm
5635 ; GFX12-GISEL-LABEL: v_permlane16_b32_undef_tid_f64:
5636 ; GFX12-GISEL:       ; %bb.0:
5637 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5638 ; GFX12-GISEL-NEXT:    s_clause 0x1
5639 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5640 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5641 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5642 ; GFX12-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5643 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
5644 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
5645 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1
5646 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1
5647 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
5648 ; GFX12-GISEL-NEXT:    s_endpgm
5649   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
5650   %tidx_f32 = bitcast i32 %tidx to float
5651   %tidx_f64 = fpext float %tidx_f32 to double
5652   %undef = freeze double poison
5653   %v = call double @llvm.amdgcn.permlane16.f64(double %undef, double %tidx_f64, i32 %src1, i32 %src2, i1 false, i1 false)
5654   store double %v, ptr addrspace(1) %out
5655   ret void
5658 define amdgpu_kernel void @v_permlane16_b32_i_tid_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
5659 ; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_i32:
5660 ; GFX10-SDAG:       ; %bb.0:
5661 ; GFX10-SDAG-NEXT:    s_clause 0x1
5662 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5663 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5664 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, 0x3039
5665 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5666 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5667 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5668 ; GFX10-SDAG-NEXT:    global_store_dword v2, v1, s[2:3]
5669 ; GFX10-SDAG-NEXT:    s_endpgm
5671 ; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_i32:
5672 ; GFX10-GISEL:       ; %bb.0:
5673 ; GFX10-GISEL-NEXT:    s_clause 0x1
5674 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5675 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5676 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3039
5677 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5678 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5679 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, 0
5680 ; GFX10-GISEL-NEXT:    global_store_dword v0, v1, s[2:3]
5681 ; GFX10-GISEL-NEXT:    s_endpgm
5683 ; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_i32:
5684 ; GFX11-SDAG:       ; %bb.0:
5685 ; GFX11-SDAG-NEXT:    s_clause 0x1
5686 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5687 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5688 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5689 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, 0
5690 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5691 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5692 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5693 ; GFX11-SDAG-NEXT:    global_store_b32 v2, v1, s[2:3]
5694 ; GFX11-SDAG-NEXT:    s_endpgm
5696 ; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_i32:
5697 ; GFX11-GISEL:       ; %bb.0:
5698 ; GFX11-GISEL-NEXT:    s_clause 0x1
5699 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5700 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5701 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3039
5702 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5703 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5704 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5705 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5706 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, 0
5707 ; GFX11-GISEL-NEXT:    global_store_b32 v0, v1, s[2:3]
5708 ; GFX11-GISEL-NEXT:    s_endpgm
5710 ; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_i32:
5711 ; GFX12-SDAG:       ; %bb.0:
5712 ; GFX12-SDAG-NEXT:    s_clause 0x1
5713 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5714 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5715 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5716 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, 0
5717 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
5718 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5719 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5720 ; GFX12-SDAG-NEXT:    global_store_b32 v2, v1, s[2:3]
5721 ; GFX12-SDAG-NEXT:    s_endpgm
5723 ; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_i32:
5724 ; GFX12-GISEL:       ; %bb.0:
5725 ; GFX12-GISEL-NEXT:    s_clause 0x1
5726 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5727 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5728 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3039
5729 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5730 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
5731 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5732 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5733 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v0, 0
5734 ; GFX12-GISEL-NEXT:    global_store_b32 v0, v1, s[2:3]
5735 ; GFX12-GISEL-NEXT:    s_endpgm
5736   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
5737   %v = call i32 @llvm.amdgcn.permlane16.i32(i32 12345, i32 %tidx, i32 %src1, i32 %src2, i1 false, i1 false)
5738   store i32 %v, ptr addrspace(1) %out
5739   ret void
5742 define amdgpu_kernel void @v_permlane16_b32_i_tid_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
5743 ; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_f32:
5744 ; GFX10-SDAG:       ; %bb.0:
5745 ; GFX10-SDAG-NEXT:    s_clause 0x1
5746 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5747 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5748 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, 0x449a5000
5749 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5750 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5751 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5752 ; GFX10-SDAG-NEXT:    global_store_dword v2, v1, s[2:3]
5753 ; GFX10-SDAG-NEXT:    s_endpgm
5755 ; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_f32:
5756 ; GFX10-GISEL:       ; %bb.0:
5757 ; GFX10-GISEL-NEXT:    s_clause 0x1
5758 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5759 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5760 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0x449a5000
5761 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5762 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5763 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, 0
5764 ; GFX10-GISEL-NEXT:    global_store_dword v0, v1, s[2:3]
5765 ; GFX10-GISEL-NEXT:    s_endpgm
5767 ; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_f32:
5768 ; GFX11-SDAG:       ; %bb.0:
5769 ; GFX11-SDAG-NEXT:    s_clause 0x1
5770 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5771 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5772 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5773 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 0x449a5000 :: v_dual_mov_b32 v2, 0
5774 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5775 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5776 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5777 ; GFX11-SDAG-NEXT:    global_store_b32 v2, v1, s[2:3]
5778 ; GFX11-SDAG-NEXT:    s_endpgm
5780 ; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_f32:
5781 ; GFX11-GISEL:       ; %bb.0:
5782 ; GFX11-GISEL-NEXT:    s_clause 0x1
5783 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5784 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5785 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v1, 0x449a5000
5786 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5787 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5788 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5789 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5790 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, 0
5791 ; GFX11-GISEL-NEXT:    global_store_b32 v0, v1, s[2:3]
5792 ; GFX11-GISEL-NEXT:    s_endpgm
5794 ; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_f32:
5795 ; GFX12-SDAG:       ; %bb.0:
5796 ; GFX12-SDAG-NEXT:    s_clause 0x1
5797 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5798 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5799 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5800 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v1, 0x449a5000 :: v_dual_mov_b32 v2, 0
5801 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
5802 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5803 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5804 ; GFX12-SDAG-NEXT:    global_store_b32 v2, v1, s[2:3]
5805 ; GFX12-SDAG-NEXT:    s_endpgm
5807 ; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_f32:
5808 ; GFX12-GISEL:       ; %bb.0:
5809 ; GFX12-GISEL-NEXT:    s_clause 0x1
5810 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5811 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5812 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v1, 0x449a5000
5813 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5814 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
5815 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
5816 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5817 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v0, 0
5818 ; GFX12-GISEL-NEXT:    global_store_b32 v0, v1, s[2:3]
5819 ; GFX12-GISEL-NEXT:    s_endpgm
5820   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
5821   %tidx_f32 = bitcast i32 %tidx to float
5822   %v = call float @llvm.amdgcn.permlane16.f32(float 1234.5, float %tidx_f32, i32 %src1, i32 %src2, i1 false, i1 false)
5823   store float %v, ptr addrspace(1) %out
5824   ret void
5827 define amdgpu_kernel void @v_permlane16_b32_i_tid_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
5828 ; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_i64:
5829 ; GFX10-SDAG:       ; %bb.0:
5830 ; GFX10-SDAG-NEXT:    s_clause 0x1
5831 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5832 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5833 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5834 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, 0x3039
5835 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v3, 0
5836 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5837 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v2, v2, s0, s1
5838 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5839 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v3, v[1:2], s[2:3]
5840 ; GFX10-SDAG-NEXT:    s_endpgm
5842 ; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_i64:
5843 ; GFX10-GISEL:       ; %bb.0:
5844 ; GFX10-GISEL-NEXT:    s_clause 0x1
5845 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5846 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5847 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3039
5848 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5849 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, 0
5850 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5851 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5852 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v2, v2, s0, s1
5853 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v3, v[1:2], s[2:3]
5854 ; GFX10-GISEL-NEXT:    s_endpgm
5856 ; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_i64:
5857 ; GFX11-SDAG:       ; %bb.0:
5858 ; GFX11-SDAG-NEXT:    s_clause 0x1
5859 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5860 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5861 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, 0x3039
5862 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v0
5863 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5864 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
5865 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v2, v2, s0, s1
5866 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5867 ; GFX11-SDAG-NEXT:    global_store_b64 v3, v[1:2], s[2:3]
5868 ; GFX11-SDAG-NEXT:    s_endpgm
5870 ; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_i64:
5871 ; GFX11-GISEL:       ; %bb.0:
5872 ; GFX11-GISEL-NEXT:    s_clause 0x1
5873 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5874 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5875 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, 0
5876 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v0
5877 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5878 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
5879 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5880 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v2, v2, s0, s1
5881 ; GFX11-GISEL-NEXT:    global_store_b64 v3, v[1:2], s[2:3]
5882 ; GFX11-GISEL-NEXT:    s_endpgm
5884 ; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_i64:
5885 ; GFX12-SDAG:       ; %bb.0:
5886 ; GFX12-SDAG-NEXT:    s_clause 0x1
5887 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5888 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5889 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, 0x3039
5890 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v0
5891 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
5892 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
5893 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v2, v2, s0, s1
5894 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5895 ; GFX12-SDAG-NEXT:    global_store_b64 v3, v[1:2], s[2:3]
5896 ; GFX12-SDAG-NEXT:    s_endpgm
5898 ; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_i64:
5899 ; GFX12-GISEL:       ; %bb.0:
5900 ; GFX12-GISEL-NEXT:    s_clause 0x1
5901 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5902 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5903 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, 0
5904 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v0
5905 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
5906 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
5907 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v0, s0, s1
5908 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v2, v2, s0, s1
5909 ; GFX12-GISEL-NEXT:    global_store_b64 v3, v[1:2], s[2:3]
5910 ; GFX12-GISEL-NEXT:    s_endpgm
5911   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
5912   %tidx_i64 = zext i32 %tidx to i64
5913   %v = call i64 @llvm.amdgcn.permlane16.i64(i64 12345, i64 %tidx_i64, i32 %src1, i32 %src2, i1 false, i1 false)
5914   store i64 %v, ptr addrspace(1) %out
5915   ret void
5918 define amdgpu_kernel void @v_permlane16_b32_i_tid_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
5919 ; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_f64:
5920 ; GFX10-SDAG:       ; %bb.0:
5921 ; GFX10-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5922 ; GFX10-SDAG-NEXT:    s_clause 0x1
5923 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5924 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5925 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v3, 0x40934a00
5926 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
5927 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v4, 0
5928 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5929 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v3, v1, s0, s1
5930 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v2, v0, s0, s1
5931 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v4, v[2:3], s[2:3]
5932 ; GFX10-SDAG-NEXT:    s_endpgm
5934 ; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_f64:
5935 ; GFX10-GISEL:       ; %bb.0:
5936 ; GFX10-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5937 ; GFX10-GISEL-NEXT:    s_clause 0x1
5938 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
5939 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
5940 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
5941 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, 0x40934a00
5942 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v4, 0
5943 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5944 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v2, v0, s0, s1
5945 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v3, v1, s0, s1
5946 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v4, v[2:3], s[2:3]
5947 ; GFX10-GISEL-NEXT:    s_endpgm
5949 ; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_f64:
5950 ; GFX11-SDAG:       ; %bb.0:
5951 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5952 ; GFX11-SDAG-NEXT:    s_clause 0x1
5953 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5954 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5955 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v3, 0x40934a00 :: v_dual_mov_b32 v2, 0
5956 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v4, 0
5957 ; GFX11-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5958 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
5959 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
5960 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v3, v1, s0, s1
5961 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v2, v0, s0, s1
5962 ; GFX11-SDAG-NEXT:    global_store_b64 v4, v[2:3], s[2:3]
5963 ; GFX11-SDAG-NEXT:    s_endpgm
5965 ; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_f64:
5966 ; GFX11-GISEL:       ; %bb.0:
5967 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5968 ; GFX11-GISEL-NEXT:    s_clause 0x1
5969 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5970 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5971 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v3, 0x40934a00
5972 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v4, 0
5973 ; GFX11-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5974 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
5975 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
5976 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v2, v0, s0, s1
5977 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v3, v1, s0, s1
5978 ; GFX11-GISEL-NEXT:    global_store_b64 v4, v[2:3], s[2:3]
5979 ; GFX11-GISEL-NEXT:    s_endpgm
5981 ; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_f64:
5982 ; GFX12-SDAG:       ; %bb.0:
5983 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
5984 ; GFX12-SDAG-NEXT:    s_clause 0x1
5985 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
5986 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
5987 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v3, 0x40934a00 :: v_dual_mov_b32 v2, 0
5988 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v4, 0
5989 ; GFX12-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
5990 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
5991 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
5992 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v3, v1, s0, s1
5993 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v2, v0, s0, s1
5994 ; GFX12-SDAG-NEXT:    global_store_b64 v4, v[2:3], s[2:3]
5995 ; GFX12-SDAG-NEXT:    s_endpgm
5997 ; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_f64:
5998 ; GFX12-GISEL:       ; %bb.0:
5999 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6000 ; GFX12-GISEL-NEXT:    s_clause 0x1
6001 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6002 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6003 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v3, 0x40934a00
6004 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v4, 0
6005 ; GFX12-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6006 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
6007 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
6008 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v2, v0, s0, s1
6009 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v3, v1, s0, s1
6010 ; GFX12-GISEL-NEXT:    global_store_b64 v4, v[2:3], s[2:3]
6011 ; GFX12-GISEL-NEXT:    s_endpgm
6012   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
6013   %tidx_f32 = bitcast i32 %tidx to float
6014   %tidx_f64 = fpext float %tidx_f32 to double
6015   %v = call double @llvm.amdgcn.permlane16.f64(double 1234.5, double %tidx_f64, i32 %src1, i32 %src2, i1 false, i1 false)
6016   store double %v, ptr addrspace(1) %out
6017   ret void
6020 define amdgpu_kernel void @v_permlane16_b32_i_tid_fi_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
6021 ; GFX10-LABEL: v_permlane16_b32_i_tid_fi_i32:
6022 ; GFX10:       ; %bb.0:
6023 ; GFX10-NEXT:    s_clause 0x1
6024 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6025 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6026 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
6027 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
6028 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6029 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
6030 ; GFX10-NEXT:    s_endpgm
6032 ; GFX11-LABEL: v_permlane16_b32_i_tid_fi_i32:
6033 ; GFX11:       ; %bb.0:
6034 ; GFX11-NEXT:    s_clause 0x1
6035 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6036 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6037 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6038 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
6039 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6040 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6041 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
6042 ; GFX11-NEXT:    s_endpgm
6044 ; GFX12-LABEL: v_permlane16_b32_i_tid_fi_i32:
6045 ; GFX12:       ; %bb.0:
6046 ; GFX12-NEXT:    s_clause 0x1
6047 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6048 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6049 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6050 ; GFX12-NEXT:    s_wait_kmcnt 0x0
6051 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6052 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6053 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
6054 ; GFX12-NEXT:    s_endpgm
6055   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
6056   %undef = freeze i32 poison
6057   %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %undef, i32 %tidx, i32 %src1, i32 %src2, i1 true, i1 false)
6058   store i32 %v, ptr addrspace(1) %out
6059   ret void
6062 define amdgpu_kernel void @v_permlane16_b32_i_tid_fi_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
6063 ; GFX10-LABEL: v_permlane16_b32_i_tid_fi_f32:
6064 ; GFX10:       ; %bb.0:
6065 ; GFX10-NEXT:    s_clause 0x1
6066 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6067 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6068 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
6069 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
6070 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6071 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
6072 ; GFX10-NEXT:    s_endpgm
6074 ; GFX11-LABEL: v_permlane16_b32_i_tid_fi_f32:
6075 ; GFX11:       ; %bb.0:
6076 ; GFX11-NEXT:    s_clause 0x1
6077 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6078 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6079 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6080 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
6081 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6082 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6083 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
6084 ; GFX11-NEXT:    s_endpgm
6086 ; GFX12-LABEL: v_permlane16_b32_i_tid_fi_f32:
6087 ; GFX12:       ; %bb.0:
6088 ; GFX12-NEXT:    s_clause 0x1
6089 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6090 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6091 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6092 ; GFX12-NEXT:    s_wait_kmcnt 0x0
6093 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6094 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6095 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
6096 ; GFX12-NEXT:    s_endpgm
6097   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
6098   %tidx_f32 = bitcast i32 %tidx to float
6099   %undef = freeze float poison
6100   %v = call float @llvm.amdgcn.permlane16.f32(float %undef, float %tidx_f32, i32 %src1, i32 %src2, i1 true, i1 false)
6101   store float %v, ptr addrspace(1) %out
6102   ret void
6105 define amdgpu_kernel void @v_permlane16_b32_i_tid_fi_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
6106 ; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_fi_i64:
6107 ; GFX10-SDAG:       ; %bb.0:
6108 ; GFX10-SDAG-NEXT:    s_clause 0x1
6109 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6110 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6111 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6112 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
6113 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,0]
6114 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6115 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
6116 ; GFX10-SDAG-NEXT:    s_endpgm
6118 ; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_fi_i64:
6119 ; GFX10-GISEL:       ; %bb.0:
6120 ; GFX10-GISEL-NEXT:    s_clause 0x1
6121 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6122 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6123 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6124 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
6125 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6126 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,0]
6127 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
6128 ; GFX10-GISEL-NEXT:    s_endpgm
6130 ; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_fi_i64:
6131 ; GFX11-SDAG:       ; %bb.0:
6132 ; GFX11-SDAG-NEXT:    s_clause 0x1
6133 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6134 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6135 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6136 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6137 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
6138 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
6139 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,0]
6140 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6141 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6142 ; GFX11-SDAG-NEXT:    s_endpgm
6144 ; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_fi_i64:
6145 ; GFX11-GISEL:       ; %bb.0:
6146 ; GFX11-GISEL-NEXT:    s_clause 0x1
6147 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6148 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6149 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6150 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6151 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
6152 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
6153 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6154 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,0]
6155 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6156 ; GFX11-GISEL-NEXT:    s_endpgm
6158 ; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_fi_i64:
6159 ; GFX12-SDAG:       ; %bb.0:
6160 ; GFX12-SDAG-NEXT:    s_clause 0x1
6161 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6162 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6163 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6164 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6165 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
6166 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
6167 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,0]
6168 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6169 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6170 ; GFX12-SDAG-NEXT:    s_endpgm
6172 ; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_fi_i64:
6173 ; GFX12-GISEL:       ; %bb.0:
6174 ; GFX12-GISEL-NEXT:    s_clause 0x1
6175 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6176 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6177 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6178 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6179 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
6180 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
6181 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6182 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,0]
6183 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6184 ; GFX12-GISEL-NEXT:    s_endpgm
6185   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
6186   %tidx_i64 = zext i32 %tidx to i64
6187   %undef = freeze i64 poison
6188   %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %undef, i64 %tidx_i64, i32 %src1, i32 %src2, i1 true, i1 false)
6189   store i64 %v, ptr addrspace(1) %out
6190   ret void
6193 define amdgpu_kernel void @v_permlane16_b32_i_tid_fi_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
6194 ; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_fi_f64:
6195 ; GFX10-SDAG:       ; %bb.0:
6196 ; GFX10-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6197 ; GFX10-SDAG-NEXT:    s_clause 0x1
6198 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6199 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6200 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6201 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
6202 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,0]
6203 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6204 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
6205 ; GFX10-SDAG-NEXT:    s_endpgm
6207 ; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_fi_f64:
6208 ; GFX10-GISEL:       ; %bb.0:
6209 ; GFX10-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6210 ; GFX10-GISEL-NEXT:    s_clause 0x1
6211 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6212 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6213 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6214 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
6215 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6216 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,0]
6217 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
6218 ; GFX10-GISEL-NEXT:    s_endpgm
6220 ; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_fi_f64:
6221 ; GFX11-SDAG:       ; %bb.0:
6222 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6223 ; GFX11-SDAG-NEXT:    s_clause 0x1
6224 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6225 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6226 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6227 ; GFX11-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6228 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
6229 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
6230 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,0]
6231 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6232 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6233 ; GFX11-SDAG-NEXT:    s_endpgm
6235 ; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_fi_f64:
6236 ; GFX11-GISEL:       ; %bb.0:
6237 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6238 ; GFX11-GISEL-NEXT:    s_clause 0x1
6239 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6240 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6241 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6242 ; GFX11-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6243 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
6244 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
6245 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6246 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,0]
6247 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6248 ; GFX11-GISEL-NEXT:    s_endpgm
6250 ; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_fi_f64:
6251 ; GFX12-SDAG:       ; %bb.0:
6252 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6253 ; GFX12-SDAG-NEXT:    s_clause 0x1
6254 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6255 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6256 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6257 ; GFX12-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6258 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
6259 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
6260 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,0]
6261 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6262 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6263 ; GFX12-SDAG-NEXT:    s_endpgm
6265 ; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_fi_f64:
6266 ; GFX12-GISEL:       ; %bb.0:
6267 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6268 ; GFX12-GISEL-NEXT:    s_clause 0x1
6269 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6270 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6271 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6272 ; GFX12-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6273 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
6274 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
6275 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,0]
6276 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,0]
6277 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6278 ; GFX12-GISEL-NEXT:    s_endpgm
6279   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
6280   %tidx_f32 = bitcast i32 %tidx to float
6281   %tidx_f64 = fpext float %tidx_f32 to double
6282   %undef = freeze double poison
6283   %v = call double @llvm.amdgcn.permlane16.f64(double %undef, double %tidx_f64, i32 %src1, i32 %src2, i1 true, i1 false)
6284   store double %v, ptr addrspace(1) %out
6285   ret void
6288 define amdgpu_kernel void @v_permlane16_b32_i_tid_bc_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
6289 ; GFX10-LABEL: v_permlane16_b32_i_tid_bc_i32:
6290 ; GFX10:       ; %bb.0:
6291 ; GFX10-NEXT:    s_clause 0x1
6292 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6293 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6294 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
6295 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
6296 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6297 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
6298 ; GFX10-NEXT:    s_endpgm
6300 ; GFX11-LABEL: v_permlane16_b32_i_tid_bc_i32:
6301 ; GFX11:       ; %bb.0:
6302 ; GFX11-NEXT:    s_clause 0x1
6303 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6304 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6305 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6306 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
6307 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6308 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6309 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
6310 ; GFX11-NEXT:    s_endpgm
6312 ; GFX12-LABEL: v_permlane16_b32_i_tid_bc_i32:
6313 ; GFX12:       ; %bb.0:
6314 ; GFX12-NEXT:    s_clause 0x1
6315 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6316 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6317 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6318 ; GFX12-NEXT:    s_wait_kmcnt 0x0
6319 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6320 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6321 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
6322 ; GFX12-NEXT:    s_endpgm
6323   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
6324   %undef = freeze i32 poison
6325   %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %undef, i32 %tidx, i32 %src1, i32 %src2, i1 false, i1 true)
6326   store i32 %v, ptr addrspace(1) %out
6327   ret void
6330 define amdgpu_kernel void @v_permlane16_b32_i_tid_bc_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
6331 ; GFX10-LABEL: v_permlane16_b32_i_tid_bc_f32:
6332 ; GFX10:       ; %bb.0:
6333 ; GFX10-NEXT:    s_clause 0x1
6334 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6335 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6336 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
6337 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
6338 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6339 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
6340 ; GFX10-NEXT:    s_endpgm
6342 ; GFX11-LABEL: v_permlane16_b32_i_tid_bc_f32:
6343 ; GFX11:       ; %bb.0:
6344 ; GFX11-NEXT:    s_clause 0x1
6345 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6346 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6347 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6348 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
6349 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6350 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6351 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
6352 ; GFX11-NEXT:    s_endpgm
6354 ; GFX12-LABEL: v_permlane16_b32_i_tid_bc_f32:
6355 ; GFX12:       ; %bb.0:
6356 ; GFX12-NEXT:    s_clause 0x1
6357 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6358 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6359 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6360 ; GFX12-NEXT:    s_wait_kmcnt 0x0
6361 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6362 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6363 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
6364 ; GFX12-NEXT:    s_endpgm
6365   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
6366   %tidx_f32 = bitcast i32 %tidx to float
6367   %undef = freeze float poison
6368   %v = call float @llvm.amdgcn.permlane16.f32(float %undef, float %tidx_f32, i32 %src1, i32 %src2, i1 false, i1 true)
6369   store float %v, ptr addrspace(1) %out
6370   ret void
6373 define amdgpu_kernel void @v_permlane16_b32_i_tid_bc_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
6374 ; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_bc_i64:
6375 ; GFX10-SDAG:       ; %bb.0:
6376 ; GFX10-SDAG-NEXT:    s_clause 0x1
6377 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6378 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6379 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6380 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
6381 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[0,1]
6382 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6383 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
6384 ; GFX10-SDAG-NEXT:    s_endpgm
6386 ; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_bc_i64:
6387 ; GFX10-GISEL:       ; %bb.0:
6388 ; GFX10-GISEL-NEXT:    s_clause 0x1
6389 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6390 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6391 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6392 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
6393 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6394 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[0,1]
6395 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
6396 ; GFX10-GISEL-NEXT:    s_endpgm
6398 ; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_bc_i64:
6399 ; GFX11-SDAG:       ; %bb.0:
6400 ; GFX11-SDAG-NEXT:    s_clause 0x1
6401 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6402 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6403 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6404 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6405 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
6406 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
6407 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[0,1]
6408 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6409 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6410 ; GFX11-SDAG-NEXT:    s_endpgm
6412 ; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_bc_i64:
6413 ; GFX11-GISEL:       ; %bb.0:
6414 ; GFX11-GISEL-NEXT:    s_clause 0x1
6415 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6416 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6417 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6418 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6419 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
6420 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
6421 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6422 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[0,1]
6423 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6424 ; GFX11-GISEL-NEXT:    s_endpgm
6426 ; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_bc_i64:
6427 ; GFX12-SDAG:       ; %bb.0:
6428 ; GFX12-SDAG-NEXT:    s_clause 0x1
6429 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6430 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6431 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6432 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6433 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
6434 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
6435 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[0,1]
6436 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6437 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6438 ; GFX12-SDAG-NEXT:    s_endpgm
6440 ; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_bc_i64:
6441 ; GFX12-GISEL:       ; %bb.0:
6442 ; GFX12-GISEL-NEXT:    s_clause 0x1
6443 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6444 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6445 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6446 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6447 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
6448 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
6449 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6450 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[0,1]
6451 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6452 ; GFX12-GISEL-NEXT:    s_endpgm
6453   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
6454   %tidx_i64 = zext i32 %tidx to i64
6455   %undef = freeze i64 poison
6456   %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %undef, i64 %tidx_i64, i32 %src1, i32 %src2, i1 false, i1 true)
6457   store i64 %v, ptr addrspace(1) %out
6458   ret void
6461 define amdgpu_kernel void @v_permlane16_b32_i_tid_bc_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
6462 ; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_bc_f64:
6463 ; GFX10-SDAG:       ; %bb.0:
6464 ; GFX10-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6465 ; GFX10-SDAG-NEXT:    s_clause 0x1
6466 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6467 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6468 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6469 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
6470 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[0,1]
6471 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6472 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
6473 ; GFX10-SDAG-NEXT:    s_endpgm
6475 ; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_bc_f64:
6476 ; GFX10-GISEL:       ; %bb.0:
6477 ; GFX10-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6478 ; GFX10-GISEL-NEXT:    s_clause 0x1
6479 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6480 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6481 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6482 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
6483 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6484 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[0,1]
6485 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
6486 ; GFX10-GISEL-NEXT:    s_endpgm
6488 ; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_bc_f64:
6489 ; GFX11-SDAG:       ; %bb.0:
6490 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6491 ; GFX11-SDAG-NEXT:    s_clause 0x1
6492 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6493 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6494 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6495 ; GFX11-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6496 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
6497 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
6498 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[0,1]
6499 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6500 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6501 ; GFX11-SDAG-NEXT:    s_endpgm
6503 ; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_bc_f64:
6504 ; GFX11-GISEL:       ; %bb.0:
6505 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6506 ; GFX11-GISEL-NEXT:    s_clause 0x1
6507 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6508 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6509 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6510 ; GFX11-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6511 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
6512 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
6513 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6514 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[0,1]
6515 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6516 ; GFX11-GISEL-NEXT:    s_endpgm
6518 ; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_bc_f64:
6519 ; GFX12-SDAG:       ; %bb.0:
6520 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6521 ; GFX12-SDAG-NEXT:    s_clause 0x1
6522 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6523 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6524 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6525 ; GFX12-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6526 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
6527 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
6528 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[0,1]
6529 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6530 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6531 ; GFX12-SDAG-NEXT:    s_endpgm
6533 ; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_bc_f64:
6534 ; GFX12-GISEL:       ; %bb.0:
6535 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6536 ; GFX12-GISEL-NEXT:    s_clause 0x1
6537 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6538 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6539 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6540 ; GFX12-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6541 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
6542 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
6543 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[0,1]
6544 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[0,1]
6545 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6546 ; GFX12-GISEL-NEXT:    s_endpgm
6547   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
6548   %tidx_f32 = bitcast i32 %tidx to float
6549   %tidx_f64 = fpext float %tidx_f32 to double
6550   %undef = freeze double poison
6551   %v = call double @llvm.amdgcn.permlane16.f64(double %undef, double %tidx_f64, i32 %src1, i32 %src2, i1 false, i1 true)
6552   store double %v, ptr addrspace(1) %out
6553   ret void
6556 define amdgpu_kernel void @v_permlane16_b32_i_tid_fi_bc_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
6557 ; GFX10-LABEL: v_permlane16_b32_i_tid_fi_bc_i32:
6558 ; GFX10:       ; %bb.0:
6559 ; GFX10-NEXT:    s_clause 0x1
6560 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6561 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6562 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
6563 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
6564 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6565 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
6566 ; GFX10-NEXT:    s_endpgm
6568 ; GFX11-LABEL: v_permlane16_b32_i_tid_fi_bc_i32:
6569 ; GFX11:       ; %bb.0:
6570 ; GFX11-NEXT:    s_clause 0x1
6571 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6572 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6573 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6574 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
6575 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6576 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6577 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
6578 ; GFX11-NEXT:    s_endpgm
6580 ; GFX12-LABEL: v_permlane16_b32_i_tid_fi_bc_i32:
6581 ; GFX12:       ; %bb.0:
6582 ; GFX12-NEXT:    s_clause 0x1
6583 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6584 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6585 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6586 ; GFX12-NEXT:    s_wait_kmcnt 0x0
6587 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6588 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6589 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
6590 ; GFX12-NEXT:    s_endpgm
6591   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
6592   %undef = freeze i32 poison
6593   %v = call i32 @llvm.amdgcn.permlane16.i32(i32 %undef, i32 %tidx, i32 %src1, i32 %src2, i1 true, i1 true)
6594   store i32 %v, ptr addrspace(1) %out
6595   ret void
6598 define amdgpu_kernel void @v_permlane16_b32_i_tid_fi_bc_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
6599 ; GFX10-LABEL: v_permlane16_b32_i_tid_fi_bc_f32:
6600 ; GFX10:       ; %bb.0:
6601 ; GFX10-NEXT:    s_clause 0x1
6602 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6603 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6604 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
6605 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
6606 ; GFX10-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6607 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
6608 ; GFX10-NEXT:    s_endpgm
6610 ; GFX11-LABEL: v_permlane16_b32_i_tid_fi_bc_f32:
6611 ; GFX11:       ; %bb.0:
6612 ; GFX11-NEXT:    s_clause 0x1
6613 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6614 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6615 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6616 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
6617 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6618 ; GFX11-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6619 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
6620 ; GFX11-NEXT:    s_endpgm
6622 ; GFX12-LABEL: v_permlane16_b32_i_tid_fi_bc_f32:
6623 ; GFX12:       ; %bb.0:
6624 ; GFX12-NEXT:    s_clause 0x1
6625 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6626 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6627 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6628 ; GFX12-NEXT:    s_wait_kmcnt 0x0
6629 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6630 ; GFX12-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6631 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
6632 ; GFX12-NEXT:    s_endpgm
6633   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
6634   %tidx_f32 = bitcast i32 %tidx to float
6635   %undef = freeze float poison
6636   %v = call float @llvm.amdgcn.permlane16.f32(float %undef, float %tidx_f32, i32 %src1, i32 %src2, i1 true, i1 true)
6637   store float %v, ptr addrspace(1) %out
6638   ret void
6641 define amdgpu_kernel void @v_permlane16_b32_i_tid_fi_bc_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
6642 ; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_fi_bc_i64:
6643 ; GFX10-SDAG:       ; %bb.0:
6644 ; GFX10-SDAG-NEXT:    s_clause 0x1
6645 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6646 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6647 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6648 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
6649 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,1]
6650 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6651 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
6652 ; GFX10-SDAG-NEXT:    s_endpgm
6654 ; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_fi_bc_i64:
6655 ; GFX10-GISEL:       ; %bb.0:
6656 ; GFX10-GISEL-NEXT:    s_clause 0x1
6657 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6658 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6659 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6660 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
6661 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6662 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,1]
6663 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
6664 ; GFX10-GISEL-NEXT:    s_endpgm
6666 ; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_fi_bc_i64:
6667 ; GFX11-SDAG:       ; %bb.0:
6668 ; GFX11-SDAG-NEXT:    s_clause 0x1
6669 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6670 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6671 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6672 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6673 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
6674 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
6675 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,1]
6676 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6677 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6678 ; GFX11-SDAG-NEXT:    s_endpgm
6680 ; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_fi_bc_i64:
6681 ; GFX11-GISEL:       ; %bb.0:
6682 ; GFX11-GISEL-NEXT:    s_clause 0x1
6683 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6684 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6685 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6686 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6687 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
6688 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
6689 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6690 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,1]
6691 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6692 ; GFX11-GISEL-NEXT:    s_endpgm
6694 ; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_fi_bc_i64:
6695 ; GFX12-SDAG:       ; %bb.0:
6696 ; GFX12-SDAG-NEXT:    s_clause 0x1
6697 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6698 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6699 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6700 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6701 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
6702 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
6703 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,1]
6704 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6705 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6706 ; GFX12-SDAG-NEXT:    s_endpgm
6708 ; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_fi_bc_i64:
6709 ; GFX12-GISEL:       ; %bb.0:
6710 ; GFX12-GISEL-NEXT:    s_clause 0x1
6711 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6712 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6713 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6714 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6715 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
6716 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
6717 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6718 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v2, s0, s1 op_sel:[1,1]
6719 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6720 ; GFX12-GISEL-NEXT:    s_endpgm
6721   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
6722   %tidx_i64 = zext i32 %tidx to i64
6723   %undef = freeze i64 poison
6724   %v = call i64 @llvm.amdgcn.permlane16.i64(i64 %undef, i64 %tidx_i64, i32 %src1, i32 %src2, i1 true, i1 true)
6725   store i64 %v, ptr addrspace(1) %out
6726   ret void
6729 define amdgpu_kernel void @v_permlane16_b32_i_tid_fi_bc_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
6730 ; GFX10-SDAG-LABEL: v_permlane16_b32_i_tid_fi_bc_f64:
6731 ; GFX10-SDAG:       ; %bb.0:
6732 ; GFX10-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6733 ; GFX10-SDAG-NEXT:    s_clause 0x1
6734 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6735 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6736 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6737 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
6738 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,1]
6739 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6740 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
6741 ; GFX10-SDAG-NEXT:    s_endpgm
6743 ; GFX10-GISEL-LABEL: v_permlane16_b32_i_tid_fi_bc_f64:
6744 ; GFX10-GISEL:       ; %bb.0:
6745 ; GFX10-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6746 ; GFX10-GISEL-NEXT:    s_clause 0x1
6747 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6748 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6749 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6750 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
6751 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6752 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,1]
6753 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
6754 ; GFX10-GISEL-NEXT:    s_endpgm
6756 ; GFX11-SDAG-LABEL: v_permlane16_b32_i_tid_fi_bc_f64:
6757 ; GFX11-SDAG:       ; %bb.0:
6758 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6759 ; GFX11-SDAG-NEXT:    s_clause 0x1
6760 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6761 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6762 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6763 ; GFX11-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6764 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
6765 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
6766 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,1]
6767 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6768 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6769 ; GFX11-SDAG-NEXT:    s_endpgm
6771 ; GFX11-GISEL-LABEL: v_permlane16_b32_i_tid_fi_bc_f64:
6772 ; GFX11-GISEL:       ; %bb.0:
6773 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6774 ; GFX11-GISEL-NEXT:    s_clause 0x1
6775 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6776 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6777 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6778 ; GFX11-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6779 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
6780 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
6781 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6782 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,1]
6783 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6784 ; GFX11-GISEL-NEXT:    s_endpgm
6786 ; GFX12-SDAG-LABEL: v_permlane16_b32_i_tid_fi_bc_f64:
6787 ; GFX12-SDAG:       ; %bb.0:
6788 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6789 ; GFX12-SDAG-NEXT:    s_clause 0x1
6790 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6791 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6792 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6793 ; GFX12-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6794 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
6795 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
6796 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,1]
6797 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6798 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6799 ; GFX12-SDAG-NEXT:    s_endpgm
6801 ; GFX12-GISEL-LABEL: v_permlane16_b32_i_tid_fi_bc_f64:
6802 ; GFX12-GISEL:       ; %bb.0:
6803 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
6804 ; GFX12-GISEL-NEXT:    s_clause 0x1
6805 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6806 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6807 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6808 ; GFX12-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
6809 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
6810 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
6811 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v0, v0, s0, s1 op_sel:[1,1]
6812 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v1, v1, s0, s1 op_sel:[1,1]
6813 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6814 ; GFX12-GISEL-NEXT:    s_endpgm
6815   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
6816   %tidx_f32 = bitcast i32 %tidx to float
6817   %tidx_f64 = fpext float %tidx_f32 to double
6818   %undef = freeze double poison
6819   %v = call double @llvm.amdgcn.permlane16.f64(double %undef, double %tidx_f64, i32 %src1, i32 %src2, i1 true, i1 true)
6820   store double %v, ptr addrspace(1) %out
6821   ret void
6824 define amdgpu_kernel void @v_permlanex16_b32_tid_tid_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
6825 ; GFX10-LABEL: v_permlanex16_b32_tid_tid_i32:
6826 ; GFX10:       ; %bb.0:
6827 ; GFX10-NEXT:    s_clause 0x1
6828 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6829 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6830 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
6831 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
6832 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
6833 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
6834 ; GFX10-NEXT:    s_endpgm
6836 ; GFX11-LABEL: v_permlanex16_b32_tid_tid_i32:
6837 ; GFX11:       ; %bb.0:
6838 ; GFX11-NEXT:    s_clause 0x1
6839 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6840 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6841 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6842 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
6843 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6844 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
6845 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
6846 ; GFX11-NEXT:    s_endpgm
6848 ; GFX12-LABEL: v_permlanex16_b32_tid_tid_i32:
6849 ; GFX12:       ; %bb.0:
6850 ; GFX12-NEXT:    s_clause 0x1
6851 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6852 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6853 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6854 ; GFX12-NEXT:    s_wait_kmcnt 0x0
6855 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6856 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
6857 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
6858 ; GFX12-NEXT:    s_endpgm
6859   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
6860   %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %tidx, i32 %tidx, i32 %src1, i32 %src2, i1 false, i1 false)
6861   store i32 %v, ptr addrspace(1) %out
6862   ret void
6865 define amdgpu_kernel void @v_permlanex16_b32_tid_tid_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
6866 ; GFX10-LABEL: v_permlanex16_b32_tid_tid_f32:
6867 ; GFX10:       ; %bb.0:
6868 ; GFX10-NEXT:    s_clause 0x1
6869 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6870 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6871 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
6872 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
6873 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
6874 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
6875 ; GFX10-NEXT:    s_endpgm
6877 ; GFX11-LABEL: v_permlanex16_b32_tid_tid_f32:
6878 ; GFX11:       ; %bb.0:
6879 ; GFX11-NEXT:    s_clause 0x1
6880 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6881 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6882 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6883 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
6884 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6885 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
6886 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
6887 ; GFX11-NEXT:    s_endpgm
6889 ; GFX12-LABEL: v_permlanex16_b32_tid_tid_f32:
6890 ; GFX12:       ; %bb.0:
6891 ; GFX12-NEXT:    s_clause 0x1
6892 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6893 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6894 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6895 ; GFX12-NEXT:    s_wait_kmcnt 0x0
6896 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
6897 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
6898 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
6899 ; GFX12-NEXT:    s_endpgm
6900   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
6901   %tidx_f32 = bitcast i32 %tidx to float
6902   %v = call float @llvm.amdgcn.permlanex16.f32(float %tidx_f32, float %tidx_f32, i32 %src1, i32 %src2, i1 false, i1 false)
6903   store float %v, ptr addrspace(1) %out
6904   ret void
6907 define amdgpu_kernel void @v_permlanex16_b32_tid_tid_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
6908 ; GFX10-SDAG-LABEL: v_permlanex16_b32_tid_tid_i64:
6909 ; GFX10-SDAG:       ; %bb.0:
6910 ; GFX10-SDAG-NEXT:    s_clause 0x1
6911 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6912 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6913 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, 0
6914 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6915 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
6916 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
6917 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
6918 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
6919 ; GFX10-SDAG-NEXT:    s_endpgm
6921 ; GFX10-GISEL-LABEL: v_permlanex16_b32_tid_tid_i64:
6922 ; GFX10-GISEL:       ; %bb.0:
6923 ; GFX10-GISEL-NEXT:    s_clause 0x1
6924 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
6925 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
6926 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0
6927 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6928 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
6929 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
6930 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
6931 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
6932 ; GFX10-GISEL-NEXT:    s_endpgm
6934 ; GFX11-SDAG-LABEL: v_permlanex16_b32_tid_tid_i64:
6935 ; GFX11-SDAG:       ; %bb.0:
6936 ; GFX11-SDAG-NEXT:    s_clause 0x1
6937 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6938 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6939 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6940 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6941 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
6942 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
6943 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
6944 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
6945 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6946 ; GFX11-SDAG-NEXT:    s_endpgm
6948 ; GFX11-GISEL-LABEL: v_permlanex16_b32_tid_tid_i64:
6949 ; GFX11-GISEL:       ; %bb.0:
6950 ; GFX11-GISEL-NEXT:    s_clause 0x1
6951 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6952 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6953 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6954 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6955 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
6956 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
6957 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
6958 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
6959 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6960 ; GFX11-GISEL-NEXT:    s_endpgm
6962 ; GFX12-SDAG-LABEL: v_permlanex16_b32_tid_tid_i64:
6963 ; GFX12-SDAG:       ; %bb.0:
6964 ; GFX12-SDAG-NEXT:    s_clause 0x1
6965 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6966 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6967 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6968 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
6969 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
6970 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
6971 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
6972 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
6973 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6974 ; GFX12-SDAG-NEXT:    s_endpgm
6976 ; GFX12-GISEL-LABEL: v_permlanex16_b32_tid_tid_i64:
6977 ; GFX12-GISEL:       ; %bb.0:
6978 ; GFX12-GISEL-NEXT:    s_clause 0x1
6979 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
6980 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
6981 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
6982 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
6983 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
6984 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_3)
6985 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
6986 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
6987 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
6988 ; GFX12-GISEL-NEXT:    s_endpgm
6989   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
6990   %tidx_i64 = zext i32 %tidx to i64
6991   %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %tidx_i64, i64 %tidx_i64, i32 %src1, i32 %src2, i1 false, i1 false)
6992   store i64 %v, ptr addrspace(1) %out
6993   ret void
6996 define amdgpu_kernel void @v_permlanex16_b32_tid_tid_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
6997 ; GFX10-SDAG-LABEL: v_permlanex16_b32_tid_tid_f64:
6998 ; GFX10-SDAG:       ; %bb.0:
6999 ; GFX10-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7000 ; GFX10-SDAG-NEXT:    s_clause 0x1
7001 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7002 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7003 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7004 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7005 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
7006 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7007 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
7008 ; GFX10-SDAG-NEXT:    s_endpgm
7010 ; GFX10-GISEL-LABEL: v_permlanex16_b32_tid_tid_f64:
7011 ; GFX10-GISEL:       ; %bb.0:
7012 ; GFX10-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7013 ; GFX10-GISEL-NEXT:    s_clause 0x1
7014 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7015 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7016 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7017 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7018 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7019 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
7020 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
7021 ; GFX10-GISEL-NEXT:    s_endpgm
7023 ; GFX11-SDAG-LABEL: v_permlanex16_b32_tid_tid_f64:
7024 ; GFX11-SDAG:       ; %bb.0:
7025 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7026 ; GFX11-SDAG-NEXT:    s_clause 0x1
7027 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7028 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7029 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7030 ; GFX11-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7031 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7032 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
7033 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
7034 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7035 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7036 ; GFX11-SDAG-NEXT:    s_endpgm
7038 ; GFX11-GISEL-LABEL: v_permlanex16_b32_tid_tid_f64:
7039 ; GFX11-GISEL:       ; %bb.0:
7040 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7041 ; GFX11-GISEL-NEXT:    s_clause 0x1
7042 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7043 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7044 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7045 ; GFX11-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7046 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7047 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
7048 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7049 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
7050 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7051 ; GFX11-GISEL-NEXT:    s_endpgm
7053 ; GFX12-SDAG-LABEL: v_permlanex16_b32_tid_tid_f64:
7054 ; GFX12-SDAG:       ; %bb.0:
7055 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7056 ; GFX12-SDAG-NEXT:    s_clause 0x1
7057 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7058 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7059 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7060 ; GFX12-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7061 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
7062 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
7063 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
7064 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7065 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7066 ; GFX12-SDAG-NEXT:    s_endpgm
7068 ; GFX12-GISEL-LABEL: v_permlanex16_b32_tid_tid_f64:
7069 ; GFX12-GISEL:       ; %bb.0:
7070 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7071 ; GFX12-GISEL-NEXT:    s_clause 0x1
7072 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7073 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7074 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7075 ; GFX12-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7076 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
7077 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
7078 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7079 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
7080 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7081 ; GFX12-GISEL-NEXT:    s_endpgm
7082   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
7083   %tidx_f32 = bitcast i32 %tidx to float
7084   %tidx_f64 = fpext float %tidx_f32 to double
7085   %v = call double @llvm.amdgcn.permlanex16.f64(double %tidx_f64, double %tidx_f64, i32 %src1, i32 %src2, i1 false, i1 false)
7086   store double %v, ptr addrspace(1) %out
7087   ret void
7090 define amdgpu_kernel void @v_permlanex16_b32_undef_tid_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
7091 ; GFX10-LABEL: v_permlanex16_b32_undef_tid_i32:
7092 ; GFX10:       ; %bb.0:
7093 ; GFX10-NEXT:    s_clause 0x1
7094 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7095 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7096 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
7097 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
7098 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7099 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
7100 ; GFX10-NEXT:    s_endpgm
7102 ; GFX11-LABEL: v_permlanex16_b32_undef_tid_i32:
7103 ; GFX11:       ; %bb.0:
7104 ; GFX11-NEXT:    s_clause 0x1
7105 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7106 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7107 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
7108 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
7109 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7110 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7111 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
7112 ; GFX11-NEXT:    s_endpgm
7114 ; GFX12-LABEL: v_permlanex16_b32_undef_tid_i32:
7115 ; GFX12:       ; %bb.0:
7116 ; GFX12-NEXT:    s_clause 0x1
7117 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7118 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7119 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
7120 ; GFX12-NEXT:    s_wait_kmcnt 0x0
7121 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7122 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7123 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
7124 ; GFX12-NEXT:    s_endpgm
7125   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
7126   %undef = freeze i32 poison
7127   %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %undef, i32 %tidx, i32 %src1, i32 %src2, i1 false, i1 false)
7128   store i32 %v, ptr addrspace(1) %out
7129   ret void
7132 define amdgpu_kernel void @v_permlanex16_b32_undef_tid_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
7133 ; GFX10-LABEL: v_permlanex16_b32_undef_tid_f32:
7134 ; GFX10:       ; %bb.0:
7135 ; GFX10-NEXT:    s_clause 0x1
7136 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7137 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7138 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
7139 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
7140 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7141 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
7142 ; GFX10-NEXT:    s_endpgm
7144 ; GFX11-LABEL: v_permlanex16_b32_undef_tid_f32:
7145 ; GFX11:       ; %bb.0:
7146 ; GFX11-NEXT:    s_clause 0x1
7147 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7148 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7149 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
7150 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
7151 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7152 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7153 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
7154 ; GFX11-NEXT:    s_endpgm
7156 ; GFX12-LABEL: v_permlanex16_b32_undef_tid_f32:
7157 ; GFX12:       ; %bb.0:
7158 ; GFX12-NEXT:    s_clause 0x1
7159 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7160 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7161 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
7162 ; GFX12-NEXT:    s_wait_kmcnt 0x0
7163 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7164 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7165 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
7166 ; GFX12-NEXT:    s_endpgm
7167   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
7168   %tidx_f32 = bitcast i32 %tidx to float
7169   %undef = freeze float poison
7170   %v = call float @llvm.amdgcn.permlanex16.f32(float %undef, float %tidx_f32, i32 %src1, i32 %src2, i1 false, i1 false)
7171   store float %v, ptr addrspace(1) %out
7172   ret void
7175 define amdgpu_kernel void @v_permlanex16_b32_undef_tid_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
7176 ; GFX10-SDAG-LABEL: v_permlanex16_b32_undef_tid_i64:
7177 ; GFX10-SDAG:       ; %bb.0:
7178 ; GFX10-SDAG-NEXT:    s_clause 0x1
7179 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7180 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7181 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7182 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7183 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v2, s0, s1
7184 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7185 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
7186 ; GFX10-SDAG-NEXT:    s_endpgm
7188 ; GFX10-GISEL-LABEL: v_permlanex16_b32_undef_tid_i64:
7189 ; GFX10-GISEL:       ; %bb.0:
7190 ; GFX10-GISEL-NEXT:    s_clause 0x1
7191 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7192 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7193 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7194 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7195 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7196 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v2, s0, s1
7197 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
7198 ; GFX10-GISEL-NEXT:    s_endpgm
7200 ; GFX11-SDAG-LABEL: v_permlanex16_b32_undef_tid_i64:
7201 ; GFX11-SDAG:       ; %bb.0:
7202 ; GFX11-SDAG-NEXT:    s_clause 0x1
7203 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7204 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7205 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7206 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7207 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7208 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
7209 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v2, s0, s1
7210 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7211 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7212 ; GFX11-SDAG-NEXT:    s_endpgm
7214 ; GFX11-GISEL-LABEL: v_permlanex16_b32_undef_tid_i64:
7215 ; GFX11-GISEL:       ; %bb.0:
7216 ; GFX11-GISEL-NEXT:    s_clause 0x1
7217 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7218 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7219 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7220 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7221 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7222 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
7223 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7224 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v2, s0, s1
7225 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7226 ; GFX11-GISEL-NEXT:    s_endpgm
7228 ; GFX12-SDAG-LABEL: v_permlanex16_b32_undef_tid_i64:
7229 ; GFX12-SDAG:       ; %bb.0:
7230 ; GFX12-SDAG-NEXT:    s_clause 0x1
7231 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7232 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7233 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7234 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7235 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
7236 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
7237 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v2, s0, s1
7238 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7239 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7240 ; GFX12-SDAG-NEXT:    s_endpgm
7242 ; GFX12-GISEL-LABEL: v_permlanex16_b32_undef_tid_i64:
7243 ; GFX12-GISEL:       ; %bb.0:
7244 ; GFX12-GISEL-NEXT:    s_clause 0x1
7245 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7246 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7247 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7248 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7249 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
7250 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
7251 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7252 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v2, s0, s1
7253 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7254 ; GFX12-GISEL-NEXT:    s_endpgm
7255   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
7256   %tidx_i64 = zext i32 %tidx to i64
7257   %undef = freeze i64 poison
7258   %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %undef, i64 %tidx_i64, i32 %src1, i32 %src2, i1 false, i1 false)
7259   store i64 %v, ptr addrspace(1) %out
7260   ret void
7263 define amdgpu_kernel void @v_permlanex16_b32_undef_tid_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
7264 ; GFX10-SDAG-LABEL: v_permlanex16_b32_undef_tid_f64:
7265 ; GFX10-SDAG:       ; %bb.0:
7266 ; GFX10-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7267 ; GFX10-SDAG-NEXT:    s_clause 0x1
7268 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7269 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7270 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7271 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7272 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
7273 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7274 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
7275 ; GFX10-SDAG-NEXT:    s_endpgm
7277 ; GFX10-GISEL-LABEL: v_permlanex16_b32_undef_tid_f64:
7278 ; GFX10-GISEL:       ; %bb.0:
7279 ; GFX10-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7280 ; GFX10-GISEL-NEXT:    s_clause 0x1
7281 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7282 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7283 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7284 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7285 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7286 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
7287 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
7288 ; GFX10-GISEL-NEXT:    s_endpgm
7290 ; GFX11-SDAG-LABEL: v_permlanex16_b32_undef_tid_f64:
7291 ; GFX11-SDAG:       ; %bb.0:
7292 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7293 ; GFX11-SDAG-NEXT:    s_clause 0x1
7294 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7295 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7296 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7297 ; GFX11-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7298 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7299 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
7300 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
7301 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7302 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7303 ; GFX11-SDAG-NEXT:    s_endpgm
7305 ; GFX11-GISEL-LABEL: v_permlanex16_b32_undef_tid_f64:
7306 ; GFX11-GISEL:       ; %bb.0:
7307 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7308 ; GFX11-GISEL-NEXT:    s_clause 0x1
7309 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7310 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7311 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7312 ; GFX11-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7313 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7314 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
7315 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7316 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
7317 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7318 ; GFX11-GISEL-NEXT:    s_endpgm
7320 ; GFX12-SDAG-LABEL: v_permlanex16_b32_undef_tid_f64:
7321 ; GFX12-SDAG:       ; %bb.0:
7322 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7323 ; GFX12-SDAG-NEXT:    s_clause 0x1
7324 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7325 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7326 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7327 ; GFX12-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7328 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
7329 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
7330 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
7331 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7332 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7333 ; GFX12-SDAG-NEXT:    s_endpgm
7335 ; GFX12-GISEL-LABEL: v_permlanex16_b32_undef_tid_f64:
7336 ; GFX12-GISEL:       ; %bb.0:
7337 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7338 ; GFX12-GISEL-NEXT:    s_clause 0x1
7339 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7340 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7341 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7342 ; GFX12-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7343 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
7344 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
7345 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1
7346 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1
7347 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7348 ; GFX12-GISEL-NEXT:    s_endpgm
7349   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
7350   %tidx_f32 = bitcast i32 %tidx to float
7351   %tidx_f64 = fpext float %tidx_f32 to double
7352   %undef = freeze double poison
7353   %v = call double @llvm.amdgcn.permlanex16.f64(double %undef, double %tidx_f64, i32 %src1, i32 %src2, i1 false, i1 false)
7354   store double %v, ptr addrspace(1) %out
7355   ret void
7358 define amdgpu_kernel void @v_permlanex16_b32_i_tid_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
7359 ; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_i32:
7360 ; GFX10-SDAG:       ; %bb.0:
7361 ; GFX10-SDAG-NEXT:    s_clause 0x1
7362 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7363 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7364 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, 0x3039
7365 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7366 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7367 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7368 ; GFX10-SDAG-NEXT:    global_store_dword v2, v1, s[2:3]
7369 ; GFX10-SDAG-NEXT:    s_endpgm
7371 ; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_i32:
7372 ; GFX10-GISEL:       ; %bb.0:
7373 ; GFX10-GISEL-NEXT:    s_clause 0x1
7374 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7375 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7376 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3039
7377 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7378 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7379 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, 0
7380 ; GFX10-GISEL-NEXT:    global_store_dword v0, v1, s[2:3]
7381 ; GFX10-GISEL-NEXT:    s_endpgm
7383 ; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_i32:
7384 ; GFX11-SDAG:       ; %bb.0:
7385 ; GFX11-SDAG-NEXT:    s_clause 0x1
7386 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7387 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7388 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7389 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, 0
7390 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7391 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7392 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7393 ; GFX11-SDAG-NEXT:    global_store_b32 v2, v1, s[2:3]
7394 ; GFX11-SDAG-NEXT:    s_endpgm
7396 ; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_i32:
7397 ; GFX11-GISEL:       ; %bb.0:
7398 ; GFX11-GISEL-NEXT:    s_clause 0x1
7399 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7400 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7401 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3039
7402 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7403 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7404 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7405 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7406 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, 0
7407 ; GFX11-GISEL-NEXT:    global_store_b32 v0, v1, s[2:3]
7408 ; GFX11-GISEL-NEXT:    s_endpgm
7410 ; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_i32:
7411 ; GFX12-SDAG:       ; %bb.0:
7412 ; GFX12-SDAG-NEXT:    s_clause 0x1
7413 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7414 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7415 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7416 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, 0
7417 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
7418 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7419 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7420 ; GFX12-SDAG-NEXT:    global_store_b32 v2, v1, s[2:3]
7421 ; GFX12-SDAG-NEXT:    s_endpgm
7423 ; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_i32:
7424 ; GFX12-GISEL:       ; %bb.0:
7425 ; GFX12-GISEL-NEXT:    s_clause 0x1
7426 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7427 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7428 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3039
7429 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7430 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
7431 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7432 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7433 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v0, 0
7434 ; GFX12-GISEL-NEXT:    global_store_b32 v0, v1, s[2:3]
7435 ; GFX12-GISEL-NEXT:    s_endpgm
7436   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
7437   %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 12345, i32 %tidx, i32 %src1, i32 %src2, i1 false, i1 false)
7438   store i32 %v, ptr addrspace(1) %out
7439   ret void
7442 define amdgpu_kernel void @v_permlanex16_b32_i_tid_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
7443 ; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_f32:
7444 ; GFX10-SDAG:       ; %bb.0:
7445 ; GFX10-SDAG-NEXT:    s_clause 0x1
7446 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7447 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7448 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, 0x449a5000
7449 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7450 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7451 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7452 ; GFX10-SDAG-NEXT:    global_store_dword v2, v1, s[2:3]
7453 ; GFX10-SDAG-NEXT:    s_endpgm
7455 ; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_f32:
7456 ; GFX10-GISEL:       ; %bb.0:
7457 ; GFX10-GISEL-NEXT:    s_clause 0x1
7458 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7459 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7460 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0x449a5000
7461 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7462 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7463 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v0, 0
7464 ; GFX10-GISEL-NEXT:    global_store_dword v0, v1, s[2:3]
7465 ; GFX10-GISEL-NEXT:    s_endpgm
7467 ; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_f32:
7468 ; GFX11-SDAG:       ; %bb.0:
7469 ; GFX11-SDAG-NEXT:    s_clause 0x1
7470 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7471 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7472 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7473 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v1, 0x449a5000 :: v_dual_mov_b32 v2, 0
7474 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7475 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7476 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7477 ; GFX11-SDAG-NEXT:    global_store_b32 v2, v1, s[2:3]
7478 ; GFX11-SDAG-NEXT:    s_endpgm
7480 ; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_f32:
7481 ; GFX11-GISEL:       ; %bb.0:
7482 ; GFX11-GISEL-NEXT:    s_clause 0x1
7483 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7484 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7485 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v1, 0x449a5000
7486 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7487 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7488 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7489 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7490 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v0, 0
7491 ; GFX11-GISEL-NEXT:    global_store_b32 v0, v1, s[2:3]
7492 ; GFX11-GISEL-NEXT:    s_endpgm
7494 ; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_f32:
7495 ; GFX12-SDAG:       ; %bb.0:
7496 ; GFX12-SDAG-NEXT:    s_clause 0x1
7497 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7498 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7499 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7500 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v1, 0x449a5000 :: v_dual_mov_b32 v2, 0
7501 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
7502 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7503 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7504 ; GFX12-SDAG-NEXT:    global_store_b32 v2, v1, s[2:3]
7505 ; GFX12-SDAG-NEXT:    s_endpgm
7507 ; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_f32:
7508 ; GFX12-GISEL:       ; %bb.0:
7509 ; GFX12-GISEL-NEXT:    s_clause 0x1
7510 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7511 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7512 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v1, 0x449a5000
7513 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7514 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
7515 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7516 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7517 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v0, 0
7518 ; GFX12-GISEL-NEXT:    global_store_b32 v0, v1, s[2:3]
7519 ; GFX12-GISEL-NEXT:    s_endpgm
7520   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
7521   %tidx_f32 = bitcast i32 %tidx to float
7522   %v = call float @llvm.amdgcn.permlanex16.f32(float 1234.5, float %tidx_f32, i32 %src1, i32 %src2, i1 false, i1 false)
7523   store float %v, ptr addrspace(1) %out
7524   ret void
7527 define amdgpu_kernel void @v_permlanex16_b32_i_tid_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
7528 ; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_i64:
7529 ; GFX10-SDAG:       ; %bb.0:
7530 ; GFX10-SDAG-NEXT:    s_clause 0x1
7531 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7532 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7533 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7534 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v1, 0x3039
7535 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v3, 0
7536 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7537 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
7538 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7539 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v3, v[1:2], s[2:3]
7540 ; GFX10-SDAG-NEXT:    s_endpgm
7542 ; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_i64:
7543 ; GFX10-GISEL:       ; %bb.0:
7544 ; GFX10-GISEL-NEXT:    s_clause 0x1
7545 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7546 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7547 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v1, 0x3039
7548 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7549 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, 0
7550 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7551 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7552 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
7553 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v3, v[1:2], s[2:3]
7554 ; GFX10-GISEL-NEXT:    s_endpgm
7556 ; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_i64:
7557 ; GFX11-SDAG:       ; %bb.0:
7558 ; GFX11-SDAG-NEXT:    s_clause 0x1
7559 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7560 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7561 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, 0x3039
7562 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v0
7563 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7564 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
7565 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
7566 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7567 ; GFX11-SDAG-NEXT:    global_store_b64 v3, v[1:2], s[2:3]
7568 ; GFX11-SDAG-NEXT:    s_endpgm
7570 ; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_i64:
7571 ; GFX11-GISEL:       ; %bb.0:
7572 ; GFX11-GISEL-NEXT:    s_clause 0x1
7573 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7574 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7575 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, 0
7576 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v0
7577 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7578 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
7579 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7580 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
7581 ; GFX11-GISEL-NEXT:    global_store_b64 v3, v[1:2], s[2:3]
7582 ; GFX11-GISEL-NEXT:    s_endpgm
7584 ; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_i64:
7585 ; GFX12-SDAG:       ; %bb.0:
7586 ; GFX12-SDAG-NEXT:    s_clause 0x1
7587 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7588 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7589 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v1, 0x3039
7590 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v0
7591 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
7592 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
7593 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
7594 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7595 ; GFX12-SDAG-NEXT:    global_store_b64 v3, v[1:2], s[2:3]
7596 ; GFX12-SDAG-NEXT:    s_endpgm
7598 ; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_i64:
7599 ; GFX12-GISEL:       ; %bb.0:
7600 ; GFX12-GISEL-NEXT:    s_clause 0x1
7601 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7602 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7603 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v1, 0x3039 :: v_dual_mov_b32 v2, 0
7604 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v3, 0 :: v_dual_and_b32 v0, 0x3ff, v0
7605 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
7606 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_3)
7607 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v0, s0, s1
7608 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
7609 ; GFX12-GISEL-NEXT:    global_store_b64 v3, v[1:2], s[2:3]
7610 ; GFX12-GISEL-NEXT:    s_endpgm
7611   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
7612   %tidx_i64 = zext i32 %tidx to i64
7613   %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 12345, i64 %tidx_i64, i32 %src1, i32 %src2, i1 false, i1 false)
7614   store i64 %v, ptr addrspace(1) %out
7615   ret void
7618 define amdgpu_kernel void @v_permlanex16_b32_i_tid_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
7619 ; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_f64:
7620 ; GFX10-SDAG:       ; %bb.0:
7621 ; GFX10-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7622 ; GFX10-SDAG-NEXT:    s_clause 0x1
7623 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7624 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7625 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v3, 0x40934a00
7626 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7627 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v4, 0
7628 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7629 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v3, v1, s0, s1
7630 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v2, v0, s0, s1
7631 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v4, v[2:3], s[2:3]
7632 ; GFX10-SDAG-NEXT:    s_endpgm
7634 ; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_f64:
7635 ; GFX10-GISEL:       ; %bb.0:
7636 ; GFX10-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7637 ; GFX10-GISEL-NEXT:    s_clause 0x1
7638 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7639 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7640 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7641 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v3, 0x40934a00
7642 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v4, 0
7643 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7644 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v2, v0, s0, s1
7645 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v3, v1, s0, s1
7646 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v4, v[2:3], s[2:3]
7647 ; GFX10-GISEL-NEXT:    s_endpgm
7649 ; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_f64:
7650 ; GFX11-SDAG:       ; %bb.0:
7651 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7652 ; GFX11-SDAG-NEXT:    s_clause 0x1
7653 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7654 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7655 ; GFX11-SDAG-NEXT:    v_dual_mov_b32 v3, 0x40934a00 :: v_dual_mov_b32 v2, 0
7656 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v4, 0
7657 ; GFX11-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7658 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7659 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
7660 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v3, v1, s0, s1
7661 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v2, v0, s0, s1
7662 ; GFX11-SDAG-NEXT:    global_store_b64 v4, v[2:3], s[2:3]
7663 ; GFX11-SDAG-NEXT:    s_endpgm
7665 ; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_f64:
7666 ; GFX11-GISEL:       ; %bb.0:
7667 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7668 ; GFX11-GISEL-NEXT:    s_clause 0x1
7669 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7670 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7671 ; GFX11-GISEL-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v3, 0x40934a00
7672 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v4, 0
7673 ; GFX11-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7674 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7675 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
7676 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v2, v0, s0, s1
7677 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v3, v1, s0, s1
7678 ; GFX11-GISEL-NEXT:    global_store_b64 v4, v[2:3], s[2:3]
7679 ; GFX11-GISEL-NEXT:    s_endpgm
7681 ; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_f64:
7682 ; GFX12-SDAG:       ; %bb.0:
7683 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7684 ; GFX12-SDAG-NEXT:    s_clause 0x1
7685 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7686 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7687 ; GFX12-SDAG-NEXT:    v_dual_mov_b32 v3, 0x40934a00 :: v_dual_mov_b32 v2, 0
7688 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v4, 0
7689 ; GFX12-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7690 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
7691 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
7692 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v3, v1, s0, s1
7693 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v2, v0, s0, s1
7694 ; GFX12-SDAG-NEXT:    global_store_b64 v4, v[2:3], s[2:3]
7695 ; GFX12-SDAG-NEXT:    s_endpgm
7697 ; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_f64:
7698 ; GFX12-GISEL:       ; %bb.0:
7699 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7700 ; GFX12-GISEL-NEXT:    s_clause 0x1
7701 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7702 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7703 ; GFX12-GISEL-NEXT:    v_dual_mov_b32 v2, 0 :: v_dual_mov_b32 v3, 0x40934a00
7704 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v4, 0
7705 ; GFX12-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7706 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
7707 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
7708 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v2, v0, s0, s1
7709 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v3, v1, s0, s1
7710 ; GFX12-GISEL-NEXT:    global_store_b64 v4, v[2:3], s[2:3]
7711 ; GFX12-GISEL-NEXT:    s_endpgm
7712   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
7713   %tidx_f32 = bitcast i32 %tidx to float
7714   %tidx_f64 = fpext float %tidx_f32 to double
7715   %v = call double @llvm.amdgcn.permlanex16.f64(double 1234.5, double %tidx_f64, i32 %src1, i32 %src2, i1 false, i1 false)
7716   store double %v, ptr addrspace(1) %out
7717   ret void
7720 define amdgpu_kernel void @v_permlanex16_b32_i_tid_fi_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
7721 ; GFX10-LABEL: v_permlanex16_b32_i_tid_fi_i32:
7722 ; GFX10:       ; %bb.0:
7723 ; GFX10-NEXT:    s_clause 0x1
7724 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7725 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7726 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
7727 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
7728 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7729 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
7730 ; GFX10-NEXT:    s_endpgm
7732 ; GFX11-LABEL: v_permlanex16_b32_i_tid_fi_i32:
7733 ; GFX11:       ; %bb.0:
7734 ; GFX11-NEXT:    s_clause 0x1
7735 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7736 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7737 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
7738 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
7739 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7740 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7741 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
7742 ; GFX11-NEXT:    s_endpgm
7744 ; GFX12-LABEL: v_permlanex16_b32_i_tid_fi_i32:
7745 ; GFX12:       ; %bb.0:
7746 ; GFX12-NEXT:    s_clause 0x1
7747 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7748 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7749 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
7750 ; GFX12-NEXT:    s_wait_kmcnt 0x0
7751 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7752 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7753 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
7754 ; GFX12-NEXT:    s_endpgm
7755   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
7756   %undef = freeze i32 poison
7757   %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %undef, i32 %tidx, i32 %src1, i32 %src2, i1 true, i1 false)
7758   store i32 %v, ptr addrspace(1) %out
7759   ret void
7762 define amdgpu_kernel void @v_permlanex16_b32_i_tid_fi_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
7763 ; GFX10-LABEL: v_permlanex16_b32_i_tid_fi_f32:
7764 ; GFX10:       ; %bb.0:
7765 ; GFX10-NEXT:    s_clause 0x1
7766 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7767 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7768 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
7769 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
7770 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7771 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
7772 ; GFX10-NEXT:    s_endpgm
7774 ; GFX11-LABEL: v_permlanex16_b32_i_tid_fi_f32:
7775 ; GFX11:       ; %bb.0:
7776 ; GFX11-NEXT:    s_clause 0x1
7777 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7778 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7779 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
7780 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
7781 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7782 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7783 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
7784 ; GFX11-NEXT:    s_endpgm
7786 ; GFX12-LABEL: v_permlanex16_b32_i_tid_fi_f32:
7787 ; GFX12:       ; %bb.0:
7788 ; GFX12-NEXT:    s_clause 0x1
7789 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7790 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7791 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
7792 ; GFX12-NEXT:    s_wait_kmcnt 0x0
7793 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
7794 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7795 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
7796 ; GFX12-NEXT:    s_endpgm
7797   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
7798   %tidx_f32 = bitcast i32 %tidx to float
7799   %undef = freeze float poison
7800   %v = call float @llvm.amdgcn.permlanex16.f32(float %undef, float %tidx_f32, i32 %src1, i32 %src2, i1 true, i1 false)
7801   store float %v, ptr addrspace(1) %out
7802   ret void
7805 define amdgpu_kernel void @v_permlanex16_b32_i_tid_fi_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
7806 ; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_i64:
7807 ; GFX10-SDAG:       ; %bb.0:
7808 ; GFX10-SDAG-NEXT:    s_clause 0x1
7809 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7810 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7811 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7812 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7813 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,0]
7814 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7815 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
7816 ; GFX10-SDAG-NEXT:    s_endpgm
7818 ; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_i64:
7819 ; GFX10-GISEL:       ; %bb.0:
7820 ; GFX10-GISEL-NEXT:    s_clause 0x1
7821 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7822 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7823 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7824 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7825 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7826 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,0]
7827 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
7828 ; GFX10-GISEL-NEXT:    s_endpgm
7830 ; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_i64:
7831 ; GFX11-SDAG:       ; %bb.0:
7832 ; GFX11-SDAG-NEXT:    s_clause 0x1
7833 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7834 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7835 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7836 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7837 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7838 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
7839 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,0]
7840 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7841 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7842 ; GFX11-SDAG-NEXT:    s_endpgm
7844 ; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_i64:
7845 ; GFX11-GISEL:       ; %bb.0:
7846 ; GFX11-GISEL-NEXT:    s_clause 0x1
7847 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7848 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7849 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7850 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7851 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7852 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
7853 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7854 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,0]
7855 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7856 ; GFX11-GISEL-NEXT:    s_endpgm
7858 ; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_i64:
7859 ; GFX12-SDAG:       ; %bb.0:
7860 ; GFX12-SDAG-NEXT:    s_clause 0x1
7861 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7862 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7863 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7864 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7865 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
7866 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
7867 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,0]
7868 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7869 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7870 ; GFX12-SDAG-NEXT:    s_endpgm
7872 ; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_i64:
7873 ; GFX12-GISEL:       ; %bb.0:
7874 ; GFX12-GISEL-NEXT:    s_clause 0x1
7875 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7876 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7877 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7878 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7879 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
7880 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
7881 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7882 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,0]
7883 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7884 ; GFX12-GISEL-NEXT:    s_endpgm
7885   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
7886   %tidx_i64 = zext i32 %tidx to i64
7887   %undef = freeze i64 poison
7888   %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %undef, i64 %tidx_i64, i32 %src1, i32 %src2, i1 true, i1 false)
7889   store i64 %v, ptr addrspace(1) %out
7890   ret void
7893 define amdgpu_kernel void @v_permlanex16_b32_i_tid_fi_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
7894 ; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_f64:
7895 ; GFX10-SDAG:       ; %bb.0:
7896 ; GFX10-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7897 ; GFX10-SDAG-NEXT:    s_clause 0x1
7898 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7899 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7900 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7901 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7902 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,0]
7903 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7904 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
7905 ; GFX10-SDAG-NEXT:    s_endpgm
7907 ; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_f64:
7908 ; GFX10-GISEL:       ; %bb.0:
7909 ; GFX10-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7910 ; GFX10-GISEL-NEXT:    s_clause 0x1
7911 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7912 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7913 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7914 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7915 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7916 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,0]
7917 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
7918 ; GFX10-GISEL-NEXT:    s_endpgm
7920 ; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_f64:
7921 ; GFX11-SDAG:       ; %bb.0:
7922 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7923 ; GFX11-SDAG-NEXT:    s_clause 0x1
7924 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7925 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7926 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7927 ; GFX11-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7928 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
7929 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
7930 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,0]
7931 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7932 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7933 ; GFX11-SDAG-NEXT:    s_endpgm
7935 ; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_f64:
7936 ; GFX11-GISEL:       ; %bb.0:
7937 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7938 ; GFX11-GISEL-NEXT:    s_clause 0x1
7939 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7940 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7941 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7942 ; GFX11-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7943 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
7944 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
7945 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7946 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,0]
7947 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7948 ; GFX11-GISEL-NEXT:    s_endpgm
7950 ; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_f64:
7951 ; GFX12-SDAG:       ; %bb.0:
7952 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7953 ; GFX12-SDAG-NEXT:    s_clause 0x1
7954 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7955 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7956 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
7957 ; GFX12-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7958 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
7959 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
7960 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,0]
7961 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7962 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7963 ; GFX12-SDAG-NEXT:    s_endpgm
7965 ; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_f64:
7966 ; GFX12-GISEL:       ; %bb.0:
7967 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
7968 ; GFX12-GISEL-NEXT:    s_clause 0x1
7969 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
7970 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
7971 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
7972 ; GFX12-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
7973 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
7974 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
7975 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,0]
7976 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,0]
7977 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
7978 ; GFX12-GISEL-NEXT:    s_endpgm
7979   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
7980   %tidx_f32 = bitcast i32 %tidx to float
7981   %tidx_f64 = fpext float %tidx_f32 to double
7982   %undef = freeze double poison
7983   %v = call double @llvm.amdgcn.permlanex16.f64(double %undef, double %tidx_f64, i32 %src1, i32 %src2, i1 true, i1 false)
7984   store double %v, ptr addrspace(1) %out
7985   ret void
7988 define amdgpu_kernel void @v_permlanex16_b32_i_tid_bc_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
7989 ; GFX10-LABEL: v_permlanex16_b32_i_tid_bc_i32:
7990 ; GFX10:       ; %bb.0:
7991 ; GFX10-NEXT:    s_clause 0x1
7992 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
7993 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
7994 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
7995 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
7996 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
7997 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
7998 ; GFX10-NEXT:    s_endpgm
8000 ; GFX11-LABEL: v_permlanex16_b32_i_tid_bc_i32:
8001 ; GFX11:       ; %bb.0:
8002 ; GFX11-NEXT:    s_clause 0x1
8003 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8004 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8005 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
8006 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
8007 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8008 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8009 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
8010 ; GFX11-NEXT:    s_endpgm
8012 ; GFX12-LABEL: v_permlanex16_b32_i_tid_bc_i32:
8013 ; GFX12:       ; %bb.0:
8014 ; GFX12-NEXT:    s_clause 0x1
8015 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8016 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8017 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
8018 ; GFX12-NEXT:    s_wait_kmcnt 0x0
8019 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8020 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8021 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
8022 ; GFX12-NEXT:    s_endpgm
8023   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
8024   %undef = freeze i32 poison
8025   %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %undef, i32 %tidx, i32 %src1, i32 %src2, i1 false, i1 true)
8026   store i32 %v, ptr addrspace(1) %out
8027   ret void
8030 define amdgpu_kernel void @v_permlanex16_b32_i_tid_bc_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
8031 ; GFX10-LABEL: v_permlanex16_b32_i_tid_bc_f32:
8032 ; GFX10:       ; %bb.0:
8033 ; GFX10-NEXT:    s_clause 0x1
8034 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
8035 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
8036 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
8037 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
8038 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8039 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
8040 ; GFX10-NEXT:    s_endpgm
8042 ; GFX11-LABEL: v_permlanex16_b32_i_tid_bc_f32:
8043 ; GFX11:       ; %bb.0:
8044 ; GFX11-NEXT:    s_clause 0x1
8045 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8046 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8047 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
8048 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
8049 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8050 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8051 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
8052 ; GFX11-NEXT:    s_endpgm
8054 ; GFX12-LABEL: v_permlanex16_b32_i_tid_bc_f32:
8055 ; GFX12:       ; %bb.0:
8056 ; GFX12-NEXT:    s_clause 0x1
8057 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8058 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8059 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
8060 ; GFX12-NEXT:    s_wait_kmcnt 0x0
8061 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8062 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8063 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
8064 ; GFX12-NEXT:    s_endpgm
8065   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
8066   %tidx_f32 = bitcast i32 %tidx to float
8067   %undef = freeze float poison
8068   %v = call float @llvm.amdgcn.permlanex16.f32(float %undef, float %tidx_f32, i32 %src1, i32 %src2, i1 false, i1 true)
8069   store float %v, ptr addrspace(1) %out
8070   ret void
8073 define amdgpu_kernel void @v_permlanex16_b32_i_tid_bc_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
8074 ; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_bc_i64:
8075 ; GFX10-SDAG:       ; %bb.0:
8076 ; GFX10-SDAG-NEXT:    s_clause 0x1
8077 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
8078 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
8079 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
8080 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
8081 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[0,1]
8082 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8083 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
8084 ; GFX10-SDAG-NEXT:    s_endpgm
8086 ; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_bc_i64:
8087 ; GFX10-GISEL:       ; %bb.0:
8088 ; GFX10-GISEL-NEXT:    s_clause 0x1
8089 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
8090 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
8091 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
8092 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
8093 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8094 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[0,1]
8095 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
8096 ; GFX10-GISEL-NEXT:    s_endpgm
8098 ; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_bc_i64:
8099 ; GFX11-SDAG:       ; %bb.0:
8100 ; GFX11-SDAG-NEXT:    s_clause 0x1
8101 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8102 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8103 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
8104 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
8105 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
8106 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
8107 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[0,1]
8108 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8109 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
8110 ; GFX11-SDAG-NEXT:    s_endpgm
8112 ; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_bc_i64:
8113 ; GFX11-GISEL:       ; %bb.0:
8114 ; GFX11-GISEL-NEXT:    s_clause 0x1
8115 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8116 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8117 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
8118 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
8119 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
8120 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
8121 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8122 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[0,1]
8123 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
8124 ; GFX11-GISEL-NEXT:    s_endpgm
8126 ; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_bc_i64:
8127 ; GFX12-SDAG:       ; %bb.0:
8128 ; GFX12-SDAG-NEXT:    s_clause 0x1
8129 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8130 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8131 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
8132 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
8133 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
8134 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
8135 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[0,1]
8136 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8137 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
8138 ; GFX12-SDAG-NEXT:    s_endpgm
8140 ; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_bc_i64:
8141 ; GFX12-GISEL:       ; %bb.0:
8142 ; GFX12-GISEL-NEXT:    s_clause 0x1
8143 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8144 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8145 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
8146 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
8147 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
8148 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
8149 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8150 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[0,1]
8151 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
8152 ; GFX12-GISEL-NEXT:    s_endpgm
8153   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
8154   %tidx_i64 = zext i32 %tidx to i64
8155   %undef = freeze i64 poison
8156   %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %undef, i64 %tidx_i64, i32 %src1, i32 %src2, i1 false, i1 true)
8157   store i64 %v, ptr addrspace(1) %out
8158   ret void
8161 define amdgpu_kernel void @v_permlanex16_b32_i_tid_bc_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
8162 ; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_bc_f64:
8163 ; GFX10-SDAG:       ; %bb.0:
8164 ; GFX10-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
8165 ; GFX10-SDAG-NEXT:    s_clause 0x1
8166 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
8167 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
8168 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
8169 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
8170 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[0,1]
8171 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8172 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
8173 ; GFX10-SDAG-NEXT:    s_endpgm
8175 ; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_bc_f64:
8176 ; GFX10-GISEL:       ; %bb.0:
8177 ; GFX10-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
8178 ; GFX10-GISEL-NEXT:    s_clause 0x1
8179 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
8180 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
8181 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
8182 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
8183 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8184 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[0,1]
8185 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
8186 ; GFX10-GISEL-NEXT:    s_endpgm
8188 ; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_bc_f64:
8189 ; GFX11-SDAG:       ; %bb.0:
8190 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
8191 ; GFX11-SDAG-NEXT:    s_clause 0x1
8192 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8193 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8194 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
8195 ; GFX11-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
8196 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
8197 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
8198 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[0,1]
8199 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8200 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
8201 ; GFX11-SDAG-NEXT:    s_endpgm
8203 ; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_bc_f64:
8204 ; GFX11-GISEL:       ; %bb.0:
8205 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
8206 ; GFX11-GISEL-NEXT:    s_clause 0x1
8207 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8208 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8209 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
8210 ; GFX11-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
8211 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
8212 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
8213 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8214 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[0,1]
8215 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
8216 ; GFX11-GISEL-NEXT:    s_endpgm
8218 ; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_bc_f64:
8219 ; GFX12-SDAG:       ; %bb.0:
8220 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
8221 ; GFX12-SDAG-NEXT:    s_clause 0x1
8222 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8223 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8224 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
8225 ; GFX12-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
8226 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
8227 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
8228 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[0,1]
8229 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8230 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
8231 ; GFX12-SDAG-NEXT:    s_endpgm
8233 ; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_bc_f64:
8234 ; GFX12-GISEL:       ; %bb.0:
8235 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
8236 ; GFX12-GISEL-NEXT:    s_clause 0x1
8237 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8238 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8239 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
8240 ; GFX12-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
8241 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
8242 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
8243 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[0,1]
8244 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[0,1]
8245 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
8246 ; GFX12-GISEL-NEXT:    s_endpgm
8247   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
8248   %tidx_f32 = bitcast i32 %tidx to float
8249   %tidx_f64 = fpext float %tidx_f32 to double
8250   %undef = freeze double poison
8251   %v = call double @llvm.amdgcn.permlanex16.f64(double %undef, double %tidx_f64, i32 %src1, i32 %src2, i1 false, i1 true)
8252   store double %v, ptr addrspace(1) %out
8253   ret void
8256 define amdgpu_kernel void @v_permlanex16_b32_i_tid_fi_bc_i32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
8257 ; GFX10-LABEL: v_permlanex16_b32_i_tid_fi_bc_i32:
8258 ; GFX10:       ; %bb.0:
8259 ; GFX10-NEXT:    s_clause 0x1
8260 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
8261 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
8262 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
8263 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
8264 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8265 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
8266 ; GFX10-NEXT:    s_endpgm
8268 ; GFX11-LABEL: v_permlanex16_b32_i_tid_fi_bc_i32:
8269 ; GFX11:       ; %bb.0:
8270 ; GFX11-NEXT:    s_clause 0x1
8271 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8272 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8273 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
8274 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
8275 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8276 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8277 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
8278 ; GFX11-NEXT:    s_endpgm
8280 ; GFX12-LABEL: v_permlanex16_b32_i_tid_fi_bc_i32:
8281 ; GFX12:       ; %bb.0:
8282 ; GFX12-NEXT:    s_clause 0x1
8283 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8284 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8285 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
8286 ; GFX12-NEXT:    s_wait_kmcnt 0x0
8287 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8288 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8289 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
8290 ; GFX12-NEXT:    s_endpgm
8291   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
8292   %undef = freeze i32 poison
8293   %v = call i32 @llvm.amdgcn.permlanex16.i32(i32 %undef, i32 %tidx, i32 %src1, i32 %src2, i1 true, i1 true)
8294   store i32 %v, ptr addrspace(1) %out
8295   ret void
8298 define amdgpu_kernel void @v_permlanex16_b32_i_tid_fi_bc_f32(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
8299 ; GFX10-LABEL: v_permlanex16_b32_i_tid_fi_bc_f32:
8300 ; GFX10:       ; %bb.0:
8301 ; GFX10-NEXT:    s_clause 0x1
8302 ; GFX10-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
8303 ; GFX10-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
8304 ; GFX10-NEXT:    v_mov_b32_e32 v1, 0
8305 ; GFX10-NEXT:    s_waitcnt lgkmcnt(0)
8306 ; GFX10-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8307 ; GFX10-NEXT:    global_store_dword v1, v0, s[2:3]
8308 ; GFX10-NEXT:    s_endpgm
8310 ; GFX11-LABEL: v_permlanex16_b32_i_tid_fi_bc_f32:
8311 ; GFX11:       ; %bb.0:
8312 ; GFX11-NEXT:    s_clause 0x1
8313 ; GFX11-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8314 ; GFX11-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8315 ; GFX11-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
8316 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
8317 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8318 ; GFX11-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8319 ; GFX11-NEXT:    global_store_b32 v1, v0, s[2:3]
8320 ; GFX11-NEXT:    s_endpgm
8322 ; GFX12-LABEL: v_permlanex16_b32_i_tid_fi_bc_f32:
8323 ; GFX12:       ; %bb.0:
8324 ; GFX12-NEXT:    s_clause 0x1
8325 ; GFX12-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8326 ; GFX12-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8327 ; GFX12-NEXT:    v_dual_mov_b32 v1, 0 :: v_dual_and_b32 v0, 0x3ff, v0
8328 ; GFX12-NEXT:    s_wait_kmcnt 0x0
8329 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8330 ; GFX12-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8331 ; GFX12-NEXT:    global_store_b32 v1, v0, s[2:3]
8332 ; GFX12-NEXT:    s_endpgm
8333   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
8334   %tidx_f32 = bitcast i32 %tidx to float
8335   %undef = freeze float poison
8336   %v = call float @llvm.amdgcn.permlanex16.f32(float %undef, float %tidx_f32, i32 %src1, i32 %src2, i1 true, i1 true)
8337   store float %v, ptr addrspace(1) %out
8338   ret void
8341 define amdgpu_kernel void @v_permlanex16_b32_i_tid_fi_bc_i64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
8342 ; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_bc_i64:
8343 ; GFX10-SDAG:       ; %bb.0:
8344 ; GFX10-SDAG-NEXT:    s_clause 0x1
8345 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
8346 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
8347 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
8348 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
8349 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,1]
8350 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8351 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
8352 ; GFX10-SDAG-NEXT:    s_endpgm
8354 ; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_bc_i64:
8355 ; GFX10-GISEL:       ; %bb.0:
8356 ; GFX10-GISEL-NEXT:    s_clause 0x1
8357 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
8358 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
8359 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
8360 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
8361 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8362 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,1]
8363 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
8364 ; GFX10-GISEL-NEXT:    s_endpgm
8366 ; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_bc_i64:
8367 ; GFX11-SDAG:       ; %bb.0:
8368 ; GFX11-SDAG-NEXT:    s_clause 0x1
8369 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8370 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8371 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
8372 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
8373 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
8374 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
8375 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,1]
8376 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8377 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
8378 ; GFX11-SDAG-NEXT:    s_endpgm
8380 ; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_bc_i64:
8381 ; GFX11-GISEL:       ; %bb.0:
8382 ; GFX11-GISEL-NEXT:    s_clause 0x1
8383 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8384 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8385 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
8386 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
8387 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
8388 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
8389 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8390 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,1]
8391 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
8392 ; GFX11-GISEL-NEXT:    s_endpgm
8394 ; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_bc_i64:
8395 ; GFX12-SDAG:       ; %bb.0:
8396 ; GFX12-SDAG-NEXT:    s_clause 0x1
8397 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8398 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8399 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
8400 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
8401 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
8402 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
8403 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,1]
8404 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8405 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
8406 ; GFX12-SDAG-NEXT:    s_endpgm
8408 ; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_bc_i64:
8409 ; GFX12-GISEL:       ; %bb.0:
8410 ; GFX12-GISEL-NEXT:    s_clause 0x1
8411 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8412 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8413 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
8414 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
8415 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
8416 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
8417 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8418 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v2, s0, s1 op_sel:[1,1]
8419 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
8420 ; GFX12-GISEL-NEXT:    s_endpgm
8421   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
8422   %tidx_i64 = zext i32 %tidx to i64
8423   %undef = freeze i64 poison
8424   %v = call i64 @llvm.amdgcn.permlanex16.i64(i64 %undef, i64 %tidx_i64, i32 %src1, i32 %src2, i1 true, i1 true)
8425   store i64 %v, ptr addrspace(1) %out
8426   ret void
8429 define amdgpu_kernel void @v_permlanex16_b32_i_tid_fi_bc_f64(ptr addrspace(1) %out, i32 %src0, i32 %src1, i32 %src2) {
8430 ; GFX10-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_bc_f64:
8431 ; GFX10-SDAG:       ; %bb.0:
8432 ; GFX10-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
8433 ; GFX10-SDAG-NEXT:    s_clause 0x1
8434 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
8435 ; GFX10-SDAG-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
8436 ; GFX10-SDAG-NEXT:    v_mov_b32_e32 v2, 0
8437 ; GFX10-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
8438 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,1]
8439 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8440 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
8441 ; GFX10-SDAG-NEXT:    s_endpgm
8443 ; GFX10-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_bc_f64:
8444 ; GFX10-GISEL:       ; %bb.0:
8445 ; GFX10-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
8446 ; GFX10-GISEL-NEXT:    s_clause 0x1
8447 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[0:1], s[4:5], 0x30
8448 ; GFX10-GISEL-NEXT:    s_load_dwordx2 s[2:3], s[4:5], 0x24
8449 ; GFX10-GISEL-NEXT:    v_mov_b32_e32 v2, 0
8450 ; GFX10-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
8451 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8452 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,1]
8453 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v2, v[0:1], s[2:3]
8454 ; GFX10-GISEL-NEXT:    s_endpgm
8456 ; GFX11-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_bc_f64:
8457 ; GFX11-SDAG:       ; %bb.0:
8458 ; GFX11-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
8459 ; GFX11-SDAG-NEXT:    s_clause 0x1
8460 ; GFX11-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8461 ; GFX11-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8462 ; GFX11-SDAG-NEXT:    v_mov_b32_e32 v2, 0
8463 ; GFX11-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
8464 ; GFX11-SDAG-NEXT:    s_waitcnt lgkmcnt(0)
8465 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
8466 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,1]
8467 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8468 ; GFX11-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
8469 ; GFX11-SDAG-NEXT:    s_endpgm
8471 ; GFX11-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_bc_f64:
8472 ; GFX11-GISEL:       ; %bb.0:
8473 ; GFX11-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
8474 ; GFX11-GISEL-NEXT:    s_clause 0x1
8475 ; GFX11-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8476 ; GFX11-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8477 ; GFX11-GISEL-NEXT:    v_mov_b32_e32 v2, 0
8478 ; GFX11-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
8479 ; GFX11-GISEL-NEXT:    s_waitcnt lgkmcnt(0)
8480 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
8481 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8482 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,1]
8483 ; GFX11-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
8484 ; GFX11-GISEL-NEXT:    s_endpgm
8486 ; GFX12-SDAG-LABEL: v_permlanex16_b32_i_tid_fi_bc_f64:
8487 ; GFX12-SDAG:       ; %bb.0:
8488 ; GFX12-SDAG-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
8489 ; GFX12-SDAG-NEXT:    s_clause 0x1
8490 ; GFX12-SDAG-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8491 ; GFX12-SDAG-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8492 ; GFX12-SDAG-NEXT:    v_mov_b32_e32 v2, 0
8493 ; GFX12-SDAG-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
8494 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
8495 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
8496 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,1]
8497 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8498 ; GFX12-SDAG-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
8499 ; GFX12-SDAG-NEXT:    s_endpgm
8501 ; GFX12-GISEL-LABEL: v_permlanex16_b32_i_tid_fi_bc_f64:
8502 ; GFX12-GISEL:       ; %bb.0:
8503 ; GFX12-GISEL-NEXT:    v_and_b32_e32 v0, 0x3ff, v0
8504 ; GFX12-GISEL-NEXT:    s_clause 0x1
8505 ; GFX12-GISEL-NEXT:    s_load_b64 s[0:1], s[4:5], 0x30
8506 ; GFX12-GISEL-NEXT:    s_load_b64 s[2:3], s[4:5], 0x24
8507 ; GFX12-GISEL-NEXT:    v_mov_b32_e32 v2, 0
8508 ; GFX12-GISEL-NEXT:    v_cvt_f64_f32_e32 v[0:1], v0
8509 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
8510 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1) | instskip(NEXT) | instid1(VALU_DEP_2)
8511 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v0, v0, s0, s1 op_sel:[1,1]
8512 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v1, v1, s0, s1 op_sel:[1,1]
8513 ; GFX12-GISEL-NEXT:    global_store_b64 v2, v[0:1], s[2:3]
8514 ; GFX12-GISEL-NEXT:    s_endpgm
8515   %tidx = call i32 @llvm.amdgcn.workitem.id.x()
8516   %tidx_f32 = bitcast i32 %tidx to float
8517   %tidx_f64 = fpext float %tidx_f32 to double
8518   %undef = freeze double poison
8519   %v = call double @llvm.amdgcn.permlanex16.f64(double %undef, double %tidx_f64, i32 %src1, i32 %src2, i1 true, i1 true)
8520   store double %v, ptr addrspace(1) %out
8521   ret void
8524 define void @v_permlane16_half(ptr addrspace(1) %out, half %src0, i32 %src1, i32 %src2) {
8525 ; GFX10-LABEL: v_permlane16_half:
8526 ; GFX10:       ; %bb.0:
8527 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8528 ; GFX10-NEXT:    v_readfirstlane_b32 s4, v3
8529 ; GFX10-NEXT:    v_readfirstlane_b32 s5, v4
8530 ; GFX10-NEXT:    v_permlane16_b32 v2, v2, s4, s5
8531 ; GFX10-NEXT:    global_store_short v[0:1], v2, off
8532 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8534 ; GFX11-LABEL: v_permlane16_half:
8535 ; GFX11:       ; %bb.0:
8536 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8537 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v3
8538 ; GFX11-NEXT:    v_readfirstlane_b32 s1, v4
8539 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8540 ; GFX11-NEXT:    v_permlane16_b32 v2, v2, s0, s1
8541 ; GFX11-NEXT:    global_store_b16 v[0:1], v2, off
8542 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8544 ; GFX12-LABEL: v_permlane16_half:
8545 ; GFX12:       ; %bb.0:
8546 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
8547 ; GFX12-NEXT:    s_wait_expcnt 0x0
8548 ; GFX12-NEXT:    s_wait_samplecnt 0x0
8549 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
8550 ; GFX12-NEXT:    s_wait_kmcnt 0x0
8551 ; GFX12-NEXT:    v_readfirstlane_b32 s0, v3
8552 ; GFX12-NEXT:    v_readfirstlane_b32 s1, v4
8553 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8554 ; GFX12-NEXT:    v_permlane16_b32 v2, v2, s0, s1
8555 ; GFX12-NEXT:    global_store_b16 v[0:1], v2, off
8556 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
8557   %v = call half @llvm.amdgcn.permlane16.f16(half %src0, half %src0, i32 %src1, i32 %src2, i1 false, i1 false)
8558   store half %v, ptr addrspace(1) %out
8559   ret void
8562 define void @v_permlanex16_half(ptr addrspace(1) %out, half %src0, i32 %src1, i32 %src2) {
8563 ; GFX10-LABEL: v_permlanex16_half:
8564 ; GFX10:       ; %bb.0:
8565 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8566 ; GFX10-NEXT:    v_readfirstlane_b32 s4, v3
8567 ; GFX10-NEXT:    v_readfirstlane_b32 s5, v4
8568 ; GFX10-NEXT:    v_permlanex16_b32 v2, v2, s4, s5
8569 ; GFX10-NEXT:    global_store_short v[0:1], v2, off
8570 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8572 ; GFX11-LABEL: v_permlanex16_half:
8573 ; GFX11:       ; %bb.0:
8574 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8575 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v3
8576 ; GFX11-NEXT:    v_readfirstlane_b32 s1, v4
8577 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8578 ; GFX11-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
8579 ; GFX11-NEXT:    global_store_b16 v[0:1], v2, off
8580 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8582 ; GFX12-LABEL: v_permlanex16_half:
8583 ; GFX12:       ; %bb.0:
8584 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
8585 ; GFX12-NEXT:    s_wait_expcnt 0x0
8586 ; GFX12-NEXT:    s_wait_samplecnt 0x0
8587 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
8588 ; GFX12-NEXT:    s_wait_kmcnt 0x0
8589 ; GFX12-NEXT:    v_readfirstlane_b32 s0, v3
8590 ; GFX12-NEXT:    v_readfirstlane_b32 s1, v4
8591 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8592 ; GFX12-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
8593 ; GFX12-NEXT:    global_store_b16 v[0:1], v2, off
8594 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
8595   %v = call half @llvm.amdgcn.permlanex16.f16(half %src0, half %src0, i32 %src1, i32 %src2, i1 false, i1 false)
8596   store half %v, ptr addrspace(1) %out
8597   ret void
8600 define void @v_permlane16_bfloat(ptr addrspace(1) %out, bfloat %src0, i32 %src1, i32 %src2) {
8601 ; GFX10-LABEL: v_permlane16_bfloat:
8602 ; GFX10:       ; %bb.0:
8603 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8604 ; GFX10-NEXT:    v_readfirstlane_b32 s4, v3
8605 ; GFX10-NEXT:    v_readfirstlane_b32 s5, v4
8606 ; GFX10-NEXT:    v_permlane16_b32 v2, v2, s4, s5
8607 ; GFX10-NEXT:    global_store_short v[0:1], v2, off
8608 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8610 ; GFX11-LABEL: v_permlane16_bfloat:
8611 ; GFX11:       ; %bb.0:
8612 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8613 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v3
8614 ; GFX11-NEXT:    v_readfirstlane_b32 s1, v4
8615 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8616 ; GFX11-NEXT:    v_permlane16_b32 v2, v2, s0, s1
8617 ; GFX11-NEXT:    global_store_b16 v[0:1], v2, off
8618 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8620 ; GFX12-LABEL: v_permlane16_bfloat:
8621 ; GFX12:       ; %bb.0:
8622 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
8623 ; GFX12-NEXT:    s_wait_expcnt 0x0
8624 ; GFX12-NEXT:    s_wait_samplecnt 0x0
8625 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
8626 ; GFX12-NEXT:    s_wait_kmcnt 0x0
8627 ; GFX12-NEXT:    v_readfirstlane_b32 s0, v3
8628 ; GFX12-NEXT:    v_readfirstlane_b32 s1, v4
8629 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8630 ; GFX12-NEXT:    v_permlane16_b32 v2, v2, s0, s1
8631 ; GFX12-NEXT:    global_store_b16 v[0:1], v2, off
8632 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
8633   %v = call bfloat @llvm.amdgcn.permlane16.f16(bfloat %src0, bfloat %src0, i32 %src1, i32 %src2, i1 false, i1 false)
8634   store bfloat %v, ptr addrspace(1) %out
8635   ret void
8638 define void @v_permlanex16_bfloat(ptr addrspace(1) %out, bfloat %src0, i32 %src1, i32 %src2) {
8639 ; GFX10-LABEL: v_permlanex16_bfloat:
8640 ; GFX10:       ; %bb.0:
8641 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8642 ; GFX10-NEXT:    v_readfirstlane_b32 s4, v3
8643 ; GFX10-NEXT:    v_readfirstlane_b32 s5, v4
8644 ; GFX10-NEXT:    v_permlanex16_b32 v2, v2, s4, s5
8645 ; GFX10-NEXT:    global_store_short v[0:1], v2, off
8646 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8648 ; GFX11-LABEL: v_permlanex16_bfloat:
8649 ; GFX11:       ; %bb.0:
8650 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8651 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v3
8652 ; GFX11-NEXT:    v_readfirstlane_b32 s1, v4
8653 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8654 ; GFX11-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
8655 ; GFX11-NEXT:    global_store_b16 v[0:1], v2, off
8656 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8658 ; GFX12-LABEL: v_permlanex16_bfloat:
8659 ; GFX12:       ; %bb.0:
8660 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
8661 ; GFX12-NEXT:    s_wait_expcnt 0x0
8662 ; GFX12-NEXT:    s_wait_samplecnt 0x0
8663 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
8664 ; GFX12-NEXT:    s_wait_kmcnt 0x0
8665 ; GFX12-NEXT:    v_readfirstlane_b32 s0, v3
8666 ; GFX12-NEXT:    v_readfirstlane_b32 s1, v4
8667 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8668 ; GFX12-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
8669 ; GFX12-NEXT:    global_store_b16 v[0:1], v2, off
8670 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
8671   %v = call bfloat @llvm.amdgcn.permlanex16.f16(bfloat %src0, bfloat %src0, i32 %src1, i32 %src2, i1 false, i1 false)
8672   store bfloat %v, ptr addrspace(1) %out
8673   ret void
8676 define void @v_permlane16_i16(ptr addrspace(1) %out, i16 %src0, i32 %src1, i32 %src2) {
8677 ; GFX10-LABEL: v_permlane16_i16:
8678 ; GFX10:       ; %bb.0:
8679 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8680 ; GFX10-NEXT:    v_readfirstlane_b32 s4, v3
8681 ; GFX10-NEXT:    v_readfirstlane_b32 s5, v4
8682 ; GFX10-NEXT:    v_permlane16_b32 v2, v2, s4, s5
8683 ; GFX10-NEXT:    global_store_short v[0:1], v2, off
8684 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8686 ; GFX11-LABEL: v_permlane16_i16:
8687 ; GFX11:       ; %bb.0:
8688 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8689 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v3
8690 ; GFX11-NEXT:    v_readfirstlane_b32 s1, v4
8691 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8692 ; GFX11-NEXT:    v_permlane16_b32 v2, v2, s0, s1
8693 ; GFX11-NEXT:    global_store_b16 v[0:1], v2, off
8694 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8696 ; GFX12-LABEL: v_permlane16_i16:
8697 ; GFX12:       ; %bb.0:
8698 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
8699 ; GFX12-NEXT:    s_wait_expcnt 0x0
8700 ; GFX12-NEXT:    s_wait_samplecnt 0x0
8701 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
8702 ; GFX12-NEXT:    s_wait_kmcnt 0x0
8703 ; GFX12-NEXT:    v_readfirstlane_b32 s0, v3
8704 ; GFX12-NEXT:    v_readfirstlane_b32 s1, v4
8705 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8706 ; GFX12-NEXT:    v_permlane16_b32 v2, v2, s0, s1
8707 ; GFX12-NEXT:    global_store_b16 v[0:1], v2, off
8708 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
8709   %v = call i16 @llvm.amdgcn.permlane16.i16(i16 %src0, i16 %src0, i32 %src1, i32 %src2, i1 false, i1 false)
8710   store i16 %v, ptr addrspace(1) %out
8711   ret void
8714 define void @v_permlanex16_i16(ptr addrspace(1) %out, i16 %src0, i32 %src1, i32 %src2) {
8715 ; GFX10-LABEL: v_permlanex16_i16:
8716 ; GFX10:       ; %bb.0:
8717 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8718 ; GFX10-NEXT:    v_readfirstlane_b32 s4, v3
8719 ; GFX10-NEXT:    v_readfirstlane_b32 s5, v4
8720 ; GFX10-NEXT:    v_permlanex16_b32 v2, v2, s4, s5
8721 ; GFX10-NEXT:    global_store_short v[0:1], v2, off
8722 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8724 ; GFX11-LABEL: v_permlanex16_i16:
8725 ; GFX11:       ; %bb.0:
8726 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8727 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v3
8728 ; GFX11-NEXT:    v_readfirstlane_b32 s1, v4
8729 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8730 ; GFX11-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
8731 ; GFX11-NEXT:    global_store_b16 v[0:1], v2, off
8732 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8734 ; GFX12-LABEL: v_permlanex16_i16:
8735 ; GFX12:       ; %bb.0:
8736 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
8737 ; GFX12-NEXT:    s_wait_expcnt 0x0
8738 ; GFX12-NEXT:    s_wait_samplecnt 0x0
8739 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
8740 ; GFX12-NEXT:    s_wait_kmcnt 0x0
8741 ; GFX12-NEXT:    v_readfirstlane_b32 s0, v3
8742 ; GFX12-NEXT:    v_readfirstlane_b32 s1, v4
8743 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8744 ; GFX12-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
8745 ; GFX12-NEXT:    global_store_b16 v[0:1], v2, off
8746 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
8747   %v = call i16 @llvm.amdgcn.permlanex16.i16(i16 %src0, i16 %src0, i32 %src1, i32 %src2, i1 false, i1 false)
8748   store i16 %v, ptr addrspace(1) %out
8749   ret void
8752 define void @v_permlane16_v2f16(ptr addrspace(1) %out, <2 x half> %src0, i32 %src1, i32 %src2) {
8753 ; GFX10-LABEL: v_permlane16_v2f16:
8754 ; GFX10:       ; %bb.0:
8755 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8756 ; GFX10-NEXT:    v_readfirstlane_b32 s4, v3
8757 ; GFX10-NEXT:    v_readfirstlane_b32 s5, v4
8758 ; GFX10-NEXT:    v_permlane16_b32 v2, v2, s4, s5
8759 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
8760 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8762 ; GFX11-LABEL: v_permlane16_v2f16:
8763 ; GFX11:       ; %bb.0:
8764 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8765 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v3
8766 ; GFX11-NEXT:    v_readfirstlane_b32 s1, v4
8767 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8768 ; GFX11-NEXT:    v_permlane16_b32 v2, v2, s0, s1
8769 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off
8770 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8772 ; GFX12-LABEL: v_permlane16_v2f16:
8773 ; GFX12:       ; %bb.0:
8774 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
8775 ; GFX12-NEXT:    s_wait_expcnt 0x0
8776 ; GFX12-NEXT:    s_wait_samplecnt 0x0
8777 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
8778 ; GFX12-NEXT:    s_wait_kmcnt 0x0
8779 ; GFX12-NEXT:    v_readfirstlane_b32 s0, v3
8780 ; GFX12-NEXT:    v_readfirstlane_b32 s1, v4
8781 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8782 ; GFX12-NEXT:    v_permlane16_b32 v2, v2, s0, s1
8783 ; GFX12-NEXT:    global_store_b32 v[0:1], v2, off
8784 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
8785   %v = call <2 x half> @llvm.amdgcn.permlane16.v2f16(<2 x half> %src0, <2 x half> %src0, i32 %src1, i32 %src2, i1 false, i1 false)
8786   store <2 x half> %v, ptr addrspace(1) %out
8787   ret void
8790 define void @v_permlanex16_v2f16(ptr addrspace(1) %out, <2 x half> %src0, i32 %src1, i32 %src2) {
8791 ; GFX10-LABEL: v_permlanex16_v2f16:
8792 ; GFX10:       ; %bb.0:
8793 ; GFX10-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8794 ; GFX10-NEXT:    v_readfirstlane_b32 s4, v3
8795 ; GFX10-NEXT:    v_readfirstlane_b32 s5, v4
8796 ; GFX10-NEXT:    v_permlanex16_b32 v2, v2, s4, s5
8797 ; GFX10-NEXT:    global_store_dword v[0:1], v2, off
8798 ; GFX10-NEXT:    s_setpc_b64 s[30:31]
8800 ; GFX11-LABEL: v_permlanex16_v2f16:
8801 ; GFX11:       ; %bb.0:
8802 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8803 ; GFX11-NEXT:    v_readfirstlane_b32 s0, v3
8804 ; GFX11-NEXT:    v_readfirstlane_b32 s1, v4
8805 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8806 ; GFX11-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
8807 ; GFX11-NEXT:    global_store_b32 v[0:1], v2, off
8808 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
8810 ; GFX12-LABEL: v_permlanex16_v2f16:
8811 ; GFX12:       ; %bb.0:
8812 ; GFX12-NEXT:    s_wait_loadcnt_dscnt 0x0
8813 ; GFX12-NEXT:    s_wait_expcnt 0x0
8814 ; GFX12-NEXT:    s_wait_samplecnt 0x0
8815 ; GFX12-NEXT:    s_wait_bvhcnt 0x0
8816 ; GFX12-NEXT:    s_wait_kmcnt 0x0
8817 ; GFX12-NEXT:    v_readfirstlane_b32 s0, v3
8818 ; GFX12-NEXT:    v_readfirstlane_b32 s1, v4
8819 ; GFX12-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8820 ; GFX12-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
8821 ; GFX12-NEXT:    global_store_b32 v[0:1], v2, off
8822 ; GFX12-NEXT:    s_setpc_b64 s[30:31]
8823   %v = call <2 x half> @llvm.amdgcn.permlanex16.v2f16(<2 x half> %src0, <2 x half> %src0, i32 %src1, i32 %src2, i1 false, i1 false)
8824   store <2 x half> %v, ptr addrspace(1) %out
8825   ret void
8828 define void @v_permlane16_v2f32(ptr addrspace(1) %out, <2 x float> %src0, i32 %src1, i32 %src2) {
8829 ; GFX10-SDAG-LABEL: v_permlane16_v2f32:
8830 ; GFX10-SDAG:       ; %bb.0:
8831 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8832 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v4
8833 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s5, v5
8834 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v3, v3, s4, s5
8835 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v2, v2, s4, s5
8836 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v[0:1], v[2:3], off
8837 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
8839 ; GFX10-GISEL-LABEL: v_permlane16_v2f32:
8840 ; GFX10-GISEL:       ; %bb.0:
8841 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8842 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v4
8843 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s5, v5
8844 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v2, v2, s4, s5
8845 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v3, v3, s4, s5
8846 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v[0:1], v[2:3], off
8847 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
8849 ; GFX11-SDAG-LABEL: v_permlane16_v2f32:
8850 ; GFX11-SDAG:       ; %bb.0:
8851 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8852 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s0, v4
8853 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s1, v5
8854 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8855 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v3, v3, s0, s1
8856 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v2, v2, s0, s1
8857 ; GFX11-SDAG-NEXT:    global_store_b64 v[0:1], v[2:3], off
8858 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
8860 ; GFX11-GISEL-LABEL: v_permlane16_v2f32:
8861 ; GFX11-GISEL:       ; %bb.0:
8862 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8863 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s0, v4
8864 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s1, v5
8865 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8866 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v2, v2, s0, s1
8867 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v3, v3, s0, s1
8868 ; GFX11-GISEL-NEXT:    global_store_b64 v[0:1], v[2:3], off
8869 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
8871 ; GFX12-SDAG-LABEL: v_permlane16_v2f32:
8872 ; GFX12-SDAG:       ; %bb.0:
8873 ; GFX12-SDAG-NEXT:    s_wait_loadcnt_dscnt 0x0
8874 ; GFX12-SDAG-NEXT:    s_wait_expcnt 0x0
8875 ; GFX12-SDAG-NEXT:    s_wait_samplecnt 0x0
8876 ; GFX12-SDAG-NEXT:    s_wait_bvhcnt 0x0
8877 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
8878 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s0, v4
8879 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s1, v5
8880 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8881 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v3, v3, s0, s1
8882 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v2, v2, s0, s1
8883 ; GFX12-SDAG-NEXT:    global_store_b64 v[0:1], v[2:3], off
8884 ; GFX12-SDAG-NEXT:    s_setpc_b64 s[30:31]
8886 ; GFX12-GISEL-LABEL: v_permlane16_v2f32:
8887 ; GFX12-GISEL:       ; %bb.0:
8888 ; GFX12-GISEL-NEXT:    s_wait_loadcnt_dscnt 0x0
8889 ; GFX12-GISEL-NEXT:    s_wait_expcnt 0x0
8890 ; GFX12-GISEL-NEXT:    s_wait_samplecnt 0x0
8891 ; GFX12-GISEL-NEXT:    s_wait_bvhcnt 0x0
8892 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
8893 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s0, v4
8894 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s1, v5
8895 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8896 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v2, v2, s0, s1
8897 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v3, v3, s0, s1
8898 ; GFX12-GISEL-NEXT:    global_store_b64 v[0:1], v[2:3], off
8899 ; GFX12-GISEL-NEXT:    s_setpc_b64 s[30:31]
8900   %v = call <2 x float> @llvm.amdgcn.permlane16.v2f32(<2 x float> %src0, <2 x float> %src0, i32 %src1, i32 %src2, i1 false, i1 false)
8901   store <2 x float> %v, ptr addrspace(1) %out
8902   ret void
8905 define void @v_permlanex16_v2f32(ptr addrspace(1) %out, <2 x float> %src0, i32 %src1, i32 %src2) {
8906 ; GFX10-SDAG-LABEL: v_permlanex16_v2f32:
8907 ; GFX10-SDAG:       ; %bb.0:
8908 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8909 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v4
8910 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s5, v5
8911 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v3, v3, s4, s5
8912 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v2, v2, s4, s5
8913 ; GFX10-SDAG-NEXT:    global_store_dwordx2 v[0:1], v[2:3], off
8914 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
8916 ; GFX10-GISEL-LABEL: v_permlanex16_v2f32:
8917 ; GFX10-GISEL:       ; %bb.0:
8918 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8919 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v4
8920 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s5, v5
8921 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v2, v2, s4, s5
8922 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v3, v3, s4, s5
8923 ; GFX10-GISEL-NEXT:    global_store_dwordx2 v[0:1], v[2:3], off
8924 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
8926 ; GFX11-SDAG-LABEL: v_permlanex16_v2f32:
8927 ; GFX11-SDAG:       ; %bb.0:
8928 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8929 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s0, v4
8930 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s1, v5
8931 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8932 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v3, v3, s0, s1
8933 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
8934 ; GFX11-SDAG-NEXT:    global_store_b64 v[0:1], v[2:3], off
8935 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
8937 ; GFX11-GISEL-LABEL: v_permlanex16_v2f32:
8938 ; GFX11-GISEL:       ; %bb.0:
8939 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8940 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s0, v4
8941 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s1, v5
8942 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8943 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
8944 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v3, v3, s0, s1
8945 ; GFX11-GISEL-NEXT:    global_store_b64 v[0:1], v[2:3], off
8946 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
8948 ; GFX12-SDAG-LABEL: v_permlanex16_v2f32:
8949 ; GFX12-SDAG:       ; %bb.0:
8950 ; GFX12-SDAG-NEXT:    s_wait_loadcnt_dscnt 0x0
8951 ; GFX12-SDAG-NEXT:    s_wait_expcnt 0x0
8952 ; GFX12-SDAG-NEXT:    s_wait_samplecnt 0x0
8953 ; GFX12-SDAG-NEXT:    s_wait_bvhcnt 0x0
8954 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
8955 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s0, v4
8956 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s1, v5
8957 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8958 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v3, v3, s0, s1
8959 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
8960 ; GFX12-SDAG-NEXT:    global_store_b64 v[0:1], v[2:3], off
8961 ; GFX12-SDAG-NEXT:    s_setpc_b64 s[30:31]
8963 ; GFX12-GISEL-LABEL: v_permlanex16_v2f32:
8964 ; GFX12-GISEL:       ; %bb.0:
8965 ; GFX12-GISEL-NEXT:    s_wait_loadcnt_dscnt 0x0
8966 ; GFX12-GISEL-NEXT:    s_wait_expcnt 0x0
8967 ; GFX12-GISEL-NEXT:    s_wait_samplecnt 0x0
8968 ; GFX12-GISEL-NEXT:    s_wait_bvhcnt 0x0
8969 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
8970 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s0, v4
8971 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s1, v5
8972 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
8973 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
8974 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v3, v3, s0, s1
8975 ; GFX12-GISEL-NEXT:    global_store_b64 v[0:1], v[2:3], off
8976 ; GFX12-GISEL-NEXT:    s_setpc_b64 s[30:31]
8977   %v = call <2 x float> @llvm.amdgcn.permlanex16.v2f32(<2 x float> %src0, <2 x float> %src0, i32 %src1, i32 %src2, i1 false, i1 false)
8978   store <2 x float> %v, ptr addrspace(1) %out
8979   ret void
8982 define void @v_permlane16_v7i32(ptr addrspace(1) %out, <7 x i32> %src0, i32 %src1, i32 %src2) {
8983 ; GFX10-SDAG-LABEL: v_permlane16_v7i32:
8984 ; GFX10-SDAG:       ; %bb.0:
8985 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
8986 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v9
8987 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s5, v10
8988 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v8, v8, s4, s5
8989 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v7, v7, s4, s5
8990 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v6, v6, s4, s5
8991 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v5, v5, s4, s5
8992 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v4, v4, s4, s5
8993 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v3, v3, s4, s5
8994 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v2, v2, s4, s5
8995 ; GFX10-SDAG-NEXT:    global_store_dwordx3 v[0:1], v[6:8], off offset:16
8996 ; GFX10-SDAG-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
8997 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
8999 ; GFX10-GISEL-LABEL: v_permlane16_v7i32:
9000 ; GFX10-GISEL:       ; %bb.0:
9001 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9002 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v9
9003 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s5, v10
9004 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v2, v2, s4, s5
9005 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v3, v3, s4, s5
9006 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v4, v4, s4, s5
9007 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v5, v5, s4, s5
9008 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v6, v6, s4, s5
9009 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v7, v7, s4, s5
9010 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v8, v8, s4, s5
9011 ; GFX10-GISEL-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
9012 ; GFX10-GISEL-NEXT:    global_store_dwordx3 v[0:1], v[6:8], off offset:16
9013 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
9015 ; GFX11-SDAG-LABEL: v_permlane16_v7i32:
9016 ; GFX11-SDAG:       ; %bb.0:
9017 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9018 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s0, v9
9019 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s1, v10
9020 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9021 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v8, v8, s0, s1
9022 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v7, v7, s0, s1
9023 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v6, v6, s0, s1
9024 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v5, v5, s0, s1
9025 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v4, v4, s0, s1
9026 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v3, v3, s0, s1
9027 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v2, v2, s0, s1
9028 ; GFX11-SDAG-NEXT:    s_clause 0x1
9029 ; GFX11-SDAG-NEXT:    global_store_b96 v[0:1], v[6:8], off offset:16
9030 ; GFX11-SDAG-NEXT:    global_store_b128 v[0:1], v[2:5], off
9031 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
9033 ; GFX11-GISEL-LABEL: v_permlane16_v7i32:
9034 ; GFX11-GISEL:       ; %bb.0:
9035 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9036 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s0, v9
9037 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s1, v10
9038 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9039 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v2, v2, s0, s1
9040 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v3, v3, s0, s1
9041 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v4, v4, s0, s1
9042 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v5, v5, s0, s1
9043 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v6, v6, s0, s1
9044 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v7, v7, s0, s1
9045 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v8, v8, s0, s1
9046 ; GFX11-GISEL-NEXT:    s_clause 0x1
9047 ; GFX11-GISEL-NEXT:    global_store_b128 v[0:1], v[2:5], off
9048 ; GFX11-GISEL-NEXT:    global_store_b96 v[0:1], v[6:8], off offset:16
9049 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
9051 ; GFX12-SDAG-LABEL: v_permlane16_v7i32:
9052 ; GFX12-SDAG:       ; %bb.0:
9053 ; GFX12-SDAG-NEXT:    s_wait_loadcnt_dscnt 0x0
9054 ; GFX12-SDAG-NEXT:    s_wait_expcnt 0x0
9055 ; GFX12-SDAG-NEXT:    s_wait_samplecnt 0x0
9056 ; GFX12-SDAG-NEXT:    s_wait_bvhcnt 0x0
9057 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
9058 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s0, v9
9059 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s1, v10
9060 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9061 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v8, v8, s0, s1
9062 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v7, v7, s0, s1
9063 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v6, v6, s0, s1
9064 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v5, v5, s0, s1
9065 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v4, v4, s0, s1
9066 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v3, v3, s0, s1
9067 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v2, v2, s0, s1
9068 ; GFX12-SDAG-NEXT:    s_clause 0x1
9069 ; GFX12-SDAG-NEXT:    global_store_b96 v[0:1], v[6:8], off offset:16
9070 ; GFX12-SDAG-NEXT:    global_store_b128 v[0:1], v[2:5], off
9071 ; GFX12-SDAG-NEXT:    s_setpc_b64 s[30:31]
9073 ; GFX12-GISEL-LABEL: v_permlane16_v7i32:
9074 ; GFX12-GISEL:       ; %bb.0:
9075 ; GFX12-GISEL-NEXT:    s_wait_loadcnt_dscnt 0x0
9076 ; GFX12-GISEL-NEXT:    s_wait_expcnt 0x0
9077 ; GFX12-GISEL-NEXT:    s_wait_samplecnt 0x0
9078 ; GFX12-GISEL-NEXT:    s_wait_bvhcnt 0x0
9079 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
9080 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s0, v9
9081 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s1, v10
9082 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9083 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v2, v2, s0, s1
9084 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v3, v3, s0, s1
9085 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v4, v4, s0, s1
9086 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v5, v5, s0, s1
9087 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v6, v6, s0, s1
9088 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v7, v7, s0, s1
9089 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v8, v8, s0, s1
9090 ; GFX12-GISEL-NEXT:    s_clause 0x1
9091 ; GFX12-GISEL-NEXT:    global_store_b128 v[0:1], v[2:5], off
9092 ; GFX12-GISEL-NEXT:    global_store_b96 v[0:1], v[6:8], off offset:16
9093 ; GFX12-GISEL-NEXT:    s_setpc_b64 s[30:31]
9094   %v = call <7 x i32> @llvm.amdgcn.permlane16.v7i32(<7 x i32> %src0, <7 x i32> %src0, i32 %src1, i32 %src2, i1 false, i1 false)
9095   store <7 x i32> %v, ptr addrspace(1) %out
9096   ret void
9099 define void @v_permlanex16_v7i32(ptr addrspace(1) %out, <7 x i32> %src0, i32 %src1, i32 %src2) {
9100 ; GFX10-SDAG-LABEL: v_permlanex16_v7i32:
9101 ; GFX10-SDAG:       ; %bb.0:
9102 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9103 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v9
9104 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s5, v10
9105 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v8, v8, s4, s5
9106 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v7, v7, s4, s5
9107 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v6, v6, s4, s5
9108 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v5, v5, s4, s5
9109 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v4, v4, s4, s5
9110 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v3, v3, s4, s5
9111 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v2, v2, s4, s5
9112 ; GFX10-SDAG-NEXT:    global_store_dwordx3 v[0:1], v[6:8], off offset:16
9113 ; GFX10-SDAG-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
9114 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
9116 ; GFX10-GISEL-LABEL: v_permlanex16_v7i32:
9117 ; GFX10-GISEL:       ; %bb.0:
9118 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9119 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v9
9120 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s5, v10
9121 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v2, v2, s4, s5
9122 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v3, v3, s4, s5
9123 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v4, v4, s4, s5
9124 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v5, v5, s4, s5
9125 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v6, v6, s4, s5
9126 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v7, v7, s4, s5
9127 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v8, v8, s4, s5
9128 ; GFX10-GISEL-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
9129 ; GFX10-GISEL-NEXT:    global_store_dwordx3 v[0:1], v[6:8], off offset:16
9130 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
9132 ; GFX11-SDAG-LABEL: v_permlanex16_v7i32:
9133 ; GFX11-SDAG:       ; %bb.0:
9134 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9135 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s0, v9
9136 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s1, v10
9137 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9138 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v8, v8, s0, s1
9139 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v7, v7, s0, s1
9140 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v6, v6, s0, s1
9141 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v5, v5, s0, s1
9142 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v4, v4, s0, s1
9143 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v3, v3, s0, s1
9144 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
9145 ; GFX11-SDAG-NEXT:    s_clause 0x1
9146 ; GFX11-SDAG-NEXT:    global_store_b96 v[0:1], v[6:8], off offset:16
9147 ; GFX11-SDAG-NEXT:    global_store_b128 v[0:1], v[2:5], off
9148 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
9150 ; GFX11-GISEL-LABEL: v_permlanex16_v7i32:
9151 ; GFX11-GISEL:       ; %bb.0:
9152 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9153 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s0, v9
9154 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s1, v10
9155 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9156 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
9157 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v3, v3, s0, s1
9158 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v4, v4, s0, s1
9159 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v5, v5, s0, s1
9160 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v6, v6, s0, s1
9161 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v7, v7, s0, s1
9162 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v8, v8, s0, s1
9163 ; GFX11-GISEL-NEXT:    s_clause 0x1
9164 ; GFX11-GISEL-NEXT:    global_store_b128 v[0:1], v[2:5], off
9165 ; GFX11-GISEL-NEXT:    global_store_b96 v[0:1], v[6:8], off offset:16
9166 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
9168 ; GFX12-SDAG-LABEL: v_permlanex16_v7i32:
9169 ; GFX12-SDAG:       ; %bb.0:
9170 ; GFX12-SDAG-NEXT:    s_wait_loadcnt_dscnt 0x0
9171 ; GFX12-SDAG-NEXT:    s_wait_expcnt 0x0
9172 ; GFX12-SDAG-NEXT:    s_wait_samplecnt 0x0
9173 ; GFX12-SDAG-NEXT:    s_wait_bvhcnt 0x0
9174 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
9175 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s0, v9
9176 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s1, v10
9177 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9178 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v8, v8, s0, s1
9179 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v7, v7, s0, s1
9180 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v6, v6, s0, s1
9181 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v5, v5, s0, s1
9182 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v4, v4, s0, s1
9183 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v3, v3, s0, s1
9184 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
9185 ; GFX12-SDAG-NEXT:    s_clause 0x1
9186 ; GFX12-SDAG-NEXT:    global_store_b96 v[0:1], v[6:8], off offset:16
9187 ; GFX12-SDAG-NEXT:    global_store_b128 v[0:1], v[2:5], off
9188 ; GFX12-SDAG-NEXT:    s_setpc_b64 s[30:31]
9190 ; GFX12-GISEL-LABEL: v_permlanex16_v7i32:
9191 ; GFX12-GISEL:       ; %bb.0:
9192 ; GFX12-GISEL-NEXT:    s_wait_loadcnt_dscnt 0x0
9193 ; GFX12-GISEL-NEXT:    s_wait_expcnt 0x0
9194 ; GFX12-GISEL-NEXT:    s_wait_samplecnt 0x0
9195 ; GFX12-GISEL-NEXT:    s_wait_bvhcnt 0x0
9196 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
9197 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s0, v9
9198 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s1, v10
9199 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9200 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
9201 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v3, v3, s0, s1
9202 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v4, v4, s0, s1
9203 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v5, v5, s0, s1
9204 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v6, v6, s0, s1
9205 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v7, v7, s0, s1
9206 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v8, v8, s0, s1
9207 ; GFX12-GISEL-NEXT:    s_clause 0x1
9208 ; GFX12-GISEL-NEXT:    global_store_b128 v[0:1], v[2:5], off
9209 ; GFX12-GISEL-NEXT:    global_store_b96 v[0:1], v[6:8], off offset:16
9210 ; GFX12-GISEL-NEXT:    s_setpc_b64 s[30:31]
9211   %v = call <7 x i32> @llvm.amdgcn.permlanex16.v7i32(<7 x i32> %src0, <7 x i32> %src0, i32 %src1, i32 %src2, i1 false, i1 false)
9212   store <7 x i32> %v, ptr addrspace(1) %out
9213   ret void
9216 define void @v_permlane16_v8i16(ptr addrspace(1) %out, <8 x i16> %src0, i32 %src1, i32 %src2) {
9217 ; GFX10-SDAG-LABEL: v_permlane16_v8i16:
9218 ; GFX10-SDAG:       ; %bb.0:
9219 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9220 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v6
9221 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s5, v7
9222 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v5, v5, s4, s5
9223 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v4, v4, s4, s5
9224 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v3, v3, s4, s5
9225 ; GFX10-SDAG-NEXT:    v_permlane16_b32 v2, v2, s4, s5
9226 ; GFX10-SDAG-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
9227 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
9229 ; GFX10-GISEL-LABEL: v_permlane16_v8i16:
9230 ; GFX10-GISEL:       ; %bb.0:
9231 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9232 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v6
9233 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s5, v7
9234 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v2, v2, s4, s5
9235 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v3, v3, s4, s5
9236 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v4, v4, s4, s5
9237 ; GFX10-GISEL-NEXT:    v_permlane16_b32 v5, v5, s4, s5
9238 ; GFX10-GISEL-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
9239 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
9241 ; GFX11-SDAG-LABEL: v_permlane16_v8i16:
9242 ; GFX11-SDAG:       ; %bb.0:
9243 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9244 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s0, v6
9245 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s1, v7
9246 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9247 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v5, v5, s0, s1
9248 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v4, v4, s0, s1
9249 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v3, v3, s0, s1
9250 ; GFX11-SDAG-NEXT:    v_permlane16_b32 v2, v2, s0, s1
9251 ; GFX11-SDAG-NEXT:    global_store_b128 v[0:1], v[2:5], off
9252 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
9254 ; GFX11-GISEL-LABEL: v_permlane16_v8i16:
9255 ; GFX11-GISEL:       ; %bb.0:
9256 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9257 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s0, v6
9258 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s1, v7
9259 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9260 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v2, v2, s0, s1
9261 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v3, v3, s0, s1
9262 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v4, v4, s0, s1
9263 ; GFX11-GISEL-NEXT:    v_permlane16_b32 v5, v5, s0, s1
9264 ; GFX11-GISEL-NEXT:    global_store_b128 v[0:1], v[2:5], off
9265 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
9267 ; GFX12-SDAG-LABEL: v_permlane16_v8i16:
9268 ; GFX12-SDAG:       ; %bb.0:
9269 ; GFX12-SDAG-NEXT:    s_wait_loadcnt_dscnt 0x0
9270 ; GFX12-SDAG-NEXT:    s_wait_expcnt 0x0
9271 ; GFX12-SDAG-NEXT:    s_wait_samplecnt 0x0
9272 ; GFX12-SDAG-NEXT:    s_wait_bvhcnt 0x0
9273 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
9274 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s0, v6
9275 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s1, v7
9276 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9277 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v5, v5, s0, s1
9278 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v4, v4, s0, s1
9279 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v3, v3, s0, s1
9280 ; GFX12-SDAG-NEXT:    v_permlane16_b32 v2, v2, s0, s1
9281 ; GFX12-SDAG-NEXT:    global_store_b128 v[0:1], v[2:5], off
9282 ; GFX12-SDAG-NEXT:    s_setpc_b64 s[30:31]
9284 ; GFX12-GISEL-LABEL: v_permlane16_v8i16:
9285 ; GFX12-GISEL:       ; %bb.0:
9286 ; GFX12-GISEL-NEXT:    s_wait_loadcnt_dscnt 0x0
9287 ; GFX12-GISEL-NEXT:    s_wait_expcnt 0x0
9288 ; GFX12-GISEL-NEXT:    s_wait_samplecnt 0x0
9289 ; GFX12-GISEL-NEXT:    s_wait_bvhcnt 0x0
9290 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
9291 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s0, v6
9292 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s1, v7
9293 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9294 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v2, v2, s0, s1
9295 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v3, v3, s0, s1
9296 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v4, v4, s0, s1
9297 ; GFX12-GISEL-NEXT:    v_permlane16_b32 v5, v5, s0, s1
9298 ; GFX12-GISEL-NEXT:    global_store_b128 v[0:1], v[2:5], off
9299 ; GFX12-GISEL-NEXT:    s_setpc_b64 s[30:31]
9300   %v = call <8 x i16> @llvm.amdgcn.permlane16.v8i16(<8 x i16> %src0, <8 x i16> %src0, i32 %src1, i32 %src2, i1 false, i1 false)
9301   store <8 x i16> %v, ptr addrspace(1) %out
9302   ret void
9305 define void @v_permlanex16_v8i16(ptr addrspace(1) %out, <8 x i16> %src0, i32 %src1, i32 %src2) {
9306 ; GFX10-SDAG-LABEL: v_permlanex16_v8i16:
9307 ; GFX10-SDAG:       ; %bb.0:
9308 ; GFX10-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9309 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s4, v6
9310 ; GFX10-SDAG-NEXT:    v_readfirstlane_b32 s5, v7
9311 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v5, v5, s4, s5
9312 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v4, v4, s4, s5
9313 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v3, v3, s4, s5
9314 ; GFX10-SDAG-NEXT:    v_permlanex16_b32 v2, v2, s4, s5
9315 ; GFX10-SDAG-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
9316 ; GFX10-SDAG-NEXT:    s_setpc_b64 s[30:31]
9318 ; GFX10-GISEL-LABEL: v_permlanex16_v8i16:
9319 ; GFX10-GISEL:       ; %bb.0:
9320 ; GFX10-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9321 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s4, v6
9322 ; GFX10-GISEL-NEXT:    v_readfirstlane_b32 s5, v7
9323 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v2, v2, s4, s5
9324 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v3, v3, s4, s5
9325 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v4, v4, s4, s5
9326 ; GFX10-GISEL-NEXT:    v_permlanex16_b32 v5, v5, s4, s5
9327 ; GFX10-GISEL-NEXT:    global_store_dwordx4 v[0:1], v[2:5], off
9328 ; GFX10-GISEL-NEXT:    s_setpc_b64 s[30:31]
9330 ; GFX11-SDAG-LABEL: v_permlanex16_v8i16:
9331 ; GFX11-SDAG:       ; %bb.0:
9332 ; GFX11-SDAG-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9333 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s0, v6
9334 ; GFX11-SDAG-NEXT:    v_readfirstlane_b32 s1, v7
9335 ; GFX11-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9336 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v5, v5, s0, s1
9337 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v4, v4, s0, s1
9338 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v3, v3, s0, s1
9339 ; GFX11-SDAG-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
9340 ; GFX11-SDAG-NEXT:    global_store_b128 v[0:1], v[2:5], off
9341 ; GFX11-SDAG-NEXT:    s_setpc_b64 s[30:31]
9343 ; GFX11-GISEL-LABEL: v_permlanex16_v8i16:
9344 ; GFX11-GISEL:       ; %bb.0:
9345 ; GFX11-GISEL-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
9346 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s0, v6
9347 ; GFX11-GISEL-NEXT:    v_readfirstlane_b32 s1, v7
9348 ; GFX11-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9349 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
9350 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v3, v3, s0, s1
9351 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v4, v4, s0, s1
9352 ; GFX11-GISEL-NEXT:    v_permlanex16_b32 v5, v5, s0, s1
9353 ; GFX11-GISEL-NEXT:    global_store_b128 v[0:1], v[2:5], off
9354 ; GFX11-GISEL-NEXT:    s_setpc_b64 s[30:31]
9356 ; GFX12-SDAG-LABEL: v_permlanex16_v8i16:
9357 ; GFX12-SDAG:       ; %bb.0:
9358 ; GFX12-SDAG-NEXT:    s_wait_loadcnt_dscnt 0x0
9359 ; GFX12-SDAG-NEXT:    s_wait_expcnt 0x0
9360 ; GFX12-SDAG-NEXT:    s_wait_samplecnt 0x0
9361 ; GFX12-SDAG-NEXT:    s_wait_bvhcnt 0x0
9362 ; GFX12-SDAG-NEXT:    s_wait_kmcnt 0x0
9363 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s0, v6
9364 ; GFX12-SDAG-NEXT:    v_readfirstlane_b32 s1, v7
9365 ; GFX12-SDAG-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9366 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v5, v5, s0, s1
9367 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v4, v4, s0, s1
9368 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v3, v3, s0, s1
9369 ; GFX12-SDAG-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
9370 ; GFX12-SDAG-NEXT:    global_store_b128 v[0:1], v[2:5], off
9371 ; GFX12-SDAG-NEXT:    s_setpc_b64 s[30:31]
9373 ; GFX12-GISEL-LABEL: v_permlanex16_v8i16:
9374 ; GFX12-GISEL:       ; %bb.0:
9375 ; GFX12-GISEL-NEXT:    s_wait_loadcnt_dscnt 0x0
9376 ; GFX12-GISEL-NEXT:    s_wait_expcnt 0x0
9377 ; GFX12-GISEL-NEXT:    s_wait_samplecnt 0x0
9378 ; GFX12-GISEL-NEXT:    s_wait_bvhcnt 0x0
9379 ; GFX12-GISEL-NEXT:    s_wait_kmcnt 0x0
9380 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s0, v6
9381 ; GFX12-GISEL-NEXT:    v_readfirstlane_b32 s1, v7
9382 ; GFX12-GISEL-NEXT:    s_delay_alu instid0(VALU_DEP_1)
9383 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v2, v2, s0, s1
9384 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v3, v3, s0, s1
9385 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v4, v4, s0, s1
9386 ; GFX12-GISEL-NEXT:    v_permlanex16_b32 v5, v5, s0, s1
9387 ; GFX12-GISEL-NEXT:    global_store_b128 v[0:1], v[2:5], off
9388 ; GFX12-GISEL-NEXT:    s_setpc_b64 s[30:31]
9389   %v = call <8 x i16> @llvm.amdgcn.permlanex16.v8i16(<8 x i16> %src0, <8 x i16> %src0, i32 %src1, i32 %src2, i1 false, i1 false)
9390   store <8 x i16> %v, ptr addrspace(1) %out
9391   ret void