@@ -28,7 +28,7 @@ define i32 @fcmp_false(double %a, double %b) nounwind {
2828 ret i32 %2
2929}
3030
31- ; FIXME: slli+srli on RV64 are unnecessary
31+ ; FIXME: slli+srli on RV64 are unnecessary
3232define i32 @fcmp_oeq (double %a , double %b ) nounwind {
3333; CHECKIFD-LABEL: fcmp_oeq:
3434; CHECKIFD: # %bb.0:
@@ -50,8 +50,7 @@ define i32 @fcmp_oeq(double %a, double %b) nounwind {
5050; RV64I-NEXT: addi sp, sp, -16
5151; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
5252; RV64I-NEXT: call __eqdf2
53- ; RV64I-NEXT: slli a0, a0, 32
54- ; RV64I-NEXT: srli a0, a0, 32
53+ ; RV64I-NEXT: sext.w a0, a0
5554; RV64I-NEXT: seqz a0, a0
5655; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
5756; RV64I-NEXT: addi sp, sp, 16
@@ -194,7 +193,7 @@ define i32 @fcmp_ole(double %a, double %b) nounwind {
194193 ret i32 %2
195194}
196195
197- ; FIXME: slli+srli on RV64 are unnecessary
196+ ; FIXME: slli+srli on RV64 are unnecessary
198197define i32 @fcmp_one (double %a , double %b ) nounwind {
199198; CHECKIFD-LABEL: fcmp_one:
200199; CHECKIFD: # %bb.0:
@@ -244,14 +243,12 @@ define i32 @fcmp_one(double %a, double %b) nounwind {
244243; RV64I-NEXT: mv s0, a0
245244; RV64I-NEXT: mv s1, a1
246245; RV64I-NEXT: call __eqdf2
247- ; RV64I-NEXT: slli a0, a0, 32
248- ; RV64I-NEXT: srli a0, a0, 32
246+ ; RV64I-NEXT: sext.w a0, a0
249247; RV64I-NEXT: snez s2, a0
250248; RV64I-NEXT: mv a0, s0
251249; RV64I-NEXT: mv a1, s1
252250; RV64I-NEXT: call __unorddf2
253- ; RV64I-NEXT: slli a0, a0, 32
254- ; RV64I-NEXT: srli a0, a0, 32
251+ ; RV64I-NEXT: sext.w a0, a0
255252; RV64I-NEXT: seqz a0, a0
256253; RV64I-NEXT: and a0, s2, a0
257254; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
@@ -265,7 +262,7 @@ define i32 @fcmp_one(double %a, double %b) nounwind {
265262 ret i32 %2
266263}
267264
268- ; FIXME: slli+srli on RV64 are unnecessary
265+ ; FIXME: slli+srli on RV64 are unnecessary
269266define i32 @fcmp_ord (double %a , double %b ) nounwind {
270267; CHECKIFD-LABEL: fcmp_ord:
271268; CHECKIFD: # %bb.0:
@@ -289,8 +286,7 @@ define i32 @fcmp_ord(double %a, double %b) nounwind {
289286; RV64I-NEXT: addi sp, sp, -16
290287; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
291288; RV64I-NEXT: call __unorddf2
292- ; RV64I-NEXT: slli a0, a0, 32
293- ; RV64I-NEXT: srli a0, a0, 32
289+ ; RV64I-NEXT: sext.w a0, a0
294290; RV64I-NEXT: seqz a0, a0
295291; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
296292; RV64I-NEXT: addi sp, sp, 16
@@ -300,7 +296,7 @@ define i32 @fcmp_ord(double %a, double %b) nounwind {
300296 ret i32 %2
301297}
302298
303- ; FIXME: slli+srli on RV64 are unnecessary
299+ ; FIXME: slli+srli on RV64 are unnecessary
304300define i32 @fcmp_ueq (double %a , double %b ) nounwind {
305301; CHECKIFD-LABEL: fcmp_ueq:
306302; CHECKIFD: # %bb.0:
@@ -351,14 +347,12 @@ define i32 @fcmp_ueq(double %a, double %b) nounwind {
351347; RV64I-NEXT: mv s0, a0
352348; RV64I-NEXT: mv s1, a1
353349; RV64I-NEXT: call __eqdf2
354- ; RV64I-NEXT: slli a0, a0, 32
355- ; RV64I-NEXT: srli a0, a0, 32
350+ ; RV64I-NEXT: sext.w a0, a0
356351; RV64I-NEXT: seqz s2, a0
357352; RV64I-NEXT: mv a0, s0
358353; RV64I-NEXT: mv a1, s1
359354; RV64I-NEXT: call __unorddf2
360- ; RV64I-NEXT: slli a0, a0, 32
361- ; RV64I-NEXT: srli a0, a0, 32
355+ ; RV64I-NEXT: sext.w a0, a0
362356; RV64I-NEXT: snez a0, a0
363357; RV64I-NEXT: or a0, s2, a0
364358; RV64I-NEXT: ld ra, 24(sp) # 8-byte Folded Reload
@@ -508,7 +502,7 @@ define i32 @fcmp_ule(double %a, double %b) nounwind {
508502 ret i32 %2
509503}
510504
511- ; FIXME: slli+srli on RV64 are unnecessary
505+ ; FIXME: slli+srli on RV64 are unnecessary
512506define i32 @fcmp_une (double %a , double %b ) nounwind {
513507; CHECKIFD-LABEL: fcmp_une:
514508; CHECKIFD: # %bb.0:
@@ -531,8 +525,7 @@ define i32 @fcmp_une(double %a, double %b) nounwind {
531525; RV64I-NEXT: addi sp, sp, -16
532526; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
533527; RV64I-NEXT: call __nedf2
534- ; RV64I-NEXT: slli a0, a0, 32
535- ; RV64I-NEXT: srli a0, a0, 32
528+ ; RV64I-NEXT: sext.w a0, a0
536529; RV64I-NEXT: snez a0, a0
537530; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
538531; RV64I-NEXT: addi sp, sp, 16
@@ -542,7 +535,7 @@ define i32 @fcmp_une(double %a, double %b) nounwind {
542535 ret i32 %2
543536}
544537
545- ; FIXME: slli+srli on RV64 are unnecessary
538+ ; FIXME: slli+srli on RV64 are unnecessary
546539define i32 @fcmp_uno (double %a , double %b ) nounwind {
547540; CHECKIFD-LABEL: fcmp_uno:
548541; CHECKIFD: # %bb.0:
@@ -567,8 +560,7 @@ define i32 @fcmp_uno(double %a, double %b) nounwind {
567560; RV64I-NEXT: addi sp, sp, -16
568561; RV64I-NEXT: sd ra, 8(sp) # 8-byte Folded Spill
569562; RV64I-NEXT: call __unorddf2
570- ; RV64I-NEXT: slli a0, a0, 32
571- ; RV64I-NEXT: srli a0, a0, 32
563+ ; RV64I-NEXT: sext.w a0, a0
572564; RV64I-NEXT: snez a0, a0
573565; RV64I-NEXT: ld ra, 8(sp) # 8-byte Folded Reload
574566; RV64I-NEXT: addi sp, sp, 16
0 commit comments