Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(85)

Side by Side Diff: tests_lit/llvm2ice_tests/fp.cmp.ll

Issue 1417393003: Subzero. ARM32. New bool folding. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Fixes lit tests. Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 ; This tries to be a comprehensive test of f32 and f64 compare operations. 1 ; This tries to be a comprehensive test of f32 and f64 compare operations.
2 ; The CHECK lines are only checking for basic instruction patterns 2 ; The CHECK lines are only checking for basic instruction patterns
3 ; that should be present regardless of the optimization level, so 3 ; that should be present regardless of the optimization level, so
4 ; there are no special OPTM1 match lines. 4 ; there are no special OPTM1 match lines.
5 5
6 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \ 6 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -O2 \
7 ; RUN: -allow-externally-defined-symbols | FileCheck %s 7 ; RUN: -allow-externally-defined-symbols | FileCheck %s
8 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \ 8 ; RUN: %p2i --filetype=obj --disassemble -i %s --args -Om1 \
9 ; RUN: -allow-externally-defined-symbols | FileCheck %s 9 ; RUN: -allow-externally-defined-symbols | FileCheck %s
10 10
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
45 ; CHECK: jne 45 ; CHECK: jne
46 ; CHECK-NEXT: jp 46 ; CHECK-NEXT: jp
47 ; CHECK: call {{.*}} R_{{.*}} func 47 ; CHECK: call {{.*}} R_{{.*}} func
48 ; CHECK: ucomisd 48 ; CHECK: ucomisd
49 ; CHECK: jne 49 ; CHECK: jne
50 ; CHECK-NEXT: jp 50 ; CHECK-NEXT: jp
51 ; CHECK: call {{.*}} R_{{.*}} func 51 ; CHECK: call {{.*}} R_{{.*}} func
52 ; ARM32-LABEL: fcmpEq 52 ; ARM32-LABEL: fcmpEq
53 ; ARM32: vcmp.f32 53 ; ARM32: vcmp.f32
54 ; ARM32: vmrs 54 ; ARM32: vmrs
55 ; ARM32-OM1: movne [[R0:r[0-9]+]], #0 55 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
56 ; ARM32-OM1: moveq [[R0]], #1 56 ; ARM32-OM1: moveq [[R0]], #1
57 ; ARM32-O2: bne 57 ; ARM32-O2: bne
58 ; ARM32: bl func 58 ; ARM32: bl func
59 ; ARM32: vcmp.f64 59 ; ARM32: vcmp.f64
60 ; ARM32: vmrs 60 ; ARM32: vmrs
61 ; ARM32-OM1: movne [[R1:r[0-9]+]], #0 61 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
62 ; ARM32-OM1: moveq [[R1]], #1 62 ; ARM32-OM1: moveq [[R1]], #1
63 ; ARM32-O2: bne 63 ; ARM32-O2: bne
64 64
65 declare void @func() 65 declare void @func()
66 66
67 define internal void @fcmpNe(float %a, float %b, double %c, double %d) { 67 define internal void @fcmpNe(float %a, float %b, double %c, double %d) {
68 entry: 68 entry:
69 %cmp = fcmp une float %a, %b 69 %cmp = fcmp une float %a, %b
70 br i1 %cmp, label %if.then, label %if.end 70 br i1 %cmp, label %if.then, label %if.end
71 71
(...skipping 17 matching lines...) Expand all
89 ; CHECK: jne 89 ; CHECK: jne
90 ; CHECK-NEXT: jp 90 ; CHECK-NEXT: jp
91 ; CHECK: call {{.*}} R_{{.*}} func 91 ; CHECK: call {{.*}} R_{{.*}} func
92 ; CHECK: ucomisd 92 ; CHECK: ucomisd
93 ; CHECK: jne 93 ; CHECK: jne
94 ; CHECK-NEXT: jp 94 ; CHECK-NEXT: jp
95 ; CHECK: call {{.*}} R_{{.*}} func 95 ; CHECK: call {{.*}} R_{{.*}} func
96 ; ARM32-LABEL: fcmpNe 96 ; ARM32-LABEL: fcmpNe
97 ; ARM32: vcmp.f32 97 ; ARM32: vcmp.f32
98 ; ARM32: vmrs 98 ; ARM32: vmrs
99 ; ARM32-OM1: moveq [[R0:r[0-9]+]], #0 99 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
100 ; ARM32-OM1: movne [[R0]], #1 100 ; ARM32-OM1: movne [[R0]], #1
101 ; ARM32-O2: beq 101 ; ARM32-O2: beq
102 ; ARM32: vcmp.f64 102 ; ARM32: vcmp.f64
103 ; ARM32: vmrs 103 ; ARM32: vmrs
104 ; ARM32-OM1: moveq [[R1:r[0-9]+]], #0 104 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
105 ; ARM32-OM1: movne [[R1]], #1 105 ; ARM32-OM1: movne [[R1]], #1
106 ; ARM32-O2: beq 106 ; ARM32-O2: beq
107 107
108 define internal void @fcmpGt(float %a, float %b, double %c, double %d) { 108 define internal void @fcmpGt(float %a, float %b, double %c, double %d) {
109 entry: 109 entry:
110 %cmp = fcmp ogt float %a, %b 110 %cmp = fcmp ogt float %a, %b
111 br i1 %cmp, label %if.then, label %if.end 111 br i1 %cmp, label %if.then, label %if.end
112 112
113 if.then: ; preds = %entry 113 if.then: ; preds = %entry
114 call void @func() 114 call void @func()
(...skipping 13 matching lines...) Expand all
128 ; CHECK-LABEL: fcmpGt 128 ; CHECK-LABEL: fcmpGt
129 ; CHECK: ucomiss 129 ; CHECK: ucomiss
130 ; CHECK: seta 130 ; CHECK: seta
131 ; CHECK: call {{.*}} R_{{.*}} func 131 ; CHECK: call {{.*}} R_{{.*}} func
132 ; CHECK: ucomisd 132 ; CHECK: ucomisd
133 ; CHECK: seta 133 ; CHECK: seta
134 ; CHECK: call {{.*}} R_{{.*}} func 134 ; CHECK: call {{.*}} R_{{.*}} func
135 ; ARM32-LABEL: fcmpGt 135 ; ARM32-LABEL: fcmpGt
136 ; ARM32: vcmp.f32 136 ; ARM32: vcmp.f32
137 ; ARM32: vmrs 137 ; ARM32: vmrs
138 ; ARM32-OM1: movle [[R0:r[0-9]+]], #0 138 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
139 ; ARM32-OM1: movgt [[R0]], #1 139 ; ARM32-OM1: movgt [[R0]], #1
140 ; ARM32-O2: ble 140 ; ARM32-O2: ble
141 ; ARM32: vcmp.f64 141 ; ARM32: vcmp.f64
142 ; ARM32: vmrs 142 ; ARM32: vmrs
143 ; ARM32-OM1: movle [[R1:r[0-9]+]], #0 143 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
144 ; ARM32-OM1: movgt [[R1]], #1 144 ; ARM32-OM1: movgt [[R1]], #1
145 ; ARM32-O2: ble 145 ; ARM32-O2: ble
146 146
147 define internal void @fcmpGe(float %a, float %b, double %c, double %d) { 147 define internal void @fcmpGe(float %a, float %b, double %c, double %d) {
148 entry: 148 entry:
149 %cmp = fcmp ult float %a, %b 149 %cmp = fcmp ult float %a, %b
150 br i1 %cmp, label %if.end, label %if.then 150 br i1 %cmp, label %if.end, label %if.then
151 151
152 if.then: ; preds = %entry 152 if.then: ; preds = %entry
153 call void @func() 153 call void @func()
(...skipping 13 matching lines...) Expand all
167 ; CHECK-LABEL: fcmpGe 167 ; CHECK-LABEL: fcmpGe
168 ; CHECK: ucomiss 168 ; CHECK: ucomiss
169 ; CHECK: setb 169 ; CHECK: setb
170 ; CHECK: call {{.*}} R_{{.*}} func 170 ; CHECK: call {{.*}} R_{{.*}} func
171 ; CHECK: ucomisd 171 ; CHECK: ucomisd
172 ; CHECK: setb 172 ; CHECK: setb
173 ; CHECK: call {{.*}} R_{{.*}} func 173 ; CHECK: call {{.*}} R_{{.*}} func
174 ; ARM32-LABEL: fcmpGe 174 ; ARM32-LABEL: fcmpGe
175 ; ARM32: vcmp.f32 175 ; ARM32: vcmp.f32
176 ; ARM32: vmrs 176 ; ARM32: vmrs
177 ; ARM32-OM1: movge [[R0:r[0-9]+]], #0 177 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
178 ; ARM32-OM1: movlt [[R0]], #1 178 ; ARM32-OM1: movlt [[R0]], #1
179 ; ARM32-O2: blt 179 ; ARM32-O2: blt
180 ; ARM32: vcmp.f64 180 ; ARM32: vcmp.f64
181 ; ARM32: vmrs 181 ; ARM32: vmrs
182 ; ARM32-OM1: movge [[R1:r[0-9]+]], #0 182 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
183 ; ARM32-OM1: movlt [[R1]], #1 183 ; ARM32-OM1: movlt [[R1]], #1
184 ; ARM32-O2: blt 184 ; ARM32-O2: blt
185 185
186 define internal void @fcmpLt(float %a, float %b, double %c, double %d) { 186 define internal void @fcmpLt(float %a, float %b, double %c, double %d) {
187 entry: 187 entry:
188 %cmp = fcmp olt float %a, %b 188 %cmp = fcmp olt float %a, %b
189 br i1 %cmp, label %if.then, label %if.end 189 br i1 %cmp, label %if.then, label %if.end
190 190
191 if.then: ; preds = %entry 191 if.then: ; preds = %entry
192 call void @func() 192 call void @func()
(...skipping 13 matching lines...) Expand all
206 ; CHECK-LABEL: fcmpLt 206 ; CHECK-LABEL: fcmpLt
207 ; CHECK: ucomiss 207 ; CHECK: ucomiss
208 ; CHECK: seta 208 ; CHECK: seta
209 ; CHECK: call {{.*}} R_{{.*}} func 209 ; CHECK: call {{.*}} R_{{.*}} func
210 ; CHECK: ucomisd 210 ; CHECK: ucomisd
211 ; CHECK: seta 211 ; CHECK: seta
212 ; CHECK: call {{.*}} R_{{.*}} func 212 ; CHECK: call {{.*}} R_{{.*}} func
213 ; ARM32-LABEL: fcmpLt 213 ; ARM32-LABEL: fcmpLt
214 ; ARM32: vcmp.f32 214 ; ARM32: vcmp.f32
215 ; ARM32: vmrs 215 ; ARM32: vmrs
216 ; ARM32-OM1: movpl [[R0:r[0-9]+]], #0 216 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
217 ; ARM32-OM1: movmi [[R0]], #1 217 ; ARM32-OM1: movmi [[R0]], #1
218 ; ARM32-O2: bpl 218 ; ARM32-O2: bpl
219 ; ARM32: vcmp.f64 219 ; ARM32: vcmp.f64
220 ; ARM32: vmrs 220 ; ARM32: vmrs
221 ; ARM32-OM1: movpl [[R1:r[0-9]+]], #0 221 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
222 ; ARM32-OM1: movmi [[R1]], #1 222 ; ARM32-OM1: movmi [[R1]], #1
223 ; ARM32-O2: bpl 223 ; ARM32-O2: bpl
224 224
225 define internal void @fcmpLe(float %a, float %b, double %c, double %d) { 225 define internal void @fcmpLe(float %a, float %b, double %c, double %d) {
226 entry: 226 entry:
227 %cmp = fcmp ugt float %a, %b 227 %cmp = fcmp ugt float %a, %b
228 br i1 %cmp, label %if.end, label %if.then 228 br i1 %cmp, label %if.end, label %if.then
229 229
230 if.then: ; preds = %entry 230 if.then: ; preds = %entry
231 call void @func() 231 call void @func()
(...skipping 13 matching lines...) Expand all
245 ; CHECK-LABEL: fcmpLe 245 ; CHECK-LABEL: fcmpLe
246 ; CHECK: ucomiss 246 ; CHECK: ucomiss
247 ; CHECK: setb 247 ; CHECK: setb
248 ; CHECK: call {{.*}} R_{{.*}} func 248 ; CHECK: call {{.*}} R_{{.*}} func
249 ; CHECK: ucomisd 249 ; CHECK: ucomisd
250 ; CHECK: setb 250 ; CHECK: setb
251 ; CHECK: call {{.*}} R_{{.*}} func 251 ; CHECK: call {{.*}} R_{{.*}} func
252 ; ARM32-LABEL: fcmpLe 252 ; ARM32-LABEL: fcmpLe
253 ; ARM32: vcmp.f32 253 ; ARM32: vcmp.f32
254 ; ARM32: vmrs 254 ; ARM32: vmrs
255 ; ARM32-OM1: movls [[R0:r[0-9]+]], #0 255 ; ARM32-OM1: mov [[R0:r[0-9]+]], #0
256 ; ARM32-OM1: movhi [[R0]], #1 256 ; ARM32-OM1: movhi [[R0]], #1
257 ; ARM32-O2: bhi 257 ; ARM32-O2: bhi
258 ; ARM32: vcmp.f64 258 ; ARM32: vcmp.f64
259 ; ARM32: vmrs 259 ; ARM32: vmrs
260 ; ARM32-OM1: movls [[R1:r[0-9]+]], #0 260 ; ARM32-OM1: mov [[R1:r[0-9]+]], #0
261 ; ARM32-OM1: movhi [[R1]], #1 261 ; ARM32-OM1: movhi [[R1]], #1
262 ; ARM32-O2: bhi 262 ; ARM32-O2: bhi
263 263
264 define internal i32 @fcmpFalseFloat(float %a, float %b) { 264 define internal i32 @fcmpFalseFloat(float %a, float %b) {
265 entry: 265 entry:
266 %cmp = fcmp false float %a, %b 266 %cmp = fcmp false float %a, %b
267 %cmp.ret_ext = zext i1 %cmp to i32 267 %cmp.ret_ext = zext i1 %cmp to i32
268 ret i32 %cmp.ret_ext 268 ret i32 %cmp.ret_ext
269 } 269 }
270 ; CHECK-LABEL: fcmpFalseFloat 270 ; CHECK-LABEL: fcmpFalseFloat
(...skipping 16 matching lines...) Expand all
287 entry: 287 entry:
288 %cmp = fcmp oeq float %a, %b 288 %cmp = fcmp oeq float %a, %b
289 %cmp.ret_ext = zext i1 %cmp to i32 289 %cmp.ret_ext = zext i1 %cmp to i32
290 ret i32 %cmp.ret_ext 290 ret i32 %cmp.ret_ext
291 } 291 }
292 ; CHECK-LABEL: fcmpOeqFloat 292 ; CHECK-LABEL: fcmpOeqFloat
293 ; CHECK: ucomiss 293 ; CHECK: ucomiss
294 ; CHECK: jne 294 ; CHECK: jne
295 ; CHECK: jp 295 ; CHECK: jp
296 ; ARM32-LABEL: fcmpOeqFloat 296 ; ARM32-LABEL: fcmpOeqFloat
297 ; ARM32-O2: mov [[R:r[0-9]+]], #0
297 ; ARM32: vcmp.f32 298 ; ARM32: vcmp.f32
298 ; ARM32: vmrs 299 ; ARM32: vmrs
299 ; ARM32: movne [[R:r[0-9]+]], #0 300 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
300 ; ARM32: moveq [[R]], #1 301 ; ARM32: moveq [[R]], #1
301 302
302 define internal i32 @fcmpOeqDouble(double %a, double %b) { 303 define internal i32 @fcmpOeqDouble(double %a, double %b) {
303 entry: 304 entry:
304 %cmp = fcmp oeq double %a, %b 305 %cmp = fcmp oeq double %a, %b
305 %cmp.ret_ext = zext i1 %cmp to i32 306 %cmp.ret_ext = zext i1 %cmp to i32
306 ret i32 %cmp.ret_ext 307 ret i32 %cmp.ret_ext
307 } 308 }
308 ; CHECK-LABEL: fcmpOeqDouble 309 ; CHECK-LABEL: fcmpOeqDouble
309 ; CHECK: ucomisd 310 ; CHECK: ucomisd
310 ; CHECK: jne 311 ; CHECK: jne
311 ; CHECK: jp 312 ; CHECK: jp
312 ; ARM32-LABEL: fcmpOeqDouble 313 ; ARM32-LABEL: fcmpOeqDouble
314 ; ARM32-O2: mov [[R:r[0-9]+]], #0
313 ; ARM32: vcmp.f64 315 ; ARM32: vcmp.f64
314 ; ARM32: vmrs 316 ; ARM32: vmrs
315 ; ARM32: movne [[R:r[0-9]+]], #0 317 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
316 ; ARM32: moveq [[R]], #1 318 ; ARM32: moveq [[R]], #1
317 319
318 define internal i32 @fcmpOgtFloat(float %a, float %b) { 320 define internal i32 @fcmpOgtFloat(float %a, float %b) {
319 entry: 321 entry:
320 %cmp = fcmp ogt float %a, %b 322 %cmp = fcmp ogt float %a, %b
321 %cmp.ret_ext = zext i1 %cmp to i32 323 %cmp.ret_ext = zext i1 %cmp to i32
322 ret i32 %cmp.ret_ext 324 ret i32 %cmp.ret_ext
323 } 325 }
324 ; CHECK-LABEL: fcmpOgtFloat 326 ; CHECK-LABEL: fcmpOgtFloat
325 ; CHECK: ucomiss 327 ; CHECK: ucomiss
326 ; CHECK: seta 328 ; CHECK: seta
327 ; ARM32-LABEL: fcmpOgtFloat 329 ; ARM32-LABEL: fcmpOgtFloat
330 ; ARM32-O2: mov [[R:r[0-9]+]], #0
328 ; ARM32: vcmp.f32 331 ; ARM32: vcmp.f32
329 ; ARM32: vmrs 332 ; ARM32: vmrs
330 ; ARM32: movle [[R:r[0-9]+]], #0 333 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
331 ; ARM32: movgt [[R]], #1 334 ; ARM32: movgt [[R]], #1
332 335
333 define internal i32 @fcmpOgtDouble(double %a, double %b) { 336 define internal i32 @fcmpOgtDouble(double %a, double %b) {
334 entry: 337 entry:
335 %cmp = fcmp ogt double %a, %b 338 %cmp = fcmp ogt double %a, %b
336 %cmp.ret_ext = zext i1 %cmp to i32 339 %cmp.ret_ext = zext i1 %cmp to i32
337 ret i32 %cmp.ret_ext 340 ret i32 %cmp.ret_ext
338 } 341 }
339 ; CHECK-LABEL: fcmpOgtDouble 342 ; CHECK-LABEL: fcmpOgtDouble
340 ; CHECK: ucomisd 343 ; CHECK: ucomisd
341 ; CHECK: seta 344 ; CHECK: seta
342 ; ARM32-LABEL: fcmpOgtDouble 345 ; ARM32-LABEL: fcmpOgtDouble
346 ; ARM32-O2: mov [[R:r[0-9]+]], #0
343 ; ARM32: vcmp.f64 347 ; ARM32: vcmp.f64
344 ; ARM32: vmrs 348 ; ARM32: vmrs
345 ; ARM32: movle [[R:r[0-9]+]], #0 349 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
346 ; ARM32: movgt [[R]], #1 350 ; ARM32: movgt [[R]], #1
347 351
348 define internal i32 @fcmpOgeFloat(float %a, float %b) { 352 define internal i32 @fcmpOgeFloat(float %a, float %b) {
349 entry: 353 entry:
350 %cmp = fcmp oge float %a, %b 354 %cmp = fcmp oge float %a, %b
351 %cmp.ret_ext = zext i1 %cmp to i32 355 %cmp.ret_ext = zext i1 %cmp to i32
352 ret i32 %cmp.ret_ext 356 ret i32 %cmp.ret_ext
353 } 357 }
354 ; CHECK-LABEL: fcmpOgeFloat 358 ; CHECK-LABEL: fcmpOgeFloat
355 ; CHECK: ucomiss 359 ; CHECK: ucomiss
356 ; CHECK: setae 360 ; CHECK: setae
357 ; ARM32-LABEL: fcmpOgeFloat 361 ; ARM32-LABEL: fcmpOgeFloat
362 ; ARM32-O2: mov [[R:r[0-9]+]], #0
358 ; ARM32: vcmp.f32 363 ; ARM32: vcmp.f32
359 ; ARM32: vmrs 364 ; ARM32: vmrs
360 ; ARM32: movlt [[R:r[0-9]+]], #0 365 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
361 ; ARM32: movge [[R]], #1 366 ; ARM32: movge [[R]], #1
362 367
363 define internal i32 @fcmpOgeDouble(double %a, double %b) { 368 define internal i32 @fcmpOgeDouble(double %a, double %b) {
364 entry: 369 entry:
365 %cmp = fcmp oge double %a, %b 370 %cmp = fcmp oge double %a, %b
366 %cmp.ret_ext = zext i1 %cmp to i32 371 %cmp.ret_ext = zext i1 %cmp to i32
367 ret i32 %cmp.ret_ext 372 ret i32 %cmp.ret_ext
368 } 373 }
369 ; CHECK-LABEL: fcmpOgeDouble 374 ; CHECK-LABEL: fcmpOgeDouble
370 ; CHECK: ucomisd 375 ; CHECK: ucomisd
371 ; CHECK: setae 376 ; CHECK: setae
372 ; ARM32-LABEL: fcmpOgeDouble 377 ; ARM32-LABEL: fcmpOgeDouble
378 ; ARM32-O2: mov [[R:r[0-9]+]], #0
373 ; ARM32: vcmp.f64 379 ; ARM32: vcmp.f64
374 ; ARM32: vmrs 380 ; ARM32: vmrs
375 ; ARM32: movlt [[R:r[0-9]+]], #0 381 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
376 ; ARM32: movge [[R]], #1 382 ; ARM32: movge [[R]], #1
377 383
378 define internal i32 @fcmpOltFloat(float %a, float %b) { 384 define internal i32 @fcmpOltFloat(float %a, float %b) {
379 entry: 385 entry:
380 %cmp = fcmp olt float %a, %b 386 %cmp = fcmp olt float %a, %b
381 %cmp.ret_ext = zext i1 %cmp to i32 387 %cmp.ret_ext = zext i1 %cmp to i32
382 ret i32 %cmp.ret_ext 388 ret i32 %cmp.ret_ext
383 } 389 }
384 ; CHECK-LABEL: fcmpOltFloat 390 ; CHECK-LABEL: fcmpOltFloat
385 ; CHECK: ucomiss 391 ; CHECK: ucomiss
386 ; CHECK: seta 392 ; CHECK: seta
387 ; ARM32-LABEL: fcmpOltFloat 393 ; ARM32-LABEL: fcmpOltFloat
394 ; ARM32-O2: mov [[R:r[0-9]+]], #0
388 ; ARM32: vcmp.f32 395 ; ARM32: vcmp.f32
389 ; ARM32: vmrs 396 ; ARM32: vmrs
390 ; ARM32: movpl [[R:r[0-9]+]], #0 397 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
391 ; ARM32: movmi [[R]], #1 398 ; ARM32: movmi [[R]], #1
392 399
393 define internal i32 @fcmpOltDouble(double %a, double %b) { 400 define internal i32 @fcmpOltDouble(double %a, double %b) {
394 entry: 401 entry:
395 %cmp = fcmp olt double %a, %b 402 %cmp = fcmp olt double %a, %b
396 %cmp.ret_ext = zext i1 %cmp to i32 403 %cmp.ret_ext = zext i1 %cmp to i32
397 ret i32 %cmp.ret_ext 404 ret i32 %cmp.ret_ext
398 } 405 }
399 ; CHECK-LABEL: fcmpOltDouble 406 ; CHECK-LABEL: fcmpOltDouble
400 ; CHECK: ucomisd 407 ; CHECK: ucomisd
401 ; CHECK: seta 408 ; CHECK: seta
402 ; ARM32-LABEL: fcmpOltDouble 409 ; ARM32-LABEL: fcmpOltDouble
410 ; ARM32-O2: mov [[R:r[0-9]+]], #0
403 ; ARM32: vcmp.f64 411 ; ARM32: vcmp.f64
404 ; ARM32: vmrs 412 ; ARM32: vmrs
405 ; ARM32: movpl [[R:r[0-9]+]], #0 413 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
406 ; ARM32: movmi [[R]], #1 414 ; ARM32: movmi [[R]], #1
407 415
408 define internal i32 @fcmpOleFloat(float %a, float %b) { 416 define internal i32 @fcmpOleFloat(float %a, float %b) {
409 entry: 417 entry:
410 %cmp = fcmp ole float %a, %b 418 %cmp = fcmp ole float %a, %b
411 %cmp.ret_ext = zext i1 %cmp to i32 419 %cmp.ret_ext = zext i1 %cmp to i32
412 ret i32 %cmp.ret_ext 420 ret i32 %cmp.ret_ext
413 } 421 }
414 ; CHECK-LABEL: fcmpOleFloat 422 ; CHECK-LABEL: fcmpOleFloat
415 ; CHECK: ucomiss 423 ; CHECK: ucomiss
416 ; CHECK: setae 424 ; CHECK: setae
417 ; ARM32-LABEL: fcmpOleFloat 425 ; ARM32-LABEL: fcmpOleFloat
426 ; ARM32-O2: mov [[R:r[0-9]+]], #0
418 ; ARM32: vcmp.f32 427 ; ARM32: vcmp.f32
419 ; ARM32: vmrs 428 ; ARM32: vmrs
420 ; ARM32: movhi [[R:r[0-9]+]], #0 429 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
421 ; ARM32: movls [[R]], #1 430 ; ARM32: movls [[R]], #1
422 431
423 define internal i32 @fcmpOleDouble(double %a, double %b) { 432 define internal i32 @fcmpOleDouble(double %a, double %b) {
424 entry: 433 entry:
425 %cmp = fcmp ole double %a, %b 434 %cmp = fcmp ole double %a, %b
426 %cmp.ret_ext = zext i1 %cmp to i32 435 %cmp.ret_ext = zext i1 %cmp to i32
427 ret i32 %cmp.ret_ext 436 ret i32 %cmp.ret_ext
428 } 437 }
429 ; CHECK-LABEL: fcmpOleDouble 438 ; CHECK-LABEL: fcmpOleDouble
430 ; CHECK: ucomisd 439 ; CHECK: ucomisd
431 ; CHECK: setae 440 ; CHECK: setae
432 ; ARM32-LABEL: fcmpOleDouble 441 ; ARM32-LABEL: fcmpOleDouble
442 ; ARM32-O2: mov [[R:r[0-9]+]], #0
433 ; ARM32: vcmp.f64 443 ; ARM32: vcmp.f64
434 ; ARM32: vmrs 444 ; ARM32: vmrs
435 ; ARM32: movhi [[R:r[0-9]+]], #0 445 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
436 ; ARM32: movls [[R]], #1 446 ; ARM32: movls [[R]], #1
437 447
438 define internal i32 @fcmpOneFloat(float %a, float %b) { 448 define internal i32 @fcmpOneFloat(float %a, float %b) {
439 entry: 449 entry:
440 %cmp = fcmp one float %a, %b 450 %cmp = fcmp one float %a, %b
441 %cmp.ret_ext = zext i1 %cmp to i32 451 %cmp.ret_ext = zext i1 %cmp to i32
442 ret i32 %cmp.ret_ext 452 ret i32 %cmp.ret_ext
443 } 453 }
444 ; CHECK-LABEL: fcmpOneFloat 454 ; CHECK-LABEL: fcmpOneFloat
445 ; CHECK: ucomiss 455 ; CHECK: ucomiss
446 ; CHECK: setne 456 ; CHECK: setne
447 ; ARM32-LABEL: fcmpOneFloat 457 ; ARM32-LABEL: fcmpOneFloat
458 ; ARM32-O2: mov [[R:r[0-9]+]], #0
448 ; ARM32: vcmp.f32 459 ; ARM32: vcmp.f32
449 ; ARM32: vmrs 460 ; ARM32: vmrs
450 ; ARM32: mov [[R:r[0-9]+]], #0 461 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
451 ; ARM32: movmi [[R]], #1 462 ; ARM32: movmi [[R]], #1
452 ; ARM32: movgt [[R]], #1 463 ; ARM32: movgt [[R]], #1
453 464
454 define internal i32 @fcmpOneDouble(double %a, double %b) { 465 define internal i32 @fcmpOneDouble(double %a, double %b) {
455 entry: 466 entry:
456 %cmp = fcmp one double %a, %b 467 %cmp = fcmp one double %a, %b
457 %cmp.ret_ext = zext i1 %cmp to i32 468 %cmp.ret_ext = zext i1 %cmp to i32
458 ret i32 %cmp.ret_ext 469 ret i32 %cmp.ret_ext
459 } 470 }
460 ; CHECK-LABEL: fcmpOneDouble 471 ; CHECK-LABEL: fcmpOneDouble
461 ; CHECK: ucomisd 472 ; CHECK: ucomisd
462 ; CHECK: setne 473 ; CHECK: setne
463 ; ARM32-LABEL: fcmpOneDouble 474 ; ARM32-LABEL: fcmpOneDouble
475 ; ARM32-O2: mov [[R:r[0-9]+]], #0
464 ; ARM32: vcmp.f64 476 ; ARM32: vcmp.f64
465 ; ARM32: vmrs 477 ; ARM32: vmrs
466 ; ARM32: mov [[R:r[0-9]+]], #0 478 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
467 ; ARM32: movmi [[R]], #1 479 ; ARM32: movmi [[R]], #1
468 ; ARM32: movgt [[R]], #1 480 ; ARM32: movgt [[R]], #1
469 481
470 define internal i32 @fcmpOrdFloat(float %a, float %b) { 482 define internal i32 @fcmpOrdFloat(float %a, float %b) {
471 entry: 483 entry:
472 %cmp = fcmp ord float %a, %b 484 %cmp = fcmp ord float %a, %b
473 %cmp.ret_ext = zext i1 %cmp to i32 485 %cmp.ret_ext = zext i1 %cmp to i32
474 ret i32 %cmp.ret_ext 486 ret i32 %cmp.ret_ext
475 } 487 }
476 ; CHECK-LABEL: fcmpOrdFloat 488 ; CHECK-LABEL: fcmpOrdFloat
477 ; CHECK: ucomiss 489 ; CHECK: ucomiss
478 ; CHECK: setnp 490 ; CHECK: setnp
479 ; ARM32-LABEL: fcmpOrdFloat 491 ; ARM32-LABEL: fcmpOrdFloat
492 ; ARM32-O2: mov [[R:r[0-9]+]], #0
480 ; ARM32: vcmp.f32 493 ; ARM32: vcmp.f32
481 ; ARM32: vmrs 494 ; ARM32: vmrs
482 ; ARM32: movvs [[R:r[0-9]+]], #0 495 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
483 ; ARM32: movvc [[R]], #1 496 ; ARM32: movvc [[R]], #1
484 497
485 define internal i32 @fcmpOrdDouble(double %a, double %b) { 498 define internal i32 @fcmpOrdDouble(double %a, double %b) {
486 entry: 499 entry:
487 %cmp = fcmp ord double %a, %b 500 %cmp = fcmp ord double %a, %b
488 %cmp.ret_ext = zext i1 %cmp to i32 501 %cmp.ret_ext = zext i1 %cmp to i32
489 ret i32 %cmp.ret_ext 502 ret i32 %cmp.ret_ext
490 } 503 }
491 ; CHECK-LABEL: fcmpOrdDouble 504 ; CHECK-LABEL: fcmpOrdDouble
492 ; CHECK: ucomisd 505 ; CHECK: ucomisd
493 ; CHECK: setnp 506 ; CHECK: setnp
494 ; ARM32-LABEL: fcmpOrdDouble 507 ; ARM32-LABEL: fcmpOrdDouble
508 ; ARM32-O2: mov [[R:r[0-9]+]], #0
495 ; ARM32: vcmp.f64 509 ; ARM32: vcmp.f64
496 ; ARM32: vmrs 510 ; ARM32: vmrs
497 ; ARM32: movvs [[R:r[0-9]+]], #0 511 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
498 ; ARM32: movvc [[R]], #1 512 ; ARM32: movvc [[R]], #1
499 513
500 define internal i32 @fcmpUeqFloat(float %a, float %b) { 514 define internal i32 @fcmpUeqFloat(float %a, float %b) {
501 entry: 515 entry:
502 %cmp = fcmp ueq float %a, %b 516 %cmp = fcmp ueq float %a, %b
503 %cmp.ret_ext = zext i1 %cmp to i32 517 %cmp.ret_ext = zext i1 %cmp to i32
504 ret i32 %cmp.ret_ext 518 ret i32 %cmp.ret_ext
505 } 519 }
506 ; CHECK-LABEL: fcmpUeqFloat 520 ; CHECK-LABEL: fcmpUeqFloat
507 ; CHECK: ucomiss 521 ; CHECK: ucomiss
508 ; CHECK: sete 522 ; CHECK: sete
509 ; ARM32-LABEL: fcmpUeqFloat 523 ; ARM32-LABEL: fcmpUeqFloat
524 ; ARM32-O2: mov [[R:r[0-9]+]], #0
510 ; ARM32: vcmp.f32 525 ; ARM32: vcmp.f32
511 ; ARM32: vmrs 526 ; ARM32: vmrs
512 ; ARM32: mov [[R:r[0-9]+]], #0 527 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
513 ; ARM32: moveq [[R]], #1 528 ; ARM32: moveq [[R]], #1
514 ; ARM32: movvs [[R]], #1 529 ; ARM32: movvs [[R]], #1
515 530
516 define internal i32 @fcmpUeqDouble(double %a, double %b) { 531 define internal i32 @fcmpUeqDouble(double %a, double %b) {
517 entry: 532 entry:
518 %cmp = fcmp ueq double %a, %b 533 %cmp = fcmp ueq double %a, %b
519 %cmp.ret_ext = zext i1 %cmp to i32 534 %cmp.ret_ext = zext i1 %cmp to i32
520 ret i32 %cmp.ret_ext 535 ret i32 %cmp.ret_ext
521 } 536 }
522 ; CHECK-LABEL: fcmpUeqDouble 537 ; CHECK-LABEL: fcmpUeqDouble
523 ; CHECK: ucomisd 538 ; CHECK: ucomisd
524 ; CHECK: sete 539 ; CHECK: sete
525 ; ARM32-LABEL: fcmpUeqDouble 540 ; ARM32-LABEL: fcmpUeqDouble
541 ; ARM32-O2: mov [[R:r[0-9]+]], #0
526 ; ARM32: vcmp.f64 542 ; ARM32: vcmp.f64
527 ; ARM32: vmrs 543 ; ARM32: vmrs
528 ; ARM32: mov [[R:r[0-9]+]], #0 544 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
529 ; ARM32: moveq [[R]], #1 545 ; ARM32: moveq [[R]], #1
530 ; ARM32: movvs [[R]], #1 546 ; ARM32: movvs [[R]], #1
531 547
532 define internal i32 @fcmpUgtFloat(float %a, float %b) { 548 define internal i32 @fcmpUgtFloat(float %a, float %b) {
533 entry: 549 entry:
534 %cmp = fcmp ugt float %a, %b 550 %cmp = fcmp ugt float %a, %b
535 %cmp.ret_ext = zext i1 %cmp to i32 551 %cmp.ret_ext = zext i1 %cmp to i32
536 ret i32 %cmp.ret_ext 552 ret i32 %cmp.ret_ext
537 } 553 }
538 ; CHECK-LABEL: fcmpUgtFloat 554 ; CHECK-LABEL: fcmpUgtFloat
539 ; CHECK: ucomiss 555 ; CHECK: ucomiss
540 ; CHECK: setb 556 ; CHECK: setb
541 ; ARM32-LABEL: fcmpUgtFloat 557 ; ARM32-LABEL: fcmpUgtFloat
558 ; ARM32-O2: mov [[R:r[0-9]+]], #0
542 ; ARM32: vcmp.f32 559 ; ARM32: vcmp.f32
543 ; ARM32: vmrs 560 ; ARM32: vmrs
544 ; ARM32: movls [[R:r[0-9]+]], #0 561 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
545 ; ARM32: movhi [[R]], #1 562 ; ARM32: movhi [[R]], #1
546 563
547 define internal i32 @fcmpUgtDouble(double %a, double %b) { 564 define internal i32 @fcmpUgtDouble(double %a, double %b) {
548 entry: 565 entry:
549 %cmp = fcmp ugt double %a, %b 566 %cmp = fcmp ugt double %a, %b
550 %cmp.ret_ext = zext i1 %cmp to i32 567 %cmp.ret_ext = zext i1 %cmp to i32
551 ret i32 %cmp.ret_ext 568 ret i32 %cmp.ret_ext
552 } 569 }
553 ; CHECK-LABEL: fcmpUgtDouble 570 ; CHECK-LABEL: fcmpUgtDouble
554 ; CHECK: ucomisd 571 ; CHECK: ucomisd
555 ; CHECK: setb 572 ; CHECK: setb
556 ; ARM32-LABEL: fcmpUgtDouble 573 ; ARM32-LABEL: fcmpUgtDouble
574 ; ARM32-O2: mov [[R:r[0-9]+]], #0
557 ; ARM32: vcmp.f64 575 ; ARM32: vcmp.f64
558 ; ARM32: vmrs 576 ; ARM32: vmrs
559 ; ARM32: movls [[R:r[0-9]+]], #0 577 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
560 ; ARM32: movhi [[R]], #1 578 ; ARM32: movhi [[R]], #1
561 579
562 define internal i32 @fcmpUgeFloat(float %a, float %b) { 580 define internal i32 @fcmpUgeFloat(float %a, float %b) {
563 entry: 581 entry:
564 %cmp = fcmp uge float %a, %b 582 %cmp = fcmp uge float %a, %b
565 %cmp.ret_ext = zext i1 %cmp to i32 583 %cmp.ret_ext = zext i1 %cmp to i32
566 ret i32 %cmp.ret_ext 584 ret i32 %cmp.ret_ext
567 } 585 }
568 ; CHECK-LABEL: fcmpUgeFloat 586 ; CHECK-LABEL: fcmpUgeFloat
569 ; CHECK: ucomiss 587 ; CHECK: ucomiss
570 ; CHECK: setbe 588 ; CHECK: setbe
571 ; ARM32-LABEL: fcmpUgeFloat 589 ; ARM32-LABEL: fcmpUgeFloat
590 ; ARM32-O2: mov [[R:r[0-9]+]], #0
572 ; ARM32: vcmp.f32 591 ; ARM32: vcmp.f32
573 ; ARM32: vmrs 592 ; ARM32: vmrs
574 ; ARM32: movmi [[R:r[0-9]+]], #0 593 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
575 ; ARM32: movpl [[R]], #1 594 ; ARM32: movpl [[R]], #1
576 595
577 define internal i32 @fcmpUgeDouble(double %a, double %b) { 596 define internal i32 @fcmpUgeDouble(double %a, double %b) {
578 entry: 597 entry:
579 %cmp = fcmp uge double %a, %b 598 %cmp = fcmp uge double %a, %b
580 %cmp.ret_ext = zext i1 %cmp to i32 599 %cmp.ret_ext = zext i1 %cmp to i32
581 ret i32 %cmp.ret_ext 600 ret i32 %cmp.ret_ext
582 } 601 }
583 ; CHECK-LABEL: fcmpUgeDouble 602 ; CHECK-LABEL: fcmpUgeDouble
584 ; CHECK: ucomisd 603 ; CHECK: ucomisd
585 ; CHECK: setbe 604 ; CHECK: setbe
586 ; ARM32-LABEL: fcmpUgeDouble 605 ; ARM32-LABEL: fcmpUgeDouble
606 ; ARM32-O2: mov [[R:r[0-9]+]], #0
587 ; ARM32: vcmp.f64 607 ; ARM32: vcmp.f64
588 ; ARM32: vmrs 608 ; ARM32: vmrs
589 ; ARM32: movmi [[R:r[0-9]+]], #0 609 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
590 ; ARM32: movpl [[R]], #1 610 ; ARM32: movpl [[R]], #1
591 611
592 define internal i32 @fcmpUltFloat(float %a, float %b) { 612 define internal i32 @fcmpUltFloat(float %a, float %b) {
593 entry: 613 entry:
594 %cmp = fcmp ult float %a, %b 614 %cmp = fcmp ult float %a, %b
595 %cmp.ret_ext = zext i1 %cmp to i32 615 %cmp.ret_ext = zext i1 %cmp to i32
596 ret i32 %cmp.ret_ext 616 ret i32 %cmp.ret_ext
597 } 617 }
598 ; CHECK-LABEL: fcmpUltFloat 618 ; CHECK-LABEL: fcmpUltFloat
599 ; CHECK: ucomiss 619 ; CHECK: ucomiss
600 ; CHECK: setb 620 ; CHECK: setb
601 ; ARM32-LABEL: fcmpUltFloat 621 ; ARM32-LABEL: fcmpUltFloat
622 ; ARM32-O2: mov [[R:r[0-9]+]], #0
602 ; ARM32: vcmp.f32 623 ; ARM32: vcmp.f32
603 ; ARM32: vmrs 624 ; ARM32: vmrs
604 ; ARM32: movge [[R:r[0-9]+]], #0 625 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
605 ; ARM32: movlt [[R]], #1 626 ; ARM32: movlt [[R]], #1
606 627
607 define internal i32 @fcmpUltDouble(double %a, double %b) { 628 define internal i32 @fcmpUltDouble(double %a, double %b) {
608 entry: 629 entry:
609 %cmp = fcmp ult double %a, %b 630 %cmp = fcmp ult double %a, %b
610 %cmp.ret_ext = zext i1 %cmp to i32 631 %cmp.ret_ext = zext i1 %cmp to i32
611 ret i32 %cmp.ret_ext 632 ret i32 %cmp.ret_ext
612 } 633 }
613 ; CHECK-LABEL: fcmpUltDouble 634 ; CHECK-LABEL: fcmpUltDouble
614 ; CHECK: ucomisd 635 ; CHECK: ucomisd
615 ; CHECK: setb 636 ; CHECK: setb
616 ; ARM32-LABEL: fcmpUltDouble 637 ; ARM32-LABEL: fcmpUltDouble
638 ; ARM32-O2: mov [[R:r[0-9]+]], #0
617 ; ARM32: vcmp.f64 639 ; ARM32: vcmp.f64
618 ; ARM32: vmrs 640 ; ARM32: vmrs
619 ; ARM32: movge [[R:r[0-9]+]], #0 641 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
620 ; ARM32: movlt [[R]], #1 642 ; ARM32: movlt [[R]], #1
621 643
622 define internal i32 @fcmpUleFloat(float %a, float %b) { 644 define internal i32 @fcmpUleFloat(float %a, float %b) {
623 entry: 645 entry:
624 %cmp = fcmp ule float %a, %b 646 %cmp = fcmp ule float %a, %b
625 %cmp.ret_ext = zext i1 %cmp to i32 647 %cmp.ret_ext = zext i1 %cmp to i32
626 ret i32 %cmp.ret_ext 648 ret i32 %cmp.ret_ext
627 } 649 }
628 ; CHECK-LABEL: fcmpUleFloat 650 ; CHECK-LABEL: fcmpUleFloat
629 ; CHECK: ucomiss 651 ; CHECK: ucomiss
630 ; CHECK: setbe 652 ; CHECK: setbe
631 ; ARM32-LABEL: fcmpUleFloat 653 ; ARM32-LABEL: fcmpUleFloat
654 ; ARM32-O2: mov [[R:r[0-9]+]], #0
632 ; ARM32: vcmp.f32 655 ; ARM32: vcmp.f32
633 ; ARM32: vmrs 656 ; ARM32: vmrs
634 ; ARM32: movgt [[R:r[0-9]+]], #0 657 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
635 ; ARM32: movle [[R]], #1 658 ; ARM32: movle [[R]], #1
636 659
637 define internal i32 @fcmpUleDouble(double %a, double %b) { 660 define internal i32 @fcmpUleDouble(double %a, double %b) {
638 entry: 661 entry:
639 %cmp = fcmp ule double %a, %b 662 %cmp = fcmp ule double %a, %b
640 %cmp.ret_ext = zext i1 %cmp to i32 663 %cmp.ret_ext = zext i1 %cmp to i32
641 ret i32 %cmp.ret_ext 664 ret i32 %cmp.ret_ext
642 } 665 }
643 ; CHECK-LABEL: fcmpUleDouble 666 ; CHECK-LABEL: fcmpUleDouble
644 ; CHECK: ucomisd 667 ; CHECK: ucomisd
645 ; CHECK: setbe 668 ; CHECK: setbe
646 ; ARM32-LABEL: fcmpUleDouble 669 ; ARM32-LABEL: fcmpUleDouble
670 ; ARM32-O2: mov [[R:r[0-9]+]], #0
647 ; ARM32: vcmp.f64 671 ; ARM32: vcmp.f64
648 ; ARM32: vmrs 672 ; ARM32: vmrs
649 ; ARM32: movgt [[R:r[0-9]+]], #0 673 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
650 ; ARM32: movle [[R]], #1 674 ; ARM32: movle [[R]], #1
651 675
652 define internal i32 @fcmpUneFloat(float %a, float %b) { 676 define internal i32 @fcmpUneFloat(float %a, float %b) {
653 entry: 677 entry:
654 %cmp = fcmp une float %a, %b 678 %cmp = fcmp une float %a, %b
655 %cmp.ret_ext = zext i1 %cmp to i32 679 %cmp.ret_ext = zext i1 %cmp to i32
656 ret i32 %cmp.ret_ext 680 ret i32 %cmp.ret_ext
657 } 681 }
658 ; CHECK-LABEL: fcmpUneFloat 682 ; CHECK-LABEL: fcmpUneFloat
659 ; CHECK: ucomiss 683 ; CHECK: ucomiss
660 ; CHECK: jne 684 ; CHECK: jne
661 ; CHECK: jp 685 ; CHECK: jp
662 ; ARM32-LABEL: fcmpUneFloat 686 ; ARM32-LABEL: fcmpUneFloat
687 ; ARM32-O2: mov [[R:r[0-9]+]], #0
663 ; ARM32: vcmp.f32 688 ; ARM32: vcmp.f32
664 ; ARM32: vmrs 689 ; ARM32: vmrs
665 ; ARM32: moveq [[R:r[0-9]+]], #0 690 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
666 ; ARM32: movne [[R]], #1 691 ; ARM32: movne [[R]], #1
667 692
668 define internal i32 @fcmpUneDouble(double %a, double %b) { 693 define internal i32 @fcmpUneDouble(double %a, double %b) {
669 entry: 694 entry:
670 %cmp = fcmp une double %a, %b 695 %cmp = fcmp une double %a, %b
671 %cmp.ret_ext = zext i1 %cmp to i32 696 %cmp.ret_ext = zext i1 %cmp to i32
672 ret i32 %cmp.ret_ext 697 ret i32 %cmp.ret_ext
673 } 698 }
674 ; CHECK-LABEL: fcmpUneDouble 699 ; CHECK-LABEL: fcmpUneDouble
675 ; CHECK: ucomisd 700 ; CHECK: ucomisd
676 ; CHECK: jne 701 ; CHECK: jne
677 ; CHECK: jp 702 ; CHECK: jp
678 ; ARM32-LABEL: fcmpUneDouble 703 ; ARM32-LABEL: fcmpUneDouble
704 ; ARM32-O2: mov [[R:r[0-9]+]], #0
679 ; ARM32: vcmp.f64 705 ; ARM32: vcmp.f64
680 ; ARM32: vmrs 706 ; ARM32: vmrs
681 ; ARM32: moveq [[R:r[0-9]+]], #0 707 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
682 ; ARM32: movne [[R]], #1 708 ; ARM32: movne [[R]], #1
683 709
684 define internal i32 @fcmpUnoFloat(float %a, float %b) { 710 define internal i32 @fcmpUnoFloat(float %a, float %b) {
685 entry: 711 entry:
686 %cmp = fcmp uno float %a, %b 712 %cmp = fcmp uno float %a, %b
687 %cmp.ret_ext = zext i1 %cmp to i32 713 %cmp.ret_ext = zext i1 %cmp to i32
688 ret i32 %cmp.ret_ext 714 ret i32 %cmp.ret_ext
689 } 715 }
690 ; CHECK-LABEL: fcmpUnoFloat 716 ; CHECK-LABEL: fcmpUnoFloat
691 ; CHECK: ucomiss 717 ; CHECK: ucomiss
692 ; CHECK: setp 718 ; CHECK: setp
693 ; ARM32-LABEL: fcmpUnoFloat 719 ; ARM32-LABEL: fcmpUnoFloat
720 ; ARM32-O2: mov [[R:r[0-9]+]], #0
694 ; ARM32: vcmp.f32 721 ; ARM32: vcmp.f32
695 ; ARM32: vmrs 722 ; ARM32: vmrs
696 ; ARM32: movvc [[R:r[0-9]+]], #0 723 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
697 ; ARM32: movvs [[R]], #1 724 ; ARM32: movvs [[R]], #1
698 725
699 define internal i32 @fcmpUnoDouble(double %a, double %b) { 726 define internal i32 @fcmpUnoDouble(double %a, double %b) {
700 entry: 727 entry:
701 %cmp = fcmp uno double %a, %b 728 %cmp = fcmp uno double %a, %b
702 %cmp.ret_ext = zext i1 %cmp to i32 729 %cmp.ret_ext = zext i1 %cmp to i32
703 ret i32 %cmp.ret_ext 730 ret i32 %cmp.ret_ext
704 } 731 }
705 ; CHECK-LABEL: fcmpUnoDouble 732 ; CHECK-LABEL: fcmpUnoDouble
706 ; CHECK: ucomisd 733 ; CHECK: ucomisd
707 ; CHECK: setp 734 ; CHECK: setp
708 ; ARM32-LABEL: fcmpUnoDouble 735 ; ARM32-LABEL: fcmpUnoDouble
736 ; ARM32-O2: mov [[R:r[0-9]+]], #0
709 ; ARM32: vcmp.f64 737 ; ARM32: vcmp.f64
710 ; ARM32: vmrs 738 ; ARM32: vmrs
711 ; ARM32: movvc [[R:r[0-9]+]], #0 739 ; ARM32-OM1: mov [[R:r[0-9]+]], #0
712 ; ARM32: movvs [[R]], #1 740 ; ARM32: movvs [[R]], #1
713 741
714 define internal i32 @fcmpTrueFloat(float %a, float %b) { 742 define internal i32 @fcmpTrueFloat(float %a, float %b) {
715 entry: 743 entry:
716 %cmp = fcmp true float %a, %b 744 %cmp = fcmp true float %a, %b
717 %cmp.ret_ext = zext i1 %cmp to i32 745 %cmp.ret_ext = zext i1 %cmp to i32
718 ret i32 %cmp.ret_ext 746 ret i32 %cmp.ret_ext
719 } 747 }
720 ; CHECK-LABEL: fcmpTrueFloat 748 ; CHECK-LABEL: fcmpTrueFloat
721 ; CHECK: mov {{.*}},0x1 749 ; CHECK: mov {{.*}},0x1
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
757 } 785 }
758 ; CHECK-LABEL: selectDoubleVarVar 786 ; CHECK-LABEL: selectDoubleVarVar
759 ; CHECK: ucomisd 787 ; CHECK: ucomisd
760 ; CHECK: seta 788 ; CHECK: seta
761 ; CHECK: fld 789 ; CHECK: fld
762 ; ARM32-LABEL: selectDoubleVarVar 790 ; ARM32-LABEL: selectDoubleVarVar
763 ; ARM32: vcmp.f64 791 ; ARM32: vcmp.f64
764 ; ARM32-OM1: vmovne.f64 d{{[0-9]+}} 792 ; ARM32-OM1: vmovne.f64 d{{[0-9]+}}
765 ; ARM32-O2: vmovmi.f64 d{{[0-9]+}} 793 ; ARM32-O2: vmovmi.f64 d{{[0-9]+}}
766 ; ARM32: bx 794 ; ARM32: bx
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698