blob: 8ea72ec3fdb81dff4f65bf501328dbae3fa882eb [file] [log] [blame]
Stanislav Mekhanoshin06cab792017-08-30 03:03:38 +00001; RUN: llc -amdgpu-scalarize-global-loads=false -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 Arsenault9d49c442018-09-18 01:51:33 +00005declare <2 x float> @llvm.canonicalize.v2f32(<2 x float>) #0
6declare <3 x float> @llvm.canonicalize.v3f32(<3 x float>) #0
7declare <4 x float> @llvm.canonicalize.v4f32(<4 x float>) #0
8declare <8 x float> @llvm.canonicalize.v8f32(<8 x float>) #0
Matt Arsenaultd5d78512017-01-31 17:28:40 +00009declare double @llvm.fabs.f64(double) #0
Matt Arsenault9cd90712016-04-14 01:42:16 +000010declare double @llvm.canonicalize.f64(double) #0
Matt Arsenault9d49c442018-09-18 01:51:33 +000011declare <2 x double> @llvm.canonicalize.v2f64(<2 x double>) #0
12declare <3 x double> @llvm.canonicalize.v3f64(<3 x double>) #0
13declare <4 x double> @llvm.canonicalize.v4f64(<4 x double>) #0
Stanislav Mekhanoshin06cab792017-08-30 03:03:38 +000014declare half @llvm.canonicalize.f16(half) #0
Stanislav Mekhanoshin442e28d2017-09-06 22:27:29 +000015declare <2 x half> @llvm.canonicalize.v2f16(<2 x half>) #0
Stanislav Mekhanoshin06cab792017-08-30 03:03:38 +000016declare i32 @llvm.amdgcn.workitem.id.x() #0
Matt Arsenault9cd90712016-04-14 01:42:16 +000017
18; GCN-LABEL: {{^}}v_test_canonicalize_var_f32:
19; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
20; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000021define amdgpu_kernel void @v_test_canonicalize_var_f32(float addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +000022 %val = load float, float addrspace(1)* %out
23 %canonicalized = call float @llvm.canonicalize.f32(float %val)
24 store float %canonicalized, float addrspace(1)* %out
25 ret void
26}
27
28; GCN-LABEL: {{^}}s_test_canonicalize_var_f32:
29; GCN: v_mul_f32_e64 [[REG:v[0-9]+]], 1.0, {{s[0-9]+}}
30; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000031define amdgpu_kernel void @s_test_canonicalize_var_f32(float addrspace(1)* %out, float %val) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +000032 %canonicalized = call float @llvm.canonicalize.f32(float %val)
33 store float %canonicalized, float addrspace(1)* %out
34 ret void
35}
36
Matt Arsenaultd5d78512017-01-31 17:28:40 +000037; GCN-LABEL: {{^}}v_test_canonicalize_fabs_var_f32:
38; GCN: v_mul_f32_e64 [[REG:v[0-9]+]], 1.0, |{{v[0-9]+}}|
39; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000040define amdgpu_kernel void @v_test_canonicalize_fabs_var_f32(float addrspace(1)* %out) #1 {
Matt Arsenaultd5d78512017-01-31 17:28:40 +000041 %val = load float, float addrspace(1)* %out
42 %val.fabs = call float @llvm.fabs.f32(float %val)
43 %canonicalized = call float @llvm.canonicalize.f32(float %val.fabs)
44 store float %canonicalized, float addrspace(1)* %out
45 ret void
46}
47
48; GCN-LABEL: {{^}}v_test_canonicalize_fneg_fabs_var_f32:
Matt Arsenaultde496c322018-07-30 12:16:58 +000049; GCN: v_mul_f32_e64 [[REG:v[0-9]+]], -1.0, |{{v[0-9]+}}|
Matt Arsenaultd5d78512017-01-31 17:28:40 +000050; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000051define amdgpu_kernel void @v_test_canonicalize_fneg_fabs_var_f32(float addrspace(1)* %out) #1 {
Matt Arsenaultd5d78512017-01-31 17:28:40 +000052 %val = load float, float addrspace(1)* %out
53 %val.fabs = call float @llvm.fabs.f32(float %val)
54 %val.fabs.fneg = fsub float -0.0, %val.fabs
55 %canonicalized = call float @llvm.canonicalize.f32(float %val.fabs.fneg)
56 store float %canonicalized, float addrspace(1)* %out
57 ret void
58}
59
60; GCN-LABEL: {{^}}v_test_canonicalize_fneg_var_f32:
Matt Arsenaultde496c322018-07-30 12:16:58 +000061; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], -1.0, {{v[0-9]+}}
Matt Arsenaultd5d78512017-01-31 17:28:40 +000062; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000063define amdgpu_kernel void @v_test_canonicalize_fneg_var_f32(float addrspace(1)* %out) #1 {
Matt Arsenaultd5d78512017-01-31 17:28:40 +000064 %val = load float, float addrspace(1)* %out
65 %val.fneg = fsub float -0.0, %val
66 %canonicalized = call float @llvm.canonicalize.f32(float %val.fneg)
67 store float %canonicalized, float addrspace(1)* %out
68 ret void
69}
70
Matt Arsenault4aec86d2018-07-31 13:34:31 +000071; GCN-LABEL: {{^}}test_fold_canonicalize_undef_f32:
72; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fc00000{{$}}
73; GCN: buffer_store_dword [[REG]]
74define amdgpu_kernel void @test_fold_canonicalize_undef_f32(float addrspace(1)* %out) #1 {
75 %canonicalized = call float @llvm.canonicalize.f32(float undef)
76 store float %canonicalized, float addrspace(1)* %out
77 ret void
78}
79
Matt Arsenault9cd90712016-04-14 01:42:16 +000080; GCN-LABEL: {{^}}test_fold_canonicalize_p0_f32:
81; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0{{$}}
82; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000083define amdgpu_kernel void @test_fold_canonicalize_p0_f32(float addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +000084 %canonicalized = call float @llvm.canonicalize.f32(float 0.0)
85 store float %canonicalized, float addrspace(1)* %out
86 ret void
87}
88
89; GCN-LABEL: {{^}}test_fold_canonicalize_n0_f32:
90; GCN: v_bfrev_b32_e32 [[REG:v[0-9]+]], 1{{$}}
91; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000092define amdgpu_kernel void @test_fold_canonicalize_n0_f32(float addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +000093 %canonicalized = call float @llvm.canonicalize.f32(float -0.0)
94 store float %canonicalized, float addrspace(1)* %out
95 ret void
96}
97
98; GCN-LABEL: {{^}}test_fold_canonicalize_p1_f32:
99; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 1.0{{$}}
100; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000101define amdgpu_kernel void @test_fold_canonicalize_p1_f32(float addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000102 %canonicalized = call float @llvm.canonicalize.f32(float 1.0)
103 store float %canonicalized, float addrspace(1)* %out
104 ret void
105}
106
107; GCN-LABEL: {{^}}test_fold_canonicalize_n1_f32:
108; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], -1.0{{$}}
109; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000110define amdgpu_kernel void @test_fold_canonicalize_n1_f32(float addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000111 %canonicalized = call float @llvm.canonicalize.f32(float -1.0)
112 store float %canonicalized, float addrspace(1)* %out
113 ret void
114}
115
116; GCN-LABEL: {{^}}test_fold_canonicalize_literal_f32:
117; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x41800000{{$}}
118; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000119define amdgpu_kernel void @test_fold_canonicalize_literal_f32(float addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000120 %canonicalized = call float @llvm.canonicalize.f32(float 16.0)
121 store float %canonicalized, float addrspace(1)* %out
122 ret void
123}
124
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000125; GCN-LABEL: {{^}}test_no_denormals_fold_canonicalize_denormal0_f32:
126; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0{{$}}
Matt Arsenault9cd90712016-04-14 01:42:16 +0000127; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000128define amdgpu_kernel void @test_no_denormals_fold_canonicalize_denormal0_f32(float addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000129 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 8388607 to float))
130 store float %canonicalized, float addrspace(1)* %out
131 ret void
132}
133
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000134; GCN-LABEL: {{^}}test_denormals_fold_canonicalize_denormal0_f32:
135; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fffff{{$}}
Matt Arsenault9cd90712016-04-14 01:42:16 +0000136; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000137define amdgpu_kernel void @test_denormals_fold_canonicalize_denormal0_f32(float addrspace(1)* %out) #3 {
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000138 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 8388607 to float))
139 store float %canonicalized, float addrspace(1)* %out
140 ret void
141}
142
143; GCN-LABEL: {{^}}test_no_denormals_fold_canonicalize_denormal1_f32:
144; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0{{$}}
145; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000146define amdgpu_kernel void @test_no_denormals_fold_canonicalize_denormal1_f32(float addrspace(1)* %out) #1 {
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000147 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 2155872255 to float))
148 store float %canonicalized, float addrspace(1)* %out
149 ret void
150}
151
152; GCN-LABEL: {{^}}test_denormals_fold_canonicalize_denormal1_f32:
153; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x807fffff{{$}}
154; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000155define amdgpu_kernel void @test_denormals_fold_canonicalize_denormal1_f32(float addrspace(1)* %out) #3 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000156 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 2155872255 to float))
157 store float %canonicalized, float addrspace(1)* %out
158 ret void
159}
160
161; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_f32:
162; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fc00000{{$}}
163; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000164define amdgpu_kernel void @test_fold_canonicalize_qnan_f32(float addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000165 %canonicalized = call float @llvm.canonicalize.f32(float 0x7FF8000000000000)
166 store float %canonicalized, float addrspace(1)* %out
167 ret void
168}
169
170; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_value_neg1_f32:
171; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fc00000{{$}}
172; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000173define amdgpu_kernel void @test_fold_canonicalize_qnan_value_neg1_f32(float addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000174 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 -1 to float))
175 store float %canonicalized, float addrspace(1)* %out
176 ret void
177}
178
179; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_value_neg2_f32:
180; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fc00000{{$}}
181; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000182define amdgpu_kernel void @test_fold_canonicalize_qnan_value_neg2_f32(float addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000183 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 -2 to float))
184 store float %canonicalized, float addrspace(1)* %out
185 ret void
186}
187
188; GCN-LABEL: {{^}}test_fold_canonicalize_snan0_value_f32:
189; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fc00000{{$}}
190; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000191define amdgpu_kernel void @test_fold_canonicalize_snan0_value_f32(float addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000192 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 2139095041 to float))
193 store float %canonicalized, float addrspace(1)* %out
194 ret void
195}
196
197; GCN-LABEL: {{^}}test_fold_canonicalize_snan1_value_f32:
198; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fc00000{{$}}
199; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000200define amdgpu_kernel void @test_fold_canonicalize_snan1_value_f32(float addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000201 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 2143289343 to float))
202 store float %canonicalized, float addrspace(1)* %out
203 ret void
204}
205
206; GCN-LABEL: {{^}}test_fold_canonicalize_snan2_value_f32:
207; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fc00000{{$}}
208; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000209define amdgpu_kernel void @test_fold_canonicalize_snan2_value_f32(float addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000210 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 4286578689 to float))
211 store float %canonicalized, float addrspace(1)* %out
212 ret void
213}
214
215; GCN-LABEL: {{^}}test_fold_canonicalize_snan3_value_f32:
216; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x7fc00000{{$}}
217; GCN: buffer_store_dword [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000218define amdgpu_kernel void @test_fold_canonicalize_snan3_value_f32(float addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000219 %canonicalized = call float @llvm.canonicalize.f32(float bitcast (i32 4290772991 to float))
220 store float %canonicalized, float addrspace(1)* %out
221 ret void
222}
223
224; GCN-LABEL: {{^}}v_test_canonicalize_var_f64:
Stanislav Mekhanoshin06cab792017-08-30 03:03:38 +0000225; GCN: v_max_f64 [[REG:v\[[0-9]+:[0-9]+\]]], {{v\[[0-9]+:[0-9]+\]}}, {{v\[[0-9]+:[0-9]+\]}}
Matt Arsenault9cd90712016-04-14 01:42:16 +0000226; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000227define amdgpu_kernel void @v_test_canonicalize_var_f64(double addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000228 %val = load double, double addrspace(1)* %out
229 %canonicalized = call double @llvm.canonicalize.f64(double %val)
230 store double %canonicalized, double addrspace(1)* %out
231 ret void
232}
233
234; GCN-LABEL: {{^}}s_test_canonicalize_var_f64:
Stanislav Mekhanoshin06cab792017-08-30 03:03:38 +0000235; GCN: v_max_f64 [[REG:v\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}
Matt Arsenault9cd90712016-04-14 01:42:16 +0000236; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000237define amdgpu_kernel void @s_test_canonicalize_var_f64(double addrspace(1)* %out, double %val) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000238 %canonicalized = call double @llvm.canonicalize.f64(double %val)
239 store double %canonicalized, double addrspace(1)* %out
240 ret void
241}
242
Matt Arsenaultd5d78512017-01-31 17:28:40 +0000243; GCN-LABEL: {{^}}v_test_canonicalize_fabs_var_f64:
Stanislav Mekhanoshin06cab792017-08-30 03:03:38 +0000244; GCN: v_max_f64 [[REG:v\[[0-9]+:[0-9]+\]]], |{{v\[[0-9]+:[0-9]+\]}}|, |{{v\[[0-9]+:[0-9]+\]}}|
Matt Arsenaultd5d78512017-01-31 17:28:40 +0000245; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000246define amdgpu_kernel void @v_test_canonicalize_fabs_var_f64(double addrspace(1)* %out) #1 {
Matt Arsenaultd5d78512017-01-31 17:28:40 +0000247 %val = load double, double addrspace(1)* %out
248 %val.fabs = call double @llvm.fabs.f64(double %val)
249 %canonicalized = call double @llvm.canonicalize.f64(double %val.fabs)
250 store double %canonicalized, double addrspace(1)* %out
251 ret void
252}
253
254; GCN-LABEL: {{^}}v_test_canonicalize_fneg_fabs_var_f64:
Stanislav Mekhanoshin06cab792017-08-30 03:03:38 +0000255; GCN: v_max_f64 [[REG:v\[[0-9]+:[0-9]\]]], -|{{v\[[0-9]+:[0-9]+\]}}|, -|{{v\[[0-9]+:[0-9]+\]}}|
Matt Arsenaultd5d78512017-01-31 17:28:40 +0000256; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000257define amdgpu_kernel void @v_test_canonicalize_fneg_fabs_var_f64(double addrspace(1)* %out) #1 {
Matt Arsenaultd5d78512017-01-31 17:28:40 +0000258 %val = load double, double addrspace(1)* %out
259 %val.fabs = call double @llvm.fabs.f64(double %val)
260 %val.fabs.fneg = fsub double -0.0, %val.fabs
261 %canonicalized = call double @llvm.canonicalize.f64(double %val.fabs.fneg)
262 store double %canonicalized, double addrspace(1)* %out
263 ret void
264}
265
266; GCN-LABEL: {{^}}v_test_canonicalize_fneg_var_f64:
Stanislav Mekhanoshin06cab792017-08-30 03:03:38 +0000267; GCN: v_max_f64 [[REG:v\[[0-9]+:[0-9]+\]]], -{{v\[[0-9]+:[0-9]+\]}}, -{{v\[[0-9]+:[0-9]+\]}}
Matt Arsenaultd5d78512017-01-31 17:28:40 +0000268; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000269define amdgpu_kernel void @v_test_canonicalize_fneg_var_f64(double addrspace(1)* %out) #1 {
Matt Arsenaultd5d78512017-01-31 17:28:40 +0000270 %val = load double, double addrspace(1)* %out
271 %val.fneg = fsub double -0.0, %val
272 %canonicalized = call double @llvm.canonicalize.f64(double %val.fneg)
273 store double %canonicalized, double addrspace(1)* %out
274 ret void
275}
276
Matt Arsenault9cd90712016-04-14 01:42:16 +0000277; GCN-LABEL: {{^}}test_fold_canonicalize_p0_f64:
278; GCN: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
Matt Arsenault2b957b52016-05-02 20:07:26 +0000279; GCN: v_mov_b32_e32 v[[HI:[0-9]+]], v[[LO]]{{$}}
Matt Arsenault9cd90712016-04-14 01:42:16 +0000280; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000281define amdgpu_kernel void @test_fold_canonicalize_p0_f64(double addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000282 %canonicalized = call double @llvm.canonicalize.f64(double 0.0)
283 store double %canonicalized, double addrspace(1)* %out
284 ret void
285}
286
287; GCN-LABEL: {{^}}test_fold_canonicalize_n0_f64:
288; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
289; GCN-DAG: v_bfrev_b32_e32 v[[HI:[0-9]+]], 1{{$}}
290; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000291define amdgpu_kernel void @test_fold_canonicalize_n0_f64(double addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000292 %canonicalized = call double @llvm.canonicalize.f64(double -0.0)
293 store double %canonicalized, double addrspace(1)* %out
294 ret void
295}
296
297; GCN-LABEL: {{^}}test_fold_canonicalize_p1_f64:
298; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
299; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x3ff00000{{$}}
300; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000301define amdgpu_kernel void @test_fold_canonicalize_p1_f64(double addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000302 %canonicalized = call double @llvm.canonicalize.f64(double 1.0)
303 store double %canonicalized, double addrspace(1)* %out
304 ret void
305}
306
307; GCN-LABEL: {{^}}test_fold_canonicalize_n1_f64:
308; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
309; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0xbff00000{{$}}
310; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000311define amdgpu_kernel void @test_fold_canonicalize_n1_f64(double addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000312 %canonicalized = call double @llvm.canonicalize.f64(double -1.0)
313 store double %canonicalized, double addrspace(1)* %out
314 ret void
315}
316
317; GCN-LABEL: {{^}}test_fold_canonicalize_literal_f64:
318; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
319; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x40300000{{$}}
320; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000321define amdgpu_kernel void @test_fold_canonicalize_literal_f64(double addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000322 %canonicalized = call double @llvm.canonicalize.f64(double 16.0)
323 store double %canonicalized, double addrspace(1)* %out
324 ret void
325}
326
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000327; GCN-LABEL: {{^}}test_no_denormals_fold_canonicalize_denormal0_f64:
328; GCN: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
329; GCN: v_mov_b32_e32 v[[HI:[0-9]+]], v[[LO]]{{$}}
Matt Arsenault9cd90712016-04-14 01:42:16 +0000330; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000331define amdgpu_kernel void @test_no_denormals_fold_canonicalize_denormal0_f64(double addrspace(1)* %out) #2 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000332 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 4503599627370495 to double))
333 store double %canonicalized, double addrspace(1)* %out
334 ret void
335}
336
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000337; GCN-LABEL: {{^}}test_denormals_fold_canonicalize_denormal0_f64:
338; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], -1{{$}}
339; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0xfffff{{$}}
Matt Arsenault9cd90712016-04-14 01:42:16 +0000340; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000341define amdgpu_kernel void @test_denormals_fold_canonicalize_denormal0_f64(double addrspace(1)* %out) #3 {
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000342 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 4503599627370495 to double))
343 store double %canonicalized, double addrspace(1)* %out
344 ret void
345}
346
347; GCN-LABEL: {{^}}test_no_denormals_fold_canonicalize_denormal1_f64:
348; GCN: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
349; GCN: v_mov_b32_e32 v[[HI:[0-9]+]], v[[LO]]{{$}}
350; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000351define amdgpu_kernel void @test_no_denormals_fold_canonicalize_denormal1_f64(double addrspace(1)* %out) #2 {
Matt Arsenaultb2cb5f82016-07-09 07:55:03 +0000352 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 9227875636482146303 to double))
353 store double %canonicalized, double addrspace(1)* %out
354 ret void
355}
356
357; GCN-LABEL: {{^}}test_denormals_fold_canonicalize_denormal1_f64:
358; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], -1{{$}}
359; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x800fffff{{$}}
360; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000361define amdgpu_kernel void @test_denormals_fold_canonicalize_denormal1_f64(double addrspace(1)* %out) #3 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000362 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 9227875636482146303 to double))
363 store double %canonicalized, double addrspace(1)* %out
364 ret void
365}
366
367; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_f64:
368; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x7ff80000{{$}}
369; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
370; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000371define amdgpu_kernel void @test_fold_canonicalize_qnan_f64(double addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000372 %canonicalized = call double @llvm.canonicalize.f64(double 0x7FF8000000000000)
373 store double %canonicalized, double addrspace(1)* %out
374 ret void
375}
376
377; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_value_neg1_f64:
378; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x7ff80000{{$}}
379; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
380; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000381define amdgpu_kernel void @test_fold_canonicalize_qnan_value_neg1_f64(double addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000382 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 -1 to double))
383 store double %canonicalized, double addrspace(1)* %out
384 ret void
385}
386
387; GCN-LABEL: {{^}}test_fold_canonicalize_qnan_value_neg2_f64:
388; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x7ff80000{{$}}
389; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
390; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000391define amdgpu_kernel void @test_fold_canonicalize_qnan_value_neg2_f64(double addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000392 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 -2 to double))
393 store double %canonicalized, double addrspace(1)* %out
394 ret void
395}
396
397; GCN-LABEL: {{^}}test_fold_canonicalize_snan0_value_f64:
398; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x7ff80000{{$}}
399; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
400; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000401define amdgpu_kernel void @test_fold_canonicalize_snan0_value_f64(double addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000402 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 9218868437227405313 to double))
403 store double %canonicalized, double addrspace(1)* %out
404 ret void
405}
406
407; GCN-LABEL: {{^}}test_fold_canonicalize_snan1_value_f64:
408; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x7ff80000{{$}}
409; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
410; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000411define amdgpu_kernel void @test_fold_canonicalize_snan1_value_f64(double addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000412 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 9223372036854775807 to double))
413 store double %canonicalized, double addrspace(1)* %out
414 ret void
415}
416
417; GCN-LABEL: {{^}}test_fold_canonicalize_snan2_value_f64:
418; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x7ff80000{{$}}
419; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
420; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000421define amdgpu_kernel void @test_fold_canonicalize_snan2_value_f64(double addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000422 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 18442240474082181121 to double))
423 store double %canonicalized, double addrspace(1)* %out
424 ret void
425}
426
427; GCN-LABEL: {{^}}test_fold_canonicalize_snan3_value_f64:
428; GCN-DAG: v_mov_b32_e32 v[[HI:[0-9]+]], 0x7ff80000{{$}}
429; GCN-DAG: v_mov_b32_e32 v[[LO:[0-9]+]], 0{{$}}
430; GCN: buffer_store_dwordx2 v{{\[}}[[LO]]:[[HI]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000431define amdgpu_kernel void @test_fold_canonicalize_snan3_value_f64(double addrspace(1)* %out) #1 {
Matt Arsenault9cd90712016-04-14 01:42:16 +0000432 %canonicalized = call double @llvm.canonicalize.f64(double bitcast (i64 18446744073709551615 to double))
433 store double %canonicalized, double addrspace(1)* %out
434 ret void
435}
436
Stanislav Mekhanoshin06cab792017-08-30 03:03:38 +0000437; GCN-LABEL: {{^}}test_canonicalize_value_f64_flush:
438; GCN: v_mul_f64 v[{{[0-9:]+}}], 1.0, v[{{[0-9:]+}}]
439define amdgpu_kernel void @test_canonicalize_value_f64_flush(double addrspace(1)* %arg, double addrspace(1)* %out) #4 {
440 %id = tail call i32 @llvm.amdgcn.workitem.id.x()
441 %gep = getelementptr inbounds double, double addrspace(1)* %arg, i32 %id
442 %v = load double, double addrspace(1)* %gep, align 8
443 %canonicalized = tail call double @llvm.canonicalize.f64(double %v)
444 %gep2 = getelementptr inbounds double, double addrspace(1)* %out, i32 %id
445 store double %canonicalized, double addrspace(1)* %gep2, align 8
446 ret void
447}
448
449; GCN-LABEL: {{^}}test_canonicalize_value_f32_flush:
450; GCN: v_mul_f32_e32 {{v[0-9]+}}, 1.0, {{v[0-9]+}}
451define amdgpu_kernel void @test_canonicalize_value_f32_flush(float addrspace(1)* %arg, float addrspace(1)* %out) #4 {
452 %id = tail call i32 @llvm.amdgcn.workitem.id.x()
453 %gep = getelementptr inbounds float, float addrspace(1)* %arg, i32 %id
454 %v = load float, float addrspace(1)* %gep, align 4
455 %canonicalized = tail call float @llvm.canonicalize.f32(float %v)
456 %gep2 = getelementptr inbounds float, float addrspace(1)* %out, i32 %id
457 store float %canonicalized, float addrspace(1)* %gep2, align 4
458 ret void
459}
460
461; GCN-LABEL: {{^}}test_canonicalize_value_f16_flush:
462; GCN: v_mul_f16_e32 {{v[0-9]+}}, 1.0, {{v[0-9]+}}
463define amdgpu_kernel void @test_canonicalize_value_f16_flush(half addrspace(1)* %arg, half addrspace(1)* %out) #4 {
464 %id = tail call i32 @llvm.amdgcn.workitem.id.x()
465 %gep = getelementptr inbounds half, half addrspace(1)* %arg, i32 %id
466 %v = load half, half addrspace(1)* %gep, align 2
467 %canonicalized = tail call half @llvm.canonicalize.f16(half %v)
468 %gep2 = getelementptr inbounds half, half addrspace(1)* %out, i32 %id
469 store half %canonicalized, half addrspace(1)* %gep2, align 2
470 ret void
471}
472
Stanislav Mekhanoshin442e28d2017-09-06 22:27:29 +0000473; GCN-LABEL: {{^}}test_canonicalize_value_v2f16_flush_gfx8:
474; GCN: v_mov_b32_e32 [[ONE:v[0-9]+]], 0x3c00
475; GCN-DAG: v_mul_f16_sdwa v{{[0-9]+}}, [[ONE]], v{{[0-9]+}} dst_sel:DWORD dst_unused:UNUSED_PAD src0_sel:DWORD src1_sel:WORD_1
476; GCN-DAG: v_mul_f16_e32 v{{[0-9]+}}, 1.0, v{{[0-9]+}}
477define amdgpu_kernel void @test_canonicalize_value_v2f16_flush_gfx8(<2 x half> addrspace(1)* %arg, <2 x half> addrspace(1)* %out) #4 {
478 %id = tail call i32 @llvm.amdgcn.workitem.id.x()
479 %gep = getelementptr inbounds <2 x half>, <2 x half> addrspace(1)* %arg, i32 %id
480 %v = load <2 x half>, <2 x half> addrspace(1)* %gep, align 4
481 %canonicalized = tail call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %v)
482 %gep2 = getelementptr inbounds <2 x half>, <2 x half> addrspace(1)* %out, i32 %id
483 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %gep2, align 2
484 ret void
485}
486
487; GCN-LABEL: {{^}}test_canonicalize_value_v2f16_flush_gfx9:
Stanislav Mekhanoshind9930d42019-05-13 19:30:06 +0000488; GCN-DAG: v_pk_mul_f16 v{{[0-9]+}}, 1.0, v{{[0-9]+}} op_sel_hi:[0,1]{{$}}
Stanislav Mekhanoshin442e28d2017-09-06 22:27:29 +0000489define amdgpu_kernel void @test_canonicalize_value_v2f16_flush_gfx9(<2 x half> addrspace(1)* %arg, <2 x half> addrspace(1)* %out) #6 {
490 %id = tail call i32 @llvm.amdgcn.workitem.id.x()
491 %gep = getelementptr inbounds <2 x half>, <2 x half> addrspace(1)* %arg, i32 %id
492 %v = load <2 x half>, <2 x half> addrspace(1)* %gep, align 4
493 %canonicalized = tail call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %v)
494 %gep2 = getelementptr inbounds <2 x half>, <2 x half> addrspace(1)* %out, i32 %id
495 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %gep2, align 2
496 ret void
497}
498
Stanislav Mekhanoshin06cab792017-08-30 03:03:38 +0000499; GCN-LABEL: {{^}}test_canonicalize_value_f64_denorm:
500; GCN: v_max_f64 v[{{[0-9:]+}}], v[{{[0-9:]+}}], v[{{[0-9:]+}}]
501define amdgpu_kernel void @test_canonicalize_value_f64_denorm(double addrspace(1)* %arg, double addrspace(1)* %out) #5 {
502 %id = tail call i32 @llvm.amdgcn.workitem.id.x()
503 %gep = getelementptr inbounds double, double addrspace(1)* %arg, i32 %id
504 %v = load double, double addrspace(1)* %gep, align 8
505 %canonicalized = tail call double @llvm.canonicalize.f64(double %v)
506 %gep2 = getelementptr inbounds double, double addrspace(1)* %out, i32 %id
507 store double %canonicalized, double addrspace(1)* %gep2, align 8
508 ret void
509}
510
511; GCN-LABEL: {{^}}test_canonicalize_value_f32_denorm:
512; GCN: v_max_f32_e32 {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}}
513define amdgpu_kernel void @test_canonicalize_value_f32_denorm(float addrspace(1)* %arg, float addrspace(1)* %out) #5 {
514 %id = tail call i32 @llvm.amdgcn.workitem.id.x()
515 %gep = getelementptr inbounds float, float addrspace(1)* %arg, i32 %id
516 %v = load float, float addrspace(1)* %gep, align 4
517 %canonicalized = tail call float @llvm.canonicalize.f32(float %v)
518 %gep2 = getelementptr inbounds float, float addrspace(1)* %out, i32 %id
519 store float %canonicalized, float addrspace(1)* %gep2, align 4
520 ret void
521}
522
523; GCN-LABEL: {{^}}test_canonicalize_value_f16_denorm:
524; GCN: v_max_f16_e32 {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}}
525define amdgpu_kernel void @test_canonicalize_value_f16_denorm(half addrspace(1)* %arg, half addrspace(1)* %out) #5 {
526 %id = tail call i32 @llvm.amdgcn.workitem.id.x()
527 %gep = getelementptr inbounds half, half addrspace(1)* %arg, i32 %id
528 %v = load half, half addrspace(1)* %gep, align 2
529 %canonicalized = tail call half @llvm.canonicalize.f16(half %v)
530 %gep2 = getelementptr inbounds half, half addrspace(1)* %out, i32 %id
531 store half %canonicalized, half addrspace(1)* %gep2, align 2
532 ret void
533}
534
Stanislav Mekhanoshin442e28d2017-09-06 22:27:29 +0000535; GCN-LABEL: {{^}}test_canonicalize_value_v2f16_denorm:
536; GCN: v_pk_max_f16 {{v[0-9]+}}, {{v[0-9]+}}, {{v[0-9]+}}
537define amdgpu_kernel void @test_canonicalize_value_v2f16_denorm(<2 x half> addrspace(1)* %arg, <2 x half> addrspace(1)* %out) #5 {
538 %id = tail call i32 @llvm.amdgcn.workitem.id.x()
539 %gep = getelementptr inbounds <2 x half>, <2 x half> addrspace(1)* %arg, i32 %id
540 %v = load <2 x half>, <2 x half> addrspace(1)* %gep, align 4
541 %canonicalized = tail call <2 x half> @llvm.canonicalize.v2f16(<2 x half> %v)
542 %gep2 = getelementptr inbounds <2 x half>, <2 x half> addrspace(1)* %out, i32 %id
543 store <2 x half> %canonicalized, <2 x half> addrspace(1)* %gep2, align 2
544 ret void
545}
546
Matt Arsenault540512c2018-04-26 19:21:37 +0000547; GCN-LABEL: {{^}}v_test_canonicalize_var_v2f64:
548; GCN: v_max_f64
549; GCN: v_max_f64
550define amdgpu_kernel void @v_test_canonicalize_var_v2f64(<2 x double> addrspace(1)* %out) #1 {
551 %tid = call i32 @llvm.amdgcn.workitem.id.x()
552 %gep = getelementptr <2 x double>, <2 x double> addrspace(1)* %out, i32 %tid
553 %val = load <2 x double>, <2 x double> addrspace(1)* %gep
554 %canonicalized = call <2 x double> @llvm.canonicalize.v2f64(<2 x double> %val)
555 store <2 x double> %canonicalized, <2 x double> addrspace(1)* %out
556 ret void
557}
558
Matt Arsenault9d49c442018-09-18 01:51:33 +0000559; GCN-LABEL: {{^}}v_test_canonicalize_v2f32:
560; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
561; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
562define <2 x float> @v_test_canonicalize_v2f32(<2 x float> %arg) #1 {
563 %canon = call <2 x float> @llvm.canonicalize.v2f32(<2 x float> %arg)
564 ret <2 x float> %canon
565}
566
567; GCN-LABEL: {{^}}v_test_canonicalize_v3f32:
568; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
569; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
570; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
571define <3 x float> @v_test_canonicalize_v3f32(<3 x float> %arg) #1 {
572 %canon = call <3 x float> @llvm.canonicalize.v3f32(<3 x float> %arg)
573 ret <3 x float> %canon
574}
575
576; GCN-LABEL: {{^}}v_test_canonicalize_v4f32:
577; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
578; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
579; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
580; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
581define <4 x float> @v_test_canonicalize_v4f32(<4 x float> %arg) #1 {
582 %canon = call <4 x float> @llvm.canonicalize.v4f32(<4 x float> %arg)
583 ret <4 x float> %canon
584}
585
586; GCN-LABEL: {{^}}v_test_canonicalize_v8f32:
587; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
588; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
589; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
590; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
591; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
592; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
593; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
594; GCN: v_mul_f32_e32 [[REG:v[0-9]+]], 1.0, {{v[0-9]+}}
595define <8 x float> @v_test_canonicalize_v8f32(<8 x float> %arg) #1 {
596 %canon = call <8 x float> @llvm.canonicalize.v8f32(<8 x float> %arg)
597 ret <8 x float> %canon
598}
599
600; GCN-LABEL: {{^}}v_test_canonicalize_v2f64:
601; GCN: v_max_f64
602; GCN: v_max_f64
603define <2 x double> @v_test_canonicalize_v2f64(<2 x double> %arg) #1 {
604 %canon = call <2 x double> @llvm.canonicalize.v2f64(<2 x double> %arg)
605 ret <2 x double> %canon
606}
607
608; GCN-LABEL: {{^}}v_test_canonicalize_v3f64:
609; GCN: v_max_f64
610; GCN: v_max_f64
611; GCN: v_max_f64
612define <3 x double> @v_test_canonicalize_v3f64(<3 x double> %arg) #1 {
613 %canon = call <3 x double> @llvm.canonicalize.v3f64(<3 x double> %arg)
614 ret <3 x double> %canon
615}
616
617; GCN-LABEL: {{^}}v_test_canonicalize_v4f64:
618; GCN: v_max_f64
619; GCN: v_max_f64
620; GCN: v_max_f64
621; GCN: v_max_f64
622define <4 x double> @v_test_canonicalize_v4f64(<4 x double> %arg) #1 {
623 %canon = call <4 x double> @llvm.canonicalize.v4f64(<4 x double> %arg)
624 ret <4 x double> %canon
625}
626
Matt Arsenault9cd90712016-04-14 01:42:16 +0000627attributes #0 = { nounwind readnone }
628attributes #1 = { nounwind }
Matt Arsenaulta6867fd2017-01-23 22:31:03 +0000629attributes #2 = { nounwind "target-features"="-fp32-denormals,-fp64-fp16-denormals" }
630attributes #3 = { nounwind "target-features"="+fp32-denormals,+fp64-fp16-denormals" }
Stanislav Mekhanoshin06cab792017-08-30 03:03:38 +0000631attributes #4 = { nounwind "target-features"="-fp32-denormals,-fp64-fp16-denormals" "target-cpu"="tonga" }
632attributes #5 = { nounwind "target-features"="+fp32-denormals,+fp64-fp16-denormals" "target-cpu"="gfx900" }
Stanislav Mekhanoshin442e28d2017-09-06 22:27:29 +0000633attributes #6 = { nounwind "target-features"="-fp32-denormals,-fp64-fp16-denormals" "target-cpu"="gfx900" }