brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.3 KiB · 8d41514 Raw
341 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 <vscale x 1 x double> @vfwadd_vv_nxv1f64(<vscale x 1 x float> %va, <vscale x 1 x float> %vb) {8; CHECK-LABEL: vfwadd_vv_nxv1f64:9; CHECK:       # %bb.0:10; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma11; CHECK-NEXT:    vfwadd.vv v10, v8, v912; CHECK-NEXT:    vmv1r.v v8, v1013; CHECK-NEXT:    ret14  %vc = fpext <vscale x 1 x float> %va to <vscale x 1 x double>15  %vd = fpext <vscale x 1 x float> %vb to <vscale x 1 x double>16  %ve = fadd <vscale x 1 x double> %vc, %vd17  ret <vscale x 1 x double> %ve18}19 20define <vscale x 1 x double> @vfwadd_vf_nxv1f64(<vscale x 1 x float> %va, float %b) {21; CHECK-LABEL: vfwadd_vf_nxv1f64:22; CHECK:       # %bb.0:23; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma24; CHECK-NEXT:    vfwadd.vf v9, v8, fa025; CHECK-NEXT:    vmv1r.v v8, v926; CHECK-NEXT:    ret27  %head = insertelement <vscale x 1 x float> poison, float %b, i32 028  %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer29  %vc = fpext <vscale x 1 x float> %va to <vscale x 1 x double>30  %vd = fpext <vscale x 1 x float> %splat to <vscale x 1 x double>31  %ve = fadd <vscale x 1 x double> %vc, %vd32  ret <vscale x 1 x double> %ve33}34 35define <vscale x 1 x double> @vfwadd_vf_nxv1f64_2(<vscale x 1 x float> %va, float %b) {36; CHECK-LABEL: vfwadd_vf_nxv1f64_2:37; CHECK:       # %bb.0:38; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma39; CHECK-NEXT:    vfwadd.vf v9, v8, fa040; CHECK-NEXT:    vmv1r.v v8, v941; CHECK-NEXT:    ret42  %fpext = fpext float %b to double43  %head = insertelement <vscale x 1 x double> poison, double %fpext, i32 044  %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer45  %vc = fpext <vscale x 1 x float> %va to <vscale x 1 x double>46  %ve = fadd <vscale x 1 x double> %vc, %splat47  ret <vscale x 1 x double> %ve48}49 50define <vscale x 1 x double> @vfwadd_wv_nxv1f64(<vscale x 1 x double> %va, <vscale x 1 x float> %vb) {51; CHECK-LABEL: vfwadd_wv_nxv1f64:52; CHECK:       # %bb.0:53; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma54; CHECK-NEXT:    vfwadd.wv v8, v8, v955; CHECK-NEXT:    ret56  %vc = fpext <vscale x 1 x float> %vb to <vscale x 1 x double>57  %vd = fadd <vscale x 1 x double> %va, %vc58  ret <vscale x 1 x double> %vd59}60 61define <vscale x 1 x double> @vfwadd_wf_nxv1f64(<vscale x 1 x double> %va, float %b) {62; CHECK-LABEL: vfwadd_wf_nxv1f64:63; CHECK:       # %bb.0:64; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma65; CHECK-NEXT:    vfwadd.wf v8, v8, fa066; CHECK-NEXT:    ret67  %head = insertelement <vscale x 1 x float> poison, float %b, i32 068  %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer69  %vc = fpext <vscale x 1 x float> %splat to <vscale x 1 x double>70  %vd = fadd <vscale x 1 x double> %va, %vc71  ret <vscale x 1 x double> %vd72}73 74define <vscale x 1 x double> @vfwadd_wf_nxv1f64_2(<vscale x 1 x double> %va, float %b) {75; CHECK-LABEL: vfwadd_wf_nxv1f64_2:76; CHECK:       # %bb.0:77; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma78; CHECK-NEXT:    vfwadd.wf v8, v8, fa079; CHECK-NEXT:    ret80  %fpext = fpext float %b to double81  %head = insertelement <vscale x 1 x double> poison, double %fpext, i32 082  %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer83  %vd = fadd <vscale x 1 x double> %va, %splat84  ret <vscale x 1 x double> %vd85}86 87define <vscale x 2 x double> @vfwadd_vv_nxv2f64(<vscale x 2 x float> %va, <vscale x 2 x float> %vb) {88; CHECK-LABEL: vfwadd_vv_nxv2f64:89; CHECK:       # %bb.0:90; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma91; CHECK-NEXT:    vmv1r.v v10, v992; CHECK-NEXT:    vmv1r.v v11, v893; CHECK-NEXT:    vfwadd.vv v8, v11, v1094; CHECK-NEXT:    ret95  %vc = fpext <vscale x 2 x float> %va to <vscale x 2 x double>96  %vd = fpext <vscale x 2 x float> %vb to <vscale x 2 x double>97  %ve = fadd <vscale x 2 x double> %vc, %vd98  ret <vscale x 2 x double> %ve99}100 101define <vscale x 2 x double> @vfwadd_vf_nxv2f64(<vscale x 2 x float> %va, float %b) {102; CHECK-LABEL: vfwadd_vf_nxv2f64:103; CHECK:       # %bb.0:104; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma105; CHECK-NEXT:    vmv1r.v v10, v8106; CHECK-NEXT:    vfwadd.vf v8, v10, fa0107; CHECK-NEXT:    ret108  %head = insertelement <vscale x 2 x float> poison, float %b, i32 0109  %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer110  %vc = fpext <vscale x 2 x float> %va to <vscale x 2 x double>111  %vd = fpext <vscale x 2 x float> %splat to <vscale x 2 x double>112  %ve = fadd <vscale x 2 x double> %vc, %vd113  ret <vscale x 2 x double> %ve114}115 116define <vscale x 2 x double> @vfwadd_vf_nxv2f64_2(<vscale x 2 x float> %va, float %b) {117; CHECK-LABEL: vfwadd_vf_nxv2f64_2:118; CHECK:       # %bb.0:119; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma120; CHECK-NEXT:    vmv1r.v v10, v8121; CHECK-NEXT:    vfwadd.vf v8, v10, fa0122; CHECK-NEXT:    ret123  %fpext = fpext float %b to double124  %head = insertelement <vscale x 2 x double> poison, double %fpext, i32 0125  %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer126  %vc = fpext <vscale x 2 x float> %va to <vscale x 2 x double>127  %ve = fadd <vscale x 2 x double> %vc, %splat128  ret <vscale x 2 x double> %ve129}130 131define <vscale x 2 x double> @vfwadd_wv_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x float> %vb) {132; CHECK-LABEL: vfwadd_wv_nxv2f64:133; CHECK:       # %bb.0:134; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma135; CHECK-NEXT:    vfwadd.wv v8, v8, v10136; CHECK-NEXT:    ret137  %vc = fpext <vscale x 2 x float> %vb to <vscale x 2 x double>138  %vd = fadd <vscale x 2 x double> %va, %vc139  ret <vscale x 2 x double> %vd140}141 142define <vscale x 2 x double> @vfwadd_wf_nxv2f64(<vscale x 2 x double> %va, float %b) {143; CHECK-LABEL: vfwadd_wf_nxv2f64:144; CHECK:       # %bb.0:145; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma146; CHECK-NEXT:    vfwadd.wf v8, v8, fa0147; CHECK-NEXT:    ret148  %head = insertelement <vscale x 2 x float> poison, float %b, i32 0149  %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer150  %vc = fpext <vscale x 2 x float> %splat to <vscale x 2 x double>151  %vd = fadd <vscale x 2 x double> %va, %vc152  ret <vscale x 2 x double> %vd153}154 155define <vscale x 2 x double> @vfwadd_wf_nxv2f64_2(<vscale x 2 x double> %va, float %b) {156; CHECK-LABEL: vfwadd_wf_nxv2f64_2:157; CHECK:       # %bb.0:158; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma159; CHECK-NEXT:    vfwadd.wf v8, v8, fa0160; CHECK-NEXT:    ret161  %fpext = fpext float %b to double162  %head = insertelement <vscale x 2 x double> poison, double %fpext, i32 0163  %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer164  %vd = fadd <vscale x 2 x double> %va, %splat165  ret <vscale x 2 x double> %vd166}167 168define <vscale x 4 x double> @vfwadd_vv_nxv4f64(<vscale x 4 x float> %va, <vscale x 4 x float> %vb) {169; CHECK-LABEL: vfwadd_vv_nxv4f64:170; CHECK:       # %bb.0:171; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma172; CHECK-NEXT:    vmv2r.v v12, v10173; CHECK-NEXT:    vmv2r.v v14, v8174; CHECK-NEXT:    vfwadd.vv v8, v14, v12175; CHECK-NEXT:    ret176  %vc = fpext <vscale x 4 x float> %va to <vscale x 4 x double>177  %vd = fpext <vscale x 4 x float> %vb to <vscale x 4 x double>178  %ve = fadd <vscale x 4 x double> %vc, %vd179  ret <vscale x 4 x double> %ve180}181 182define <vscale x 4 x double> @vfwadd_vf_nxv4f64(<vscale x 4 x float> %va, float %b) {183; CHECK-LABEL: vfwadd_vf_nxv4f64:184; CHECK:       # %bb.0:185; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma186; CHECK-NEXT:    vmv2r.v v12, v8187; CHECK-NEXT:    vfwadd.vf v8, v12, fa0188; CHECK-NEXT:    ret189  %head = insertelement <vscale x 4 x float> poison, float %b, i32 0190  %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer191  %vc = fpext <vscale x 4 x float> %va to <vscale x 4 x double>192  %vd = fpext <vscale x 4 x float> %splat to <vscale x 4 x double>193  %ve = fadd <vscale x 4 x double> %vc, %vd194  ret <vscale x 4 x double> %ve195}196 197define <vscale x 4 x double> @vfwadd_vf_nxv4f64_2(<vscale x 4 x float> %va, float %b) {198; CHECK-LABEL: vfwadd_vf_nxv4f64_2:199; CHECK:       # %bb.0:200; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma201; CHECK-NEXT:    vmv2r.v v12, v8202; CHECK-NEXT:    vfwadd.vf v8, v12, fa0203; CHECK-NEXT:    ret204  %fpext = fpext float %b to double205  %head = insertelement <vscale x 4 x double> poison, double %fpext, i32 0206  %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer207  %vc = fpext <vscale x 4 x float> %va to <vscale x 4 x double>208  %ve = fadd <vscale x 4 x double> %vc, %splat209  ret <vscale x 4 x double> %ve210}211 212define <vscale x 4 x double> @vfwadd_wv_nxv4f64(<vscale x 4 x double> %va, <vscale x 4 x float> %vb) {213; CHECK-LABEL: vfwadd_wv_nxv4f64:214; CHECK:       # %bb.0:215; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma216; CHECK-NEXT:    vfwadd.wv v8, v8, v12217; CHECK-NEXT:    ret218  %vc = fpext <vscale x 4 x float> %vb to <vscale x 4 x double>219  %vd = fadd <vscale x 4 x double> %va, %vc220  ret <vscale x 4 x double> %vd221}222 223define <vscale x 4 x double> @vfwadd_wf_nxv4f64(<vscale x 4 x double> %va, float %b) {224; CHECK-LABEL: vfwadd_wf_nxv4f64:225; CHECK:       # %bb.0:226; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma227; CHECK-NEXT:    vfwadd.wf v8, v8, fa0228; CHECK-NEXT:    ret229  %head = insertelement <vscale x 4 x float> poison, float %b, i32 0230  %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer231  %vc = fpext <vscale x 4 x float> %splat to <vscale x 4 x double>232  %vd = fadd <vscale x 4 x double> %va, %vc233  ret <vscale x 4 x double> %vd234}235 236define <vscale x 4 x double> @vfwadd_wf_nxv4f64_2(<vscale x 4 x double> %va, float %b) {237; CHECK-LABEL: vfwadd_wf_nxv4f64_2:238; CHECK:       # %bb.0:239; CHECK-NEXT:    vsetvli a0, zero, e32, m2, ta, ma240; CHECK-NEXT:    vfwadd.wf v8, v8, fa0241; CHECK-NEXT:    ret242  %fpext = fpext float %b to double243  %head = insertelement <vscale x 4 x double> poison, double %fpext, i32 0244  %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer245  %vd = fadd <vscale x 4 x double> %va, %splat246  ret <vscale x 4 x double> %vd247}248 249define <vscale x 8 x double> @vfwadd_vv_nxv8f64(<vscale x 8 x float> %va, <vscale x 8 x float> %vb) {250; CHECK-LABEL: vfwadd_vv_nxv8f64:251; CHECK:       # %bb.0:252; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma253; CHECK-NEXT:    vmv4r.v v16, v12254; CHECK-NEXT:    vmv4r.v v20, v8255; CHECK-NEXT:    vfwadd.vv v8, v20, v16256; CHECK-NEXT:    ret257  %vc = fpext <vscale x 8 x float> %va to <vscale x 8 x double>258  %vd = fpext <vscale x 8 x float> %vb to <vscale x 8 x double>259  %ve = fadd <vscale x 8 x double> %vc, %vd260  ret <vscale x 8 x double> %ve261}262 263define <vscale x 8 x double> @vfwadd_vf_nxv8f64(<vscale x 8 x float> %va, float %b) {264; CHECK-LABEL: vfwadd_vf_nxv8f64:265; CHECK:       # %bb.0:266; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma267; CHECK-NEXT:    vmv4r.v v16, v8268; CHECK-NEXT:    vfwadd.vf v8, v16, fa0269; CHECK-NEXT:    ret270  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0271  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer272  %vc = fpext <vscale x 8 x float> %va to <vscale x 8 x double>273  %vd = fpext <vscale x 8 x float> %splat to <vscale x 8 x double>274  %ve = fadd <vscale x 8 x double> %vc, %vd275  ret <vscale x 8 x double> %ve276}277 278define <vscale x 8 x double> @vfwadd_vf_nxv8f64_2(<vscale x 8 x float> %va, float %b) {279; CHECK-LABEL: vfwadd_vf_nxv8f64_2:280; CHECK:       # %bb.0:281; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma282; CHECK-NEXT:    vmv4r.v v16, v8283; CHECK-NEXT:    vfwadd.vf v8, v16, fa0284; CHECK-NEXT:    ret285  %fpext = fpext float %b to double286  %head = insertelement <vscale x 8 x double> poison, double %fpext, i32 0287  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer288  %vc = fpext <vscale x 8 x float> %va to <vscale x 8 x double>289  %ve = fadd <vscale x 8 x double> %vc, %splat290  ret <vscale x 8 x double> %ve291}292 293define <vscale x 8 x double> @vfwadd_wv_nxv8f64(<vscale x 8 x double> %va, <vscale x 8 x float> %vb) {294; CHECK-LABEL: vfwadd_wv_nxv8f64:295; CHECK:       # %bb.0:296; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma297; CHECK-NEXT:    vfwadd.wv v8, v8, v16298; CHECK-NEXT:    ret299  %vc = fpext <vscale x 8 x float> %vb to <vscale x 8 x double>300  %vd = fadd <vscale x 8 x double> %va, %vc301  ret <vscale x 8 x double> %vd302}303 304define <vscale x 8 x double> @vfwadd_wf_nxv8f64(<vscale x 8 x double> %va, float %b) {305; CHECK-LABEL: vfwadd_wf_nxv8f64:306; CHECK:       # %bb.0:307; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma308; CHECK-NEXT:    vfwadd.wf v8, v8, fa0309; CHECK-NEXT:    ret310  %head = insertelement <vscale x 8 x float> poison, float %b, i32 0311  %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer312  %vc = fpext <vscale x 8 x float> %splat to <vscale x 8 x double>313  %vd = fadd <vscale x 8 x double> %va, %vc314  ret <vscale x 8 x double> %vd315}316 317define <vscale x 8 x double> @vfwadd_wf_nxv8f64_2(<vscale x 8 x double> %va, float %b) {318; CHECK-LABEL: vfwadd_wf_nxv8f64_2:319; CHECK:       # %bb.0:320; CHECK-NEXT:    vsetvli a0, zero, e32, m4, ta, ma321; CHECK-NEXT:    vfwadd.wf v8, v8, fa0322; CHECK-NEXT:    ret323  %fpext = fpext float %b to double324  %head = insertelement <vscale x 8 x double> poison, double %fpext, i32 0325  %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer326  %vd = fadd <vscale x 8 x double> %va, %splat327  ret <vscale x 8 x double> %vd328}329 330define <vscale x 1 x double> @vfwadd_vv_nxv1f64_same_op(<vscale x 1 x float> %va) {331; CHECK-LABEL: vfwadd_vv_nxv1f64_same_op:332; CHECK:       # %bb.0:333; CHECK-NEXT:    vsetvli a0, zero, e32, mf2, ta, ma334; CHECK-NEXT:    vfwadd.vv v9, v8, v8335; CHECK-NEXT:    vmv1r.v v8, v9336; CHECK-NEXT:    ret337  %vb = fpext <vscale x 1 x float> %va to <vscale x 1 x double>338  %vc = fadd <vscale x 1 x double> %vb, %vb339  ret <vscale x 1 x double> %vc340}341