brintos

brintos / llvm-project-archived public Read only

0
0
Text · 9.8 KiB · 9a5b913 Raw
343 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -target-abi ilp32f -mattr=+zfa,+zfh < %s \3; RUN:     | FileCheck %s4; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+zfa,+zfh < %s \5; RUN:     | FileCheck %s6; RUN: llc -mtriple=riscv32 -target-abi ilp32f -mattr=+zfa,+zfhmin < %s \7; RUN:     | FileCheck %s --check-prefix=ZFHMIN8; RUN: llc -mtriple=riscv64 -target-abi lp64f -mattr=+zfa,+zfhmin < %s \9; RUN:     | FileCheck %s --check-prefix=ZFHMIN10 11define half @fminm_h(half %a, half %b) nounwind {12; CHECK-LABEL: fminm_h:13; CHECK:       # %bb.0:14; CHECK-NEXT:    fminm.h fa0, fa0, fa115; CHECK-NEXT:    ret16;17; ZFHMIN-LABEL: fminm_h:18; ZFHMIN:       # %bb.0:19; ZFHMIN-NEXT:    fcvt.s.h fa5, fa120; ZFHMIN-NEXT:    fcvt.s.h fa4, fa021; ZFHMIN-NEXT:    fminm.s fa5, fa4, fa522; ZFHMIN-NEXT:    fcvt.h.s fa0, fa523; ZFHMIN-NEXT:    ret24  %1 = call half @llvm.minimum.f16(half %a, half %b)25  ret half %126}27 28define half @fmaxm_h(half %a, half %b) nounwind {29; CHECK-LABEL: fmaxm_h:30; CHECK:       # %bb.0:31; CHECK-NEXT:    fmaxm.h fa0, fa0, fa132; CHECK-NEXT:    ret33;34; ZFHMIN-LABEL: fmaxm_h:35; ZFHMIN:       # %bb.0:36; ZFHMIN-NEXT:    fcvt.s.h fa5, fa137; ZFHMIN-NEXT:    fcvt.s.h fa4, fa038; ZFHMIN-NEXT:    fmaxm.s fa5, fa4, fa539; ZFHMIN-NEXT:    fcvt.h.s fa0, fa540; ZFHMIN-NEXT:    ret41  %1 = tail call half @llvm.maximum.f16(half %a, half %b)42  ret half %143}44 45define half @fround_h_1(half %a) nounwind {46; CHECK-LABEL: fround_h_1:47; CHECK:       # %bb.0:48; CHECK-NEXT:    fround.h fa0, fa0, rmm49; CHECK-NEXT:    ret50;51; ZFHMIN-LABEL: fround_h_1:52; ZFHMIN:       # %bb.0:53; ZFHMIN-NEXT:    fcvt.s.h fa5, fa054; ZFHMIN-NEXT:    fround.s fa5, fa5, rmm55; ZFHMIN-NEXT:    fcvt.h.s fa0, fa556; ZFHMIN-NEXT:    ret57  %call = tail call half @llvm.round.f16(half %a) nounwind readnone58  ret half %call59}60 61define half @fround_h_2(half %a) nounwind {62; CHECK-LABEL: fround_h_2:63; CHECK:       # %bb.0:64; CHECK-NEXT:    fround.h fa0, fa0, rdn65; CHECK-NEXT:    ret66;67; ZFHMIN-LABEL: fround_h_2:68; ZFHMIN:       # %bb.0:69; ZFHMIN-NEXT:    fcvt.s.h fa5, fa070; ZFHMIN-NEXT:    fround.s fa5, fa5, rdn71; ZFHMIN-NEXT:    fcvt.h.s fa0, fa572; ZFHMIN-NEXT:    ret73  %call = tail call half @llvm.floor.f16(half %a) nounwind readnone74  ret half %call75}76 77define half @fround_h_3(half %a) nounwind {78; CHECK-LABEL: fround_h_3:79; CHECK:       # %bb.0:80; CHECK-NEXT:    fround.h fa0, fa0, rup81; CHECK-NEXT:    ret82;83; ZFHMIN-LABEL: fround_h_3:84; ZFHMIN:       # %bb.0:85; ZFHMIN-NEXT:    fcvt.s.h fa5, fa086; ZFHMIN-NEXT:    fround.s fa5, fa5, rup87; ZFHMIN-NEXT:    fcvt.h.s fa0, fa588; ZFHMIN-NEXT:    ret89  %call = tail call half @llvm.ceil.f16(half %a) nounwind readnone90  ret half %call91}92 93define half @fround_h_4(half %a) nounwind {94; CHECK-LABEL: fround_h_4:95; CHECK:       # %bb.0:96; CHECK-NEXT:    fround.h fa0, fa0, rtz97; CHECK-NEXT:    ret98;99; ZFHMIN-LABEL: fround_h_4:100; ZFHMIN:       # %bb.0:101; ZFHMIN-NEXT:    fcvt.s.h fa5, fa0102; ZFHMIN-NEXT:    fround.s fa5, fa5, rtz103; ZFHMIN-NEXT:    fcvt.h.s fa0, fa5104; ZFHMIN-NEXT:    ret105  %call = tail call half @llvm.trunc.f16(half %a) nounwind readnone106  ret half %call107}108 109define half @fround_h_5(half %a) nounwind {110; CHECK-LABEL: fround_h_5:111; CHECK:       # %bb.0:112; CHECK-NEXT:    fround.h fa0, fa0113; CHECK-NEXT:    ret114;115; ZFHMIN-LABEL: fround_h_5:116; ZFHMIN:       # %bb.0:117; ZFHMIN-NEXT:    fcvt.s.h fa5, fa0118; ZFHMIN-NEXT:    fround.s fa5, fa5119; ZFHMIN-NEXT:    fcvt.h.s fa0, fa5120; ZFHMIN-NEXT:    ret121  %call = tail call half @llvm.nearbyint.f16(half %a) nounwind readnone122  ret half %call123}124 125define half @fround_h_6(half %a) nounwind {126; CHECK-LABEL: fround_h_6:127; CHECK:       # %bb.0:128; CHECK-NEXT:    fround.h fa0, fa0, rne129; CHECK-NEXT:    ret130;131; ZFHMIN-LABEL: fround_h_6:132; ZFHMIN:       # %bb.0:133; ZFHMIN-NEXT:    fcvt.s.h fa5, fa0134; ZFHMIN-NEXT:    fround.s fa5, fa5, rne135; ZFHMIN-NEXT:    fcvt.h.s fa0, fa5136; ZFHMIN-NEXT:    ret137  %call = tail call half @llvm.roundeven.f16(half %a) nounwind readnone138  ret half %call139}140 141define half @froundnx_h(half %a) nounwind {142; CHECK-LABEL: froundnx_h:143; CHECK:       # %bb.0:144; CHECK-NEXT:    froundnx.h fa0, fa0145; CHECK-NEXT:    ret146;147; ZFHMIN-LABEL: froundnx_h:148; ZFHMIN:       # %bb.0:149; ZFHMIN-NEXT:    fcvt.s.h fa5, fa0150; ZFHMIN-NEXT:    froundnx.s fa5, fa5151; ZFHMIN-NEXT:    fcvt.h.s fa0, fa5152; ZFHMIN-NEXT:    ret153  %call = tail call half @llvm.rint.f16(half %a) nounwind readnone154  ret half %call155}156 157define i32 @fcmp_olt_q(half %a, half %b) nounwind strictfp {158; CHECK-LABEL: fcmp_olt_q:159; CHECK:       # %bb.0:160; CHECK-NEXT:    fltq.h a0, fa0, fa1161; CHECK-NEXT:    ret162;163; ZFHMIN-LABEL: fcmp_olt_q:164; ZFHMIN:       # %bb.0:165; ZFHMIN-NEXT:    fcvt.s.h fa5, fa1166; ZFHMIN-NEXT:    fcvt.s.h fa4, fa0167; ZFHMIN-NEXT:    fltq.s a0, fa4, fa5168; ZFHMIN-NEXT:    ret169  %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"olt", metadata !"fpexcept.strict") strictfp170  %2 = zext i1 %1 to i32171  ret i32 %2172}173 174define i32 @fcmp_ole_q(half %a, half %b) nounwind strictfp {175; CHECK-LABEL: fcmp_ole_q:176; CHECK:       # %bb.0:177; CHECK-NEXT:    fleq.h a0, fa0, fa1178; CHECK-NEXT:    ret179;180; ZFHMIN-LABEL: fcmp_ole_q:181; ZFHMIN:       # %bb.0:182; ZFHMIN-NEXT:    fcvt.s.h fa5, fa1183; ZFHMIN-NEXT:    fcvt.s.h fa4, fa0184; ZFHMIN-NEXT:    fleq.s a0, fa4, fa5185; ZFHMIN-NEXT:    ret186  %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ole", metadata !"fpexcept.strict") strictfp187  %2 = zext i1 %1 to i32188  ret i32 %2189}190 191define i32 @fcmp_one_q(half %a, half %b) nounwind strictfp {192; CHECK-LABEL: fcmp_one_q:193; CHECK:       # %bb.0:194; CHECK-NEXT:    fltq.h a0, fa0, fa1195; CHECK-NEXT:    fltq.h a1, fa1, fa0196; CHECK-NEXT:    or a0, a1, a0197; CHECK-NEXT:    ret198;199; ZFHMIN-LABEL: fcmp_one_q:200; ZFHMIN:       # %bb.0:201; ZFHMIN-NEXT:    fcvt.s.h fa5, fa1202; ZFHMIN-NEXT:    fcvt.s.h fa4, fa0203; ZFHMIN-NEXT:    fltq.s a0, fa4, fa5204; ZFHMIN-NEXT:    fltq.s a1, fa5, fa4205; ZFHMIN-NEXT:    or a0, a1, a0206; ZFHMIN-NEXT:    ret207  %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"one", metadata !"fpexcept.strict") strictfp208  %2 = zext i1 %1 to i32209  ret i32 %2210}211 212define i32 @fcmp_ueq_q(half %a, half %b) nounwind strictfp {213; CHECK-LABEL: fcmp_ueq_q:214; CHECK:       # %bb.0:215; CHECK-NEXT:    fltq.h a0, fa0, fa1216; CHECK-NEXT:    fltq.h a1, fa1, fa0217; CHECK-NEXT:    or a0, a1, a0218; CHECK-NEXT:    xori a0, a0, 1219; CHECK-NEXT:    ret220;221; ZFHMIN-LABEL: fcmp_ueq_q:222; ZFHMIN:       # %bb.0:223; ZFHMIN-NEXT:    fcvt.s.h fa5, fa1224; ZFHMIN-NEXT:    fcvt.s.h fa4, fa0225; ZFHMIN-NEXT:    fltq.s a0, fa4, fa5226; ZFHMIN-NEXT:    fltq.s a1, fa5, fa4227; ZFHMIN-NEXT:    or a0, a1, a0228; ZFHMIN-NEXT:    xori a0, a0, 1229; ZFHMIN-NEXT:    ret230  %1 = call i1 @llvm.experimental.constrained.fcmp.f16(half %a, half %b, metadata !"ueq", metadata !"fpexcept.strict") strictfp231  %2 = zext i1 %1 to i32232  ret i32 %2233}234 235define half @fadd_neg_0p5(half %x) {236; CHECK-LABEL: fadd_neg_0p5:237; CHECK:       # %bb.0:238; CHECK-NEXT:    fli.h fa5, 0.5239; CHECK-NEXT:    fsub.h fa0, fa0, fa5240; CHECK-NEXT:    ret241;242; ZFHMIN-LABEL: fadd_neg_0p5:243; ZFHMIN:       # %bb.0:244; ZFHMIN-NEXT:    fcvt.s.h fa5, fa0245; ZFHMIN-NEXT:    fli.s fa4, 0.5246; ZFHMIN-NEXT:    fsub.s fa5, fa5, fa4247; ZFHMIN-NEXT:    fcvt.h.s fa0, fa5248; ZFHMIN-NEXT:    ret249  %a = fadd half %x, -0.5250  ret half %a251}252 253define half @fma_neg_addend(half %x, half %y) nounwind {254; CHECK-LABEL: fma_neg_addend:255; CHECK:       # %bb.0:256; CHECK-NEXT:    fli.h fa5, 0.5257; CHECK-NEXT:    fmsub.h fa0, fa0, fa1, fa5258; CHECK-NEXT:    ret259;260; ZFHMIN-LABEL: fma_neg_addend:261; ZFHMIN:       # %bb.0:262; ZFHMIN-NEXT:    fcvt.s.h fa5, fa1263; ZFHMIN-NEXT:    fcvt.s.h fa4, fa0264; ZFHMIN-NEXT:    fli.s fa3, 0.5265; ZFHMIN-NEXT:    fmsub.s fa5, fa4, fa5, fa3266; ZFHMIN-NEXT:    fcvt.h.s fa0, fa5267; ZFHMIN-NEXT:    ret268  %a = call half @llvm.fma.f32(half %x, half %y, half -0.5)269  ret half %a270}271 272define half @fma_neg_multiplicand(half %x, half %y) nounwind {273; CHECK-LABEL: fma_neg_multiplicand:274; CHECK:       # %bb.0:275; CHECK-NEXT:    fli.h fa5, 0.125276; CHECK-NEXT:    fnmsub.h fa0, fa5, fa0, fa1277; CHECK-NEXT:    ret278;279; ZFHMIN-LABEL: fma_neg_multiplicand:280; ZFHMIN:       # %bb.0:281; ZFHMIN-NEXT:    fcvt.s.h fa5, fa1282; ZFHMIN-NEXT:    fcvt.s.h fa4, fa0283; ZFHMIN-NEXT:    fli.s fa3, 0.125284; ZFHMIN-NEXT:    fnmsub.s fa5, fa3, fa4, fa5285; ZFHMIN-NEXT:    fcvt.h.s fa0, fa5286; ZFHMIN-NEXT:    ret287  %a = call half @llvm.fma.f32(half %x, half -0.125, half %y)288  ret half %a289}290 291define half @fma_neg_addend_multiplicand(half %x) nounwind {292; CHECK-LABEL: fma_neg_addend_multiplicand:293; CHECK:       # %bb.0:294; CHECK-NEXT:    fli.h fa5, 0.25295; CHECK-NEXT:    fli.h fa4, 0.5296; CHECK-NEXT:    fnmadd.h fa0, fa4, fa0, fa5297; CHECK-NEXT:    ret298;299; ZFHMIN-LABEL: fma_neg_addend_multiplicand:300; ZFHMIN:       # %bb.0:301; ZFHMIN-NEXT:    fcvt.s.h fa5, fa0302; ZFHMIN-NEXT:    fli.s fa4, 0.25303; ZFHMIN-NEXT:    fli.s fa3, 0.5304; ZFHMIN-NEXT:    fnmadd.s fa5, fa3, fa5, fa4305; ZFHMIN-NEXT:    fcvt.h.s fa0, fa5306; ZFHMIN-NEXT:    ret307  %a = call half @llvm.fma.f32(half %x, half -0.5, half -0.25)308  ret half %a309}310 311define half @select_loadfpimm(half %x) nounwind {312; CHECK-LABEL: select_loadfpimm:313; CHECK:       # %bb.0: # %entry314; CHECK-NEXT:    fmv.h.x fa5, zero315; CHECK-NEXT:    fle.h a0, fa5, fa0316; CHECK-NEXT:    fli.h fa0, 0.5317; CHECK-NEXT:    bnez a0, .LBB17_2318; CHECK-NEXT:  # %bb.1:319; CHECK-NEXT:    fneg.h fa0, fa0320; CHECK-NEXT:  .LBB17_2: # %entry321; CHECK-NEXT:    ret322;323; ZFHMIN-LABEL: select_loadfpimm:324; ZFHMIN:       # %bb.0: # %entry325; ZFHMIN-NEXT:    fcvt.s.h fa5, fa0326; ZFHMIN-NEXT:    fmv.w.x fa4, zero327; ZFHMIN-NEXT:    fle.s a0, fa4, fa5328; ZFHMIN-NEXT:    beqz a0, .LBB17_2329; ZFHMIN-NEXT:  # %bb.1: # %entry330; ZFHMIN-NEXT:    li a0, 7331; ZFHMIN-NEXT:    j .LBB17_3332; ZFHMIN-NEXT:  .LBB17_2:333; ZFHMIN-NEXT:    li a0, -9334; ZFHMIN-NEXT:  .LBB17_3: # %entry335; ZFHMIN-NEXT:    slli a0, a0, 11336; ZFHMIN-NEXT:    fmv.h.x fa0, a0337; ZFHMIN-NEXT:    ret338entry:339  %cmp = fcmp ult half %x, 0.000000e+00340  %sel = select i1 %cmp, half -5.000000e-01, half 5.000000e-01341  ret half %sel342}343