@@ -51,13 +51,14 @@ define i16 @fcvt_si_bf16_sat(bfloat %a) nounwind {
5151; CHECK32ZFBFMIN-LABEL: fcvt_si_bf16_sat:
5252; CHECK32ZFBFMIN: # %bb.0: # %start
5353; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0
54- ; CHECK32ZFBFMIN-NEXT: lui a0, %hi(.LCPI1_0)
55- ; CHECK32ZFBFMIN-NEXT: feq.s a1, fa5, fa5
56- ; CHECK32ZFBFMIN-NEXT: flw fa4, %lo(.LCPI1_0)(a0)
5754; CHECK32ZFBFMIN-NEXT: lui a0, 815104
58- ; CHECK32ZFBFMIN-NEXT: fmv.w.x fa3, a0
59- ; CHECK32ZFBFMIN-NEXT: fmax.s fa5, fa5, fa3
60- ; CHECK32ZFBFMIN-NEXT: neg a0, a1
55+ ; CHECK32ZFBFMIN-NEXT: lui a1, 290816
56+ ; CHECK32ZFBFMIN-NEXT: fmv.w.x fa4, a0
57+ ; CHECK32ZFBFMIN-NEXT: feq.s a0, fa5, fa5
58+ ; CHECK32ZFBFMIN-NEXT: addi a1, a1, -512
59+ ; CHECK32ZFBFMIN-NEXT: neg a0, a0
60+ ; CHECK32ZFBFMIN-NEXT: fmax.s fa5, fa5, fa4
61+ ; CHECK32ZFBFMIN-NEXT: fmv.w.x fa4, a1
6162; CHECK32ZFBFMIN-NEXT: fmin.s fa5, fa5, fa4
6263; CHECK32ZFBFMIN-NEXT: fcvt.w.s a1, fa5, rtz
6364; CHECK32ZFBFMIN-NEXT: and a0, a0, a1
@@ -68,12 +69,13 @@ define i16 @fcvt_si_bf16_sat(bfloat %a) nounwind {
6869; RV32ID-NEXT: fmv.x.w a0, fa0
6970; RV32ID-NEXT: lui a1, 815104
7071; RV32ID-NEXT: fmv.w.x fa5, a1
71- ; RV32ID-NEXT: lui a1, %hi(.LCPI1_0)
72+ ; RV32ID-NEXT: lui a1, 290816
7273; RV32ID-NEXT: slli a0, a0, 16
73- ; RV32ID-NEXT: flw fa4, %lo(.LCPI1_0)(a1)
74- ; RV32ID-NEXT: fmv.w.x fa3, a0
75- ; RV32ID-NEXT: feq.s a0, fa3, fa3
76- ; RV32ID-NEXT: fmax.s fa5, fa3, fa5
74+ ; RV32ID-NEXT: addi a1, a1, -512
75+ ; RV32ID-NEXT: fmv.w.x fa4, a0
76+ ; RV32ID-NEXT: feq.s a0, fa4, fa4
77+ ; RV32ID-NEXT: fmax.s fa5, fa4, fa5
78+ ; RV32ID-NEXT: fmv.w.x fa4, a1
7779; RV32ID-NEXT: neg a0, a0
7880; RV32ID-NEXT: fmin.s fa5, fa5, fa4
7981; RV32ID-NEXT: fcvt.w.s a1, fa5, rtz
@@ -83,13 +85,14 @@ define i16 @fcvt_si_bf16_sat(bfloat %a) nounwind {
8385; CHECK64ZFBFMIN-LABEL: fcvt_si_bf16_sat:
8486; CHECK64ZFBFMIN: # %bb.0: # %start
8587; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0
86- ; CHECK64ZFBFMIN-NEXT: lui a0, %hi(.LCPI1_0)
87- ; CHECK64ZFBFMIN-NEXT: feq.s a1, fa5, fa5
88- ; CHECK64ZFBFMIN-NEXT: flw fa4, %lo(.LCPI1_0)(a0)
8988; CHECK64ZFBFMIN-NEXT: lui a0, 815104
90- ; CHECK64ZFBFMIN-NEXT: fmv.w.x fa3, a0
91- ; CHECK64ZFBFMIN-NEXT: fmax.s fa5, fa5, fa3
92- ; CHECK64ZFBFMIN-NEXT: neg a0, a1
89+ ; CHECK64ZFBFMIN-NEXT: lui a1, 290816
90+ ; CHECK64ZFBFMIN-NEXT: fmv.w.x fa4, a0
91+ ; CHECK64ZFBFMIN-NEXT: feq.s a0, fa5, fa5
92+ ; CHECK64ZFBFMIN-NEXT: addi a1, a1, -512
93+ ; CHECK64ZFBFMIN-NEXT: neg a0, a0
94+ ; CHECK64ZFBFMIN-NEXT: fmax.s fa5, fa5, fa4
95+ ; CHECK64ZFBFMIN-NEXT: fmv.w.x fa4, a1
9396; CHECK64ZFBFMIN-NEXT: fmin.s fa5, fa5, fa4
9497; CHECK64ZFBFMIN-NEXT: fcvt.l.s a1, fa5, rtz
9598; CHECK64ZFBFMIN-NEXT: and a0, a0, a1
@@ -100,12 +103,13 @@ define i16 @fcvt_si_bf16_sat(bfloat %a) nounwind {
100103; RV64ID-NEXT: fmv.x.w a0, fa0
101104; RV64ID-NEXT: lui a1, 815104
102105; RV64ID-NEXT: fmv.w.x fa5, a1
103- ; RV64ID-NEXT: lui a1, %hi(.LCPI1_0)
106+ ; RV64ID-NEXT: lui a1, 290816
104107; RV64ID-NEXT: slli a0, a0, 16
105- ; RV64ID-NEXT: flw fa4, %lo(.LCPI1_0)(a1)
106- ; RV64ID-NEXT: fmv.w.x fa3, a0
107- ; RV64ID-NEXT: feq.s a0, fa3, fa3
108- ; RV64ID-NEXT: fmax.s fa5, fa3, fa5
108+ ; RV64ID-NEXT: addi a1, a1, -512
109+ ; RV64ID-NEXT: fmv.w.x fa4, a0
110+ ; RV64ID-NEXT: feq.s a0, fa4, fa4
111+ ; RV64ID-NEXT: fmax.s fa5, fa4, fa5
112+ ; RV64ID-NEXT: fmv.w.x fa4, a1
109113; RV64ID-NEXT: neg a0, a0
110114; RV64ID-NEXT: fmin.s fa5, fa5, fa4
111115; RV64ID-NEXT: fcvt.l.s a1, fa5, rtz
@@ -152,49 +156,53 @@ define i16 @fcvt_ui_bf16(bfloat %a) nounwind {
152156define i16 @fcvt_ui_bf16_sat (bfloat %a ) nounwind {
153157; CHECK32ZFBFMIN-LABEL: fcvt_ui_bf16_sat:
154158; CHECK32ZFBFMIN: # %bb.0: # %start
155- ; CHECK32ZFBFMIN-NEXT: lui a0, %hi(.LCPI3_0)
156- ; CHECK32ZFBFMIN-NEXT: flw fa5, %lo(.LCPI3_0)(a0)
157- ; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa4, fa0
158- ; CHECK32ZFBFMIN-NEXT: fmv.w.x fa3, zero
159- ; CHECK32ZFBFMIN-NEXT: fmax.s fa4, fa4, fa3
160- ; CHECK32ZFBFMIN-NEXT: fmin.s fa5, fa4, fa5
159+ ; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0
160+ ; CHECK32ZFBFMIN-NEXT: fmv.w.x fa4, zero
161+ ; CHECK32ZFBFMIN-NEXT: lui a0, 292864
162+ ; CHECK32ZFBFMIN-NEXT: fmax.s fa5, fa5, fa4
163+ ; CHECK32ZFBFMIN-NEXT: addi a0, a0, -256
164+ ; CHECK32ZFBFMIN-NEXT: fmv.w.x fa4, a0
165+ ; CHECK32ZFBFMIN-NEXT: fmin.s fa5, fa5, fa4
161166; CHECK32ZFBFMIN-NEXT: fcvt.wu.s a0, fa5, rtz
162167; CHECK32ZFBFMIN-NEXT: ret
163168;
164169; RV32ID-LABEL: fcvt_ui_bf16_sat:
165170; RV32ID: # %bb.0: # %start
166- ; RV32ID-NEXT: lui a0, %hi(.LCPI3_0)
167- ; RV32ID-NEXT: flw fa5, %lo(.LCPI3_0)(a0)
168171; RV32ID-NEXT: fmv.x.w a0, fa0
172+ ; RV32ID-NEXT: fmv.w.x fa5, zero
169173; RV32ID-NEXT: slli a0, a0, 16
170174; RV32ID-NEXT: fmv.w.x fa4, a0
171- ; RV32ID-NEXT: fmv.w.x fa3, zero
172- ; RV32ID-NEXT: fmax.s fa4, fa4, fa3
173- ; RV32ID-NEXT: fmin.s fa5, fa4, fa5
175+ ; RV32ID-NEXT: lui a0, 292864
176+ ; RV32ID-NEXT: addi a0, a0, -256
177+ ; RV32ID-NEXT: fmax.s fa5, fa4, fa5
178+ ; RV32ID-NEXT: fmv.w.x fa4, a0
179+ ; RV32ID-NEXT: fmin.s fa5, fa5, fa4
174180; RV32ID-NEXT: fcvt.wu.s a0, fa5, rtz
175181; RV32ID-NEXT: ret
176182;
177183; CHECK64ZFBFMIN-LABEL: fcvt_ui_bf16_sat:
178184; CHECK64ZFBFMIN: # %bb.0: # %start
179- ; CHECK64ZFBFMIN-NEXT: lui a0, %hi(.LCPI3_0)
180- ; CHECK64ZFBFMIN-NEXT: flw fa5, %lo(.LCPI3_0)(a0)
181- ; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa4, fa0
182- ; CHECK64ZFBFMIN-NEXT: fmv.w.x fa3, zero
183- ; CHECK64ZFBFMIN-NEXT: fmax.s fa4, fa4, fa3
184- ; CHECK64ZFBFMIN-NEXT: fmin.s fa5, fa4, fa5
185+ ; CHECK64ZFBFMIN-NEXT: fcvt.s.bf16 fa5, fa0
186+ ; CHECK64ZFBFMIN-NEXT: fmv.w.x fa4, zero
187+ ; CHECK64ZFBFMIN-NEXT: lui a0, 292864
188+ ; CHECK64ZFBFMIN-NEXT: fmax.s fa5, fa5, fa4
189+ ; CHECK64ZFBFMIN-NEXT: addi a0, a0, -256
190+ ; CHECK64ZFBFMIN-NEXT: fmv.w.x fa4, a0
191+ ; CHECK64ZFBFMIN-NEXT: fmin.s fa5, fa5, fa4
185192; CHECK64ZFBFMIN-NEXT: fcvt.lu.s a0, fa5, rtz
186193; CHECK64ZFBFMIN-NEXT: ret
187194;
188195; RV64ID-LABEL: fcvt_ui_bf16_sat:
189196; RV64ID: # %bb.0: # %start
190- ; RV64ID-NEXT: lui a0, %hi(.LCPI3_0)
191- ; RV64ID-NEXT: flw fa5, %lo(.LCPI3_0)(a0)
192197; RV64ID-NEXT: fmv.x.w a0, fa0
198+ ; RV64ID-NEXT: fmv.w.x fa5, zero
193199; RV64ID-NEXT: slli a0, a0, 16
194200; RV64ID-NEXT: fmv.w.x fa4, a0
195- ; RV64ID-NEXT: fmv.w.x fa3, zero
196- ; RV64ID-NEXT: fmax.s fa4, fa4, fa3
197- ; RV64ID-NEXT: fmin.s fa5, fa4, fa5
201+ ; RV64ID-NEXT: lui a0, 292864
202+ ; RV64ID-NEXT: addi a0, a0, -256
203+ ; RV64ID-NEXT: fmax.s fa5, fa4, fa5
204+ ; RV64ID-NEXT: fmv.w.x fa4, a0
205+ ; RV64ID-NEXT: fmin.s fa5, fa5, fa4
198206; RV64ID-NEXT: fcvt.lu.s a0, fa5, rtz
199207; RV64ID-NEXT: ret
200208start:
@@ -472,20 +480,21 @@ define i64 @fcvt_l_bf16_sat(bfloat %a) nounwind {
472480; RV32IZFBFMIN-NEXT: # %bb.1: # %start
473481; RV32IZFBFMIN-NEXT: mv a2, a1
474482; RV32IZFBFMIN-NEXT: .LBB10_2: # %start
475- ; RV32IZFBFMIN-NEXT: lui a1, %hi(.LCPI10_0)
476- ; RV32IZFBFMIN-NEXT: flw fa5, %lo(.LCPI10_0)(a1)
483+ ; RV32IZFBFMIN-NEXT: lui a1, 389120
484+ ; RV32IZFBFMIN-NEXT: addi a1, a1, -1
485+ ; RV32IZFBFMIN-NEXT: fmv.w.x fa5, a1
477486; RV32IZFBFMIN-NEXT: flt.s a1, fa5, fs0
478487; RV32IZFBFMIN-NEXT: beqz a1, .LBB10_4
479488; RV32IZFBFMIN-NEXT: # %bb.3:
480489; RV32IZFBFMIN-NEXT: addi a2, a3, -1
481490; RV32IZFBFMIN-NEXT: .LBB10_4: # %start
482491; RV32IZFBFMIN-NEXT: feq.s a3, fs0, fs0
483- ; RV32IZFBFMIN-NEXT: neg a4, a1
484- ; RV32IZFBFMIN-NEXT: neg a1, s0
492+ ; RV32IZFBFMIN-NEXT: neg a4, s0
493+ ; RV32IZFBFMIN-NEXT: neg a5, a1
485494; RV32IZFBFMIN-NEXT: neg a3, a3
486- ; RV32IZFBFMIN-NEXT: and a0, a1 , a0
495+ ; RV32IZFBFMIN-NEXT: and a0, a4 , a0
487496; RV32IZFBFMIN-NEXT: and a1, a3, a2
488- ; RV32IZFBFMIN-NEXT: or a0, a4 , a0
497+ ; RV32IZFBFMIN-NEXT: or a0, a5 , a0
489498; RV32IZFBFMIN-NEXT: and a0, a3, a0
490499; RV32IZFBFMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
491500; RV32IZFBFMIN-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
@@ -511,20 +520,21 @@ define i64 @fcvt_l_bf16_sat(bfloat %a) nounwind {
511520; R32IDZFBFMIN-NEXT: # %bb.1: # %start
512521; R32IDZFBFMIN-NEXT: mv a2, a1
513522; R32IDZFBFMIN-NEXT: .LBB10_2: # %start
514- ; R32IDZFBFMIN-NEXT: lui a1, %hi(.LCPI10_0)
515- ; R32IDZFBFMIN-NEXT: flw fa5, %lo(.LCPI10_0)(a1)
523+ ; R32IDZFBFMIN-NEXT: lui a1, 389120
524+ ; R32IDZFBFMIN-NEXT: addi a1, a1, -1
525+ ; R32IDZFBFMIN-NEXT: fmv.w.x fa5, a1
516526; R32IDZFBFMIN-NEXT: flt.s a1, fa5, fs0
517527; R32IDZFBFMIN-NEXT: beqz a1, .LBB10_4
518528; R32IDZFBFMIN-NEXT: # %bb.3:
519529; R32IDZFBFMIN-NEXT: addi a2, a3, -1
520530; R32IDZFBFMIN-NEXT: .LBB10_4: # %start
521531; R32IDZFBFMIN-NEXT: feq.s a3, fs0, fs0
522- ; R32IDZFBFMIN-NEXT: neg a4, a1
523- ; R32IDZFBFMIN-NEXT: neg a1, s0
532+ ; R32IDZFBFMIN-NEXT: neg a4, s0
533+ ; R32IDZFBFMIN-NEXT: neg a5, a1
524534; R32IDZFBFMIN-NEXT: neg a3, a3
525- ; R32IDZFBFMIN-NEXT: and a0, a1 , a0
535+ ; R32IDZFBFMIN-NEXT: and a0, a4 , a0
526536; R32IDZFBFMIN-NEXT: and a1, a3, a2
527- ; R32IDZFBFMIN-NEXT: or a0, a4 , a0
537+ ; R32IDZFBFMIN-NEXT: or a0, a5 , a0
528538; R32IDZFBFMIN-NEXT: and a0, a3, a0
529539; R32IDZFBFMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
530540; R32IDZFBFMIN-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
@@ -552,8 +562,9 @@ define i64 @fcvt_l_bf16_sat(bfloat %a) nounwind {
552562; RV32ID-NEXT: # %bb.1: # %start
553563; RV32ID-NEXT: mv a2, a1
554564; RV32ID-NEXT: .LBB10_2: # %start
555- ; RV32ID-NEXT: lui a1, %hi(.LCPI10_0)
556- ; RV32ID-NEXT: flw fa5, %lo(.LCPI10_0)(a1)
565+ ; RV32ID-NEXT: lui a1, 389120
566+ ; RV32ID-NEXT: addi a1, a1, -1
567+ ; RV32ID-NEXT: fmv.w.x fa5, a1
557568; RV32ID-NEXT: flt.s a1, fa5, fs0
558569; RV32ID-NEXT: beqz a1, .LBB10_4
559570; RV32ID-NEXT: # %bb.3:
@@ -641,30 +652,59 @@ define i64 @fcvt_lu_bf16(bfloat %a) nounwind {
641652}
642653
643654define i64 @fcvt_lu_bf16_sat (bfloat %a ) nounwind {
644- ; CHECK32ZFBFMIN-LABEL: fcvt_lu_bf16_sat:
645- ; CHECK32ZFBFMIN: # %bb.0: # %start
646- ; CHECK32ZFBFMIN-NEXT: addi sp, sp, -16
647- ; CHECK32ZFBFMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
648- ; CHECK32ZFBFMIN-NEXT: sw s0, 8(sp) # 4-byte Folded Spill
649- ; CHECK32ZFBFMIN-NEXT: sw s1, 4(sp) # 4-byte Folded Spill
650- ; CHECK32ZFBFMIN-NEXT: lui a0, %hi(.LCPI12_0)
651- ; CHECK32ZFBFMIN-NEXT: flw fa5, %lo(.LCPI12_0)(a0)
652- ; CHECK32ZFBFMIN-NEXT: fcvt.s.bf16 fa0, fa0
653- ; CHECK32ZFBFMIN-NEXT: fmv.w.x fa4, zero
654- ; CHECK32ZFBFMIN-NEXT: fle.s a0, fa4, fa0
655- ; CHECK32ZFBFMIN-NEXT: flt.s a1, fa5, fa0
656- ; CHECK32ZFBFMIN-NEXT: neg s0, a1
657- ; CHECK32ZFBFMIN-NEXT: neg s1, a0
658- ; CHECK32ZFBFMIN-NEXT: call __fixunssfdi
659- ; CHECK32ZFBFMIN-NEXT: and a0, s1, a0
660- ; CHECK32ZFBFMIN-NEXT: and a1, s1, a1
661- ; CHECK32ZFBFMIN-NEXT: or a0, s0, a0
662- ; CHECK32ZFBFMIN-NEXT: or a1, s0, a1
663- ; CHECK32ZFBFMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
664- ; CHECK32ZFBFMIN-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
665- ; CHECK32ZFBFMIN-NEXT: lw s1, 4(sp) # 4-byte Folded Reload
666- ; CHECK32ZFBFMIN-NEXT: addi sp, sp, 16
667- ; CHECK32ZFBFMIN-NEXT: ret
655+ ; RV32IZFBFMIN-LABEL: fcvt_lu_bf16_sat:
656+ ; RV32IZFBFMIN: # %bb.0: # %start
657+ ; RV32IZFBFMIN-NEXT: addi sp, sp, -16
658+ ; RV32IZFBFMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
659+ ; RV32IZFBFMIN-NEXT: sw s0, 8(sp) # 4-byte Folded Spill
660+ ; RV32IZFBFMIN-NEXT: fsw fs0, 4(sp) # 4-byte Folded Spill
661+ ; RV32IZFBFMIN-NEXT: fcvt.s.bf16 fs0, fa0
662+ ; RV32IZFBFMIN-NEXT: fmv.w.x fa5, zero
663+ ; RV32IZFBFMIN-NEXT: fle.s a0, fa5, fs0
664+ ; RV32IZFBFMIN-NEXT: neg s0, a0
665+ ; RV32IZFBFMIN-NEXT: fmv.s fa0, fs0
666+ ; RV32IZFBFMIN-NEXT: call __fixunssfdi
667+ ; RV32IZFBFMIN-NEXT: and a0, s0, a0
668+ ; RV32IZFBFMIN-NEXT: lui a2, 391168
669+ ; RV32IZFBFMIN-NEXT: and a1, s0, a1
670+ ; RV32IZFBFMIN-NEXT: addi a2, a2, -1
671+ ; RV32IZFBFMIN-NEXT: fmv.w.x fa5, a2
672+ ; RV32IZFBFMIN-NEXT: flt.s a2, fa5, fs0
673+ ; RV32IZFBFMIN-NEXT: neg a2, a2
674+ ; RV32IZFBFMIN-NEXT: or a0, a2, a0
675+ ; RV32IZFBFMIN-NEXT: or a1, a2, a1
676+ ; RV32IZFBFMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
677+ ; RV32IZFBFMIN-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
678+ ; RV32IZFBFMIN-NEXT: flw fs0, 4(sp) # 4-byte Folded Reload
679+ ; RV32IZFBFMIN-NEXT: addi sp, sp, 16
680+ ; RV32IZFBFMIN-NEXT: ret
681+ ;
682+ ; R32IDZFBFMIN-LABEL: fcvt_lu_bf16_sat:
683+ ; R32IDZFBFMIN: # %bb.0: # %start
684+ ; R32IDZFBFMIN-NEXT: addi sp, sp, -16
685+ ; R32IDZFBFMIN-NEXT: sw ra, 12(sp) # 4-byte Folded Spill
686+ ; R32IDZFBFMIN-NEXT: sw s0, 8(sp) # 4-byte Folded Spill
687+ ; R32IDZFBFMIN-NEXT: fsd fs0, 0(sp) # 8-byte Folded Spill
688+ ; R32IDZFBFMIN-NEXT: fcvt.s.bf16 fs0, fa0
689+ ; R32IDZFBFMIN-NEXT: fmv.w.x fa5, zero
690+ ; R32IDZFBFMIN-NEXT: fle.s a0, fa5, fs0
691+ ; R32IDZFBFMIN-NEXT: neg s0, a0
692+ ; R32IDZFBFMIN-NEXT: fmv.s fa0, fs0
693+ ; R32IDZFBFMIN-NEXT: call __fixunssfdi
694+ ; R32IDZFBFMIN-NEXT: and a0, s0, a0
695+ ; R32IDZFBFMIN-NEXT: lui a2, 391168
696+ ; R32IDZFBFMIN-NEXT: and a1, s0, a1
697+ ; R32IDZFBFMIN-NEXT: addi a2, a2, -1
698+ ; R32IDZFBFMIN-NEXT: fmv.w.x fa5, a2
699+ ; R32IDZFBFMIN-NEXT: flt.s a2, fa5, fs0
700+ ; R32IDZFBFMIN-NEXT: neg a2, a2
701+ ; R32IDZFBFMIN-NEXT: or a0, a2, a0
702+ ; R32IDZFBFMIN-NEXT: or a1, a2, a1
703+ ; R32IDZFBFMIN-NEXT: lw ra, 12(sp) # 4-byte Folded Reload
704+ ; R32IDZFBFMIN-NEXT: lw s0, 8(sp) # 4-byte Folded Reload
705+ ; R32IDZFBFMIN-NEXT: fld fs0, 0(sp) # 8-byte Folded Reload
706+ ; R32IDZFBFMIN-NEXT: addi sp, sp, 16
707+ ; R32IDZFBFMIN-NEXT: ret
668708;
669709; RV32ID-LABEL: fcvt_lu_bf16_sat:
670710; RV32ID: # %bb.0: # %start
@@ -673,15 +713,16 @@ define i64 @fcvt_lu_bf16_sat(bfloat %a) nounwind {
673713; RV32ID-NEXT: sw s0, 8(sp) # 4-byte Folded Spill
674714; RV32ID-NEXT: sw s1, 4(sp) # 4-byte Folded Spill
675715; RV32ID-NEXT: fmv.x.w a0, fa0
676- ; RV32ID-NEXT: lui a1, %hi(.LCPI12_0)
677- ; RV32ID-NEXT: fmv.w.x fa5, zero
678- ; RV32ID-NEXT: flw fa4, %lo(.LCPI12_0)(a1)
716+ ; RV32ID-NEXT: lui a1, 391168
679717; RV32ID-NEXT: slli a0, a0, 16
718+ ; RV32ID-NEXT: addi a1, a1, -1
680719; RV32ID-NEXT: fmv.w.x fa0, a0
681- ; RV32ID-NEXT: fle.s a0, fa5, fa0
682- ; RV32ID-NEXT: flt.s a1, fa4, fa0
683- ; RV32ID-NEXT: neg s0, a1
684- ; RV32ID-NEXT: neg s1, a0
720+ ; RV32ID-NEXT: fmv.w.x fa5, a1
721+ ; RV32ID-NEXT: flt.s a0, fa5, fa0
722+ ; RV32ID-NEXT: fmv.w.x fa5, zero
723+ ; RV32ID-NEXT: fle.s a1, fa5, fa0
724+ ; RV32ID-NEXT: neg s0, a0
725+ ; RV32ID-NEXT: neg s1, a1
685726; RV32ID-NEXT: call __fixunssfdi
686727; RV32ID-NEXT: and a0, s1, a0
687728; RV32ID-NEXT: and a1, s1, a1
0 commit comments