Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / extract-subvector-16bit.ll
blob4202edfbd0eb457e3d48005cafc6c08a37f2338c
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=amdgcn-- -verify-machineinstrs -o - %s | FileCheck -check-prefix=SI %s
3 ; RUN: llc -mtriple=amdgcn-- -mcpu=gfx900 -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s
4 ; RUN: llc -mtriple=amdgcn-- -mcpu=gfx1100 -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX11 %s
6 define <4 x i16> @vec_8xi16_extract_4xi16(ptr addrspace(1) %p0, ptr addrspace(1) %p1) {
7 ; SI-LABEL: vec_8xi16_extract_4xi16:
8 ; SI:       ; %bb.0:
9 ; SI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
10 ; SI-NEXT:    s_cbranch_scc0 .LBB0_2
11 ; SI-NEXT:  ; %bb.1: ; %F
12 ; SI-NEXT:    s_mov_b32 s6, 0
13 ; SI-NEXT:    s_mov_b32 s7, 0xf000
14 ; SI-NEXT:    s_mov_b32 s4, s6
15 ; SI-NEXT:    s_mov_b32 s5, s6
16 ; SI-NEXT:    buffer_load_ushort v5, v[2:3], s[4:7], 0 addr64 glc
17 ; SI-NEXT:    s_waitcnt vmcnt(0)
18 ; SI-NEXT:    buffer_load_ushort v4, v[2:3], s[4:7], 0 addr64 offset:2 glc
19 ; SI-NEXT:    s_waitcnt vmcnt(0)
20 ; SI-NEXT:    buffer_load_ushort v6, v[2:3], s[4:7], 0 addr64 offset:4 glc
21 ; SI-NEXT:    s_waitcnt vmcnt(0)
22 ; SI-NEXT:    buffer_load_ushort v7, v[2:3], s[4:7], 0 addr64 offset:6 glc
23 ; SI-NEXT:    s_waitcnt vmcnt(0)
24 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:8 glc
25 ; SI-NEXT:    s_waitcnt vmcnt(0)
26 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:10 glc
27 ; SI-NEXT:    s_waitcnt vmcnt(0)
28 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:12 glc
29 ; SI-NEXT:    s_waitcnt vmcnt(0)
30 ; SI-NEXT:    buffer_load_ushort v2, v[2:3], s[4:7], 0 addr64 offset:14 glc
31 ; SI-NEXT:    s_waitcnt vmcnt(0)
32 ; SI-NEXT:    v_lshlrev_b32_e32 v2, 16, v7
33 ; SI-NEXT:    v_lshlrev_b32_e32 v3, 16, v4
34 ; SI-NEXT:    v_or_b32_e32 v2, v6, v2
35 ; SI-NEXT:    v_or_b32_e32 v3, v5, v3
36 ; SI-NEXT:    s_mov_b64 vcc, exec
37 ; SI-NEXT:    s_cbranch_execz .LBB0_3
38 ; SI-NEXT:    s_branch .LBB0_4
39 ; SI-NEXT:  .LBB0_2:
40 ; SI-NEXT:    ; implicit-def: $vgpr3
41 ; SI-NEXT:    ; implicit-def: $vgpr4
42 ; SI-NEXT:    ; implicit-def: $vgpr2
43 ; SI-NEXT:    s_mov_b64 vcc, 0
44 ; SI-NEXT:  .LBB0_3: ; %T
45 ; SI-NEXT:    s_mov_b32 s6, 0
46 ; SI-NEXT:    s_mov_b32 s7, 0xf000
47 ; SI-NEXT:    s_mov_b32 s4, s6
48 ; SI-NEXT:    s_mov_b32 s5, s6
49 ; SI-NEXT:    buffer_load_ushort v3, v[0:1], s[4:7], 0 addr64 glc
50 ; SI-NEXT:    s_waitcnt vmcnt(0)
51 ; SI-NEXT:    buffer_load_ushort v4, v[0:1], s[4:7], 0 addr64 offset:2 glc
52 ; SI-NEXT:    s_waitcnt vmcnt(0)
53 ; SI-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 offset:4 glc
54 ; SI-NEXT:    s_waitcnt vmcnt(0)
55 ; SI-NEXT:    buffer_load_ushort v5, v[0:1], s[4:7], 0 addr64 offset:6 glc
56 ; SI-NEXT:    s_waitcnt vmcnt(0)
57 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:8 glc
58 ; SI-NEXT:    s_waitcnt vmcnt(0)
59 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:10 glc
60 ; SI-NEXT:    s_waitcnt vmcnt(0)
61 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:12 glc
62 ; SI-NEXT:    s_waitcnt vmcnt(0)
63 ; SI-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 offset:14 glc
64 ; SI-NEXT:    s_waitcnt vmcnt(0)
65 ; SI-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
66 ; SI-NEXT:    v_lshlrev_b32_e32 v1, 16, v4
67 ; SI-NEXT:    v_or_b32_e32 v2, v2, v0
68 ; SI-NEXT:    v_or_b32_e32 v3, v3, v1
69 ; SI-NEXT:  .LBB0_4: ; %exit
70 ; SI-NEXT:    v_bfe_i32 v0, v3, 0, 16
71 ; SI-NEXT:    v_bfe_i32 v1, v4, 0, 16
72 ; SI-NEXT:    v_bfe_i32 v2, v2, 0, 16
73 ; SI-NEXT:    v_mov_b32_e32 v3, 0xffff
74 ; SI-NEXT:    v_mov_b32_e32 v4, 0x8000
75 ; SI-NEXT:    v_mov_b32_e32 v5, 0xffff0000
76 ; SI-NEXT:    v_bfrev_b32_e32 v6, 1
77 ; SI-NEXT:    v_mov_b32_e32 v7, 0xffff8000
78 ; SI-NEXT:    v_cmp_lt_i32_e32 vcc, -1, v0
79 ; SI-NEXT:    v_cndmask_b32_e32 v0, v3, v4, vcc
80 ; SI-NEXT:    v_cmp_lt_i32_e32 vcc, -1, v1
81 ; SI-NEXT:    v_cndmask_b32_e32 v1, v5, v6, vcc
82 ; SI-NEXT:    v_cmp_lt_i32_e32 vcc, -1, v2
83 ; SI-NEXT:    v_cndmask_b32_e32 v2, -1, v7, vcc
84 ; SI-NEXT:    v_or_b32_e32 v0, v0, v1
85 ; SI-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
86 ; SI-NEXT:    v_and_b32_e32 v3, 0xffff, v2
87 ; SI-NEXT:    v_or_b32_e32 v2, v3, v4
88 ; SI-NEXT:    v_alignbit_b32 v1, v2, v1, 16
89 ; SI-NEXT:    s_setpc_b64 s[30:31]
91 ; GFX9-LABEL: vec_8xi16_extract_4xi16:
92 ; GFX9:       ; %bb.0:
93 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
94 ; GFX9-NEXT:    s_cbranch_scc0 .LBB0_2
95 ; GFX9-NEXT:  ; %bb.1: ; %F
96 ; GFX9-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off glc
97 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
98 ; GFX9-NEXT:    s_cbranch_execz .LBB0_3
99 ; GFX9-NEXT:    s_branch .LBB0_4
100 ; GFX9-NEXT:  .LBB0_2:
101 ; GFX9-NEXT:    ; implicit-def: $vgpr2_vgpr3_vgpr4_vgpr5
102 ; GFX9-NEXT:  .LBB0_3: ; %T
103 ; GFX9-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off glc
104 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
105 ; GFX9-NEXT:  .LBB0_4: ; %exit
106 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
107 ; GFX9-NEXT:    v_pk_ashrrev_i16 v0, 15, v3 op_sel_hi:[0,0]
108 ; GFX9-NEXT:    s_movk_i32 s4, 0x8000
109 ; GFX9-NEXT:    v_or_b32_e32 v1, 0xffff8000, v0
110 ; GFX9-NEXT:    v_or_b32_sdwa v3, v0, s4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
111 ; GFX9-NEXT:    v_pk_ashrrev_i16 v0, 15, v2 op_sel_hi:[0,1]
112 ; GFX9-NEXT:    v_or_b32_e32 v2, 0xffff8000, v0
113 ; GFX9-NEXT:    v_or_b32_sdwa v0, v0, s4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
114 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
115 ; GFX9-NEXT:    v_perm_b32 v0, v0, v2, s4
116 ; GFX9-NEXT:    v_perm_b32 v1, v3, v1, s4
117 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
119 ; GFX11-LABEL: vec_8xi16_extract_4xi16:
120 ; GFX11:       ; %bb.0:
121 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
122 ; GFX11-NEXT:    s_cbranch_scc0 .LBB0_2
123 ; GFX11-NEXT:  ; %bb.1: ; %F
124 ; GFX11-NEXT:    global_load_b128 v[2:5], v[2:3], off glc dlc
125 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
126 ; GFX11-NEXT:    s_cbranch_execz .LBB0_3
127 ; GFX11-NEXT:    s_branch .LBB0_4
128 ; GFX11-NEXT:  .LBB0_2:
129 ; GFX11-NEXT:    ; implicit-def: $vgpr2_vgpr3_vgpr4_vgpr5
130 ; GFX11-NEXT:  .LBB0_3: ; %T
131 ; GFX11-NEXT:    global_load_b128 v[2:5], v[0:1], off glc dlc
132 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
133 ; GFX11-NEXT:  .LBB0_4: ; %exit
134 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
135 ; GFX11-NEXT:    v_pk_ashrrev_i16 v0, 15, v2 op_sel_hi:[0,1]
136 ; GFX11-NEXT:    v_pk_ashrrev_i16 v1, 15, v3 op_sel_hi:[0,0]
137 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
138 ; GFX11-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
139 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
140 ; GFX11-NEXT:    v_or_b32_e32 v1, 0xffff8000, v1
141 ; GFX11-NEXT:    v_or_b32_e32 v0, 0xffff8000, v0
142 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
143 ; GFX11-NEXT:    v_or_b32_e32 v2, 0xffff8000, v2
144 ; GFX11-NEXT:    v_or_b32_e32 v3, 0xffff8000, v3
145 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
146 ; GFX11-NEXT:    v_perm_b32 v0, v2, v0, 0x5040100
147 ; GFX11-NEXT:    v_perm_b32 v1, v3, v1, 0x5040100
148 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
149   br i1 undef, label %T, label %F
152   %t = load volatile <8 x i16>, ptr addrspace(1) %p0
153   br label %exit
156   %f = load volatile <8 x i16>, ptr addrspace(1) %p1
157   br label %exit
159 exit:
160   %m = phi <8 x i16> [ %t, %T ], [ %f, %F ]
161   %v2 = shufflevector <8 x i16> %m, <8 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 2>
162   %b2 = icmp sgt <4 x i16> %v2, <i16 -1, i16 -1, i16 -1, i16 -1>
163   %r2 = select <4 x i1> %b2, <4 x i16> <i16 -32768, i16 -32768, i16 -32768, i16 -32768>, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>
164   ret <4 x i16> %r2
167 define <4 x i16> @vec_8xi16_extract_4xi16_2(ptr addrspace(1) %p0, ptr addrspace(1) %p1) {
168 ; SI-LABEL: vec_8xi16_extract_4xi16_2:
169 ; SI:       ; %bb.0:
170 ; SI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
171 ; SI-NEXT:    s_cbranch_scc0 .LBB1_2
172 ; SI-NEXT:  ; %bb.1: ; %F
173 ; SI-NEXT:    s_mov_b32 s6, 0
174 ; SI-NEXT:    s_mov_b32 s7, 0xf000
175 ; SI-NEXT:    s_mov_b32 s4, s6
176 ; SI-NEXT:    s_mov_b32 s5, s6
177 ; SI-NEXT:    buffer_load_ushort v4, v[2:3], s[4:7], 0 addr64 glc
178 ; SI-NEXT:    s_waitcnt vmcnt(0)
179 ; SI-NEXT:    buffer_load_ushort v4, v[2:3], s[4:7], 0 addr64 offset:2 glc
180 ; SI-NEXT:    s_waitcnt vmcnt(0)
181 ; SI-NEXT:    buffer_load_ushort v4, v[2:3], s[4:7], 0 addr64 offset:4 glc
182 ; SI-NEXT:    s_waitcnt vmcnt(0)
183 ; SI-NEXT:    buffer_load_ushort v4, v[2:3], s[4:7], 0 addr64 offset:6 glc
184 ; SI-NEXT:    s_waitcnt vmcnt(0)
185 ; SI-NEXT:    buffer_load_ushort v5, v[2:3], s[4:7], 0 addr64 offset:8 glc
186 ; SI-NEXT:    s_waitcnt vmcnt(0)
187 ; SI-NEXT:    buffer_load_ushort v4, v[2:3], s[4:7], 0 addr64 offset:10 glc
188 ; SI-NEXT:    s_waitcnt vmcnt(0)
189 ; SI-NEXT:    buffer_load_ushort v6, v[2:3], s[4:7], 0 addr64 offset:12 glc
190 ; SI-NEXT:    s_waitcnt vmcnt(0)
191 ; SI-NEXT:    buffer_load_ushort v2, v[2:3], s[4:7], 0 addr64 offset:14 glc
192 ; SI-NEXT:    s_waitcnt vmcnt(0)
193 ; SI-NEXT:    v_lshlrev_b32_e32 v3, 16, v2
194 ; SI-NEXT:    v_lshlrev_b32_e32 v7, 16, v4
195 ; SI-NEXT:    v_or_b32_e32 v3, v6, v3
196 ; SI-NEXT:    v_or_b32_e32 v5, v5, v7
197 ; SI-NEXT:    s_mov_b64 vcc, exec
198 ; SI-NEXT:    s_cbranch_execz .LBB1_3
199 ; SI-NEXT:    s_branch .LBB1_4
200 ; SI-NEXT:  .LBB1_2:
201 ; SI-NEXT:    ; implicit-def: $vgpr5
202 ; SI-NEXT:    ; implicit-def: $vgpr4
203 ; SI-NEXT:    ; implicit-def: $vgpr3
204 ; SI-NEXT:    ; implicit-def: $vgpr2
205 ; SI-NEXT:    s_mov_b64 vcc, 0
206 ; SI-NEXT:  .LBB1_3: ; %T
207 ; SI-NEXT:    s_mov_b32 s6, 0
208 ; SI-NEXT:    s_mov_b32 s7, 0xf000
209 ; SI-NEXT:    s_mov_b32 s4, s6
210 ; SI-NEXT:    s_mov_b32 s5, s6
211 ; SI-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 glc
212 ; SI-NEXT:    s_waitcnt vmcnt(0)
213 ; SI-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 offset:2 glc
214 ; SI-NEXT:    s_waitcnt vmcnt(0)
215 ; SI-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 offset:4 glc
216 ; SI-NEXT:    s_waitcnt vmcnt(0)
217 ; SI-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 offset:6 glc
218 ; SI-NEXT:    s_waitcnt vmcnt(0)
219 ; SI-NEXT:    buffer_load_ushort v5, v[0:1], s[4:7], 0 addr64 offset:8 glc
220 ; SI-NEXT:    s_waitcnt vmcnt(0)
221 ; SI-NEXT:    buffer_load_ushort v4, v[0:1], s[4:7], 0 addr64 offset:10 glc
222 ; SI-NEXT:    s_waitcnt vmcnt(0)
223 ; SI-NEXT:    buffer_load_ushort v3, v[0:1], s[4:7], 0 addr64 offset:12 glc
224 ; SI-NEXT:    s_waitcnt vmcnt(0)
225 ; SI-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 offset:14 glc
226 ; SI-NEXT:    s_waitcnt vmcnt(0)
227 ; SI-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
228 ; SI-NEXT:    v_lshlrev_b32_e32 v1, 16, v4
229 ; SI-NEXT:    v_or_b32_e32 v3, v3, v0
230 ; SI-NEXT:    v_or_b32_e32 v5, v5, v1
231 ; SI-NEXT:  .LBB1_4: ; %exit
232 ; SI-NEXT:    v_bfe_i32 v0, v5, 0, 16
233 ; SI-NEXT:    v_bfe_i32 v1, v4, 0, 16
234 ; SI-NEXT:    v_bfe_i32 v3, v3, 0, 16
235 ; SI-NEXT:    v_bfe_i32 v2, v2, 0, 16
236 ; SI-NEXT:    v_mov_b32_e32 v4, 0xffff
237 ; SI-NEXT:    v_mov_b32_e32 v5, 0x8000
238 ; SI-NEXT:    v_mov_b32_e32 v6, 0xffff0000
239 ; SI-NEXT:    v_bfrev_b32_e32 v7, 1
240 ; SI-NEXT:    v_cmp_lt_i32_e32 vcc, -1, v0
241 ; SI-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc
242 ; SI-NEXT:    v_cmp_lt_i32_e32 vcc, -1, v1
243 ; SI-NEXT:    v_cndmask_b32_e32 v1, v6, v7, vcc
244 ; SI-NEXT:    v_cmp_lt_i32_e32 vcc, -1, v3
245 ; SI-NEXT:    v_cndmask_b32_e32 v3, v4, v5, vcc
246 ; SI-NEXT:    v_cmp_lt_i32_e32 vcc, -1, v2
247 ; SI-NEXT:    v_cndmask_b32_e32 v4, v6, v7, vcc
248 ; SI-NEXT:    v_or_b32_e32 v0, v0, v1
249 ; SI-NEXT:    v_or_b32_e32 v2, v3, v4
250 ; SI-NEXT:    v_alignbit_b32 v1, v2, v1, 16
251 ; SI-NEXT:    v_lshrrev_b32_e32 v3, 16, v4
252 ; SI-NEXT:    s_setpc_b64 s[30:31]
254 ; GFX9-LABEL: vec_8xi16_extract_4xi16_2:
255 ; GFX9:       ; %bb.0:
256 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
257 ; GFX9-NEXT:    s_cbranch_scc0 .LBB1_2
258 ; GFX9-NEXT:  ; %bb.1: ; %F
259 ; GFX9-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off glc
260 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
261 ; GFX9-NEXT:    s_cbranch_execz .LBB1_3
262 ; GFX9-NEXT:    s_branch .LBB1_4
263 ; GFX9-NEXT:  .LBB1_2:
264 ; GFX9-NEXT:    ; implicit-def: $vgpr2_vgpr3_vgpr4_vgpr5
265 ; GFX9-NEXT:  .LBB1_3: ; %T
266 ; GFX9-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off glc
267 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
268 ; GFX9-NEXT:  .LBB1_4: ; %exit
269 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
270 ; GFX9-NEXT:    v_pk_ashrrev_i16 v0, 15, v5 op_sel_hi:[0,1]
271 ; GFX9-NEXT:    s_movk_i32 s4, 0x8000
272 ; GFX9-NEXT:    v_or_b32_e32 v1, 0xffff8000, v0
273 ; GFX9-NEXT:    v_or_b32_sdwa v2, v0, s4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
274 ; GFX9-NEXT:    v_pk_ashrrev_i16 v0, 15, v4 op_sel_hi:[0,1]
275 ; GFX9-NEXT:    v_or_b32_e32 v3, 0xffff8000, v0
276 ; GFX9-NEXT:    v_or_b32_sdwa v0, v0, s4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
277 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
278 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
279 ; GFX9-NEXT:    v_perm_b32 v1, v2, v1, s4
280 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
282 ; GFX11-LABEL: vec_8xi16_extract_4xi16_2:
283 ; GFX11:       ; %bb.0:
284 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
285 ; GFX11-NEXT:    s_cbranch_scc0 .LBB1_2
286 ; GFX11-NEXT:  ; %bb.1: ; %F
287 ; GFX11-NEXT:    global_load_b128 v[2:5], v[2:3], off glc dlc
288 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
289 ; GFX11-NEXT:    s_cbranch_execz .LBB1_3
290 ; GFX11-NEXT:    s_branch .LBB1_4
291 ; GFX11-NEXT:  .LBB1_2:
292 ; GFX11-NEXT:    ; implicit-def: $vgpr2_vgpr3_vgpr4_vgpr5
293 ; GFX11-NEXT:  .LBB1_3: ; %T
294 ; GFX11-NEXT:    global_load_b128 v[2:5], v[0:1], off glc dlc
295 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
296 ; GFX11-NEXT:  .LBB1_4: ; %exit
297 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
298 ; GFX11-NEXT:    v_pk_ashrrev_i16 v0, 15, v4 op_sel_hi:[0,1]
299 ; GFX11-NEXT:    v_pk_ashrrev_i16 v1, 15, v5 op_sel_hi:[0,1]
300 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
301 ; GFX11-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
302 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
303 ; GFX11-NEXT:    v_or_b32_e32 v1, 0xffff8000, v1
304 ; GFX11-NEXT:    v_or_b32_e32 v0, 0xffff8000, v0
305 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
306 ; GFX11-NEXT:    v_or_b32_e32 v2, 0xffff8000, v2
307 ; GFX11-NEXT:    v_or_b32_e32 v3, 0xffff8000, v3
308 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
309 ; GFX11-NEXT:    v_perm_b32 v0, v2, v0, 0x5040100
310 ; GFX11-NEXT:    v_perm_b32 v1, v3, v1, 0x5040100
311 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
312   br i1 undef, label %T, label %F
315   %t = load volatile <8 x i16>, ptr addrspace(1) %p0
316   br label %exit
319   %f = load volatile <8 x i16>, ptr addrspace(1) %p1
320   br label %exit
322 exit:
323   %m = phi <8 x i16> [ %t, %T ], [ %f, %F ]
324   %v2 = shufflevector <8 x i16> %m, <8 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
325   %b2 = icmp sgt <4 x i16> %v2, <i16 -1, i16 -1, i16 -1, i16 -1>
326   %r2 = select <4 x i1> %b2, <4 x i16> <i16 -32768, i16 -32768, i16 -32768, i16 -32768>, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>
327   ret <4 x i16> %r2
330 define <4 x half> @vec_8xf16_extract_4xf16(ptr addrspace(1) %p0, ptr addrspace(1) %p1) {
331 ; SI-LABEL: vec_8xf16_extract_4xf16:
332 ; SI:       ; %bb.0:
333 ; SI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
334 ; SI-NEXT:    s_cbranch_scc0 .LBB2_2
335 ; SI-NEXT:  ; %bb.1: ; %F
336 ; SI-NEXT:    s_mov_b32 s6, 0
337 ; SI-NEXT:    s_mov_b32 s7, 0xf000
338 ; SI-NEXT:    s_mov_b32 s4, s6
339 ; SI-NEXT:    s_mov_b32 s5, s6
340 ; SI-NEXT:    buffer_load_ushort v4, v[2:3], s[4:7], 0 addr64 glc
341 ; SI-NEXT:    s_waitcnt vmcnt(0)
342 ; SI-NEXT:    buffer_load_ushort v5, v[2:3], s[4:7], 0 addr64 offset:2 glc
343 ; SI-NEXT:    s_waitcnt vmcnt(0)
344 ; SI-NEXT:    buffer_load_ushort v6, v[2:3], s[4:7], 0 addr64 offset:4 glc
345 ; SI-NEXT:    s_waitcnt vmcnt(0)
346 ; SI-NEXT:    buffer_load_ushort v7, v[2:3], s[4:7], 0 addr64 offset:6 glc
347 ; SI-NEXT:    s_waitcnt vmcnt(0)
348 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:8 glc
349 ; SI-NEXT:    s_waitcnt vmcnt(0)
350 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:10 glc
351 ; SI-NEXT:    s_waitcnt vmcnt(0)
352 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:12 glc
353 ; SI-NEXT:    s_waitcnt vmcnt(0)
354 ; SI-NEXT:    buffer_load_ushort v2, v[2:3], s[4:7], 0 addr64 offset:14 glc
355 ; SI-NEXT:    s_waitcnt vmcnt(0)
356 ; SI-NEXT:    v_lshlrev_b32_e32 v2, 16, v7
357 ; SI-NEXT:    v_lshlrev_b32_e32 v7, 16, v5
358 ; SI-NEXT:    v_cvt_f32_f16_e32 v3, v5
359 ; SI-NEXT:    v_or_b32_e32 v2, v6, v2
360 ; SI-NEXT:    v_or_b32_e32 v4, v4, v7
361 ; SI-NEXT:    v_cvt_f32_f16_e32 v2, v2
362 ; SI-NEXT:    v_cvt_f32_f16_e32 v4, v4
363 ; SI-NEXT:    s_mov_b64 vcc, exec
364 ; SI-NEXT:    s_cbranch_execz .LBB2_3
365 ; SI-NEXT:    s_branch .LBB2_4
366 ; SI-NEXT:  .LBB2_2:
367 ; SI-NEXT:    ; implicit-def: $vgpr4
368 ; SI-NEXT:    ; implicit-def: $vgpr3
369 ; SI-NEXT:    ; implicit-def: $vgpr2
370 ; SI-NEXT:    s_mov_b64 vcc, 0
371 ; SI-NEXT:  .LBB2_3: ; %T
372 ; SI-NEXT:    s_mov_b32 s6, 0
373 ; SI-NEXT:    s_mov_b32 s7, 0xf000
374 ; SI-NEXT:    s_mov_b32 s4, s6
375 ; SI-NEXT:    s_mov_b32 s5, s6
376 ; SI-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 glc
377 ; SI-NEXT:    s_waitcnt vmcnt(0)
378 ; SI-NEXT:    buffer_load_ushort v3, v[0:1], s[4:7], 0 addr64 offset:2 glc
379 ; SI-NEXT:    s_waitcnt vmcnt(0)
380 ; SI-NEXT:    buffer_load_ushort v4, v[0:1], s[4:7], 0 addr64 offset:4 glc
381 ; SI-NEXT:    s_waitcnt vmcnt(0)
382 ; SI-NEXT:    buffer_load_ushort v5, v[0:1], s[4:7], 0 addr64 offset:6 glc
383 ; SI-NEXT:    s_waitcnt vmcnt(0)
384 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:8 glc
385 ; SI-NEXT:    s_waitcnt vmcnt(0)
386 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:10 glc
387 ; SI-NEXT:    s_waitcnt vmcnt(0)
388 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:12 glc
389 ; SI-NEXT:    s_waitcnt vmcnt(0)
390 ; SI-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 offset:14 glc
391 ; SI-NEXT:    s_waitcnt vmcnt(0)
392 ; SI-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
393 ; SI-NEXT:    v_lshlrev_b32_e32 v1, 16, v3
394 ; SI-NEXT:    v_or_b32_e32 v0, v4, v0
395 ; SI-NEXT:    v_or_b32_e32 v1, v2, v1
396 ; SI-NEXT:    v_cvt_f32_f16_e32 v2, v0
397 ; SI-NEXT:    v_cvt_f32_f16_e32 v4, v1
398 ; SI-NEXT:    v_cvt_f32_f16_e32 v3, v3
399 ; SI-NEXT:  .LBB2_4: ; %exit
400 ; SI-NEXT:    v_cvt_f16_f32_e32 v0, v4
401 ; SI-NEXT:    v_cvt_f16_f32_e32 v1, v3
402 ; SI-NEXT:    v_cvt_f16_f32_e32 v2, v2
403 ; SI-NEXT:    v_mov_b32_e32 v3, 0x3fa00000
404 ; SI-NEXT:    v_mov_b32_e32 v4, 0x3f200000
405 ; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0
406 ; SI-NEXT:    v_cvt_f32_f16_e32 v1, v1
407 ; SI-NEXT:    v_cvt_f32_f16_e32 v2, v2
408 ; SI-NEXT:    v_cmp_nge_f32_e32 vcc, 0.5, v0
409 ; SI-NEXT:    v_cndmask_b32_e32 v0, v3, v4, vcc
410 ; SI-NEXT:    v_cmp_nge_f32_e32 vcc, 0.5, v1
411 ; SI-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
412 ; SI-NEXT:    v_cmp_nge_f32_e32 vcc, 0.5, v2
413 ; SI-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
414 ; SI-NEXT:    v_mov_b32_e32 v3, v2
415 ; SI-NEXT:    s_setpc_b64 s[30:31]
417 ; GFX9-LABEL: vec_8xf16_extract_4xf16:
418 ; GFX9:       ; %bb.0:
419 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
420 ; GFX9-NEXT:    s_cbranch_scc0 .LBB2_2
421 ; GFX9-NEXT:  ; %bb.1: ; %F
422 ; GFX9-NEXT:    global_load_dwordx4 v[2:5], v[2:3], off glc
423 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
424 ; GFX9-NEXT:    s_cbranch_execz .LBB2_3
425 ; GFX9-NEXT:    s_branch .LBB2_4
426 ; GFX9-NEXT:  .LBB2_2:
427 ; GFX9-NEXT:    ; implicit-def: $vgpr2_vgpr3_vgpr4_vgpr5
428 ; GFX9-NEXT:  .LBB2_3: ; %T
429 ; GFX9-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off glc
430 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
431 ; GFX9-NEXT:  .LBB2_4: ; %exit
432 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x3900
433 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0x3d00
434 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
435 ; GFX9-NEXT:    v_cmp_ge_f16_e32 vcc, 0.5, v2
436 ; GFX9-NEXT:    v_mov_b32_e32 v5, 0x3800
437 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v0, v1, vcc
438 ; GFX9-NEXT:    v_cmp_le_f16_sdwa vcc, v2, v5 src0_sel:WORD_1 src1_sel:DWORD
439 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v0, v1, vcc
440 ; GFX9-NEXT:    v_cmp_nge_f16_e32 vcc, 0.5, v3
441 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v1, v0, vcc
442 ; GFX9-NEXT:    v_cmp_ge_f16_e32 vcc, 0.5, v3
443 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
444 ; GFX9-NEXT:    v_pack_b32_f16 v1, v0, v5
445 ; GFX9-NEXT:    v_pack_b32_f16 v0, v4, v2
446 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
448 ; GFX11-LABEL: vec_8xf16_extract_4xf16:
449 ; GFX11:       ; %bb.0:
450 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
451 ; GFX11-NEXT:    s_cbranch_scc0 .LBB2_2
452 ; GFX11-NEXT:  ; %bb.1: ; %F
453 ; GFX11-NEXT:    global_load_b128 v[2:5], v[2:3], off glc dlc
454 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
455 ; GFX11-NEXT:    s_cbranch_execz .LBB2_3
456 ; GFX11-NEXT:    s_branch .LBB2_4
457 ; GFX11-NEXT:  .LBB2_2:
458 ; GFX11-NEXT:    ; implicit-def: $vgpr2_vgpr3_vgpr4_vgpr5
459 ; GFX11-NEXT:  .LBB2_3: ; %T
460 ; GFX11-NEXT:    global_load_b128 v[2:5], v[0:1], off glc dlc
461 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
462 ; GFX11-NEXT:  .LBB2_4: ; %exit
463 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0x3d00
464 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
465 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
466 ; GFX11-NEXT:    v_cmp_ge_f16_e32 vcc_lo, 0.5, v2
467 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
468 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, 0x3900, v0, vcc_lo
469 ; GFX11-NEXT:    v_cmp_ge_f16_e32 vcc_lo, 0.5, v1
470 ; GFX11-NEXT:    v_dual_mov_b32 v4, 0x3900 :: v_dual_cndmask_b32 v1, 0x3900, v0
471 ; GFX11-NEXT:    v_cmp_nge_f16_e32 vcc_lo, 0.5, v3
472 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
473 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, 0x3d00, v4, vcc_lo
474 ; GFX11-NEXT:    v_cmp_ge_f16_e32 vcc_lo, 0.5, v3
475 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, 0x3900, v0, vcc_lo
476 ; GFX11-NEXT:    v_pack_b32_f16 v0, v2, v1
477 ; GFX11-NEXT:    v_pack_b32_f16 v1, v3, v4
478 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
479   br i1 undef, label %T, label %F
482   %t = load volatile <8 x half>, ptr addrspace(1) %p0
483   br label %exit
486   %f = load volatile <8 x half>, ptr addrspace(1) %p1
487   br label %exit
489 exit:
490   %m = phi <8 x half> [ %t, %T ], [ %f, %F ]
491   %v2 = shufflevector <8 x half> %m, <8 x half> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 2>
492   %b2 = fcmp ugt <4 x half> %v2, <half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800>
493   %r2 = select <4 x i1> %b2, <4 x half> <half 0xH3900, half 0xH3900, half 0xH3900, half 0xH3900>, <4 x half> <half 0xH3D00, half 0xH3D00, half 0xH3D00, half 0xH3D00>
494   ret <4 x half> %r2
497 define <4 x i16> @vec_16xi16_extract_4xi16(ptr addrspace(1) %p0, ptr addrspace(1) %p1) {
499 ; SI-LABEL: vec_16xi16_extract_4xi16:
500 ; SI:       ; %bb.0:
501 ; SI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
502 ; SI-NEXT:    s_cbranch_scc0 .LBB3_2
503 ; SI-NEXT:  ; %bb.1: ; %F
504 ; SI-NEXT:    s_mov_b32 s6, 0
505 ; SI-NEXT:    s_mov_b32 s7, 0xf000
506 ; SI-NEXT:    s_mov_b32 s4, s6
507 ; SI-NEXT:    s_mov_b32 s5, s6
508 ; SI-NEXT:    buffer_load_ushort v5, v[2:3], s[4:7], 0 addr64 glc
509 ; SI-NEXT:    s_waitcnt vmcnt(0)
510 ; SI-NEXT:    buffer_load_ushort v4, v[2:3], s[4:7], 0 addr64 offset:2 glc
511 ; SI-NEXT:    s_waitcnt vmcnt(0)
512 ; SI-NEXT:    buffer_load_ushort v6, v[2:3], s[4:7], 0 addr64 offset:4 glc
513 ; SI-NEXT:    s_waitcnt vmcnt(0)
514 ; SI-NEXT:    buffer_load_ushort v7, v[2:3], s[4:7], 0 addr64 offset:6 glc
515 ; SI-NEXT:    s_waitcnt vmcnt(0)
516 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:8 glc
517 ; SI-NEXT:    s_waitcnt vmcnt(0)
518 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:10 glc
519 ; SI-NEXT:    s_waitcnt vmcnt(0)
520 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:12 glc
521 ; SI-NEXT:    s_waitcnt vmcnt(0)
522 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:14 glc
523 ; SI-NEXT:    s_waitcnt vmcnt(0)
524 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:16 glc
525 ; SI-NEXT:    s_waitcnt vmcnt(0)
526 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:18 glc
527 ; SI-NEXT:    s_waitcnt vmcnt(0)
528 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:20 glc
529 ; SI-NEXT:    s_waitcnt vmcnt(0)
530 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:22 glc
531 ; SI-NEXT:    s_waitcnt vmcnt(0)
532 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:24 glc
533 ; SI-NEXT:    s_waitcnt vmcnt(0)
534 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:26 glc
535 ; SI-NEXT:    s_waitcnt vmcnt(0)
536 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:28 glc
537 ; SI-NEXT:    s_waitcnt vmcnt(0)
538 ; SI-NEXT:    buffer_load_ushort v2, v[2:3], s[4:7], 0 addr64 offset:30 glc
539 ; SI-NEXT:    s_waitcnt vmcnt(0)
540 ; SI-NEXT:    v_lshlrev_b32_e32 v2, 16, v7
541 ; SI-NEXT:    v_lshlrev_b32_e32 v3, 16, v4
542 ; SI-NEXT:    v_or_b32_e32 v2, v6, v2
543 ; SI-NEXT:    v_or_b32_e32 v3, v5, v3
544 ; SI-NEXT:    s_mov_b64 vcc, exec
545 ; SI-NEXT:    s_cbranch_execz .LBB3_3
546 ; SI-NEXT:    s_branch .LBB3_4
547 ; SI-NEXT:  .LBB3_2:
548 ; SI-NEXT:    ; implicit-def: $vgpr3
549 ; SI-NEXT:    ; implicit-def: $vgpr4
550 ; SI-NEXT:    ; implicit-def: $vgpr2
551 ; SI-NEXT:    s_mov_b64 vcc, 0
552 ; SI-NEXT:  .LBB3_3: ; %T
553 ; SI-NEXT:    s_mov_b32 s6, 0
554 ; SI-NEXT:    s_mov_b32 s7, 0xf000
555 ; SI-NEXT:    s_mov_b32 s4, s6
556 ; SI-NEXT:    s_mov_b32 s5, s6
557 ; SI-NEXT:    buffer_load_ushort v3, v[0:1], s[4:7], 0 addr64 glc
558 ; SI-NEXT:    s_waitcnt vmcnt(0)
559 ; SI-NEXT:    buffer_load_ushort v4, v[0:1], s[4:7], 0 addr64 offset:2 glc
560 ; SI-NEXT:    s_waitcnt vmcnt(0)
561 ; SI-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 offset:4 glc
562 ; SI-NEXT:    s_waitcnt vmcnt(0)
563 ; SI-NEXT:    buffer_load_ushort v5, v[0:1], s[4:7], 0 addr64 offset:6 glc
564 ; SI-NEXT:    s_waitcnt vmcnt(0)
565 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:8 glc
566 ; SI-NEXT:    s_waitcnt vmcnt(0)
567 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:10 glc
568 ; SI-NEXT:    s_waitcnt vmcnt(0)
569 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:12 glc
570 ; SI-NEXT:    s_waitcnt vmcnt(0)
571 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:14 glc
572 ; SI-NEXT:    s_waitcnt vmcnt(0)
573 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:16 glc
574 ; SI-NEXT:    s_waitcnt vmcnt(0)
575 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:18 glc
576 ; SI-NEXT:    s_waitcnt vmcnt(0)
577 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:20 glc
578 ; SI-NEXT:    s_waitcnt vmcnt(0)
579 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:22 glc
580 ; SI-NEXT:    s_waitcnt vmcnt(0)
581 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:24 glc
582 ; SI-NEXT:    s_waitcnt vmcnt(0)
583 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:26 glc
584 ; SI-NEXT:    s_waitcnt vmcnt(0)
585 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:28 glc
586 ; SI-NEXT:    s_waitcnt vmcnt(0)
587 ; SI-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 offset:30 glc
588 ; SI-NEXT:    s_waitcnt vmcnt(0)
589 ; SI-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
590 ; SI-NEXT:    v_lshlrev_b32_e32 v1, 16, v4
591 ; SI-NEXT:    v_or_b32_e32 v2, v2, v0
592 ; SI-NEXT:    v_or_b32_e32 v3, v3, v1
593 ; SI-NEXT:  .LBB3_4: ; %exit
594 ; SI-NEXT:    v_bfe_i32 v0, v3, 0, 16
595 ; SI-NEXT:    v_bfe_i32 v1, v4, 0, 16
596 ; SI-NEXT:    v_bfe_i32 v2, v2, 0, 16
597 ; SI-NEXT:    v_mov_b32_e32 v3, 0xffff
598 ; SI-NEXT:    v_mov_b32_e32 v4, 0x8000
599 ; SI-NEXT:    v_mov_b32_e32 v5, 0xffff0000
600 ; SI-NEXT:    v_bfrev_b32_e32 v6, 1
601 ; SI-NEXT:    v_mov_b32_e32 v7, 0xffff8000
602 ; SI-NEXT:    v_cmp_lt_i32_e32 vcc, -1, v0
603 ; SI-NEXT:    v_cndmask_b32_e32 v0, v3, v4, vcc
604 ; SI-NEXT:    v_cmp_lt_i32_e32 vcc, -1, v1
605 ; SI-NEXT:    v_cndmask_b32_e32 v1, v5, v6, vcc
606 ; SI-NEXT:    v_cmp_lt_i32_e32 vcc, -1, v2
607 ; SI-NEXT:    v_cndmask_b32_e32 v2, -1, v7, vcc
608 ; SI-NEXT:    v_or_b32_e32 v0, v0, v1
609 ; SI-NEXT:    v_lshlrev_b32_e32 v4, 16, v2
610 ; SI-NEXT:    v_and_b32_e32 v3, 0xffff, v2
611 ; SI-NEXT:    v_or_b32_e32 v2, v3, v4
612 ; SI-NEXT:    v_alignbit_b32 v1, v2, v1, 16
613 ; SI-NEXT:    s_setpc_b64 s[30:31]
615 ; GFX9-LABEL: vec_16xi16_extract_4xi16:
616 ; GFX9:       ; %bb.0:
617 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
618 ; GFX9-NEXT:    s_cbranch_scc0 .LBB3_2
619 ; GFX9-NEXT:  ; %bb.1: ; %F
620 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:16 glc
621 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
622 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off glc
623 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
624 ; GFX9-NEXT:    ; kill: killed $vgpr2 killed $vgpr3
625 ; GFX9-NEXT:    s_cbranch_execz .LBB3_3
626 ; GFX9-NEXT:    s_branch .LBB3_4
627 ; GFX9-NEXT:  .LBB3_2:
628 ; GFX9-NEXT:    ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11
629 ; GFX9-NEXT:  .LBB3_3: ; %T
630 ; GFX9-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off offset:16 glc
631 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
632 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off glc
633 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
634 ; GFX9-NEXT:    ; kill: killed $vgpr0 killed $vgpr1
635 ; GFX9-NEXT:  .LBB3_4: ; %exit
636 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
637 ; GFX9-NEXT:    v_pk_ashrrev_i16 v0, 15, v5 op_sel_hi:[0,0]
638 ; GFX9-NEXT:    s_movk_i32 s4, 0x8000
639 ; GFX9-NEXT:    v_or_b32_e32 v1, 0xffff8000, v0
640 ; GFX9-NEXT:    v_or_b32_sdwa v2, v0, s4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
641 ; GFX9-NEXT:    v_pk_ashrrev_i16 v0, 15, v4 op_sel_hi:[0,1]
642 ; GFX9-NEXT:    v_or_b32_e32 v3, 0xffff8000, v0
643 ; GFX9-NEXT:    v_or_b32_sdwa v0, v0, s4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
644 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
645 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
646 ; GFX9-NEXT:    v_perm_b32 v1, v2, v1, s4
647 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
649 ; GFX11-LABEL: vec_16xi16_extract_4xi16:
650 ; GFX11:       ; %bb.0:
651 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
652 ; GFX11-NEXT:    s_cbranch_scc0 .LBB3_2
653 ; GFX11-NEXT:  ; %bb.1: ; %F
654 ; GFX11-NEXT:    global_load_b128 v[4:7], v[2:3], off offset:16 glc dlc
655 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
656 ; GFX11-NEXT:    global_load_b128 v[2:5], v[2:3], off glc dlc
657 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
658 ; GFX11-NEXT:    s_cbranch_execz .LBB3_3
659 ; GFX11-NEXT:    s_branch .LBB3_4
660 ; GFX11-NEXT:  .LBB3_2:
661 ; GFX11-NEXT:    ; implicit-def: $vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9
662 ; GFX11-NEXT:  .LBB3_3: ; %T
663 ; GFX11-NEXT:    global_load_b128 v[2:5], v[0:1], off offset:16 glc dlc
664 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
665 ; GFX11-NEXT:    global_load_b128 v[2:5], v[0:1], off glc dlc
666 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
667 ; GFX11-NEXT:  .LBB3_4: ; %exit
668 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
669 ; GFX11-NEXT:    v_pk_ashrrev_i16 v0, 15, v2 op_sel_hi:[0,1]
670 ; GFX11-NEXT:    v_pk_ashrrev_i16 v1, 15, v3 op_sel_hi:[0,0]
671 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
672 ; GFX11-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
673 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
674 ; GFX11-NEXT:    v_or_b32_e32 v1, 0xffff8000, v1
675 ; GFX11-NEXT:    v_or_b32_e32 v0, 0xffff8000, v0
676 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
677 ; GFX11-NEXT:    v_or_b32_e32 v2, 0xffff8000, v2
678 ; GFX11-NEXT:    v_or_b32_e32 v3, 0xffff8000, v3
679 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
680 ; GFX11-NEXT:    v_perm_b32 v0, v2, v0, 0x5040100
681 ; GFX11-NEXT:    v_perm_b32 v1, v3, v1, 0x5040100
682 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
683   br i1 undef, label %T, label %F
686   %t = load volatile <16 x i16>, ptr addrspace(1) %p0
687   br label %exit
690   %f = load volatile <16 x i16>, ptr addrspace(1) %p1
691   br label %exit
693 exit:
694   %m = phi <16 x i16> [ %t, %T ], [ %f, %F ]
695   %v2 = shufflevector <16 x i16> %m, <16 x i16> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 2>
696   %b2 = icmp sgt <4 x i16> %v2, <i16 -1, i16 -1, i16 -1, i16 -1>
697   %r2 = select <4 x i1> %b2, <4 x i16> <i16 -32768, i16 -32768, i16 -32768, i16 -32768>, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>
698   ret <4 x i16> %r2
701 define <4 x i16> @vec_16xi16_extract_4xi16_2(ptr addrspace(1) %p0, ptr addrspace(1) %p1) {
703 ; SI-LABEL: vec_16xi16_extract_4xi16_2:
704 ; SI:       ; %bb.0:
705 ; SI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
706 ; SI-NEXT:    s_cbranch_scc0 .LBB4_2
707 ; SI-NEXT:  ; %bb.1: ; %F
708 ; SI-NEXT:    s_mov_b32 s6, 0
709 ; SI-NEXT:    s_mov_b32 s7, 0xf000
710 ; SI-NEXT:    s_mov_b32 s4, s6
711 ; SI-NEXT:    s_mov_b32 s5, s6
712 ; SI-NEXT:    buffer_load_ushort v4, v[2:3], s[4:7], 0 addr64 glc
713 ; SI-NEXT:    s_waitcnt vmcnt(0)
714 ; SI-NEXT:    buffer_load_ushort v4, v[2:3], s[4:7], 0 addr64 offset:2 glc
715 ; SI-NEXT:    s_waitcnt vmcnt(0)
716 ; SI-NEXT:    buffer_load_ushort v4, v[2:3], s[4:7], 0 addr64 offset:4 glc
717 ; SI-NEXT:    s_waitcnt vmcnt(0)
718 ; SI-NEXT:    buffer_load_ushort v4, v[2:3], s[4:7], 0 addr64 offset:6 glc
719 ; SI-NEXT:    s_waitcnt vmcnt(0)
720 ; SI-NEXT:    buffer_load_ushort v6, v[2:3], s[4:7], 0 addr64 offset:8 glc
721 ; SI-NEXT:    s_waitcnt vmcnt(0)
722 ; SI-NEXT:    buffer_load_ushort v4, v[2:3], s[4:7], 0 addr64 offset:10 glc
723 ; SI-NEXT:    s_waitcnt vmcnt(0)
724 ; SI-NEXT:    buffer_load_ushort v7, v[2:3], s[4:7], 0 addr64 offset:12 glc
725 ; SI-NEXT:    s_waitcnt vmcnt(0)
726 ; SI-NEXT:    buffer_load_ushort v5, v[2:3], s[4:7], 0 addr64 offset:14 glc
727 ; SI-NEXT:    s_waitcnt vmcnt(0)
728 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:16 glc
729 ; SI-NEXT:    s_waitcnt vmcnt(0)
730 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:18 glc
731 ; SI-NEXT:    s_waitcnt vmcnt(0)
732 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:20 glc
733 ; SI-NEXT:    s_waitcnt vmcnt(0)
734 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:22 glc
735 ; SI-NEXT:    s_waitcnt vmcnt(0)
736 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:24 glc
737 ; SI-NEXT:    s_waitcnt vmcnt(0)
738 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:26 glc
739 ; SI-NEXT:    s_waitcnt vmcnt(0)
740 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:28 glc
741 ; SI-NEXT:    s_waitcnt vmcnt(0)
742 ; SI-NEXT:    buffer_load_ushort v2, v[2:3], s[4:7], 0 addr64 offset:30 glc
743 ; SI-NEXT:    s_waitcnt vmcnt(0)
744 ; SI-NEXT:    v_lshlrev_b32_e32 v2, 16, v5
745 ; SI-NEXT:    v_lshlrev_b32_e32 v3, 16, v4
746 ; SI-NEXT:    v_or_b32_e32 v2, v7, v2
747 ; SI-NEXT:    v_or_b32_e32 v3, v6, v3
748 ; SI-NEXT:    s_mov_b64 vcc, exec
749 ; SI-NEXT:    s_cbranch_execz .LBB4_3
750 ; SI-NEXT:    s_branch .LBB4_4
751 ; SI-NEXT:  .LBB4_2:
752 ; SI-NEXT:    ; implicit-def: $vgpr3
753 ; SI-NEXT:    ; implicit-def: $vgpr4
754 ; SI-NEXT:    ; implicit-def: $vgpr2
755 ; SI-NEXT:    ; implicit-def: $vgpr5
756 ; SI-NEXT:    s_mov_b64 vcc, 0
757 ; SI-NEXT:  .LBB4_3: ; %T
758 ; SI-NEXT:    s_mov_b32 s6, 0
759 ; SI-NEXT:    s_mov_b32 s7, 0xf000
760 ; SI-NEXT:    s_mov_b32 s4, s6
761 ; SI-NEXT:    s_mov_b32 s5, s6
762 ; SI-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 glc
763 ; SI-NEXT:    s_waitcnt vmcnt(0)
764 ; SI-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 offset:2 glc
765 ; SI-NEXT:    s_waitcnt vmcnt(0)
766 ; SI-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 offset:4 glc
767 ; SI-NEXT:    s_waitcnt vmcnt(0)
768 ; SI-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 offset:6 glc
769 ; SI-NEXT:    s_waitcnt vmcnt(0)
770 ; SI-NEXT:    buffer_load_ushort v3, v[0:1], s[4:7], 0 addr64 offset:8 glc
771 ; SI-NEXT:    s_waitcnt vmcnt(0)
772 ; SI-NEXT:    buffer_load_ushort v4, v[0:1], s[4:7], 0 addr64 offset:10 glc
773 ; SI-NEXT:    s_waitcnt vmcnt(0)
774 ; SI-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 offset:12 glc
775 ; SI-NEXT:    s_waitcnt vmcnt(0)
776 ; SI-NEXT:    buffer_load_ushort v5, v[0:1], s[4:7], 0 addr64 offset:14 glc
777 ; SI-NEXT:    s_waitcnt vmcnt(0)
778 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:16 glc
779 ; SI-NEXT:    s_waitcnt vmcnt(0)
780 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:18 glc
781 ; SI-NEXT:    s_waitcnt vmcnt(0)
782 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:20 glc
783 ; SI-NEXT:    s_waitcnt vmcnt(0)
784 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:22 glc
785 ; SI-NEXT:    s_waitcnt vmcnt(0)
786 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:24 glc
787 ; SI-NEXT:    s_waitcnt vmcnt(0)
788 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:26 glc
789 ; SI-NEXT:    s_waitcnt vmcnt(0)
790 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:28 glc
791 ; SI-NEXT:    s_waitcnt vmcnt(0)
792 ; SI-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 offset:30 glc
793 ; SI-NEXT:    s_waitcnt vmcnt(0)
794 ; SI-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
795 ; SI-NEXT:    v_lshlrev_b32_e32 v1, 16, v4
796 ; SI-NEXT:    v_or_b32_e32 v2, v2, v0
797 ; SI-NEXT:    v_or_b32_e32 v3, v3, v1
798 ; SI-NEXT:  .LBB4_4: ; %exit
799 ; SI-NEXT:    v_bfe_i32 v0, v3, 0, 16
800 ; SI-NEXT:    v_bfe_i32 v1, v4, 0, 16
801 ; SI-NEXT:    v_bfe_i32 v2, v2, 0, 16
802 ; SI-NEXT:    v_bfe_i32 v3, v5, 0, 16
803 ; SI-NEXT:    v_mov_b32_e32 v4, 0xffff
804 ; SI-NEXT:    v_mov_b32_e32 v5, 0x8000
805 ; SI-NEXT:    v_mov_b32_e32 v6, 0xffff0000
806 ; SI-NEXT:    v_bfrev_b32_e32 v7, 1
807 ; SI-NEXT:    v_cmp_lt_i32_e32 vcc, -1, v0
808 ; SI-NEXT:    v_cndmask_b32_e32 v0, v4, v5, vcc
809 ; SI-NEXT:    v_cmp_lt_i32_e32 vcc, -1, v1
810 ; SI-NEXT:    v_cndmask_b32_e32 v1, v6, v7, vcc
811 ; SI-NEXT:    v_cmp_lt_i32_e32 vcc, -1, v2
812 ; SI-NEXT:    v_cndmask_b32_e32 v2, v4, v5, vcc
813 ; SI-NEXT:    v_cmp_lt_i32_e32 vcc, -1, v3
814 ; SI-NEXT:    v_cndmask_b32_e32 v3, v6, v7, vcc
815 ; SI-NEXT:    v_or_b32_e32 v0, v0, v1
816 ; SI-NEXT:    v_or_b32_e32 v2, v2, v3
817 ; SI-NEXT:    v_alignbit_b32 v1, v2, v1, 16
818 ; SI-NEXT:    v_lshrrev_b32_e32 v3, 16, v3
819 ; SI-NEXT:    s_setpc_b64 s[30:31]
821 ; GFX9-LABEL: vec_16xi16_extract_4xi16_2:
822 ; GFX9:       ; %bb.0:
823 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
824 ; GFX9-NEXT:    s_cbranch_scc0 .LBB4_2
825 ; GFX9-NEXT:  ; %bb.1: ; %F
826 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:16 glc
827 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
828 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off glc
829 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
830 ; GFX9-NEXT:    ; kill: killed $vgpr2 killed $vgpr3
831 ; GFX9-NEXT:    s_cbranch_execz .LBB4_3
832 ; GFX9-NEXT:    s_branch .LBB4_4
833 ; GFX9-NEXT:  .LBB4_2:
834 ; GFX9-NEXT:    ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11
835 ; GFX9-NEXT:  .LBB4_3: ; %T
836 ; GFX9-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off offset:16 glc
837 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
838 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off glc
839 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
840 ; GFX9-NEXT:    ; kill: killed $vgpr0 killed $vgpr1
841 ; GFX9-NEXT:  .LBB4_4: ; %exit
842 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
843 ; GFX9-NEXT:    v_pk_ashrrev_i16 v0, 15, v7 op_sel_hi:[0,1]
844 ; GFX9-NEXT:    s_movk_i32 s4, 0x8000
845 ; GFX9-NEXT:    v_or_b32_e32 v1, 0xffff8000, v0
846 ; GFX9-NEXT:    v_or_b32_sdwa v2, v0, s4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
847 ; GFX9-NEXT:    v_pk_ashrrev_i16 v0, 15, v6 op_sel_hi:[0,1]
848 ; GFX9-NEXT:    v_or_b32_e32 v3, 0xffff8000, v0
849 ; GFX9-NEXT:    v_or_b32_sdwa v0, v0, s4 dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
850 ; GFX9-NEXT:    s_mov_b32 s4, 0x5040100
851 ; GFX9-NEXT:    v_perm_b32 v0, v0, v3, s4
852 ; GFX9-NEXT:    v_perm_b32 v1, v2, v1, s4
853 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
855 ; GFX11-LABEL: vec_16xi16_extract_4xi16_2:
856 ; GFX11:       ; %bb.0:
857 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
858 ; GFX11-NEXT:    s_cbranch_scc0 .LBB4_2
859 ; GFX11-NEXT:  ; %bb.1: ; %F
860 ; GFX11-NEXT:    global_load_b128 v[4:7], v[2:3], off offset:16 glc dlc
861 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
862 ; GFX11-NEXT:    global_load_b128 v[2:5], v[2:3], off glc dlc
863 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
864 ; GFX11-NEXT:    s_cbranch_execz .LBB4_3
865 ; GFX11-NEXT:    s_branch .LBB4_4
866 ; GFX11-NEXT:  .LBB4_2:
867 ; GFX11-NEXT:    ; implicit-def: $vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9
868 ; GFX11-NEXT:  .LBB4_3: ; %T
869 ; GFX11-NEXT:    global_load_b128 v[2:5], v[0:1], off offset:16 glc dlc
870 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
871 ; GFX11-NEXT:    global_load_b128 v[2:5], v[0:1], off glc dlc
872 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
873 ; GFX11-NEXT:  .LBB4_4: ; %exit
874 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
875 ; GFX11-NEXT:    v_pk_ashrrev_i16 v0, 15, v4 op_sel_hi:[0,1]
876 ; GFX11-NEXT:    v_pk_ashrrev_i16 v1, 15, v5 op_sel_hi:[0,1]
877 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
878 ; GFX11-NEXT:    v_lshrrev_b32_e32 v2, 16, v0
879 ; GFX11-NEXT:    v_lshrrev_b32_e32 v3, 16, v1
880 ; GFX11-NEXT:    v_or_b32_e32 v1, 0xffff8000, v1
881 ; GFX11-NEXT:    v_or_b32_e32 v0, 0xffff8000, v0
882 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_4) | instskip(NEXT) | instid1(VALU_DEP_4)
883 ; GFX11-NEXT:    v_or_b32_e32 v2, 0xffff8000, v2
884 ; GFX11-NEXT:    v_or_b32_e32 v3, 0xffff8000, v3
885 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(NEXT) | instid1(VALU_DEP_2)
886 ; GFX11-NEXT:    v_perm_b32 v0, v2, v0, 0x5040100
887 ; GFX11-NEXT:    v_perm_b32 v1, v3, v1, 0x5040100
888 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
889   br i1 undef, label %T, label %F
892   %t = load volatile <16 x i16>, ptr addrspace(1) %p0
893   br label %exit
896   %f = load volatile <16 x i16>, ptr addrspace(1) %p1
897   br label %exit
899 exit:
900   %m = phi <16 x i16> [ %t, %T ], [ %f, %F ]
901   %v2 = shufflevector <16 x i16> %m, <16 x i16> undef, <4 x i32> <i32 4, i32 5, i32 6, i32 7>
902   %b2 = icmp sgt <4 x i16> %v2, <i16 -1, i16 -1, i16 -1, i16 -1>
903   %r2 = select <4 x i1> %b2, <4 x i16> <i16 -32768, i16 -32768, i16 -32768, i16 -32768>, <4 x i16> <i16 -1, i16 -1, i16 -1, i16 -1>
904   ret <4 x i16> %r2
907 define <4 x half> @vec_16xf16_extract_4xf16(ptr addrspace(1) %p0, ptr addrspace(1) %p1) {
909 ; SI-LABEL: vec_16xf16_extract_4xf16:
910 ; SI:       ; %bb.0:
911 ; SI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
912 ; SI-NEXT:    s_cbranch_scc0 .LBB5_2
913 ; SI-NEXT:  ; %bb.1: ; %F
914 ; SI-NEXT:    s_mov_b32 s6, 0
915 ; SI-NEXT:    s_mov_b32 s7, 0xf000
916 ; SI-NEXT:    s_mov_b32 s4, s6
917 ; SI-NEXT:    s_mov_b32 s5, s6
918 ; SI-NEXT:    buffer_load_ushort v4, v[2:3], s[4:7], 0 addr64 glc
919 ; SI-NEXT:    s_waitcnt vmcnt(0)
920 ; SI-NEXT:    buffer_load_ushort v5, v[2:3], s[4:7], 0 addr64 offset:2 glc
921 ; SI-NEXT:    s_waitcnt vmcnt(0)
922 ; SI-NEXT:    buffer_load_ushort v6, v[2:3], s[4:7], 0 addr64 offset:4 glc
923 ; SI-NEXT:    s_waitcnt vmcnt(0)
924 ; SI-NEXT:    buffer_load_ushort v7, v[2:3], s[4:7], 0 addr64 offset:6 glc
925 ; SI-NEXT:    s_waitcnt vmcnt(0)
926 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:8 glc
927 ; SI-NEXT:    s_waitcnt vmcnt(0)
928 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:10 glc
929 ; SI-NEXT:    s_waitcnt vmcnt(0)
930 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:12 glc
931 ; SI-NEXT:    s_waitcnt vmcnt(0)
932 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:14 glc
933 ; SI-NEXT:    s_waitcnt vmcnt(0)
934 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:16 glc
935 ; SI-NEXT:    s_waitcnt vmcnt(0)
936 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:18 glc
937 ; SI-NEXT:    s_waitcnt vmcnt(0)
938 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:20 glc
939 ; SI-NEXT:    s_waitcnt vmcnt(0)
940 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:22 glc
941 ; SI-NEXT:    s_waitcnt vmcnt(0)
942 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:24 glc
943 ; SI-NEXT:    s_waitcnt vmcnt(0)
944 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:26 glc
945 ; SI-NEXT:    s_waitcnt vmcnt(0)
946 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[4:7], 0 addr64 offset:28 glc
947 ; SI-NEXT:    s_waitcnt vmcnt(0)
948 ; SI-NEXT:    buffer_load_ushort v2, v[2:3], s[4:7], 0 addr64 offset:30 glc
949 ; SI-NEXT:    s_waitcnt vmcnt(0)
950 ; SI-NEXT:    v_lshlrev_b32_e32 v2, 16, v7
951 ; SI-NEXT:    v_lshlrev_b32_e32 v7, 16, v5
952 ; SI-NEXT:    v_cvt_f32_f16_e32 v3, v5
953 ; SI-NEXT:    v_or_b32_e32 v2, v6, v2
954 ; SI-NEXT:    v_or_b32_e32 v4, v4, v7
955 ; SI-NEXT:    v_cvt_f32_f16_e32 v2, v2
956 ; SI-NEXT:    v_cvt_f32_f16_e32 v4, v4
957 ; SI-NEXT:    s_mov_b64 vcc, exec
958 ; SI-NEXT:    s_cbranch_execz .LBB5_3
959 ; SI-NEXT:    s_branch .LBB5_4
960 ; SI-NEXT:  .LBB5_2:
961 ; SI-NEXT:    ; implicit-def: $vgpr4
962 ; SI-NEXT:    ; implicit-def: $vgpr3
963 ; SI-NEXT:    ; implicit-def: $vgpr2
964 ; SI-NEXT:    s_mov_b64 vcc, 0
965 ; SI-NEXT:  .LBB5_3: ; %T
966 ; SI-NEXT:    s_mov_b32 s6, 0
967 ; SI-NEXT:    s_mov_b32 s7, 0xf000
968 ; SI-NEXT:    s_mov_b32 s4, s6
969 ; SI-NEXT:    s_mov_b32 s5, s6
970 ; SI-NEXT:    buffer_load_ushort v2, v[0:1], s[4:7], 0 addr64 glc
971 ; SI-NEXT:    s_waitcnt vmcnt(0)
972 ; SI-NEXT:    buffer_load_ushort v3, v[0:1], s[4:7], 0 addr64 offset:2 glc
973 ; SI-NEXT:    s_waitcnt vmcnt(0)
974 ; SI-NEXT:    buffer_load_ushort v4, v[0:1], s[4:7], 0 addr64 offset:4 glc
975 ; SI-NEXT:    s_waitcnt vmcnt(0)
976 ; SI-NEXT:    buffer_load_ushort v5, v[0:1], s[4:7], 0 addr64 offset:6 glc
977 ; SI-NEXT:    s_waitcnt vmcnt(0)
978 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:8 glc
979 ; SI-NEXT:    s_waitcnt vmcnt(0)
980 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:10 glc
981 ; SI-NEXT:    s_waitcnt vmcnt(0)
982 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:12 glc
983 ; SI-NEXT:    s_waitcnt vmcnt(0)
984 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:14 glc
985 ; SI-NEXT:    s_waitcnt vmcnt(0)
986 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:16 glc
987 ; SI-NEXT:    s_waitcnt vmcnt(0)
988 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:18 glc
989 ; SI-NEXT:    s_waitcnt vmcnt(0)
990 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:20 glc
991 ; SI-NEXT:    s_waitcnt vmcnt(0)
992 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:22 glc
993 ; SI-NEXT:    s_waitcnt vmcnt(0)
994 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:24 glc
995 ; SI-NEXT:    s_waitcnt vmcnt(0)
996 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:26 glc
997 ; SI-NEXT:    s_waitcnt vmcnt(0)
998 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[4:7], 0 addr64 offset:28 glc
999 ; SI-NEXT:    s_waitcnt vmcnt(0)
1000 ; SI-NEXT:    buffer_load_ushort v0, v[0:1], s[4:7], 0 addr64 offset:30 glc
1001 ; SI-NEXT:    s_waitcnt vmcnt(0)
1002 ; SI-NEXT:    v_lshlrev_b32_e32 v0, 16, v5
1003 ; SI-NEXT:    v_lshlrev_b32_e32 v1, 16, v3
1004 ; SI-NEXT:    v_or_b32_e32 v0, v4, v0
1005 ; SI-NEXT:    v_or_b32_e32 v1, v2, v1
1006 ; SI-NEXT:    v_cvt_f32_f16_e32 v2, v0
1007 ; SI-NEXT:    v_cvt_f32_f16_e32 v4, v1
1008 ; SI-NEXT:    v_cvt_f32_f16_e32 v3, v3
1009 ; SI-NEXT:  .LBB5_4: ; %exit
1010 ; SI-NEXT:    v_cvt_f16_f32_e32 v0, v4
1011 ; SI-NEXT:    v_cvt_f16_f32_e32 v1, v3
1012 ; SI-NEXT:    v_cvt_f16_f32_e32 v2, v2
1013 ; SI-NEXT:    v_mov_b32_e32 v3, 0x3fa00000
1014 ; SI-NEXT:    v_mov_b32_e32 v4, 0x3f200000
1015 ; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0
1016 ; SI-NEXT:    v_cvt_f32_f16_e32 v1, v1
1017 ; SI-NEXT:    v_cvt_f32_f16_e32 v2, v2
1018 ; SI-NEXT:    v_cmp_nge_f32_e32 vcc, 0.5, v0
1019 ; SI-NEXT:    v_cndmask_b32_e32 v0, v3, v4, vcc
1020 ; SI-NEXT:    v_cmp_nge_f32_e32 vcc, 0.5, v1
1021 ; SI-NEXT:    v_cndmask_b32_e32 v1, v3, v4, vcc
1022 ; SI-NEXT:    v_cmp_nge_f32_e32 vcc, 0.5, v2
1023 ; SI-NEXT:    v_cndmask_b32_e32 v2, v3, v4, vcc
1024 ; SI-NEXT:    v_mov_b32_e32 v3, v2
1025 ; SI-NEXT:    s_setpc_b64 s[30:31]
1027 ; GFX9-LABEL: vec_16xf16_extract_4xf16:
1028 ; GFX9:       ; %bb.0:
1029 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1030 ; GFX9-NEXT:    s_cbranch_scc0 .LBB5_2
1031 ; GFX9-NEXT:  ; %bb.1: ; %F
1032 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:16 glc
1033 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1034 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off glc
1035 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1036 ; GFX9-NEXT:    ; kill: killed $vgpr2 killed $vgpr3
1037 ; GFX9-NEXT:    s_cbranch_execz .LBB5_3
1038 ; GFX9-NEXT:    s_branch .LBB5_4
1039 ; GFX9-NEXT:  .LBB5_2:
1040 ; GFX9-NEXT:    ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11
1041 ; GFX9-NEXT:  .LBB5_3: ; %T
1042 ; GFX9-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off offset:16 glc
1043 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1044 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off glc
1045 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1046 ; GFX9-NEXT:    ; kill: killed $vgpr0 killed $vgpr1
1047 ; GFX9-NEXT:  .LBB5_4: ; %exit
1048 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x3900
1049 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0x3d00
1050 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1051 ; GFX9-NEXT:    v_cmp_ge_f16_e32 vcc, 0.5, v4
1052 ; GFX9-NEXT:    v_mov_b32_e32 v3, 0x3800
1053 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v0, v1, vcc
1054 ; GFX9-NEXT:    v_cmp_le_f16_sdwa vcc, v4, v3 src0_sel:WORD_1 src1_sel:DWORD
1055 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v0, v1, vcc
1056 ; GFX9-NEXT:    v_cmp_nge_f16_e32 vcc, 0.5, v5
1057 ; GFX9-NEXT:    v_cndmask_b32_e32 v4, v1, v0, vcc
1058 ; GFX9-NEXT:    v_cmp_ge_f16_e32 vcc, 0.5, v5
1059 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
1060 ; GFX9-NEXT:    v_pack_b32_f16 v1, v0, v4
1061 ; GFX9-NEXT:    v_pack_b32_f16 v0, v2, v3
1062 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1064 ; GFX11-LABEL: vec_16xf16_extract_4xf16:
1065 ; GFX11:       ; %bb.0:
1066 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1067 ; GFX11-NEXT:    s_cbranch_scc0 .LBB5_2
1068 ; GFX11-NEXT:  ; %bb.1: ; %F
1069 ; GFX11-NEXT:    global_load_b128 v[4:7], v[2:3], off offset:16 glc dlc
1070 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1071 ; GFX11-NEXT:    global_load_b128 v[2:5], v[2:3], off glc dlc
1072 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1073 ; GFX11-NEXT:    s_cbranch_execz .LBB5_3
1074 ; GFX11-NEXT:    s_branch .LBB5_4
1075 ; GFX11-NEXT:  .LBB5_2:
1076 ; GFX11-NEXT:    ; implicit-def: $vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9
1077 ; GFX11-NEXT:  .LBB5_3: ; %T
1078 ; GFX11-NEXT:    global_load_b128 v[2:5], v[0:1], off offset:16 glc dlc
1079 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1080 ; GFX11-NEXT:    global_load_b128 v[2:5], v[0:1], off glc dlc
1081 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1082 ; GFX11-NEXT:  .LBB5_4: ; %exit
1083 ; GFX11-NEXT:    v_mov_b32_e32 v0, 0x3d00
1084 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1085 ; GFX11-NEXT:    v_lshrrev_b32_e32 v1, 16, v2
1086 ; GFX11-NEXT:    v_cmp_ge_f16_e32 vcc_lo, 0.5, v2
1087 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_3) | instskip(NEXT) | instid1(VALU_DEP_3)
1088 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, 0x3900, v0, vcc_lo
1089 ; GFX11-NEXT:    v_cmp_ge_f16_e32 vcc_lo, 0.5, v1
1090 ; GFX11-NEXT:    v_dual_mov_b32 v4, 0x3900 :: v_dual_cndmask_b32 v1, 0x3900, v0
1091 ; GFX11-NEXT:    v_cmp_nge_f16_e32 vcc_lo, 0.5, v3
1092 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_2)
1093 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, 0x3d00, v4, vcc_lo
1094 ; GFX11-NEXT:    v_cmp_ge_f16_e32 vcc_lo, 0.5, v3
1095 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, 0x3900, v0, vcc_lo
1096 ; GFX11-NEXT:    v_pack_b32_f16 v0, v2, v1
1097 ; GFX11-NEXT:    v_pack_b32_f16 v1, v3, v4
1098 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1099   br i1 undef, label %T, label %F
1102   %t = load volatile <16 x half>, ptr addrspace(1) %p0
1103   br label %exit
1106   %f = load volatile <16 x half>, ptr addrspace(1) %p1
1107   br label %exit
1109 exit:
1110   %m = phi <16 x half> [ %t, %T ], [ %f, %F ]
1111   %v2 = shufflevector <16 x half> %m, <16 x half> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 2>
1112   %b2 = fcmp ugt <4 x half> %v2, <half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800>
1113   %r2 = select <4 x i1> %b2, <4 x half> <half 0xH3900, half 0xH3900, half 0xH3900, half 0xH3900>, <4 x half> <half 0xH3D00, half 0xH3D00, half 0xH3D00, half 0xH3D00>
1114   ret <4 x half> %r2
1117 define <8 x i16> @large_vector(ptr addrspace(3) %p, i32 %idxp) {
1118 ; SI-LABEL: large_vector:
1119 ; SI:       ; %bb.0:
1120 ; SI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1121 ; SI-NEXT:    v_lshlrev_b32_e32 v1, 5, v1
1122 ; SI-NEXT:    v_add_i32_e32 v0, vcc, v0, v1
1123 ; SI-NEXT:    v_add_i32_e32 v1, vcc, 4, v0
1124 ; SI-NEXT:    v_add_i32_e32 v3, vcc, 8, v0
1125 ; SI-NEXT:    v_add_i32_e32 v5, vcc, 12, v0
1126 ; SI-NEXT:    s_mov_b32 m0, -1
1127 ; SI-NEXT:    ds_read_b32 v0, v0
1128 ; SI-NEXT:    ds_read_b32 v2, v1
1129 ; SI-NEXT:    ds_read_b32 v4, v3
1130 ; SI-NEXT:    ds_read_b32 v6, v5
1131 ; SI-NEXT:    s_waitcnt lgkmcnt(3)
1132 ; SI-NEXT:    v_lshrrev_b32_e32 v1, 16, v0
1133 ; SI-NEXT:    s_waitcnt lgkmcnt(2)
1134 ; SI-NEXT:    v_lshrrev_b32_e32 v3, 16, v2
1135 ; SI-NEXT:    s_waitcnt lgkmcnt(1)
1136 ; SI-NEXT:    v_lshrrev_b32_e32 v5, 16, v4
1137 ; SI-NEXT:    s_waitcnt lgkmcnt(0)
1138 ; SI-NEXT:    v_lshrrev_b32_e32 v7, 16, v6
1139 ; SI-NEXT:    s_setpc_b64 s[30:31]
1141 ; GFX9-LABEL: large_vector:
1142 ; GFX9:       ; %bb.0:
1143 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1144 ; GFX9-NEXT:    v_lshl_add_u32 v2, v1, 5, v0
1145 ; GFX9-NEXT:    ds_read2_b32 v[0:1], v2 offset1:1
1146 ; GFX9-NEXT:    ds_read2_b32 v[2:3], v2 offset0:2 offset1:3
1147 ; GFX9-NEXT:    s_waitcnt lgkmcnt(0)
1148 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1150 ; GFX11-LABEL: large_vector:
1151 ; GFX11:       ; %bb.0:
1152 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1153 ; GFX11-NEXT:    v_lshl_add_u32 v2, v1, 5, v0
1154 ; GFX11-NEXT:    ds_load_2addr_b32 v[0:1], v2 offset1:1
1155 ; GFX11-NEXT:    ds_load_2addr_b32 v[2:3], v2 offset0:2 offset1:3
1156 ; GFX11-NEXT:    s_waitcnt lgkmcnt(0)
1157 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1158   %idx = shl i32 %idxp, 4
1160   %i.0 = or i32 %idx, 0
1161   %p.0 = getelementptr half, ptr addrspace(3) %p, i32 %i.0
1162   %x.0 = load i16, ptr addrspace(3) %p.0, align 4
1163   %v0p = insertelement <8 x i16> poison, i16 %x.0, i32 0
1164   %i.1 = or i32 %idx, 1
1165   %p.1 = getelementptr half, ptr addrspace(3) %p, i32 %i.1
1166   %x.1 = load i16, ptr addrspace(3) %p.1, align 2
1167   %v0 = insertelement <8 x i16> %v0p, i16 %x.1, i32 1
1169   %i.2 = or i32 %idx, 2
1170   %p.2 = getelementptr half, ptr addrspace(3) %p, i32 %i.2
1171   %x.2 = load i16, ptr addrspace(3) %p.2, align 4
1172   %v1p = insertelement <8 x i16> poison, i16 %x.2, i32 0
1173   %i.3 = or i32 %idx, 3
1174   %p.3 = getelementptr half, ptr addrspace(3) %p, i32 %i.3
1175   %x.3 = load i16, ptr addrspace(3) %p.3, align 2
1176   %v1 = insertelement <8 x i16> %v1p, i16 %x.3, i32 1
1178   %i.4 = or i32 %idx, 4
1179   %p.4 = getelementptr half, ptr addrspace(3) %p, i32 %i.4
1180   %x.4 = load i16, ptr addrspace(3) %p.4, align 4
1181   %v2p = insertelement <8 x i16> poison, i16 %x.4, i32 0
1182   %i.5 = or i32 %idx, 5
1183   %p.5 = getelementptr half, ptr addrspace(3) %p, i32 %i.5
1184   %x.5 = load i16, ptr addrspace(3) %p.5, align 2
1185   %v2 = insertelement <8 x i16> %v2p, i16 %x.5, i32 1
1187   %i.6 = or i32 %idx, 6
1188   %p.6 = getelementptr half, ptr addrspace(3) %p, i32 %i.6
1189   %x.6 = load i16, ptr addrspace(3) %p.6, align 4
1190   %v3p = insertelement <8 x i16> poison, i16 %x.6, i32 0
1191   %i.7 = or i32 %idx, 7
1192   %p.7 = getelementptr half, ptr addrspace(3) %p, i32 %i.7
1193   %x.7 = load i16, ptr addrspace(3) %p.7, align 2
1194   %v3 = insertelement <8 x i16> %v3p, i16 %x.7, i32 1
1196   %z.1 = shufflevector <8 x i16> %v0, <8 x i16> %v1, <8 x i32> <i32 0, i32 1, i32 8, i32 9, i32 undef, i32 undef, i32 undef, i32 undef>
1197   %z.2 = shufflevector <8 x i16> %z.1, <8 x i16> %v2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 undef, i32 undef>
1198   %z.3 = shufflevector <8 x i16> %z.2, <8 x i16> %v3, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 8, i32 9>
1199   ret <8 x i16> %z.3
1202 define amdgpu_gfx <8 x i16> @vec_16xi16_extract_8xi16_0(i1 inreg %cond, ptr addrspace(1) %p0, ptr addrspace(1) %p1) {
1203 ; SI-LABEL: vec_16xi16_extract_8xi16_0:
1204 ; SI:       ; %bb.0:
1205 ; SI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1206 ; SI-NEXT:    buffer_load_ubyte v4, off, s[0:3], s32
1207 ; SI-NEXT:    s_waitcnt vmcnt(0)
1208 ; SI-NEXT:    v_and_b32_e32 v4, 1, v4
1209 ; SI-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v4
1210 ; SI-NEXT:    s_and_b64 s[34:35], vcc, exec
1211 ; SI-NEXT:    s_mov_b32 s38, 0
1212 ; SI-NEXT:    s_cbranch_scc0 .LBB7_2
1213 ; SI-NEXT:  ; %bb.1: ; %F
1214 ; SI-NEXT:    s_mov_b32 s39, 0xf000
1215 ; SI-NEXT:    s_mov_b32 s36, s38
1216 ; SI-NEXT:    s_mov_b32 s37, s38
1217 ; SI-NEXT:    buffer_load_ushort v9, v[2:3], s[36:39], 0 addr64 glc
1218 ; SI-NEXT:    s_waitcnt vmcnt(0)
1219 ; SI-NEXT:    buffer_load_ushort v5, v[2:3], s[36:39], 0 addr64 offset:2 glc
1220 ; SI-NEXT:    s_waitcnt vmcnt(0)
1221 ; SI-NEXT:    buffer_load_ushort v10, v[2:3], s[36:39], 0 addr64 offset:4 glc
1222 ; SI-NEXT:    s_waitcnt vmcnt(0)
1223 ; SI-NEXT:    buffer_load_ushort v4, v[2:3], s[36:39], 0 addr64 offset:6 glc
1224 ; SI-NEXT:    s_waitcnt vmcnt(0)
1225 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[36:39], 0 addr64 offset:8 glc
1226 ; SI-NEXT:    s_waitcnt vmcnt(0)
1227 ; SI-NEXT:    buffer_load_ushort v6, v[2:3], s[36:39], 0 addr64 offset:10 glc
1228 ; SI-NEXT:    s_waitcnt vmcnt(0)
1229 ; SI-NEXT:    buffer_load_ushort v11, v[2:3], s[36:39], 0 addr64 offset:12 glc
1230 ; SI-NEXT:    s_waitcnt vmcnt(0)
1231 ; SI-NEXT:    buffer_load_ushort v7, v[2:3], s[36:39], 0 addr64 offset:14 glc
1232 ; SI-NEXT:    s_waitcnt vmcnt(0)
1233 ; SI-NEXT:    buffer_load_ushort v12, v[2:3], s[36:39], 0 addr64 offset:16 glc
1234 ; SI-NEXT:    s_waitcnt vmcnt(0)
1235 ; SI-NEXT:    buffer_load_ushort v12, v[2:3], s[36:39], 0 addr64 offset:18 glc
1236 ; SI-NEXT:    s_waitcnt vmcnt(0)
1237 ; SI-NEXT:    buffer_load_ushort v12, v[2:3], s[36:39], 0 addr64 offset:20 glc
1238 ; SI-NEXT:    s_waitcnt vmcnt(0)
1239 ; SI-NEXT:    buffer_load_ushort v12, v[2:3], s[36:39], 0 addr64 offset:22 glc
1240 ; SI-NEXT:    s_waitcnt vmcnt(0)
1241 ; SI-NEXT:    buffer_load_ushort v12, v[2:3], s[36:39], 0 addr64 offset:24 glc
1242 ; SI-NEXT:    s_waitcnt vmcnt(0)
1243 ; SI-NEXT:    buffer_load_ushort v12, v[2:3], s[36:39], 0 addr64 offset:26 glc
1244 ; SI-NEXT:    s_waitcnt vmcnt(0)
1245 ; SI-NEXT:    buffer_load_ushort v12, v[2:3], s[36:39], 0 addr64 offset:28 glc
1246 ; SI-NEXT:    s_waitcnt vmcnt(0)
1247 ; SI-NEXT:    buffer_load_ushort v2, v[2:3], s[36:39], 0 addr64 offset:30 glc
1248 ; SI-NEXT:    s_waitcnt vmcnt(0)
1249 ; SI-NEXT:    v_lshlrev_b32_e32 v2, 16, v7
1250 ; SI-NEXT:    v_lshlrev_b32_e32 v12, 16, v6
1251 ; SI-NEXT:    v_lshlrev_b32_e32 v13, 16, v4
1252 ; SI-NEXT:    v_lshlrev_b32_e32 v14, 16, v5
1253 ; SI-NEXT:    v_or_b32_e32 v3, v11, v2
1254 ; SI-NEXT:    v_or_b32_e32 v8, v8, v12
1255 ; SI-NEXT:    v_or_b32_e32 v2, v10, v13
1256 ; SI-NEXT:    v_or_b32_e32 v9, v9, v14
1257 ; SI-NEXT:    s_mov_b64 vcc, exec
1258 ; SI-NEXT:    s_cbranch_execz .LBB7_3
1259 ; SI-NEXT:    s_branch .LBB7_4
1260 ; SI-NEXT:  .LBB7_2:
1261 ; SI-NEXT:    ; implicit-def: $vgpr9
1262 ; SI-NEXT:    ; implicit-def: $vgpr5
1263 ; SI-NEXT:    ; implicit-def: $vgpr2
1264 ; SI-NEXT:    ; implicit-def: $vgpr4
1265 ; SI-NEXT:    ; implicit-def: $vgpr8
1266 ; SI-NEXT:    ; implicit-def: $vgpr6
1267 ; SI-NEXT:    ; implicit-def: $vgpr3
1268 ; SI-NEXT:    ; implicit-def: $vgpr7
1269 ; SI-NEXT:    s_mov_b64 vcc, 0
1270 ; SI-NEXT:  .LBB7_3: ; %T
1271 ; SI-NEXT:    s_mov_b32 s39, 0xf000
1272 ; SI-NEXT:    s_mov_b32 s36, s38
1273 ; SI-NEXT:    s_mov_b32 s37, s38
1274 ; SI-NEXT:    buffer_load_ushort v9, v[0:1], s[36:39], 0 addr64 glc
1275 ; SI-NEXT:    s_waitcnt vmcnt(0)
1276 ; SI-NEXT:    buffer_load_ushort v5, v[0:1], s[36:39], 0 addr64 offset:2 glc
1277 ; SI-NEXT:    s_waitcnt vmcnt(0)
1278 ; SI-NEXT:    buffer_load_ushort v2, v[0:1], s[36:39], 0 addr64 offset:4 glc
1279 ; SI-NEXT:    s_waitcnt vmcnt(0)
1280 ; SI-NEXT:    buffer_load_ushort v4, v[0:1], s[36:39], 0 addr64 offset:6 glc
1281 ; SI-NEXT:    s_waitcnt vmcnt(0)
1282 ; SI-NEXT:    buffer_load_ushort v8, v[0:1], s[36:39], 0 addr64 offset:8 glc
1283 ; SI-NEXT:    s_waitcnt vmcnt(0)
1284 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[36:39], 0 addr64 offset:10 glc
1285 ; SI-NEXT:    s_waitcnt vmcnt(0)
1286 ; SI-NEXT:    buffer_load_ushort v3, v[0:1], s[36:39], 0 addr64 offset:12 glc
1287 ; SI-NEXT:    s_waitcnt vmcnt(0)
1288 ; SI-NEXT:    buffer_load_ushort v7, v[0:1], s[36:39], 0 addr64 offset:14 glc
1289 ; SI-NEXT:    s_waitcnt vmcnt(0)
1290 ; SI-NEXT:    buffer_load_ushort v10, v[0:1], s[36:39], 0 addr64 offset:16 glc
1291 ; SI-NEXT:    s_waitcnt vmcnt(0)
1292 ; SI-NEXT:    buffer_load_ushort v10, v[0:1], s[36:39], 0 addr64 offset:18 glc
1293 ; SI-NEXT:    s_waitcnt vmcnt(0)
1294 ; SI-NEXT:    buffer_load_ushort v10, v[0:1], s[36:39], 0 addr64 offset:20 glc
1295 ; SI-NEXT:    s_waitcnt vmcnt(0)
1296 ; SI-NEXT:    buffer_load_ushort v10, v[0:1], s[36:39], 0 addr64 offset:22 glc
1297 ; SI-NEXT:    s_waitcnt vmcnt(0)
1298 ; SI-NEXT:    buffer_load_ushort v10, v[0:1], s[36:39], 0 addr64 offset:24 glc
1299 ; SI-NEXT:    s_waitcnt vmcnt(0)
1300 ; SI-NEXT:    buffer_load_ushort v10, v[0:1], s[36:39], 0 addr64 offset:26 glc
1301 ; SI-NEXT:    s_waitcnt vmcnt(0)
1302 ; SI-NEXT:    buffer_load_ushort v10, v[0:1], s[36:39], 0 addr64 offset:28 glc
1303 ; SI-NEXT:    s_waitcnt vmcnt(0)
1304 ; SI-NEXT:    buffer_load_ushort v0, v[0:1], s[36:39], 0 addr64 offset:30 glc
1305 ; SI-NEXT:    s_waitcnt vmcnt(0)
1306 ; SI-NEXT:    v_lshlrev_b32_e32 v0, 16, v7
1307 ; SI-NEXT:    v_lshlrev_b32_e32 v1, 16, v6
1308 ; SI-NEXT:    v_lshlrev_b32_e32 v10, 16, v4
1309 ; SI-NEXT:    v_lshlrev_b32_e32 v11, 16, v5
1310 ; SI-NEXT:    v_or_b32_e32 v3, v3, v0
1311 ; SI-NEXT:    v_or_b32_e32 v8, v8, v1
1312 ; SI-NEXT:    v_or_b32_e32 v2, v2, v10
1313 ; SI-NEXT:    v_or_b32_e32 v9, v9, v11
1314 ; SI-NEXT:  .LBB7_4: ; %exit
1315 ; SI-NEXT:    v_and_b32_e32 v0, 0xffff, v9
1316 ; SI-NEXT:    v_and_b32_e32 v1, 0xffff, v5
1317 ; SI-NEXT:    v_and_b32_e32 v5, 0xffff, v8
1318 ; SI-NEXT:    v_and_b32_e32 v6, 0xffff, v6
1319 ; SI-NEXT:    v_and_b32_e32 v3, 0xffff, v3
1320 ; SI-NEXT:    v_and_b32_e32 v7, 0xffff, v7
1321 ; SI-NEXT:    v_and_b32_e32 v2, 0xffff, v2
1322 ; SI-NEXT:    v_and_b32_e32 v4, 0xffff, v4
1323 ; SI-NEXT:    s_movk_i32 s34, 0x3800
1324 ; SI-NEXT:    v_mov_b32_e32 v8, 0x3d00
1325 ; SI-NEXT:    v_mov_b32_e32 v9, 0x3900
1326 ; SI-NEXT:    v_mov_b32_e32 v10, 0x3d000000
1327 ; SI-NEXT:    v_mov_b32_e32 v11, 0x39000000
1328 ; SI-NEXT:    v_cmp_lt_u32_e32 vcc, s34, v0
1329 ; SI-NEXT:    v_cndmask_b32_e32 v0, v8, v9, vcc
1330 ; SI-NEXT:    v_cmp_lt_u32_e32 vcc, s34, v1
1331 ; SI-NEXT:    v_cndmask_b32_e32 v1, v10, v11, vcc
1332 ; SI-NEXT:    v_cmp_lt_u32_e32 vcc, s34, v5
1333 ; SI-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
1334 ; SI-NEXT:    v_cmp_lt_u32_e32 vcc, s34, v6
1335 ; SI-NEXT:    v_cndmask_b32_e32 v12, v10, v11, vcc
1336 ; SI-NEXT:    v_cmp_lt_u32_e32 vcc, s34, v3
1337 ; SI-NEXT:    v_cndmask_b32_e32 v3, v8, v9, vcc
1338 ; SI-NEXT:    v_cmp_lt_u32_e32 vcc, s34, v7
1339 ; SI-NEXT:    v_cndmask_b32_e32 v7, v10, v11, vcc
1340 ; SI-NEXT:    v_cmp_lt_u32_e32 vcc, s34, v2
1341 ; SI-NEXT:    v_cndmask_b32_e32 v2, v8, v9, vcc
1342 ; SI-NEXT:    v_cmp_lt_u32_e32 vcc, s34, v4
1343 ; SI-NEXT:    v_cndmask_b32_e32 v8, v10, v11, vcc
1344 ; SI-NEXT:    v_or_b32_e32 v0, v0, v1
1345 ; SI-NEXT:    v_or_b32_e32 v4, v5, v12
1346 ; SI-NEXT:    v_or_b32_e32 v6, v3, v7
1347 ; SI-NEXT:    v_or_b32_e32 v2, v2, v8
1348 ; SI-NEXT:    v_lshrrev_b32_e32 v3, 16, v8
1349 ; SI-NEXT:    v_alignbit_b32 v1, v2, v1, 16
1350 ; SI-NEXT:    v_alignbit_b32 v5, v6, v12, 16
1351 ; SI-NEXT:    v_lshrrev_b32_e32 v7, 16, v7
1352 ; SI-NEXT:    s_setpc_b64 s[30:31]
1354 ; GFX9-LABEL: vec_16xi16_extract_8xi16_0:
1355 ; GFX9:       ; %bb.0:
1356 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1357 ; GFX9-NEXT:    buffer_load_ubyte v4, off, s[0:3], s32
1358 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1359 ; GFX9-NEXT:    v_and_b32_e32 v4, 1, v4
1360 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v4
1361 ; GFX9-NEXT:    s_and_b64 s[34:35], vcc, exec
1362 ; GFX9-NEXT:    s_cbranch_scc0 .LBB7_2
1363 ; GFX9-NEXT:  ; %bb.1: ; %F
1364 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:16 glc
1365 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1366 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off glc
1367 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1368 ; GFX9-NEXT:    ; kill: killed $vgpr2 killed $vgpr3
1369 ; GFX9-NEXT:    s_cbranch_execz .LBB7_3
1370 ; GFX9-NEXT:    s_branch .LBB7_4
1371 ; GFX9-NEXT:  .LBB7_2:
1372 ; GFX9-NEXT:    ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11
1373 ; GFX9-NEXT:  .LBB7_3: ; %T
1374 ; GFX9-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off offset:16 glc
1375 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1376 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off glc
1377 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1378 ; GFX9-NEXT:    ; kill: killed $vgpr0 killed $vgpr1
1379 ; GFX9-NEXT:  .LBB7_4: ; %exit
1380 ; GFX9-NEXT:    s_movk_i32 s35, 0x3801
1381 ; GFX9-NEXT:    s_movk_i32 s34, 0x3800
1382 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x3900
1383 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0x3d00
1384 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1385 ; GFX9-NEXT:    v_cmp_gt_u16_e32 vcc, s35, v7
1386 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v0, v1, vcc
1387 ; GFX9-NEXT:    v_cmp_gt_u16_sdwa vcc, v7, s34 src0_sel:WORD_1 src1_sel:DWORD
1388 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v1, v0, vcc
1389 ; GFX9-NEXT:    v_cmp_gt_u16_e32 vcc, s35, v6
1390 ; GFX9-NEXT:    v_cndmask_b32_e32 v2, v0, v1, vcc
1391 ; GFX9-NEXT:    v_cmp_lt_u16_sdwa vcc, v6, s35 src0_sel:WORD_1 src1_sel:DWORD
1392 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v0, v1, vcc
1393 ; GFX9-NEXT:    v_cmp_gt_u16_e32 vcc, s35, v5
1394 ; GFX9-NEXT:    v_cndmask_b32_e32 v8, v0, v1, vcc
1395 ; GFX9-NEXT:    v_cmp_lt_u16_sdwa vcc, v5, s35 src0_sel:WORD_1 src1_sel:DWORD
1396 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v0, v1, vcc
1397 ; GFX9-NEXT:    v_cmp_gt_u16_e32 vcc, s35, v4
1398 ; GFX9-NEXT:    v_cndmask_b32_e32 v9, v0, v1, vcc
1399 ; GFX9-NEXT:    v_cmp_lt_u16_sdwa vcc, v4, s35 src0_sel:WORD_1 src1_sel:DWORD
1400 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v0, v1, vcc
1401 ; GFX9-NEXT:    s_mov_b32 s34, 0x5040100
1402 ; GFX9-NEXT:    v_perm_b32 v0, v0, v9, s34
1403 ; GFX9-NEXT:    v_perm_b32 v1, v5, v8, s34
1404 ; GFX9-NEXT:    v_perm_b32 v2, v6, v2, s34
1405 ; GFX9-NEXT:    v_perm_b32 v3, v7, v3, s34
1406 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1408 ; GFX11-LABEL: vec_16xi16_extract_8xi16_0:
1409 ; GFX11:       ; %bb.0:
1410 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1411 ; GFX11-NEXT:    scratch_load_u8 v4, off, s32
1412 ; GFX11-NEXT:    s_mov_b32 s0, 0
1413 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1414 ; GFX11-NEXT:    v_and_b32_e32 v4, 1, v4
1415 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1416 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v4
1417 ; GFX11-NEXT:    s_and_b32 s1, vcc_lo, exec_lo
1418 ; GFX11-NEXT:    s_cbranch_scc0 .LBB7_2
1419 ; GFX11-NEXT:  ; %bb.1: ; %F
1420 ; GFX11-NEXT:    global_load_b128 v[4:7], v[2:3], off offset:16 glc dlc
1421 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1422 ; GFX11-NEXT:    global_load_b128 v[2:5], v[2:3], off glc dlc
1423 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1424 ; GFX11-NEXT:    s_and_not1_b32 vcc_lo, exec_lo, s0
1425 ; GFX11-NEXT:    s_cbranch_vccz .LBB7_3
1426 ; GFX11-NEXT:    s_branch .LBB7_4
1427 ; GFX11-NEXT:  .LBB7_2:
1428 ; GFX11-NEXT:    ; implicit-def: $vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9
1429 ; GFX11-NEXT:  .LBB7_3: ; %T
1430 ; GFX11-NEXT:    global_load_b128 v[2:5], v[0:1], off offset:16 glc dlc
1431 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1432 ; GFX11-NEXT:    global_load_b128 v[2:5], v[0:1], off glc dlc
1433 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1434 ; GFX11-NEXT:  .LBB7_4: ; %exit
1435 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1436 ; GFX11-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x3801, v5
1437 ; GFX11-NEXT:    v_mov_b32_e32 v9, 0x3900
1438 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0x3d00
1439 ; GFX11-NEXT:    v_lshrrev_b32_e32 v7, 16, v4
1440 ; GFX11-NEXT:    v_lshrrev_b32_e32 v8, 16, v5
1441 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v2
1442 ; GFX11-NEXT:    v_lshrrev_b32_e32 v6, 16, v3
1443 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, 0x3900, v1, vcc_lo
1444 ; GFX11-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x3801, v4
1445 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, 0x3900, v1, vcc_lo
1446 ; GFX11-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x3801, v7
1447 ; GFX11-NEXT:    v_cndmask_b32_e32 v7, 0x3900, v1, vcc_lo
1448 ; GFX11-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x3801, v3
1449 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, 0x3900, v1, vcc_lo
1450 ; GFX11-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x3801, v2
1451 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, 0x3900, v1, vcc_lo
1452 ; GFX11-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x3801, v0
1453 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x3900, v1, vcc_lo
1454 ; GFX11-NEXT:    v_cmp_gt_u16_e32 vcc_lo, 0x3801, v6
1455 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_3)
1456 ; GFX11-NEXT:    v_perm_b32 v0, v0, v2, 0x5040100
1457 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, 0x3900, v1, vcc_lo
1458 ; GFX11-NEXT:    v_cmp_lt_u16_e32 vcc_lo, 0x3800, v8
1459 ; GFX11-NEXT:    v_perm_b32 v2, v7, v4, 0x5040100
1460 ; GFX11-NEXT:    v_perm_b32 v1, v1, v3, 0x5040100
1461 ; GFX11-NEXT:    v_cndmask_b32_e32 v6, 0x3d00, v9, vcc_lo
1462 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1463 ; GFX11-NEXT:    v_perm_b32 v3, v6, v5, 0x5040100
1464 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1465   br i1 %cond, label %T, label %F
1468   %t = load volatile <16 x i16>, ptr addrspace(1) %p0
1469   br label %exit
1472   %f = load volatile <16 x i16>, ptr addrspace(1) %p1
1473   br label %exit
1475 exit:
1476   %m = phi <16 x i16> [ %t, %T ], [ %f, %F ]
1477   %v2 = shufflevector <16 x i16> %m, <16 x i16> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1478   %b2 = icmp ugt <8 x i16> %v2, <i16 u0x3800, i16 u0x3800, i16 u0x3800, i16 u0x3800, i16 u0x3800, i16 u0x3800, i16 u0x3800, i16 u0x3800>
1479   %r2 = select <8 x i1> %b2, <8 x i16> <i16 u0x3900, i16 u0x3900, i16 u0x3900, i16 u0x3900, i16 u0x3900, i16 u0x3900, i16 u0x3900, i16 u0x3900>, <8 x i16> <i16 u0x3D00, i16 u0x3D00, i16 u0x3D00, i16 u0x3D00, i16 u0x3D00, i16 u0x3D00, i16 u0x3D00, i16 u0x3D00>
1480   ret <8 x i16> %r2
1483 define amdgpu_gfx <8 x half> @vec_16xf16_extract_8xf16_0(i1 inreg %cond, ptr addrspace(1) %p0, ptr addrspace(1) %p1) {
1484 ; SI-LABEL: vec_16xf16_extract_8xf16_0:
1485 ; SI:       ; %bb.0:
1486 ; SI-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1487 ; SI-NEXT:    buffer_load_ubyte v4, off, s[0:3], s32
1488 ; SI-NEXT:    s_waitcnt vmcnt(0)
1489 ; SI-NEXT:    v_and_b32_e32 v4, 1, v4
1490 ; SI-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v4
1491 ; SI-NEXT:    s_and_b64 s[34:35], vcc, exec
1492 ; SI-NEXT:    s_mov_b32 s38, 0
1493 ; SI-NEXT:    s_cbranch_scc0 .LBB8_2
1494 ; SI-NEXT:  ; %bb.1: ; %F
1495 ; SI-NEXT:    s_mov_b32 s39, 0xf000
1496 ; SI-NEXT:    s_mov_b32 s36, s38
1497 ; SI-NEXT:    s_mov_b32 s37, s38
1498 ; SI-NEXT:    buffer_load_ushort v5, v[2:3], s[36:39], 0 addr64 glc
1499 ; SI-NEXT:    s_waitcnt vmcnt(0)
1500 ; SI-NEXT:    buffer_load_ushort v6, v[2:3], s[36:39], 0 addr64 offset:2 glc
1501 ; SI-NEXT:    s_waitcnt vmcnt(0)
1502 ; SI-NEXT:    buffer_load_ushort v7, v[2:3], s[36:39], 0 addr64 offset:4 glc
1503 ; SI-NEXT:    s_waitcnt vmcnt(0)
1504 ; SI-NEXT:    buffer_load_ushort v4, v[2:3], s[36:39], 0 addr64 offset:6 glc
1505 ; SI-NEXT:    s_waitcnt vmcnt(0)
1506 ; SI-NEXT:    buffer_load_ushort v8, v[2:3], s[36:39], 0 addr64 offset:8 glc
1507 ; SI-NEXT:    s_waitcnt vmcnt(0)
1508 ; SI-NEXT:    buffer_load_ushort v9, v[2:3], s[36:39], 0 addr64 offset:10 glc
1509 ; SI-NEXT:    s_waitcnt vmcnt(0)
1510 ; SI-NEXT:    buffer_load_ushort v10, v[2:3], s[36:39], 0 addr64 offset:12 glc
1511 ; SI-NEXT:    s_waitcnt vmcnt(0)
1512 ; SI-NEXT:    buffer_load_ushort v11, v[2:3], s[36:39], 0 addr64 offset:14 glc
1513 ; SI-NEXT:    s_waitcnt vmcnt(0)
1514 ; SI-NEXT:    buffer_load_ushort v12, v[2:3], s[36:39], 0 addr64 offset:16 glc
1515 ; SI-NEXT:    s_waitcnt vmcnt(0)
1516 ; SI-NEXT:    buffer_load_ushort v12, v[2:3], s[36:39], 0 addr64 offset:18 glc
1517 ; SI-NEXT:    s_waitcnt vmcnt(0)
1518 ; SI-NEXT:    buffer_load_ushort v12, v[2:3], s[36:39], 0 addr64 offset:20 glc
1519 ; SI-NEXT:    s_waitcnt vmcnt(0)
1520 ; SI-NEXT:    buffer_load_ushort v12, v[2:3], s[36:39], 0 addr64 offset:22 glc
1521 ; SI-NEXT:    s_waitcnt vmcnt(0)
1522 ; SI-NEXT:    buffer_load_ushort v12, v[2:3], s[36:39], 0 addr64 offset:24 glc
1523 ; SI-NEXT:    s_waitcnt vmcnt(0)
1524 ; SI-NEXT:    buffer_load_ushort v12, v[2:3], s[36:39], 0 addr64 offset:26 glc
1525 ; SI-NEXT:    s_waitcnt vmcnt(0)
1526 ; SI-NEXT:    buffer_load_ushort v12, v[2:3], s[36:39], 0 addr64 offset:28 glc
1527 ; SI-NEXT:    s_waitcnt vmcnt(0)
1528 ; SI-NEXT:    buffer_load_ushort v2, v[2:3], s[36:39], 0 addr64 offset:30 glc
1529 ; SI-NEXT:    s_waitcnt vmcnt(0)
1530 ; SI-NEXT:    v_lshlrev_b32_e32 v12, 16, v11
1531 ; SI-NEXT:    v_lshlrev_b32_e32 v13, 16, v9
1532 ; SI-NEXT:    v_lshlrev_b32_e32 v14, 16, v4
1533 ; SI-NEXT:    v_lshlrev_b32_e32 v15, 16, v6
1534 ; SI-NEXT:    v_cvt_f32_f16_e32 v2, v11
1535 ; SI-NEXT:    v_cvt_f32_f16_e32 v3, v9
1536 ; SI-NEXT:    v_cvt_f32_f16_e32 v4, v4
1537 ; SI-NEXT:    v_cvt_f32_f16_e32 v6, v6
1538 ; SI-NEXT:    v_or_b32_e32 v9, v10, v12
1539 ; SI-NEXT:    v_or_b32_e32 v8, v8, v13
1540 ; SI-NEXT:    v_or_b32_e32 v10, v7, v14
1541 ; SI-NEXT:    v_or_b32_e32 v11, v5, v15
1542 ; SI-NEXT:    v_cvt_f32_f16_e32 v5, v9
1543 ; SI-NEXT:    v_cvt_f32_f16_e32 v7, v8
1544 ; SI-NEXT:    v_cvt_f32_f16_e32 v8, v10
1545 ; SI-NEXT:    v_cvt_f32_f16_e32 v9, v11
1546 ; SI-NEXT:    s_mov_b64 vcc, exec
1547 ; SI-NEXT:    s_cbranch_execz .LBB8_3
1548 ; SI-NEXT:    s_branch .LBB8_4
1549 ; SI-NEXT:  .LBB8_2:
1550 ; SI-NEXT:    ; implicit-def: $vgpr9
1551 ; SI-NEXT:    ; implicit-def: $vgpr6
1552 ; SI-NEXT:    ; implicit-def: $vgpr8
1553 ; SI-NEXT:    ; implicit-def: $vgpr4
1554 ; SI-NEXT:    ; implicit-def: $vgpr7
1555 ; SI-NEXT:    ; implicit-def: $vgpr3
1556 ; SI-NEXT:    ; implicit-def: $vgpr5
1557 ; SI-NEXT:    ; implicit-def: $vgpr2
1558 ; SI-NEXT:    s_mov_b64 vcc, 0
1559 ; SI-NEXT:  .LBB8_3: ; %T
1560 ; SI-NEXT:    s_mov_b32 s39, 0xf000
1561 ; SI-NEXT:    s_mov_b32 s36, s38
1562 ; SI-NEXT:    s_mov_b32 s37, s38
1563 ; SI-NEXT:    buffer_load_ushort v5, v[0:1], s[36:39], 0 addr64 glc
1564 ; SI-NEXT:    s_waitcnt vmcnt(0)
1565 ; SI-NEXT:    buffer_load_ushort v6, v[0:1], s[36:39], 0 addr64 offset:2 glc
1566 ; SI-NEXT:    s_waitcnt vmcnt(0)
1567 ; SI-NEXT:    buffer_load_ushort v7, v[0:1], s[36:39], 0 addr64 offset:4 glc
1568 ; SI-NEXT:    s_waitcnt vmcnt(0)
1569 ; SI-NEXT:    buffer_load_ushort v4, v[0:1], s[36:39], 0 addr64 offset:6 glc
1570 ; SI-NEXT:    s_waitcnt vmcnt(0)
1571 ; SI-NEXT:    buffer_load_ushort v8, v[0:1], s[36:39], 0 addr64 offset:8 glc
1572 ; SI-NEXT:    s_waitcnt vmcnt(0)
1573 ; SI-NEXT:    buffer_load_ushort v3, v[0:1], s[36:39], 0 addr64 offset:10 glc
1574 ; SI-NEXT:    s_waitcnt vmcnt(0)
1575 ; SI-NEXT:    buffer_load_ushort v9, v[0:1], s[36:39], 0 addr64 offset:12 glc
1576 ; SI-NEXT:    s_waitcnt vmcnt(0)
1577 ; SI-NEXT:    buffer_load_ushort v2, v[0:1], s[36:39], 0 addr64 offset:14 glc
1578 ; SI-NEXT:    s_waitcnt vmcnt(0)
1579 ; SI-NEXT:    buffer_load_ushort v10, v[0:1], s[36:39], 0 addr64 offset:16 glc
1580 ; SI-NEXT:    s_waitcnt vmcnt(0)
1581 ; SI-NEXT:    buffer_load_ushort v10, v[0:1], s[36:39], 0 addr64 offset:18 glc
1582 ; SI-NEXT:    s_waitcnt vmcnt(0)
1583 ; SI-NEXT:    buffer_load_ushort v10, v[0:1], s[36:39], 0 addr64 offset:20 glc
1584 ; SI-NEXT:    s_waitcnt vmcnt(0)
1585 ; SI-NEXT:    buffer_load_ushort v10, v[0:1], s[36:39], 0 addr64 offset:22 glc
1586 ; SI-NEXT:    s_waitcnt vmcnt(0)
1587 ; SI-NEXT:    buffer_load_ushort v10, v[0:1], s[36:39], 0 addr64 offset:24 glc
1588 ; SI-NEXT:    s_waitcnt vmcnt(0)
1589 ; SI-NEXT:    buffer_load_ushort v10, v[0:1], s[36:39], 0 addr64 offset:26 glc
1590 ; SI-NEXT:    s_waitcnt vmcnt(0)
1591 ; SI-NEXT:    buffer_load_ushort v10, v[0:1], s[36:39], 0 addr64 offset:28 glc
1592 ; SI-NEXT:    s_waitcnt vmcnt(0)
1593 ; SI-NEXT:    buffer_load_ushort v0, v[0:1], s[36:39], 0 addr64 offset:30 glc
1594 ; SI-NEXT:    s_waitcnt vmcnt(0)
1595 ; SI-NEXT:    v_lshlrev_b32_e32 v0, 16, v2
1596 ; SI-NEXT:    v_lshlrev_b32_e32 v1, 16, v3
1597 ; SI-NEXT:    v_lshlrev_b32_e32 v10, 16, v4
1598 ; SI-NEXT:    v_lshlrev_b32_e32 v11, 16, v6
1599 ; SI-NEXT:    v_cvt_f32_f16_e32 v2, v2
1600 ; SI-NEXT:    v_cvt_f32_f16_e32 v3, v3
1601 ; SI-NEXT:    v_cvt_f32_f16_e32 v4, v4
1602 ; SI-NEXT:    v_or_b32_e32 v0, v9, v0
1603 ; SI-NEXT:    v_or_b32_e32 v1, v8, v1
1604 ; SI-NEXT:    v_or_b32_e32 v8, v7, v10
1605 ; SI-NEXT:    v_or_b32_e32 v9, v5, v11
1606 ; SI-NEXT:    v_cvt_f32_f16_e32 v5, v0
1607 ; SI-NEXT:    v_cvt_f32_f16_e32 v7, v1
1608 ; SI-NEXT:    v_cvt_f32_f16_e32 v8, v8
1609 ; SI-NEXT:    v_cvt_f32_f16_e32 v9, v9
1610 ; SI-NEXT:    v_cvt_f32_f16_e32 v6, v6
1611 ; SI-NEXT:  .LBB8_4: ; %exit
1612 ; SI-NEXT:    v_cvt_f16_f32_e32 v0, v9
1613 ; SI-NEXT:    v_cvt_f16_f32_e32 v1, v6
1614 ; SI-NEXT:    v_cvt_f16_f32_e32 v6, v8
1615 ; SI-NEXT:    v_cvt_f16_f32_e32 v4, v4
1616 ; SI-NEXT:    v_cvt_f16_f32_e32 v7, v7
1617 ; SI-NEXT:    v_cvt_f16_f32_e32 v3, v3
1618 ; SI-NEXT:    v_cvt_f16_f32_e32 v5, v5
1619 ; SI-NEXT:    v_cvt_f16_f32_e32 v2, v2
1620 ; SI-NEXT:    v_mov_b32_e32 v8, 0x3fa00000
1621 ; SI-NEXT:    v_mov_b32_e32 v9, 0x3f200000
1622 ; SI-NEXT:    v_cvt_f32_f16_e32 v0, v0
1623 ; SI-NEXT:    v_cvt_f32_f16_e32 v1, v1
1624 ; SI-NEXT:    v_cvt_f32_f16_e32 v6, v6
1625 ; SI-NEXT:    v_cvt_f32_f16_e32 v4, v4
1626 ; SI-NEXT:    v_cvt_f32_f16_e32 v7, v7
1627 ; SI-NEXT:    v_cvt_f32_f16_e32 v10, v3
1628 ; SI-NEXT:    v_cvt_f32_f16_e32 v11, v5
1629 ; SI-NEXT:    v_cvt_f32_f16_e32 v12, v2
1630 ; SI-NEXT:    v_cmp_nge_f32_e32 vcc, 0.5, v0
1631 ; SI-NEXT:    v_cndmask_b32_e32 v0, v8, v9, vcc
1632 ; SI-NEXT:    v_cmp_nge_f32_e32 vcc, 0.5, v1
1633 ; SI-NEXT:    v_cndmask_b32_e32 v1, v8, v9, vcc
1634 ; SI-NEXT:    v_cmp_nge_f32_e32 vcc, 0.5, v6
1635 ; SI-NEXT:    v_cndmask_b32_e32 v2, v8, v9, vcc
1636 ; SI-NEXT:    v_cmp_nge_f32_e32 vcc, 0.5, v4
1637 ; SI-NEXT:    v_cndmask_b32_e32 v3, v8, v9, vcc
1638 ; SI-NEXT:    v_cmp_nge_f32_e32 vcc, 0.5, v7
1639 ; SI-NEXT:    v_cndmask_b32_e32 v4, v8, v9, vcc
1640 ; SI-NEXT:    v_cmp_nge_f32_e32 vcc, 0.5, v10
1641 ; SI-NEXT:    v_cndmask_b32_e32 v5, v8, v9, vcc
1642 ; SI-NEXT:    v_cmp_nge_f32_e32 vcc, 0.5, v11
1643 ; SI-NEXT:    v_cndmask_b32_e32 v6, v8, v9, vcc
1644 ; SI-NEXT:    v_cmp_nge_f32_e32 vcc, 0.5, v12
1645 ; SI-NEXT:    v_cndmask_b32_e32 v7, v8, v9, vcc
1646 ; SI-NEXT:    s_setpc_b64 s[30:31]
1648 ; GFX9-LABEL: vec_16xf16_extract_8xf16_0:
1649 ; GFX9:       ; %bb.0:
1650 ; GFX9-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1651 ; GFX9-NEXT:    buffer_load_ubyte v4, off, s[0:3], s32
1652 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1653 ; GFX9-NEXT:    v_and_b32_e32 v4, 1, v4
1654 ; GFX9-NEXT:    v_cmp_eq_u32_e32 vcc, 0, v4
1655 ; GFX9-NEXT:    s_and_b64 s[34:35], vcc, exec
1656 ; GFX9-NEXT:    s_cbranch_scc0 .LBB8_2
1657 ; GFX9-NEXT:  ; %bb.1: ; %F
1658 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off offset:16 glc
1659 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1660 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[2:3], off glc
1661 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1662 ; GFX9-NEXT:    ; kill: killed $vgpr2 killed $vgpr3
1663 ; GFX9-NEXT:    s_cbranch_execz .LBB8_3
1664 ; GFX9-NEXT:    s_branch .LBB8_4
1665 ; GFX9-NEXT:  .LBB8_2:
1666 ; GFX9-NEXT:    ; implicit-def: $vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9_vgpr10_vgpr11
1667 ; GFX9-NEXT:  .LBB8_3: ; %T
1668 ; GFX9-NEXT:    global_load_dwordx4 v[2:5], v[0:1], off offset:16 glc
1669 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1670 ; GFX9-NEXT:    global_load_dwordx4 v[4:7], v[0:1], off glc
1671 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1672 ; GFX9-NEXT:    ; kill: killed $vgpr0 killed $vgpr1
1673 ; GFX9-NEXT:  .LBB8_4: ; %exit
1674 ; GFX9-NEXT:    v_mov_b32_e32 v0, 0x3800
1675 ; GFX9-NEXT:    v_mov_b32_e32 v1, 0x3900
1676 ; GFX9-NEXT:    v_mov_b32_e32 v2, 0x3d00
1677 ; GFX9-NEXT:    s_waitcnt vmcnt(0)
1678 ; GFX9-NEXT:    v_cmp_ge_f16_e32 vcc, 0.5, v7
1679 ; GFX9-NEXT:    v_cndmask_b32_e32 v3, v1, v2, vcc
1680 ; GFX9-NEXT:    v_cmp_nle_f16_sdwa vcc, v7, v0 src0_sel:WORD_1 src1_sel:DWORD
1681 ; GFX9-NEXT:    v_cndmask_b32_e32 v7, v2, v1, vcc
1682 ; GFX9-NEXT:    v_cmp_ge_f16_e32 vcc, 0.5, v6
1683 ; GFX9-NEXT:    v_cndmask_b32_e32 v8, v1, v2, vcc
1684 ; GFX9-NEXT:    v_cmp_le_f16_sdwa vcc, v6, v0 src0_sel:WORD_1 src1_sel:DWORD
1685 ; GFX9-NEXT:    v_cndmask_b32_e32 v6, v1, v2, vcc
1686 ; GFX9-NEXT:    v_cmp_ge_f16_e32 vcc, 0.5, v5
1687 ; GFX9-NEXT:    v_cndmask_b32_e32 v9, v1, v2, vcc
1688 ; GFX9-NEXT:    v_cmp_le_f16_sdwa vcc, v5, v0 src0_sel:WORD_1 src1_sel:DWORD
1689 ; GFX9-NEXT:    v_cndmask_b32_e32 v5, v1, v2, vcc
1690 ; GFX9-NEXT:    v_cmp_ge_f16_e32 vcc, 0.5, v4
1691 ; GFX9-NEXT:    v_cndmask_b32_e32 v10, v1, v2, vcc
1692 ; GFX9-NEXT:    v_cmp_le_f16_sdwa vcc, v4, v0 src0_sel:WORD_1 src1_sel:DWORD
1693 ; GFX9-NEXT:    v_cndmask_b32_e32 v0, v1, v2, vcc
1694 ; GFX9-NEXT:    v_pack_b32_f16 v0, v10, v0
1695 ; GFX9-NEXT:    v_pack_b32_f16 v1, v9, v5
1696 ; GFX9-NEXT:    v_pack_b32_f16 v2, v8, v6
1697 ; GFX9-NEXT:    v_pack_b32_f16 v3, v3, v7
1698 ; GFX9-NEXT:    s_setpc_b64 s[30:31]
1700 ; GFX11-LABEL: vec_16xf16_extract_8xf16_0:
1701 ; GFX11:       ; %bb.0:
1702 ; GFX11-NEXT:    s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
1703 ; GFX11-NEXT:    scratch_load_u8 v4, off, s32
1704 ; GFX11-NEXT:    s_mov_b32 s0, 0
1705 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1706 ; GFX11-NEXT:    v_and_b32_e32 v4, 1, v4
1707 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1708 ; GFX11-NEXT:    v_cmp_eq_u32_e32 vcc_lo, 0, v4
1709 ; GFX11-NEXT:    s_and_b32 s1, vcc_lo, exec_lo
1710 ; GFX11-NEXT:    s_cbranch_scc0 .LBB8_2
1711 ; GFX11-NEXT:  ; %bb.1: ; %F
1712 ; GFX11-NEXT:    global_load_b128 v[4:7], v[2:3], off offset:16 glc dlc
1713 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1714 ; GFX11-NEXT:    global_load_b128 v[2:5], v[2:3], off glc dlc
1715 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1716 ; GFX11-NEXT:    s_and_not1_b32 vcc_lo, exec_lo, s0
1717 ; GFX11-NEXT:    s_cbranch_vccz .LBB8_3
1718 ; GFX11-NEXT:    s_branch .LBB8_4
1719 ; GFX11-NEXT:  .LBB8_2:
1720 ; GFX11-NEXT:    ; implicit-def: $vgpr2_vgpr3_vgpr4_vgpr5_vgpr6_vgpr7_vgpr8_vgpr9
1721 ; GFX11-NEXT:  .LBB8_3: ; %T
1722 ; GFX11-NEXT:    global_load_b128 v[2:5], v[0:1], off offset:16 glc dlc
1723 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1724 ; GFX11-NEXT:    global_load_b128 v[2:5], v[0:1], off glc dlc
1725 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1726 ; GFX11-NEXT:  .LBB8_4: ; %exit
1727 ; GFX11-NEXT:    s_waitcnt vmcnt(0)
1728 ; GFX11-NEXT:    v_cmp_ge_f16_e32 vcc_lo, 0.5, v5
1729 ; GFX11-NEXT:    v_mov_b32_e32 v9, 0x3900
1730 ; GFX11-NEXT:    v_mov_b32_e32 v1, 0x3d00
1731 ; GFX11-NEXT:    v_lshrrev_b32_e32 v7, 16, v4
1732 ; GFX11-NEXT:    v_lshrrev_b32_e32 v8, 16, v5
1733 ; GFX11-NEXT:    v_lshrrev_b32_e32 v0, 16, v2
1734 ; GFX11-NEXT:    v_lshrrev_b32_e32 v6, 16, v3
1735 ; GFX11-NEXT:    v_cndmask_b32_e32 v5, 0x3900, v1, vcc_lo
1736 ; GFX11-NEXT:    v_cmp_ge_f16_e32 vcc_lo, 0.5, v4
1737 ; GFX11-NEXT:    v_cndmask_b32_e32 v4, 0x3900, v1, vcc_lo
1738 ; GFX11-NEXT:    v_cmp_ge_f16_e32 vcc_lo, 0.5, v7
1739 ; GFX11-NEXT:    v_cndmask_b32_e32 v7, 0x3900, v1, vcc_lo
1740 ; GFX11-NEXT:    v_cmp_ge_f16_e32 vcc_lo, 0.5, v3
1741 ; GFX11-NEXT:    v_cndmask_b32_e32 v3, 0x3900, v1, vcc_lo
1742 ; GFX11-NEXT:    v_cmp_ge_f16_e32 vcc_lo, 0.5, v2
1743 ; GFX11-NEXT:    v_cndmask_b32_e32 v2, 0x3900, v1, vcc_lo
1744 ; GFX11-NEXT:    v_cmp_ge_f16_e32 vcc_lo, 0.5, v0
1745 ; GFX11-NEXT:    v_cndmask_b32_e32 v0, 0x3900, v1, vcc_lo
1746 ; GFX11-NEXT:    v_cmp_ge_f16_e32 vcc_lo, 0.5, v6
1747 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_2) | instskip(SKIP_3) | instid1(VALU_DEP_3)
1748 ; GFX11-NEXT:    v_pack_b32_f16 v0, v2, v0
1749 ; GFX11-NEXT:    v_cndmask_b32_e32 v1, 0x3900, v1, vcc_lo
1750 ; GFX11-NEXT:    v_cmp_nge_f16_e32 vcc_lo, 0.5, v8
1751 ; GFX11-NEXT:    v_pack_b32_f16 v2, v4, v7
1752 ; GFX11-NEXT:    v_pack_b32_f16 v1, v3, v1
1753 ; GFX11-NEXT:    v_cndmask_b32_e32 v6, 0x3d00, v9, vcc_lo
1754 ; GFX11-NEXT:    s_delay_alu instid0(VALU_DEP_1)
1755 ; GFX11-NEXT:    v_pack_b32_f16 v3, v5, v6
1756 ; GFX11-NEXT:    s_setpc_b64 s[30:31]
1757   br i1 %cond, label %T, label %F
1760   %t = load volatile <16 x half>, ptr addrspace(1) %p0
1761   br label %exit
1764   %f = load volatile <16 x half>, ptr addrspace(1) %p1
1765   br label %exit
1767 exit:
1768   %m = phi <16 x half> [ %t, %T ], [ %f, %F ]
1769   %v2 = shufflevector <16 x half> %m, <16 x half> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>
1770   %b2 = fcmp ugt <8 x half> %v2, <half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800, half 0xH3800>
1771   %r2 = select <8 x i1> %b2, <8 x half> <half 0xH3900, half 0xH3900, half 0xH3900, half 0xH3900, half 0xH3900, half 0xH3900, half 0xH3900, half 0xH3900>, <8 x half> <half 0xH3D00, half 0xH3D00, half 0xH3D00, half 0xH3D00, half 0xH3D00, half 0xH3D00, half 0xH3D00, half 0xH3D00>
1772   ret <8 x half> %r2