xref: /llvm-project/llvm/test/CodeGen/RISCV/bfloat-fcmp.ll (revision 9122c5235ec85ce0c0ad337e862b006e7b349d84)
18a71f44eSAlex Bradbury; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
232597685SJianjian Guan; RUN: llc -mtriple=riscv32 -mattr=+zfbfmin -verify-machineinstrs \
38a71f44eSAlex Bradbury; RUN:   -target-abi ilp32f < %s | FileCheck %s
432597685SJianjian Guan; RUN: llc -mtriple=riscv64 -mattr=+zfbfmin -verify-machineinstrs \
58a71f44eSAlex Bradbury; RUN:   -target-abi lp64f < %s | FileCheck %s
68a71f44eSAlex Bradbury
78a71f44eSAlex Bradburydefine i32 @fcmp_false(bfloat %a, bfloat %b) nounwind {
88a71f44eSAlex Bradbury; CHECK-LABEL: fcmp_false:
98a71f44eSAlex Bradbury; CHECK:       # %bb.0:
108a71f44eSAlex Bradbury; CHECK-NEXT:    li a0, 0
118a71f44eSAlex Bradbury; CHECK-NEXT:    ret
128a71f44eSAlex Bradbury  %1 = fcmp false bfloat %a, %b
138a71f44eSAlex Bradbury  %2 = zext i1 %1 to i32
148a71f44eSAlex Bradbury  ret i32 %2
158a71f44eSAlex Bradbury}
168a71f44eSAlex Bradbury
178a71f44eSAlex Bradburydefine i32 @fcmp_oeq(bfloat %a, bfloat %b) nounwind {
188a71f44eSAlex Bradbury; CHECK-LABEL: fcmp_oeq:
198a71f44eSAlex Bradbury; CHECK:       # %bb.0:
208a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa5, fa1
218a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa4, fa0
228a71f44eSAlex Bradbury; CHECK-NEXT:    feq.s a0, fa4, fa5
238a71f44eSAlex Bradbury; CHECK-NEXT:    ret
248a71f44eSAlex Bradbury  %1 = fcmp oeq bfloat %a, %b
258a71f44eSAlex Bradbury  %2 = zext i1 %1 to i32
268a71f44eSAlex Bradbury  ret i32 %2
278a71f44eSAlex Bradbury}
288a71f44eSAlex Bradbury
298a71f44eSAlex Bradburydefine i32 @fcmp_ogt(bfloat %a, bfloat %b) nounwind {
308a71f44eSAlex Bradbury; CHECK-LABEL: fcmp_ogt:
318a71f44eSAlex Bradbury; CHECK:       # %bb.0:
328a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa5, fa0
338a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa4, fa1
348a71f44eSAlex Bradbury; CHECK-NEXT:    flt.s a0, fa4, fa5
358a71f44eSAlex Bradbury; CHECK-NEXT:    ret
368a71f44eSAlex Bradbury  %1 = fcmp ogt bfloat %a, %b
378a71f44eSAlex Bradbury  %2 = zext i1 %1 to i32
388a71f44eSAlex Bradbury  ret i32 %2
398a71f44eSAlex Bradbury}
408a71f44eSAlex Bradbury
418a71f44eSAlex Bradburydefine i32 @fcmp_oge(bfloat %a, bfloat %b) nounwind {
428a71f44eSAlex Bradbury; CHECK-LABEL: fcmp_oge:
438a71f44eSAlex Bradbury; CHECK:       # %bb.0:
448a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa5, fa0
458a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa4, fa1
468a71f44eSAlex Bradbury; CHECK-NEXT:    fle.s a0, fa4, fa5
478a71f44eSAlex Bradbury; CHECK-NEXT:    ret
488a71f44eSAlex Bradbury  %1 = fcmp oge bfloat %a, %b
498a71f44eSAlex Bradbury  %2 = zext i1 %1 to i32
508a71f44eSAlex Bradbury  ret i32 %2
518a71f44eSAlex Bradbury}
528a71f44eSAlex Bradbury
538a71f44eSAlex Bradburydefine i32 @fcmp_olt(bfloat %a, bfloat %b) nounwind {
548a71f44eSAlex Bradbury; CHECK-LABEL: fcmp_olt:
558a71f44eSAlex Bradbury; CHECK:       # %bb.0:
568a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa5, fa1
578a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa4, fa0
588a71f44eSAlex Bradbury; CHECK-NEXT:    flt.s a0, fa4, fa5
598a71f44eSAlex Bradbury; CHECK-NEXT:    ret
608a71f44eSAlex Bradbury  %1 = fcmp olt bfloat %a, %b
618a71f44eSAlex Bradbury  %2 = zext i1 %1 to i32
628a71f44eSAlex Bradbury  ret i32 %2
638a71f44eSAlex Bradbury}
648a71f44eSAlex Bradbury
658a71f44eSAlex Bradburydefine i32 @fcmp_ole(bfloat %a, bfloat %b) nounwind {
668a71f44eSAlex Bradbury; CHECK-LABEL: fcmp_ole:
678a71f44eSAlex Bradbury; CHECK:       # %bb.0:
688a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa5, fa1
698a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa4, fa0
708a71f44eSAlex Bradbury; CHECK-NEXT:    fle.s a0, fa4, fa5
718a71f44eSAlex Bradbury; CHECK-NEXT:    ret
728a71f44eSAlex Bradbury  %1 = fcmp ole bfloat %a, %b
738a71f44eSAlex Bradbury  %2 = zext i1 %1 to i32
748a71f44eSAlex Bradbury  ret i32 %2
758a71f44eSAlex Bradbury}
768a71f44eSAlex Bradbury
778a71f44eSAlex Bradburydefine i32 @fcmp_one(bfloat %a, bfloat %b) nounwind {
788a71f44eSAlex Bradbury; CHECK-LABEL: fcmp_one:
798a71f44eSAlex Bradbury; CHECK:       # %bb.0:
808a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa5, fa1
818a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa4, fa0
828a71f44eSAlex Bradbury; CHECK-NEXT:    flt.s a0, fa4, fa5
838a71f44eSAlex Bradbury; CHECK-NEXT:    flt.s a1, fa5, fa4
848a71f44eSAlex Bradbury; CHECK-NEXT:    or a0, a1, a0
858a71f44eSAlex Bradbury; CHECK-NEXT:    ret
868a71f44eSAlex Bradbury  %1 = fcmp one bfloat %a, %b
878a71f44eSAlex Bradbury  %2 = zext i1 %1 to i32
888a71f44eSAlex Bradbury  ret i32 %2
898a71f44eSAlex Bradbury}
908a71f44eSAlex Bradbury
918a71f44eSAlex Bradburydefine i32 @fcmp_ord(bfloat %a, bfloat %b) nounwind {
928a71f44eSAlex Bradbury; CHECK-LABEL: fcmp_ord:
938a71f44eSAlex Bradbury; CHECK:       # %bb.0:
948a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa5, fa1
95*9122c523SPengcheng Wang; CHECK-NEXT:    fcvt.s.bf16 fa4, fa0
968a71f44eSAlex Bradbury; CHECK-NEXT:    feq.s a0, fa5, fa5
97*9122c523SPengcheng Wang; CHECK-NEXT:    feq.s a1, fa4, fa4
988a71f44eSAlex Bradbury; CHECK-NEXT:    and a0, a1, a0
998a71f44eSAlex Bradbury; CHECK-NEXT:    ret
1008a71f44eSAlex Bradbury  %1 = fcmp ord bfloat %a, %b
1018a71f44eSAlex Bradbury  %2 = zext i1 %1 to i32
1028a71f44eSAlex Bradbury  ret i32 %2
1038a71f44eSAlex Bradbury}
1048a71f44eSAlex Bradbury
1058a71f44eSAlex Bradburydefine i32 @fcmp_ueq(bfloat %a, bfloat %b) nounwind {
1068a71f44eSAlex Bradbury; CHECK-LABEL: fcmp_ueq:
1078a71f44eSAlex Bradbury; CHECK:       # %bb.0:
1088a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa5, fa1
1098a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa4, fa0
1108a71f44eSAlex Bradbury; CHECK-NEXT:    flt.s a0, fa4, fa5
1118a71f44eSAlex Bradbury; CHECK-NEXT:    flt.s a1, fa5, fa4
1128a71f44eSAlex Bradbury; CHECK-NEXT:    or a0, a1, a0
1138a71f44eSAlex Bradbury; CHECK-NEXT:    xori a0, a0, 1
1148a71f44eSAlex Bradbury; CHECK-NEXT:    ret
1158a71f44eSAlex Bradbury  %1 = fcmp ueq bfloat %a, %b
1168a71f44eSAlex Bradbury  %2 = zext i1 %1 to i32
1178a71f44eSAlex Bradbury  ret i32 %2
1188a71f44eSAlex Bradbury}
1198a71f44eSAlex Bradbury
1208a71f44eSAlex Bradburydefine i32 @fcmp_ugt(bfloat %a, bfloat %b) nounwind {
1218a71f44eSAlex Bradbury; CHECK-LABEL: fcmp_ugt:
1228a71f44eSAlex Bradbury; CHECK:       # %bb.0:
1238a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa5, fa1
1248a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa4, fa0
1258a71f44eSAlex Bradbury; CHECK-NEXT:    fle.s a0, fa4, fa5
1268a71f44eSAlex Bradbury; CHECK-NEXT:    xori a0, a0, 1
1278a71f44eSAlex Bradbury; CHECK-NEXT:    ret
1288a71f44eSAlex Bradbury  %1 = fcmp ugt bfloat %a, %b
1298a71f44eSAlex Bradbury  %2 = zext i1 %1 to i32
1308a71f44eSAlex Bradbury  ret i32 %2
1318a71f44eSAlex Bradbury}
1328a71f44eSAlex Bradbury
1338a71f44eSAlex Bradburydefine i32 @fcmp_uge(bfloat %a, bfloat %b) nounwind {
1348a71f44eSAlex Bradbury; CHECK-LABEL: fcmp_uge:
1358a71f44eSAlex Bradbury; CHECK:       # %bb.0:
1368a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa5, fa1
1378a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa4, fa0
1388a71f44eSAlex Bradbury; CHECK-NEXT:    flt.s a0, fa4, fa5
1398a71f44eSAlex Bradbury; CHECK-NEXT:    xori a0, a0, 1
1408a71f44eSAlex Bradbury; CHECK-NEXT:    ret
1418a71f44eSAlex Bradbury  %1 = fcmp uge bfloat %a, %b
1428a71f44eSAlex Bradbury  %2 = zext i1 %1 to i32
1438a71f44eSAlex Bradbury  ret i32 %2
1448a71f44eSAlex Bradbury}
1458a71f44eSAlex Bradbury
1468a71f44eSAlex Bradburydefine i32 @fcmp_ult(bfloat %a, bfloat %b) nounwind {
1478a71f44eSAlex Bradbury; CHECK-LABEL: fcmp_ult:
1488a71f44eSAlex Bradbury; CHECK:       # %bb.0:
1498a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa5, fa0
1508a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa4, fa1
1518a71f44eSAlex Bradbury; CHECK-NEXT:    fle.s a0, fa4, fa5
1528a71f44eSAlex Bradbury; CHECK-NEXT:    xori a0, a0, 1
1538a71f44eSAlex Bradbury; CHECK-NEXT:    ret
1548a71f44eSAlex Bradbury  %1 = fcmp ult bfloat %a, %b
1558a71f44eSAlex Bradbury  %2 = zext i1 %1 to i32
1568a71f44eSAlex Bradbury  ret i32 %2
1578a71f44eSAlex Bradbury}
1588a71f44eSAlex Bradbury
1598a71f44eSAlex Bradburydefine i32 @fcmp_ule(bfloat %a, bfloat %b) nounwind {
1608a71f44eSAlex Bradbury; CHECK-LABEL: fcmp_ule:
1618a71f44eSAlex Bradbury; CHECK:       # %bb.0:
1628a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa5, fa0
1638a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa4, fa1
1648a71f44eSAlex Bradbury; CHECK-NEXT:    flt.s a0, fa4, fa5
1658a71f44eSAlex Bradbury; CHECK-NEXT:    xori a0, a0, 1
1668a71f44eSAlex Bradbury; CHECK-NEXT:    ret
1678a71f44eSAlex Bradbury  %1 = fcmp ule bfloat %a, %b
1688a71f44eSAlex Bradbury  %2 = zext i1 %1 to i32
1698a71f44eSAlex Bradbury  ret i32 %2
1708a71f44eSAlex Bradbury}
1718a71f44eSAlex Bradbury
1728a71f44eSAlex Bradburydefine i32 @fcmp_une(bfloat %a, bfloat %b) nounwind {
1738a71f44eSAlex Bradbury; CHECK-LABEL: fcmp_une:
1748a71f44eSAlex Bradbury; CHECK:       # %bb.0:
1758a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa5, fa1
1768a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa4, fa0
1778a71f44eSAlex Bradbury; CHECK-NEXT:    feq.s a0, fa4, fa5
1788a71f44eSAlex Bradbury; CHECK-NEXT:    xori a0, a0, 1
1798a71f44eSAlex Bradbury; CHECK-NEXT:    ret
1808a71f44eSAlex Bradbury  %1 = fcmp une bfloat %a, %b
1818a71f44eSAlex Bradbury  %2 = zext i1 %1 to i32
1828a71f44eSAlex Bradbury  ret i32 %2
1838a71f44eSAlex Bradbury}
1848a71f44eSAlex Bradbury
1858a71f44eSAlex Bradburydefine i32 @fcmp_uno(bfloat %a, bfloat %b) nounwind {
1868a71f44eSAlex Bradbury; CHECK-LABEL: fcmp_uno:
1878a71f44eSAlex Bradbury; CHECK:       # %bb.0:
1888a71f44eSAlex Bradbury; CHECK-NEXT:    fcvt.s.bf16 fa5, fa1
189*9122c523SPengcheng Wang; CHECK-NEXT:    fcvt.s.bf16 fa4, fa0
1908a71f44eSAlex Bradbury; CHECK-NEXT:    feq.s a0, fa5, fa5
191*9122c523SPengcheng Wang; CHECK-NEXT:    feq.s a1, fa4, fa4
1928a71f44eSAlex Bradbury; CHECK-NEXT:    and a0, a1, a0
1938a71f44eSAlex Bradbury; CHECK-NEXT:    xori a0, a0, 1
1948a71f44eSAlex Bradbury; CHECK-NEXT:    ret
1958a71f44eSAlex Bradbury  %1 = fcmp uno bfloat %a, %b
1968a71f44eSAlex Bradbury  %2 = zext i1 %1 to i32
1978a71f44eSAlex Bradbury  ret i32 %2
1988a71f44eSAlex Bradbury}
1998a71f44eSAlex Bradbury
2008a71f44eSAlex Bradburydefine i32 @fcmp_true(bfloat %a, bfloat %b) nounwind {
2018a71f44eSAlex Bradbury; CHECK-LABEL: fcmp_true:
2028a71f44eSAlex Bradbury; CHECK:       # %bb.0:
2038a71f44eSAlex Bradbury; CHECK-NEXT:    li a0, 1
2048a71f44eSAlex Bradbury; CHECK-NEXT:    ret
2058a71f44eSAlex Bradbury  %1 = fcmp true bfloat %a, %b
2068a71f44eSAlex Bradbury  %2 = zext i1 %1 to i32
2078a71f44eSAlex Bradbury  ret i32 %2
2088a71f44eSAlex Bradbury}
209