blob: 075a6482713e02931f5235964aa158c9edb09ed0 [file] [log] [blame]
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +00001; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
Matt Arsenault9cd90712016-04-14 01:42:16 +00002
Matt Arsenaultd5d78512017-01-31 17:28:40 +00003declare float @llvm.fabs.f32(float) #0
Matt Arsenault9cd90712016-04-14 01:42:16 +00004declare float @llvm.canonicalize.f32(float) #0
Matt Arsenaultd5d78512017-01-31 17:28:40 +00005declare double @llvm.fabs.f64(double) #0
Matt Arsenault9cd90712016-04-14 01:42:16 +00006declare double @llvm.canonicalize.f64(double) #0
7
8; GCN-LABEL: {{^}}v_test_canonicalize_var_f32:
9; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
10; GCN: buffer_store_dword [[REG]]
11define void @v_test_canonicalize_var_f32(float addrspace(1)* %out) #1 {
12 %val = load float, float addrspace(1)* %out
13 %canonicalized = call float @llvm.canonicalize.f32(float %val)
14 store float %canonicalized, float addrspace(1)* %out
15 ret void
16}
17
18; GCN-LABEL: {{^}}s_test_canonicalize_var_f32:
19; GCN: v_mul_f32_e64 [[REG:v[0-9]+]], 1.0, {{s[0-9]+}}
20; GCN: buffer_store_dword [[REG]]
21define void @s_test_canonicalize_var_f32(float addrspace(1)* %out, float %val) #1 {
22 %canonicalized = call float @llvm.canonicalize.f32(float %val)
23 store float %canonicalized, float addrspace(1)* %out
24 ret void
25}
26
Matt Arsenaultd5d78512017-01-31 17:28:40 +000027; GCN-LABEL: {{^}}v_test_canonicalize_fabs_var_f32:
28; GCN: v_mul_f32_e64 [[REG:v[0-9]+]], 1.0, |{{v[0-9]+}}|
29; GCN: buffer_store_dword [[REG]]
30define void @v_test_canonicalize_fabs_var_f32(float addrspace(1)* %out) #1 {
31 %val = load float, float addrspace(1)* %out
32 %val.fabs = call float @llvm.fabs.f32(float %val)
33 %canonicalized = call float @llvm.canonicalize.f32(float %val.fabs)
34 store float %canonicalized, float addrspace(1)* %out
35 ret void
36}
37
38; GCN-LABEL: {{^}}v_test_canonicalize_fneg_fabs_var_f32:
39; GCN: v_mul_f32_e64 [[REG:v[0-9]+]], 1.0, -|{{v[0-9]+}}|
40; GCN: buffer_store_dword [[REG]]
41define void @v_test_canonicalize_fneg_fabs_var_f32(float addrspace(1)* %out) #1 {
42 %val = load float, float addrspace(1)* %out
43 %val.fabs = call float @llvm.fabs.f32(float %val)
44 %val.fabs.fneg = fsub float -0.0, %val.fabs
45 %canonicalized = call float @llvm.canonicalize.f32(float %val.fabs.fneg)
46 store float %canonicalized, float addrspace(1)* %out
47 ret void
48}
49
50; GCN-LABEL: {{^}}v_test_canonicalize_fneg_var_f32:
51; GCN: v_mul_f32_e64 [[REG:v[0-9]+]], 1.0, -{{v[0-9]+}}
52; GCN: buffer_store_dword [[REG]]
53define void @v_test_canonicalize_fneg_var_f32(float addrspace(1)* %out) #1 {
54 %val = load float, float addrspace(1)* %out
55 %val.fneg = fsub float -0.0, %val
56 %canonicalized = call float @llvm.canonicalize.f32(float %val.fneg)
57 store float %canonicalized, float addrspace(1)* %out
58 ret void
59}
60
Matt Arsenault9cd90712016-04-14 01:42:16 +000061; GCN-LABEL: {{^}}test_fold_canonicalize_p0_f32:
62; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0{{$}}
63; GCN: buffer_store_dword [[REG]]
64define void @test_fold_canonicalize_p0_f32(float addrspace(1)* %out) #1 {
65 %canonicalized = call float @llvm.canonicalize.f32(float 0.0)
66 store float %canonicalized, float addrspace(1)* %out
67 ret void
68}
69
70; GCN-LABEL: {{^}}test_fold_canonicalize_n0_f32:
71; GCN: v_bfrev_b32_e32 [[REG:v[0-9]+]], 1{{$}}
72; GCN: buffer_store_dword [[REG]]
73define void @test_fold_canonicalize_n0_f32(float addrspace(1)* %out) #1 {
74 %canonicalized = call float @llvm.canonicalize.f32(float -0.0)
75 store float %canonicalized, float addrspace(1)* %out
76 ret void
77}
78
79; GCN-LABEL: {{^}}test_fold_canonicalize_p1_f32:
80; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 1.0{{$}}
81; GCN: buffer_store_dword [[REG]]
82define void @test_fold_canonicalize_p1_f32(float addrspace(1)* %out) #1 {
83 %canonicalized = call float @llvm.canonicalize.f32(float 1.0)
84 store float %canonicalized, float addrspace(1)* %out
85 ret void
86}
87
88; GCN-LABEL: {{^}}test_fold_canonicalize_n1_f32:
89; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], -1.0{{$}}
90; GCN: buffer_store_dword [[REG]]
91define void @test_fold_canonicalize_n1_f32(float addrspace(1)* %out) #1 {
92 %canonicalized = call float @llvm.canonicalize.f32(float -1.0)
93 store float %canonicalized, float addrspace(1)* %out
94 ret void
95}
96
97; GCN-LABEL: {{^}}test_fold_canonicalize_literal_f32:
98; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x41800000{{$}}
99; GCN: buffer_store_dword [[REG]]
100define void @test_fold_canonicalize_literal_f32(float addrspace(1)* %out) #1 {
101 %canonicalized = call float @llvm.canonicalize.f32(float 16.0)
102 store float %canonicalized, float addrspace(1)* %out
103 ret void
104}
105
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000106; GCN-LABEL: {{^}}test_no_denormals_fold_canonicalize_denormal0_f32:
107; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0{{$}}
Matt Arsenault9cd90712016-04-14 01:42:16 +0000108; GCN: buffer_store_dword [[REG]]
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000109define void @test_no_denormals_fold_canonicalize_denormal0_f32(float addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000110 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 8388607 to float))
111 store float %canonicalized, float addrspace(1)* %out
112 ret void
113}
114
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000115; GCN-LABEL: {{^}}test_denormals_fold_canonicalize_denormal0_f32:
116; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fffff{{$}}
Matt Arsenault9cd90712016-04-14 01:42:16 +0000117; GCN: buffer_store_dword [[REG]]
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000118define void @test_denormals_fold_canonicalize_denormal0_f32(float addrspace(1)* %out) #3 {
119 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 8388607 to float))
120 store float %canonicalized, float addrspace(1)* %out
121 ret void
122}
123
124; GCN-LABEL: {{^}}test_no_denormals_fold_canonicalize_denormal1_f32:
125; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0{{$}}
126; GCN: buffer_store_dword [[REG]]
127define void @test_no_denormals_fold_canonicalize_denormal1_f32(float addrspace(1)* %out) #1 {
128 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 2155872255 to float))
129 store float %canonicalized, float addrspace(1)* %out
130 ret void
131}
132
133; GCN-LABEL: {{^}}test_denormals_fold_canonicalize_denormal1_f32:
134; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x807fffff{{$}}
135; GCN: buffer_store_dword [[REG]]
136define void @test_denormals_fold_canonicalize_denormal1_f32(float addrspace(1)* %out) #3 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000137 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 2155872255 to float))
138 store float %canonicalized, float addrspace(1)* %out
139 ret void
140}
141
142; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_f32:
143; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fc00000{{$}}
144; GCN: buffer_store_dword [[REG]]
145define void @test_fold_canonicalize_qnan_f32(float addrspace(1)* %out) #1 {
146 %canonicalized = call float @llvm.canonicalize.f32(float 0x7FF8000000000000)
147 store float %canonicalized, float addrspace(1)* %out
148 ret void
149}
150
151; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_value_neg1_f32:
152; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fc00000{{$}}
153; GCN: buffer_store_dword [[REG]]
154define void @test_fold_canonicalize_qnan_value_neg1_f32(float addrspace(1)* %out) #1 {
155 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 -1 to float))
156 store float %canonicalized, float addrspace(1)* %out
157 ret void
158}
159
160; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_value_neg2_f32:
161; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fc00000{{$}}
162; GCN: buffer_store_dword [[REG]]
163define void @test_fold_canonicalize_qnan_value_neg2_f32(float addrspace(1)* %out) #1 {
164 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 -2 to float))
165 store float %canonicalized, float addrspace(1)* %out
166 ret void
167}
168
169; GCN-LABEL: {{^}}test_fold_canonicalize_snan0_value_f32:
170; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fc00000{{$}}
171; GCN: buffer_store_dword [[REG]]
172define void @test_fold_canonicalize_snan0_value_f32(float addrspace(1)* %out) #1 {
173 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 2139095041 to float))
174 store float %canonicalized, float addrspace(1)* %out
175 ret void
176}
177
178; GCN-LABEL: {{^}}test_fold_canonicalize_snan1_value_f32:
179; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fc00000{{$}}
180; GCN: buffer_store_dword [[REG]]
181define void @test_fold_canonicalize_snan1_value_f32(float addrspace(1)* %out) #1 {
182 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 2143289343 to float))
183 store float %canonicalized, float addrspace(1)* %out
184 ret void
185}
186
187; GCN-LABEL: {{^}}test_fold_canonicalize_snan2_value_f32:
188; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fc00000{{$}}
189; GCN: buffer_store_dword [[REG]]
190define void @test_fold_canonicalize_snan2_value_f32(float addrspace(1)* %out) #1 {
191 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 4286578689 to float))
192 store float %canonicalized, float addrspace(1)* %out
193 ret void
194}
195
196; GCN-LABEL: {{^}}test_fold_canonicalize_snan3_value_f32:
197; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fc00000{{$}}
198; GCN: buffer_store_dword [[REG]]
199define void @test_fold_canonicalize_snan3_value_f32(float addrspace(1)* %out) #1 {
200 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 4290772991 to float))
201 store float %canonicalized, float addrspace(1)* %out
202 ret void
203}
204
205; GCN-LABEL: {{^}}v_test_canonicalize_var_f64:
206; GCN: v_mul_f64 [[REG:v\[[0-9]+:[0-9]+\]]], 1.0, {{v\[[0-9]+:[0-9]+\]}}
207; GCN: buffer_store_dwordx2 [[REG]]
208define void @v_test_canonicalize_var_f64(double addrspace(1)* %out) #1 {
209 %val = load double, double addrspace(1)* %out
210 %canonicalized = call double @llvm.canonicalize.f64(double %val)
211 store double %canonicalized, double addrspace(1)* %out
212 ret void
213}
214
215; GCN-LABEL: {{^}}s_test_canonicalize_var_f64:
216; GCN: v_mul_f64 [[REG:v\[[0-9]+:[0-9]+\]]], 1.0, {{s\[[0-9]+:[0-9]+\]}}
217; GCN: buffer_store_dwordx2 [[REG]]
218define void @s_test_canonicalize_var_f64(double addrspace(1)* %out, double %val) #1 {
219 %canonicalized = call double @llvm.canonicalize.f64(double %val)
220 store double %canonicalized, double addrspace(1)* %out
221 ret void
222}
223
Matt Arsenaultd5d78512017-01-31 17:28:40 +0000224; GCN-LABEL: {{^}}v_test_canonicalize_fabs_var_f64:
225; GCN: v_mul_f64 [[REG:v\[[0-9]+:[0-9]+\]]], 1.0, |{{v\[[0-9]+:[0-9]+\]}}|
226; GCN: buffer_store_dwordx2 [[REG]]
227define void @v_test_canonicalize_fabs_var_f64(double addrspace(1)* %out) #1 {
228 %val = load double, double addrspace(1)* %out
229 %val.fabs = call double @llvm.fabs.f64(double %val)
230 %canonicalized = call double @llvm.canonicalize.f64(double %val.fabs)
231 store double %canonicalized, double addrspace(1)* %out
232 ret void
233}
234
235; GCN-LABEL: {{^}}v_test_canonicalize_fneg_fabs_var_f64:
236; GCN: v_mul_f64 [[REG:v\[[0-9]+:[0-9]\]]], 1.0, -|{{v\[[0-9]+:[0-9]+\]}}|
237; GCN: buffer_store_dwordx2 [[REG]]
238define void @v_test_canonicalize_fneg_fabs_var_f64(double addrspace(1)* %out) #1 {
239 %val = load double, double addrspace(1)* %out
240 %val.fabs = call double @llvm.fabs.f64(double %val)
241 %val.fabs.fneg = fsub double -0.0, %val.fabs
242 %canonicalized = call double @llvm.canonicalize.f64(double %val.fabs.fneg)
243 store double %canonicalized, double addrspace(1)* %out
244 ret void
245}
246
247; GCN-LABEL: {{^}}v_test_canonicalize_fneg_var_f64:
248; GCN: v_mul_f64 [[REG:v\[[0-9]+:[0-9]+\]]], 1.0, -{{v\[[0-9]+:[0-9]+\]}}
249; GCN: buffer_store_dwordx2 [[REG]]
250define void @v_test_canonicalize_fneg_var_f64(double addrspace(1)* %out) #1 {
251 %val = load double, double addrspace(1)* %out
252 %val.fneg = fsub double -0.0, %val
253 %canonicalized = call double @llvm.canonicalize.f64(double %val.fneg)
254 store double %canonicalized, double addrspace(1)* %out
255 ret void
256}
257
Matt Arsenault9cd90712016-04-14 01:42:16 +0000258; GCN-LABEL: {{^}}test_fold_canonicalize_p0_f64:
259; GCN: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
Matt Arsenault2b957b52016-05-02 20:07:26 +0000260; GCN: v_mov_b32_e32 v[[HI:[0-9]+]], v[[LO]]{{$}}
Matt Arsenault9cd90712016-04-14 01:42:16 +0000261; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
262define void @test_fold_canonicalize_p0_f64(double addrspace(1)* %out) #1 {
263 %canonicalized = call double @llvm.canonicalize.f64(double 0.0)
264 store double %canonicalized, double addrspace(1)* %out
265 ret void
266}
267
268; GCN-LABEL: {{^}}test_fold_canonicalize_n0_f64:
269; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
270; GCN-DAG: v_bfrev_b32_e32 v[[HI:[0-9]+]], 1{{$}}
271; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
272define void @test_fold_canonicalize_n0_f64(double addrspace(1)* %out) #1 {
273 %canonicalized = call double @llvm.canonicalize.f64(double -0.0)
274 store double %canonicalized, double addrspace(1)* %out
275 ret void
276}
277
278; GCN-LABEL: {{^}}test_fold_canonicalize_p1_f64:
279; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
280; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x3ff00000{{$}}
281; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
282define void @test_fold_canonicalize_p1_f64(double addrspace(1)* %out) #1 {
283 %canonicalized = call double @llvm.canonicalize.f64(double 1.0)
284 store double %canonicalized, double addrspace(1)* %out
285 ret void
286}
287
288; GCN-LABEL: {{^}}test_fold_canonicalize_n1_f64:
289; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
290; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0xbff00000{{$}}
291; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
292define void @test_fold_canonicalize_n1_f64(double addrspace(1)* %out) #1 {
293 %canonicalized = call double @llvm.canonicalize.f64(double -1.0)
294 store double %canonicalized, double addrspace(1)* %out
295 ret void
296}
297
298; GCN-LABEL: {{^}}test_fold_canonicalize_literal_f64:
299; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
300; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x40300000{{$}}
301; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
302define void @test_fold_canonicalize_literal_f64(double addrspace(1)* %out) #1 {
303 %canonicalized = call double @llvm.canonicalize.f64(double 16.0)
304 store double %canonicalized, double addrspace(1)* %out
305 ret void
306}
307
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000308; GCN-LABEL: {{^}}test_no_denormals_fold_canonicalize_denormal0_f64:
309; GCN: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
310; GCN: v_mov_b32_e32 v[[HI:[0-9]+]], v[[LO]]{{$}}
Matt Arsenault9cd90712016-04-14 01:42:16 +0000311; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000312define void @test_no_denormals_fold_canonicalize_denormal0_f64(double addrspace(1)* %out) #2 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000313 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 4503599627370495 to double))
314 store double %canonicalized, double addrspace(1)* %out
315 ret void
316}
317
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000318; GCN-LABEL: {{^}}test_denormals_fold_canonicalize_denormal0_f64:
319; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], -1{{$}}
320; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0xfffff{{$}}
Matt Arsenault9cd90712016-04-14 01:42:16 +0000321; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000322define void @test_denormals_fold_canonicalize_denormal0_f64(double addrspace(1)* %out) #3 {
323 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 4503599627370495 to double))
324 store double %canonicalized, double addrspace(1)* %out
325 ret void
326}
327
328; GCN-LABEL: {{^}}test_no_denormals_fold_canonicalize_denormal1_f64:
329; GCN: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
330; GCN: v_mov_b32_e32 v[[HI:[0-9]+]], v[[LO]]{{$}}
331; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
332define void @test_no_denormals_fold_canonicalize_denormal1_f64(double addrspace(1)* %out) #2 {
333 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 9227875636482146303 to double))
334 store double %canonicalized, double addrspace(1)* %out
335 ret void
336}
337
338; GCN-LABEL: {{^}}test_denormals_fold_canonicalize_denormal1_f64:
339; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], -1{{$}}
340; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x800fffff{{$}}
341; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
342define void @test_denormals_fold_canonicalize_denormal1_f64(double addrspace(1)* %out) #3 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000343 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 9227875636482146303 to double))
344 store double %canonicalized, double addrspace(1)* %out
345 ret void
346}
347
348; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_f64:
349; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x7ff80000{{$}}
350; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
351; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
352define void @test_fold_canonicalize_qnan_f64(double addrspace(1)* %out) #1 {
353 %canonicalized = call double @llvm.canonicalize.f64(double 0x7FF8000000000000)
354 store double %canonicalized, double addrspace(1)* %out
355 ret void
356}
357
358; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_value_neg1_f64:
359; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x7ff80000{{$}}
360; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
361; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
362define void @test_fold_canonicalize_qnan_value_neg1_f64(double addrspace(1)* %out) #1 {
363 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 -1 to double))
364 store double %canonicalized, double addrspace(1)* %out
365 ret void
366}
367
368; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_value_neg2_f64:
369; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x7ff80000{{$}}
370; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
371; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
372define void @test_fold_canonicalize_qnan_value_neg2_f64(double addrspace(1)* %out) #1 {
373 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 -2 to double))
374 store double %canonicalized, double addrspace(1)* %out
375 ret void
376}
377
378; GCN-LABEL: {{^}}test_fold_canonicalize_snan0_value_f64:
379; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x7ff80000{{$}}
380; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
381; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
382define void @test_fold_canonicalize_snan0_value_f64(double addrspace(1)* %out) #1 {
383 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 9218868437227405313 to double))
384 store double %canonicalized, double addrspace(1)* %out
385 ret void
386}
387
388; GCN-LABEL: {{^}}test_fold_canonicalize_snan1_value_f64:
389; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x7ff80000{{$}}
390; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
391; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
392define void @test_fold_canonicalize_snan1_value_f64(double addrspace(1)* %out) #1 {
393 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 9223372036854775807 to double))
394 store double %canonicalized, double addrspace(1)* %out
395 ret void
396}
397
398; GCN-LABEL: {{^}}test_fold_canonicalize_snan2_value_f64:
399; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x7ff80000{{$}}
400; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
401; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
402define void @test_fold_canonicalize_snan2_value_f64(double addrspace(1)* %out) #1 {
403 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 18442240474082181121 to double))
404 store double %canonicalized, double addrspace(1)* %out
405 ret void
406}
407
408; GCN-LABEL: {{^}}test_fold_canonicalize_snan3_value_f64:
409; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x7ff80000{{$}}
410; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
411; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
412define void @test_fold_canonicalize_snan3_value_f64(double addrspace(1)* %out) #1 {
413 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 18446744073709551615 to double))
414 store double %canonicalized, double addrspace(1)* %out
415 ret void
416}
417
418attributes #0 = { nounwind readnone }
419attributes #1 = { nounwind }
Matt Arsenaulta6867fd2017-01-23 22:31:03 +0000420attributes #2 = { nounwind "target-features"="-fp32-denormals,-fp64-fp16-denormals" }
421attributes #3 = { nounwind "target-features"="+fp32-denormals,+fp64-fp16-denormals" }