7
7
define void @store (half %x , ptr %p ) nounwind {
8
8
; CHECK-LABEL: store:
9
9
; CHECK: ; %bb.0:
10
- ; CHECK-NEXT: mov r30, r20
11
- ; CHECK-NEXT: mov r31, r21
12
- ; CHECK-NEXT: std Z+1, r23
13
- ; CHECK-NEXT: st Z, r22
10
+ ; CHECK-NEXT: mov r30, r22
11
+ ; CHECK-NEXT: mov r31, r23
12
+ ; CHECK-NEXT: std Z+1, r25
13
+ ; CHECK-NEXT: st Z, r24
14
14
; CHECK-NEXT: ret
15
15
store half %x , ptr %p
16
16
ret void
@@ -21,8 +21,8 @@ define half @return(ptr %p) nounwind {
21
21
; CHECK: ; %bb.0:
22
22
; CHECK-NEXT: mov r30, r24
23
23
; CHECK-NEXT: mov r31, r25
24
- ; CHECK-NEXT: ld r22 , Z
25
- ; CHECK-NEXT: ldd r23 , Z+1
24
+ ; CHECK-NEXT: ld r24 , Z
25
+ ; CHECK-NEXT: ldd r25 , Z+1
26
26
; CHECK-NEXT: ret
27
27
%r = load half , ptr %p
28
28
ret half %r
@@ -79,8 +79,6 @@ define dso_local void @stored(ptr nocapture %a, double %b) local_unnamed_addr no
79
79
; CHECK-NEXT: mov r24, r30
80
80
; CHECK-NEXT: mov r25, r31
81
81
; CHECK-NEXT: rcall __truncdfhf2
82
- ; CHECK-NEXT: rcall __extendhfsf2
83
- ; CHECK-NEXT: rcall __truncsfhf2
84
82
; CHECK-NEXT: mov r30, r16
85
83
; CHECK-NEXT: mov r31, r17
86
84
; CHECK-NEXT: std Z+1, r25
@@ -108,8 +106,6 @@ define dso_local void @storef(ptr nocapture %a, float %b) local_unnamed_addr nou
108
106
; CHECK-NEXT: mov r24, r18
109
107
; CHECK-NEXT: mov r25, r19
110
108
; CHECK-NEXT: rcall __truncsfhf2
111
- ; CHECK-NEXT: rcall __extendhfsf2
112
- ; CHECK-NEXT: rcall __truncsfhf2
113
109
; CHECK-NEXT: mov r30, r16
114
110
; CHECK-NEXT: mov r31, r17
115
111
; CHECK-NEXT: std Z+1, r25
@@ -126,22 +122,14 @@ entry:
126
122
define void @test_load_store (ptr %in , ptr %out ) nounwind {
127
123
; CHECK-LABEL: test_load_store:
128
124
; CHECK: ; %bb.0:
129
- ; CHECK-NEXT: push r16
130
- ; CHECK-NEXT: push r17
131
- ; CHECK-NEXT: mov r16, r22
132
- ; CHECK-NEXT: mov r17, r23
133
125
; CHECK-NEXT: mov r30, r24
134
126
; CHECK-NEXT: mov r31, r25
135
127
; CHECK-NEXT: ld r24, Z
136
128
; CHECK-NEXT: ldd r25, Z+1
137
- ; CHECK-NEXT: rcall __extendhfsf2
138
- ; CHECK-NEXT: rcall __truncsfhf2
139
- ; CHECK-NEXT: mov r30, r16
140
- ; CHECK-NEXT: mov r31, r17
129
+ ; CHECK-NEXT: mov r30, r22
130
+ ; CHECK-NEXT: mov r31, r23
141
131
; CHECK-NEXT: std Z+1, r25
142
132
; CHECK-NEXT: st Z, r24
143
- ; CHECK-NEXT: pop r17
144
- ; CHECK-NEXT: pop r16
145
133
; CHECK-NEXT: ret
146
134
%val = load half , ptr %in
147
135
store half %val , ptr %out
@@ -177,8 +165,6 @@ define void @test_bitcast_to_half(ptr %addr, i16 %in) nounwind {
177
165
define half @from_bits (i16 %x ) nounwind {
178
166
; CHECK-LABEL: from_bits:
179
167
; CHECK: ; %bb.0:
180
- ; CHECK-NEXT: mov r22, r24
181
- ; CHECK-NEXT: mov r23, r25
182
168
; CHECK-NEXT: ret
183
169
%res = bitcast i16 %x to half
184
170
ret half %res
@@ -187,8 +173,6 @@ define half @from_bits(i16 %x) nounwind {
187
173
define i16 @to_bits (half %x ) nounwind {
188
174
; CHECK-LABEL: to_bits:
189
175
; CHECK: ; %bb.0:
190
- ; CHECK-NEXT: mov r24, r22
191
- ; CHECK-NEXT: mov r25, r23
192
176
; CHECK-NEXT: ret
193
177
%res = bitcast half %x to i16
194
178
ret i16 %res
@@ -231,8 +215,6 @@ define void @test_trunc32(float %in, ptr %addr) nounwind {
231
215
; CHECK-NEXT: mov r16, r20
232
216
; CHECK-NEXT: mov r17, r21
233
217
; CHECK-NEXT: rcall __truncsfhf2
234
- ; CHECK-NEXT: rcall __extendhfsf2
235
- ; CHECK-NEXT: rcall __truncsfhf2
236
218
; CHECK-NEXT: mov r30, r16
237
219
; CHECK-NEXT: mov r31, r17
238
220
; CHECK-NEXT: std Z+1, r25
@@ -249,8 +231,6 @@ define void @test_trunc64(double %in, ptr %addr) nounwind {
249
231
; CHECK-LABEL: test_trunc64:
250
232
; CHECK: ; %bb.0:
251
233
; CHECK-NEXT: rcall __truncdfhf2
252
- ; CHECK-NEXT: rcall __extendhfsf2
253
- ; CHECK-NEXT: rcall __truncsfhf2
254
234
; CHECK-NEXT: mov r30, r16
255
235
; CHECK-NEXT: mov r31, r17
256
236
; CHECK-NEXT: std Z+1, r25
@@ -281,8 +261,6 @@ define void @test_sitofp_i64(i64 %a, ptr %p) nounwind {
281
261
; CHECK: ; %bb.0:
282
262
; CHECK-NEXT: rcall __floatdisf
283
263
; CHECK-NEXT: rcall __truncsfhf2
284
- ; CHECK-NEXT: rcall __extendhfsf2
285
- ; CHECK-NEXT: rcall __truncsfhf2
286
264
; CHECK-NEXT: mov r30, r16
287
265
; CHECK-NEXT: mov r31, r17
288
266
; CHECK-NEXT: std Z+1, r25
@@ -313,8 +291,6 @@ define void @test_uitofp_i64(i64 %a, ptr %p) nounwind {
313
291
; CHECK: ; %bb.0:
314
292
; CHECK-NEXT: rcall __floatundisf
315
293
; CHECK-NEXT: rcall __truncsfhf2
316
- ; CHECK-NEXT: rcall __extendhfsf2
317
- ; CHECK-NEXT: rcall __truncsfhf2
318
294
; CHECK-NEXT: mov r30, r16
319
295
; CHECK-NEXT: mov r31, r17
320
296
; CHECK-NEXT: std Z+1, r25
@@ -393,8 +369,6 @@ define void @test_trunc32_vec2(<2 x float> %a, ptr %p) nounwind {
393
369
; CHECK-NEXT: mov r12, r18
394
370
; CHECK-NEXT: mov r13, r19
395
371
; CHECK-NEXT: rcall __truncsfhf2
396
- ; CHECK-NEXT: rcall __extendhfsf2
397
- ; CHECK-NEXT: rcall __truncsfhf2
398
372
; CHECK-NEXT: mov r30, r16
399
373
; CHECK-NEXT: mov r31, r17
400
374
; CHECK-NEXT: std Z+3, r25
@@ -404,8 +378,6 @@ define void @test_trunc32_vec2(<2 x float> %a, ptr %p) nounwind {
404
378
; CHECK-NEXT: mov r24, r14
405
379
; CHECK-NEXT: mov r25, r15
406
380
; CHECK-NEXT: rcall __truncsfhf2
407
- ; CHECK-NEXT: rcall __extendhfsf2
408
- ; CHECK-NEXT: rcall __truncsfhf2
409
381
; CHECK-NEXT: mov r30, r16
410
382
; CHECK-NEXT: mov r31, r17
411
383
; CHECK-NEXT: std Z+1, r25
@@ -424,8 +396,6 @@ define void @test_trunc64_vec1(<1 x double> %a, ptr %p) nounwind {
424
396
; CHECK-LABEL: test_trunc64_vec1:
425
397
; CHECK: ; %bb.0:
426
398
; CHECK-NEXT: rcall __truncdfhf2
427
- ; CHECK-NEXT: rcall __extendhfsf2
428
- ; CHECK-NEXT: rcall __truncsfhf2
429
399
; CHECK-NEXT: mov r30, r16
430
400
; CHECK-NEXT: mov r31, r17
431
401
; CHECK-NEXT: std Z+1, r25
@@ -439,51 +409,47 @@ define void @test_trunc64_vec1(<1 x double> %a, ptr %p) nounwind {
439
409
define float @test_sitofp_fadd_i32 (i32 %a , ptr %b ) nounwind {
440
410
; CHECK-LABEL: test_sitofp_fadd_i32:
441
411
; CHECK: ; %bb.0:
442
- ; CHECK-NEXT: push r10
443
- ; CHECK-NEXT: push r11
444
412
; CHECK-NEXT: push r12
445
413
; CHECK-NEXT: push r13
446
414
; CHECK-NEXT: push r14
447
415
; CHECK-NEXT: push r15
448
416
; CHECK-NEXT: push r16
449
417
; CHECK-NEXT: push r17
450
- ; CHECK-NEXT: mov r16, r24
451
- ; CHECK-NEXT: mov r17, r25
452
- ; CHECK-NEXT: mov r14, r22
453
- ; CHECK-NEXT: mov r15, r23
454
- ; CHECK-NEXT: mov r30, r20
455
- ; CHECK-NEXT: mov r31, r21
418
+ ; CHECK-NEXT: mov r16, r20
419
+ ; CHECK-NEXT: mov r17, r21
420
+ ; CHECK-NEXT: rcall __floatsisf
421
+ ; CHECK-NEXT: rcall __truncsfhf2
422
+ ; CHECK-NEXT: mov r14, r24
423
+ ; CHECK-NEXT: mov r15, r25
424
+ ; CHECK-NEXT: mov r30, r16
425
+ ; CHECK-NEXT: mov r31, r17
456
426
; CHECK-NEXT: ld r24, Z
457
427
; CHECK-NEXT: ldd r25, Z+1
458
428
; CHECK-NEXT: rcall __extendhfsf2
459
- ; CHECK-NEXT: mov r12, r22
460
- ; CHECK-NEXT: mov r13, r23
461
- ; CHECK-NEXT: mov r10, r24
462
- ; CHECK-NEXT: mov r11, r25
463
- ; CHECK-NEXT: mov r22, r14
464
- ; CHECK-NEXT: mov r23, r15
465
- ; CHECK-NEXT: mov r24, r16
466
- ; CHECK-NEXT: mov r25, r17
467
- ; CHECK-NEXT: rcall __floatsisf
468
- ; CHECK-NEXT: rcall __truncsfhf2
429
+ ; CHECK-NEXT: mov r16, r22
430
+ ; CHECK-NEXT: mov r17, r23
431
+ ; CHECK-NEXT: mov r12, r24
432
+ ; CHECK-NEXT: mov r13, r25
433
+ ; CHECK-NEXT: mov r24, r14
434
+ ; CHECK-NEXT: mov r25, r15
469
435
; CHECK-NEXT: rcall __extendhfsf2
470
436
; CHECK-NEXT: mov r18, r22
471
437
; CHECK-NEXT: mov r19, r23
472
438
; CHECK-NEXT: mov r20, r24
473
439
; CHECK-NEXT: mov r21, r25
474
- ; CHECK-NEXT: mov r22, r12
475
- ; CHECK-NEXT: mov r23, r13
476
- ; CHECK-NEXT: mov r24, r10
477
- ; CHECK-NEXT: mov r25, r11
440
+ ; CHECK-NEXT: mov r22, r16
441
+ ; CHECK-NEXT: mov r23, r17
442
+ ; CHECK-NEXT: mov r24, r12
443
+ ; CHECK-NEXT: mov r25, r13
478
444
; CHECK-NEXT: rcall __addsf3
445
+ ; CHECK-NEXT: rcall __truncsfhf2
446
+ ; CHECK-NEXT: rcall __extendhfsf2
479
447
; CHECK-NEXT: pop r17
480
448
; CHECK-NEXT: pop r16
481
449
; CHECK-NEXT: pop r15
482
450
; CHECK-NEXT: pop r14
483
451
; CHECK-NEXT: pop r13
484
452
; CHECK-NEXT: pop r12
485
- ; CHECK-NEXT: pop r11
486
- ; CHECK-NEXT: pop r10
487
453
; CHECK-NEXT: ret
488
454
%tmp0 = load half , ptr %b
489
455
%tmp1 = sitofp i32 %a to half
@@ -495,22 +461,20 @@ define float @test_sitofp_fadd_i32(i32 %a, ptr %b) nounwind {
495
461
define half @chained_fp_ops (half %x ) {
496
462
; CHECK-LABEL: chained_fp_ops:
497
463
; CHECK: ; %bb.0: ; %start
498
- ; CHECK-NEXT: mov r24, r22
499
- ; CHECK-NEXT: mov r25, r23
500
464
; CHECK-NEXT: rcall __extendhfsf2
501
465
; CHECK-NEXT: mov r18, r22
502
466
; CHECK-NEXT: mov r19, r23
503
467
; CHECK-NEXT: mov r20, r24
504
468
; CHECK-NEXT: mov r21, r25
505
469
; CHECK-NEXT: rcall __addsf3
470
+ ; CHECK-NEXT: rcall __truncsfhf2
471
+ ; CHECK-NEXT: rcall __extendhfsf2
506
472
; CHECK-NEXT: ldi r18, 0
507
473
; CHECK-NEXT: ldi r19, 0
508
474
; CHECK-NEXT: ldi r20, 0
509
475
; CHECK-NEXT: ldi r21, 63
510
476
; CHECK-NEXT: rcall __mulsf3
511
477
; CHECK-NEXT: rcall __truncsfhf2
512
- ; CHECK-NEXT: mov r22, r24
513
- ; CHECK-NEXT: mov r23, r25
514
478
; CHECK-NEXT: ret
515
479
start:
516
480
%y = fmul half %x , 0xH4000
@@ -523,8 +487,6 @@ define half @test_select_cc(half) nounwind {
523
487
; CHECK: ; %bb.0:
524
488
; CHECK-NEXT: push r16
525
489
; CHECK-NEXT: push r17
526
- ; CHECK-NEXT: mov r24, r22
527
- ; CHECK-NEXT: mov r25, r23
528
490
; CHECK-NEXT: rcall __extendhfsf2
529
491
; CHECK-NEXT: ldi r16, 0
530
492
; CHECK-NEXT: ldi r17, 0
@@ -534,20 +496,13 @@ define half @test_select_cc(half) nounwind {
534
496
; CHECK-NEXT: mov r21, r17
535
497
; CHECK-NEXT: rcall __nesf2
536
498
; CHECK-NEXT: cpi r24, 0
537
- ; CHECK-NEXT: brne .LBB25_2
499
+ ; CHECK-NEXT: breq .LBB25_2
538
500
; CHECK-NEXT: ; %bb.1:
501
+ ; CHECK-NEXT: ldi r16, 0
502
+ ; CHECK-NEXT: ldi r17, 60
503
+ ; CHECK-NEXT: .LBB25_2:
539
504
; CHECK-NEXT: mov r24, r16
540
505
; CHECK-NEXT: mov r25, r17
541
- ; CHECK-NEXT: rjmp .LBB25_3
542
- ; CHECK-NEXT: .LBB25_2:
543
- ; CHECK-NEXT: ldi r24, 128
544
- ; CHECK-NEXT: ldi r25, 63
545
- ; CHECK-NEXT: .LBB25_3:
546
- ; CHECK-NEXT: mov r22, r16
547
- ; CHECK-NEXT: mov r23, r17
548
- ; CHECK-NEXT: rcall __truncsfhf2
549
- ; CHECK-NEXT: mov r22, r24
550
- ; CHECK-NEXT: mov r23, r25
551
506
; CHECK-NEXT: pop r17
552
507
; CHECK-NEXT: pop r16
553
508
; CHECK-NEXT: ret
@@ -559,9 +514,7 @@ define half @test_select_cc(half) nounwind {
559
514
define half @fabs (half %x ) nounwind {
560
515
; CHECK-LABEL: fabs:
561
516
; CHECK: ; %bb.0:
562
- ; CHECK-NEXT: andi r23, 127
563
- ; CHECK-NEXT: ldi r24, 0
564
- ; CHECK-NEXT: ldi r25, 0
517
+ ; CHECK-NEXT: andi r25, 127
565
518
; CHECK-NEXT: ret
566
519
%a = call half @llvm.fabs.f16 (half %x )
567
520
ret half %a
@@ -570,23 +523,11 @@ define half @fabs(half %x) nounwind {
570
523
define half @fcopysign (half %x , half %y ) nounwind {
571
524
; CHECK-LABEL: fcopysign:
572
525
; CHECK: ; %bb.0:
573
- ; CHECK-NEXT: push r16
574
- ; CHECK-NEXT: push r17
575
- ; CHECK-NEXT: mov r16, r18
576
- ; CHECK-NEXT: mov r17, r19
577
- ; CHECK-NEXT: mov r24, r22
578
- ; CHECK-NEXT: mov r25, r23
579
- ; CHECK-NEXT: rcall __extendhfsf2
580
- ; CHECK-NEXT: andi r16, 0
581
- ; CHECK-NEXT: andi r17, 128
526
+ ; CHECK-NEXT: andi r22, 0
527
+ ; CHECK-NEXT: andi r23, 128
582
528
; CHECK-NEXT: andi r25, 127
583
- ; CHECK-NEXT: or r24, r16
584
- ; CHECK-NEXT: or r25, r17
585
- ; CHECK-NEXT: rcall __truncsfhf2
586
- ; CHECK-NEXT: mov r22, r24
587
- ; CHECK-NEXT: mov r23, r25
588
- ; CHECK-NEXT: pop r17
589
- ; CHECK-NEXT: pop r16
529
+ ; CHECK-NEXT: or r24, r22
530
+ ; CHECK-NEXT: or r25, r23
590
531
; CHECK-NEXT: ret
591
532
%a = call half @llvm.copysign.f16 (half %x , half %y )
592
533
ret half %a
0 commit comments