1
1
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2
- ; RUN: llc -mtriple=aarch64 < %s | FileCheck %s
2
+ ; RUN: llc < %s -mtriple=aarch64 | FileCheck %s --check-prefixes=CHECK,CHECK-CVT
3
+ ; RUN: llc < %s -mtriple=aarch64 -mattr=+fullfp16 | FileCheck %s --check-prefixes=CHECK,CHECK-FP16
3
4
4
5
;
5
6
; 32-bit float to signed integer
@@ -106,19 +107,7 @@ define i19 @test_signed_i19_f32(float %f) nounwind {
106
107
define i32 @test_signed_i32_f32 (float %f ) nounwind {
107
108
; CHECK-LABEL: test_signed_i32_f32:
108
109
; CHECK: // %bb.0:
109
- ; CHECK-NEXT: mov w9, #-822083584
110
- ; CHECK-NEXT: mov w11, #1325400063
111
- ; CHECK-NEXT: fmov s1, w9
112
- ; CHECK-NEXT: fcvtzs w8, s0
113
- ; CHECK-NEXT: mov w10, #-2147483648
114
- ; CHECK-NEXT: fcmp s0, s1
115
- ; CHECK-NEXT: fmov s1, w11
116
- ; CHECK-NEXT: mov w12, #2147483647
117
- ; CHECK-NEXT: csel w8, w10, w8, lt
118
- ; CHECK-NEXT: fcmp s0, s1
119
- ; CHECK-NEXT: csel w8, w12, w8, gt
120
- ; CHECK-NEXT: fcmp s0, s0
121
- ; CHECK-NEXT: csel w0, wzr, w8, vs
110
+ ; CHECK-NEXT: fcvtzs w0, s0
122
111
; CHECK-NEXT: ret
123
112
%x = call i32 @llvm.fptosi.sat.i32.f32 (float %f )
124
113
ret i32 %x
@@ -148,19 +137,7 @@ define i50 @test_signed_i50_f32(float %f) nounwind {
148
137
define i64 @test_signed_i64_f32 (float %f ) nounwind {
149
138
; CHECK-LABEL: test_signed_i64_f32:
150
139
; CHECK: // %bb.0:
151
- ; CHECK-NEXT: mov w9, #-553648128
152
- ; CHECK-NEXT: mov w11, #1593835519
153
- ; CHECK-NEXT: fmov s1, w9
154
- ; CHECK-NEXT: fcvtzs x8, s0
155
- ; CHECK-NEXT: mov x10, #-9223372036854775808
156
- ; CHECK-NEXT: fcmp s0, s1
157
- ; CHECK-NEXT: fmov s1, w11
158
- ; CHECK-NEXT: mov x12, #9223372036854775807
159
- ; CHECK-NEXT: csel x8, x10, x8, lt
160
- ; CHECK-NEXT: fcmp s0, s1
161
- ; CHECK-NEXT: csel x8, x12, x8, gt
162
- ; CHECK-NEXT: fcmp s0, s0
163
- ; CHECK-NEXT: csel x0, xzr, x8, vs
140
+ ; CHECK-NEXT: fcvtzs x0, s0
164
141
; CHECK-NEXT: ret
165
142
%x = call i64 @llvm.fptosi.sat.i64.f32 (float %f )
166
143
ret i64 %x
@@ -330,16 +307,7 @@ define i19 @test_signed_i19_f64(double %f) nounwind {
330
307
define i32 @test_signed_i32_f64 (double %f ) nounwind {
331
308
; CHECK-LABEL: test_signed_i32_f64:
332
309
; CHECK: // %bb.0:
333
- ; CHECK-NEXT: mov x8, #-4476578029606273024
334
- ; CHECK-NEXT: mov x9, #281474972516352
335
- ; CHECK-NEXT: movk x9, #16863, lsl #48
336
- ; CHECK-NEXT: fmov d1, x8
337
- ; CHECK-NEXT: fmaxnm d1, d0, d1
338
- ; CHECK-NEXT: fmov d2, x9
339
- ; CHECK-NEXT: fminnm d1, d1, d2
340
- ; CHECK-NEXT: fcvtzs w8, d1
341
- ; CHECK-NEXT: fcmp d0, d0
342
- ; CHECK-NEXT: csel w0, wzr, w8, vs
310
+ ; CHECK-NEXT: fcvtzs w0, d0
343
311
; CHECK-NEXT: ret
344
312
%x = call i32 @llvm.fptosi.sat.i32.f64 (double %f )
345
313
ret i32 %x
@@ -366,19 +334,7 @@ define i50 @test_signed_i50_f64(double %f) nounwind {
366
334
define i64 @test_signed_i64_f64 (double %f ) nounwind {
367
335
; CHECK-LABEL: test_signed_i64_f64:
368
336
; CHECK: // %bb.0:
369
- ; CHECK-NEXT: mov x9, #-4332462841530417152
370
- ; CHECK-NEXT: mov x11, #4890909195324358655
371
- ; CHECK-NEXT: fmov d1, x9
372
- ; CHECK-NEXT: fcvtzs x8, d0
373
- ; CHECK-NEXT: mov x10, #-9223372036854775808
374
- ; CHECK-NEXT: fcmp d0, d1
375
- ; CHECK-NEXT: fmov d1, x11
376
- ; CHECK-NEXT: mov x12, #9223372036854775807
377
- ; CHECK-NEXT: csel x8, x10, x8, lt
378
- ; CHECK-NEXT: fcmp d0, d1
379
- ; CHECK-NEXT: csel x8, x12, x8, gt
380
- ; CHECK-NEXT: fcmp d0, d0
381
- ; CHECK-NEXT: csel x0, xzr, x8, vs
337
+ ; CHECK-NEXT: fcvtzs x0, d0
382
338
; CHECK-NEXT: ret
383
339
%x = call i64 @llvm.fptosi.sat.i64.f64 (double %f )
384
340
ret i64 %x
@@ -550,23 +506,16 @@ define i19 @test_signed_i19_f16(half %f) nounwind {
550
506
}
551
507
552
508
define i32 @test_signed_i32_f16 (half %f ) nounwind {
553
- ; CHECK-LABEL: test_signed_i32_f16:
554
- ; CHECK: // %bb.0:
555
- ; CHECK-NEXT: mov w8, #-822083584
556
- ; CHECK-NEXT: fcvt s0, h0
557
- ; CHECK-NEXT: fmov s1, w8
558
- ; CHECK-NEXT: mov w8, #1325400063
559
- ; CHECK-NEXT: mov w9, #-2147483648
560
- ; CHECK-NEXT: fcmp s0, s1
561
- ; CHECK-NEXT: fmov s1, w8
562
- ; CHECK-NEXT: fcvtzs w8, s0
563
- ; CHECK-NEXT: csel w8, w9, w8, lt
564
- ; CHECK-NEXT: mov w9, #2147483647
565
- ; CHECK-NEXT: fcmp s0, s1
566
- ; CHECK-NEXT: csel w8, w9, w8, gt
567
- ; CHECK-NEXT: fcmp s0, s0
568
- ; CHECK-NEXT: csel w0, wzr, w8, vs
569
- ; CHECK-NEXT: ret
509
+ ; CHECK-CVT-LABEL: test_signed_i32_f16:
510
+ ; CHECK-CVT: // %bb.0:
511
+ ; CHECK-CVT-NEXT: fcvt s0, h0
512
+ ; CHECK-CVT-NEXT: fcvtzs w0, s0
513
+ ; CHECK-CVT-NEXT: ret
514
+ ;
515
+ ; CHECK-FP16-LABEL: test_signed_i32_f16:
516
+ ; CHECK-FP16: // %bb.0:
517
+ ; CHECK-FP16-NEXT: fcvtzs w0, h0
518
+ ; CHECK-FP16-NEXT: ret
570
519
%x = call i32 @llvm.fptosi.sat.i32.f16 (half %f )
571
520
ret i32 %x
572
521
}
@@ -594,23 +543,16 @@ define i50 @test_signed_i50_f16(half %f) nounwind {
594
543
}
595
544
596
545
define i64 @test_signed_i64_f16 (half %f ) nounwind {
597
- ; CHECK-LABEL: test_signed_i64_f16:
598
- ; CHECK: // %bb.0:
599
- ; CHECK-NEXT: mov w8, #-553648128
600
- ; CHECK-NEXT: fcvt s0, h0
601
- ; CHECK-NEXT: fmov s1, w8
602
- ; CHECK-NEXT: mov w8, #1593835519
603
- ; CHECK-NEXT: mov x9, #-9223372036854775808
604
- ; CHECK-NEXT: fcmp s0, s1
605
- ; CHECK-NEXT: fmov s1, w8
606
- ; CHECK-NEXT: fcvtzs x8, s0
607
- ; CHECK-NEXT: csel x8, x9, x8, lt
608
- ; CHECK-NEXT: mov x9, #9223372036854775807
609
- ; CHECK-NEXT: fcmp s0, s1
610
- ; CHECK-NEXT: csel x8, x9, x8, gt
611
- ; CHECK-NEXT: fcmp s0, s0
612
- ; CHECK-NEXT: csel x0, xzr, x8, vs
613
- ; CHECK-NEXT: ret
546
+ ; CHECK-CVT-LABEL: test_signed_i64_f16:
547
+ ; CHECK-CVT: // %bb.0:
548
+ ; CHECK-CVT-NEXT: fcvt s0, h0
549
+ ; CHECK-CVT-NEXT: fcvtzs x0, s0
550
+ ; CHECK-CVT-NEXT: ret
551
+ ;
552
+ ; CHECK-FP16-LABEL: test_signed_i64_f16:
553
+ ; CHECK-FP16: // %bb.0:
554
+ ; CHECK-FP16-NEXT: fcvtzs x0, h0
555
+ ; CHECK-FP16-NEXT: ret
614
556
%x = call i64 @llvm.fptosi.sat.i64.f16 (half %f )
615
557
ret i64 %x
616
558
}
0 commit comments