@@ -543,42 +543,50 @@ define i32 @test_frexp_f32_i32_only_use_exp(float %a) nounwind {
543543define { <4 x float >, <4 x i32 > } @test_frexp_v4f32_v4i32 (<4 x float > %a ) nounwind {
544544; RV32IFD-LABEL: test_frexp_v4f32_v4i32:
545545; RV32IFD: # %bb.0:
546- ; RV32IFD-NEXT: addi sp, sp, -48
547- ; RV32IFD-NEXT: sw ra, 44 (sp) # 4-byte Folded Spill
548- ; RV32IFD-NEXT: sw s0, 40 (sp) # 4-byte Folded Spill
549- ; RV32IFD-NEXT: fsd fs0, 32 (sp) # 8-byte Folded Spill
550- ; RV32IFD-NEXT: fsd fs1, 24 (sp) # 8-byte Folded Spill
551- ; RV32IFD-NEXT: fsd fs2, 16 (sp) # 8-byte Folded Spill
552- ; RV32IFD-NEXT: fsd fs3, 8 (sp) # 8-byte Folded Spill
546+ ; RV32IFD-NEXT: addi sp, sp, -64
547+ ; RV32IFD-NEXT: sw ra, 60 (sp) # 4-byte Folded Spill
548+ ; RV32IFD-NEXT: sw s0, 56 (sp) # 4-byte Folded Spill
549+ ; RV32IFD-NEXT: fsd fs0, 48 (sp) # 8-byte Folded Spill
550+ ; RV32IFD-NEXT: fsd fs1, 40 (sp) # 8-byte Folded Spill
551+ ; RV32IFD-NEXT: fsd fs2, 32 (sp) # 8-byte Folded Spill
552+ ; RV32IFD-NEXT: fsd fs3, 24 (sp) # 8-byte Folded Spill
553553; RV32IFD-NEXT: fmv.s fs0, fa3
554554; RV32IFD-NEXT: fmv.s fs1, fa2
555555; RV32IFD-NEXT: fmv.s fs2, fa1
556556; RV32IFD-NEXT: mv s0, a0
557- ; RV32IFD-NEXT: addi a0, a0, 16
557+ ; RV32IFD-NEXT: addi a0, sp, 8
558558; RV32IFD-NEXT: call frexpf
559559; RV32IFD-NEXT: fmv.s fs3, fa0
560- ; RV32IFD-NEXT: addi a0, s0, 20
560+ ; RV32IFD-NEXT: addi a0, sp, 12
561561; RV32IFD-NEXT: fmv.s fa0, fs2
562562; RV32IFD-NEXT: call frexpf
563563; RV32IFD-NEXT: fmv.s fs2, fa0
564- ; RV32IFD-NEXT: addi a0, s0, 24
564+ ; RV32IFD-NEXT: addi a0, sp, 16
565565; RV32IFD-NEXT: fmv.s fa0, fs1
566566; RV32IFD-NEXT: call frexpf
567567; RV32IFD-NEXT: fmv.s fs1, fa0
568- ; RV32IFD-NEXT: addi a0, s0, 28
568+ ; RV32IFD-NEXT: addi a0, sp, 20
569569; RV32IFD-NEXT: fmv.s fa0, fs0
570570; RV32IFD-NEXT: call frexpf
571+ ; RV32IFD-NEXT: lw a0, 8(sp)
572+ ; RV32IFD-NEXT: lw a1, 12(sp)
573+ ; RV32IFD-NEXT: lw a2, 16(sp)
574+ ; RV32IFD-NEXT: lw a3, 20(sp)
575+ ; RV32IFD-NEXT: sw a0, 16(s0)
576+ ; RV32IFD-NEXT: sw a1, 20(s0)
577+ ; RV32IFD-NEXT: sw a2, 24(s0)
578+ ; RV32IFD-NEXT: sw a3, 28(s0)
571579; RV32IFD-NEXT: fsw fs3, 0(s0)
572580; RV32IFD-NEXT: fsw fs2, 4(s0)
573581; RV32IFD-NEXT: fsw fs1, 8(s0)
574582; RV32IFD-NEXT: fsw fa0, 12(s0)
575- ; RV32IFD-NEXT: lw ra, 44 (sp) # 4-byte Folded Reload
576- ; RV32IFD-NEXT: lw s0, 40 (sp) # 4-byte Folded Reload
577- ; RV32IFD-NEXT: fld fs0, 32 (sp) # 8-byte Folded Reload
578- ; RV32IFD-NEXT: fld fs1, 24 (sp) # 8-byte Folded Reload
579- ; RV32IFD-NEXT: fld fs2, 16 (sp) # 8-byte Folded Reload
580- ; RV32IFD-NEXT: fld fs3, 8 (sp) # 8-byte Folded Reload
581- ; RV32IFD-NEXT: addi sp, sp, 48
583+ ; RV32IFD-NEXT: lw ra, 60 (sp) # 4-byte Folded Reload
584+ ; RV32IFD-NEXT: lw s0, 56 (sp) # 4-byte Folded Reload
585+ ; RV32IFD-NEXT: fld fs0, 48 (sp) # 8-byte Folded Reload
586+ ; RV32IFD-NEXT: fld fs1, 40 (sp) # 8-byte Folded Reload
587+ ; RV32IFD-NEXT: fld fs2, 32 (sp) # 8-byte Folded Reload
588+ ; RV32IFD-NEXT: fld fs3, 24 (sp) # 8-byte Folded Reload
589+ ; RV32IFD-NEXT: addi sp, sp, 64
582590; RV32IFD-NEXT: ret
583591;
584592; RV64IFD-LABEL: test_frexp_v4f32_v4i32:
@@ -631,44 +639,52 @@ define { <4 x float>, <4 x i32> } @test_frexp_v4f32_v4i32(<4 x float> %a) nounwi
631639;
632640; RV32IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32:
633641; RV32IZFINXZDINX: # %bb.0:
634- ; RV32IZFINXZDINX-NEXT: addi sp, sp, -32
635- ; RV32IZFINXZDINX-NEXT: sw ra, 28 (sp) # 4-byte Folded Spill
636- ; RV32IZFINXZDINX-NEXT: sw s0, 24 (sp) # 4-byte Folded Spill
637- ; RV32IZFINXZDINX-NEXT: sw s1, 20 (sp) # 4-byte Folded Spill
638- ; RV32IZFINXZDINX-NEXT: sw s2, 16 (sp) # 4-byte Folded Spill
639- ; RV32IZFINXZDINX-NEXT: sw s3, 12 (sp) # 4-byte Folded Spill
640- ; RV32IZFINXZDINX-NEXT: sw s4, 8 (sp) # 4-byte Folded Spill
642+ ; RV32IZFINXZDINX-NEXT: addi sp, sp, -48
643+ ; RV32IZFINXZDINX-NEXT: sw ra, 44 (sp) # 4-byte Folded Spill
644+ ; RV32IZFINXZDINX-NEXT: sw s0, 40 (sp) # 4-byte Folded Spill
645+ ; RV32IZFINXZDINX-NEXT: sw s1, 36 (sp) # 4-byte Folded Spill
646+ ; RV32IZFINXZDINX-NEXT: sw s2, 32 (sp) # 4-byte Folded Spill
647+ ; RV32IZFINXZDINX-NEXT: sw s3, 28 (sp) # 4-byte Folded Spill
648+ ; RV32IZFINXZDINX-NEXT: sw s4, 24 (sp) # 4-byte Folded Spill
641649; RV32IZFINXZDINX-NEXT: mv s0, a4
642650; RV32IZFINXZDINX-NEXT: mv s1, a3
643651; RV32IZFINXZDINX-NEXT: mv s2, a2
644652; RV32IZFINXZDINX-NEXT: mv a2, a1
645653; RV32IZFINXZDINX-NEXT: mv s3, a0
646- ; RV32IZFINXZDINX-NEXT: addi a1, a0, 16
654+ ; RV32IZFINXZDINX-NEXT: addi a1, sp, 8
647655; RV32IZFINXZDINX-NEXT: mv a0, a2
648656; RV32IZFINXZDINX-NEXT: call frexpf
649657; RV32IZFINXZDINX-NEXT: mv s4, a0
650- ; RV32IZFINXZDINX-NEXT: addi a1, s3, 20
658+ ; RV32IZFINXZDINX-NEXT: addi a1, sp, 12
651659; RV32IZFINXZDINX-NEXT: mv a0, s2
652660; RV32IZFINXZDINX-NEXT: call frexpf
653661; RV32IZFINXZDINX-NEXT: mv s2, a0
654- ; RV32IZFINXZDINX-NEXT: addi a1, s3, 24
662+ ; RV32IZFINXZDINX-NEXT: addi a1, sp, 16
655663; RV32IZFINXZDINX-NEXT: mv a0, s1
656664; RV32IZFINXZDINX-NEXT: call frexpf
657665; RV32IZFINXZDINX-NEXT: mv s1, a0
658- ; RV32IZFINXZDINX-NEXT: addi a1, s3, 28
666+ ; RV32IZFINXZDINX-NEXT: addi a1, sp, 20
659667; RV32IZFINXZDINX-NEXT: mv a0, s0
660668; RV32IZFINXZDINX-NEXT: call frexpf
669+ ; RV32IZFINXZDINX-NEXT: lw a1, 8(sp)
670+ ; RV32IZFINXZDINX-NEXT: lw a2, 12(sp)
671+ ; RV32IZFINXZDINX-NEXT: lw a3, 16(sp)
672+ ; RV32IZFINXZDINX-NEXT: lw a4, 20(sp)
673+ ; RV32IZFINXZDINX-NEXT: sw a1, 16(s3)
674+ ; RV32IZFINXZDINX-NEXT: sw a2, 20(s3)
675+ ; RV32IZFINXZDINX-NEXT: sw a3, 24(s3)
676+ ; RV32IZFINXZDINX-NEXT: sw a4, 28(s3)
661677; RV32IZFINXZDINX-NEXT: sw s4, 0(s3)
662678; RV32IZFINXZDINX-NEXT: sw s2, 4(s3)
663679; RV32IZFINXZDINX-NEXT: sw s1, 8(s3)
664680; RV32IZFINXZDINX-NEXT: sw a0, 12(s3)
665- ; RV32IZFINXZDINX-NEXT: lw ra, 28 (sp) # 4-byte Folded Reload
666- ; RV32IZFINXZDINX-NEXT: lw s0, 24 (sp) # 4-byte Folded Reload
667- ; RV32IZFINXZDINX-NEXT: lw s1, 20 (sp) # 4-byte Folded Reload
668- ; RV32IZFINXZDINX-NEXT: lw s2, 16 (sp) # 4-byte Folded Reload
669- ; RV32IZFINXZDINX-NEXT: lw s3, 12 (sp) # 4-byte Folded Reload
670- ; RV32IZFINXZDINX-NEXT: lw s4, 8 (sp) # 4-byte Folded Reload
671- ; RV32IZFINXZDINX-NEXT: addi sp, sp, 32
681+ ; RV32IZFINXZDINX-NEXT: lw ra, 44 (sp) # 4-byte Folded Reload
682+ ; RV32IZFINXZDINX-NEXT: lw s0, 40 (sp) # 4-byte Folded Reload
683+ ; RV32IZFINXZDINX-NEXT: lw s1, 36 (sp) # 4-byte Folded Reload
684+ ; RV32IZFINXZDINX-NEXT: lw s2, 32 (sp) # 4-byte Folded Reload
685+ ; RV32IZFINXZDINX-NEXT: lw s3, 28 (sp) # 4-byte Folded Reload
686+ ; RV32IZFINXZDINX-NEXT: lw s4, 24 (sp) # 4-byte Folded Reload
687+ ; RV32IZFINXZDINX-NEXT: addi sp, sp, 48
672688; RV32IZFINXZDINX-NEXT: ret
673689;
674690; RV64IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32:
@@ -1080,34 +1096,41 @@ define <4 x float> @test_frexp_v4f32_v4i32_only_use_fract(<4 x float> %a) nounwi
10801096define <4 x i32 > @test_frexp_v4f32_v4i32_only_use_exp (<4 x float > %a ) nounwind {
10811097; RV32IFD-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
10821098; RV32IFD: # %bb.0:
1083- ; RV32IFD-NEXT: addi sp, sp, -32
1084- ; RV32IFD-NEXT: sw ra, 28 (sp) # 4-byte Folded Spill
1085- ; RV32IFD-NEXT: sw s0, 24 (sp) # 4-byte Folded Spill
1086- ; RV32IFD-NEXT: fsd fs0, 16 (sp) # 8-byte Folded Spill
1087- ; RV32IFD-NEXT: fsd fs1, 8 (sp) # 8-byte Folded Spill
1088- ; RV32IFD-NEXT: fsd fs2, 0 (sp) # 8-byte Folded Spill
1089- ; RV32IFD-NEXT: fmv.s fs0, fa2
1090- ; RV32IFD-NEXT: fmv.s fs1, fa1
1091- ; RV32IFD-NEXT: fmv.s fs2, fa0
1099+ ; RV32IFD-NEXT: addi sp, sp, -48
1100+ ; RV32IFD-NEXT: sw ra, 44 (sp) # 4-byte Folded Spill
1101+ ; RV32IFD-NEXT: sw s0, 40 (sp) # 4-byte Folded Spill
1102+ ; RV32IFD-NEXT: fsd fs0, 32 (sp) # 8-byte Folded Spill
1103+ ; RV32IFD-NEXT: fsd fs1, 24 (sp) # 8-byte Folded Spill
1104+ ; RV32IFD-NEXT: fsd fs2, 16 (sp) # 8-byte Folded Spill
1105+ ; RV32IFD-NEXT: fmv.s fs0, fa3
1106+ ; RV32IFD-NEXT: fmv.s fs1, fa2
1107+ ; RV32IFD-NEXT: fmv.s fs2, fa1
10921108; RV32IFD-NEXT: mv s0, a0
1093- ; RV32IFD-NEXT: addi a0, a0, 12
1094- ; RV32IFD-NEXT: fmv.s fa0, fa3
1109+ ; RV32IFD-NEXT: mv a0, sp
10951110; RV32IFD-NEXT: call frexpf
1096- ; RV32IFD-NEXT: addi a0, s0, 8
1097- ; RV32IFD-NEXT: fmv.s fa0, fs0
1111+ ; RV32IFD-NEXT: addi a0, sp, 4
1112+ ; RV32IFD-NEXT: fmv.s fa0, fs2
10981113; RV32IFD-NEXT: call frexpf
1099- ; RV32IFD-NEXT: addi a0, s0, 4
1114+ ; RV32IFD-NEXT: addi a0, sp, 8
11001115; RV32IFD-NEXT: fmv.s fa0, fs1
11011116; RV32IFD-NEXT: call frexpf
1102- ; RV32IFD-NEXT: fmv.s fa0, fs2
1103- ; RV32IFD-NEXT: mv a0, s0
1117+ ; RV32IFD-NEXT: addi a0, sp, 12
1118+ ; RV32IFD-NEXT: fmv.s fa0, fs0
11041119; RV32IFD-NEXT: call frexpf
1105- ; RV32IFD-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
1106- ; RV32IFD-NEXT: lw s0, 24(sp) # 4-byte Folded Reload
1107- ; RV32IFD-NEXT: fld fs0, 16(sp) # 8-byte Folded Reload
1108- ; RV32IFD-NEXT: fld fs1, 8(sp) # 8-byte Folded Reload
1109- ; RV32IFD-NEXT: fld fs2, 0(sp) # 8-byte Folded Reload
1110- ; RV32IFD-NEXT: addi sp, sp, 32
1120+ ; RV32IFD-NEXT: lw a0, 0(sp)
1121+ ; RV32IFD-NEXT: lw a1, 4(sp)
1122+ ; RV32IFD-NEXT: lw a2, 8(sp)
1123+ ; RV32IFD-NEXT: lw a3, 12(sp)
1124+ ; RV32IFD-NEXT: sw a0, 0(s0)
1125+ ; RV32IFD-NEXT: sw a1, 4(s0)
1126+ ; RV32IFD-NEXT: sw a2, 8(s0)
1127+ ; RV32IFD-NEXT: sw a3, 12(s0)
1128+ ; RV32IFD-NEXT: lw ra, 44(sp) # 4-byte Folded Reload
1129+ ; RV32IFD-NEXT: lw s0, 40(sp) # 4-byte Folded Reload
1130+ ; RV32IFD-NEXT: fld fs0, 32(sp) # 8-byte Folded Reload
1131+ ; RV32IFD-NEXT: fld fs1, 24(sp) # 8-byte Folded Reload
1132+ ; RV32IFD-NEXT: fld fs2, 16(sp) # 8-byte Folded Reload
1133+ ; RV32IFD-NEXT: addi sp, sp, 48
11111134; RV32IFD-NEXT: ret
11121135;
11131136; RV64IFD-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
@@ -1151,34 +1174,43 @@ define <4 x i32> @test_frexp_v4f32_v4i32_only_use_exp(<4 x float> %a) nounwind {
11511174;
11521175; RV32IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
11531176; RV32IZFINXZDINX: # %bb.0:
1154- ; RV32IZFINXZDINX-NEXT: addi sp, sp, -32
1155- ; RV32IZFINXZDINX-NEXT: sw ra, 28(sp) # 4-byte Folded Spill
1156- ; RV32IZFINXZDINX-NEXT: sw s0, 24(sp) # 4-byte Folded Spill
1157- ; RV32IZFINXZDINX-NEXT: sw s1, 20(sp) # 4-byte Folded Spill
1158- ; RV32IZFINXZDINX-NEXT: sw s2, 16(sp) # 4-byte Folded Spill
1159- ; RV32IZFINXZDINX-NEXT: sw s3, 12(sp) # 4-byte Folded Spill
1160- ; RV32IZFINXZDINX-NEXT: mv s0, a3
1161- ; RV32IZFINXZDINX-NEXT: mv s1, a2
1162- ; RV32IZFINXZDINX-NEXT: mv s2, a1
1177+ ; RV32IZFINXZDINX-NEXT: addi sp, sp, -48
1178+ ; RV32IZFINXZDINX-NEXT: sw ra, 44(sp) # 4-byte Folded Spill
1179+ ; RV32IZFINXZDINX-NEXT: sw s0, 40(sp) # 4-byte Folded Spill
1180+ ; RV32IZFINXZDINX-NEXT: sw s1, 36(sp) # 4-byte Folded Spill
1181+ ; RV32IZFINXZDINX-NEXT: sw s2, 32(sp) # 4-byte Folded Spill
1182+ ; RV32IZFINXZDINX-NEXT: sw s3, 28(sp) # 4-byte Folded Spill
1183+ ; RV32IZFINXZDINX-NEXT: mv s0, a4
1184+ ; RV32IZFINXZDINX-NEXT: mv s1, a3
1185+ ; RV32IZFINXZDINX-NEXT: mv s2, a2
1186+ ; RV32IZFINXZDINX-NEXT: mv a2, a1
11631187; RV32IZFINXZDINX-NEXT: mv s3, a0
1164- ; RV32IZFINXZDINX-NEXT: addi a1, a0 , 12
1165- ; RV32IZFINXZDINX-NEXT: mv a0, a4
1188+ ; RV32IZFINXZDINX-NEXT: addi a1, sp , 12
1189+ ; RV32IZFINXZDINX-NEXT: mv a0, a2
11661190; RV32IZFINXZDINX-NEXT: call frexpf
1167- ; RV32IZFINXZDINX-NEXT: addi a1, s3, 8
1168- ; RV32IZFINXZDINX-NEXT: mv a0, s0
1191+ ; RV32IZFINXZDINX-NEXT: addi a1, sp, 16
1192+ ; RV32IZFINXZDINX-NEXT: mv a0, s2
11691193; RV32IZFINXZDINX-NEXT: call frexpf
1170- ; RV32IZFINXZDINX-NEXT: addi a1, s3, 4
1194+ ; RV32IZFINXZDINX-NEXT: addi a1, sp, 20
11711195; RV32IZFINXZDINX-NEXT: mv a0, s1
11721196; RV32IZFINXZDINX-NEXT: call frexpf
1173- ; RV32IZFINXZDINX-NEXT: mv a0, s2
1174- ; RV32IZFINXZDINX-NEXT: mv a1, s3
1197+ ; RV32IZFINXZDINX-NEXT: addi a1, sp, 24
1198+ ; RV32IZFINXZDINX-NEXT: mv a0, s0
11751199; RV32IZFINXZDINX-NEXT: call frexpf
1176- ; RV32IZFINXZDINX-NEXT: lw ra, 28(sp) # 4-byte Folded Reload
1177- ; RV32IZFINXZDINX-NEXT: lw s0, 24(sp) # 4-byte Folded Reload
1178- ; RV32IZFINXZDINX-NEXT: lw s1, 20(sp) # 4-byte Folded Reload
1179- ; RV32IZFINXZDINX-NEXT: lw s2, 16(sp) # 4-byte Folded Reload
1180- ; RV32IZFINXZDINX-NEXT: lw s3, 12(sp) # 4-byte Folded Reload
1181- ; RV32IZFINXZDINX-NEXT: addi sp, sp, 32
1200+ ; RV32IZFINXZDINX-NEXT: lw a0, 12(sp)
1201+ ; RV32IZFINXZDINX-NEXT: lw a1, 16(sp)
1202+ ; RV32IZFINXZDINX-NEXT: lw a2, 20(sp)
1203+ ; RV32IZFINXZDINX-NEXT: lw a3, 24(sp)
1204+ ; RV32IZFINXZDINX-NEXT: sw a0, 0(s3)
1205+ ; RV32IZFINXZDINX-NEXT: sw a1, 4(s3)
1206+ ; RV32IZFINXZDINX-NEXT: sw a2, 8(s3)
1207+ ; RV32IZFINXZDINX-NEXT: sw a3, 12(s3)
1208+ ; RV32IZFINXZDINX-NEXT: lw ra, 44(sp) # 4-byte Folded Reload
1209+ ; RV32IZFINXZDINX-NEXT: lw s0, 40(sp) # 4-byte Folded Reload
1210+ ; RV32IZFINXZDINX-NEXT: lw s1, 36(sp) # 4-byte Folded Reload
1211+ ; RV32IZFINXZDINX-NEXT: lw s2, 32(sp) # 4-byte Folded Reload
1212+ ; RV32IZFINXZDINX-NEXT: lw s3, 28(sp) # 4-byte Folded Reload
1213+ ; RV32IZFINXZDINX-NEXT: addi sp, sp, 48
11821214; RV32IZFINXZDINX-NEXT: ret
11831215;
11841216; RV64IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
0 commit comments