[clang] Fix crashes when passing VLA to va_arg (#119563)
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / immv216.ll
blob342d7b0237118dd8aad6ffb188c17591823069cb
1 ; RUN:  llc -amdgpu-scalarize-global-loads=false  -mtriple=amdgcn--amdhsa -mcpu=gfx1100 -mattr=-flat-for-global -verify-machineinstrs -show-mc-encoding < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX10 %s
2 ; RUN:  llc -amdgpu-scalarize-global-loads=false  -mtriple=amdgcn--amdhsa -mcpu=gfx1010 -mattr=-flat-for-global,-xnack -verify-machineinstrs -show-mc-encoding < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX10 %s
3 ; RUN:  llc -amdgpu-scalarize-global-loads=false  -mtriple=amdgcn--amdhsa -mcpu=gfx900 -mattr=-flat-for-global,-xnack -verify-machineinstrs -show-mc-encoding < %s | FileCheck -enable-var-scope -check-prefixes=GCN,GFX9 %s
4 ; RUN:  llc -amdgpu-scalarize-global-loads=false  -mtriple=amdgcn--amdhsa -mcpu=fiji -mattr=-flat-for-global,-xnack -verify-machineinstrs -show-mc-encoding < %s | FileCheck -enable-var-scope -check-prefixes=GCN,VI %s
5 ; RUN:  llc -amdgpu-scalarize-global-loads=false  -mtriple=amdgcn--amdhsa -mcpu=kaveri -mattr=-flat-for-global -verify-machineinstrs -show-mc-encoding < %s | FileCheck -enable-var-scope -check-prefixes=GCN %s
6 ; FIXME: Merge into imm.ll
8 ; GCN-LABEL: {{^}}store_inline_imm_neg_0.0_v2i16:
9 ; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x80008000 ; encoding
10 ; GCN: buffer_store_{{dword|b32}} [[REG]]
11 define amdgpu_kernel void @store_inline_imm_neg_0.0_v2i16(ptr addrspace(1) %out) #0 {
12   store <2 x i16> <i16 -32768, i16 -32768>, ptr addrspace(1) %out
13   ret void
16 ; GCN-LABEL: {{^}}store_inline_imm_0.0_v2f16:
17 ; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0 ; encoding
18 ; GCN: buffer_store_{{dword|b32}} [[REG]]
19 define amdgpu_kernel void @store_inline_imm_0.0_v2f16(ptr addrspace(1) %out) #0 {
20   store <2 x half> <half 0.0, half 0.0>, ptr addrspace(1) %out
21   ret void
24 ; GCN-LABEL: {{^}}store_imm_neg_0.0_v2f16:
25 ; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x80008000 ; encoding
26 ; GCN: buffer_store_{{dword|b32}} [[REG]]
27 define amdgpu_kernel void @store_imm_neg_0.0_v2f16(ptr addrspace(1) %out) #0 {
28   store <2 x half> <half -0.0, half -0.0>, ptr addrspace(1) %out
29   ret void
32 ; GCN-LABEL: {{^}}store_inline_imm_0.5_v2f16:
33 ; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x38003800 ; encoding
34 ; GCN: buffer_store_{{dword|b32}} [[REG]]
35 define amdgpu_kernel void @store_inline_imm_0.5_v2f16(ptr addrspace(1) %out) #0 {
36   store <2 x half> <half 0.5, half 0.5>, ptr addrspace(1) %out
37   ret void
40 ; GCN-LABEL: {{^}}store_inline_imm_m_0.5_v2f16:
41 ; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0xb800b800 ; encoding
42 ; GCN: buffer_store_{{dword|b32}} [[REG]]
43 define amdgpu_kernel void @store_inline_imm_m_0.5_v2f16(ptr addrspace(1) %out) #0 {
44   store <2 x half> <half -0.5, half -0.5>, ptr addrspace(1) %out
45   ret void
48 ; GCN-LABEL: {{^}}store_inline_imm_1.0_v2f16:
49 ; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x3c003c00 ; encoding
50 ; GCN: buffer_store_{{dword|b32}} [[REG]]
51 define amdgpu_kernel void @store_inline_imm_1.0_v2f16(ptr addrspace(1) %out) #0 {
52   store <2 x half> <half 1.0, half 1.0>, ptr addrspace(1) %out
53   ret void
56 ; GCN-LABEL: {{^}}store_inline_imm_m_1.0_v2f16:
57 ; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0xbc00bc00 ; encoding
58 ; GCN: buffer_store_{{dword|b32}} [[REG]]
59 define amdgpu_kernel void @store_inline_imm_m_1.0_v2f16(ptr addrspace(1) %out) #0 {
60   store <2 x half> <half -1.0, half -1.0>, ptr addrspace(1) %out
61   ret void
64 ; GCN-LABEL: {{^}}store_inline_imm_2.0_v2f16:
65 ; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x40004000 ; encoding
66 ; GCN: buffer_store_{{dword|b32}} [[REG]]
67 define amdgpu_kernel void @store_inline_imm_2.0_v2f16(ptr addrspace(1) %out) #0 {
68   store <2 x half> <half 2.0, half 2.0>, ptr addrspace(1) %out
69   ret void
72 ; GCN-LABEL: {{^}}store_inline_imm_m_2.0_v2f16:
73 ; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0xc000c000 ; encoding
74 ; GCN: buffer_store_{{dword|b32}} [[REG]]
75 define amdgpu_kernel void @store_inline_imm_m_2.0_v2f16(ptr addrspace(1) %out) #0 {
76   store <2 x half> <half -2.0, half -2.0>, ptr addrspace(1) %out
77   ret void
80 ; GCN-LABEL: {{^}}store_inline_imm_4.0_v2f16:
81 ; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x44004400 ; encoding
82 ; GCN: buffer_store_{{dword|b32}} [[REG]]
83 define amdgpu_kernel void @store_inline_imm_4.0_v2f16(ptr addrspace(1) %out) #0 {
84   store <2 x half> <half 4.0, half 4.0>, ptr addrspace(1) %out
85   ret void
88 ; GCN-LABEL: {{^}}store_inline_imm_m_4.0_v2f16:
89 ; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0xc400c400 ; encoding
90 ; GCN: buffer_store_{{dword|b32}} [[REG]]
91 define amdgpu_kernel void @store_inline_imm_m_4.0_v2f16(ptr addrspace(1) %out) #0 {
92   store <2 x half> <half -4.0, half -4.0>, ptr addrspace(1) %out
93   ret void
96 ; GCN-LABEL: {{^}}store_inline_imm_inv_2pi_v2f16:
97 ; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x31183118 ; encoding
98 ; GCN: buffer_store_{{dword|b32}} [[REG]]
99 define amdgpu_kernel void @store_inline_imm_inv_2pi_v2f16(ptr addrspace(1) %out) #0 {
100   store <2 x half> <half 0xH3118, half 0xH3118>, ptr addrspace(1) %out
101   ret void
104 ; GCN-LABEL: {{^}}store_inline_imm_m_inv_2pi_v2f16:
105 ; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0xb118b118 ; encoding
106 ; GCN: buffer_store_{{dword|b32}} [[REG]]
107 define amdgpu_kernel void @store_inline_imm_m_inv_2pi_v2f16(ptr addrspace(1) %out) #0 {
108   store <2 x half> <half 0xHB118, half 0xHB118>, ptr addrspace(1) %out
109   ret void
112 ; GCN-LABEL: {{^}}store_literal_imm_v2f16:
113 ; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x6c006c00
114 ; GCN: buffer_store_{{dword|b32}} [[REG]]
115 define amdgpu_kernel void @store_literal_imm_v2f16(ptr addrspace(1) %out) #0 {
116   store <2 x half> <half 4096.0, half 4096.0>, ptr addrspace(1) %out
117   ret void
120 ; GCN-LABEL: {{^}}add_inline_imm_0.0_v2f16:
121 ; GFX9: s_load_dword [[VAL:s[0-9]+]]
122 ; GFX9: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 0 ; encoding
123 ; GFX9: buffer_store_dword [[REG]]
125 ; FIXME: Shouldn't need right shift and SDWA, also extra copy
126 ; VI-DAG: s_load_dword [[VAL:s[0-9]+]]
127 ; VI-DAG: v_mov_b32_e32 [[CONST0:v[0-9]+]], 0
128 ; VI-DAG: s_lshr_b32 [[SHR:s[0-9]+]], [[VAL]], 16
129 ; VI-DAG: v_mov_b32_e32 [[V_SHR:v[0-9]+]], [[SHR]]
131 ; VI-DAG: v_add_f16_sdwa v{{[0-9]+}}, [[V_SHR]], [[CONST0]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
132 ; VI-DAG: v_add_f16_e64 v{{[0-9]+}}, [[VAL]], 0
133 ; VI: v_or_b32
134 ; VI: buffer_store_dword
135 define amdgpu_kernel void @add_inline_imm_0.0_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
136   %y = fadd <2 x half> %x, <half 0.0, half 0.0>
137   store <2 x half> %y, ptr addrspace(1) %out
138   ret void
141 ; GCN-LABEL: {{^}}add_inline_imm_0.5_v2f16:
142 ; GFX10: s_load_{{dword|b32}} [[VAL:s[0-9]+]]
143 ; GFX10: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 0.5 op_sel_hi:[1,0] ; encoding: [0x00,0x40,0x0f,0xcc,0x02,0xe0,0x01,0x08]
144 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
146 ; GFX9: s_load_dword [[VAL:s[0-9]+]]
147 ; GFX9: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 0.5 op_sel_hi:[1,0] ; encoding: [0x00,0x40,0x8f,0xd3,0x06,0xe0,0x01,0x08]
148 ; GFX9: buffer_store_dword [[REG]]
150 ; FIXME: Shouldn't need right shift and SDWA, also extra copy
151 ; VI-DAG: s_load_dword [[VAL:s[0-9]+]]
152 ; VI-DAG: v_mov_b32_e32 [[CONST05:v[0-9]+]], 0x3800
153 ; VI-DAG: s_lshr_b32 [[SHR:s[0-9]+]], [[VAL]], 16
154 ; VI-DAG: v_mov_b32_e32 [[V_SHR:v[0-9]+]], [[SHR]]
156 ; VI-DAG: v_add_f16_sdwa v{{[0-9]+}}, [[V_SHR]], [[CONST05]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
157 ; VI-DAG: v_add_f16_e64 v{{[0-9]+}}, [[VAL]], 0.5
158 ; VI: v_or_b32
159 ; VI: buffer_store_dword
160 define amdgpu_kernel void @add_inline_imm_0.5_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
161   %y = fadd <2 x half> %x, <half 0.5, half 0.5>
162   store <2 x half> %y, ptr addrspace(1) %out
163   ret void
166 ; GCN-LABEL: {{^}}add_inline_imm_neg_0.5_v2f16:
167 ; GFX10: s_load_{{dword|b32}} [[VAL:s[0-9]+]]
168 ; GFX10: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], -0.5 op_sel_hi:[1,0] ; encoding: [0x00,0x40,0x0f,0xcc,0x02,0xe2,0x01,0x08]
169 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
171 ; GFX9: s_load_dword [[VAL:s[0-9]+]]
172 ; GFX9: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], -0.5 op_sel_hi:[1,0] ; encoding: [0x00,0x40,0x8f,0xd3,0x06,0xe2,0x01,0x08]
173 ; GFX9: buffer_store_dword [[REG]]
175 ; FIXME: Shouldn't need right shift and SDWA, also extra copy
176 ; VI-DAG: s_load_dword [[VAL:s[0-9]+]]
177 ; VI-DAG: v_mov_b32_e32 [[CONSTM05:v[0-9]+]], 0xb800
178 ; VI-DAG: s_lshr_b32 [[SHR:s[0-9]+]], [[VAL]], 16
179 ; VI-DAG: v_mov_b32_e32 [[V_SHR:v[0-9]+]], [[SHR]]
181 ; VI-DAG: v_add_f16_sdwa v{{[0-9]+}}, [[V_SHR]], [[CONSTM05]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
182 ; VI-DAG: v_add_f16_e64 v{{[0-9]+}}, [[VAL]], -0.5
183 ; VI: v_or_b32
184 ; VI: buffer_store_dword
185 define amdgpu_kernel void @add_inline_imm_neg_0.5_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
186   %y = fadd <2 x half> %x, <half -0.5, half -0.5>
187   store <2 x half> %y, ptr addrspace(1) %out
188   ret void
191 ; GCN-LABEL: {{^}}add_inline_imm_1.0_v2f16:
192 ; GFX10: s_load_{{dword|b32}} [[VAL:s[0-9]+]]
193 ; GFX10: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 1.0 op_sel_hi:[1,0] ; encoding:
194 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
196 ; GFX9: s_load_dword [[VAL:s[0-9]+]]
197 ; GFX9: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 1.0 op_sel_hi:[1,0] ; encoding
198 ; GFX9: buffer_store_dword [[REG]]
200 ; FIXME: Shouldn't need right shift and SDWA, also extra copy
201 ; VI-DAG: s_load_dword [[VAL:s[0-9]+]]
202 ; VI-DAG: v_mov_b32_e32 [[CONST1:v[0-9]+]], 0x3c00
203 ; VI-DAG: s_lshr_b32 [[SHR:s[0-9]+]], [[VAL]], 16
204 ; VI-DAG: v_mov_b32_e32 [[V_SHR:v[0-9]+]], [[SHR]]
206 ; VI-DAG: v_add_f16_sdwa v{{[0-9]+}}, [[V_SHR]], [[CONST1]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
207 ; VI-DAG: v_add_f16_e64 v{{[0-9]+}}, [[VAL]], 1.0
208 ; VI: v_or_b32
209 ; VI: buffer_store_dword
210 define amdgpu_kernel void @add_inline_imm_1.0_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
211   %y = fadd <2 x half> %x, <half 1.0, half 1.0>
212   store <2 x half> %y, ptr addrspace(1) %out
213   ret void
216 ; GCN-LABEL: {{^}}add_inline_imm_neg_1.0_v2f16:
217 ; GFX10: s_load_{{dword|b32}} [[VAL:s[0-9]+]]
218 ; GFX10: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], -1.0 op_sel_hi:[1,0] ; encoding
219 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
221 ; GFX9: s_load_dword [[VAL:s[0-9]+]]
222 ; GFX9: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], -1.0 op_sel_hi:[1,0] ; encoding
223 ; GFX9: buffer_store_dword [[REG]]
226 ; FIXME: Shouldn't need right shift and SDWA, also extra copy
227 ; VI-DAG: s_load_dword [[VAL:s[0-9]+]]
228 ; VI-DAG: v_mov_b32_e32 [[CONST1:v[0-9]+]], 0xbc00
229 ; VI-DAG: s_lshr_b32 [[SHR:s[0-9]+]], [[VAL]], 16
230 ; VI-DAG: v_mov_b32_e32 [[V_SHR:v[0-9]+]], [[SHR]]
232 ; VI-DAG: v_add_f16_sdwa v{{[0-9]+}}, [[V_SHR]], [[CONST1]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
233 ; VI-DAG: v_add_f16_e64 v{{[0-9]+}}, [[VAL]], -1.0
234 ; VI: v_or_b32
235 ; VI: buffer_store_dword
236 define amdgpu_kernel void @add_inline_imm_neg_1.0_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
237   %y = fadd <2 x half> %x, <half -1.0, half -1.0>
238   store <2 x half> %y, ptr addrspace(1) %out
239   ret void
242 ; GCN-LABEL: {{^}}add_inline_imm_2.0_v2f16:
243 ; GFX10: s_load_{{dword|b32}} [[VAL:s[0-9]+]]
244 ; GFX10: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 2.0 op_sel_hi:[1,0] ; encoding
245 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
247 ; GFX9: s_load_dword [[VAL:s[0-9]+]]
248 ; GFX9: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 2.0 op_sel_hi:[1,0] ; encoding
249 ; GFX9: buffer_store_dword [[REG]]
251 ; FIXME: Shouldn't need right shift and SDWA, also extra copy
252 ; VI-DAG: s_load_dword [[VAL:s[0-9]+]]
253 ; VI-DAG: v_mov_b32_e32 [[CONST2:v[0-9]+]], 0x4000
254 ; VI-DAG: s_lshr_b32 [[SHR:s[0-9]+]], [[VAL]], 16
255 ; VI-DAG: v_mov_b32_e32 [[V_SHR:v[0-9]+]], [[SHR]]
257 ; VI-DAG: v_add_f16_sdwa v{{[0-9]+}}, [[V_SHR]], [[CONST2]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
258 ; VI-DAG: v_add_f16_e64 v{{[0-9]+}}, [[VAL]], 2.0
259 ; VI: v_or_b32
260 ; VI: buffer_store_dword
261 define amdgpu_kernel void @add_inline_imm_2.0_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
262   %y = fadd <2 x half> %x, <half 2.0, half 2.0>
263   store <2 x half> %y, ptr addrspace(1) %out
264   ret void
267 ; GCN-LABEL: {{^}}add_inline_imm_neg_2.0_v2f16:
268 ; GFX10: s_load_{{dword|b32}} [[VAL:s[0-9]+]]
269 ; GFX10: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], -2.0 op_sel_hi:[1,0] ; encoding
270 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
272 ; GFX9: s_load_dword [[VAL:s[0-9]+]]
273 ; GFX9: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], -2.0 op_sel_hi:[1,0] ; encoding
274 ; GFX9: buffer_store_dword [[REG]]
276 ; FIXME: Shouldn't need right shift and SDWA, also extra copy
277 ; VI-DAG: s_load_dword [[VAL:s[0-9]+]]
278 ; VI-DAG: v_mov_b32_e32 [[CONSTM2:v[0-9]+]], 0xc000
279 ; VI-DAG: s_lshr_b32 [[SHR:s[0-9]+]], [[VAL]], 16
280 ; VI-DAG: v_mov_b32_e32 [[V_SHR:v[0-9]+]], [[SHR]]
282 ; VI-DAG: v_add_f16_sdwa v{{[0-9]+}}, [[V_SHR]], [[CONSTM2]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
283 ; VI-DAG: v_add_f16_e64 v{{[0-9]+}}, [[VAL]], -2.0
284 ; VI: v_or_b32
285 ; VI: buffer_store_dword
286 define amdgpu_kernel void @add_inline_imm_neg_2.0_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
287   %y = fadd <2 x half> %x, <half -2.0, half -2.0>
288   store <2 x half> %y, ptr addrspace(1) %out
289   ret void
292 ; GCN-LABEL: {{^}}add_inline_imm_4.0_v2f16:
293 ; GFX10: s_load_{{dword|b32}} [[VAL:s[0-9]+]]
294 ; GFX10: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 4.0 op_sel_hi:[1,0] ; encoding
295 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
297 ; GFX9: s_load_dword [[VAL:s[0-9]+]]
298 ; GFX9: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 4.0 op_sel_hi:[1,0] ; encoding
299 ; GFX9: buffer_store_dword [[REG]]
301 ; FIXME: Shouldn't need right shift and SDWA, also extra copy
302 ; VI-DAG: s_load_dword [[VAL:s[0-9]+]]
303 ; VI-DAG: v_mov_b32_e32 [[CONST4:v[0-9]+]], 0x4400
304 ; VI-DAG: s_lshr_b32 [[SHR:s[0-9]+]], [[VAL]], 16
305 ; VI-DAG: v_mov_b32_e32 [[V_SHR:v[0-9]+]], [[SHR]]
307 ; VI-DAG: v_add_f16_sdwa v{{[0-9]+}}, [[V_SHR]], [[CONST4]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
308 ; VI-DAG: v_add_f16_e64 v{{[0-9]+}}, [[VAL]], 4.0
309 ; VI: v_or_b32
310 ; VI: buffer_store_dword
311 define amdgpu_kernel void @add_inline_imm_4.0_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
312   %y = fadd <2 x half> %x, <half 4.0, half 4.0>
313   store <2 x half> %y, ptr addrspace(1) %out
314   ret void
317 ; GCN-LABEL: {{^}}add_inline_imm_neg_4.0_v2f16:
318 ; GFX10: s_load_{{dword|b32}} [[VAL:s[0-9]+]]
319 ; GFX10: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], -4.0 op_sel_hi:[1,0] ; encoding
320 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
322 ; GFX9: s_load_dword [[VAL:s[0-9]+]]
323 ; GFX9: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], -4.0 op_sel_hi:[1,0] ; encoding
324 ; GFX9: buffer_store_dword [[REG]]
326 ; FIXME: Shouldn't need right shift and SDWA, also extra copy
327 ; VI-DAG: s_load_dword [[VAL:s[0-9]+]]
328 ; VI-DAG: v_mov_b32_e32 [[CONSTM4:v[0-9]+]], 0xc400
329 ; VI-DAG: s_lshr_b32 [[SHR:s[0-9]+]], [[VAL]], 16
330 ; VI-DAG: v_mov_b32_e32 [[V_SHR:v[0-9]+]], [[SHR]]
332 ; VI-DAG: v_add_f16_sdwa v{{[0-9]+}}, [[V_SHR]], [[CONSTM4]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
333 ; VI-DAG: v_add_f16_e64 v{{[0-9]+}}, [[VAL]], -4.0
334 ; VI: v_or_b32
335 ; VI: buffer_store_dword
336 define amdgpu_kernel void @add_inline_imm_neg_4.0_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
337   %y = fadd <2 x half> %x, <half -4.0, half -4.0>
338   store <2 x half> %y, ptr addrspace(1) %out
339   ret void
342 ; GCN-LABEL: {{^}}commute_add_inline_imm_0.5_v2f16:
343 ; GFX10: buffer_load_{{dword|b32}} [[VAL:v[0-9]+]]
344 ; GFX10: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 0.5
345 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
347 ; GFX9: buffer_load_dword [[VAL:v[0-9]+]]
348 ; GFX9: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 0.5
349 ; GFX9: buffer_store_dword [[REG]]
351 ; VI-DAG: v_mov_b32_e32 [[CONST05:v[0-9]+]], 0x3800
352 ; VI-DAG: buffer_load_dword
353 ; VI-NOT: and
354 ; VI-DAG: v_add_f16_sdwa v{{[0-9]+}}, v{{[0-9]+}}, [[CONST05]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
355 ; VI-DAG: v_add_f16_e32 v{{[0-9]+}}, 0.5, v{{[0-9]+}}
356 ; VI: v_or_b32
357 ; VI: buffer_store_dword
358 define amdgpu_kernel void @commute_add_inline_imm_0.5_v2f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
359   %x = load <2 x half>, ptr addrspace(1) %in
360   %y = fadd <2 x half> %x, <half 0.5, half 0.5>
361   store <2 x half> %y, ptr addrspace(1) %out
362   ret void
365 ; GCN-LABEL: {{^}}commute_add_literal_v2f16:
366 ; GFX10: v_pk_add_f16 v0, 0x6400, v0 op_sel_hi:[0,1] ; encoding: [0x00,0x40,0x0f,0xcc,0xff,0x00,0x02,0x10,0x00,0x64,0x00,0x00]
368 ; GFX9-DAG: buffer_load_dword [[VAL:v[0-9]+]]
369 ; GFX9-DAG: s_movk_i32 [[K:s[0-9]+]], 0x6400 ; encoding
370 ; GFX9: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], [[K]] op_sel_hi:[1,0] ; encoding: [0x00,0x40,0x8f,0xd3,0x00,0x01,0x00,0x08]
371 ; GFX9: buffer_store_dword [[REG]]
373 ; VI-DAG: buffer_load_dword
374 ; VI-NOT: and
375 ; VI-DAG: v_add_f16_e32 v{{[0-9]+}}, 0x6400, v{{[0-9]+}}
376 ; gfx8 does not support sreg or imm in sdwa - this will be move then
377 ; VI-DAG: v_mov_b32_e32 [[VK:v[0-9]+]], 0x6400
378 ; VI-DAG: v_add_f16_sdwa v{{[0-9]+}}, v{{[0-9]+}}, [[VK]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:WORD_1 src1_sel:DWORD
379 ; VI: v_or_b32_e32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}
380 ; VI: buffer_store_dword
381 define amdgpu_kernel void @commute_add_literal_v2f16(ptr addrspace(1) %out, ptr addrspace(1) %in) #0 {
382   %x = load <2 x half>, ptr addrspace(1) %in
383   %y = fadd <2 x half> %x, <half 1024.0, half 1024.0>
384   store <2 x half> %y, ptr addrspace(1) %out
385   ret void
388 ; GCN-LABEL: {{^}}add_inline_imm_1_v2f16:
389 ; GFX10: s_load_{{dword|b32}} [[VAL:s[0-9]+]]
390 ; GFX10: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 1 op_sel_hi:[1,0] ; encoding
391 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
393 ; GFX9: s_load_dword [[VAL:s[0-9]+]]
394 ; GFX9: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 1 op_sel_hi:[1,0] ; encoding
395 ; GFX9: buffer_store_dword [[REG]]
397 ; FIXME: Shouldn't need right shift and SDWA, also extra copy
398 ; VI-DAG: s_load_dword [[VAL:s[0-9]+]]
399 ; VI-DAG: v_mov_b32_e32 [[CONST1:v[0-9]+]], 1 ; encoding
400 ; VI-DAG: s_lshr_b32 [[SHR:s[0-9]+]], [[VAL]], 16
401 ; VI-DAG: v_mov_b32_e32 [[V_SHR:v[0-9]+]], [[SHR]]
403 ; VI-DAG: v_add_f16_sdwa v{{[0-9]+}}, [[V_SHR]], [[CONST1]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
404 ; VI-DAG: v_add_f16_e64 v{{[0-9]+}}, [[VAL]], 1 ; encoding
405 ; VI: v_or_b32
406 ; VI: buffer_store_dword
407 define amdgpu_kernel void @add_inline_imm_1_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
408   %y = fadd <2 x half> %x, <half 0xH0001, half 0xH0001>
409   store <2 x half> %y, ptr addrspace(1) %out
410   ret void
413 ; GCN-LABEL: {{^}}add_inline_imm_2_v2f16:
414 ; GFX10: s_load_{{dword|b32}} [[VAL:s[0-9]+]]
415 ; GFX10: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 2 op_sel_hi:[1,0] ; encoding
416 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
418 ; GFX9: s_load_dword [[VAL:s[0-9]+]]
419 ; GFX9: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 2 op_sel_hi:[1,0] ; encoding
420 ; GFX9: buffer_store_dword [[REG]]
423 ; FIXME: Shouldn't need right shift and SDWA, also extra copy
424 ; VI-DAG: s_load_dword [[VAL:s[0-9]+]]
425 ; VI-DAG: v_mov_b32_e32 [[CONST2:v[0-9]+]], 2 ; encoding
426 ; VI-DAG: s_lshr_b32 [[SHR:s[0-9]+]], [[VAL]], 16
427 ; VI-DAG: v_mov_b32_e32 [[V_SHR:v[0-9]+]], [[SHR]]
429 ; VI-DAG: v_add_f16_sdwa v{{[0-9]+}}, [[V_SHR]], [[CONST2]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
430 ; VI-DAG: v_add_f16_e64 v{{[0-9]+}}, [[VAL]], 2 ; encoding
431 ; VI: v_or_b32
432 ; VI: buffer_store_dword
433 define amdgpu_kernel void @add_inline_imm_2_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
434   %y = fadd <2 x half> %x, <half 0xH0002, half 0xH0002>
435   store <2 x half> %y, ptr addrspace(1) %out
436   ret void
439 ; GCN-LABEL: {{^}}add_inline_imm_16_v2f16:
440 ; GFX10: s_load_{{dword|b32}} [[VAL:s[0-9]+]]
441 ; GFX10: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 16 op_sel_hi:[1,0] ; encoding
442 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
444 ; GFX9: s_load_dword [[VAL:s[0-9]+]]
445 ; GFX9: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 16 op_sel_hi:[1,0] ; encoding
446 ; GFX9: buffer_store_dword [[REG]]
449 ; FIXME: Shouldn't need right shift and SDWA, also extra copy
450 ; VI-DAG: s_load_dword [[VAL:s[0-9]+]]
451 ; VI-DAG: v_mov_b32_e32 [[CONST16:v[0-9]+]], 16 ; encoding
452 ; VI-DAG: s_lshr_b32 [[SHR:s[0-9]+]], [[VAL]], 16
453 ; VI-DAG: v_mov_b32_e32 [[V_SHR:v[0-9]+]], [[SHR]]
455 ; VI-DAG: v_add_f16_sdwa v{{[0-9]+}}, [[V_SHR]], [[CONST16]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
456 ; VI-DAG: v_add_f16_e64 v{{[0-9]+}}, [[VAL]], 16 ; encoding
457 ; VI: v_or_b32
458 ; VI: buffer_store_dword
459 define amdgpu_kernel void @add_inline_imm_16_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
460   %y = fadd <2 x half> %x, <half 0xH0010, half 0xH0010>
461   store <2 x half> %y, ptr addrspace(1) %out
462   ret void
465 ; GCN-LABEL: {{^}}add_inline_imm_neg_1_v2f16:
466 ; GFX10: s_add_i32 [[VAL:s[0-9]+]], s{{[0-9]+}}, -1
467 ; GFX10: v_mov_b32_e32 [[REG:v[0-9]+]], [[VAL]]
468 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
470 ; GFX9: s_add_i32 [[VAL:s[0-9]+]], s6, -1
471 ; GFX9: v_mov_b32_e32 [[REG:v[0-9]+]], [[VAL]]
472 ; GFX9: buffer_store_dword [[REG]]
474 ; VI: s_load_dword [[VAL:s[0-9]+]]
475 ; VI: s_add_i32 [[ADD:s[0-9]+]], [[VAL]], -1 ; encoding
476 ; VI: v_mov_b32_e32 [[REG:v[0-9]+]], [[ADD]]
477 ; VI: buffer_store_dword [[REG]]
478 define amdgpu_kernel void @add_inline_imm_neg_1_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
479   %xbc = bitcast <2 x half> %x to i32
480   %y = add i32 %xbc, -1
481   %ybc = bitcast i32 %y to <2 x half>
482   store <2 x half> %ybc, ptr addrspace(1) %out
483   ret void
486 ; GCN-LABEL: {{^}}add_inline_imm_neg_2_v2f16:
487 ; GFX10: s_add_i32 [[VAL:s[0-9]+]], s{{[0-9]+}}, 0xfffefffe
488 ; GFX10: v_mov_b32_e32 [[REG:v[0-9]+]], [[VAL]]
489 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
491 ; GFX9: s_add_i32 [[VAL:s[0-9]+]], s6, 0xfffefffe
492 ; GFX9: v_mov_b32_e32 [[REG:v[0-9]+]], [[VAL]]
493 ; GFX9: buffer_store_dword [[REG]]
495 ; VI: s_load_dword [[VAL:s[0-9]+]]
496 ; VI: s_add_i32 [[ADD:s[0-9]+]], [[VAL]], 0xfffefffe ; encoding
497 ; VI: v_mov_b32_e32 [[REG:v[0-9]+]], [[ADD]]
498 ; VI: buffer_store_dword [[REG]]
499 define amdgpu_kernel void @add_inline_imm_neg_2_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
500   %xbc = bitcast <2 x half> %x to i32
501   %y = add i32 %xbc, 4294901758 ; 0xfffefffe
502   %ybc = bitcast i32 %y to <2 x half>
503   store <2 x half> %ybc, ptr addrspace(1) %out
504   ret void
507 ; GCN-LABEL: {{^}}add_inline_imm_neg_16_v2f16:
508 ; GFX10: s_add_i32 [[VAL:s[0-9]+]], s{{[0-9]+}}, 0xfff0fff0
509 ; GFX10: v_mov_b32_e32 [[REG:v[0-9]+]], [[VAL]]
510 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
512 ; GFX9: s_add_i32 [[VAL:s[0-9]+]], s6, 0xfff0fff0
513 ; GFX9: v_mov_b32_e32 [[REG:v[0-9]+]], [[VAL]]
514 ; GFX9: buffer_store_dword [[REG]]
517 ; VI: s_load_dword [[VAL:s[0-9]+]]
518 ; VI: s_add_i32 [[ADD:s[0-9]+]], [[VAL]], 0xfff0fff0 ; encoding
519 ; VI: v_mov_b32_e32 [[REG:v[0-9]+]], [[ADD]]
520 ; VI: buffer_store_dword [[REG]]
521 define amdgpu_kernel void @add_inline_imm_neg_16_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
522   %xbc = bitcast <2 x half> %x to i32
523   %y = add i32 %xbc, 4293984240 ; 0xfff0fff0
524   %ybc = bitcast i32 %y to <2 x half>
525   store <2 x half> %ybc, ptr addrspace(1) %out
526   ret void
529 ; GCN-LABEL: {{^}}add_inline_imm_63_v2f16:
530 ; GFX10: s_load_{{dword|b32}} [[VAL:s[0-9]+]]
531 ; GFX10: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 63
532 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
534 ; GFX9: s_load_dword [[VAL:s[0-9]+]]
535 ; GFX9: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 63
536 ; GFX9: buffer_store_dword [[REG]]
538 ; FIXME: Shouldn't need right shift and SDWA, also extra copy
539 ; VI-DAG: s_load_dword [[VAL:s[0-9]+]]
540 ; VI-DAG: v_mov_b32_e32 [[CONST63:v[0-9]+]], 63
541 ; VI-DAG: s_lshr_b32 [[SHR:s[0-9]+]], [[VAL]], 16
542 ; VI-DAG: v_mov_b32_e32 [[V_SHR:v[0-9]+]], [[SHR]]
544 ; VI-DAG: v_add_f16_sdwa v{{[0-9]+}}, [[V_SHR]], [[CONST63]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
545 ; VI-DAG: v_add_f16_e64 v{{[0-9]+}}, [[VAL]], 63
546 ; VI: v_or_b32
547 ; VI: buffer_store_dword
548 define amdgpu_kernel void @add_inline_imm_63_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
549   %y = fadd <2 x half> %x, <half 0xH003F, half 0xH003F>
550   store <2 x half> %y, ptr addrspace(1) %out
551   ret void
554 ; GCN-LABEL: {{^}}add_inline_imm_64_v2f16:
555 ; GFX10: s_load_{{dword|b32}} [[VAL:s[0-9]+]]
556 ; GFX10: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 64
557 ; GFX10: buffer_store_{{dword|b32}} [[REG]]
559 ; GFX9: s_load_dword [[VAL:s[0-9]+]]
560 ; GFX9: v_pk_add_f16 [[REG:v[0-9]+]], [[VAL]], 64
561 ; GFX9: buffer_store_dword [[REG]]
563 ; FIXME: Shouldn't need right shift and SDWA, also extra copy
564 ; VI-DAG: s_load_dword [[VAL:s[0-9]+]]
565 ; VI-DAG: v_mov_b32_e32 [[CONST64:v[0-9]+]], 64
566 ; VI-DAG: s_lshr_b32 [[SHR:s[0-9]+]], [[VAL]], 16
567 ; VI-DAG: v_mov_b32_e32 [[V_SHR:v[0-9]+]], [[SHR]]
569 ; VI-DAG: v_add_f16_sdwa v{{[0-9]+}}, [[V_SHR]], [[CONST64]] dst_sel:WORD_1 dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:DWORD
570 ; VI-DAG: v_add_f16_e64 v{{[0-9]+}}, [[VAL]], 64
571 ; VI: v_or_b32
572 ; VI: buffer_store_dword
573 define amdgpu_kernel void @add_inline_imm_64_v2f16(ptr addrspace(1) %out, <2 x half> %x) #0 {
574   %y = fadd <2 x half> %x, <half 0xH0040, half 0xH0040>
575   store <2 x half> %y, ptr addrspace(1) %out
576   ret void
579 ; GCN-LABEL: {{^}}mul_inline_imm_0.5_v2i16:
580 ; GFX9: s_movk_i32 [[K:s[0-9]+]], 0x3800
581 ; GFX9: v_pk_mul_lo_u16 v0, v0, [[K]] op_sel_hi:[1,0]
583 ; GFX10: v_pk_mul_lo_u16 v0, 0x3800, v0 op_sel_hi:[0,1] ; encoding: [0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0xff,0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x00,0x38,0x00,0x00]
584 define <2 x i16> @mul_inline_imm_0.5_v2i16(<2 x i16> %x) {
585   %y = mul <2 x i16> %x, bitcast (<2 x half> <half 0.5, half 0.5> to <2 x i16>)
586   ret <2 x i16> %y
589 ; GCN-LABEL: {{^}}mul_inline_imm_neg_0.5_v2i16:
590 ; GFX9: s_movk_i32 [[K:s[0-9]+]], 0xb800
591 ; GFX9: v_pk_mul_lo_u16 v0, v0, [[K]] op_sel_hi:[1,0]
593 ; GFX10: v_pk_mul_lo_u16 v0, 0xffffb800, v0 op_sel_hi:[0,1] ; encoding: [0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0xff,0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x00,0xb8,0xff,0xff]
594 define <2 x i16> @mul_inline_imm_neg_0.5_v2i16(<2 x i16> %x) {
595   %y = mul <2 x i16> %x, bitcast (<2 x half> <half -0.5, half -0.5> to <2 x i16>)
596   ret <2 x i16> %y
599 ; GCN-LABEL: {{^}}mul_inline_imm_1.0_v2i16:
600 ; GFX9: s_movk_i32 [[K:s[0-9]+]], 0x3c00
601 ; GFX9: v_pk_mul_lo_u16 v0, v0, [[K]] op_sel_hi:[1,0]
603 ; GFX10: v_pk_mul_lo_u16 v0, 0x3c00, v0 op_sel_hi:[0,1] ; encoding: [0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0xff,0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x00,0x3c,0x00,0x00]
604 define <2 x i16> @mul_inline_imm_1.0_v2i16(<2 x i16> %x) {
605   %y = mul <2 x i16> %x, bitcast (<2 x half> <half 1.0, half 1.0> to <2 x i16>)
606   ret <2 x i16> %y
609 ; GCN-LABEL: {{^}}mul_inline_imm_neg_1.0_v2i16:
610 ; GFX9: s_movk_i32 [[K:s[0-9]+]], 0xbc00
611 ; GFX9: v_pk_mul_lo_u16 v0, v0, [[K]] op_sel_hi:[1,0]
613 ; GFX10: v_pk_mul_lo_u16 v0, 0xffffbc00, v0 op_sel_hi:[0,1] ; encoding: [0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0xff,0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x00,0xbc,0xff,0xff]
614 define <2 x i16> @mul_inline_imm_neg_1.0_v2i16(<2 x i16> %x) {
615   %y = mul <2 x i16> %x, bitcast (<2 x half> <half -1.0, half -1.0> to <2 x i16>)
616   ret <2 x i16> %y
619 ; GCN-LABEL: {{^}}shl_inline_imm_2.0_v2i16:
620 ; GFX9: v_pk_lshlrev_b16 v0, v0, 2.0 op_sel:[0,1]
622 ; GFX10: v_pk_lshlrev_b16 v0, v0, 2.0 op_sel:[0,1] ; encoding: [0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0xe9,0x{{[0-9a-f]+}},0x{{[0-9a-f]+}}]
623 define <2 x i16> @shl_inline_imm_2.0_v2i16(<2 x i16> %x) {
624   %y = shl <2 x i16> bitcast (<2 x half> <half 2.0, half 2.0> to <2 x i16>), %x
625   ret <2 x i16> %y
628 ; GCN-LABEL: {{^}}shl_inline_imm_neg_2.0_v2i16:
629 ; GFX9: v_pk_lshlrev_b16 v0, v0, -2.0 op_sel:[0,1]
631 ; GFX10: v_pk_lshlrev_b16 v0, v0, -2.0 op_sel:[0,1] ; encoding: [0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0xeb,0x{{[0-9a-f]+}},0x{{[0-9a-f]+}}]
632 define <2 x i16> @shl_inline_imm_neg_2.0_v2i16(<2 x i16> %x) {
633   %y = shl <2 x i16> bitcast (<2 x half> <half -2.0, half -2.0> to <2 x i16>), %x
634   ret <2 x i16> %y
637 ; GCN-LABEL: {{^}}mul_inline_imm_4.0_v2i16:
638 ; GFX9: s_movk_i32 [[K:s[0-9]+]], 0x4400
639 ; GFX9: v_pk_mul_lo_u16 v0, v0, [[K]] op_sel_hi:[1,0]
641 ; GFX10: v_pk_mul_lo_u16 v0, 0x4400, v0 op_sel_hi:[0,1] ; encoding: [0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0xff,0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x00,0x44,0x00,0x00]
642 define <2 x i16> @mul_inline_imm_4.0_v2i16(<2 x i16> %x) {
643   %y = mul <2 x i16> %x, bitcast (<2 x half> <half 4.0, half 4.0> to <2 x i16>)
644   ret <2 x i16> %y
648 ; GCN-LABEL: {{^}}mul_inline_imm_neg_4.0_v2i16:
649 ; GFX9: s_movk_i32 [[K:s[0-9]+]], 0xc400
650 ; GFX9: v_pk_mul_lo_u16 v0, v0, [[K]] op_sel_hi:[1,0]
652 ; GFX10: v_pk_mul_lo_u16 v0, 0xffffc400, v0 op_sel_hi:[0,1] ; encoding: [0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0xff,0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x00,0xc4,0xff,0xff]
653 define <2 x i16> @mul_inline_imm_neg_4.0_v2i16(<2 x i16> %x) {
654   %y = mul <2 x i16> %x, bitcast (<2 x half> <half -4.0, half -4.0> to <2 x i16>)
655   ret <2 x i16> %y
658 ; GCN-LABEL: {{^}}mul_inline_imm_inv2pi_v2i16:
659 ; GFX9: s_movk_i32 [[K:s[0-9]+]], 0x3118
660 ; GFX9: v_pk_mul_lo_u16 v0, v0, [[K]] op_sel_hi:[1,0]
662 ; GFX10: v_pk_mul_lo_u16 v0, 0x3118, v0 op_sel_hi:[0,1] ; encoding: [0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0xff,0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x{{[0-9a-f]+}},0x18,0x31,0x00,0x00]
663 define <2 x i16> @mul_inline_imm_inv2pi_v2i16(<2 x i16> %x) {
664   %y = mul <2 x i16> %x, bitcast (<2 x half> <half 0xH3118, half 0xH3118> to <2 x i16>)
665   ret <2 x i16> %y
668 attributes #0 = { nounwind "amdgpu-no-dispatch-id" "amdgpu-no-dispatch-ptr" "amdgpu-no-implicitarg-ptr" "amdgpu-no-lds-kernel-id" "amdgpu-no-queue-ptr" "amdgpu-no-workgroup-id-x" "amdgpu-no-workgroup-id-y" "amdgpu-no-workgroup-id-z" "amdgpu-no-workitem-id-x" "amdgpu-no-workitem-id-y" "amdgpu-no-workitem-id-z" }