]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - test/CodeGen/AMDGPU/llvm.amdgcn.fcmp.ll
Vendor import of llvm trunk r290819:
[FreeBSD/FreeBSD.git] / test / CodeGen / AMDGPU / llvm.amdgcn.fcmp.ll
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
3
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
7
8 ; GCN-LABEL: {{^}}v_fcmp_f32_oeq_with_fabs:
9 ; GCN: v_cmp_eq_f32_e64 {{s\[[0-9]+:[0-9]+\]}}, |{{v[0-9]+}}|, {{s[0-9]+}}
10 define void @v_fcmp_f32_oeq_with_fabs(i64 addrspace(1)* %out, float %src, float %a) {
11   %temp = call float @llvm.fabs.f32(float %a)
12   %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float %temp, i32 1)
13   store i64 %result, i64 addrspace(1)* %out
14   ret void
15 }
16
17 ; GCN-LABEL: {{^}}v_fcmp_f32_oeq_both_operands_with_fabs:
18 ; GCN: v_cmp_eq_f32_e64 {{s\[[0-9]+:[0-9]+\]}}, |{{v[0-9]+}}|, |{{s[0-9]+}}|
19 define void @v_fcmp_f32_oeq_both_operands_with_fabs(i64 addrspace(1)* %out, float %src, float %a) {
20   %temp = call float @llvm.fabs.f32(float %a)
21   %src_input = call float @llvm.fabs.f32(float %src)
22   %result = call i64 @llvm.amdgcn.fcmp.f32(float %src_input, float %temp, i32 1)
23   store i64 %result, i64 addrspace(1)* %out
24   ret void
25 }
26
27 ; GCN-LABEL: {{^}}v_fcmp:
28 ; GCN-NOT: v_cmp_eq_f32_e64
29 define void @v_fcmp(i64 addrspace(1)* %out, float %src) {
30   %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 -1)
31   store i64 %result, i64 addrspace(1)* %out
32   ret void
33 }
34
35 ; GCN-LABEL: {{^}}v_fcmp_f32_oeq:
36 ; GCN: v_cmp_eq_f32_e64
37 define void @v_fcmp_f32_oeq(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
41 }
42
43 ; GCN-LABEL: {{^}}v_fcmp_f32_one:
44 ; GCN: v_cmp_neq_f32_e64
45 define void @v_fcmp_f32_one(i64 addrspace(1)* %out, float %src) {
46   %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 6)
47   store i64 %result, i64 addrspace(1)* %out
48   ret void
49 }
50
51 ; GCN-LABEL: {{^}}v_fcmp_f32_ogt:
52 ; GCN: v_cmp_gt_f32_e64
53 define void @v_fcmp_f32_ogt(i64 addrspace(1)* %out, float %src) {
54   %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 2)
55   store i64 %result, i64 addrspace(1)* %out
56   ret void
57 }
58
59 ; GCN-LABEL: {{^}}v_fcmp_f32_oge:
60 ; GCN: v_cmp_ge_f32_e64
61 define void @v_fcmp_f32_oge(i64 addrspace(1)* %out, float %src) {
62   %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 3)
63   store i64 %result, i64 addrspace(1)* %out
64   ret void
65 }
66
67 ; GCN-LABEL: {{^}}v_fcmp_f32_olt:
68 ; GCN: v_cmp_lt_f32_e64
69 define void @v_fcmp_f32_olt(i64 addrspace(1)* %out, float %src) {
70   %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 4)
71   store i64 %result, i64 addrspace(1)* %out
72   ret void
73 }
74
75 ; GCN-LABEL: {{^}}v_fcmp_f32_ole:
76 ; GCN: v_cmp_le_f32_e64
77 define void @v_fcmp_f32_ole(i64 addrspace(1)* %out, float %src) {
78   %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 5)
79   store i64 %result, i64 addrspace(1)* %out
80   ret void
81 }
82
83
84 ; GCN-LABEL: {{^}}v_fcmp_f32_ueq:
85 ; GCN: v_cmp_nlg_f32_e64
86 define void @v_fcmp_f32_ueq(i64 addrspace(1)* %out, float %src) {
87   %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 9)
88   store i64 %result, i64 addrspace(1)* %out
89   ret void
90 }
91
92 ; GCN-LABEL: {{^}}v_fcmp_f32_une:
93 ; GCN: v_cmp_neq_f32_e64
94 define void @v_fcmp_f32_une(i64 addrspace(1)* %out, float %src) {
95   %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 14)
96   store i64 %result, i64 addrspace(1)* %out
97   ret void
98 }
99
100 ; GCN-LABEL: {{^}}v_fcmp_f32_ugt:
101 ; GCN: v_cmp_nle_f32_e64
102 define void @v_fcmp_f32_ugt(i64 addrspace(1)* %out, float %src) {
103   %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 10)
104   store i64 %result, i64 addrspace(1)* %out
105   ret void
106 }
107
108 ; GCN-LABEL: {{^}}v_fcmp_f32_uge:
109 ; GCN: v_cmp_nlt_f32_e64
110 define void @v_fcmp_f32_uge(i64 addrspace(1)* %out, float %src) {
111   %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 11)
112   store i64 %result, i64 addrspace(1)* %out
113   ret void
114 }
115
116 ; GCN-LABEL: {{^}}v_fcmp_f32_ult:
117 ; GCN: v_cmp_nge_f32_e64
118 define void @v_fcmp_f32_ult(i64 addrspace(1)* %out, float %src) {
119   %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 12)
120   store i64 %result, i64 addrspace(1)* %out
121   ret void
122 }
123
124 ; GCN-LABEL: {{^}}v_fcmp_f32_ule:
125 ; GCN: v_cmp_ngt_f32_e64
126 define void @v_fcmp_f32_ule(i64 addrspace(1)* %out, float %src) {
127   %result = call i64 @llvm.amdgcn.fcmp.f32(float %src, float 100.00, i32 13)
128   store i64 %result, i64 addrspace(1)* %out
129   ret void
130 }
131
132 ; GCN-LABEL: {{^}}v_fcmp_f64_oeq:
133 ; GCN: v_cmp_eq_f64_e64
134 define void @v_fcmp_f64_oeq(i64 addrspace(1)* %out, double %src) {
135   %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 1)
136   store i64 %result, i64 addrspace(1)* %out
137   ret void
138 }
139
140 ; GCN-LABEL: {{^}}v_fcmp_f64_one:
141 ; GCN: v_cmp_neq_f64_e64
142 define void @v_fcmp_f64_one(i64 addrspace(1)* %out, double %src) {
143   %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 6)
144   store i64 %result, i64 addrspace(1)* %out
145   ret void
146 }
147
148 ; GCN-LABEL: {{^}}v_fcmp_f64_ogt:
149 ; GCN: v_cmp_gt_f64_e64
150 define void @v_fcmp_f64_ogt(i64 addrspace(1)* %out, double %src) {
151   %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 2)
152   store i64 %result, i64 addrspace(1)* %out
153   ret void
154 }
155
156 ; GCN-LABEL: {{^}}v_fcmp_f64_oge:
157 ; GCN: v_cmp_ge_f64_e64
158 define void @v_fcmp_f64_oge(i64 addrspace(1)* %out, double %src) {
159   %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 3)
160   store i64 %result, i64 addrspace(1)* %out
161   ret void
162 }
163
164 ; GCN-LABEL: {{^}}v_fcmp_f64_olt:
165 ; GCN: v_cmp_lt_f64_e64
166 define void @v_fcmp_f64_olt(i64 addrspace(1)* %out, double %src) {
167   %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 4)
168   store i64 %result, i64 addrspace(1)* %out
169   ret void
170 }
171
172 ; GCN-LABEL: {{^}}v_fcmp_f64_ole:
173 ; GCN: v_cmp_le_f64_e64
174 define void @v_fcmp_f64_ole(i64 addrspace(1)* %out, double %src) {
175   %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 5)
176   store i64 %result, i64 addrspace(1)* %out
177   ret void
178 }
179
180 ; GCN-LABEL: {{^}}v_fcmp_f64_ueq:
181 ; GCN: v_cmp_nlg_f64_e64
182 define void @v_fcmp_f64_ueq(i64 addrspace(1)* %out, double %src) {
183   %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 9)
184   store i64 %result, i64 addrspace(1)* %out
185   ret void
186 }
187
188 ; GCN-LABEL: {{^}}v_fcmp_f64_une:
189 ; GCN: v_cmp_neq_f64_e64
190 define void @v_fcmp_f64_une(i64 addrspace(1)* %out, double %src) {
191   %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 14)
192   store i64 %result, i64 addrspace(1)* %out
193   ret void
194 }
195
196 ; GCN-LABEL: {{^}}v_fcmp_f64_ugt:
197 ; GCN: v_cmp_nle_f64_e64
198 define void @v_fcmp_f64_ugt(i64 addrspace(1)* %out, double %src) {
199   %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 10)
200   store i64 %result, i64 addrspace(1)* %out
201   ret void
202 }
203
204 ; GCN-LABEL: {{^}}v_fcmp_f64_uge:
205 ; GCN: v_cmp_nlt_f64_e64
206 define void @v_fcmp_f64_uge(i64 addrspace(1)* %out, double %src) {
207   %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 11)
208   store i64 %result, i64 addrspace(1)* %out
209   ret void
210 }
211
212 ; GCN-LABEL: {{^}}v_fcmp_f64_ult:
213 ; GCN: v_cmp_nge_f64_e64
214 define void @v_fcmp_f64_ult(i64 addrspace(1)* %out, double %src) {
215   %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 12)
216   store i64 %result, i64 addrspace(1)* %out
217   ret void
218 }
219
220 ; GCN-LABEL: {{^}}v_fcmp_f64_ule:
221 ; GCN: v_cmp_ngt_f64_e64
222 define void @v_fcmp_f64_ule(i64 addrspace(1)* %out, double %src) {
223   %result = call i64 @llvm.amdgcn.fcmp.f64(double %src, double 100.00, i32 13)
224   store i64 %result, i64 addrspace(1)* %out
225   ret void
226 }
227
228 attributes #0 = { nounwind readnone convergent }