blob: bdfb0050e62391900b9b2a6bec39215835d2c8af [file] [log] [blame]
Matt Arsenaultce841302016-12-22 03:05:37 +00001; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
2
3declare half @llvm.canonicalize.f16(half) #0
Matt Arsenault70306612017-01-23 18:52:26 +00004declare <2 x half> @llvm.fabs.v2f16(<2 x half>) #0
5declare <2 x half> @llvm.canonicalize.v2f16(<2 x half>) #0
Matt Arsenaultce841302016-12-22 03:05:37 +00006
7; GCN-LABEL: {{^}}v_test_canonicalize_var_f16:
8; GCN: v_mul_f16_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
9; GCN: buffer_store_short [[REG]]
10define void @v_test_canonicalize_var_f16(half addrspace(1)* %out) #1 {
11 %val = load half, half addrspace(1)* %out
12 %canonicalized = call half @llvm.canonicalize.f16(half %val)
13 store half %canonicalized, half addrspace(1)* %out
14 ret void
15}
16
17; GCN-LABEL: {{^}}s_test_canonicalize_var_f16:
18; GCN: v_mul_f16_e64 [[REG:v[0-9]+]], 1.0, {{s[0-9]+}}
19; GCN: buffer_store_short [[REG]]
20define void @s_test_canonicalize_var_f16(half addrspace(1)* %out, i16 zeroext %val.arg) #1 {
21 %val = bitcast i16 %val.arg to half
22 %canonicalized = call half @llvm.canonicalize.f16(half %val)
23 store half %canonicalized, half addrspace(1)* %out
24 ret void
25}
26
27; GCN-LABEL: {{^}}test_fold_canonicalize_p0_f16:
28; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0{{$}}
29; GCN: buffer_store_short [[REG]]
30define void @test_fold_canonicalize_p0_f16(half addrspace(1)* %out) #1 {
31 %canonicalized = call half @llvm.canonicalize.f16(half 0.0)
32 store half %canonicalized, half addrspace(1)* %out
33 ret void
34}
35
36; GCN-LABEL: {{^}}test_fold_canonicalize_n0_f16:
37; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0xffff8000{{$}}
38; GCN: buffer_store_short [[REG]]
39define void @test_fold_canonicalize_n0_f16(half addrspace(1)* %out) #1 {
40 %canonicalized = call half @llvm.canonicalize.f16(half -0.0)
41 store half %canonicalized, half addrspace(1)* %out
42 ret void
43}
44
45; GCN-LABEL: {{^}}test_fold_canonicalize_p1_f16:
46; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x3c00{{$}}
47; GCN: buffer_store_short [[REG]]
48define void @test_fold_canonicalize_p1_f16(half addrspace(1)* %out) #1 {
49 %canonicalized = call half @llvm.canonicalize.f16(half 1.0)
50 store half %canonicalized, half addrspace(1)* %out
51 ret void
52}
53
54; GCN-LABEL: {{^}}test_fold_canonicalize_n1_f16:
55; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0xffffbc00{{$}}
56; GCN: buffer_store_short [[REG]]
57define void @test_fold_canonicalize_n1_f16(half addrspace(1)* %out) #1 {
58 %canonicalized = call half @llvm.canonicalize.f16(half -1.0)
59 store half %canonicalized, half addrspace(1)* %out
60 ret void
61}
62
63; GCN-LABEL: {{^}}test_fold_canonicalize_literal_f16:
64; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x4c00{{$}}
65; GCN: buffer_store_short [[REG]]
66define void @test_fold_canonicalize_literal_f16(half addrspace(1)* %out) #1 {
67 %canonicalized = call half @llvm.canonicalize.f16(half 16.0)
68 store half %canonicalized, half addrspace(1)* %out
69 ret void
70}
71
Matt Arsenaulta6867fd2017-01-23 22:31:03 +000072; GCN-LABEL: {{^}}test_default_denormals_fold_canonicalize_denormal0_f16:
73; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x3ff{{$}}
Matt Arsenaultce841302016-12-22 03:05:37 +000074; GCN: buffer_store_short [[REG]]
Matt Arsenaulta6867fd2017-01-23 22:31:03 +000075define void @test_default_denormals_fold_canonicalize_denormal0_f16(half addrspace(1)* %out) #1 {
Matt Arsenaultce841302016-12-22 03:05:37 +000076 %canonicalized = call half @llvm.canonicalize.f16(half 0xH03FF)
77 store half %canonicalized, half addrspace(1)* %out
78 ret void
79}
80
81; GCN-LABEL: {{^}}test_denormals_fold_canonicalize_denormal0_f16:
82; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x3ff{{$}}
83; GCN: buffer_store_short [[REG]]
84define void @test_denormals_fold_canonicalize_denormal0_f16(half addrspace(1)* %out) #3 {
85 %canonicalized = call half @llvm.canonicalize.f16(half 0xH03FF)
86 store half %canonicalized, half addrspace(1)* %out
87 ret void
88}
89
Matt Arsenaulta6867fd2017-01-23 22:31:03 +000090; GCN-LABEL: {{^}}test_default_denormals_fold_canonicalize_denormal1_f16:
91; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0xffff83ff{{$}}
Matt Arsenaultce841302016-12-22 03:05:37 +000092; GCN: buffer_store_short [[REG]]
Matt Arsenaulta6867fd2017-01-23 22:31:03 +000093define void @test_default_denormals_fold_canonicalize_denormal1_f16(half addrspace(1)* %out) #1 {
Matt Arsenaultce841302016-12-22 03:05:37 +000094 %canonicalized = call half @llvm.canonicalize.f16(half 0xH83FF)
95 store half %canonicalized, half addrspace(1)* %out
96 ret void
97}
98
99; GCN-LABEL: {{^}}test_denormals_fold_canonicalize_denormal1_f16:
100; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0xffff83ff{{$}}
101; GCN: buffer_store_short [[REG]]
102define void @test_denormals_fold_canonicalize_denormal1_f16(half addrspace(1)* %out) #3 {
103 %canonicalized = call half @llvm.canonicalize.f16(half 0xH83FF)
104 store half %canonicalized, half addrspace(1)* %out
105 ret void
106}
107
108; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_f16:
109; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7c00{{$}}
110; GCN: buffer_store_short [[REG]]
111define void @test_fold_canonicalize_qnan_f16(half addrspace(1)* %out) #1 {
112 %canonicalized = call half @llvm.canonicalize.f16(half 0xH7C00)
113 store half %canonicalized, half addrspace(1)* %out
114 ret void
115}
116
117; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_value_neg1_f16:
118; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7e00{{$}}
119; GCN: buffer_store_short [[REG]]
120define void @test_fold_canonicalize_qnan_value_neg1_f16(half addrspace(1)* %out) #1 {
121 %canonicalized = call half @llvm.canonicalize.f16(half bitcast (i16 -1 to half))
122 store half %canonicalized, half addrspace(1)* %out
123 ret void
124}
125
126; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_value_neg2_f16:
127; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7e00{{$}}
128; GCN: buffer_store_short [[REG]]
129define void @test_fold_canonicalize_qnan_value_neg2_f16(half addrspace(1)* %out) #1 {
130 %canonicalized = call half @llvm.canonicalize.f16(half bitcast (i16 -2 to half))
131 store half %canonicalized, half addrspace(1)* %out
132 ret void
133}
134
135; GCN-LABEL: {{^}}test_fold_canonicalize_snan0_value_f16:
136; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7e00{{$}}
137; GCN: buffer_store_short [[REG]]
138define void @test_fold_canonicalize_snan0_value_f16(half addrspace(1)* %out) #1 {
139 %canonicalized = call half @llvm.canonicalize.f16(half 0xH7C01)
140 store half %canonicalized, half addrspace(1)* %out
141 ret void
142}
143
144; GCN-LABEL: {{^}}test_fold_canonicalize_snan1_value_f16:
145; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7e00{{$}}
146; GCN: buffer_store_short [[REG]]
147define void @test_fold_canonicalize_snan1_value_f16(half addrspace(1)* %out) #1 {
148 %canonicalized = call half @llvm.canonicalize.f16(half 0xH7DFF)
149 store half %canonicalized, half addrspace(1)* %out
150 ret void
151}
152
153; GCN-LABEL: {{^}}test_fold_canonicalize_snan2_value_f16:
154; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7e00{{$}}
155; GCN: buffer_store_short [[REG]]
156define void @test_fold_canonicalize_snan2_value_f16(half addrspace(1)* %out) #1 {
157 %canonicalized = call half @llvm.canonicalize.f16(half 0xHFDFF)
158 store half %canonicalized, half addrspace(1)* %out
159 ret void
160}
161
162; GCN-LABEL: {{^}}test_fold_canonicalize_snan3_value_f16:
163; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7e00{{$}}
164; GCN: buffer_store_short [[REG]]
165define void @test_fold_canonicalize_snan3_value_f16(half addrspace(1)* %out) #1 {
166 %canonicalized = call half @llvm.canonicalize.f16(half 0xHFC01)
167 store half %canonicalized, half addrspace(1)* %out
168 ret void
169}
170
Matt Arsenault70306612017-01-23 18:52:26 +0000171; GCN-LABEL: {{^}}v_test_canonicalize_var_v2f16:
172; GCN: v_mul_f16_e32 [[REG0:v[0-9]+]], 1.0, {{v[0-9]+}}
173; GCN: v_mul_f16_e32 [[REG1:v[0-9]+]], 1.0, {{v[0-9]+}}
174; GCN: v_lshlrev_b32_e32 v{{[0-9]+}}, 16,
175define void @v_test_canonicalize_var_v2f16(<2 x half> addrspace(1)* %out) #1 {
176 %val = load <2 x half>, <2 x half> addrspace(1)* %out
177 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %val)
178 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
179 ret void
180}
181
182; FIXME: Fold modifier
183; GCN-LABEL: {{^}}v_test_canonicalize_fabs_var_v2f16:
184; GCN: v_bfe_u32
185; GCN: v_and_b32_e32 v{{[0-9]+}}, 0x7fff7fff, v{{[0-9]+}}
186; GCN: v_mul_f16_e32 [[REG0:v[0-9]+]], 1.0, v{{[0-9]+}}
187; GCN: v_mul_f16_e32 [[REG1:v[0-9]+]], 1.0, v{{[0-9]+}}
188; GCN: v_or_b32
189; GCN: buffer_store_dword
190define void @v_test_canonicalize_fabs_var_v2f16(<2 x half> addrspace(1)* %out) #1 {
191 %val = load <2 x half>, <2 x half> addrspace(1)* %out
192 %val.fabs = call <2 x half> @llvm.fabs.v2f16(<2 x half> %val)
193 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %val.fabs)
194 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
195 ret void
196}
197
198; GCN-LABEL: {{^}}v_test_canonicalize_fneg_fabs_var_v2f16:
199; GCN: v_or_b32_e32 v{{[0-9]+}}, 0x80008000, v{{[0-9]+}}
200; GCN: v_mul_f16_e32 [[REG0:v[0-9]+]], 1.0, v{{[0-9]+}}
201; GCN: v_mul_f16_e32 [[REG1:v[0-9]+]], 1.0, v{{[0-9]+}}
202; GCN: v_or_b32
203; GCN: buffer_store_dword
204define void @v_test_canonicalize_fneg_fabs_var_v2f16(<2 x half> addrspace(1)* %out) #1 {
205 %val = load <2 x half>, <2 x half> addrspace(1)* %out
206 %val.fabs = call <2 x half> @llvm.fabs.v2f16(<2 x half> %val)
207 %val.fabs.fneg = fsub <2 x half> <half -0.0, half -0.0>, %val.fabs
208 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %val.fabs.fneg)
209 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
210 ret void
211}
212
213; FIXME: Fold modifier
214; GCN-LABEL: {{^}}v_test_canonicalize_fneg_var_v2f16:
215; GCN: v_xor_b32_e32 [[FNEG:v[0-9]+]], 0x80008000, v{{[0-9]+}}
216; GCN: v_lshrrev_b32_e32 [[FNEG_HI:v[0-9]+]], 16, [[FNEG]]
217; GCN: v_mul_f16_e32 [[REG0:v[0-9]+]], 1.0, [[FNEG]]
218; GCN: v_mul_f16_e32 [[REG1:v[0-9]+]], 1.0, [[FNEG_HI]]
219; GCN: v_lshlrev_b32_e32 v{{[0-9]+}}, 16,
220define void @v_test_canonicalize_fneg_var_v2f16(<2 x half> addrspace(1)* %out) #1 {
221 %val = load <2 x half>, <2 x half> addrspace(1)* %out
222 %fneg.val = fsub <2 x half> <half -0.0, half -0.0>, %val
223 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %fneg.val)
224 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
225 ret void
226}
227
228; GCN-LABEL: {{^}}s_test_canonicalize_var_v2f16:
229; GCN: v_mul_f16_e64 [[REG0:v[0-9]+]], 1.0, {{s[0-9]+}}
230; GCN: v_mul_f16_e64 [[REG1:v[0-9]+]], 1.0, {{s[0-9]+}}
231; GCN: v_lshlrev_b32_e32 v{{[0-9]+}}, 16,
232define void @s_test_canonicalize_var_v2f16(<2 x half> addrspace(1)* %out, i32 zeroext %val.arg) #1 {
233 %val = bitcast i32 %val.arg to <2 x half>
234 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %val)
235 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
236 ret void
237}
238
239; GCN-LABEL: {{^}}test_fold_canonicalize_p0_v2f16:
240; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0{{$}}
241; GCN: buffer_store_dword [[REG]]
242define void @test_fold_canonicalize_p0_v2f16(<2 x half> addrspace(1)* %out) #1 {
243 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> zeroinitializer)
244 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
245 ret void
246}
247
248; GCN-LABEL: {{^}}test_fold_canonicalize_n0_v2f16:
249; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x80008000{{$}}
250; GCN: buffer_store_dword [[REG]]
251define void @test_fold_canonicalize_n0_v2f16(<2 x half> addrspace(1)* %out) #1 {
252 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half -0.0, half -0.0>)
253 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
254 ret void
255}
256
257; GCN-LABEL: {{^}}test_fold_canonicalize_p1_v2f16:
258; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x3c003c00{{$}}
259; GCN: buffer_store_dword [[REG]]
260define void @test_fold_canonicalize_p1_v2f16(<2 x half> addrspace(1)* %out) #1 {
261 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 1.0, half 1.0>)
262 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
263 ret void
264}
265
266; GCN-LABEL: {{^}}test_fold_canonicalize_n1_v2f16:
267; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0xbc00bc00{{$}}
268; GCN: buffer_store_dword [[REG]]
269define void @test_fold_canonicalize_n1_v2f16(<2 x half> addrspace(1)* %out) #1 {
270 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half -1.0, half -1.0>)
271 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
272 ret void
273}
274
275; GCN-LABEL: {{^}}test_fold_canonicalize_literal_v2f16:
276; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x4c004c00{{$}}
277; GCN: buffer_store_dword [[REG]]
278define void @test_fold_canonicalize_literal_v2f16(<2 x half> addrspace(1)* %out) #1 {
279 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 16.0, half 16.0>)
280 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
281 ret void
282}
283
284; GCN-LABEL: {{^}}test_no_denormals_fold_canonicalize_denormal0_v2f16:
Matt Arsenaulta6867fd2017-01-23 22:31:03 +0000285; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x3ff03ff{{$}}
Matt Arsenault70306612017-01-23 18:52:26 +0000286; GCN: buffer_store_dword [[REG]]
287define void @test_no_denormals_fold_canonicalize_denormal0_v2f16(<2 x half> addrspace(1)* %out) #1 {
288 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xH03FF, half 0xH03FF>)
289 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
290 ret void
291}
292
293; GCN-LABEL: {{^}}test_denormals_fold_canonicalize_denormal0_v2f16:
294; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x3ff03ff{{$}}
295; GCN: buffer_store_dword [[REG]]
296define void @test_denormals_fold_canonicalize_denormal0_v2f16(<2 x half> addrspace(1)* %out) #3 {
297 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xH03FF, half 0xH03FF>)
298 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
299 ret void
300}
301
302; GCN-LABEL: {{^}}test_no_denormals_fold_canonicalize_denormal1_v2f16:
Matt Arsenaulta6867fd2017-01-23 22:31:03 +0000303; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x83ff83ff{{$}}
Matt Arsenault70306612017-01-23 18:52:26 +0000304; GCN: buffer_store_dword [[REG]]
305define void @test_no_denormals_fold_canonicalize_denormal1_v2f16(<2 x half> addrspace(1)* %out) #1 {
306 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xH83FF, half 0xH83FF>)
307 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
308 ret void
309}
310
311; GCN-LABEL: {{^}}test_denormals_fold_canonicalize_denormal1_v2f16:
312; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x83ff83ff{{$}}
313; GCN: buffer_store_dword [[REG]]
314define void @test_denormals_fold_canonicalize_denormal1_v2f16(<2 x half> addrspace(1)* %out) #3 {
315 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xH83FF, half 0xH83FF>)
316 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
317 ret void
318}
319
320; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_v2f16:
321; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7c007c00{{$}}
322; GCN: buffer_store_dword [[REG]]
323define void @test_fold_canonicalize_qnan_v2f16(<2 x half> addrspace(1)* %out) #1 {
324 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xH7C00, half 0xH7C00>)
325 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
326 ret void
327}
328
329; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_value_neg1_v2f16:
330; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7e007e00{{$}}
331; GCN: buffer_store_dword [[REG]]
332define void @test_fold_canonicalize_qnan_value_neg1_v2f16(<2 x half> addrspace(1)* %out) #1 {
333 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> bitcast (i32 -1 to <2 x half>))
334 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
335 ret void
336}
337
338; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_value_neg2_v2f16:
339; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7e007e00{{$}}
340; GCN: buffer_store_dword [[REG]]
341define void @test_fold_canonicalize_qnan_value_neg2_v2f16(<2 x half> addrspace(1)* %out) #1 {
342 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half bitcast (i16 -2 to half), half bitcast (i16 -2 to half)>)
343 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
344 ret void
345}
346
347; GCN-LABEL: {{^}}test_fold_canonicalize_snan0_value_v2f16:
348; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7e007e00{{$}}
349; GCN: buffer_store_dword [[REG]]
350define void @test_fold_canonicalize_snan0_value_v2f16(<2 x half> addrspace(1)* %out) #1 {
351 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xH7C01, half 0xH7C01>)
352 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
353 ret void
354}
355
356; GCN-LABEL: {{^}}test_fold_canonicalize_snan1_value_v2f16:
357; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7e007e00{{$}}
358; GCN: buffer_store_dword [[REG]]
359define void @test_fold_canonicalize_snan1_value_v2f16(<2 x half> addrspace(1)* %out) #1 {
360 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xH7DFF, half 0xH7DFF>)
361 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
362 ret void
363}
364
365; GCN-LABEL: {{^}}test_fold_canonicalize_snan2_value_v2f16:
366; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7e007e00{{$}}
367; GCN: buffer_store_dword [[REG]]
368define void @test_fold_canonicalize_snan2_value_v2f16(<2 x half> addrspace(1)* %out) #1 {
369 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xHFDFF, half 0xHFDFF>)
370 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
371 ret void
372}
373
374; GCN-LABEL: {{^}}test_fold_canonicalize_snan3_value_v2f16:
375; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7e007e00{{$}}
376; GCN: buffer_store_dword [[REG]]
377define void @test_fold_canonicalize_snan3_value_v2f16(<2 x half> addrspace(1)* %out) #1 {
378 %canonicalized = call <2 x half> @llvm.canonicalize.v2f16(<2 x half> <half 0xHFC01, half 0xHFC01>)
379 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %out
380 ret void
381}
382
Matt Arsenaultce841302016-12-22 03:05:37 +0000383attributes #0 = { nounwind readnone }
384attributes #1 = { nounwind }
Matt Arsenaulta6867fd2017-01-23 22:31:03 +0000385attributes #2 = { nounwind "target-features"="-fp64-fp16-denormals" }
386attributes #3 = { nounwind "target-features"="+fp64-fp16-denormals" }