1074 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+zfh -verify-machineinstrs \3; RUN: -target-abi ilp32f -disable-strictnode-mutation < %s | FileCheck %s4; RUN: llc -mtriple=riscv64 -mattr=+zfh -verify-machineinstrs \5; RUN: -target-abi lp64f -disable-strictnode-mutation < %s | FileCheck %s6; RUN: llc -mtriple=riscv32 -mattr=+zhinx -verify-machineinstrs \7; RUN: -target-abi ilp32 -disable-strictnode-mutation < %s \8; RUN: | FileCheck -check-prefix=CHECKIZHINX %s9; RUN: llc -mtriple=riscv64 -mattr=+zhinx -verify-machineinstrs \10; RUN: -target-abi lp64 -disable-strictnode-mutation < %s \11; RUN: | FileCheck -check-prefix=CHECKIZHINX %s12; RUN: llc -mtriple=riscv32 -mattr=+zfh -verify-machineinstrs \13; RUN: -target-abi ilp32f -disable-strictnode-mutation < %s \14; RUN: | FileCheck -check-prefix=CHECKIZFHMIN %s15; RUN: llc -mtriple=riscv64 -mattr=+zfh -verify-machineinstrs \16; RUN: -target-abi lp64f -disable-strictnode-mutation < %s \17; RUN: | FileCheck -check-prefix=CHECKIZFHMIN %s18; RUN: llc -mtriple=riscv32 -mattr=+zhinxmin -verify-machineinstrs \19; RUN: -target-abi ilp32 -disable-strictnode-mutation < %s \20; RUN: | FileCheck -check-prefix=CHECKIZHINXMIN %s21; RUN: llc -mtriple=riscv64 -mattr=+zhinxmin -verify-machineinstrs \22; RUN: -target-abi lp64 -disable-strictnode-mutation < %s \23; RUN: | FileCheck -check-prefix=CHECKIZHINXMIN %s24 25define i32 @fcmp_oeq(half %a, half %b) nounwind strictfp {26; CHECK-LABEL: fcmp_oeq:27; CHECK: # %bb.0:28; CHECK-NEXT: feq.h a0, fa0, fa129; CHECK-NEXT: ret30;31; CHECKIZHINX-LABEL: fcmp_oeq:32; CHECKIZHINX: # %bb.0:33; CHECKIZHINX-NEXT: feq.h a0, a0, a134; CHECKIZHINX-NEXT: ret35;36; CHECKIZFHMIN-LABEL: fcmp_oeq:37; CHECKIZFHMIN: # %bb.0:38; CHECKIZFHMIN-NEXT: feq.h a0, fa0, fa139; CHECKIZFHMIN-NEXT: ret40;41; CHECKIZHINXMIN-LABEL: fcmp_oeq:42; CHECKIZHINXMIN: # %bb.0:43; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a144; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a045; CHECKIZHINXMIN-NEXT: feq.s a0, a0, a146; CHECKIZHINXMIN-NEXT: ret47 %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"oeq", metadata !"fpexcept.strict") strictfp48 %2 = zext i1 %1 to i3249 ret i32 %250}51 52define i32 @fcmp_ogt(half %a, half %b) nounwind strictfp {53; CHECK-LABEL: fcmp_ogt:54; CHECK: # %bb.0:55; CHECK-NEXT: frflags a156; CHECK-NEXT: flt.h a0, fa1, fa057; CHECK-NEXT: fsflags a158; CHECK-NEXT: feq.h zero, fa1, fa059; CHECK-NEXT: ret60;61; CHECKIZHINX-LABEL: fcmp_ogt:62; CHECKIZHINX: # %bb.0:63; CHECKIZHINX-NEXT: frflags a364; CHECKIZHINX-NEXT: flt.h a2, a1, a065; CHECKIZHINX-NEXT: fsflags a366; CHECKIZHINX-NEXT: feq.h zero, a1, a067; CHECKIZHINX-NEXT: mv a0, a268; CHECKIZHINX-NEXT: ret69;70; CHECKIZFHMIN-LABEL: fcmp_ogt:71; CHECKIZFHMIN: # %bb.0:72; CHECKIZFHMIN-NEXT: frflags a173; CHECKIZFHMIN-NEXT: flt.h a0, fa1, fa074; CHECKIZFHMIN-NEXT: fsflags a175; CHECKIZFHMIN-NEXT: feq.h zero, fa1, fa076; CHECKIZFHMIN-NEXT: ret77;78; CHECKIZHINXMIN-LABEL: fcmp_ogt:79; CHECKIZHINXMIN: # %bb.0:80; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a081; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a182; CHECKIZHINXMIN-NEXT: frflags a383; CHECKIZHINXMIN-NEXT: flt.s a0, a1, a284; CHECKIZHINXMIN-NEXT: fsflags a385; CHECKIZHINXMIN-NEXT: feq.s zero, a1, a286; CHECKIZHINXMIN-NEXT: ret87 %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ogt", metadata !"fpexcept.strict") strictfp88 %2 = zext i1 %1 to i3289 ret i32 %290}91 92define i32 @fcmp_oge(half %a, half %b) nounwind strictfp {93; CHECK-LABEL: fcmp_oge:94; CHECK: # %bb.0:95; CHECK-NEXT: frflags a196; CHECK-NEXT: fle.h a0, fa1, fa097; CHECK-NEXT: fsflags a198; CHECK-NEXT: feq.h zero, fa1, fa099; CHECK-NEXT: ret100;101; CHECKIZHINX-LABEL: fcmp_oge:102; CHECKIZHINX: # %bb.0:103; CHECKIZHINX-NEXT: frflags a3104; CHECKIZHINX-NEXT: fle.h a2, a1, a0105; CHECKIZHINX-NEXT: fsflags a3106; CHECKIZHINX-NEXT: feq.h zero, a1, a0107; CHECKIZHINX-NEXT: mv a0, a2108; CHECKIZHINX-NEXT: ret109;110; CHECKIZFHMIN-LABEL: fcmp_oge:111; CHECKIZFHMIN: # %bb.0:112; CHECKIZFHMIN-NEXT: frflags a1113; CHECKIZFHMIN-NEXT: fle.h a0, fa1, fa0114; CHECKIZFHMIN-NEXT: fsflags a1115; CHECKIZFHMIN-NEXT: feq.h zero, fa1, fa0116; CHECKIZFHMIN-NEXT: ret117;118; CHECKIZHINXMIN-LABEL: fcmp_oge:119; CHECKIZHINXMIN: # %bb.0:120; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a0121; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1122; CHECKIZHINXMIN-NEXT: frflags a3123; CHECKIZHINXMIN-NEXT: fle.s a0, a1, a2124; CHECKIZHINXMIN-NEXT: fsflags a3125; CHECKIZHINXMIN-NEXT: feq.s zero, a1, a2126; CHECKIZHINXMIN-NEXT: ret127 %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"oge", metadata !"fpexcept.strict") strictfp128 %2 = zext i1 %1 to i32129 ret i32 %2130}131 132define i32 @fcmp_olt(half %a, half %b) nounwind strictfp {133; CHECK-LABEL: fcmp_olt:134; CHECK: # %bb.0:135; CHECK-NEXT: frflags a1136; CHECK-NEXT: flt.h a0, fa0, fa1137; CHECK-NEXT: fsflags a1138; CHECK-NEXT: feq.h zero, fa0, fa1139; CHECK-NEXT: ret140;141; CHECKIZHINX-LABEL: fcmp_olt:142; CHECKIZHINX: # %bb.0:143; CHECKIZHINX-NEXT: frflags a3144; CHECKIZHINX-NEXT: flt.h a2, a0, a1145; CHECKIZHINX-NEXT: fsflags a3146; CHECKIZHINX-NEXT: feq.h zero, a0, a1147; CHECKIZHINX-NEXT: mv a0, a2148; CHECKIZHINX-NEXT: ret149;150; CHECKIZFHMIN-LABEL: fcmp_olt:151; CHECKIZFHMIN: # %bb.0:152; CHECKIZFHMIN-NEXT: frflags a1153; CHECKIZFHMIN-NEXT: flt.h a0, fa0, fa1154; CHECKIZFHMIN-NEXT: fsflags a1155; CHECKIZFHMIN-NEXT: feq.h zero, fa0, fa1156; CHECKIZFHMIN-NEXT: ret157;158; CHECKIZHINXMIN-LABEL: fcmp_olt:159; CHECKIZHINXMIN: # %bb.0:160; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1161; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a0162; CHECKIZHINXMIN-NEXT: frflags a3163; CHECKIZHINXMIN-NEXT: flt.s a0, a2, a1164; CHECKIZHINXMIN-NEXT: fsflags a3165; CHECKIZHINXMIN-NEXT: feq.s zero, a2, a1166; CHECKIZHINXMIN-NEXT: ret167 %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"olt", metadata !"fpexcept.strict") strictfp168 %2 = zext i1 %1 to i32169 ret i32 %2170}171 172define i32 @fcmp_ole(half %a, half %b) nounwind strictfp {173; CHECK-LABEL: fcmp_ole:174; CHECK: # %bb.0:175; CHECK-NEXT: frflags a1176; CHECK-NEXT: fle.h a0, fa0, fa1177; CHECK-NEXT: fsflags a1178; CHECK-NEXT: feq.h zero, fa0, fa1179; CHECK-NEXT: ret180;181; CHECKIZHINX-LABEL: fcmp_ole:182; CHECKIZHINX: # %bb.0:183; CHECKIZHINX-NEXT: frflags a3184; CHECKIZHINX-NEXT: fle.h a2, a0, a1185; CHECKIZHINX-NEXT: fsflags a3186; CHECKIZHINX-NEXT: feq.h zero, a0, a1187; CHECKIZHINX-NEXT: mv a0, a2188; CHECKIZHINX-NEXT: ret189;190; CHECKIZFHMIN-LABEL: fcmp_ole:191; CHECKIZFHMIN: # %bb.0:192; CHECKIZFHMIN-NEXT: frflags a1193; CHECKIZFHMIN-NEXT: fle.h a0, fa0, fa1194; CHECKIZFHMIN-NEXT: fsflags a1195; CHECKIZFHMIN-NEXT: feq.h zero, fa0, fa1196; CHECKIZFHMIN-NEXT: ret197;198; CHECKIZHINXMIN-LABEL: fcmp_ole:199; CHECKIZHINXMIN: # %bb.0:200; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1201; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a0202; CHECKIZHINXMIN-NEXT: frflags a3203; CHECKIZHINXMIN-NEXT: fle.s a0, a2, a1204; CHECKIZHINXMIN-NEXT: fsflags a3205; CHECKIZHINXMIN-NEXT: feq.s zero, a2, a1206; CHECKIZHINXMIN-NEXT: ret207 %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ole", metadata !"fpexcept.strict") strictfp208 %2 = zext i1 %1 to i32209 ret i32 %2210}211 212; FIXME: We only need one frflags before the two flts and one fsflags after the213; two flts.214define i32 @fcmp_one(half %a, half %b) nounwind strictfp {215; CHECK-LABEL: fcmp_one:216; CHECK: # %bb.0:217; CHECK-NEXT: frflags a0218; CHECK-NEXT: flt.h a1, fa0, fa1219; CHECK-NEXT: fsflags a0220; CHECK-NEXT: feq.h zero, fa0, fa1221; CHECK-NEXT: frflags a0222; CHECK-NEXT: flt.h a2, fa1, fa0223; CHECK-NEXT: fsflags a0224; CHECK-NEXT: or a0, a2, a1225; CHECK-NEXT: feq.h zero, fa1, fa0226; CHECK-NEXT: ret227;228; CHECKIZHINX-LABEL: fcmp_one:229; CHECKIZHINX: # %bb.0:230; CHECKIZHINX-NEXT: frflags a2231; CHECKIZHINX-NEXT: flt.h a3, a0, a1232; CHECKIZHINX-NEXT: fsflags a2233; CHECKIZHINX-NEXT: feq.h zero, a0, a1234; CHECKIZHINX-NEXT: frflags a2235; CHECKIZHINX-NEXT: flt.h a4, a1, a0236; CHECKIZHINX-NEXT: fsflags a2237; CHECKIZHINX-NEXT: or a2, a4, a3238; CHECKIZHINX-NEXT: feq.h zero, a1, a0239; CHECKIZHINX-NEXT: mv a0, a2240; CHECKIZHINX-NEXT: ret241;242; CHECKIZFHMIN-LABEL: fcmp_one:243; CHECKIZFHMIN: # %bb.0:244; CHECKIZFHMIN-NEXT: frflags a0245; CHECKIZFHMIN-NEXT: flt.h a1, fa0, fa1246; CHECKIZFHMIN-NEXT: fsflags a0247; CHECKIZFHMIN-NEXT: feq.h zero, fa0, fa1248; CHECKIZFHMIN-NEXT: frflags a0249; CHECKIZFHMIN-NEXT: flt.h a2, fa1, fa0250; CHECKIZFHMIN-NEXT: fsflags a0251; CHECKIZFHMIN-NEXT: or a0, a2, a1252; CHECKIZFHMIN-NEXT: feq.h zero, fa1, fa0253; CHECKIZFHMIN-NEXT: ret254;255; CHECKIZHINXMIN-LABEL: fcmp_one:256; CHECKIZHINXMIN: # %bb.0:257; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1258; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a0259; CHECKIZHINXMIN-NEXT: frflags a0260; CHECKIZHINXMIN-NEXT: flt.s a3, a2, a1261; CHECKIZHINXMIN-NEXT: fsflags a0262; CHECKIZHINXMIN-NEXT: feq.s zero, a2, a1263; CHECKIZHINXMIN-NEXT: frflags a0264; CHECKIZHINXMIN-NEXT: flt.s a4, a1, a2265; CHECKIZHINXMIN-NEXT: fsflags a0266; CHECKIZHINXMIN-NEXT: or a0, a4, a3267; CHECKIZHINXMIN-NEXT: feq.s zero, a1, a2268; CHECKIZHINXMIN-NEXT: ret269 %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"one", metadata !"fpexcept.strict") strictfp270 %2 = zext i1 %1 to i32271 ret i32 %2272}273 274define i32 @fcmp_ord(half %a, half %b) nounwind strictfp {275; CHECK-LABEL: fcmp_ord:276; CHECK: # %bb.0:277; CHECK-NEXT: feq.h a0, fa1, fa1278; CHECK-NEXT: feq.h a1, fa0, fa0279; CHECK-NEXT: and a0, a1, a0280; CHECK-NEXT: ret281;282; CHECKIZHINX-LABEL: fcmp_ord:283; CHECKIZHINX: # %bb.0:284; CHECKIZHINX-NEXT: feq.h a1, a1, a1285; CHECKIZHINX-NEXT: feq.h a0, a0, a0286; CHECKIZHINX-NEXT: and a0, a0, a1287; CHECKIZHINX-NEXT: ret288;289; CHECKIZFHMIN-LABEL: fcmp_ord:290; CHECKIZFHMIN: # %bb.0:291; CHECKIZFHMIN-NEXT: feq.h a0, fa1, fa1292; CHECKIZFHMIN-NEXT: feq.h a1, fa0, fa0293; CHECKIZFHMIN-NEXT: and a0, a1, a0294; CHECKIZFHMIN-NEXT: ret295;296; CHECKIZHINXMIN-LABEL: fcmp_ord:297; CHECKIZHINXMIN: # %bb.0:298; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1299; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0300; CHECKIZHINXMIN-NEXT: feq.s a1, a1, a1301; CHECKIZHINXMIN-NEXT: feq.s a0, a0, a0302; CHECKIZHINXMIN-NEXT: and a0, a0, a1303; CHECKIZHINXMIN-NEXT: ret304 %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ord", metadata !"fpexcept.strict") strictfp305 %2 = zext i1 %1 to i32306 ret i32 %2307}308 309; FIXME: We only need one frflags before the two flts and one fsflags after the310; two flts.311define i32 @fcmp_ueq(half %a, half %b) nounwind strictfp {312; CHECK-LABEL: fcmp_ueq:313; CHECK: # %bb.0:314; CHECK-NEXT: frflags a0315; CHECK-NEXT: flt.h a1, fa0, fa1316; CHECK-NEXT: fsflags a0317; CHECK-NEXT: feq.h zero, fa0, fa1318; CHECK-NEXT: frflags a0319; CHECK-NEXT: flt.h a2, fa1, fa0320; CHECK-NEXT: fsflags a0321; CHECK-NEXT: or a1, a2, a1322; CHECK-NEXT: xori a0, a1, 1323; CHECK-NEXT: feq.h zero, fa1, fa0324; CHECK-NEXT: ret325;326; CHECKIZHINX-LABEL: fcmp_ueq:327; CHECKIZHINX: # %bb.0:328; CHECKIZHINX-NEXT: frflags a2329; CHECKIZHINX-NEXT: flt.h a3, a0, a1330; CHECKIZHINX-NEXT: fsflags a2331; CHECKIZHINX-NEXT: feq.h zero, a0, a1332; CHECKIZHINX-NEXT: frflags a2333; CHECKIZHINX-NEXT: flt.h a4, a1, a0334; CHECKIZHINX-NEXT: fsflags a2335; CHECKIZHINX-NEXT: or a3, a4, a3336; CHECKIZHINX-NEXT: xori a2, a3, 1337; CHECKIZHINX-NEXT: feq.h zero, a1, a0338; CHECKIZHINX-NEXT: mv a0, a2339; CHECKIZHINX-NEXT: ret340;341; CHECKIZFHMIN-LABEL: fcmp_ueq:342; CHECKIZFHMIN: # %bb.0:343; CHECKIZFHMIN-NEXT: frflags a0344; CHECKIZFHMIN-NEXT: flt.h a1, fa0, fa1345; CHECKIZFHMIN-NEXT: fsflags a0346; CHECKIZFHMIN-NEXT: feq.h zero, fa0, fa1347; CHECKIZFHMIN-NEXT: frflags a0348; CHECKIZFHMIN-NEXT: flt.h a2, fa1, fa0349; CHECKIZFHMIN-NEXT: fsflags a0350; CHECKIZFHMIN-NEXT: or a1, a2, a1351; CHECKIZFHMIN-NEXT: xori a0, a1, 1352; CHECKIZFHMIN-NEXT: feq.h zero, fa1, fa0353; CHECKIZFHMIN-NEXT: ret354;355; CHECKIZHINXMIN-LABEL: fcmp_ueq:356; CHECKIZHINXMIN: # %bb.0:357; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1358; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a0359; CHECKIZHINXMIN-NEXT: frflags a0360; CHECKIZHINXMIN-NEXT: flt.s a3, a2, a1361; CHECKIZHINXMIN-NEXT: fsflags a0362; CHECKIZHINXMIN-NEXT: feq.s zero, a2, a1363; CHECKIZHINXMIN-NEXT: frflags a0364; CHECKIZHINXMIN-NEXT: flt.s a4, a1, a2365; CHECKIZHINXMIN-NEXT: fsflags a0366; CHECKIZHINXMIN-NEXT: or a3, a4, a3367; CHECKIZHINXMIN-NEXT: xori a0, a3, 1368; CHECKIZHINXMIN-NEXT: feq.s zero, a1, a2369; CHECKIZHINXMIN-NEXT: ret370 %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ueq", metadata !"fpexcept.strict") strictfp371 %2 = zext i1 %1 to i32372 ret i32 %2373}374 375define i32 @fcmp_ugt(half %a, half %b) nounwind strictfp {376; CHECK-LABEL: fcmp_ugt:377; CHECK: # %bb.0:378; CHECK-NEXT: frflags a0379; CHECK-NEXT: fle.h a1, fa0, fa1380; CHECK-NEXT: fsflags a0381; CHECK-NEXT: xori a0, a1, 1382; CHECK-NEXT: feq.h zero, fa0, fa1383; CHECK-NEXT: ret384;385; CHECKIZHINX-LABEL: fcmp_ugt:386; CHECKIZHINX: # %bb.0:387; CHECKIZHINX-NEXT: frflags a2388; CHECKIZHINX-NEXT: fle.h a3, a0, a1389; CHECKIZHINX-NEXT: fsflags a2390; CHECKIZHINX-NEXT: xori a2, a3, 1391; CHECKIZHINX-NEXT: feq.h zero, a0, a1392; CHECKIZHINX-NEXT: mv a0, a2393; CHECKIZHINX-NEXT: ret394;395; CHECKIZFHMIN-LABEL: fcmp_ugt:396; CHECKIZFHMIN: # %bb.0:397; CHECKIZFHMIN-NEXT: frflags a0398; CHECKIZFHMIN-NEXT: fle.h a1, fa0, fa1399; CHECKIZFHMIN-NEXT: fsflags a0400; CHECKIZFHMIN-NEXT: xori a0, a1, 1401; CHECKIZFHMIN-NEXT: feq.h zero, fa0, fa1402; CHECKIZFHMIN-NEXT: ret403;404; CHECKIZHINXMIN-LABEL: fcmp_ugt:405; CHECKIZHINXMIN: # %bb.0:406; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1407; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a0408; CHECKIZHINXMIN-NEXT: frflags a0409; CHECKIZHINXMIN-NEXT: fle.s a3, a2, a1410; CHECKIZHINXMIN-NEXT: fsflags a0411; CHECKIZHINXMIN-NEXT: xori a0, a3, 1412; CHECKIZHINXMIN-NEXT: feq.s zero, a2, a1413; CHECKIZHINXMIN-NEXT: ret414 %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ugt", metadata !"fpexcept.strict") strictfp415 %2 = zext i1 %1 to i32416 ret i32 %2417}418 419define i32 @fcmp_uge(half %a, half %b) nounwind strictfp {420; CHECK-LABEL: fcmp_uge:421; CHECK: # %bb.0:422; CHECK-NEXT: frflags a0423; CHECK-NEXT: flt.h a1, fa0, fa1424; CHECK-NEXT: fsflags a0425; CHECK-NEXT: xori a0, a1, 1426; CHECK-NEXT: feq.h zero, fa0, fa1427; CHECK-NEXT: ret428;429; CHECKIZHINX-LABEL: fcmp_uge:430; CHECKIZHINX: # %bb.0:431; CHECKIZHINX-NEXT: frflags a2432; CHECKIZHINX-NEXT: flt.h a3, a0, a1433; CHECKIZHINX-NEXT: fsflags a2434; CHECKIZHINX-NEXT: xori a2, a3, 1435; CHECKIZHINX-NEXT: feq.h zero, a0, a1436; CHECKIZHINX-NEXT: mv a0, a2437; CHECKIZHINX-NEXT: ret438;439; CHECKIZFHMIN-LABEL: fcmp_uge:440; CHECKIZFHMIN: # %bb.0:441; CHECKIZFHMIN-NEXT: frflags a0442; CHECKIZFHMIN-NEXT: flt.h a1, fa0, fa1443; CHECKIZFHMIN-NEXT: fsflags a0444; CHECKIZFHMIN-NEXT: xori a0, a1, 1445; CHECKIZFHMIN-NEXT: feq.h zero, fa0, fa1446; CHECKIZFHMIN-NEXT: ret447;448; CHECKIZHINXMIN-LABEL: fcmp_uge:449; CHECKIZHINXMIN: # %bb.0:450; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1451; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a0452; CHECKIZHINXMIN-NEXT: frflags a0453; CHECKIZHINXMIN-NEXT: flt.s a3, a2, a1454; CHECKIZHINXMIN-NEXT: fsflags a0455; CHECKIZHINXMIN-NEXT: xori a0, a3, 1456; CHECKIZHINXMIN-NEXT: feq.s zero, a2, a1457; CHECKIZHINXMIN-NEXT: ret458 %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"uge", metadata !"fpexcept.strict") strictfp459 %2 = zext i1 %1 to i32460 ret i32 %2461}462 463define i32 @fcmp_ult(half %a, half %b) nounwind strictfp {464; CHECK-LABEL: fcmp_ult:465; CHECK: # %bb.0:466; CHECK-NEXT: frflags a0467; CHECK-NEXT: fle.h a1, fa1, fa0468; CHECK-NEXT: fsflags a0469; CHECK-NEXT: xori a0, a1, 1470; CHECK-NEXT: feq.h zero, fa1, fa0471; CHECK-NEXT: ret472;473; CHECKIZHINX-LABEL: fcmp_ult:474; CHECKIZHINX: # %bb.0:475; CHECKIZHINX-NEXT: frflags a2476; CHECKIZHINX-NEXT: fle.h a3, a1, a0477; CHECKIZHINX-NEXT: fsflags a2478; CHECKIZHINX-NEXT: xori a2, a3, 1479; CHECKIZHINX-NEXT: feq.h zero, a1, a0480; CHECKIZHINX-NEXT: mv a0, a2481; CHECKIZHINX-NEXT: ret482;483; CHECKIZFHMIN-LABEL: fcmp_ult:484; CHECKIZFHMIN: # %bb.0:485; CHECKIZFHMIN-NEXT: frflags a0486; CHECKIZFHMIN-NEXT: fle.h a1, fa1, fa0487; CHECKIZFHMIN-NEXT: fsflags a0488; CHECKIZFHMIN-NEXT: xori a0, a1, 1489; CHECKIZFHMIN-NEXT: feq.h zero, fa1, fa0490; CHECKIZFHMIN-NEXT: ret491;492; CHECKIZHINXMIN-LABEL: fcmp_ult:493; CHECKIZHINXMIN: # %bb.0:494; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a0495; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1496; CHECKIZHINXMIN-NEXT: frflags a0497; CHECKIZHINXMIN-NEXT: fle.s a3, a1, a2498; CHECKIZHINXMIN-NEXT: fsflags a0499; CHECKIZHINXMIN-NEXT: xori a0, a3, 1500; CHECKIZHINXMIN-NEXT: feq.s zero, a1, a2501; CHECKIZHINXMIN-NEXT: ret502 %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ult", metadata !"fpexcept.strict") strictfp503 %2 = zext i1 %1 to i32504 ret i32 %2505}506 507define i32 @fcmp_ule(half %a, half %b) nounwind strictfp {508; CHECK-LABEL: fcmp_ule:509; CHECK: # %bb.0:510; CHECK-NEXT: frflags a0511; CHECK-NEXT: flt.h a1, fa1, fa0512; CHECK-NEXT: fsflags a0513; CHECK-NEXT: xori a0, a1, 1514; CHECK-NEXT: feq.h zero, fa1, fa0515; CHECK-NEXT: ret516;517; CHECKIZHINX-LABEL: fcmp_ule:518; CHECKIZHINX: # %bb.0:519; CHECKIZHINX-NEXT: frflags a2520; CHECKIZHINX-NEXT: flt.h a3, a1, a0521; CHECKIZHINX-NEXT: fsflags a2522; CHECKIZHINX-NEXT: xori a2, a3, 1523; CHECKIZHINX-NEXT: feq.h zero, a1, a0524; CHECKIZHINX-NEXT: mv a0, a2525; CHECKIZHINX-NEXT: ret526;527; CHECKIZFHMIN-LABEL: fcmp_ule:528; CHECKIZFHMIN: # %bb.0:529; CHECKIZFHMIN-NEXT: frflags a0530; CHECKIZFHMIN-NEXT: flt.h a1, fa1, fa0531; CHECKIZFHMIN-NEXT: fsflags a0532; CHECKIZFHMIN-NEXT: xori a0, a1, 1533; CHECKIZFHMIN-NEXT: feq.h zero, fa1, fa0534; CHECKIZFHMIN-NEXT: ret535;536; CHECKIZHINXMIN-LABEL: fcmp_ule:537; CHECKIZHINXMIN: # %bb.0:538; CHECKIZHINXMIN-NEXT: fcvt.s.h a2, a0539; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1540; CHECKIZHINXMIN-NEXT: frflags a0541; CHECKIZHINXMIN-NEXT: flt.s a3, a1, a2542; CHECKIZHINXMIN-NEXT: fsflags a0543; CHECKIZHINXMIN-NEXT: xori a0, a3, 1544; CHECKIZHINXMIN-NEXT: feq.s zero, a1, a2545; CHECKIZHINXMIN-NEXT: ret546 %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ule", metadata !"fpexcept.strict") strictfp547 %2 = zext i1 %1 to i32548 ret i32 %2549}550 551define i32 @fcmp_une(half %a, half %b) nounwind strictfp {552; CHECK-LABEL: fcmp_une:553; CHECK: # %bb.0:554; CHECK-NEXT: feq.h a0, fa0, fa1555; CHECK-NEXT: xori a0, a0, 1556; CHECK-NEXT: ret557;558; CHECKIZHINX-LABEL: fcmp_une:559; CHECKIZHINX: # %bb.0:560; CHECKIZHINX-NEXT: feq.h a0, a0, a1561; CHECKIZHINX-NEXT: xori a0, a0, 1562; CHECKIZHINX-NEXT: ret563;564; CHECKIZFHMIN-LABEL: fcmp_une:565; CHECKIZFHMIN: # %bb.0:566; CHECKIZFHMIN-NEXT: feq.h a0, fa0, fa1567; CHECKIZFHMIN-NEXT: xori a0, a0, 1568; CHECKIZFHMIN-NEXT: ret569;570; CHECKIZHINXMIN-LABEL: fcmp_une:571; CHECKIZHINXMIN: # %bb.0:572; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1573; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0574; CHECKIZHINXMIN-NEXT: feq.s a0, a0, a1575; CHECKIZHINXMIN-NEXT: xori a0, a0, 1576; CHECKIZHINXMIN-NEXT: ret577 %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"une", metadata !"fpexcept.strict") strictfp578 %2 = zext i1 %1 to i32579 ret i32 %2580}581 582define i32 @fcmp_uno(half %a, half %b) nounwind strictfp {583; CHECK-LABEL: fcmp_uno:584; CHECK: # %bb.0:585; CHECK-NEXT: feq.h a0, fa1, fa1586; CHECK-NEXT: feq.h a1, fa0, fa0587; CHECK-NEXT: and a0, a1, a0588; CHECK-NEXT: xori a0, a0, 1589; CHECK-NEXT: ret590;591; CHECKIZHINX-LABEL: fcmp_uno:592; CHECKIZHINX: # %bb.0:593; CHECKIZHINX-NEXT: feq.h a1, a1, a1594; CHECKIZHINX-NEXT: feq.h a0, a0, a0595; CHECKIZHINX-NEXT: and a0, a0, a1596; CHECKIZHINX-NEXT: xori a0, a0, 1597; CHECKIZHINX-NEXT: ret598;599; CHECKIZFHMIN-LABEL: fcmp_uno:600; CHECKIZFHMIN: # %bb.0:601; CHECKIZFHMIN-NEXT: feq.h a0, fa1, fa1602; CHECKIZFHMIN-NEXT: feq.h a1, fa0, fa0603; CHECKIZFHMIN-NEXT: and a0, a1, a0604; CHECKIZFHMIN-NEXT: xori a0, a0, 1605; CHECKIZFHMIN-NEXT: ret606;607; CHECKIZHINXMIN-LABEL: fcmp_uno:608; CHECKIZHINXMIN: # %bb.0:609; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1610; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0611; CHECKIZHINXMIN-NEXT: feq.s a1, a1, a1612; CHECKIZHINXMIN-NEXT: feq.s a0, a0, a0613; CHECKIZHINXMIN-NEXT: and a0, a0, a1614; CHECKIZHINXMIN-NEXT: xori a0, a0, 1615; CHECKIZHINXMIN-NEXT: ret616 %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"uno", metadata !"fpexcept.strict") strictfp617 %2 = zext i1 %1 to i32618 ret i32 %2619}620 621define i32 @fcmps_oeq(half %a, half %b) nounwind strictfp {622; CHECK-LABEL: fcmps_oeq:623; CHECK: # %bb.0:624; CHECK-NEXT: fle.h a0, fa1, fa0625; CHECK-NEXT: fle.h a1, fa0, fa1626; CHECK-NEXT: and a0, a1, a0627; CHECK-NEXT: ret628;629; CHECKIZHINX-LABEL: fcmps_oeq:630; CHECKIZHINX: # %bb.0:631; CHECKIZHINX-NEXT: fle.h a2, a1, a0632; CHECKIZHINX-NEXT: fle.h a0, a0, a1633; CHECKIZHINX-NEXT: and a0, a0, a2634; CHECKIZHINX-NEXT: ret635;636; CHECKIZFHMIN-LABEL: fcmps_oeq:637; CHECKIZFHMIN: # %bb.0:638; CHECKIZFHMIN-NEXT: fle.h a0, fa1, fa0639; CHECKIZFHMIN-NEXT: fle.h a1, fa0, fa1640; CHECKIZFHMIN-NEXT: and a0, a1, a0641; CHECKIZFHMIN-NEXT: ret642;643; CHECKIZHINXMIN-LABEL: fcmps_oeq:644; CHECKIZHINXMIN: # %bb.0:645; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0646; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1647; CHECKIZHINXMIN-NEXT: fle.s a2, a1, a0648; CHECKIZHINXMIN-NEXT: fle.s a0, a0, a1649; CHECKIZHINXMIN-NEXT: and a0, a0, a2650; CHECKIZHINXMIN-NEXT: ret651 %1 = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"oeq", metadata !"fpexcept.strict") strictfp652 %2 = zext i1 %1 to i32653 ret i32 %2654}655 656define i32 @fcmps_ogt(half %a, half %b) nounwind strictfp {657; CHECK-LABEL: fcmps_ogt:658; CHECK: # %bb.0:659; CHECK-NEXT: flt.h a0, fa1, fa0660; CHECK-NEXT: ret661;662; CHECKIZHINX-LABEL: fcmps_ogt:663; CHECKIZHINX: # %bb.0:664; CHECKIZHINX-NEXT: flt.h a0, a1, a0665; CHECKIZHINX-NEXT: ret666;667; CHECKIZFHMIN-LABEL: fcmps_ogt:668; CHECKIZFHMIN: # %bb.0:669; CHECKIZFHMIN-NEXT: flt.h a0, fa1, fa0670; CHECKIZFHMIN-NEXT: ret671;672; CHECKIZHINXMIN-LABEL: fcmps_ogt:673; CHECKIZHINXMIN: # %bb.0:674; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0675; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1676; CHECKIZHINXMIN-NEXT: flt.s a0, a1, a0677; CHECKIZHINXMIN-NEXT: ret678 %1 = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"ogt", metadata !"fpexcept.strict") strictfp679 %2 = zext i1 %1 to i32680 ret i32 %2681}682 683define i32 @fcmps_oge(half %a, half %b) nounwind strictfp {684; CHECK-LABEL: fcmps_oge:685; CHECK: # %bb.0:686; CHECK-NEXT: fle.h a0, fa1, fa0687; CHECK-NEXT: ret688;689; CHECKIZHINX-LABEL: fcmps_oge:690; CHECKIZHINX: # %bb.0:691; CHECKIZHINX-NEXT: fle.h a0, a1, a0692; CHECKIZHINX-NEXT: ret693;694; CHECKIZFHMIN-LABEL: fcmps_oge:695; CHECKIZFHMIN: # %bb.0:696; CHECKIZFHMIN-NEXT: fle.h a0, fa1, fa0697; CHECKIZFHMIN-NEXT: ret698;699; CHECKIZHINXMIN-LABEL: fcmps_oge:700; CHECKIZHINXMIN: # %bb.0:701; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0702; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1703; CHECKIZHINXMIN-NEXT: fle.s a0, a1, a0704; CHECKIZHINXMIN-NEXT: ret705 %1 = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"oge", metadata !"fpexcept.strict") strictfp706 %2 = zext i1 %1 to i32707 ret i32 %2708}709 710define i32 @fcmps_olt(half %a, half %b) nounwind strictfp {711; CHECK-LABEL: fcmps_olt:712; CHECK: # %bb.0:713; CHECK-NEXT: flt.h a0, fa0, fa1714; CHECK-NEXT: ret715;716; CHECKIZHINX-LABEL: fcmps_olt:717; CHECKIZHINX: # %bb.0:718; CHECKIZHINX-NEXT: flt.h a0, a0, a1719; CHECKIZHINX-NEXT: ret720;721; CHECKIZFHMIN-LABEL: fcmps_olt:722; CHECKIZFHMIN: # %bb.0:723; CHECKIZFHMIN-NEXT: flt.h a0, fa0, fa1724; CHECKIZFHMIN-NEXT: ret725;726; CHECKIZHINXMIN-LABEL: fcmps_olt:727; CHECKIZHINXMIN: # %bb.0:728; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1729; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0730; CHECKIZHINXMIN-NEXT: flt.s a0, a0, a1731; CHECKIZHINXMIN-NEXT: ret732 %1 = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"olt", metadata !"fpexcept.strict") strictfp733 %2 = zext i1 %1 to i32734 ret i32 %2735}736 737define i32 @fcmps_ole(half %a, half %b) nounwind strictfp {738; CHECK-LABEL: fcmps_ole:739; CHECK: # %bb.0:740; CHECK-NEXT: fle.h a0, fa0, fa1741; CHECK-NEXT: ret742;743; CHECKIZHINX-LABEL: fcmps_ole:744; CHECKIZHINX: # %bb.0:745; CHECKIZHINX-NEXT: fle.h a0, a0, a1746; CHECKIZHINX-NEXT: ret747;748; CHECKIZFHMIN-LABEL: fcmps_ole:749; CHECKIZFHMIN: # %bb.0:750; CHECKIZFHMIN-NEXT: fle.h a0, fa0, fa1751; CHECKIZFHMIN-NEXT: ret752;753; CHECKIZHINXMIN-LABEL: fcmps_ole:754; CHECKIZHINXMIN: # %bb.0:755; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1756; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0757; CHECKIZHINXMIN-NEXT: fle.s a0, a0, a1758; CHECKIZHINXMIN-NEXT: ret759 %1 = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"ole", metadata !"fpexcept.strict") strictfp760 %2 = zext i1 %1 to i32761 ret i32 %2762}763 764define i32 @fcmps_one(half %a, half %b) nounwind strictfp {765; CHECK-LABEL: fcmps_one:766; CHECK: # %bb.0:767; CHECK-NEXT: flt.h a0, fa0, fa1768; CHECK-NEXT: flt.h a1, fa1, fa0769; CHECK-NEXT: or a0, a1, a0770; CHECK-NEXT: ret771;772; CHECKIZHINX-LABEL: fcmps_one:773; CHECKIZHINX: # %bb.0:774; CHECKIZHINX-NEXT: flt.h a2, a0, a1775; CHECKIZHINX-NEXT: flt.h a0, a1, a0776; CHECKIZHINX-NEXT: or a0, a0, a2777; CHECKIZHINX-NEXT: ret778;779; CHECKIZFHMIN-LABEL: fcmps_one:780; CHECKIZFHMIN: # %bb.0:781; CHECKIZFHMIN-NEXT: flt.h a0, fa0, fa1782; CHECKIZFHMIN-NEXT: flt.h a1, fa1, fa0783; CHECKIZFHMIN-NEXT: or a0, a1, a0784; CHECKIZFHMIN-NEXT: ret785;786; CHECKIZHINXMIN-LABEL: fcmps_one:787; CHECKIZHINXMIN: # %bb.0:788; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1789; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0790; CHECKIZHINXMIN-NEXT: flt.s a2, a0, a1791; CHECKIZHINXMIN-NEXT: flt.s a0, a1, a0792; CHECKIZHINXMIN-NEXT: or a0, a0, a2793; CHECKIZHINXMIN-NEXT: ret794 %1 = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"one", metadata !"fpexcept.strict") strictfp795 %2 = zext i1 %1 to i32796 ret i32 %2797}798 799define i32 @fcmps_ord(half %a, half %b) nounwind strictfp {800; CHECK-LABEL: fcmps_ord:801; CHECK: # %bb.0:802; CHECK-NEXT: fle.h a0, fa1, fa1803; CHECK-NEXT: fle.h a1, fa0, fa0804; CHECK-NEXT: and a0, a1, a0805; CHECK-NEXT: ret806;807; CHECKIZHINX-LABEL: fcmps_ord:808; CHECKIZHINX: # %bb.0:809; CHECKIZHINX-NEXT: fle.h a1, a1, a1810; CHECKIZHINX-NEXT: fle.h a0, a0, a0811; CHECKIZHINX-NEXT: and a0, a0, a1812; CHECKIZHINX-NEXT: ret813;814; CHECKIZFHMIN-LABEL: fcmps_ord:815; CHECKIZFHMIN: # %bb.0:816; CHECKIZFHMIN-NEXT: fle.h a0, fa1, fa1817; CHECKIZFHMIN-NEXT: fle.h a1, fa0, fa0818; CHECKIZFHMIN-NEXT: and a0, a1, a0819; CHECKIZFHMIN-NEXT: ret820;821; CHECKIZHINXMIN-LABEL: fcmps_ord:822; CHECKIZHINXMIN: # %bb.0:823; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1824; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0825; CHECKIZHINXMIN-NEXT: fle.s a1, a1, a1826; CHECKIZHINXMIN-NEXT: fle.s a0, a0, a0827; CHECKIZHINXMIN-NEXT: and a0, a0, a1828; CHECKIZHINXMIN-NEXT: ret829 %1 = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"ord", metadata !"fpexcept.strict") strictfp830 %2 = zext i1 %1 to i32831 ret i32 %2832}833 834define i32 @fcmps_ueq(half %a, half %b) nounwind strictfp {835; CHECK-LABEL: fcmps_ueq:836; CHECK: # %bb.0:837; CHECK-NEXT: flt.h a0, fa0, fa1838; CHECK-NEXT: flt.h a1, fa1, fa0839; CHECK-NEXT: or a0, a1, a0840; CHECK-NEXT: xori a0, a0, 1841; CHECK-NEXT: ret842;843; CHECKIZHINX-LABEL: fcmps_ueq:844; CHECKIZHINX: # %bb.0:845; CHECKIZHINX-NEXT: flt.h a2, a0, a1846; CHECKIZHINX-NEXT: flt.h a0, a1, a0847; CHECKIZHINX-NEXT: or a0, a0, a2848; CHECKIZHINX-NEXT: xori a0, a0, 1849; CHECKIZHINX-NEXT: ret850;851; CHECKIZFHMIN-LABEL: fcmps_ueq:852; CHECKIZFHMIN: # %bb.0:853; CHECKIZFHMIN-NEXT: flt.h a0, fa0, fa1854; CHECKIZFHMIN-NEXT: flt.h a1, fa1, fa0855; CHECKIZFHMIN-NEXT: or a0, a1, a0856; CHECKIZFHMIN-NEXT: xori a0, a0, 1857; CHECKIZFHMIN-NEXT: ret858;859; CHECKIZHINXMIN-LABEL: fcmps_ueq:860; CHECKIZHINXMIN: # %bb.0:861; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1862; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0863; CHECKIZHINXMIN-NEXT: flt.s a2, a0, a1864; CHECKIZHINXMIN-NEXT: flt.s a0, a1, a0865; CHECKIZHINXMIN-NEXT: or a0, a0, a2866; CHECKIZHINXMIN-NEXT: xori a0, a0, 1867; CHECKIZHINXMIN-NEXT: ret868 %1 = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"ueq", metadata !"fpexcept.strict") strictfp869 %2 = zext i1 %1 to i32870 ret i32 %2871}872 873define i32 @fcmps_ugt(half %a, half %b) nounwind strictfp {874; CHECK-LABEL: fcmps_ugt:875; CHECK: # %bb.0:876; CHECK-NEXT: fle.h a0, fa0, fa1877; CHECK-NEXT: xori a0, a0, 1878; CHECK-NEXT: ret879;880; CHECKIZHINX-LABEL: fcmps_ugt:881; CHECKIZHINX: # %bb.0:882; CHECKIZHINX-NEXT: fle.h a0, a0, a1883; CHECKIZHINX-NEXT: xori a0, a0, 1884; CHECKIZHINX-NEXT: ret885;886; CHECKIZFHMIN-LABEL: fcmps_ugt:887; CHECKIZFHMIN: # %bb.0:888; CHECKIZFHMIN-NEXT: fle.h a0, fa0, fa1889; CHECKIZFHMIN-NEXT: xori a0, a0, 1890; CHECKIZFHMIN-NEXT: ret891;892; CHECKIZHINXMIN-LABEL: fcmps_ugt:893; CHECKIZHINXMIN: # %bb.0:894; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1895; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0896; CHECKIZHINXMIN-NEXT: fle.s a0, a0, a1897; CHECKIZHINXMIN-NEXT: xori a0, a0, 1898; CHECKIZHINXMIN-NEXT: ret899 %1 = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"ugt", metadata !"fpexcept.strict") strictfp900 %2 = zext i1 %1 to i32901 ret i32 %2902}903 904define i32 @fcmps_uge(half %a, half %b) nounwind strictfp {905; CHECK-LABEL: fcmps_uge:906; CHECK: # %bb.0:907; CHECK-NEXT: flt.h a0, fa0, fa1908; CHECK-NEXT: xori a0, a0, 1909; CHECK-NEXT: ret910;911; CHECKIZHINX-LABEL: fcmps_uge:912; CHECKIZHINX: # %bb.0:913; CHECKIZHINX-NEXT: flt.h a0, a0, a1914; CHECKIZHINX-NEXT: xori a0, a0, 1915; CHECKIZHINX-NEXT: ret916;917; CHECKIZFHMIN-LABEL: fcmps_uge:918; CHECKIZFHMIN: # %bb.0:919; CHECKIZFHMIN-NEXT: flt.h a0, fa0, fa1920; CHECKIZFHMIN-NEXT: xori a0, a0, 1921; CHECKIZFHMIN-NEXT: ret922;923; CHECKIZHINXMIN-LABEL: fcmps_uge:924; CHECKIZHINXMIN: # %bb.0:925; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1926; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0927; CHECKIZHINXMIN-NEXT: flt.s a0, a0, a1928; CHECKIZHINXMIN-NEXT: xori a0, a0, 1929; CHECKIZHINXMIN-NEXT: ret930 %1 = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"uge", metadata !"fpexcept.strict") strictfp931 %2 = zext i1 %1 to i32932 ret i32 %2933}934 935define i32 @fcmps_ult(half %a, half %b) nounwind strictfp {936; CHECK-LABEL: fcmps_ult:937; CHECK: # %bb.0:938; CHECK-NEXT: fle.h a0, fa1, fa0939; CHECK-NEXT: xori a0, a0, 1940; CHECK-NEXT: ret941;942; CHECKIZHINX-LABEL: fcmps_ult:943; CHECKIZHINX: # %bb.0:944; CHECKIZHINX-NEXT: fle.h a0, a1, a0945; CHECKIZHINX-NEXT: xori a0, a0, 1946; CHECKIZHINX-NEXT: ret947;948; CHECKIZFHMIN-LABEL: fcmps_ult:949; CHECKIZFHMIN: # %bb.0:950; CHECKIZFHMIN-NEXT: fle.h a0, fa1, fa0951; CHECKIZFHMIN-NEXT: xori a0, a0, 1952; CHECKIZFHMIN-NEXT: ret953;954; CHECKIZHINXMIN-LABEL: fcmps_ult:955; CHECKIZHINXMIN: # %bb.0:956; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0957; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1958; CHECKIZHINXMIN-NEXT: fle.s a0, a1, a0959; CHECKIZHINXMIN-NEXT: xori a0, a0, 1960; CHECKIZHINXMIN-NEXT: ret961 %1 = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"ult", metadata !"fpexcept.strict") strictfp962 %2 = zext i1 %1 to i32963 ret i32 %2964}965 966define i32 @fcmps_ule(half %a, half %b) nounwind strictfp {967; CHECK-LABEL: fcmps_ule:968; CHECK: # %bb.0:969; CHECK-NEXT: flt.h a0, fa1, fa0970; CHECK-NEXT: xori a0, a0, 1971; CHECK-NEXT: ret972;973; CHECKIZHINX-LABEL: fcmps_ule:974; CHECKIZHINX: # %bb.0:975; CHECKIZHINX-NEXT: flt.h a0, a1, a0976; CHECKIZHINX-NEXT: xori a0, a0, 1977; CHECKIZHINX-NEXT: ret978;979; CHECKIZFHMIN-LABEL: fcmps_ule:980; CHECKIZFHMIN: # %bb.0:981; CHECKIZFHMIN-NEXT: flt.h a0, fa1, fa0982; CHECKIZFHMIN-NEXT: xori a0, a0, 1983; CHECKIZFHMIN-NEXT: ret984;985; CHECKIZHINXMIN-LABEL: fcmps_ule:986; CHECKIZHINXMIN: # %bb.0:987; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a0988; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a1989; CHECKIZHINXMIN-NEXT: flt.s a0, a1, a0990; CHECKIZHINXMIN-NEXT: xori a0, a0, 1991; CHECKIZHINXMIN-NEXT: ret992 %1 = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"ule", metadata !"fpexcept.strict") strictfp993 %2 = zext i1 %1 to i32994 ret i32 %2995}996 997define i32 @fcmps_une(half %a, half %b) nounwind strictfp {998; CHECK-LABEL: fcmps_une:999; CHECK: # %bb.0:1000; CHECK-NEXT: fle.h a0, fa1, fa01001; CHECK-NEXT: fle.h a1, fa0, fa11002; CHECK-NEXT: and a0, a1, a01003; CHECK-NEXT: xori a0, a0, 11004; CHECK-NEXT: ret1005;1006; CHECKIZHINX-LABEL: fcmps_une:1007; CHECKIZHINX: # %bb.0:1008; CHECKIZHINX-NEXT: fle.h a2, a1, a01009; CHECKIZHINX-NEXT: fle.h a0, a0, a11010; CHECKIZHINX-NEXT: and a0, a0, a21011; CHECKIZHINX-NEXT: xori a0, a0, 11012; CHECKIZHINX-NEXT: ret1013;1014; CHECKIZFHMIN-LABEL: fcmps_une:1015; CHECKIZFHMIN: # %bb.0:1016; CHECKIZFHMIN-NEXT: fle.h a0, fa1, fa01017; CHECKIZFHMIN-NEXT: fle.h a1, fa0, fa11018; CHECKIZFHMIN-NEXT: and a0, a1, a01019; CHECKIZFHMIN-NEXT: xori a0, a0, 11020; CHECKIZFHMIN-NEXT: ret1021;1022; CHECKIZHINXMIN-LABEL: fcmps_une:1023; CHECKIZHINXMIN: # %bb.0:1024; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a01025; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a11026; CHECKIZHINXMIN-NEXT: fle.s a2, a1, a01027; CHECKIZHINXMIN-NEXT: fle.s a0, a0, a11028; CHECKIZHINXMIN-NEXT: and a0, a0, a21029; CHECKIZHINXMIN-NEXT: xori a0, a0, 11030; CHECKIZHINXMIN-NEXT: ret1031 %1 = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"une", metadata !"fpexcept.strict") strictfp1032 %2 = zext i1 %1 to i321033 ret i32 %21034}1035 1036define i32 @fcmps_uno(half %a, half %b) nounwind strictfp {1037; CHECK-LABEL: fcmps_uno:1038; CHECK: # %bb.0:1039; CHECK-NEXT: fle.h a0, fa1, fa11040; CHECK-NEXT: fle.h a1, fa0, fa01041; CHECK-NEXT: and a0, a1, a01042; CHECK-NEXT: xori a0, a0, 11043; CHECK-NEXT: ret1044;1045; CHECKIZHINX-LABEL: fcmps_uno:1046; CHECKIZHINX: # %bb.0:1047; CHECKIZHINX-NEXT: fle.h a1, a1, a11048; CHECKIZHINX-NEXT: fle.h a0, a0, a01049; CHECKIZHINX-NEXT: and a0, a0, a11050; CHECKIZHINX-NEXT: xori a0, a0, 11051; CHECKIZHINX-NEXT: ret1052;1053; CHECKIZFHMIN-LABEL: fcmps_uno:1054; CHECKIZFHMIN: # %bb.0:1055; CHECKIZFHMIN-NEXT: fle.h a0, fa1, fa11056; CHECKIZFHMIN-NEXT: fle.h a1, fa0, fa01057; CHECKIZFHMIN-NEXT: and a0, a1, a01058; CHECKIZFHMIN-NEXT: xori a0, a0, 11059; CHECKIZFHMIN-NEXT: ret1060;1061; CHECKIZHINXMIN-LABEL: fcmps_uno:1062; CHECKIZHINXMIN: # %bb.0:1063; CHECKIZHINXMIN-NEXT: fcvt.s.h a1, a11064; CHECKIZHINXMIN-NEXT: fcvt.s.h a0, a01065; CHECKIZHINXMIN-NEXT: fle.s a1, a1, a11066; CHECKIZHINXMIN-NEXT: fle.s a0, a0, a01067; CHECKIZHINXMIN-NEXT: and a0, a0, a11068; CHECKIZHINXMIN-NEXT: xori a0, a0, 11069; CHECKIZHINXMIN-NEXT: ret1070 %1 = call i1 @llvm.experimental.constrained.fcmps.f16(half %a, half %b, metadata !"uno", metadata !"fpexcept.strict") strictfp1071 %2 = zext i1 %1 to i321072 ret i32 %21073}1074