brintos

brintos / llvm-project-archived public Read only

0
0
Text · 34.8 KiB · 88f0b9d Raw
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