brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.6 KiB · 8485eb8 Raw
333 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v -target-abi=ilp32d \3; RUN:     -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,RV32 %s4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \5; RUN:     -verify-machineinstrs < %s | FileCheck --check-prefixes=CHECK,RV64 %s6 7define <2 x half> @nearbyint_v2f16(<2 x half> %v) strictfp {8; CHECK-LABEL: nearbyint_v2f16:9; CHECK:       # %bb.0:10; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, mu11; CHECK-NEXT:    vmfne.vv v0, v8, v812; CHECK-NEXT:    li a0, 2513; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t14; CHECK-NEXT:    slli a0, a0, 1015; CHECK-NEXT:    vfabs.v v9, v816; CHECK-NEXT:    fmv.h.x fa5, a017; CHECK-NEXT:    vmflt.vf v0, v9, fa518; CHECK-NEXT:    frflags a019; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma20; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t21; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t22; CHECK-NEXT:    vsetvli zero, zero, e16, mf4, ta, mu23; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t24; CHECK-NEXT:    fsflags a025; CHECK-NEXT:    ret26  %r = call <2 x half> @llvm.experimental.constrained.nearbyint.v2f16(<2 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")27  ret <2 x half> %r28}29 30define <4 x half> @nearbyint_v4f16(<4 x half> %v) strictfp {31; CHECK-LABEL: nearbyint_v4f16:32; CHECK:       # %bb.0:33; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, mu34; CHECK-NEXT:    vmfne.vv v0, v8, v835; CHECK-NEXT:    li a0, 2536; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t37; CHECK-NEXT:    slli a0, a0, 1038; CHECK-NEXT:    vfabs.v v9, v839; CHECK-NEXT:    fmv.h.x fa5, a040; CHECK-NEXT:    vmflt.vf v0, v9, fa541; CHECK-NEXT:    frflags a042; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma43; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t44; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t45; CHECK-NEXT:    vsetvli zero, zero, e16, mf2, ta, mu46; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t47; CHECK-NEXT:    fsflags a048; CHECK-NEXT:    ret49  %r = call <4 x half> @llvm.experimental.constrained.nearbyint.v4f16(<4 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")50  ret <4 x half> %r51}52 53define <8 x half> @nearbyint_v8f16(<8 x half> %v) strictfp {54; CHECK-LABEL: nearbyint_v8f16:55; CHECK:       # %bb.0:56; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu57; CHECK-NEXT:    vmfne.vv v0, v8, v858; CHECK-NEXT:    li a0, 2559; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t60; CHECK-NEXT:    slli a0, a0, 1061; CHECK-NEXT:    vfabs.v v9, v862; CHECK-NEXT:    fmv.h.x fa5, a063; CHECK-NEXT:    vmflt.vf v0, v9, fa564; CHECK-NEXT:    frflags a065; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, ma66; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t67; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t68; CHECK-NEXT:    vsetvli zero, zero, e16, m1, ta, mu69; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t70; CHECK-NEXT:    fsflags a071; CHECK-NEXT:    ret72  %r = call <8 x half> @llvm.experimental.constrained.nearbyint.v8f16(<8 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")73  ret <8 x half> %r74}75 76define <16 x half> @nearbyint_v16f16(<16 x half> %v) strictfp {77; CHECK-LABEL: nearbyint_v16f16:78; CHECK:       # %bb.0:79; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, mu80; CHECK-NEXT:    vmfne.vv v0, v8, v881; CHECK-NEXT:    li a0, 2582; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t83; CHECK-NEXT:    slli a0, a0, 1084; CHECK-NEXT:    vfabs.v v10, v885; CHECK-NEXT:    fmv.h.x fa5, a086; CHECK-NEXT:    vmflt.vf v0, v10, fa587; CHECK-NEXT:    frflags a088; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, ma89; CHECK-NEXT:    vfcvt.x.f.v v10, v8, v0.t90; CHECK-NEXT:    vfcvt.f.x.v v10, v10, v0.t91; CHECK-NEXT:    vsetvli zero, zero, e16, m2, ta, mu92; CHECK-NEXT:    vfsgnj.vv v8, v10, v8, v0.t93; CHECK-NEXT:    fsflags a094; CHECK-NEXT:    ret95  %r = call <16 x half> @llvm.experimental.constrained.nearbyint.v16f16(<16 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")96  ret <16 x half> %r97}98 99define <32 x half> @nearbyint_v32f16(<32 x half> %v) strictfp {100; CHECK-LABEL: nearbyint_v32f16:101; CHECK:       # %bb.0:102; CHECK-NEXT:    li a0, 32103; CHECK-NEXT:    li a1, 25104; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, mu105; CHECK-NEXT:    vmfne.vv v0, v8, v8106; CHECK-NEXT:    slli a1, a1, 10107; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t108; CHECK-NEXT:    fmv.h.x fa5, a1109; CHECK-NEXT:    vfabs.v v12, v8110; CHECK-NEXT:    vmflt.vf v0, v12, fa5111; CHECK-NEXT:    frflags a0112; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, ma113; CHECK-NEXT:    vfcvt.x.f.v v12, v8, v0.t114; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t115; CHECK-NEXT:    vsetvli zero, zero, e16, m4, ta, mu116; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t117; CHECK-NEXT:    fsflags a0118; CHECK-NEXT:    ret119  %r = call <32 x half> @llvm.experimental.constrained.nearbyint.v32f16(<32 x half> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")120  ret <32 x half> %r121}122 123define <2 x float> @nearbyint_v2f32(<2 x float> %v) strictfp {124; CHECK-LABEL: nearbyint_v2f32:125; CHECK:       # %bb.0:126; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu127; CHECK-NEXT:    vmfne.vv v0, v8, v8128; CHECK-NEXT:    lui a0, 307200129; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t130; CHECK-NEXT:    fmv.w.x fa5, a0131; CHECK-NEXT:    vfabs.v v9, v8132; CHECK-NEXT:    vmflt.vf v0, v9, fa5133; CHECK-NEXT:    frflags a0134; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma135; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t136; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t137; CHECK-NEXT:    vsetvli zero, zero, e32, mf2, ta, mu138; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t139; CHECK-NEXT:    fsflags a0140; CHECK-NEXT:    ret141  %r = call <2 x float> @llvm.experimental.constrained.nearbyint.v2f32(<2 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")142  ret <2 x float> %r143}144 145define <4 x float> @nearbyint_v4f32(<4 x float> %v) strictfp {146; CHECK-LABEL: nearbyint_v4f32:147; CHECK:       # %bb.0:148; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu149; CHECK-NEXT:    vmfne.vv v0, v8, v8150; CHECK-NEXT:    lui a0, 307200151; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t152; CHECK-NEXT:    fmv.w.x fa5, a0153; CHECK-NEXT:    vfabs.v v9, v8154; CHECK-NEXT:    vmflt.vf v0, v9, fa5155; CHECK-NEXT:    frflags a0156; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, ma157; CHECK-NEXT:    vfcvt.x.f.v v9, v8, v0.t158; CHECK-NEXT:    vfcvt.f.x.v v9, v9, v0.t159; CHECK-NEXT:    vsetvli zero, zero, e32, m1, ta, mu160; CHECK-NEXT:    vfsgnj.vv v8, v9, v8, v0.t161; CHECK-NEXT:    fsflags a0162; CHECK-NEXT:    ret163  %r = call <4 x float> @llvm.experimental.constrained.nearbyint.v4f32(<4 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")164  ret <4 x float> %r165}166 167define <8 x float> @nearbyint_v8f32(<8 x float> %v) strictfp {168; CHECK-LABEL: nearbyint_v8f32:169; CHECK:       # %bb.0:170; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu171; CHECK-NEXT:    vmfne.vv v0, v8, v8172; CHECK-NEXT:    lui a0, 307200173; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t174; CHECK-NEXT:    fmv.w.x fa5, a0175; CHECK-NEXT:    vfabs.v v10, v8176; CHECK-NEXT:    vmflt.vf v0, v10, fa5177; CHECK-NEXT:    frflags a0178; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, ma179; CHECK-NEXT:    vfcvt.x.f.v v10, v8, v0.t180; CHECK-NEXT:    vfcvt.f.x.v v10, v10, v0.t181; CHECK-NEXT:    vsetvli zero, zero, e32, m2, ta, mu182; CHECK-NEXT:    vfsgnj.vv v8, v10, v8, v0.t183; CHECK-NEXT:    fsflags a0184; CHECK-NEXT:    ret185  %r = call <8 x float> @llvm.experimental.constrained.nearbyint.v8f32(<8 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")186  ret <8 x float> %r187}188 189define <16 x float> @nearbyint_v16f32(<16 x float> %v) strictfp {190; CHECK-LABEL: nearbyint_v16f32:191; CHECK:       # %bb.0:192; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu193; CHECK-NEXT:    vmfne.vv v0, v8, v8194; CHECK-NEXT:    lui a0, 307200195; CHECK-NEXT:    vfadd.vv v8, v8, v8, v0.t196; CHECK-NEXT:    fmv.w.x fa5, a0197; CHECK-NEXT:    vfabs.v v12, v8198; CHECK-NEXT:    vmflt.vf v0, v12, fa5199; CHECK-NEXT:    frflags a0200; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, ma201; CHECK-NEXT:    vfcvt.x.f.v v12, v8, v0.t202; CHECK-NEXT:    vfcvt.f.x.v v12, v12, v0.t203; CHECK-NEXT:    vsetvli zero, zero, e32, m4, ta, mu204; CHECK-NEXT:    vfsgnj.vv v8, v12, v8, v0.t205; CHECK-NEXT:    fsflags a0206; CHECK-NEXT:    ret207  %r = call <16 x float> @llvm.experimental.constrained.nearbyint.v16f32(<16 x float> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")208  ret <16 x float> %r209}210 211define <2 x double> @nearbyint_v2f64(<2 x double> %v) strictfp {212; RV32-LABEL: nearbyint_v2f64:213; RV32:       # %bb.0:214; RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, mu215; RV32-NEXT:    vmfne.vv v0, v8, v8216; RV32-NEXT:    lui a0, %hi(.LCPI9_0)217; RV32-NEXT:    fld fa5, %lo(.LCPI9_0)(a0)218; RV32-NEXT:    vfadd.vv v8, v8, v8, v0.t219; RV32-NEXT:    vfabs.v v9, v8220; RV32-NEXT:    vmflt.vf v0, v9, fa5221; RV32-NEXT:    frflags a0222; RV32-NEXT:    vsetvli zero, zero, e64, m1, ta, ma223; RV32-NEXT:    vfcvt.x.f.v v9, v8, v0.t224; RV32-NEXT:    vfcvt.f.x.v v9, v9, v0.t225; RV32-NEXT:    vsetvli zero, zero, e64, m1, ta, mu226; RV32-NEXT:    vfsgnj.vv v8, v9, v8, v0.t227; RV32-NEXT:    fsflags a0228; RV32-NEXT:    ret229;230; RV64-LABEL: nearbyint_v2f64:231; RV64:       # %bb.0:232; RV64-NEXT:    vsetivli zero, 2, e64, m1, ta, mu233; RV64-NEXT:    vmfne.vv v0, v8, v8234; RV64-NEXT:    li a0, 1075235; RV64-NEXT:    vfadd.vv v8, v8, v8, v0.t236; RV64-NEXT:    slli a0, a0, 52237; RV64-NEXT:    vfabs.v v9, v8238; RV64-NEXT:    fmv.d.x fa5, a0239; RV64-NEXT:    vmflt.vf v0, v9, fa5240; RV64-NEXT:    frflags a0241; RV64-NEXT:    vsetvli zero, zero, e64, m1, ta, ma242; RV64-NEXT:    vfcvt.x.f.v v9, v8, v0.t243; RV64-NEXT:    vfcvt.f.x.v v9, v9, v0.t244; RV64-NEXT:    vsetvli zero, zero, e64, m1, ta, mu245; RV64-NEXT:    vfsgnj.vv v8, v9, v8, v0.t246; RV64-NEXT:    fsflags a0247; RV64-NEXT:    ret248  %r = call <2 x double> @llvm.experimental.constrained.nearbyint.v2f64(<2 x double> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")249  ret <2 x double> %r250}251 252define <4 x double> @nearbyint_v4f64(<4 x double> %v) strictfp {253; RV32-LABEL: nearbyint_v4f64:254; RV32:       # %bb.0:255; RV32-NEXT:    vsetivli zero, 4, e64, m2, ta, mu256; RV32-NEXT:    vmfne.vv v0, v8, v8257; RV32-NEXT:    lui a0, %hi(.LCPI10_0)258; RV32-NEXT:    fld fa5, %lo(.LCPI10_0)(a0)259; RV32-NEXT:    vfadd.vv v8, v8, v8, v0.t260; RV32-NEXT:    vfabs.v v10, v8261; RV32-NEXT:    vmflt.vf v0, v10, fa5262; RV32-NEXT:    frflags a0263; RV32-NEXT:    vsetvli zero, zero, e64, m2, ta, ma264; RV32-NEXT:    vfcvt.x.f.v v10, v8, v0.t265; RV32-NEXT:    vfcvt.f.x.v v10, v10, v0.t266; RV32-NEXT:    vsetvli zero, zero, e64, m2, ta, mu267; RV32-NEXT:    vfsgnj.vv v8, v10, v8, v0.t268; RV32-NEXT:    fsflags a0269; RV32-NEXT:    ret270;271; RV64-LABEL: nearbyint_v4f64:272; RV64:       # %bb.0:273; RV64-NEXT:    vsetivli zero, 4, e64, m2, ta, mu274; RV64-NEXT:    vmfne.vv v0, v8, v8275; RV64-NEXT:    li a0, 1075276; RV64-NEXT:    vfadd.vv v8, v8, v8, v0.t277; RV64-NEXT:    slli a0, a0, 52278; RV64-NEXT:    vfabs.v v10, v8279; RV64-NEXT:    fmv.d.x fa5, a0280; RV64-NEXT:    vmflt.vf v0, v10, fa5281; RV64-NEXT:    frflags a0282; RV64-NEXT:    vsetvli zero, zero, e64, m2, ta, ma283; RV64-NEXT:    vfcvt.x.f.v v10, v8, v0.t284; RV64-NEXT:    vfcvt.f.x.v v10, v10, v0.t285; RV64-NEXT:    vsetvli zero, zero, e64, m2, ta, mu286; RV64-NEXT:    vfsgnj.vv v8, v10, v8, v0.t287; RV64-NEXT:    fsflags a0288; RV64-NEXT:    ret289  %r = call <4 x double> @llvm.experimental.constrained.nearbyint.v4f64(<4 x double> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")290  ret <4 x double> %r291}292 293define <8 x double> @nearbyint_v8f64(<8 x double> %v) strictfp {294; RV32-LABEL: nearbyint_v8f64:295; RV32:       # %bb.0:296; RV32-NEXT:    vsetivli zero, 8, e64, m4, ta, mu297; RV32-NEXT:    vmfne.vv v0, v8, v8298; RV32-NEXT:    lui a0, %hi(.LCPI11_0)299; RV32-NEXT:    fld fa5, %lo(.LCPI11_0)(a0)300; RV32-NEXT:    vfadd.vv v8, v8, v8, v0.t301; RV32-NEXT:    vfabs.v v12, v8302; RV32-NEXT:    vmflt.vf v0, v12, fa5303; RV32-NEXT:    frflags a0304; RV32-NEXT:    vsetvli zero, zero, e64, m4, ta, ma305; RV32-NEXT:    vfcvt.x.f.v v12, v8, v0.t306; RV32-NEXT:    vfcvt.f.x.v v12, v12, v0.t307; RV32-NEXT:    vsetvli zero, zero, e64, m4, ta, mu308; RV32-NEXT:    vfsgnj.vv v8, v12, v8, v0.t309; RV32-NEXT:    fsflags a0310; RV32-NEXT:    ret311;312; RV64-LABEL: nearbyint_v8f64:313; RV64:       # %bb.0:314; RV64-NEXT:    vsetivli zero, 8, e64, m4, ta, mu315; RV64-NEXT:    vmfne.vv v0, v8, v8316; RV64-NEXT:    li a0, 1075317; RV64-NEXT:    vfadd.vv v8, v8, v8, v0.t318; RV64-NEXT:    slli a0, a0, 52319; RV64-NEXT:    vfabs.v v12, v8320; RV64-NEXT:    fmv.d.x fa5, a0321; RV64-NEXT:    vmflt.vf v0, v12, fa5322; RV64-NEXT:    frflags a0323; RV64-NEXT:    vsetvli zero, zero, e64, m4, ta, ma324; RV64-NEXT:    vfcvt.x.f.v v12, v8, v0.t325; RV64-NEXT:    vfcvt.f.x.v v12, v12, v0.t326; RV64-NEXT:    vsetvli zero, zero, e64, m4, ta, mu327; RV64-NEXT:    vfsgnj.vv v8, v12, v8, v0.t328; RV64-NEXT:    fsflags a0329; RV64-NEXT:    ret330  %r = call <8 x double> @llvm.experimental.constrained.nearbyint.v8f64(<8 x double> %v, metadata !"round.dynamic", metadata !"fpexcept.strict")331  ret <8 x double> %r332}333