@@ -67,23 +67,22 @@ define i1 @test_signed_i1_f32(float %f) nounwind {
67
67
;
68
68
; VFP2-LABEL: test_signed_i1_f32:
69
69
; VFP2: @ %bb.0:
70
- ; VFP2-NEXT: vmov s2, r0
71
70
; VFP2-NEXT: vmov.f32 s0, #-1.000000e+00
72
- ; VFP2-NEXT: vcvt.s32.f32 s4, s2
73
- ; VFP2-NEXT: vcmp.f32 s2, s0
74
- ; VFP2-NEXT: vmov r0, s4
75
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
76
- ; VFP2-NEXT: it lt
77
- ; VFP2-NEXT: movlt.w r0, #-1
78
- ; VFP2-NEXT: vcmp.f32 s2, #0
79
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
80
- ; VFP2-NEXT: it gt
81
- ; VFP2-NEXT: movgt r0, #0
71
+ ; VFP2-NEXT: vldr s4, .LCPI0_0
72
+ ; VFP2-NEXT: vmov s2, r0
82
73
; VFP2-NEXT: vcmp.f32 s2, s2
83
74
; VFP2-NEXT: vmrs APSR_nzcv, fpscr
75
+ ; VFP2-NEXT: vmax.f32 d16, d1, d0
76
+ ; VFP2-NEXT: vmin.f32 d0, d16, d2
77
+ ; VFP2-NEXT: vcvt.s32.f32 s0, s0
78
+ ; VFP2-NEXT: vmov r0, s0
84
79
; VFP2-NEXT: it vs
85
80
; VFP2-NEXT: movvs r0, #0
86
81
; VFP2-NEXT: bx lr
82
+ ; VFP2-NEXT: .p2align 2
83
+ ; VFP2-NEXT: @ %bb.1:
84
+ ; VFP2-NEXT: .LCPI0_0:
85
+ ; VFP2-NEXT: .long 0x00000000 @ float 0
87
86
;
88
87
; FP16-LABEL: test_signed_i1_f32:
89
88
; FP16: @ %bb.0:
@@ -157,21 +156,15 @@ define i8 @test_signed_i8_f32(float %f) nounwind {
157
156
;
158
157
; VFP2-LABEL: test_signed_i8_f32:
159
158
; VFP2: @ %bb.0:
160
- ; VFP2-NEXT: vmov s0, r0
161
- ; VFP2-NEXT: vldr s2, .LCPI1_0
162
- ; VFP2-NEXT: vldr s6, .LCPI1_1
163
- ; VFP2-NEXT: vcvt.s32.f32 s4, s0
164
- ; VFP2-NEXT: vcmp.f32 s0, s2
165
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
166
- ; VFP2-NEXT: vcmp.f32 s0, s6
167
- ; VFP2-NEXT: vmov r0, s4
168
- ; VFP2-NEXT: it lt
169
- ; VFP2-NEXT: mvnlt r0, #127
170
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
171
- ; VFP2-NEXT: it gt
172
- ; VFP2-NEXT: movgt r0, #127
173
- ; VFP2-NEXT: vcmp.f32 s0, s0
159
+ ; VFP2-NEXT: vmov s2, r0
160
+ ; VFP2-NEXT: vldr s0, .LCPI1_0
161
+ ; VFP2-NEXT: vmax.f32 d16, d1, d0
162
+ ; VFP2-NEXT: vldr s4, .LCPI1_1
163
+ ; VFP2-NEXT: vcmp.f32 s2, s2
174
164
; VFP2-NEXT: vmrs APSR_nzcv, fpscr
165
+ ; VFP2-NEXT: vmin.f32 d0, d16, d2
166
+ ; VFP2-NEXT: vcvt.s32.f32 s0, s0
167
+ ; VFP2-NEXT: vmov r0, s0
175
168
; VFP2-NEXT: it vs
176
169
; VFP2-NEXT: movvs r0, #0
177
170
; VFP2-NEXT: bx lr
@@ -256,22 +249,15 @@ define i13 @test_signed_i13_f32(float %f) nounwind {
256
249
;
257
250
; VFP2-LABEL: test_signed_i13_f32:
258
251
; VFP2: @ %bb.0:
259
- ; VFP2-NEXT: vmov s0, r0
260
- ; VFP2-NEXT: vldr s2, .LCPI2_0
261
- ; VFP2-NEXT: vldr s6, .LCPI2_1
262
- ; VFP2-NEXT: vcvt.s32.f32 s4, s0
263
- ; VFP2-NEXT: vcmp.f32 s0, s2
264
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
265
- ; VFP2-NEXT: vcmp.f32 s0, s6
266
- ; VFP2-NEXT: vmov r0, s4
267
- ; VFP2-NEXT: itt lt
268
- ; VFP2-NEXT: movwlt r0, #61440
269
- ; VFP2-NEXT: movtlt r0, #65535
270
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
271
- ; VFP2-NEXT: it gt
272
- ; VFP2-NEXT: movwgt r0, #4095
273
- ; VFP2-NEXT: vcmp.f32 s0, s0
252
+ ; VFP2-NEXT: vmov s2, r0
253
+ ; VFP2-NEXT: vldr s0, .LCPI2_0
254
+ ; VFP2-NEXT: vmax.f32 d16, d1, d0
255
+ ; VFP2-NEXT: vldr s4, .LCPI2_1
256
+ ; VFP2-NEXT: vcmp.f32 s2, s2
274
257
; VFP2-NEXT: vmrs APSR_nzcv, fpscr
258
+ ; VFP2-NEXT: vmin.f32 d0, d16, d2
259
+ ; VFP2-NEXT: vcvt.s32.f32 s0, s0
260
+ ; VFP2-NEXT: vmov r0, s0
275
261
; VFP2-NEXT: it vs
276
262
; VFP2-NEXT: movvs r0, #0
277
263
; VFP2-NEXT: bx lr
@@ -356,22 +342,15 @@ define i16 @test_signed_i16_f32(float %f) nounwind {
356
342
;
357
343
; VFP2-LABEL: test_signed_i16_f32:
358
344
; VFP2: @ %bb.0:
359
- ; VFP2-NEXT: vmov s0, r0
360
- ; VFP2-NEXT: vldr s2, .LCPI3_0
361
- ; VFP2-NEXT: vldr s6, .LCPI3_1
362
- ; VFP2-NEXT: vcvt.s32.f32 s4, s0
363
- ; VFP2-NEXT: vcmp.f32 s0, s2
364
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
365
- ; VFP2-NEXT: vcmp.f32 s0, s6
366
- ; VFP2-NEXT: vmov r0, s4
367
- ; VFP2-NEXT: itt lt
368
- ; VFP2-NEXT: movwlt r0, #32768
369
- ; VFP2-NEXT: movtlt r0, #65535
370
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
371
- ; VFP2-NEXT: it gt
372
- ; VFP2-NEXT: movwgt r0, #32767
373
- ; VFP2-NEXT: vcmp.f32 s0, s0
345
+ ; VFP2-NEXT: vmov s2, r0
346
+ ; VFP2-NEXT: vldr s0, .LCPI3_0
347
+ ; VFP2-NEXT: vmax.f32 d16, d1, d0
348
+ ; VFP2-NEXT: vldr s4, .LCPI3_1
349
+ ; VFP2-NEXT: vcmp.f32 s2, s2
374
350
; VFP2-NEXT: vmrs APSR_nzcv, fpscr
351
+ ; VFP2-NEXT: vmin.f32 d0, d16, d2
352
+ ; VFP2-NEXT: vcvt.s32.f32 s0, s0
353
+ ; VFP2-NEXT: vmov r0, s0
375
354
; VFP2-NEXT: it vs
376
355
; VFP2-NEXT: movvs r0, #0
377
356
; VFP2-NEXT: bx lr
@@ -456,23 +435,15 @@ define i19 @test_signed_i19_f32(float %f) nounwind {
456
435
;
457
436
; VFP2-LABEL: test_signed_i19_f32:
458
437
; VFP2: @ %bb.0:
459
- ; VFP2-NEXT: vmov s0, r0
460
- ; VFP2-NEXT: vldr s2, .LCPI4_0
461
- ; VFP2-NEXT: vldr s6, .LCPI4_1
462
- ; VFP2-NEXT: vcvt.s32.f32 s4, s0
463
- ; VFP2-NEXT: vcmp.f32 s0, s2
464
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
465
- ; VFP2-NEXT: vcmp.f32 s0, s6
466
- ; VFP2-NEXT: vmov r0, s4
467
- ; VFP2-NEXT: itt lt
468
- ; VFP2-NEXT: movlt r0, #0
469
- ; VFP2-NEXT: movtlt r0, #65532
470
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
471
- ; VFP2-NEXT: vcmp.f32 s0, s0
472
- ; VFP2-NEXT: itt gt
473
- ; VFP2-NEXT: movwgt r0, #65535
474
- ; VFP2-NEXT: movtgt r0, #3
438
+ ; VFP2-NEXT: vmov s2, r0
439
+ ; VFP2-NEXT: vldr s0, .LCPI4_0
440
+ ; VFP2-NEXT: vmax.f32 d16, d1, d0
441
+ ; VFP2-NEXT: vldr s4, .LCPI4_1
442
+ ; VFP2-NEXT: vcmp.f32 s2, s2
475
443
; VFP2-NEXT: vmrs APSR_nzcv, fpscr
444
+ ; VFP2-NEXT: vmin.f32 d0, d16, d2
445
+ ; VFP2-NEXT: vcvt.s32.f32 s0, s0
446
+ ; VFP2-NEXT: vmov r0, s0
476
447
; VFP2-NEXT: it vs
477
448
; VFP2-NEXT: movvs r0, #0
478
449
; VFP2-NEXT: bx lr
@@ -2492,23 +2463,22 @@ define i1 @test_signed_i1_f16(half %f) nounwind {
2492
2463
; VFP2-NEXT: .save {r7, lr}
2493
2464
; VFP2-NEXT: push {r7, lr}
2494
2465
; VFP2-NEXT: bl __aeabi_h2f
2495
- ; VFP2-NEXT: vmov s2, r0
2496
2466
; VFP2-NEXT: vmov.f32 s0, #-1.000000e+00
2497
- ; VFP2-NEXT: vcvt.s32.f32 s4, s2
2498
- ; VFP2-NEXT: vcmp.f32 s2, s0
2499
- ; VFP2-NEXT: vmov r0, s4
2500
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
2501
- ; VFP2-NEXT: it lt
2502
- ; VFP2-NEXT: movlt.w r0, #-1
2503
- ; VFP2-NEXT: vcmp.f32 s2, #0
2504
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
2505
- ; VFP2-NEXT: it gt
2506
- ; VFP2-NEXT: movgt r0, #0
2467
+ ; VFP2-NEXT: vldr s4, .LCPI20_0
2468
+ ; VFP2-NEXT: vmov s2, r0
2507
2469
; VFP2-NEXT: vcmp.f32 s2, s2
2508
2470
; VFP2-NEXT: vmrs APSR_nzcv, fpscr
2471
+ ; VFP2-NEXT: vmax.f32 d16, d1, d0
2472
+ ; VFP2-NEXT: vmin.f32 d0, d16, d2
2473
+ ; VFP2-NEXT: vcvt.s32.f32 s0, s0
2474
+ ; VFP2-NEXT: vmov r0, s0
2509
2475
; VFP2-NEXT: it vs
2510
2476
; VFP2-NEXT: movvs r0, #0
2511
2477
; VFP2-NEXT: pop {r7, pc}
2478
+ ; VFP2-NEXT: .p2align 2
2479
+ ; VFP2-NEXT: @ %bb.1:
2480
+ ; VFP2-NEXT: .LCPI20_0:
2481
+ ; VFP2-NEXT: .long 0x00000000 @ float 0
2512
2482
;
2513
2483
; FP16-LABEL: test_signed_i1_f16:
2514
2484
; FP16: @ %bb.0:
@@ -2588,21 +2558,15 @@ define i8 @test_signed_i8_f16(half %f) nounwind {
2588
2558
; VFP2-NEXT: .save {r7, lr}
2589
2559
; VFP2-NEXT: push {r7, lr}
2590
2560
; VFP2-NEXT: bl __aeabi_h2f
2591
- ; VFP2-NEXT: vmov s0, r0
2592
- ; VFP2-NEXT: vldr s2, .LCPI21_0
2593
- ; VFP2-NEXT: vldr s6, .LCPI21_1
2594
- ; VFP2-NEXT: vcvt.s32.f32 s4, s0
2595
- ; VFP2-NEXT: vcmp.f32 s0, s2
2596
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
2597
- ; VFP2-NEXT: vcmp.f32 s0, s6
2598
- ; VFP2-NEXT: vmov r0, s4
2599
- ; VFP2-NEXT: it lt
2600
- ; VFP2-NEXT: mvnlt r0, #127
2601
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
2602
- ; VFP2-NEXT: it gt
2603
- ; VFP2-NEXT: movgt r0, #127
2604
- ; VFP2-NEXT: vcmp.f32 s0, s0
2561
+ ; VFP2-NEXT: vmov s2, r0
2562
+ ; VFP2-NEXT: vldr s0, .LCPI21_0
2563
+ ; VFP2-NEXT: vmax.f32 d16, d1, d0
2564
+ ; VFP2-NEXT: vldr s4, .LCPI21_1
2565
+ ; VFP2-NEXT: vcmp.f32 s2, s2
2605
2566
; VFP2-NEXT: vmrs APSR_nzcv, fpscr
2567
+ ; VFP2-NEXT: vmin.f32 d0, d16, d2
2568
+ ; VFP2-NEXT: vcvt.s32.f32 s0, s0
2569
+ ; VFP2-NEXT: vmov r0, s0
2606
2570
; VFP2-NEXT: it vs
2607
2571
; VFP2-NEXT: movvs r0, #0
2608
2572
; VFP2-NEXT: pop {r7, pc}
@@ -2693,22 +2657,15 @@ define i13 @test_signed_i13_f16(half %f) nounwind {
2693
2657
; VFP2-NEXT: .save {r7, lr}
2694
2658
; VFP2-NEXT: push {r7, lr}
2695
2659
; VFP2-NEXT: bl __aeabi_h2f
2696
- ; VFP2-NEXT: vmov s0, r0
2697
- ; VFP2-NEXT: vldr s2, .LCPI22_0
2698
- ; VFP2-NEXT: vldr s6, .LCPI22_1
2699
- ; VFP2-NEXT: vcvt.s32.f32 s4, s0
2700
- ; VFP2-NEXT: vcmp.f32 s0, s2
2701
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
2702
- ; VFP2-NEXT: vcmp.f32 s0, s6
2703
- ; VFP2-NEXT: vmov r0, s4
2704
- ; VFP2-NEXT: itt lt
2705
- ; VFP2-NEXT: movwlt r0, #61440
2706
- ; VFP2-NEXT: movtlt r0, #65535
2707
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
2708
- ; VFP2-NEXT: it gt
2709
- ; VFP2-NEXT: movwgt r0, #4095
2710
- ; VFP2-NEXT: vcmp.f32 s0, s0
2660
+ ; VFP2-NEXT: vmov s2, r0
2661
+ ; VFP2-NEXT: vldr s0, .LCPI22_0
2662
+ ; VFP2-NEXT: vmax.f32 d16, d1, d0
2663
+ ; VFP2-NEXT: vldr s4, .LCPI22_1
2664
+ ; VFP2-NEXT: vcmp.f32 s2, s2
2711
2665
; VFP2-NEXT: vmrs APSR_nzcv, fpscr
2666
+ ; VFP2-NEXT: vmin.f32 d0, d16, d2
2667
+ ; VFP2-NEXT: vcvt.s32.f32 s0, s0
2668
+ ; VFP2-NEXT: vmov r0, s0
2712
2669
; VFP2-NEXT: it vs
2713
2670
; VFP2-NEXT: movvs r0, #0
2714
2671
; VFP2-NEXT: pop {r7, pc}
@@ -2799,22 +2756,15 @@ define i16 @test_signed_i16_f16(half %f) nounwind {
2799
2756
; VFP2-NEXT: .save {r7, lr}
2800
2757
; VFP2-NEXT: push {r7, lr}
2801
2758
; VFP2-NEXT: bl __aeabi_h2f
2802
- ; VFP2-NEXT: vmov s0, r0
2803
- ; VFP2-NEXT: vldr s2, .LCPI23_0
2804
- ; VFP2-NEXT: vldr s6, .LCPI23_1
2805
- ; VFP2-NEXT: vcvt.s32.f32 s4, s0
2806
- ; VFP2-NEXT: vcmp.f32 s0, s2
2807
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
2808
- ; VFP2-NEXT: vcmp.f32 s0, s6
2809
- ; VFP2-NEXT: vmov r0, s4
2810
- ; VFP2-NEXT: itt lt
2811
- ; VFP2-NEXT: movwlt r0, #32768
2812
- ; VFP2-NEXT: movtlt r0, #65535
2813
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
2814
- ; VFP2-NEXT: it gt
2815
- ; VFP2-NEXT: movwgt r0, #32767
2816
- ; VFP2-NEXT: vcmp.f32 s0, s0
2759
+ ; VFP2-NEXT: vmov s2, r0
2760
+ ; VFP2-NEXT: vldr s0, .LCPI23_0
2761
+ ; VFP2-NEXT: vmax.f32 d16, d1, d0
2762
+ ; VFP2-NEXT: vldr s4, .LCPI23_1
2763
+ ; VFP2-NEXT: vcmp.f32 s2, s2
2817
2764
; VFP2-NEXT: vmrs APSR_nzcv, fpscr
2765
+ ; VFP2-NEXT: vmin.f32 d0, d16, d2
2766
+ ; VFP2-NEXT: vcvt.s32.f32 s0, s0
2767
+ ; VFP2-NEXT: vmov r0, s0
2818
2768
; VFP2-NEXT: it vs
2819
2769
; VFP2-NEXT: movvs r0, #0
2820
2770
; VFP2-NEXT: pop {r7, pc}
@@ -2905,23 +2855,15 @@ define i19 @test_signed_i19_f16(half %f) nounwind {
2905
2855
; VFP2-NEXT: .save {r7, lr}
2906
2856
; VFP2-NEXT: push {r7, lr}
2907
2857
; VFP2-NEXT: bl __aeabi_h2f
2908
- ; VFP2-NEXT: vmov s0, r0
2909
- ; VFP2-NEXT: vldr s2, .LCPI24_0
2910
- ; VFP2-NEXT: vldr s6, .LCPI24_1
2911
- ; VFP2-NEXT: vcvt.s32.f32 s4, s0
2912
- ; VFP2-NEXT: vcmp.f32 s0, s2
2913
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
2914
- ; VFP2-NEXT: vcmp.f32 s0, s6
2915
- ; VFP2-NEXT: vmov r0, s4
2916
- ; VFP2-NEXT: itt lt
2917
- ; VFP2-NEXT: movlt r0, #0
2918
- ; VFP2-NEXT: movtlt r0, #65532
2919
- ; VFP2-NEXT: vmrs APSR_nzcv, fpscr
2920
- ; VFP2-NEXT: vcmp.f32 s0, s0
2921
- ; VFP2-NEXT: itt gt
2922
- ; VFP2-NEXT: movwgt r0, #65535
2923
- ; VFP2-NEXT: movtgt r0, #3
2858
+ ; VFP2-NEXT: vmov s2, r0
2859
+ ; VFP2-NEXT: vldr s0, .LCPI24_0
2860
+ ; VFP2-NEXT: vmax.f32 d16, d1, d0
2861
+ ; VFP2-NEXT: vldr s4, .LCPI24_1
2862
+ ; VFP2-NEXT: vcmp.f32 s2, s2
2924
2863
; VFP2-NEXT: vmrs APSR_nzcv, fpscr
2864
+ ; VFP2-NEXT: vmin.f32 d0, d16, d2
2865
+ ; VFP2-NEXT: vcvt.s32.f32 s0, s0
2866
+ ; VFP2-NEXT: vmov r0, s0
2925
2867
; VFP2-NEXT: it vs
2926
2868
; VFP2-NEXT: movvs r0, #0
2927
2869
; VFP2-NEXT: pop {r7, pc}
0 commit comments