762 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+zfbfmin,+zvfbfmin,+v \3; RUN: -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \4; RUN: --check-prefixes=CHECK,ZVFH5; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+zfbfmin,+zvfbfmin,+v \6; RUN: -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \7; RUN: --check-prefixes=CHECK,ZVFH8; RUN: llc -mtriple=riscv32 -mattr=+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v \9; RUN: -target-abi=ilp32d -verify-machineinstrs < %s | FileCheck %s \10; RUN: --check-prefixes=CHECK,ZVFHMIN11; RUN: llc -mtriple=riscv64 -mattr=+d,+zfhmin,+zvfhmin,+zfbfmin,+zvfbfmin,+v \12; RUN: -target-abi=lp64d -verify-machineinstrs < %s | FileCheck %s \13; RUN: --check-prefixes=CHECK,ZVFHMIN14 15define <vscale x 1 x bfloat> @vfmax_nxv1bf16_vv(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b) {16; CHECK-LABEL: vfmax_nxv1bf16_vv:17; CHECK: # %bb.0:18; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma19; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v920; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v821; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma22; CHECK-NEXT: vfmax.vv v9, v9, v1023; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma24; CHECK-NEXT: vfncvtbf16.f.f.w v8, v925; CHECK-NEXT: ret26 %v = call <vscale x 1 x bfloat> @llvm.maxnum.nxv1bf16(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %b)27 ret <vscale x 1 x bfloat> %v28}29 30define <vscale x 1 x bfloat> @vfmax_nxv1bf16_vf(<vscale x 1 x bfloat> %a, bfloat %b) {31; CHECK-LABEL: vfmax_nxv1bf16_vf:32; CHECK: # %bb.0:33; CHECK-NEXT: fcvt.s.bf16 fa5, fa034; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma35; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v836; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma37; CHECK-NEXT: vfmax.vf v9, v9, fa538; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma39; CHECK-NEXT: vfncvtbf16.f.f.w v8, v940; CHECK-NEXT: ret41 %head = insertelement <vscale x 1 x bfloat> poison, bfloat %b, i32 042 %splat = shufflevector <vscale x 1 x bfloat> %head, <vscale x 1 x bfloat> poison, <vscale x 1 x i32> zeroinitializer43 %v = call <vscale x 1 x bfloat> @llvm.maxnum.nxv1bf16(<vscale x 1 x bfloat> %a, <vscale x 1 x bfloat> %splat)44 ret <vscale x 1 x bfloat> %v45}46 47define <vscale x 2 x bfloat> @vfmax_nxv2bf16_vv(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b) {48; CHECK-LABEL: vfmax_nxv2bf16_vv:49; CHECK: # %bb.0:50; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma51; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v952; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v853; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma54; CHECK-NEXT: vfmax.vv v9, v9, v1055; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma56; CHECK-NEXT: vfncvtbf16.f.f.w v8, v957; CHECK-NEXT: ret58 %v = call <vscale x 2 x bfloat> @llvm.maxnum.nxv2bf16(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %b)59 ret <vscale x 2 x bfloat> %v60}61 62define <vscale x 2 x bfloat> @vfmax_nxv2bf16_vf(<vscale x 2 x bfloat> %a, bfloat %b) {63; CHECK-LABEL: vfmax_nxv2bf16_vf:64; CHECK: # %bb.0:65; CHECK-NEXT: fcvt.s.bf16 fa5, fa066; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma67; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v868; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma69; CHECK-NEXT: vfmax.vf v9, v9, fa570; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma71; CHECK-NEXT: vfncvtbf16.f.f.w v8, v972; CHECK-NEXT: ret73 %head = insertelement <vscale x 2 x bfloat> poison, bfloat %b, i32 074 %splat = shufflevector <vscale x 2 x bfloat> %head, <vscale x 2 x bfloat> poison, <vscale x 2 x i32> zeroinitializer75 %v = call <vscale x 2 x bfloat> @llvm.maxnum.nxv2bf16(<vscale x 2 x bfloat> %a, <vscale x 2 x bfloat> %splat)76 ret <vscale x 2 x bfloat> %v77}78 79define <vscale x 4 x bfloat> @vfmax_nxv4bf16_vv(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b) {80; CHECK-LABEL: vfmax_nxv4bf16_vv:81; CHECK: # %bb.0:82; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma83; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v984; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v885; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma86; CHECK-NEXT: vfmax.vv v10, v12, v1087; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma88; CHECK-NEXT: vfncvtbf16.f.f.w v8, v1089; CHECK-NEXT: ret90 %v = call <vscale x 4 x bfloat> @llvm.maxnum.nxv4bf16(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %b)91 ret <vscale x 4 x bfloat> %v92}93 94define <vscale x 4 x bfloat> @vfmax_nxv4bf16_vf(<vscale x 4 x bfloat> %a, bfloat %b) {95; CHECK-LABEL: vfmax_nxv4bf16_vf:96; CHECK: # %bb.0:97; CHECK-NEXT: fcvt.s.bf16 fa5, fa098; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma99; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8100; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma101; CHECK-NEXT: vfmax.vf v10, v10, fa5102; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma103; CHECK-NEXT: vfncvtbf16.f.f.w v8, v10104; CHECK-NEXT: ret105 %head = insertelement <vscale x 4 x bfloat> poison, bfloat %b, i32 0106 %splat = shufflevector <vscale x 4 x bfloat> %head, <vscale x 4 x bfloat> poison, <vscale x 4 x i32> zeroinitializer107 %v = call <vscale x 4 x bfloat> @llvm.maxnum.nxv4bf16(<vscale x 4 x bfloat> %a, <vscale x 4 x bfloat> %splat)108 ret <vscale x 4 x bfloat> %v109}110 111define <vscale x 8 x bfloat> @vfmax_nxv8bf16_vv(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b) {112; CHECK-LABEL: vfmax_nxv8bf16_vv:113; CHECK: # %bb.0:114; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma115; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v10116; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8117; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma118; CHECK-NEXT: vfmax.vv v12, v16, v12119; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma120; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12121; CHECK-NEXT: ret122 %v = call <vscale x 8 x bfloat> @llvm.maxnum.nxv8bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %b)123 ret <vscale x 8 x bfloat> %v124}125 126define <vscale x 8 x bfloat> @vfmax_nxv8bf16_vf(<vscale x 8 x bfloat> %a, bfloat %b) {127; CHECK-LABEL: vfmax_nxv8bf16_vf:128; CHECK: # %bb.0:129; CHECK-NEXT: fcvt.s.bf16 fa5, fa0130; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma131; CHECK-NEXT: vfwcvtbf16.f.f.v v12, v8132; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, ma133; CHECK-NEXT: vfmax.vf v12, v12, fa5134; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, ma135; CHECK-NEXT: vfncvtbf16.f.f.w v8, v12136; CHECK-NEXT: ret137 %head = insertelement <vscale x 8 x bfloat> poison, bfloat %b, i32 0138 %splat = shufflevector <vscale x 8 x bfloat> %head, <vscale x 8 x bfloat> poison, <vscale x 8 x i32> zeroinitializer139 %v = call <vscale x 8 x bfloat> @llvm.maxnum.nxv8bf16(<vscale x 8 x bfloat> %a, <vscale x 8 x bfloat> %splat)140 ret <vscale x 8 x bfloat> %v141}142 143define <vscale x 16 x bfloat> @vfmax_nxv16bf16_vv(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b) {144; CHECK-LABEL: vfmax_nxv16bf16_vv:145; CHECK: # %bb.0:146; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma147; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v12148; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v8149; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma150; CHECK-NEXT: vfmax.vv v16, v24, v16151; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma152; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16153; CHECK-NEXT: ret154 %v = call <vscale x 16 x bfloat> @llvm.maxnum.nxv16bf16(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %b)155 ret <vscale x 16 x bfloat> %v156}157 158define <vscale x 16 x bfloat> @vfmax_nxv16bf16_vf(<vscale x 16 x bfloat> %a, bfloat %b) {159; CHECK-LABEL: vfmax_nxv16bf16_vf:160; CHECK: # %bb.0:161; CHECK-NEXT: fcvt.s.bf16 fa5, fa0162; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma163; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8164; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma165; CHECK-NEXT: vfmax.vf v16, v16, fa5166; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma167; CHECK-NEXT: vfncvtbf16.f.f.w v8, v16168; CHECK-NEXT: ret169 %head = insertelement <vscale x 16 x bfloat> poison, bfloat %b, i32 0170 %splat = shufflevector <vscale x 16 x bfloat> %head, <vscale x 16 x bfloat> poison, <vscale x 16 x i32> zeroinitializer171 %v = call <vscale x 16 x bfloat> @llvm.maxnum.nxv16bf16(<vscale x 16 x bfloat> %a, <vscale x 16 x bfloat> %splat)172 ret <vscale x 16 x bfloat> %v173}174 175define <vscale x 32 x bfloat> @vfmax_nxv32bf16_vv(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b) {176; CHECK-LABEL: vfmax_nxv32bf16_vv:177; CHECK: # %bb.0:178; CHECK-NEXT: addi sp, sp, -16179; CHECK-NEXT: .cfi_def_cfa_offset 16180; CHECK-NEXT: csrr a0, vlenb181; CHECK-NEXT: slli a0, a0, 3182; CHECK-NEXT: sub sp, sp, a0183; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb184; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma185; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v16186; CHECK-NEXT: addi a0, sp, 16187; CHECK-NEXT: vs8r.v v24, (a0) # vscale x 64-byte Folded Spill188; CHECK-NEXT: vfwcvtbf16.f.f.v v0, v8189; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v20190; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v12191; CHECK-NEXT: vl8r.v v8, (a0) # vscale x 64-byte Folded Reload192; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma193; CHECK-NEXT: vfmax.vv v0, v0, v8194; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma195; CHECK-NEXT: vfncvtbf16.f.f.w v8, v0196; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma197; CHECK-NEXT: vfmax.vv v16, v16, v24198; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma199; CHECK-NEXT: vfncvtbf16.f.f.w v12, v16200; CHECK-NEXT: csrr a0, vlenb201; CHECK-NEXT: slli a0, a0, 3202; CHECK-NEXT: add sp, sp, a0203; CHECK-NEXT: .cfi_def_cfa sp, 16204; CHECK-NEXT: addi sp, sp, 16205; CHECK-NEXT: .cfi_def_cfa_offset 0206; CHECK-NEXT: ret207 %v = call <vscale x 32 x bfloat> @llvm.maxnum.nxv32bf16(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %b)208 ret <vscale x 32 x bfloat> %v209}210 211define <vscale x 32 x bfloat> @vfmax_nxv32bf16_vf(<vscale x 32 x bfloat> %a, bfloat %b) {212; CHECK-LABEL: vfmax_nxv32bf16_vf:213; CHECK: # %bb.0:214; CHECK-NEXT: addi sp, sp, -16215; CHECK-NEXT: .cfi_def_cfa_offset 16216; CHECK-NEXT: csrr a0, vlenb217; CHECK-NEXT: slli a0, a0, 3218; CHECK-NEXT: sub sp, sp, a0219; CHECK-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb220; CHECK-NEXT: fmv.x.h a0, fa0221; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma222; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v8223; CHECK-NEXT: addi a1, sp, 16224; CHECK-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill225; CHECK-NEXT: vfwcvtbf16.f.f.v v24, v12226; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, ma227; CHECK-NEXT: vmv.v.x v8, a0228; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma229; CHECK-NEXT: vfwcvtbf16.f.f.v v0, v8230; CHECK-NEXT: vfwcvtbf16.f.f.v v16, v12231; CHECK-NEXT: addi a0, sp, 16232; CHECK-NEXT: vl8r.v v8, (a0) # vscale x 64-byte Folded Reload233; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma234; CHECK-NEXT: vfmax.vv v0, v8, v0235; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma236; CHECK-NEXT: vfncvtbf16.f.f.w v8, v0237; CHECK-NEXT: vsetvli zero, zero, e32, m8, ta, ma238; CHECK-NEXT: vfmax.vv v16, v24, v16239; CHECK-NEXT: vsetvli zero, zero, e16, m4, ta, ma240; CHECK-NEXT: vfncvtbf16.f.f.w v12, v16241; CHECK-NEXT: csrr a0, vlenb242; CHECK-NEXT: slli a0, a0, 3243; CHECK-NEXT: add sp, sp, a0244; CHECK-NEXT: .cfi_def_cfa sp, 16245; CHECK-NEXT: addi sp, sp, 16246; CHECK-NEXT: .cfi_def_cfa_offset 0247; CHECK-NEXT: ret248 %head = insertelement <vscale x 32 x bfloat> poison, bfloat %b, i32 0249 %splat = shufflevector <vscale x 32 x bfloat> %head, <vscale x 32 x bfloat> poison, <vscale x 32 x i32> zeroinitializer250 %v = call <vscale x 32 x bfloat> @llvm.maxnum.nxv32bf16(<vscale x 32 x bfloat> %a, <vscale x 32 x bfloat> %splat)251 ret <vscale x 32 x bfloat> %v252}253 254define <vscale x 1 x half> @vfmax_nxv1f16_vv(<vscale x 1 x half> %a, <vscale x 1 x half> %b) {255; ZVFH-LABEL: vfmax_nxv1f16_vv:256; ZVFH: # %bb.0:257; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma258; ZVFH-NEXT: vfmax.vv v8, v8, v9259; ZVFH-NEXT: ret260;261; ZVFHMIN-LABEL: vfmax_nxv1f16_vv:262; ZVFHMIN: # %bb.0:263; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma264; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9265; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8266; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma267; ZVFHMIN-NEXT: vfmax.vv v9, v9, v10268; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma269; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9270; ZVFHMIN-NEXT: ret271 %v = call <vscale x 1 x half> @llvm.maxnum.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %b)272 ret <vscale x 1 x half> %v273}274 275define <vscale x 1 x half> @vfmax_nxv1f16_vf(<vscale x 1 x half> %a, half %b) {276; ZVFH-LABEL: vfmax_nxv1f16_vf:277; ZVFH: # %bb.0:278; ZVFH-NEXT: vsetvli a0, zero, e16, mf4, ta, ma279; ZVFH-NEXT: vfmax.vf v8, v8, fa0280; ZVFH-NEXT: ret281;282; ZVFHMIN-LABEL: vfmax_nxv1f16_vf:283; ZVFHMIN: # %bb.0:284; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0285; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf4, ta, ma286; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8287; ZVFHMIN-NEXT: vsetvli zero, zero, e32, mf2, ta, ma288; ZVFHMIN-NEXT: vfmax.vf v9, v9, fa5289; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf4, ta, ma290; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9291; ZVFHMIN-NEXT: ret292 %head = insertelement <vscale x 1 x half> poison, half %b, i32 0293 %splat = shufflevector <vscale x 1 x half> %head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer294 %v = call <vscale x 1 x half> @llvm.maxnum.nxv1f16(<vscale x 1 x half> %a, <vscale x 1 x half> %splat)295 ret <vscale x 1 x half> %v296}297 298define <vscale x 2 x half> @vfmax_nxv2f16_vv(<vscale x 2 x half> %a, <vscale x 2 x half> %b) {299; ZVFH-LABEL: vfmax_nxv2f16_vv:300; ZVFH: # %bb.0:301; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma302; ZVFH-NEXT: vfmax.vv v8, v8, v9303; ZVFH-NEXT: ret304;305; ZVFHMIN-LABEL: vfmax_nxv2f16_vv:306; ZVFHMIN: # %bb.0:307; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma308; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9309; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8310; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma311; ZVFHMIN-NEXT: vfmax.vv v9, v9, v10312; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma313; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9314; ZVFHMIN-NEXT: ret315 %v = call <vscale x 2 x half> @llvm.maxnum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %b)316 ret <vscale x 2 x half> %v317}318 319define <vscale x 2 x half> @vfmax_nxv2f16_vf(<vscale x 2 x half> %a, half %b) {320; ZVFH-LABEL: vfmax_nxv2f16_vf:321; ZVFH: # %bb.0:322; ZVFH-NEXT: vsetvli a0, zero, e16, mf2, ta, ma323; ZVFH-NEXT: vfmax.vf v8, v8, fa0324; ZVFH-NEXT: ret325;326; ZVFHMIN-LABEL: vfmax_nxv2f16_vf:327; ZVFHMIN: # %bb.0:328; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0329; ZVFHMIN-NEXT: vsetvli a0, zero, e16, mf2, ta, ma330; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8331; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma332; ZVFHMIN-NEXT: vfmax.vf v9, v9, fa5333; ZVFHMIN-NEXT: vsetvli zero, zero, e16, mf2, ta, ma334; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v9335; ZVFHMIN-NEXT: ret336 %head = insertelement <vscale x 2 x half> poison, half %b, i32 0337 %splat = shufflevector <vscale x 2 x half> %head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer338 %v = call <vscale x 2 x half> @llvm.maxnum.nxv2f16(<vscale x 2 x half> %a, <vscale x 2 x half> %splat)339 ret <vscale x 2 x half> %v340}341 342define <vscale x 4 x half> @vfmax_nxv4f16_vv(<vscale x 4 x half> %a, <vscale x 4 x half> %b) {343; ZVFH-LABEL: vfmax_nxv4f16_vv:344; ZVFH: # %bb.0:345; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma346; ZVFH-NEXT: vfmax.vv v8, v8, v9347; ZVFH-NEXT: ret348;349; ZVFHMIN-LABEL: vfmax_nxv4f16_vv:350; ZVFHMIN: # %bb.0:351; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma352; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v9353; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8354; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma355; ZVFHMIN-NEXT: vfmax.vv v10, v12, v10356; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma357; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10358; ZVFHMIN-NEXT: ret359 %v = call <vscale x 4 x half> @llvm.maxnum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %b)360 ret <vscale x 4 x half> %v361}362 363define <vscale x 4 x half> @vfmax_nxv4f16_vf(<vscale x 4 x half> %a, half %b) {364; ZVFH-LABEL: vfmax_nxv4f16_vf:365; ZVFH: # %bb.0:366; ZVFH-NEXT: vsetvli a0, zero, e16, m1, ta, ma367; ZVFH-NEXT: vfmax.vf v8, v8, fa0368; ZVFH-NEXT: ret369;370; ZVFHMIN-LABEL: vfmax_nxv4f16_vf:371; ZVFHMIN: # %bb.0:372; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0373; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m1, ta, ma374; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8375; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m2, ta, ma376; ZVFHMIN-NEXT: vfmax.vf v10, v10, fa5377; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m1, ta, ma378; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v10379; ZVFHMIN-NEXT: ret380 %head = insertelement <vscale x 4 x half> poison, half %b, i32 0381 %splat = shufflevector <vscale x 4 x half> %head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer382 %v = call <vscale x 4 x half> @llvm.maxnum.nxv4f16(<vscale x 4 x half> %a, <vscale x 4 x half> %splat)383 ret <vscale x 4 x half> %v384}385 386define <vscale x 8 x half> @vfmax_nxv8f16_vv(<vscale x 8 x half> %a, <vscale x 8 x half> %b) {387; ZVFH-LABEL: vfmax_nxv8f16_vv:388; ZVFH: # %bb.0:389; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma390; ZVFH-NEXT: vfmax.vv v8, v8, v10391; ZVFH-NEXT: ret392;393; ZVFHMIN-LABEL: vfmax_nxv8f16_vv:394; ZVFHMIN: # %bb.0:395; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma396; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v10397; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8398; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma399; ZVFHMIN-NEXT: vfmax.vv v12, v16, v12400; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma401; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12402; ZVFHMIN-NEXT: ret403 %v = call <vscale x 8 x half> @llvm.maxnum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %b)404 ret <vscale x 8 x half> %v405}406 407define <vscale x 8 x half> @vfmax_nxv8f16_vf(<vscale x 8 x half> %a, half %b) {408; ZVFH-LABEL: vfmax_nxv8f16_vf:409; ZVFH: # %bb.0:410; ZVFH-NEXT: vsetvli a0, zero, e16, m2, ta, ma411; ZVFH-NEXT: vfmax.vf v8, v8, fa0412; ZVFH-NEXT: ret413;414; ZVFHMIN-LABEL: vfmax_nxv8f16_vf:415; ZVFHMIN: # %bb.0:416; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0417; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m2, ta, ma418; ZVFHMIN-NEXT: vfwcvt.f.f.v v12, v8419; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m4, ta, ma420; ZVFHMIN-NEXT: vfmax.vf v12, v12, fa5421; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m2, ta, ma422; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v12423; ZVFHMIN-NEXT: ret424 %head = insertelement <vscale x 8 x half> poison, half %b, i32 0425 %splat = shufflevector <vscale x 8 x half> %head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer426 %v = call <vscale x 8 x half> @llvm.maxnum.nxv8f16(<vscale x 8 x half> %a, <vscale x 8 x half> %splat)427 ret <vscale x 8 x half> %v428}429 430define <vscale x 16 x half> @vfmax_nxv16f16_vv(<vscale x 16 x half> %a, <vscale x 16 x half> %b) {431; ZVFH-LABEL: vfmax_nxv16f16_vv:432; ZVFH: # %bb.0:433; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma434; ZVFH-NEXT: vfmax.vv v8, v8, v12435; ZVFH-NEXT: ret436;437; ZVFHMIN-LABEL: vfmax_nxv16f16_vv:438; ZVFHMIN: # %bb.0:439; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma440; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12441; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v8442; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma443; ZVFHMIN-NEXT: vfmax.vv v16, v24, v16444; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma445; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16446; ZVFHMIN-NEXT: ret447 %v = call <vscale x 16 x half> @llvm.maxnum.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %b)448 ret <vscale x 16 x half> %v449}450 451define <vscale x 16 x half> @vfmax_nxv16f16_vf(<vscale x 16 x half> %a, half %b) {452; ZVFH-LABEL: vfmax_nxv16f16_vf:453; ZVFH: # %bb.0:454; ZVFH-NEXT: vsetvli a0, zero, e16, m4, ta, ma455; ZVFH-NEXT: vfmax.vf v8, v8, fa0456; ZVFH-NEXT: ret457;458; ZVFHMIN-LABEL: vfmax_nxv16f16_vf:459; ZVFHMIN: # %bb.0:460; ZVFHMIN-NEXT: fcvt.s.h fa5, fa0461; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma462; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8463; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma464; ZVFHMIN-NEXT: vfmax.vf v16, v16, fa5465; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma466; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v16467; ZVFHMIN-NEXT: ret468 %head = insertelement <vscale x 16 x half> poison, half %b, i32 0469 %splat = shufflevector <vscale x 16 x half> %head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer470 %v = call <vscale x 16 x half> @llvm.maxnum.nxv16f16(<vscale x 16 x half> %a, <vscale x 16 x half> %splat)471 ret <vscale x 16 x half> %v472}473 474define <vscale x 32 x half> @vfmax_nxv32f16_vv(<vscale x 32 x half> %a, <vscale x 32 x half> %b) {475; ZVFH-LABEL: vfmax_nxv32f16_vv:476; ZVFH: # %bb.0:477; ZVFH-NEXT: vsetvli a0, zero, e16, m8, ta, ma478; ZVFH-NEXT: vfmax.vv v8, v8, v16479; ZVFH-NEXT: ret480;481; ZVFHMIN-LABEL: vfmax_nxv32f16_vv:482; ZVFHMIN: # %bb.0:483; ZVFHMIN-NEXT: addi sp, sp, -16484; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16485; ZVFHMIN-NEXT: csrr a0, vlenb486; ZVFHMIN-NEXT: slli a0, a0, 3487; ZVFHMIN-NEXT: sub sp, sp, a0488; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb489; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma490; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v16491; ZVFHMIN-NEXT: addi a0, sp, 16492; ZVFHMIN-NEXT: vs8r.v v24, (a0) # vscale x 64-byte Folded Spill493; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v8494; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v20495; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12496; ZVFHMIN-NEXT: vl8r.v v8, (a0) # vscale x 64-byte Folded Reload497; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma498; ZVFHMIN-NEXT: vfmax.vv v0, v0, v8499; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma500; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v0501; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma502; ZVFHMIN-NEXT: vfmax.vv v16, v16, v24503; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma504; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16505; ZVFHMIN-NEXT: csrr a0, vlenb506; ZVFHMIN-NEXT: slli a0, a0, 3507; ZVFHMIN-NEXT: add sp, sp, a0508; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16509; ZVFHMIN-NEXT: addi sp, sp, 16510; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0511; ZVFHMIN-NEXT: ret512 %v = call <vscale x 32 x half> @llvm.maxnum.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %b)513 ret <vscale x 32 x half> %v514}515 516define <vscale x 32 x half> @vfmax_nxv32f16_vf(<vscale x 32 x half> %a, half %b) {517; ZVFH-LABEL: vfmax_nxv32f16_vf:518; ZVFH: # %bb.0:519; ZVFH-NEXT: vsetvli a0, zero, e16, m8, ta, ma520; ZVFH-NEXT: vfmax.vf v8, v8, fa0521; ZVFH-NEXT: ret522;523; ZVFHMIN-LABEL: vfmax_nxv32f16_vf:524; ZVFHMIN: # %bb.0:525; ZVFHMIN-NEXT: addi sp, sp, -16526; ZVFHMIN-NEXT: .cfi_def_cfa_offset 16527; ZVFHMIN-NEXT: csrr a0, vlenb528; ZVFHMIN-NEXT: slli a0, a0, 3529; ZVFHMIN-NEXT: sub sp, sp, a0530; ZVFHMIN-NEXT: .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb531; ZVFHMIN-NEXT: fmv.x.h a0, fa0532; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m4, ta, ma533; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v8534; ZVFHMIN-NEXT: addi a1, sp, 16535; ZVFHMIN-NEXT: vs8r.v v16, (a1) # vscale x 64-byte Folded Spill536; ZVFHMIN-NEXT: vfwcvt.f.f.v v24, v12537; ZVFHMIN-NEXT: vsetvli a1, zero, e16, m8, ta, ma538; ZVFHMIN-NEXT: vmv.v.x v8, a0539; ZVFHMIN-NEXT: vsetvli a0, zero, e16, m4, ta, ma540; ZVFHMIN-NEXT: vfwcvt.f.f.v v0, v8541; ZVFHMIN-NEXT: vfwcvt.f.f.v v16, v12542; ZVFHMIN-NEXT: addi a0, sp, 16543; ZVFHMIN-NEXT: vl8r.v v8, (a0) # vscale x 64-byte Folded Reload544; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma545; ZVFHMIN-NEXT: vfmax.vv v0, v8, v0546; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma547; ZVFHMIN-NEXT: vfncvt.f.f.w v8, v0548; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m8, ta, ma549; ZVFHMIN-NEXT: vfmax.vv v16, v24, v16550; ZVFHMIN-NEXT: vsetvli zero, zero, e16, m4, ta, ma551; ZVFHMIN-NEXT: vfncvt.f.f.w v12, v16552; ZVFHMIN-NEXT: csrr a0, vlenb553; ZVFHMIN-NEXT: slli a0, a0, 3554; ZVFHMIN-NEXT: add sp, sp, a0555; ZVFHMIN-NEXT: .cfi_def_cfa sp, 16556; ZVFHMIN-NEXT: addi sp, sp, 16557; ZVFHMIN-NEXT: .cfi_def_cfa_offset 0558; ZVFHMIN-NEXT: ret559 %head = insertelement <vscale x 32 x half> poison, half %b, i32 0560 %splat = shufflevector <vscale x 32 x half> %head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer561 %v = call <vscale x 32 x half> @llvm.maxnum.nxv32f16(<vscale x 32 x half> %a, <vscale x 32 x half> %splat)562 ret <vscale x 32 x half> %v563}564 565define <vscale x 1 x float> @vfmax_nxv1f32_vv(<vscale x 1 x float> %a, <vscale x 1 x float> %b) {566; CHECK-LABEL: vfmax_nxv1f32_vv:567; CHECK: # %bb.0:568; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma569; CHECK-NEXT: vfmax.vv v8, v8, v9570; CHECK-NEXT: ret571 %v = call <vscale x 1 x float> @llvm.maxnum.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %b)572 ret <vscale x 1 x float> %v573}574 575define <vscale x 1 x float> @vfmax_nxv1f32_vf(<vscale x 1 x float> %a, float %b) {576; CHECK-LABEL: vfmax_nxv1f32_vf:577; CHECK: # %bb.0:578; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma579; CHECK-NEXT: vfmax.vf v8, v8, fa0580; CHECK-NEXT: ret581 %head = insertelement <vscale x 1 x float> poison, float %b, i32 0582 %splat = shufflevector <vscale x 1 x float> %head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer583 %v = call <vscale x 1 x float> @llvm.maxnum.nxv1f32(<vscale x 1 x float> %a, <vscale x 1 x float> %splat)584 ret <vscale x 1 x float> %v585}586 587define <vscale x 2 x float> @vfmax_nxv2f32_vv(<vscale x 2 x float> %a, <vscale x 2 x float> %b) {588; CHECK-LABEL: vfmax_nxv2f32_vv:589; CHECK: # %bb.0:590; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma591; CHECK-NEXT: vfmax.vv v8, v8, v9592; CHECK-NEXT: ret593 %v = call <vscale x 2 x float> @llvm.maxnum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %b)594 ret <vscale x 2 x float> %v595}596 597define <vscale x 2 x float> @vfmax_nxv2f32_vf(<vscale x 2 x float> %a, float %b) {598; CHECK-LABEL: vfmax_nxv2f32_vf:599; CHECK: # %bb.0:600; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma601; CHECK-NEXT: vfmax.vf v8, v8, fa0602; CHECK-NEXT: ret603 %head = insertelement <vscale x 2 x float> poison, float %b, i32 0604 %splat = shufflevector <vscale x 2 x float> %head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer605 %v = call <vscale x 2 x float> @llvm.maxnum.nxv2f32(<vscale x 2 x float> %a, <vscale x 2 x float> %splat)606 ret <vscale x 2 x float> %v607}608 609define <vscale x 4 x float> @vfmax_nxv4f32_vv(<vscale x 4 x float> %a, <vscale x 4 x float> %b) {610; CHECK-LABEL: vfmax_nxv4f32_vv:611; CHECK: # %bb.0:612; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma613; CHECK-NEXT: vfmax.vv v8, v8, v10614; CHECK-NEXT: ret615 %v = call <vscale x 4 x float> @llvm.maxnum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %b)616 ret <vscale x 4 x float> %v617}618 619define <vscale x 4 x float> @vfmax_nxv4f32_vf(<vscale x 4 x float> %a, float %b) {620; CHECK-LABEL: vfmax_nxv4f32_vf:621; CHECK: # %bb.0:622; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma623; CHECK-NEXT: vfmax.vf v8, v8, fa0624; CHECK-NEXT: ret625 %head = insertelement <vscale x 4 x float> poison, float %b, i32 0626 %splat = shufflevector <vscale x 4 x float> %head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer627 %v = call <vscale x 4 x float> @llvm.maxnum.nxv4f32(<vscale x 4 x float> %a, <vscale x 4 x float> %splat)628 ret <vscale x 4 x float> %v629}630 631define <vscale x 8 x float> @vfmax_nxv8f32_vv(<vscale x 8 x float> %a, <vscale x 8 x float> %b) {632; CHECK-LABEL: vfmax_nxv8f32_vv:633; CHECK: # %bb.0:634; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma635; CHECK-NEXT: vfmax.vv v8, v8, v12636; CHECK-NEXT: ret637 %v = call <vscale x 8 x float> @llvm.maxnum.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %b)638 ret <vscale x 8 x float> %v639}640 641define <vscale x 8 x float> @vfmax_nxv8f32_vf(<vscale x 8 x float> %a, float %b) {642; CHECK-LABEL: vfmax_nxv8f32_vf:643; CHECK: # %bb.0:644; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma645; CHECK-NEXT: vfmax.vf v8, v8, fa0646; CHECK-NEXT: ret647 %head = insertelement <vscale x 8 x float> poison, float %b, i32 0648 %splat = shufflevector <vscale x 8 x float> %head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer649 %v = call <vscale x 8 x float> @llvm.maxnum.nxv8f32(<vscale x 8 x float> %a, <vscale x 8 x float> %splat)650 ret <vscale x 8 x float> %v651}652 653define <vscale x 16 x float> @vfmax_nxv16f32_vv(<vscale x 16 x float> %a, <vscale x 16 x float> %b) {654; CHECK-LABEL: vfmax_nxv16f32_vv:655; CHECK: # %bb.0:656; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma657; CHECK-NEXT: vfmax.vv v8, v8, v16658; CHECK-NEXT: ret659 %v = call <vscale x 16 x float> @llvm.maxnum.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %b)660 ret <vscale x 16 x float> %v661}662 663define <vscale x 16 x float> @vfmax_nxv16f32_vf(<vscale x 16 x float> %a, float %b) {664; CHECK-LABEL: vfmax_nxv16f32_vf:665; CHECK: # %bb.0:666; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma667; CHECK-NEXT: vfmax.vf v8, v8, fa0668; CHECK-NEXT: ret669 %head = insertelement <vscale x 16 x float> poison, float %b, i32 0670 %splat = shufflevector <vscale x 16 x float> %head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer671 %v = call <vscale x 16 x float> @llvm.maxnum.nxv16f32(<vscale x 16 x float> %a, <vscale x 16 x float> %splat)672 ret <vscale x 16 x float> %v673}674 675define <vscale x 1 x double> @vfmax_nxv1f64_vv(<vscale x 1 x double> %a, <vscale x 1 x double> %b) {676; CHECK-LABEL: vfmax_nxv1f64_vv:677; CHECK: # %bb.0:678; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma679; CHECK-NEXT: vfmax.vv v8, v8, v9680; CHECK-NEXT: ret681 %v = call <vscale x 1 x double> @llvm.maxnum.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %b)682 ret <vscale x 1 x double> %v683}684 685define <vscale x 1 x double> @vfmax_nxv1f64_vf(<vscale x 1 x double> %a, double %b) {686; CHECK-LABEL: vfmax_nxv1f64_vf:687; CHECK: # %bb.0:688; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma689; CHECK-NEXT: vfmax.vf v8, v8, fa0690; CHECK-NEXT: ret691 %head = insertelement <vscale x 1 x double> poison, double %b, i32 0692 %splat = shufflevector <vscale x 1 x double> %head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer693 %v = call <vscale x 1 x double> @llvm.maxnum.nxv1f64(<vscale x 1 x double> %a, <vscale x 1 x double> %splat)694 ret <vscale x 1 x double> %v695}696 697define <vscale x 2 x double> @vfmax_nxv2f64_vv(<vscale x 2 x double> %a, <vscale x 2 x double> %b) {698; CHECK-LABEL: vfmax_nxv2f64_vv:699; CHECK: # %bb.0:700; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma701; CHECK-NEXT: vfmax.vv v8, v8, v10702; CHECK-NEXT: ret703 %v = call <vscale x 2 x double> @llvm.maxnum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %b)704 ret <vscale x 2 x double> %v705}706 707define <vscale x 2 x double> @vfmax_nxv2f64_vf(<vscale x 2 x double> %a, double %b) {708; CHECK-LABEL: vfmax_nxv2f64_vf:709; CHECK: # %bb.0:710; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma711; CHECK-NEXT: vfmax.vf v8, v8, fa0712; CHECK-NEXT: ret713 %head = insertelement <vscale x 2 x double> poison, double %b, i32 0714 %splat = shufflevector <vscale x 2 x double> %head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer715 %v = call <vscale x 2 x double> @llvm.maxnum.nxv2f64(<vscale x 2 x double> %a, <vscale x 2 x double> %splat)716 ret <vscale x 2 x double> %v717}718 719define <vscale x 4 x double> @vfmax_nxv4f64_vv(<vscale x 4 x double> %a, <vscale x 4 x double> %b) {720; CHECK-LABEL: vfmax_nxv4f64_vv:721; CHECK: # %bb.0:722; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma723; CHECK-NEXT: vfmax.vv v8, v8, v12724; CHECK-NEXT: ret725 %v = call <vscale x 4 x double> @llvm.maxnum.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %b)726 ret <vscale x 4 x double> %v727}728 729define <vscale x 4 x double> @vfmax_nxv4f64_vf(<vscale x 4 x double> %a, double %b) {730; CHECK-LABEL: vfmax_nxv4f64_vf:731; CHECK: # %bb.0:732; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma733; CHECK-NEXT: vfmax.vf v8, v8, fa0734; CHECK-NEXT: ret735 %head = insertelement <vscale x 4 x double> poison, double %b, i32 0736 %splat = shufflevector <vscale x 4 x double> %head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer737 %v = call <vscale x 4 x double> @llvm.maxnum.nxv4f64(<vscale x 4 x double> %a, <vscale x 4 x double> %splat)738 ret <vscale x 4 x double> %v739}740 741define <vscale x 8 x double> @vfmax_nxv8f64_vv(<vscale x 8 x double> %a, <vscale x 8 x double> %b) {742; CHECK-LABEL: vfmax_nxv8f64_vv:743; CHECK: # %bb.0:744; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma745; CHECK-NEXT: vfmax.vv v8, v8, v16746; CHECK-NEXT: ret747 %v = call <vscale x 8 x double> @llvm.maxnum.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %b)748 ret <vscale x 8 x double> %v749}750 751define <vscale x 8 x double> @vfmax_nxv8f64_vf(<vscale x 8 x double> %a, double %b) {752; CHECK-LABEL: vfmax_nxv8f64_vf:753; CHECK: # %bb.0:754; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma755; CHECK-NEXT: vfmax.vf v8, v8, fa0756; CHECK-NEXT: ret757 %head = insertelement <vscale x 8 x double> poison, double %b, i32 0758 %splat = shufflevector <vscale x 8 x double> %head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer759 %v = call <vscale x 8 x double> @llvm.maxnum.nxv8f64(<vscale x 8 x double> %a, <vscale x 8 x double> %splat)760 ret <vscale x 8 x double> %v761}762