Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / VE / Scalar / min.ll
blobda92ebafd05903800e0c72477a1bc8e82df48a98
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s
3 ; RUN: llc < %s -mtriple=ve-unknown-unknown -enable-no-signed-zeros-fp-math \
4 ; RUN:     -enable-no-nans-fp-math | FileCheck %s -check-prefix=OPT
6 define double @minf64(double, double) {
7 ; CHECK-LABEL: minf64:
8 ; CHECK:       # %bb.0:
9 ; CHECK-NEXT:    fcmp.d %s2, %s0, %s1
10 ; CHECK-NEXT:    cmov.d.lt %s1, %s0, %s2
11 ; CHECK-NEXT:    or %s0, 0, %s1
12 ; CHECK-NEXT:    b.l.t (, %s10)
14 ; OPT-LABEL: minf64:
15 ; OPT:       # %bb.0:
16 ; OPT-NEXT:    fmin.d %s0, %s0, %s1
17 ; OPT-NEXT:    b.l.t (, %s10)
18   %3 = fcmp olt double %0, %1
19   %4 = select i1 %3, double %0, double %1
20   ret double %4
23 define double @min2f64(double, double) {
24 ; CHECK-LABEL: min2f64:
25 ; CHECK:       # %bb.0:
26 ; CHECK-NEXT:    fcmp.d %s2, %s0, %s1
27 ; CHECK-NEXT:    cmov.d.le %s1, %s0, %s2
28 ; CHECK-NEXT:    or %s0, 0, %s1
29 ; CHECK-NEXT:    b.l.t (, %s10)
31 ; OPT-LABEL: min2f64:
32 ; OPT:       # %bb.0:
33 ; OPT-NEXT:    fmin.d %s0, %s0, %s1
34 ; OPT-NEXT:    b.l.t (, %s10)
35   %3 = fcmp ole double %0, %1
36   %4 = select i1 %3, double %0, double %1
37   ret double %4
40 define double @minuf64(double, double) {
41 ; CHECK-LABEL: minuf64:
42 ; CHECK:       # %bb.0:
43 ; CHECK-NEXT:    fcmp.d %s2, %s0, %s1
44 ; CHECK-NEXT:    cmov.d.ltnan %s1, %s0, %s2
45 ; CHECK-NEXT:    or %s0, 0, %s1
46 ; CHECK-NEXT:    b.l.t (, %s10)
48 ; OPT-LABEL: minuf64:
49 ; OPT:       # %bb.0:
50 ; OPT-NEXT:    fmin.d %s0, %s0, %s1
51 ; OPT-NEXT:    b.l.t (, %s10)
52   %3 = fcmp ult double %0, %1
53   %4 = select i1 %3, double %0, double %1
54   ret double %4
57 define double @min2uf64(double, double) {
58 ; CHECK-LABEL: min2uf64:
59 ; CHECK:       # %bb.0:
60 ; CHECK-NEXT:    fcmp.d %s2, %s0, %s1
61 ; CHECK-NEXT:    cmov.d.lenan %s1, %s0, %s2
62 ; CHECK-NEXT:    or %s0, 0, %s1
63 ; CHECK-NEXT:    b.l.t (, %s10)
65 ; OPT-LABEL: min2uf64:
66 ; OPT:       # %bb.0:
67 ; OPT-NEXT:    fmin.d %s0, %s0, %s1
68 ; OPT-NEXT:    b.l.t (, %s10)
69   %3 = fcmp ule double %0, %1
70   %4 = select i1 %3, double %0, double %1
71   ret double %4
74 define float @minf32(float, float) {
75 ; CHECK-LABEL: minf32:
76 ; CHECK:       # %bb.0:
77 ; CHECK-NEXT:    fcmp.s %s2, %s0, %s1
78 ; CHECK-NEXT:    cmov.s.lt %s1, %s0, %s2
79 ; CHECK-NEXT:    or %s0, 0, %s1
80 ; CHECK-NEXT:    b.l.t (, %s10)
82 ; OPT-LABEL: minf32:
83 ; OPT:       # %bb.0:
84 ; OPT-NEXT:    fmin.s %s0, %s0, %s1
85 ; OPT-NEXT:    b.l.t (, %s10)
86   %3 = fcmp olt float %0, %1
87   %4 = select i1 %3, float %0, float %1
88   ret float %4
91 define float @min2f32(float, float) {
92 ; CHECK-LABEL: min2f32:
93 ; CHECK:       # %bb.0:
94 ; CHECK-NEXT:    fcmp.s %s2, %s0, %s1
95 ; CHECK-NEXT:    cmov.s.le %s1, %s0, %s2
96 ; CHECK-NEXT:    or %s0, 0, %s1
97 ; CHECK-NEXT:    b.l.t (, %s10)
99 ; OPT-LABEL: min2f32:
100 ; OPT:       # %bb.0:
101 ; OPT-NEXT:    fmin.s %s0, %s0, %s1
102 ; OPT-NEXT:    b.l.t (, %s10)
103   %3 = fcmp ole float %0, %1
104   %4 = select i1 %3, float %0, float %1
105   ret float %4
108 define float @minuf32(float, float) {
109 ; CHECK-LABEL: minuf32:
110 ; CHECK:       # %bb.0:
111 ; CHECK-NEXT:    fcmp.s %s2, %s0, %s1
112 ; CHECK-NEXT:    cmov.s.ltnan %s1, %s0, %s2
113 ; CHECK-NEXT:    or %s0, 0, %s1
114 ; CHECK-NEXT:    b.l.t (, %s10)
116 ; OPT-LABEL: minuf32:
117 ; OPT:       # %bb.0:
118 ; OPT-NEXT:    fmin.s %s0, %s0, %s1
119 ; OPT-NEXT:    b.l.t (, %s10)
120   %3 = fcmp ult float %0, %1
121   %4 = select i1 %3, float %0, float %1
122   ret float %4
125 define float @min2uf32(float, float) {
126 ; CHECK-LABEL: min2uf32:
127 ; CHECK:       # %bb.0:
128 ; CHECK-NEXT:    fcmp.s %s2, %s0, %s1
129 ; CHECK-NEXT:    cmov.s.lenan %s1, %s0, %s2
130 ; CHECK-NEXT:    or %s0, 0, %s1
131 ; CHECK-NEXT:    b.l.t (, %s10)
133 ; OPT-LABEL: min2uf32:
134 ; OPT:       # %bb.0:
135 ; OPT-NEXT:    fmin.s %s0, %s0, %s1
136 ; OPT-NEXT:    b.l.t (, %s10)
137   %3 = fcmp ule float %0, %1
138   %4 = select i1 %3, float %0, float %1
139   ret float %4
142 define i64 @mini64(i64, i64) {
143 ; CHECK-LABEL: mini64:
144 ; CHECK:       # %bb.0:
145 ; CHECK-NEXT:    mins.l %s0, %s0, %s1
146 ; CHECK-NEXT:    b.l.t (, %s10)
148 ; OPT-LABEL: mini64:
149 ; OPT:       # %bb.0:
150 ; OPT-NEXT:    mins.l %s0, %s0, %s1
151 ; OPT-NEXT:    b.l.t (, %s10)
152   %3 = icmp slt i64 %0, %1
153   %4 = select i1 %3, i64 %0, i64 %1
154   ret i64 %4
157 define i64 @min2i64(i64, i64) {
158 ; CHECK-LABEL: min2i64:
159 ; CHECK:       # %bb.0:
160 ; CHECK-NEXT:    mins.l %s0, %s0, %s1
161 ; CHECK-NEXT:    b.l.t (, %s10)
163 ; OPT-LABEL: min2i64:
164 ; OPT:       # %bb.0:
165 ; OPT-NEXT:    mins.l %s0, %s0, %s1
166 ; OPT-NEXT:    b.l.t (, %s10)
167   %3 = icmp sle i64 %0, %1
168   %4 = select i1 %3, i64 %0, i64 %1
169   ret i64 %4
172 define i64 @minu64(i64, i64) {
173 ; CHECK-LABEL: minu64:
174 ; CHECK:       # %bb.0:
175 ; CHECK-NEXT:    cmpu.l %s2, %s0, %s1
176 ; CHECK-NEXT:    cmov.l.lt %s1, %s0, %s2
177 ; CHECK-NEXT:    or %s0, 0, %s1
178 ; CHECK-NEXT:    b.l.t (, %s10)
180 ; OPT-LABEL: minu64:
181 ; OPT:       # %bb.0:
182 ; OPT-NEXT:    cmpu.l %s2, %s0, %s1
183 ; OPT-NEXT:    cmov.l.lt %s1, %s0, %s2
184 ; OPT-NEXT:    or %s0, 0, %s1
185 ; OPT-NEXT:    b.l.t (, %s10)
186   %3 = icmp ult i64 %0, %1
187   %4 = select i1 %3, i64 %0, i64 %1
188   ret i64 %4
191 define i64 @min2u64(i64, i64) {
192 ; CHECK-LABEL: min2u64:
193 ; CHECK:       # %bb.0:
194 ; CHECK-NEXT:    cmpu.l %s2, %s0, %s1
195 ; CHECK-NEXT:    cmov.l.le %s1, %s0, %s2
196 ; CHECK-NEXT:    or %s0, 0, %s1
197 ; CHECK-NEXT:    b.l.t (, %s10)
199 ; OPT-LABEL: min2u64:
200 ; OPT:       # %bb.0:
201 ; OPT-NEXT:    cmpu.l %s2, %s0, %s1
202 ; OPT-NEXT:    cmov.l.le %s1, %s0, %s2
203 ; OPT-NEXT:    or %s0, 0, %s1
204 ; OPT-NEXT:    b.l.t (, %s10)
205   %3 = icmp ule i64 %0, %1
206   %4 = select i1 %3, i64 %0, i64 %1
207   ret i64 %4
210 define i32 @mini32(i32, i32) {
211 ; CHECK-LABEL: mini32:
212 ; CHECK:       # %bb.0:
213 ; CHECK-NEXT:    mins.w.sx %s0, %s0, %s1
214 ; CHECK-NEXT:    b.l.t (, %s10)
216 ; OPT-LABEL: mini32:
217 ; OPT:       # %bb.0:
218 ; OPT-NEXT:    mins.w.sx %s0, %s0, %s1
219 ; OPT-NEXT:    b.l.t (, %s10)
220   %3 = icmp slt i32 %0, %1
221   %4 = select i1 %3, i32 %0, i32 %1
222   ret i32 %4
225 define i32 @min2i32(i32, i32) {
226 ; CHECK-LABEL: min2i32:
227 ; CHECK:       # %bb.0:
228 ; CHECK-NEXT:    mins.w.sx %s0, %s0, %s1
229 ; CHECK-NEXT:    b.l.t (, %s10)
231 ; OPT-LABEL: min2i32:
232 ; OPT:       # %bb.0:
233 ; OPT-NEXT:    mins.w.sx %s0, %s0, %s1
234 ; OPT-NEXT:    b.l.t (, %s10)
235   %3 = icmp sle i32 %0, %1
236   %4 = select i1 %3, i32 %0, i32 %1
237   ret i32 %4
240 define i32 @minu32(i32, i32) {
241 ; CHECK-LABEL: minu32:
242 ; CHECK:       # %bb.0:
243 ; CHECK-NEXT:    cmpu.w %s2, %s0, %s1
244 ; CHECK-NEXT:    cmov.w.lt %s1, %s0, %s2
245 ; CHECK-NEXT:    or %s0, 0, %s1
246 ; CHECK-NEXT:    b.l.t (, %s10)
248 ; OPT-LABEL: minu32:
249 ; OPT:       # %bb.0:
250 ; OPT-NEXT:    cmpu.w %s2, %s0, %s1
251 ; OPT-NEXT:    cmov.w.lt %s1, %s0, %s2
252 ; OPT-NEXT:    or %s0, 0, %s1
253 ; OPT-NEXT:    b.l.t (, %s10)
254   %3 = icmp ult i32 %0, %1
255   %4 = select i1 %3, i32 %0, i32 %1
256   ret i32 %4
259 define i32 @min2u32(i32, i32) {
260 ; CHECK-LABEL: min2u32:
261 ; CHECK:       # %bb.0:
262 ; CHECK-NEXT:    cmpu.w %s2, %s0, %s1
263 ; CHECK-NEXT:    cmov.w.le %s1, %s0, %s2
264 ; CHECK-NEXT:    or %s0, 0, %s1
265 ; CHECK-NEXT:    b.l.t (, %s10)
267 ; OPT-LABEL: min2u32:
268 ; OPT:       # %bb.0:
269 ; OPT-NEXT:    cmpu.w %s2, %s0, %s1
270 ; OPT-NEXT:    cmov.w.le %s1, %s0, %s2
271 ; OPT-NEXT:    or %s0, 0, %s1
272 ; OPT-NEXT:    b.l.t (, %s10)
273   %3 = icmp ule i32 %0, %1
274   %4 = select i1 %3, i32 %0, i32 %1
275   ret i32 %4
278 define zeroext i1 @mini1(i1 zeroext, i1 zeroext) {
279 ; CHECK-LABEL: mini1:
280 ; CHECK:       # %bb.0:
281 ; CHECK-NEXT:    and %s2, %s1, %s0
282 ; CHECK-NEXT:    cmov.w.ne %s2, %s1, %s0
283 ; CHECK-NEXT:    adds.w.zx %s0, %s2, (0)1
284 ; CHECK-NEXT:    b.l.t (, %s10)
286 ; OPT-LABEL: mini1:
287 ; OPT:       # %bb.0:
288 ; OPT-NEXT:    and %s2, %s1, %s0
289 ; OPT-NEXT:    cmov.w.ne %s2, %s1, %s0
290 ; OPT-NEXT:    adds.w.zx %s0, %s2, (0)1
291 ; OPT-NEXT:    b.l.t (, %s10)
292   %3 = xor i1 %0, true
293   %4 = and i1 %3, %1
294   %5 = select i1 %4, i1 %0, i1 %1
295   ret i1 %5