77define void @store (half %x , ptr %p ) nounwind {
88; CHECK-LABEL: store:
99; 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
1414; CHECK-NEXT: ret
1515 store half %x , ptr %p
1616 ret void
@@ -21,8 +21,8 @@ define half @return(ptr %p) nounwind {
2121; CHECK: ; %bb.0:
2222; CHECK-NEXT: mov r30, r24
2323; 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
2626; CHECK-NEXT: ret
2727 %r = load half , ptr %p
2828 ret half %r
@@ -79,8 +79,6 @@ define dso_local void @stored(ptr nocapture %a, double %b) local_unnamed_addr no
7979; CHECK-NEXT: mov r24, r30
8080; CHECK-NEXT: mov r25, r31
8181; CHECK-NEXT: rcall __truncdfhf2
82- ; CHECK-NEXT: rcall __extendhfsf2
83- ; CHECK-NEXT: rcall __truncsfhf2
8482; CHECK-NEXT: mov r30, r16
8583; CHECK-NEXT: mov r31, r17
8684; CHECK-NEXT: std Z+1, r25
@@ -108,8 +106,6 @@ define dso_local void @storef(ptr nocapture %a, float %b) local_unnamed_addr nou
108106; CHECK-NEXT: mov r24, r18
109107; CHECK-NEXT: mov r25, r19
110108; CHECK-NEXT: rcall __truncsfhf2
111- ; CHECK-NEXT: rcall __extendhfsf2
112- ; CHECK-NEXT: rcall __truncsfhf2
113109; CHECK-NEXT: mov r30, r16
114110; CHECK-NEXT: mov r31, r17
115111; CHECK-NEXT: std Z+1, r25
@@ -126,22 +122,14 @@ entry:
126122define void @test_load_store (ptr %in , ptr %out ) nounwind {
127123; CHECK-LABEL: test_load_store:
128124; 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
133125; CHECK-NEXT: mov r30, r24
134126; CHECK-NEXT: mov r31, r25
135127; CHECK-NEXT: ld r24, Z
136128; 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
141131; CHECK-NEXT: std Z+1, r25
142132; CHECK-NEXT: st Z, r24
143- ; CHECK-NEXT: pop r17
144- ; CHECK-NEXT: pop r16
145133; CHECK-NEXT: ret
146134 %val = load half , ptr %in
147135 store half %val , ptr %out
@@ -177,8 +165,6 @@ define void @test_bitcast_to_half(ptr %addr, i16 %in) nounwind {
177165define half @from_bits (i16 %x ) nounwind {
178166; CHECK-LABEL: from_bits:
179167; CHECK: ; %bb.0:
180- ; CHECK-NEXT: mov r22, r24
181- ; CHECK-NEXT: mov r23, r25
182168; CHECK-NEXT: ret
183169 %res = bitcast i16 %x to half
184170 ret half %res
@@ -187,8 +173,6 @@ define half @from_bits(i16 %x) nounwind {
187173define i16 @to_bits (half %x ) nounwind {
188174; CHECK-LABEL: to_bits:
189175; CHECK: ; %bb.0:
190- ; CHECK-NEXT: mov r24, r22
191- ; CHECK-NEXT: mov r25, r23
192176; CHECK-NEXT: ret
193177 %res = bitcast half %x to i16
194178 ret i16 %res
@@ -231,8 +215,6 @@ define void @test_trunc32(float %in, ptr %addr) nounwind {
231215; CHECK-NEXT: mov r16, r20
232216; CHECK-NEXT: mov r17, r21
233217; CHECK-NEXT: rcall __truncsfhf2
234- ; CHECK-NEXT: rcall __extendhfsf2
235- ; CHECK-NEXT: rcall __truncsfhf2
236218; CHECK-NEXT: mov r30, r16
237219; CHECK-NEXT: mov r31, r17
238220; CHECK-NEXT: std Z+1, r25
@@ -249,8 +231,6 @@ define void @test_trunc64(double %in, ptr %addr) nounwind {
249231; CHECK-LABEL: test_trunc64:
250232; CHECK: ; %bb.0:
251233; CHECK-NEXT: rcall __truncdfhf2
252- ; CHECK-NEXT: rcall __extendhfsf2
253- ; CHECK-NEXT: rcall __truncsfhf2
254234; CHECK-NEXT: mov r30, r16
255235; CHECK-NEXT: mov r31, r17
256236; CHECK-NEXT: std Z+1, r25
@@ -281,8 +261,6 @@ define void @test_sitofp_i64(i64 %a, ptr %p) nounwind {
281261; CHECK: ; %bb.0:
282262; CHECK-NEXT: rcall __floatdisf
283263; CHECK-NEXT: rcall __truncsfhf2
284- ; CHECK-NEXT: rcall __extendhfsf2
285- ; CHECK-NEXT: rcall __truncsfhf2
286264; CHECK-NEXT: mov r30, r16
287265; CHECK-NEXT: mov r31, r17
288266; CHECK-NEXT: std Z+1, r25
@@ -313,8 +291,6 @@ define void @test_uitofp_i64(i64 %a, ptr %p) nounwind {
313291; CHECK: ; %bb.0:
314292; CHECK-NEXT: rcall __floatundisf
315293; CHECK-NEXT: rcall __truncsfhf2
316- ; CHECK-NEXT: rcall __extendhfsf2
317- ; CHECK-NEXT: rcall __truncsfhf2
318294; CHECK-NEXT: mov r30, r16
319295; CHECK-NEXT: mov r31, r17
320296; CHECK-NEXT: std Z+1, r25
@@ -393,8 +369,6 @@ define void @test_trunc32_vec2(<2 x float> %a, ptr %p) nounwind {
393369; CHECK-NEXT: mov r12, r18
394370; CHECK-NEXT: mov r13, r19
395371; CHECK-NEXT: rcall __truncsfhf2
396- ; CHECK-NEXT: rcall __extendhfsf2
397- ; CHECK-NEXT: rcall __truncsfhf2
398372; CHECK-NEXT: mov r30, r16
399373; CHECK-NEXT: mov r31, r17
400374; CHECK-NEXT: std Z+3, r25
@@ -404,8 +378,6 @@ define void @test_trunc32_vec2(<2 x float> %a, ptr %p) nounwind {
404378; CHECK-NEXT: mov r24, r14
405379; CHECK-NEXT: mov r25, r15
406380; CHECK-NEXT: rcall __truncsfhf2
407- ; CHECK-NEXT: rcall __extendhfsf2
408- ; CHECK-NEXT: rcall __truncsfhf2
409381; CHECK-NEXT: mov r30, r16
410382; CHECK-NEXT: mov r31, r17
411383; CHECK-NEXT: std Z+1, r25
@@ -424,8 +396,6 @@ define void @test_trunc64_vec1(<1 x double> %a, ptr %p) nounwind {
424396; CHECK-LABEL: test_trunc64_vec1:
425397; CHECK: ; %bb.0:
426398; CHECK-NEXT: rcall __truncdfhf2
427- ; CHECK-NEXT: rcall __extendhfsf2
428- ; CHECK-NEXT: rcall __truncsfhf2
429399; CHECK-NEXT: mov r30, r16
430400; CHECK-NEXT: mov r31, r17
431401; CHECK-NEXT: std Z+1, r25
@@ -439,51 +409,47 @@ define void @test_trunc64_vec1(<1 x double> %a, ptr %p) nounwind {
439409define float @test_sitofp_fadd_i32 (i32 %a , ptr %b ) nounwind {
440410; CHECK-LABEL: test_sitofp_fadd_i32:
441411; CHECK: ; %bb.0:
442- ; CHECK-NEXT: push r10
443- ; CHECK-NEXT: push r11
444412; CHECK-NEXT: push r12
445413; CHECK-NEXT: push r13
446414; CHECK-NEXT: push r14
447415; CHECK-NEXT: push r15
448416; CHECK-NEXT: push r16
449417; 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
456426; CHECK-NEXT: ld r24, Z
457427; CHECK-NEXT: ldd r25, Z+1
458428; 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
469435; CHECK-NEXT: rcall __extendhfsf2
470436; CHECK-NEXT: mov r18, r22
471437; CHECK-NEXT: mov r19, r23
472438; CHECK-NEXT: mov r20, r24
473439; 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
478444; CHECK-NEXT: rcall __addsf3
445+ ; CHECK-NEXT: rcall __truncsfhf2
446+ ; CHECK-NEXT: rcall __extendhfsf2
479447; CHECK-NEXT: pop r17
480448; CHECK-NEXT: pop r16
481449; CHECK-NEXT: pop r15
482450; CHECK-NEXT: pop r14
483451; CHECK-NEXT: pop r13
484452; CHECK-NEXT: pop r12
485- ; CHECK-NEXT: pop r11
486- ; CHECK-NEXT: pop r10
487453; CHECK-NEXT: ret
488454 %tmp0 = load half , ptr %b
489455 %tmp1 = sitofp i32 %a to half
@@ -495,22 +461,20 @@ define float @test_sitofp_fadd_i32(i32 %a, ptr %b) nounwind {
495461define half @chained_fp_ops (half %x ) {
496462; CHECK-LABEL: chained_fp_ops:
497463; CHECK: ; %bb.0: ; %start
498- ; CHECK-NEXT: mov r24, r22
499- ; CHECK-NEXT: mov r25, r23
500464; CHECK-NEXT: rcall __extendhfsf2
501465; CHECK-NEXT: mov r18, r22
502466; CHECK-NEXT: mov r19, r23
503467; CHECK-NEXT: mov r20, r24
504468; CHECK-NEXT: mov r21, r25
505469; CHECK-NEXT: rcall __addsf3
470+ ; CHECK-NEXT: rcall __truncsfhf2
471+ ; CHECK-NEXT: rcall __extendhfsf2
506472; CHECK-NEXT: ldi r18, 0
507473; CHECK-NEXT: ldi r19, 0
508474; CHECK-NEXT: ldi r20, 0
509475; CHECK-NEXT: ldi r21, 63
510476; CHECK-NEXT: rcall __mulsf3
511477; CHECK-NEXT: rcall __truncsfhf2
512- ; CHECK-NEXT: mov r22, r24
513- ; CHECK-NEXT: mov r23, r25
514478; CHECK-NEXT: ret
515479start:
516480 %y = fmul half %x , 0xH4000
@@ -523,8 +487,6 @@ define half @test_select_cc(half) nounwind {
523487; CHECK: ; %bb.0:
524488; CHECK-NEXT: push r16
525489; CHECK-NEXT: push r17
526- ; CHECK-NEXT: mov r24, r22
527- ; CHECK-NEXT: mov r25, r23
528490; CHECK-NEXT: rcall __extendhfsf2
529491; CHECK-NEXT: ldi r16, 0
530492; CHECK-NEXT: ldi r17, 0
@@ -534,20 +496,13 @@ define half @test_select_cc(half) nounwind {
534496; CHECK-NEXT: mov r21, r17
535497; CHECK-NEXT: rcall __nesf2
536498; CHECK-NEXT: cpi r24, 0
537- ; CHECK-NEXT: brne .LBB25_2
499+ ; CHECK-NEXT: breq .LBB25_2
538500; CHECK-NEXT: ; %bb.1:
501+ ; CHECK-NEXT: ldi r16, 0
502+ ; CHECK-NEXT: ldi r17, 60
503+ ; CHECK-NEXT: .LBB25_2:
539504; CHECK-NEXT: mov r24, r16
540505; 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
551506; CHECK-NEXT: pop r17
552507; CHECK-NEXT: pop r16
553508; CHECK-NEXT: ret
@@ -559,9 +514,7 @@ define half @test_select_cc(half) nounwind {
559514define half @fabs (half %x ) nounwind {
560515; CHECK-LABEL: fabs:
561516; 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
565518; CHECK-NEXT: ret
566519 %a = call half @llvm.fabs.f16 (half %x )
567520 ret half %a
@@ -570,23 +523,11 @@ define half @fabs(half %x) nounwind {
570523define half @fcopysign (half %x , half %y ) nounwind {
571524; CHECK-LABEL: fcopysign:
572525; 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
582528; 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
590531; CHECK-NEXT: ret
591532 %a = call half @llvm.copysign.f16 (half %x , half %y )
592533 ret half %a
0 commit comments