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