[PowerPC] Recommit r314244 with refactoring and off by default
[llvm-core.git] / test / CodeGen / AMDGPU / llvm.amdgcn.fcmp.ll
blob737be5d0044786ff13cfe3d311f85710d167f0d8
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:
9 ; GCN: s_endpgm
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
13   ret void
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
22   ret void
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
32   ret void
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
40   ret void
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
48   ret void
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
56   ret void
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
64   ret void
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
72   ret void
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
80   ret void
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
88   ret void
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
97   ret void
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
105   ret void
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
113   ret void
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
121   ret void
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
129   ret void
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
137   ret void
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
145   ret void
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
153   ret void
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
161   ret void
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
169   ret void
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
177   ret void
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
185   ret void
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
193   ret void
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
201   ret void
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
209   ret void
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
217   ret void
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
225   ret void
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
233   ret void
236 attributes #0 = { nounwind readnone convergent }