@@ -543,42 +543,50 @@ define i32 @test_frexp_f32_i32_only_use_exp(float %a) nounwind {
543
543
define { <4 x float >, <4 x i32 > } @test_frexp_v4f32_v4i32 (<4 x float > %a ) nounwind {
544
544
; RV32IFD-LABEL: test_frexp_v4f32_v4i32:
545
545
; 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
553
553
; RV32IFD-NEXT: fmv.s fs0, fa3
554
554
; RV32IFD-NEXT: fmv.s fs1, fa2
555
555
; RV32IFD-NEXT: fmv.s fs2, fa1
556
556
; RV32IFD-NEXT: mv s0, a0
557
- ; RV32IFD-NEXT: addi a0, a0, 16
557
+ ; RV32IFD-NEXT: addi a0, sp, 8
558
558
; RV32IFD-NEXT: call frexpf
559
559
; RV32IFD-NEXT: fmv.s fs3, fa0
560
- ; RV32IFD-NEXT: addi a0, s0, 20
560
+ ; RV32IFD-NEXT: addi a0, sp, 12
561
561
; RV32IFD-NEXT: fmv.s fa0, fs2
562
562
; RV32IFD-NEXT: call frexpf
563
563
; RV32IFD-NEXT: fmv.s fs2, fa0
564
- ; RV32IFD-NEXT: addi a0, s0, 24
564
+ ; RV32IFD-NEXT: addi a0, sp, 16
565
565
; RV32IFD-NEXT: fmv.s fa0, fs1
566
566
; RV32IFD-NEXT: call frexpf
567
567
; RV32IFD-NEXT: fmv.s fs1, fa0
568
- ; RV32IFD-NEXT: addi a0, s0, 28
568
+ ; RV32IFD-NEXT: addi a0, sp, 20
569
569
; RV32IFD-NEXT: fmv.s fa0, fs0
570
570
; 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)
571
579
; RV32IFD-NEXT: fsw fs3, 0(s0)
572
580
; RV32IFD-NEXT: fsw fs2, 4(s0)
573
581
; RV32IFD-NEXT: fsw fs1, 8(s0)
574
582
; 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
582
590
; RV32IFD-NEXT: ret
583
591
;
584
592
; 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
631
639
;
632
640
; RV32IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32:
633
641
; 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
641
649
; RV32IZFINXZDINX-NEXT: mv s0, a4
642
650
; RV32IZFINXZDINX-NEXT: mv s1, a3
643
651
; RV32IZFINXZDINX-NEXT: mv s2, a2
644
652
; RV32IZFINXZDINX-NEXT: mv a2, a1
645
653
; RV32IZFINXZDINX-NEXT: mv s3, a0
646
- ; RV32IZFINXZDINX-NEXT: addi a1, a0, 16
654
+ ; RV32IZFINXZDINX-NEXT: addi a1, sp, 8
647
655
; RV32IZFINXZDINX-NEXT: mv a0, a2
648
656
; RV32IZFINXZDINX-NEXT: call frexpf
649
657
; RV32IZFINXZDINX-NEXT: mv s4, a0
650
- ; RV32IZFINXZDINX-NEXT: addi a1, s3, 20
658
+ ; RV32IZFINXZDINX-NEXT: addi a1, sp, 12
651
659
; RV32IZFINXZDINX-NEXT: mv a0, s2
652
660
; RV32IZFINXZDINX-NEXT: call frexpf
653
661
; RV32IZFINXZDINX-NEXT: mv s2, a0
654
- ; RV32IZFINXZDINX-NEXT: addi a1, s3, 24
662
+ ; RV32IZFINXZDINX-NEXT: addi a1, sp, 16
655
663
; RV32IZFINXZDINX-NEXT: mv a0, s1
656
664
; RV32IZFINXZDINX-NEXT: call frexpf
657
665
; RV32IZFINXZDINX-NEXT: mv s1, a0
658
- ; RV32IZFINXZDINX-NEXT: addi a1, s3, 28
666
+ ; RV32IZFINXZDINX-NEXT: addi a1, sp, 20
659
667
; RV32IZFINXZDINX-NEXT: mv a0, s0
660
668
; 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)
661
677
; RV32IZFINXZDINX-NEXT: sw s4, 0(s3)
662
678
; RV32IZFINXZDINX-NEXT: sw s2, 4(s3)
663
679
; RV32IZFINXZDINX-NEXT: sw s1, 8(s3)
664
680
; 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
672
688
; RV32IZFINXZDINX-NEXT: ret
673
689
;
674
690
; 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
1080
1096
define <4 x i32 > @test_frexp_v4f32_v4i32_only_use_exp (<4 x float > %a ) nounwind {
1081
1097
; RV32IFD-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
1082
1098
; 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
1092
1108
; 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
1095
1110
; 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
1098
1113
; RV32IFD-NEXT: call frexpf
1099
- ; RV32IFD-NEXT: addi a0, s0, 4
1114
+ ; RV32IFD-NEXT: addi a0, sp, 8
1100
1115
; RV32IFD-NEXT: fmv.s fa0, fs1
1101
1116
; 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
1104
1119
; 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
1111
1134
; RV32IFD-NEXT: ret
1112
1135
;
1113
1136
; 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 {
1151
1174
;
1152
1175
; RV32IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
1153
1176
; 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
1163
1187
; 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
1166
1190
; 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
1169
1193
; RV32IZFINXZDINX-NEXT: call frexpf
1170
- ; RV32IZFINXZDINX-NEXT: addi a1, s3, 4
1194
+ ; RV32IZFINXZDINX-NEXT: addi a1, sp, 20
1171
1195
; RV32IZFINXZDINX-NEXT: mv a0, s1
1172
1196
; 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
1175
1199
; 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
1182
1214
; RV32IZFINXZDINX-NEXT: ret
1183
1215
;
1184
1216
; RV64IZFINXZDINX-LABEL: test_frexp_v4f32_v4i32_only_use_exp:
0 commit comments