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