brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.0 KiB · 32a0d24 Raw
320 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 %s4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \5; RUN:     -verify-machineinstrs < %s | FileCheck %s6 7define <2 x half> @vfsub_vv_v2f16(<2 x half> %va, <2 x half> %vb) strictfp {8; CHECK-LABEL: vfsub_vv_v2f16:9; CHECK:       # %bb.0: # %entry10; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma11; CHECK-NEXT:    vfsub.vv v8, v8, v912; CHECK-NEXT:    ret13entry:14  %vc = call <2 x half> @llvm.experimental.constrained.fsub.v2f16(<2 x half> %va, <2 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")15  ret <2 x half> %vc16}17 18define <2 x half> @vfsub_vf_v2f16(<2 x half> %va, half %b) strictfp {19; CHECK-LABEL: vfsub_vf_v2f16:20; CHECK:       # %bb.0:21; CHECK-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma22; CHECK-NEXT:    vfsub.vf v8, v8, fa023; CHECK-NEXT:    ret24  %head = insertelement <2 x half> poison, half %b, i32 025  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer26  %vc = call <2 x half> @llvm.experimental.constrained.fsub.v2f16(<2 x half> %va, <2 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")27  ret <2 x half> %vc28}29 30define <4 x half> @vfsub_vv_v4f16(<4 x half> %va, <4 x half> %vb) strictfp {31; CHECK-LABEL: vfsub_vv_v4f16:32; CHECK:       # %bb.0: # %entry33; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma34; CHECK-NEXT:    vfsub.vv v8, v8, v935; CHECK-NEXT:    ret36entry:37  %vc = call <4 x half> @llvm.experimental.constrained.fsub.v4f16(<4 x half> %va, <4 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")38  ret <4 x half> %vc39}40 41define <4 x half> @vfsub_vf_v4f16(<4 x half> %va, half %b) strictfp {42; CHECK-LABEL: vfsub_vf_v4f16:43; CHECK:       # %bb.0:44; CHECK-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma45; CHECK-NEXT:    vfsub.vf v8, v8, fa046; CHECK-NEXT:    ret47  %head = insertelement <4 x half> poison, half %b, i32 048  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer49  %vc = call <4 x half> @llvm.experimental.constrained.fsub.v4f16(<4 x half> %va, <4 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")50  ret <4 x half> %vc51}52 53define <8 x half> @vfsub_vv_v8f16(<8 x half> %va, <8 x half> %vb) strictfp {54; CHECK-LABEL: vfsub_vv_v8f16:55; CHECK:       # %bb.0: # %entry56; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma57; CHECK-NEXT:    vfsub.vv v8, v8, v958; CHECK-NEXT:    ret59entry:60  %vc = call <8 x half> @llvm.experimental.constrained.fsub.v8f16(<8 x half> %va, <8 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")61  ret <8 x half> %vc62}63 64define <8 x half> @vfsub_vf_v8f16(<8 x half> %va, half %b) strictfp {65; CHECK-LABEL: vfsub_vf_v8f16:66; CHECK:       # %bb.0:67; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma68; CHECK-NEXT:    vfsub.vf v8, v8, fa069; CHECK-NEXT:    ret70  %head = insertelement <8 x half> poison, half %b, i32 071  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer72  %vc = call <8 x half> @llvm.experimental.constrained.fsub.v8f16(<8 x half> %va, <8 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")73  ret <8 x half> %vc74}75 76define <8 x half> @vfsub_fv_v8f16(<8 x half> %va, half %b) strictfp {77; CHECK-LABEL: vfsub_fv_v8f16:78; CHECK:       # %bb.0:79; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma80; CHECK-NEXT:    vfrsub.vf v8, v8, fa081; CHECK-NEXT:    ret82  %head = insertelement <8 x half> poison, half %b, i32 083  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer84  %vc = call <8 x half> @llvm.experimental.constrained.fsub.v8f16(<8 x half> %splat, <8 x half> %va, metadata !"round.dynamic", metadata !"fpexcept.ignore")85  ret <8 x half> %vc86}87 88define <16 x half> @vfsub_vv_v16f16(<16 x half> %va, <16 x half> %vb) strictfp {89; CHECK-LABEL: vfsub_vv_v16f16:90; CHECK:       # %bb.0: # %entry91; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma92; CHECK-NEXT:    vfsub.vv v8, v8, v1093; CHECK-NEXT:    ret94entry:95  %vc = call <16 x half> @llvm.experimental.constrained.fsub.v16f16(<16 x half> %va, <16 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")96  ret <16 x half> %vc97}98 99define <16 x half> @vfsub_vf_v16f16(<16 x half> %va, half %b) strictfp {100; CHECK-LABEL: vfsub_vf_v16f16:101; CHECK:       # %bb.0:102; CHECK-NEXT:    vsetivli zero, 16, e16, m2, ta, ma103; CHECK-NEXT:    vfsub.vf v8, v8, fa0104; CHECK-NEXT:    ret105  %head = insertelement <16 x half> poison, half %b, i32 0106  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer107  %vc = call <16 x half> @llvm.experimental.constrained.fsub.v16f16(<16 x half> %va, <16 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")108  ret <16 x half> %vc109}110 111define <32 x half> @vfsub_vv_v32f16(<32 x half> %va, <32 x half> %vb) strictfp {112; CHECK-LABEL: vfsub_vv_v32f16:113; CHECK:       # %bb.0: # %entry114; CHECK-NEXT:    li a0, 32115; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma116; CHECK-NEXT:    vfsub.vv v8, v8, v12117; CHECK-NEXT:    ret118entry:119  %vc = call <32 x half> @llvm.experimental.constrained.fsub.v32f16(<32 x half> %va, <32 x half> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")120  ret <32 x half> %vc121}122 123define <32 x half> @vfsub_vf_v32f16(<32 x half> %va, half %b) strictfp {124; CHECK-LABEL: vfsub_vf_v32f16:125; CHECK:       # %bb.0:126; CHECK-NEXT:    li a0, 32127; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma128; CHECK-NEXT:    vfsub.vf v8, v8, fa0129; CHECK-NEXT:    ret130  %head = insertelement <32 x half> poison, half %b, i32 0131  %splat = shufflevector <32 x half> %head, <32 x half> poison, <32 x i32> zeroinitializer132  %vc = call <32 x half> @llvm.experimental.constrained.fsub.v32f16(<32 x half> %va, <32 x half> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")133  ret <32 x half> %vc134}135 136define <2 x float> @vfsub_vv_v2f32(<2 x float> %va, <2 x float> %vb) strictfp {137; CHECK-LABEL: vfsub_vv_v2f32:138; CHECK:       # %bb.0: # %entry139; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma140; CHECK-NEXT:    vfsub.vv v8, v8, v9141; CHECK-NEXT:    ret142entry:143  %vc = call <2 x float> @llvm.experimental.constrained.fsub.v2f32(<2 x float> %va, <2 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")144  ret <2 x float> %vc145}146 147define <2 x float> @vfsub_vf_v2f32(<2 x float> %va, float %b) strictfp {148; CHECK-LABEL: vfsub_vf_v2f32:149; CHECK:       # %bb.0:150; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma151; CHECK-NEXT:    vfsub.vf v8, v8, fa0152; CHECK-NEXT:    ret153  %head = insertelement <2 x float> poison, float %b, i32 0154  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer155  %vc = call <2 x float> @llvm.experimental.constrained.fsub.v2f32(<2 x float> %va, <2 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")156  ret <2 x float> %vc157}158 159define <4 x float> @vfsub_vv_v4f32(<4 x float> %va, <4 x float> %vb) strictfp {160; CHECK-LABEL: vfsub_vv_v4f32:161; CHECK:       # %bb.0: # %entry162; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma163; CHECK-NEXT:    vfsub.vv v8, v8, v9164; CHECK-NEXT:    ret165entry:166  %vc = call <4 x float> @llvm.experimental.constrained.fsub.v4f32(<4 x float> %va, <4 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")167  ret <4 x float> %vc168}169 170define <4 x float> @vfsub_vf_v4f32(<4 x float> %va, float %b) strictfp {171; CHECK-LABEL: vfsub_vf_v4f32:172; CHECK:       # %bb.0:173; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma174; CHECK-NEXT:    vfsub.vf v8, v8, fa0175; CHECK-NEXT:    ret176  %head = insertelement <4 x float> poison, float %b, i32 0177  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer178  %vc = call <4 x float> @llvm.experimental.constrained.fsub.v4f32(<4 x float> %va, <4 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")179  ret <4 x float> %vc180}181 182define <8 x float> @vfsub_vv_v8f32(<8 x float> %va, <8 x float> %vb) strictfp {183; CHECK-LABEL: vfsub_vv_v8f32:184; CHECK:       # %bb.0: # %entry185; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma186; CHECK-NEXT:    vfsub.vv v8, v8, v10187; CHECK-NEXT:    ret188entry:189  %vc = call <8 x float> @llvm.experimental.constrained.fsub.v8f32(<8 x float> %va, <8 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")190  ret <8 x float> %vc191}192 193define <8 x float> @vfsub_vf_v8f32(<8 x float> %va, float %b) strictfp {194; CHECK-LABEL: vfsub_vf_v8f32:195; CHECK:       # %bb.0:196; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma197; CHECK-NEXT:    vfsub.vf v8, v8, fa0198; CHECK-NEXT:    ret199  %head = insertelement <8 x float> poison, float %b, i32 0200  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer201  %vc = call <8 x float> @llvm.experimental.constrained.fsub.v8f32(<8 x float> %va, <8 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")202  ret <8 x float> %vc203}204 205define <8 x float> @vfsub_fv_v8f32(<8 x float> %va, float %b) strictfp {206; CHECK-LABEL: vfsub_fv_v8f32:207; CHECK:       # %bb.0:208; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma209; CHECK-NEXT:    vfrsub.vf v8, v8, fa0210; CHECK-NEXT:    ret211  %head = insertelement <8 x float> poison, float %b, i32 0212  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer213  %vc = call <8 x float> @llvm.experimental.constrained.fsub.v8f32(<8 x float> %splat, <8 x float> %va, metadata !"round.dynamic", metadata !"fpexcept.ignore")214  ret <8 x float> %vc215}216 217define <16 x float> @vfsub_vv_v16f32(<16 x float> %va, <16 x float> %vb) strictfp {218; CHECK-LABEL: vfsub_vv_v16f32:219; CHECK:       # %bb.0: # %entry220; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma221; CHECK-NEXT:    vfsub.vv v8, v8, v12222; CHECK-NEXT:    ret223entry:224  %vc = call <16 x float> @llvm.experimental.constrained.fsub.v16f32(<16 x float> %va, <16 x float> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")225  ret <16 x float> %vc226}227 228define <16 x float> @vfsub_vf_v16f32(<16 x float> %va, float %b) strictfp {229; CHECK-LABEL: vfsub_vf_v16f32:230; CHECK:       # %bb.0:231; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma232; CHECK-NEXT:    vfsub.vf v8, v8, fa0233; CHECK-NEXT:    ret234  %head = insertelement <16 x float> poison, float %b, i32 0235  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer236  %vc = call <16 x float> @llvm.experimental.constrained.fsub.v16f32(<16 x float> %va, <16 x float> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")237  ret <16 x float> %vc238}239 240define <2 x double> @vfsub_vv_v2f64(<2 x double> %va, <2 x double> %vb) strictfp {241; CHECK-LABEL: vfsub_vv_v2f64:242; CHECK:       # %bb.0: # %entry243; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma244; CHECK-NEXT:    vfsub.vv v8, v8, v9245; CHECK-NEXT:    ret246entry:247  %vc = call <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double> %va, <2 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")248  ret <2 x double> %vc249}250 251define <2 x double> @vfsub_vf_v2f64(<2 x double> %va, double %b) strictfp {252; CHECK-LABEL: vfsub_vf_v2f64:253; CHECK:       # %bb.0:254; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma255; CHECK-NEXT:    vfsub.vf v8, v8, fa0256; CHECK-NEXT:    ret257  %head = insertelement <2 x double> poison, double %b, i32 0258  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer259  %vc = call <2 x double> @llvm.experimental.constrained.fsub.v2f64(<2 x double> %va, <2 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")260  ret <2 x double> %vc261}262 263define <4 x double> @vfsub_vv_v4f64(<4 x double> %va, <4 x double> %vb) strictfp {264; CHECK-LABEL: vfsub_vv_v4f64:265; CHECK:       # %bb.0: # %entry266; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma267; CHECK-NEXT:    vfsub.vv v8, v8, v10268; CHECK-NEXT:    ret269entry:270  %vc = call <4 x double> @llvm.experimental.constrained.fsub.v4f64(<4 x double> %va, <4 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")271  ret <4 x double> %vc272}273 274define <4 x double> @vfsub_vf_v4f64(<4 x double> %va, double %b) strictfp {275; CHECK-LABEL: vfsub_vf_v4f64:276; CHECK:       # %bb.0:277; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma278; CHECK-NEXT:    vfsub.vf v8, v8, fa0279; CHECK-NEXT:    ret280  %head = insertelement <4 x double> poison, double %b, i32 0281  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer282  %vc = call <4 x double> @llvm.experimental.constrained.fsub.v4f64(<4 x double> %va, <4 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")283  ret <4 x double> %vc284}285 286define <8 x double> @vfsub_vv_v8f64(<8 x double> %va, <8 x double> %vb) strictfp {287; CHECK-LABEL: vfsub_vv_v8f64:288; CHECK:       # %bb.0: # %entry289; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma290; CHECK-NEXT:    vfsub.vv v8, v8, v12291; CHECK-NEXT:    ret292entry:293  %vc = call <8 x double> @llvm.experimental.constrained.fsub.v8f64(<8 x double> %va, <8 x double> %vb, metadata !"round.dynamic", metadata !"fpexcept.ignore")294  ret <8 x double> %vc295}296 297define <8 x double> @vfsub_vf_v8f64(<8 x double> %va, double %b) strictfp {298; CHECK-LABEL: vfsub_vf_v8f64:299; CHECK:       # %bb.0:300; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma301; CHECK-NEXT:    vfsub.vf v8, v8, fa0302; CHECK-NEXT:    ret303  %head = insertelement <8 x double> poison, double %b, i32 0304  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer305  %vc = call <8 x double> @llvm.experimental.constrained.fsub.v8f64(<8 x double> %va, <8 x double> %splat, metadata !"round.dynamic", metadata !"fpexcept.ignore")306  ret <8 x double> %vc307}308 309define <8 x double> @vfsub_fv_v8f64(<8 x double> %va, double %b) strictfp {310; CHECK-LABEL: vfsub_fv_v8f64:311; CHECK:       # %bb.0:312; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma313; CHECK-NEXT:    vfrsub.vf v8, v8, fa0314; CHECK-NEXT:    ret315  %head = insertelement <8 x double> poison, double %b, i32 0316  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer317  %vc = call <8 x double> @llvm.experimental.constrained.fsub.v8f64(<8 x double> %splat, <8 x double> %va, metadata !"round.dynamic", metadata !"fpexcept.ignore")318  ret <8 x double> %vc319}320