189 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zfh \3; RUN: -verify-machineinstrs -target-abi ilp32f | \4; RUN: FileCheck -check-prefixes=CHECKIZFH %s5; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zfh \6; RUN: -verify-machineinstrs -target-abi lp64f | \7; RUN: FileCheck -check-prefixes=CHECKIZFH %s8; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+zhinx \9; RUN: -verify-machineinstrs -target-abi ilp32 | \10; RUN: FileCheck -check-prefixes=CHECKIZHINX %s11; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+zhinx \12; RUN: -verify-machineinstrs -target-abi lp64 | \13; RUN: FileCheck -check-prefixes=CHECKIZHINX %s14 15define half @fminimum_f16(half %a, half %b) nounwind {16; CHECKIZFH-LABEL: fminimum_f16:17; CHECKIZFH: # %bb.0:18; CHECKIZFH-NEXT: feq.h a0, fa0, fa019; CHECKIZFH-NEXT: fmv.h fa5, fa120; CHECKIZFH-NEXT: beqz a0, .LBB0_321; CHECKIZFH-NEXT: # %bb.1:22; CHECKIZFH-NEXT: feq.h a0, fa1, fa123; CHECKIZFH-NEXT: beqz a0, .LBB0_424; CHECKIZFH-NEXT: .LBB0_2:25; CHECKIZFH-NEXT: fmin.h fa0, fa0, fa526; CHECKIZFH-NEXT: ret27; CHECKIZFH-NEXT: .LBB0_3:28; CHECKIZFH-NEXT: fmv.h fa5, fa029; CHECKIZFH-NEXT: feq.h a0, fa1, fa130; CHECKIZFH-NEXT: bnez a0, .LBB0_231; CHECKIZFH-NEXT: .LBB0_4:32; CHECKIZFH-NEXT: fmin.h fa0, fa1, fa533; CHECKIZFH-NEXT: ret34;35; CHECKIZHINX-LABEL: fminimum_f16:36; CHECKIZHINX: # %bb.0:37; CHECKIZHINX-NEXT: feq.h a3, a0, a038; CHECKIZHINX-NEXT: mv a2, a139; CHECKIZHINX-NEXT: beqz a3, .LBB0_340; CHECKIZHINX-NEXT: # %bb.1:41; CHECKIZHINX-NEXT: feq.h a3, a1, a142; CHECKIZHINX-NEXT: beqz a3, .LBB0_443; CHECKIZHINX-NEXT: .LBB0_2:44; CHECKIZHINX-NEXT: fmin.h a0, a0, a245; CHECKIZHINX-NEXT: ret46; CHECKIZHINX-NEXT: .LBB0_3:47; CHECKIZHINX-NEXT: mv a2, a048; CHECKIZHINX-NEXT: feq.h a3, a1, a149; CHECKIZHINX-NEXT: bnez a3, .LBB0_250; CHECKIZHINX-NEXT: .LBB0_4:51; CHECKIZHINX-NEXT: fmin.h a0, a1, a252; CHECKIZHINX-NEXT: ret53 %1 = call half @llvm.minimum.f16(half %a, half %b)54 ret half %155}56 57define half @fmaximum_f16(half %a, half %b) nounwind {58; CHECKIZFH-LABEL: fmaximum_f16:59; CHECKIZFH: # %bb.0:60; CHECKIZFH-NEXT: feq.h a0, fa0, fa061; CHECKIZFH-NEXT: fmv.h fa5, fa162; CHECKIZFH-NEXT: beqz a0, .LBB1_363; CHECKIZFH-NEXT: # %bb.1:64; CHECKIZFH-NEXT: feq.h a0, fa1, fa165; CHECKIZFH-NEXT: beqz a0, .LBB1_466; CHECKIZFH-NEXT: .LBB1_2:67; CHECKIZFH-NEXT: fmax.h fa0, fa0, fa568; CHECKIZFH-NEXT: ret69; CHECKIZFH-NEXT: .LBB1_3:70; CHECKIZFH-NEXT: fmv.h fa5, fa071; CHECKIZFH-NEXT: feq.h a0, fa1, fa172; CHECKIZFH-NEXT: bnez a0, .LBB1_273; CHECKIZFH-NEXT: .LBB1_4:74; CHECKIZFH-NEXT: fmax.h fa0, fa1, fa575; CHECKIZFH-NEXT: ret76;77; CHECKIZHINX-LABEL: fmaximum_f16:78; CHECKIZHINX: # %bb.0:79; CHECKIZHINX-NEXT: feq.h a3, a0, a080; CHECKIZHINX-NEXT: mv a2, a181; CHECKIZHINX-NEXT: beqz a3, .LBB1_382; CHECKIZHINX-NEXT: # %bb.1:83; CHECKIZHINX-NEXT: feq.h a3, a1, a184; CHECKIZHINX-NEXT: beqz a3, .LBB1_485; CHECKIZHINX-NEXT: .LBB1_2:86; CHECKIZHINX-NEXT: fmax.h a0, a0, a287; CHECKIZHINX-NEXT: ret88; CHECKIZHINX-NEXT: .LBB1_3:89; CHECKIZHINX-NEXT: mv a2, a090; CHECKIZHINX-NEXT: feq.h a3, a1, a191; CHECKIZHINX-NEXT: bnez a3, .LBB1_292; CHECKIZHINX-NEXT: .LBB1_4:93; CHECKIZHINX-NEXT: fmax.h a0, a1, a294; CHECKIZHINX-NEXT: ret95 %1 = call half @llvm.maximum.f16(half %a, half %b)96 ret half %197}98 99define half @fminimum_nnan_f16(half %a, half %b) nounwind {100; CHECKIZFH-LABEL: fminimum_nnan_f16:101; CHECKIZFH: # %bb.0:102; CHECKIZFH-NEXT: fmin.h fa0, fa0, fa1103; CHECKIZFH-NEXT: ret104;105; CHECKIZHINX-LABEL: fminimum_nnan_f16:106; CHECKIZHINX: # %bb.0:107; CHECKIZHINX-NEXT: fmin.h a0, a0, a1108; CHECKIZHINX-NEXT: ret109 %1 = call nnan half @llvm.minimum.f16(half %a, half %b)110 ret half %1111}112 113define half @fmaximum_nnan_f16(half %a, half %b) nounwind {114; CHECKIZFH-LABEL: fmaximum_nnan_f16:115; CHECKIZFH: # %bb.0:116; CHECKIZFH-NEXT: fmax.h fa0, fa0, fa1117; CHECKIZFH-NEXT: ret118;119; CHECKIZHINX-LABEL: fmaximum_nnan_f16:120; CHECKIZHINX: # %bb.0:121; CHECKIZHINX-NEXT: fmax.h a0, a0, a1122; CHECKIZHINX-NEXT: ret123 %1 = call nnan half @llvm.maximum.f16(half %a, half %b)124 ret half %1125}126 127define half @fminimum_nnan_attr_f16(half %a, half %b) nounwind "no-nans-fp-math"="true" {128; CHECKIZFH-LABEL: fminimum_nnan_attr_f16:129; CHECKIZFH: # %bb.0:130; CHECKIZFH-NEXT: fmin.h fa0, fa0, fa1131; CHECKIZFH-NEXT: ret132;133; CHECKIZHINX-LABEL: fminimum_nnan_attr_f16:134; CHECKIZHINX: # %bb.0:135; CHECKIZHINX-NEXT: fmin.h a0, a0, a1136; CHECKIZHINX-NEXT: ret137 %1 = call half @llvm.minimum.f16(half %a, half %b)138 ret half %1139}140 141define half @fminimum_nnan_op_f16(half %a, half %b) nounwind {142; CHECKIZFH-LABEL: fminimum_nnan_op_f16:143; CHECKIZFH: # %bb.0:144; CHECKIZFH-NEXT: feq.h a0, fa0, fa0145; CHECKIZFH-NEXT: bnez a0, .LBB5_2146; CHECKIZFH-NEXT: # %bb.1:147; CHECKIZFH-NEXT: fmin.h fa0, fa0, fa0148; CHECKIZFH-NEXT: ret149; CHECKIZFH-NEXT: .LBB5_2:150; CHECKIZFH-NEXT: fadd.h fa5, fa0, fa0151; CHECKIZFH-NEXT: fmin.h fa0, fa0, fa5152; CHECKIZFH-NEXT: ret153;154; CHECKIZHINX-LABEL: fminimum_nnan_op_f16:155; CHECKIZHINX: # %bb.0:156; CHECKIZHINX-NEXT: feq.h a1, a0, a0157; CHECKIZHINX-NEXT: bnez a1, .LBB5_2158; CHECKIZHINX-NEXT: # %bb.1:159; CHECKIZHINX-NEXT: fmin.h a0, a0, a0160; CHECKIZHINX-NEXT: ret161; CHECKIZHINX-NEXT: .LBB5_2:162; CHECKIZHINX-NEXT: fadd.h a1, a0, a0163; CHECKIZHINX-NEXT: fmin.h a0, a0, a1164; CHECKIZHINX-NEXT: ret165 %c = fadd nnan half %a, %a166 %1 = call half @llvm.minimum.f16(half %a, half %c)167 ret half %1168}169 170define half @fmaximum_nnan_op_f16(half %a, half %b) nounwind {171; CHECKIZFH-LABEL: fmaximum_nnan_op_f16:172; CHECKIZFH: # %bb.0:173; CHECKIZFH-NEXT: fadd.h fa5, fa0, fa1174; CHECKIZFH-NEXT: fsub.h fa4, fa0, fa1175; CHECKIZFH-NEXT: fmax.h fa0, fa5, fa4176; CHECKIZFH-NEXT: ret177;178; CHECKIZHINX-LABEL: fmaximum_nnan_op_f16:179; CHECKIZHINX: # %bb.0:180; CHECKIZHINX-NEXT: fadd.h a2, a0, a1181; CHECKIZHINX-NEXT: fsub.h a0, a0, a1182; CHECKIZHINX-NEXT: fmax.h a0, a2, a0183; CHECKIZHINX-NEXT: ret184 %c = fadd nnan half %a, %b185 %d = fsub nnan half %a, %b186 %1 = call half @llvm.maximum.f16(half %c, half %d)187 ret half %1188}189