1 ; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
2 ; RUN: llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
4 declare i64 @llvm.amdgcn.fcmp.f32(float, float, i32) #0
5 declare i64 @llvm.amdgcn.fcmp.f64(double, double, i32) #0
6 declare float @llvm.fabs.f32(float) #0
8 ; GCN-LABEL: {{^}}v_fcmp_f32_dynamic_cc:
10 define amdgpu_kernel void @v_fcmp_f32_dynamic_cc(i64 addrspace(1)* %out, float %src0, float %src1, i32 %cc) {
11 %result = call i64 @llvm.amdgcn.fcmp.f32(float %src0, float %src1, i32 %cc)
12 store i64 %result, i64 addrspace(1)* %out
16 ; GCN-LABEL: {{^}}v_fcmp_f32_oeq_with_fabs:
17 ; GCN: v_cmp_eq_f32_e64 {{s\[[0-9]+:[0-9]+\]}}, {{s[0-9]+}}, |{{v[0-9]+}}|
18 define amdgpu_kernel void @v_fcmp_f32_oeq_with_fabs(i64 addrspace(1)* %out, float %src, float %a) {
19 %temp = call float @llvm.fabs.f32(float %a)
20 %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float %temp, i32 1)
21 store i64 %result, i64 addrspace(1)* %out
25 ; GCN-LABEL: {{^}}v_fcmp_f32_oeq_both_operands_with_fabs:
26 ; GCN: v_cmp_eq_f32_e64 {{s\[[0-9]+:[0-9]+\]}}, |{{s[0-9]+}}|, |{{v[0-9]+}}|
27 define amdgpu_kernel void @v_fcmp_f32_oeq_both_operands_with_fabs(i64 addrspace(1)* %out, float %src, float %a) {
28 %temp = call float @llvm.fabs.f32(float %a)
29 %src_input = call float @llvm.fabs.f32(float %src)
30 %result = call i64 @llvm.amdgcn.fcmp.f32(float %src_input, float %temp, i32 1)
31 store i64 %result, i64 addrspace(1)* %out
35 ; GCN-LABEL: {{^}}v_fcmp:
36 ; GCN-NOT: v_cmp_eq_f32_e64
37 define amdgpu_kernel void @v_fcmp(i64 addrspace(1)* %out, float %src) {
38 %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 -1)
39 store i64 %result, i64 addrspace(1)* %out
43 ; GCN-LABEL: {{^}}v_fcmp_f32_oeq:
44 ; GCN: v_cmp_eq_f32_e64
45 define amdgpu_kernel void @v_fcmp_f32_oeq(i64 addrspace(1)* %out, float %src) {
46 %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 1)
47 store i64 %result, i64 addrspace(1)* %out
51 ; GCN-LABEL: {{^}}v_fcmp_f32_one:
52 ; GCN: v_cmp_neq_f32_e64
53 define amdgpu_kernel void @v_fcmp_f32_one(i64 addrspace(1)* %out, float %src) {
54 %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 6)
55 store i64 %result, i64 addrspace(1)* %out
59 ; GCN-LABEL: {{^}}v_fcmp_f32_ogt:
60 ; GCN: v_cmp_gt_f32_e64
61 define amdgpu_kernel void @v_fcmp_f32_ogt(i64 addrspace(1)* %out, float %src) {
62 %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 2)
63 store i64 %result, i64 addrspace(1)* %out
67 ; GCN-LABEL: {{^}}v_fcmp_f32_oge:
68 ; GCN: v_cmp_ge_f32_e64
69 define amdgpu_kernel void @v_fcmp_f32_oge(i64 addrspace(1)* %out, float %src) {
70 %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 3)
71 store i64 %result, i64 addrspace(1)* %out
75 ; GCN-LABEL: {{^}}v_fcmp_f32_olt:
76 ; GCN: v_cmp_lt_f32_e64
77 define amdgpu_kernel void @v_fcmp_f32_olt(i64 addrspace(1)* %out, float %src) {
78 %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 4)
79 store i64 %result, i64 addrspace(1)* %out
83 ; GCN-LABEL: {{^}}v_fcmp_f32_ole:
84 ; GCN: v_cmp_le_f32_e64
85 define amdgpu_kernel void @v_fcmp_f32_ole(i64 addrspace(1)* %out, float %src) {
86 %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 5)
87 store i64 %result, i64 addrspace(1)* %out
92 ; GCN-LABEL: {{^}}v_fcmp_f32_ueq:
93 ; GCN: v_cmp_nlg_f32_e64
94 define amdgpu_kernel void @v_fcmp_f32_ueq(i64 addrspace(1)* %out, float %src) {
95 %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 9)
96 store i64 %result, i64 addrspace(1)* %out
100 ; GCN-LABEL: {{^}}v_fcmp_f32_une:
101 ; GCN: v_cmp_neq_f32_e64
102 define amdgpu_kernel void @v_fcmp_f32_une(i64 addrspace(1)* %out, float %src) {
103 %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 14)
104 store i64 %result, i64 addrspace(1)* %out
108 ; GCN-LABEL: {{^}}v_fcmp_f32_ugt:
109 ; GCN: v_cmp_nle_f32_e64
110 define amdgpu_kernel void @v_fcmp_f32_ugt(i64 addrspace(1)* %out, float %src) {
111 %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 10)
112 store i64 %result, i64 addrspace(1)* %out
116 ; GCN-LABEL: {{^}}v_fcmp_f32_uge:
117 ; GCN: v_cmp_nlt_f32_e64
118 define amdgpu_kernel void @v_fcmp_f32_uge(i64 addrspace(1)* %out, float %src) {
119 %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 11)
120 store i64 %result, i64 addrspace(1)* %out
124 ; GCN-LABEL: {{^}}v_fcmp_f32_ult:
125 ; GCN: v_cmp_nge_f32_e64
126 define amdgpu_kernel void @v_fcmp_f32_ult(i64 addrspace(1)* %out, float %src) {
127 %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 12)
128 store i64 %result, i64 addrspace(1)* %out
132 ; GCN-LABEL: {{^}}v_fcmp_f32_ule:
133 ; GCN: v_cmp_ngt_f32_e64
134 define amdgpu_kernel void @v_fcmp_f32_ule(i64 addrspace(1)* %out, float %src) {
135 %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 13)
136 store i64 %result, i64 addrspace(1)* %out
140 ; GCN-LABEL: {{^}}v_fcmp_f64_oeq:
141 ; GCN: v_cmp_eq_f64_e64
142 define amdgpu_kernel void @v_fcmp_f64_oeq(i64 addrspace(1)* %out, double %src) {
143 %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 1)
144 store i64 %result, i64 addrspace(1)* %out
148 ; GCN-LABEL: {{^}}v_fcmp_f64_one:
149 ; GCN: v_cmp_neq_f64_e64
150 define amdgpu_kernel void @v_fcmp_f64_one(i64 addrspace(1)* %out, double %src) {
151 %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 6)
152 store i64 %result, i64 addrspace(1)* %out
156 ; GCN-LABEL: {{^}}v_fcmp_f64_ogt:
157 ; GCN: v_cmp_gt_f64_e64
158 define amdgpu_kernel void @v_fcmp_f64_ogt(i64 addrspace(1)* %out, double %src) {
159 %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 2)
160 store i64 %result, i64 addrspace(1)* %out
164 ; GCN-LABEL: {{^}}v_fcmp_f64_oge:
165 ; GCN: v_cmp_ge_f64_e64
166 define amdgpu_kernel void @v_fcmp_f64_oge(i64 addrspace(1)* %out, double %src) {
167 %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 3)
168 store i64 %result, i64 addrspace(1)* %out
172 ; GCN-LABEL: {{^}}v_fcmp_f64_olt:
173 ; GCN: v_cmp_lt_f64_e64
174 define amdgpu_kernel void @v_fcmp_f64_olt(i64 addrspace(1)* %out, double %src) {
175 %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 4)
176 store i64 %result, i64 addrspace(1)* %out
180 ; GCN-LABEL: {{^}}v_fcmp_f64_ole:
181 ; GCN: v_cmp_le_f64_e64
182 define amdgpu_kernel void @v_fcmp_f64_ole(i64 addrspace(1)* %out, double %src) {
183 %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 5)
184 store i64 %result, i64 addrspace(1)* %out
188 ; GCN-LABEL: {{^}}v_fcmp_f64_ueq:
189 ; GCN: v_cmp_nlg_f64_e64
190 define amdgpu_kernel void @v_fcmp_f64_ueq(i64 addrspace(1)* %out, double %src) {
191 %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 9)
192 store i64 %result, i64 addrspace(1)* %out
196 ; GCN-LABEL: {{^}}v_fcmp_f64_une:
197 ; GCN: v_cmp_neq_f64_e64
198 define amdgpu_kernel void @v_fcmp_f64_une(i64 addrspace(1)* %out, double %src) {
199 %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 14)
200 store i64 %result, i64 addrspace(1)* %out
204 ; GCN-LABEL: {{^}}v_fcmp_f64_ugt:
205 ; GCN: v_cmp_nle_f64_e64
206 define amdgpu_kernel void @v_fcmp_f64_ugt(i64 addrspace(1)* %out, double %src) {
207 %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 10)
208 store i64 %result, i64 addrspace(1)* %out
212 ; GCN-LABEL: {{^}}v_fcmp_f64_uge:
213 ; GCN: v_cmp_nlt_f64_e64
214 define amdgpu_kernel void @v_fcmp_f64_uge(i64 addrspace(1)* %out, double %src) {
215 %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 11)
216 store i64 %result, i64 addrspace(1)* %out
220 ; GCN-LABEL: {{^}}v_fcmp_f64_ult:
221 ; GCN: v_cmp_nge_f64_e64
222 define amdgpu_kernel void @v_fcmp_f64_ult(i64 addrspace(1)* %out, double %src) {
223 %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 12)
224 store i64 %result, i64 addrspace(1)* %out
228 ; GCN-LABEL: {{^}}v_fcmp_f64_ule:
229 ; GCN: v_cmp_ngt_f64_e64
230 define amdgpu_kernel void @v_fcmp_f64_ule(i64 addrspace(1)* %out, double %src) {
231 %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 13)
232 store i64 %result, i64 addrspace(1)* %out
236 attributes #0 = { nounwind readnone convergent }