brintos

brintos / llvm-project-archived public Read only

0
0
Text · 21.2 KiB · 44362ef Raw
566 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -target-abi=ilp32d \3; RUN:   -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH4; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \5; RUN:   -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFH6; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfhmin,+v -target-abi=ilp32d \7; RUN:   -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN8; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfhmin,+v -target-abi=lp64d \9; RUN:   -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN10 11define <2 x half> @vfmax_v2f16_vv(<2 x half> %a, <2 x half> %b) {12; ZVFH-LABEL: vfmax_v2f16_vv:13; ZVFH:       # %bb.0:14; ZVFH-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma15; ZVFH-NEXT:    vfmax.vv v8, v8, v916; ZVFH-NEXT:    ret17;18; ZVFHMIN-LABEL: vfmax_v2f16_vv:19; ZVFHMIN:       # %bb.0:20; ZVFHMIN-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma21; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v922; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v823; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma24; ZVFHMIN-NEXT:    vfmax.vv v9, v9, v1025; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma26; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v927; ZVFHMIN-NEXT:    ret28  %v = call <2 x half> @llvm.maxnum.v2f16(<2 x half> %a, <2 x half> %b)29  ret <2 x half> %v30}31 32define <2 x half> @vfmax_v2f16_vf(<2 x half> %a, half %b) {33; ZVFH-LABEL: vfmax_v2f16_vf:34; ZVFH:       # %bb.0:35; ZVFH-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma36; ZVFH-NEXT:    vfmax.vf v8, v8, fa037; ZVFH-NEXT:    ret38;39; ZVFHMIN-LABEL: vfmax_v2f16_vf:40; ZVFHMIN:       # %bb.0:41; ZVFHMIN-NEXT:    fmv.x.h a0, fa042; ZVFHMIN-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma43; ZVFHMIN-NEXT:    vmv.v.x v9, a044; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v845; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v946; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma47; ZVFHMIN-NEXT:    vfmax.vv v9, v10, v848; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma49; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v950; ZVFHMIN-NEXT:    ret51  %head = insertelement <2 x half> poison, half %b, i32 052  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer53  %v = call <2 x half> @llvm.maxnum.v2f16(<2 x half> %a, <2 x half> %splat)54  ret <2 x half> %v55}56 57define <2 x half> @vfmax_v2f16_fv(<2 x half> %a, half %b) {58; ZVFH-LABEL: vfmax_v2f16_fv:59; ZVFH:       # %bb.0:60; ZVFH-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma61; ZVFH-NEXT:    vfmax.vf v8, v8, fa062; ZVFH-NEXT:    ret63;64; ZVFHMIN-LABEL: vfmax_v2f16_fv:65; ZVFHMIN:       # %bb.0:66; ZVFHMIN-NEXT:    fmv.x.h a0, fa067; ZVFHMIN-NEXT:    vsetivli zero, 2, e16, mf4, ta, ma68; ZVFHMIN-NEXT:    vmv.v.x v9, a069; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v870; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v971; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, mf2, ta, ma72; ZVFHMIN-NEXT:    vfmax.vv v9, v8, v1073; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf4, ta, ma74; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v975; ZVFHMIN-NEXT:    ret76  %head = insertelement <2 x half> poison, half %b, i32 077  %splat = shufflevector <2 x half> %head, <2 x half> poison, <2 x i32> zeroinitializer78  %v = call <2 x half> @llvm.maxnum.v2f16(<2 x half> %splat, <2 x half> %a)79  ret <2 x half> %v80}81 82define <4 x half> @vfmax_v4f16_vv(<4 x half> %a, <4 x half> %b) {83; ZVFH-LABEL: vfmax_v4f16_vv:84; ZVFH:       # %bb.0:85; ZVFH-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma86; ZVFH-NEXT:    vfmax.vv v8, v8, v987; ZVFH-NEXT:    ret88;89; ZVFHMIN-LABEL: vfmax_v4f16_vv:90; ZVFHMIN:       # %bb.0:91; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma92; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v993; ZVFHMIN-NEXT:    vfwcvt.f.f.v v9, v894; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma95; ZVFHMIN-NEXT:    vfmax.vv v9, v9, v1096; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma97; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v998; ZVFHMIN-NEXT:    ret99  %v = call <4 x half> @llvm.maxnum.v4f16(<4 x half> %a, <4 x half> %b)100  ret <4 x half> %v101}102 103define <4 x half> @vfmax_v4f16_vf(<4 x half> %a, half %b) {104; ZVFH-LABEL: vfmax_v4f16_vf:105; ZVFH:       # %bb.0:106; ZVFH-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma107; ZVFH-NEXT:    vfmax.vf v8, v8, fa0108; ZVFH-NEXT:    ret109;110; ZVFHMIN-LABEL: vfmax_v4f16_vf:111; ZVFHMIN:       # %bb.0:112; ZVFHMIN-NEXT:    fmv.x.h a0, fa0113; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma114; ZVFHMIN-NEXT:    vmv.v.x v9, a0115; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8116; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9117; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma118; ZVFHMIN-NEXT:    vfmax.vv v9, v10, v8119; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma120; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9121; ZVFHMIN-NEXT:    ret122  %head = insertelement <4 x half> poison, half %b, i32 0123  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer124  %v = call <4 x half> @llvm.maxnum.v4f16(<4 x half> %a, <4 x half> %splat)125  ret <4 x half> %v126}127 128define <4 x half> @vfmax_v4f16_fv(<4 x half> %a, half %b) {129; ZVFH-LABEL: vfmax_v4f16_fv:130; ZVFH:       # %bb.0:131; ZVFH-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma132; ZVFH-NEXT:    vfmax.vf v8, v8, fa0133; ZVFH-NEXT:    ret134;135; ZVFHMIN-LABEL: vfmax_v4f16_fv:136; ZVFHMIN:       # %bb.0:137; ZVFHMIN-NEXT:    fmv.x.h a0, fa0138; ZVFHMIN-NEXT:    vsetivli zero, 4, e16, mf2, ta, ma139; ZVFHMIN-NEXT:    vmv.v.x v9, a0140; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8141; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v9142; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m1, ta, ma143; ZVFHMIN-NEXT:    vfmax.vv v9, v8, v10144; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, mf2, ta, ma145; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v9146; ZVFHMIN-NEXT:    ret147  %head = insertelement <4 x half> poison, half %b, i32 0148  %splat = shufflevector <4 x half> %head, <4 x half> poison, <4 x i32> zeroinitializer149  %v = call <4 x half> @llvm.maxnum.v4f16(<4 x half> %splat, <4 x half> %a)150  ret <4 x half> %v151}152 153define <8 x half> @vfmax_v8f16_vv(<8 x half> %a, <8 x half> %b) {154; ZVFH-LABEL: vfmax_v8f16_vv:155; ZVFH:       # %bb.0:156; ZVFH-NEXT:    vsetivli zero, 8, e16, m1, ta, ma157; ZVFH-NEXT:    vfmax.vv v8, v8, v9158; ZVFH-NEXT:    ret159;160; ZVFHMIN-LABEL: vfmax_v8f16_vv:161; ZVFHMIN:       # %bb.0:162; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma163; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v9164; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8165; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma166; ZVFHMIN-NEXT:    vfmax.vv v10, v12, v10167; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma168; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10169; ZVFHMIN-NEXT:    ret170  %v = call <8 x half> @llvm.maxnum.v8f16(<8 x half> %a, <8 x half> %b)171  ret <8 x half> %v172}173 174define <8 x half> @vfmax_v8f16_vf(<8 x half> %a, half %b) {175; ZVFH-LABEL: vfmax_v8f16_vf:176; ZVFH:       # %bb.0:177; ZVFH-NEXT:    vsetivli zero, 8, e16, m1, ta, ma178; ZVFH-NEXT:    vfmax.vf v8, v8, fa0179; ZVFH-NEXT:    ret180;181; ZVFHMIN-LABEL: vfmax_v8f16_vf:182; ZVFHMIN:       # %bb.0:183; ZVFHMIN-NEXT:    fmv.x.h a0, fa0184; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma185; ZVFHMIN-NEXT:    vmv.v.x v12, a0186; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8187; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v12188; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma189; ZVFHMIN-NEXT:    vfmax.vv v10, v10, v8190; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma191; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10192; ZVFHMIN-NEXT:    ret193  %head = insertelement <8 x half> poison, half %b, i32 0194  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer195  %v = call <8 x half> @llvm.maxnum.v8f16(<8 x half> %a, <8 x half> %splat)196  ret <8 x half> %v197}198 199define <8 x half> @vfmax_v8f16_fv(<8 x half> %a, half %b) {200; ZVFH-LABEL: vfmax_v8f16_fv:201; ZVFH:       # %bb.0:202; ZVFH-NEXT:    vsetivli zero, 8, e16, m1, ta, ma203; ZVFH-NEXT:    vfmax.vf v8, v8, fa0204; ZVFH-NEXT:    ret205;206; ZVFHMIN-LABEL: vfmax_v8f16_fv:207; ZVFHMIN:       # %bb.0:208; ZVFHMIN-NEXT:    fmv.x.h a0, fa0209; ZVFHMIN-NEXT:    vsetivli zero, 8, e16, m1, ta, ma210; ZVFHMIN-NEXT:    vmv.v.x v12, a0211; ZVFHMIN-NEXT:    vfwcvt.f.f.v v10, v8212; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v12213; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m2, ta, ma214; ZVFHMIN-NEXT:    vfmax.vv v10, v8, v10215; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m1, ta, ma216; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v10217; ZVFHMIN-NEXT:    ret218  %head = insertelement <8 x half> poison, half %b, i32 0219  %splat = shufflevector <8 x half> %head, <8 x half> poison, <8 x i32> zeroinitializer220  %v = call <8 x half> @llvm.maxnum.v8f16(<8 x half> %splat, <8 x half> %a)221  ret <8 x half> %v222}223 224define <16 x half> @vfmax_v16f16_vv(<16 x half> %a, <16 x half> %b) {225; ZVFH-LABEL: vfmax_v16f16_vv:226; ZVFH:       # %bb.0:227; ZVFH-NEXT:    vsetivli zero, 16, e16, m2, ta, ma228; ZVFH-NEXT:    vfmax.vv v8, v8, v10229; ZVFH-NEXT:    ret230;231; ZVFHMIN-LABEL: vfmax_v16f16_vv:232; ZVFHMIN:       # %bb.0:233; ZVFHMIN-NEXT:    vsetivli zero, 16, e16, m2, ta, ma234; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v10235; ZVFHMIN-NEXT:    vfwcvt.f.f.v v16, v8236; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma237; ZVFHMIN-NEXT:    vfmax.vv v12, v16, v12238; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma239; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12240; ZVFHMIN-NEXT:    ret241  %v = call <16 x half> @llvm.maxnum.v16f16(<16 x half> %a, <16 x half> %b)242  ret <16 x half> %v243}244 245define <16 x half> @vfmax_v16f16_vf(<16 x half> %a, half %b) {246; ZVFH-LABEL: vfmax_v16f16_vf:247; ZVFH:       # %bb.0:248; ZVFH-NEXT:    vsetivli zero, 16, e16, m2, ta, ma249; ZVFH-NEXT:    vfmax.vf v8, v8, fa0250; ZVFH-NEXT:    ret251;252; ZVFHMIN-LABEL: vfmax_v16f16_vf:253; ZVFHMIN:       # %bb.0:254; ZVFHMIN-NEXT:    fmv.x.h a0, fa0255; ZVFHMIN-NEXT:    vsetivli zero, 16, e16, m2, ta, ma256; ZVFHMIN-NEXT:    vmv.v.x v16, a0257; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8258; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16259; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma260; ZVFHMIN-NEXT:    vfmax.vv v12, v12, v8261; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma262; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12263; ZVFHMIN-NEXT:    ret264  %head = insertelement <16 x half> poison, half %b, i32 0265  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer266  %v = call <16 x half> @llvm.maxnum.v16f16(<16 x half> %a, <16 x half> %splat)267  ret <16 x half> %v268}269 270define <16 x half> @vfmax_v16f16_fv(<16 x half> %a, half %b) {271; ZVFH-LABEL: vfmax_v16f16_fv:272; ZVFH:       # %bb.0:273; ZVFH-NEXT:    vsetivli zero, 16, e16, m2, ta, ma274; ZVFH-NEXT:    vfmax.vf v8, v8, fa0275; ZVFH-NEXT:    ret276;277; ZVFHMIN-LABEL: vfmax_v16f16_fv:278; ZVFHMIN:       # %bb.0:279; ZVFHMIN-NEXT:    fmv.x.h a0, fa0280; ZVFHMIN-NEXT:    vsetivli zero, 16, e16, m2, ta, ma281; ZVFHMIN-NEXT:    vmv.v.x v16, a0282; ZVFHMIN-NEXT:    vfwcvt.f.f.v v12, v8283; ZVFHMIN-NEXT:    vfwcvt.f.f.v v8, v16284; ZVFHMIN-NEXT:    vsetvli zero, zero, e32, m4, ta, ma285; ZVFHMIN-NEXT:    vfmax.vv v12, v8, v12286; ZVFHMIN-NEXT:    vsetvli zero, zero, e16, m2, ta, ma287; ZVFHMIN-NEXT:    vfncvt.f.f.w v8, v12288; ZVFHMIN-NEXT:    ret289  %head = insertelement <16 x half> poison, half %b, i32 0290  %splat = shufflevector <16 x half> %head, <16 x half> poison, <16 x i32> zeroinitializer291  %v = call <16 x half> @llvm.maxnum.v16f16(<16 x half> %splat, <16 x half> %a)292  ret <16 x half> %v293}294 295define <2 x float> @vfmax_v2f32_vv(<2 x float> %a, <2 x float> %b) {296; CHECK-LABEL: vfmax_v2f32_vv:297; CHECK:       # %bb.0:298; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma299; CHECK-NEXT:    vfmax.vv v8, v8, v9300; CHECK-NEXT:    ret301  %v = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %a, <2 x float> %b)302  ret <2 x float> %v303}304 305define <2 x float> @vfmax_v2f32_vf(<2 x float> %a, float %b) {306; CHECK-LABEL: vfmax_v2f32_vf:307; CHECK:       # %bb.0:308; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma309; CHECK-NEXT:    vfmax.vf v8, v8, fa0310; CHECK-NEXT:    ret311  %head = insertelement <2 x float> poison, float %b, i32 0312  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer313  %v = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %a, <2 x float> %splat)314  ret <2 x float> %v315}316 317define <2 x float> @vfmax_v2f32_fv(<2 x float> %a, float %b) {318; CHECK-LABEL: vfmax_v2f32_fv:319; CHECK:       # %bb.0:320; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, ma321; CHECK-NEXT:    vfmax.vf v8, v8, fa0322; CHECK-NEXT:    ret323  %head = insertelement <2 x float> poison, float %b, i32 0324  %splat = shufflevector <2 x float> %head, <2 x float> poison, <2 x i32> zeroinitializer325  %v = call <2 x float> @llvm.maxnum.v2f32(<2 x float> %splat, <2 x float> %a)326  ret <2 x float> %v327}328 329define <4 x float> @vfmax_v4f32_vv(<4 x float> %a, <4 x float> %b) {330; CHECK-LABEL: vfmax_v4f32_vv:331; CHECK:       # %bb.0:332; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma333; CHECK-NEXT:    vfmax.vv v8, v8, v9334; CHECK-NEXT:    ret335  %v = call <4 x float> @llvm.maxnum.v4f32(<4 x float> %a, <4 x float> %b)336  ret <4 x float> %v337}338 339define <4 x float> @vfmax_v4f32_vf(<4 x float> %a, float %b) {340; CHECK-LABEL: vfmax_v4f32_vf:341; CHECK:       # %bb.0:342; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma343; CHECK-NEXT:    vfmax.vf v8, v8, fa0344; CHECK-NEXT:    ret345  %head = insertelement <4 x float> poison, float %b, i32 0346  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer347  %v = call <4 x float> @llvm.maxnum.v4f32(<4 x float> %a, <4 x float> %splat)348  ret <4 x float> %v349}350 351define <4 x float> @vfmax_v4f32_fv(<4 x float> %a, float %b) {352; CHECK-LABEL: vfmax_v4f32_fv:353; CHECK:       # %bb.0:354; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma355; CHECK-NEXT:    vfmax.vf v8, v8, fa0356; CHECK-NEXT:    ret357  %head = insertelement <4 x float> poison, float %b, i32 0358  %splat = shufflevector <4 x float> %head, <4 x float> poison, <4 x i32> zeroinitializer359  %v = call <4 x float> @llvm.maxnum.v4f32(<4 x float> %splat, <4 x float> %a)360  ret <4 x float> %v361}362 363define <8 x float> @vfmax_v8f32_vv(<8 x float> %a, <8 x float> %b) {364; CHECK-LABEL: vfmax_v8f32_vv:365; CHECK:       # %bb.0:366; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma367; CHECK-NEXT:    vfmax.vv v8, v8, v10368; CHECK-NEXT:    ret369  %v = call <8 x float> @llvm.maxnum.v8f32(<8 x float> %a, <8 x float> %b)370  ret <8 x float> %v371}372 373define <8 x float> @vfmax_v8f32_vf(<8 x float> %a, float %b) {374; CHECK-LABEL: vfmax_v8f32_vf:375; CHECK:       # %bb.0:376; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma377; CHECK-NEXT:    vfmax.vf v8, v8, fa0378; CHECK-NEXT:    ret379  %head = insertelement <8 x float> poison, float %b, i32 0380  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer381  %v = call <8 x float> @llvm.maxnum.v8f32(<8 x float> %a, <8 x float> %splat)382  ret <8 x float> %v383}384 385define <8 x float> @vfmax_v8f32_fv(<8 x float> %a, float %b) {386; CHECK-LABEL: vfmax_v8f32_fv:387; CHECK:       # %bb.0:388; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, ma389; CHECK-NEXT:    vfmax.vf v8, v8, fa0390; CHECK-NEXT:    ret391  %head = insertelement <8 x float> poison, float %b, i32 0392  %splat = shufflevector <8 x float> %head, <8 x float> poison, <8 x i32> zeroinitializer393  %v = call <8 x float> @llvm.maxnum.v8f32(<8 x float> %splat, <8 x float> %a)394  ret <8 x float> %v395}396 397define <16 x float> @vfmax_v16f32_vv(<16 x float> %a, <16 x float> %b) {398; CHECK-LABEL: vfmax_v16f32_vv:399; CHECK:       # %bb.0:400; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma401; CHECK-NEXT:    vfmax.vv v8, v8, v12402; CHECK-NEXT:    ret403  %v = call <16 x float> @llvm.maxnum.v16f32(<16 x float> %a, <16 x float> %b)404  ret <16 x float> %v405}406 407define <16 x float> @vfmax_v16f32_vf(<16 x float> %a, float %b) {408; CHECK-LABEL: vfmax_v16f32_vf:409; CHECK:       # %bb.0:410; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma411; CHECK-NEXT:    vfmax.vf v8, v8, fa0412; CHECK-NEXT:    ret413  %head = insertelement <16 x float> poison, float %b, i32 0414  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer415  %v = call <16 x float> @llvm.maxnum.v16f32(<16 x float> %a, <16 x float> %splat)416  ret <16 x float> %v417}418 419define <16 x float> @vfmax_v16f32_fv(<16 x float> %a, float %b) {420; CHECK-LABEL: vfmax_v16f32_fv:421; CHECK:       # %bb.0:422; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, ma423; CHECK-NEXT:    vfmax.vf v8, v8, fa0424; CHECK-NEXT:    ret425  %head = insertelement <16 x float> poison, float %b, i32 0426  %splat = shufflevector <16 x float> %head, <16 x float> poison, <16 x i32> zeroinitializer427  %v = call <16 x float> @llvm.maxnum.v16f32(<16 x float> %splat, <16 x float> %a)428  ret <16 x float> %v429}430 431define <2 x double> @vfmax_v2f64_vv(<2 x double> %a, <2 x double> %b) {432; CHECK-LABEL: vfmax_v2f64_vv:433; CHECK:       # %bb.0:434; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma435; CHECK-NEXT:    vfmax.vv v8, v8, v9436; CHECK-NEXT:    ret437  %v = call <2 x double> @llvm.maxnum.v2f64(<2 x double> %a, <2 x double> %b)438  ret <2 x double> %v439}440 441define <2 x double> @vfmax_v2f64_vf(<2 x double> %a, double %b) {442; CHECK-LABEL: vfmax_v2f64_vf:443; CHECK:       # %bb.0:444; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma445; CHECK-NEXT:    vfmax.vf v8, v8, fa0446; CHECK-NEXT:    ret447  %head = insertelement <2 x double> poison, double %b, i32 0448  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer449  %v = call <2 x double> @llvm.maxnum.v2f64(<2 x double> %a, <2 x double> %splat)450  ret <2 x double> %v451}452 453define <2 x double> @vfmax_v2f64_fv(<2 x double> %a, double %b) {454; CHECK-LABEL: vfmax_v2f64_fv:455; CHECK:       # %bb.0:456; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma457; CHECK-NEXT:    vfmax.vf v8, v8, fa0458; CHECK-NEXT:    ret459  %head = insertelement <2 x double> poison, double %b, i32 0460  %splat = shufflevector <2 x double> %head, <2 x double> poison, <2 x i32> zeroinitializer461  %v = call <2 x double> @llvm.maxnum.v2f64(<2 x double> %splat, <2 x double> %a)462  ret <2 x double> %v463}464 465define <4 x double> @vfmax_v4f64_vv(<4 x double> %a, <4 x double> %b) {466; CHECK-LABEL: vfmax_v4f64_vv:467; CHECK:       # %bb.0:468; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma469; CHECK-NEXT:    vfmax.vv v8, v8, v10470; CHECK-NEXT:    ret471  %v = call <4 x double> @llvm.maxnum.v4f64(<4 x double> %a, <4 x double> %b)472  ret <4 x double> %v473}474 475define <4 x double> @vfmax_v4f64_vf(<4 x double> %a, double %b) {476; CHECK-LABEL: vfmax_v4f64_vf:477; CHECK:       # %bb.0:478; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma479; CHECK-NEXT:    vfmax.vf v8, v8, fa0480; CHECK-NEXT:    ret481  %head = insertelement <4 x double> poison, double %b, i32 0482  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer483  %v = call <4 x double> @llvm.maxnum.v4f64(<4 x double> %a, <4 x double> %splat)484  ret <4 x double> %v485}486 487define <4 x double> @vfmax_v4f64_fv(<4 x double> %a, double %b) {488; CHECK-LABEL: vfmax_v4f64_fv:489; CHECK:       # %bb.0:490; CHECK-NEXT:    vsetivli zero, 4, e64, m2, ta, ma491; CHECK-NEXT:    vfmax.vf v8, v8, fa0492; CHECK-NEXT:    ret493  %head = insertelement <4 x double> poison, double %b, i32 0494  %splat = shufflevector <4 x double> %head, <4 x double> poison, <4 x i32> zeroinitializer495  %v = call <4 x double> @llvm.maxnum.v4f64(<4 x double> %splat, <4 x double> %a)496  ret <4 x double> %v497}498 499define <8 x double> @vfmax_v8f64_vv(<8 x double> %a, <8 x double> %b) {500; CHECK-LABEL: vfmax_v8f64_vv:501; CHECK:       # %bb.0:502; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma503; CHECK-NEXT:    vfmax.vv v8, v8, v12504; CHECK-NEXT:    ret505  %v = call <8 x double> @llvm.maxnum.v8f64(<8 x double> %a, <8 x double> %b)506  ret <8 x double> %v507}508 509define <8 x double> @vfmax_v8f64_vf(<8 x double> %a, double %b) {510; CHECK-LABEL: vfmax_v8f64_vf:511; CHECK:       # %bb.0:512; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma513; CHECK-NEXT:    vfmax.vf v8, v8, fa0514; CHECK-NEXT:    ret515  %head = insertelement <8 x double> poison, double %b, i32 0516  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer517  %v = call <8 x double> @llvm.maxnum.v8f64(<8 x double> %a, <8 x double> %splat)518  ret <8 x double> %v519}520 521define <8 x double> @vfmax_v8f64_fv(<8 x double> %a, double %b) {522; CHECK-LABEL: vfmax_v8f64_fv:523; CHECK:       # %bb.0:524; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, ma525; CHECK-NEXT:    vfmax.vf v8, v8, fa0526; CHECK-NEXT:    ret527  %head = insertelement <8 x double> poison, double %b, i32 0528  %splat = shufflevector <8 x double> %head, <8 x double> poison, <8 x i32> zeroinitializer529  %v = call <8 x double> @llvm.maxnum.v8f64(<8 x double> %splat, <8 x double> %a)530  ret <8 x double> %v531}532 533define <16 x double> @vfmax_v16f64_vv(<16 x double> %a, <16 x double> %b) {534; CHECK-LABEL: vfmax_v16f64_vv:535; CHECK:       # %bb.0:536; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma537; CHECK-NEXT:    vfmax.vv v8, v8, v16538; CHECK-NEXT:    ret539  %v = call <16 x double> @llvm.maxnum.v16f64(<16 x double> %a, <16 x double> %b)540  ret <16 x double> %v541}542 543define <16 x double> @vfmax_v16f64_vf(<16 x double> %a, double %b) {544; CHECK-LABEL: vfmax_v16f64_vf:545; CHECK:       # %bb.0:546; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma547; CHECK-NEXT:    vfmax.vf v8, v8, fa0548; CHECK-NEXT:    ret549  %head = insertelement <16 x double> poison, double %b, i32 0550  %splat = shufflevector <16 x double> %head, <16 x double> poison, <16 x i32> zeroinitializer551  %v = call <16 x double> @llvm.maxnum.v16f64(<16 x double> %a, <16 x double> %splat)552  ret <16 x double> %v553}554 555define <16 x double> @vfmax_v16f64_fv(<16 x double> %a, double %b) {556; CHECK-LABEL: vfmax_v16f64_fv:557; CHECK:       # %bb.0:558; CHECK-NEXT:    vsetivli zero, 16, e64, m8, ta, ma559; CHECK-NEXT:    vfmax.vf v8, v8, fa0560; CHECK-NEXT:    ret561  %head = insertelement <16 x double> poison, double %b, i32 0562  %splat = shufflevector <16 x double> %head, <16 x double> poison, <16 x i32> zeroinitializer563  %v = call <16 x double> @llvm.maxnum.v16f64(<16 x double> %splat, <16 x double> %a)564  ret <16 x double> %v565}566