@@ -544,6 +544,59 @@ define <2 x i32> @test_frexp_v2f64_v2i32_only_use_exp(<2 x double> %a) {
544
544
ret <2 x i32 > %result.1
545
545
}
546
546
547
+ define { fp128 , i32 } @test_frexp_f128_i32 (fp128 %a ) nounwind {
548
+ ; CHECK-LABEL: test_frexp_f128_i32:
549
+ ; CHECK: @ %bb.0:
550
+ ; CHECK-NEXT: push {r4, lr}
551
+ ; CHECK-NEXT: sub sp, #8
552
+ ; CHECK-NEXT: mov r12, r3
553
+ ; CHECK-NEXT: ldr r3, [sp, #16]
554
+ ; CHECK-NEXT: mov r4, r0
555
+ ; CHECK-NEXT: add r0, sp, #4
556
+ ; CHECK-NEXT: str r0, [sp]
557
+ ; CHECK-NEXT: mov r0, r1
558
+ ; CHECK-NEXT: mov r1, r2
559
+ ; CHECK-NEXT: mov r2, r12
560
+ ; CHECK-NEXT: bl frexpl
561
+ ; CHECK-NEXT: ldr.w r12, [sp, #4]
562
+ ; CHECK-NEXT: stm.w r4, {r0, r1, r2, r3, r12}
563
+ ; CHECK-NEXT: add sp, #8
564
+ ; CHECK-NEXT: pop {r4, pc}
565
+ %result = call { fp128 , i32 } @llvm.frexp.f128.i32 (fp128 %a )
566
+ ret { fp128 , i32 } %result
567
+ }
568
+
569
+ define fp128 @test_frexp_f128_i32_only_use_fract (fp128 %a ) nounwind {
570
+ ; CHECK-LABEL: test_frexp_f128_i32_only_use_fract:
571
+ ; CHECK: @ %bb.0:
572
+ ; CHECK-NEXT: push {r7, lr}
573
+ ; CHECK-NEXT: sub sp, #8
574
+ ; CHECK-NEXT: add.w r12, sp, #4
575
+ ; CHECK-NEXT: str.w r12, [sp]
576
+ ; CHECK-NEXT: bl frexpl
577
+ ; CHECK-NEXT: add sp, #8
578
+ ; CHECK-NEXT: pop {r7, pc}
579
+ %result = call { fp128 , i32 } @llvm.frexp.f128.i32 (fp128 %a )
580
+ %result.0 = extractvalue { fp128 , i32 } %result , 0
581
+ ret fp128 %result.0
582
+ }
583
+
584
+ define i32 @test_frexp_f128_i32_only_use_exp (fp128 %a ) nounwind {
585
+ ; CHECK-LABEL: test_frexp_f128_i32_only_use_exp:
586
+ ; CHECK: @ %bb.0:
587
+ ; CHECK-NEXT: push {r7, lr}
588
+ ; CHECK-NEXT: sub sp, #8
589
+ ; CHECK-NEXT: add.w r12, sp, #4
590
+ ; CHECK-NEXT: str.w r12, [sp]
591
+ ; CHECK-NEXT: bl frexpl
592
+ ; CHECK-NEXT: ldr r0, [sp, #4]
593
+ ; CHECK-NEXT: add sp, #8
594
+ ; CHECK-NEXT: pop {r7, pc}
595
+ %result = call { fp128 , i32 } @llvm.frexp.f128.i32 (fp128 %a )
596
+ %result.0 = extractvalue { fp128 , i32 } %result , 1
597
+ ret i32 %result.0
598
+ }
599
+
547
600
declare { float , i32 } @llvm.frexp.f32.i32 (float ) #0
548
601
declare { <2 x float >, <2 x i32 > } @llvm.frexp.v2f32.v2i32 (<2 x float >) #0
549
602
declare { <4 x float >, <4 x i32 > } @llvm.frexp.v4f32.v4i32 (<4 x float >) #0
0 commit comments