1335 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \3; RUN: | FileCheck %s --check-prefixes=CHECK,RV324; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \5; RUN: | FileCheck %s --check-prefixes=CHECK,RV646 7define <vscale x 8 x i7> @vmax_vx_nxv8i7(<vscale x 8 x i7> %a, i7 signext %b, <vscale x 8 x i1> %mask, i32 zeroext %evl) {8; CHECK-LABEL: vmax_vx_nxv8i7:9; CHECK: # %bb.0:10; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma11; CHECK-NEXT: vsll.vi v8, v8, 1, v0.t12; CHECK-NEXT: vmv.v.x v9, a013; CHECK-NEXT: vsra.vi v8, v8, 1, v0.t14; CHECK-NEXT: vsll.vi v9, v9, 1, v0.t15; CHECK-NEXT: vsra.vi v9, v9, 1, v0.t16; CHECK-NEXT: vmax.vv v8, v8, v9, v0.t17; CHECK-NEXT: ret18 %elt.head = insertelement <vscale x 8 x i7> poison, i7 %b, i32 019 %vb = shufflevector <vscale x 8 x i7> %elt.head, <vscale x 8 x i7> poison, <vscale x 8 x i32> zeroinitializer20 %v = call <vscale x 8 x i7> @llvm.vp.smax.nxv8i7(<vscale x 8 x i7> %a, <vscale x 8 x i7> %vb, <vscale x 8 x i1> %mask, i32 %evl)21 ret <vscale x 8 x i7> %v22}23 24define <vscale x 1 x i8> @vmax_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {25; CHECK-LABEL: vmax_vv_nxv1i8:26; CHECK: # %bb.0:27; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma28; CHECK-NEXT: vmax.vv v8, v8, v9, v0.t29; CHECK-NEXT: ret30 %v = call <vscale x 1 x i8> @llvm.vp.smax.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> %m, i32 %evl)31 ret <vscale x 1 x i8> %v32}33 34define <vscale x 1 x i8> @vmax_vv_nxv1i8_unmasked(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, i32 zeroext %evl) {35; CHECK-LABEL: vmax_vv_nxv1i8_unmasked:36; CHECK: # %bb.0:37; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma38; CHECK-NEXT: vmax.vv v8, v8, v939; CHECK-NEXT: ret40 %v = call <vscale x 1 x i8> @llvm.vp.smax.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)41 ret <vscale x 1 x i8> %v42}43 44define <vscale x 1 x i8> @vmax_vx_nxv1i8(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {45; CHECK-LABEL: vmax_vx_nxv1i8:46; CHECK: # %bb.0:47; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma48; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t49; CHECK-NEXT: ret50 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 051 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer52 %v = call <vscale x 1 x i8> @llvm.vp.smax.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> %m, i32 %evl)53 ret <vscale x 1 x i8> %v54}55 56define <vscale x 1 x i8> @vmax_vx_nxv1i8_commute(<vscale x 1 x i8> %va, i8 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {57; CHECK-LABEL: vmax_vx_nxv1i8_commute:58; CHECK: # %bb.0:59; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma60; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t61; CHECK-NEXT: ret62 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 063 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer64 %v = call <vscale x 1 x i8> @llvm.vp.smax.nxv1i8(<vscale x 1 x i8> %vb, <vscale x 1 x i8> %va, <vscale x 1 x i1> %m, i32 %evl)65 ret <vscale x 1 x i8> %v66}67 68define <vscale x 1 x i8> @vmax_vx_nxv1i8_unmasked(<vscale x 1 x i8> %va, i8 %b, i32 zeroext %evl) {69; CHECK-LABEL: vmax_vx_nxv1i8_unmasked:70; CHECK: # %bb.0:71; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma72; CHECK-NEXT: vmax.vx v8, v8, a073; CHECK-NEXT: ret74 %elt.head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 075 %vb = shufflevector <vscale x 1 x i8> %elt.head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer76 %v = call <vscale x 1 x i8> @llvm.vp.smax.nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)77 ret <vscale x 1 x i8> %v78}79 80define <vscale x 2 x i8> @vmax_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {81; CHECK-LABEL: vmax_vv_nxv2i8:82; CHECK: # %bb.0:83; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma84; CHECK-NEXT: vmax.vv v8, v8, v9, v0.t85; CHECK-NEXT: ret86 %v = call <vscale x 2 x i8> @llvm.vp.smax.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> %m, i32 %evl)87 ret <vscale x 2 x i8> %v88}89 90define <vscale x 2 x i8> @vmax_vv_nxv2i8_unmasked(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, i32 zeroext %evl) {91; CHECK-LABEL: vmax_vv_nxv2i8_unmasked:92; CHECK: # %bb.0:93; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma94; CHECK-NEXT: vmax.vv v8, v8, v995; CHECK-NEXT: ret96 %v = call <vscale x 2 x i8> @llvm.vp.smax.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)97 ret <vscale x 2 x i8> %v98}99 100define <vscale x 2 x i8> @vmax_vx_nxv2i8(<vscale x 2 x i8> %va, i8 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {101; CHECK-LABEL: vmax_vx_nxv2i8:102; CHECK: # %bb.0:103; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma104; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t105; CHECK-NEXT: ret106 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0107 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer108 %v = call <vscale x 2 x i8> @llvm.vp.smax.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> %m, i32 %evl)109 ret <vscale x 2 x i8> %v110}111 112define <vscale x 2 x i8> @vmax_vx_nxv2i8_unmasked(<vscale x 2 x i8> %va, i8 %b, i32 zeroext %evl) {113; CHECK-LABEL: vmax_vx_nxv2i8_unmasked:114; CHECK: # %bb.0:115; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma116; CHECK-NEXT: vmax.vx v8, v8, a0117; CHECK-NEXT: ret118 %elt.head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 0119 %vb = shufflevector <vscale x 2 x i8> %elt.head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer120 %v = call <vscale x 2 x i8> @llvm.vp.smax.nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)121 ret <vscale x 2 x i8> %v122}123 124define <vscale x 3 x i8> @vmax_vv_nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> %m, i32 zeroext %evl) {125; CHECK-LABEL: vmax_vv_nxv3i8:126; CHECK: # %bb.0:127; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma128; CHECK-NEXT: vmax.vv v8, v8, v9, v0.t129; CHECK-NEXT: ret130 %v = call <vscale x 3 x i8> @llvm.vp.smax.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> %m, i32 %evl)131 ret <vscale x 3 x i8> %v132}133 134define <vscale x 3 x i8> @vmax_vv_nxv3i8_unmasked(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, i32 zeroext %evl) {135; CHECK-LABEL: vmax_vv_nxv3i8_unmasked:136; CHECK: # %bb.0:137; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma138; CHECK-NEXT: vmax.vv v8, v8, v9139; CHECK-NEXT: ret140 %v = call <vscale x 3 x i8> @llvm.vp.smax.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %b, <vscale x 3 x i1> splat (i1 true), i32 %evl)141 ret <vscale x 3 x i8> %v142}143 144define <vscale x 3 x i8> @vmax_vx_nxv3i8(<vscale x 3 x i8> %va, i8 %b, <vscale x 3 x i1> %m, i32 zeroext %evl) {145; CHECK-LABEL: vmax_vx_nxv3i8:146; CHECK: # %bb.0:147; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma148; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t149; CHECK-NEXT: ret150 %elt.head = insertelement <vscale x 3 x i8> poison, i8 %b, i32 0151 %vb = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer152 %v = call <vscale x 3 x i8> @llvm.vp.smax.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, <vscale x 3 x i1> %m, i32 %evl)153 ret <vscale x 3 x i8> %v154}155 156define <vscale x 3 x i8> @vmax_vx_nxv3i8_unmasked(<vscale x 3 x i8> %va, i8 %b, i32 zeroext %evl) {157; CHECK-LABEL: vmax_vx_nxv3i8_unmasked:158; CHECK: # %bb.0:159; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma160; CHECK-NEXT: vmax.vx v8, v8, a0161; CHECK-NEXT: ret162 %elt.head = insertelement <vscale x 3 x i8> poison, i8 %b, i32 0163 %vb = shufflevector <vscale x 3 x i8> %elt.head, <vscale x 3 x i8> poison, <vscale x 3 x i32> zeroinitializer164 %v = call <vscale x 3 x i8> @llvm.vp.smax.nxv3i8(<vscale x 3 x i8> %va, <vscale x 3 x i8> %vb, <vscale x 3 x i1> splat (i1 true), i32 %evl)165 ret <vscale x 3 x i8> %v166}167 168define <vscale x 4 x i8> @vmax_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {169; CHECK-LABEL: vmax_vv_nxv4i8:170; CHECK: # %bb.0:171; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma172; CHECK-NEXT: vmax.vv v8, v8, v9, v0.t173; CHECK-NEXT: ret174 %v = call <vscale x 4 x i8> @llvm.vp.smax.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> %m, i32 %evl)175 ret <vscale x 4 x i8> %v176}177 178define <vscale x 4 x i8> @vmax_vv_nxv4i8_unmasked(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, i32 zeroext %evl) {179; CHECK-LABEL: vmax_vv_nxv4i8_unmasked:180; CHECK: # %bb.0:181; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma182; CHECK-NEXT: vmax.vv v8, v8, v9183; CHECK-NEXT: ret184 %v = call <vscale x 4 x i8> @llvm.vp.smax.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)185 ret <vscale x 4 x i8> %v186}187 188define <vscale x 4 x i8> @vmax_vx_nxv4i8(<vscale x 4 x i8> %va, i8 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {189; CHECK-LABEL: vmax_vx_nxv4i8:190; CHECK: # %bb.0:191; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma192; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t193; CHECK-NEXT: ret194 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0195 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer196 %v = call <vscale x 4 x i8> @llvm.vp.smax.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> %m, i32 %evl)197 ret <vscale x 4 x i8> %v198}199 200define <vscale x 4 x i8> @vmax_vx_nxv4i8_unmasked(<vscale x 4 x i8> %va, i8 %b, i32 zeroext %evl) {201; CHECK-LABEL: vmax_vx_nxv4i8_unmasked:202; CHECK: # %bb.0:203; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma204; CHECK-NEXT: vmax.vx v8, v8, a0205; CHECK-NEXT: ret206 %elt.head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 0207 %vb = shufflevector <vscale x 4 x i8> %elt.head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer208 %v = call <vscale x 4 x i8> @llvm.vp.smax.nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)209 ret <vscale x 4 x i8> %v210}211 212define <vscale x 8 x i8> @vmax_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {213; CHECK-LABEL: vmax_vv_nxv8i8:214; CHECK: # %bb.0:215; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma216; CHECK-NEXT: vmax.vv v8, v8, v9, v0.t217; CHECK-NEXT: ret218 %v = call <vscale x 8 x i8> @llvm.vp.smax.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> %m, i32 %evl)219 ret <vscale x 8 x i8> %v220}221 222define <vscale x 8 x i8> @vmax_vv_nxv8i8_unmasked(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, i32 zeroext %evl) {223; CHECK-LABEL: vmax_vv_nxv8i8_unmasked:224; CHECK: # %bb.0:225; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma226; CHECK-NEXT: vmax.vv v8, v8, v9227; CHECK-NEXT: ret228 %v = call <vscale x 8 x i8> @llvm.vp.smax.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)229 ret <vscale x 8 x i8> %v230}231 232define <vscale x 8 x i8> @vmax_vx_nxv8i8(<vscale x 8 x i8> %va, i8 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {233; CHECK-LABEL: vmax_vx_nxv8i8:234; CHECK: # %bb.0:235; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma236; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t237; CHECK-NEXT: ret238 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0239 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer240 %v = call <vscale x 8 x i8> @llvm.vp.smax.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> %m, i32 %evl)241 ret <vscale x 8 x i8> %v242}243 244define <vscale x 8 x i8> @vmax_vx_nxv8i8_unmasked(<vscale x 8 x i8> %va, i8 %b, i32 zeroext %evl) {245; CHECK-LABEL: vmax_vx_nxv8i8_unmasked:246; CHECK: # %bb.0:247; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma248; CHECK-NEXT: vmax.vx v8, v8, a0249; CHECK-NEXT: ret250 %elt.head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0251 %vb = shufflevector <vscale x 8 x i8> %elt.head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer252 %v = call <vscale x 8 x i8> @llvm.vp.smax.nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)253 ret <vscale x 8 x i8> %v254}255 256define <vscale x 16 x i8> @vmax_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {257; CHECK-LABEL: vmax_vv_nxv16i8:258; CHECK: # %bb.0:259; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma260; CHECK-NEXT: vmax.vv v8, v8, v10, v0.t261; CHECK-NEXT: ret262 %v = call <vscale x 16 x i8> @llvm.vp.smax.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> %m, i32 %evl)263 ret <vscale x 16 x i8> %v264}265 266define <vscale x 16 x i8> @vmax_vv_nxv16i8_unmasked(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, i32 zeroext %evl) {267; CHECK-LABEL: vmax_vv_nxv16i8_unmasked:268; CHECK: # %bb.0:269; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma270; CHECK-NEXT: vmax.vv v8, v8, v10271; CHECK-NEXT: ret272 %v = call <vscale x 16 x i8> @llvm.vp.smax.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)273 ret <vscale x 16 x i8> %v274}275 276define <vscale x 16 x i8> @vmax_vx_nxv16i8(<vscale x 16 x i8> %va, i8 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {277; CHECK-LABEL: vmax_vx_nxv16i8:278; CHECK: # %bb.0:279; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma280; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t281; CHECK-NEXT: ret282 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0283 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer284 %v = call <vscale x 16 x i8> @llvm.vp.smax.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> %m, i32 %evl)285 ret <vscale x 16 x i8> %v286}287 288define <vscale x 16 x i8> @vmax_vx_nxv16i8_unmasked(<vscale x 16 x i8> %va, i8 %b, i32 zeroext %evl) {289; CHECK-LABEL: vmax_vx_nxv16i8_unmasked:290; CHECK: # %bb.0:291; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma292; CHECK-NEXT: vmax.vx v8, v8, a0293; CHECK-NEXT: ret294 %elt.head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0295 %vb = shufflevector <vscale x 16 x i8> %elt.head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer296 %v = call <vscale x 16 x i8> @llvm.vp.smax.nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)297 ret <vscale x 16 x i8> %v298}299 300define <vscale x 32 x i8> @vmax_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {301; CHECK-LABEL: vmax_vv_nxv32i8:302; CHECK: # %bb.0:303; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma304; CHECK-NEXT: vmax.vv v8, v8, v12, v0.t305; CHECK-NEXT: ret306 %v = call <vscale x 32 x i8> @llvm.vp.smax.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> %m, i32 %evl)307 ret <vscale x 32 x i8> %v308}309 310define <vscale x 32 x i8> @vmax_vv_nxv32i8_unmasked(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, i32 zeroext %evl) {311; CHECK-LABEL: vmax_vv_nxv32i8_unmasked:312; CHECK: # %bb.0:313; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma314; CHECK-NEXT: vmax.vv v8, v8, v12315; CHECK-NEXT: ret316 %v = call <vscale x 32 x i8> @llvm.vp.smax.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)317 ret <vscale x 32 x i8> %v318}319 320define <vscale x 32 x i8> @vmax_vx_nxv32i8(<vscale x 32 x i8> %va, i8 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {321; CHECK-LABEL: vmax_vx_nxv32i8:322; CHECK: # %bb.0:323; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma324; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t325; CHECK-NEXT: ret326 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0327 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer328 %v = call <vscale x 32 x i8> @llvm.vp.smax.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> %m, i32 %evl)329 ret <vscale x 32 x i8> %v330}331 332define <vscale x 32 x i8> @vmax_vx_nxv32i8_unmasked(<vscale x 32 x i8> %va, i8 %b, i32 zeroext %evl) {333; CHECK-LABEL: vmax_vx_nxv32i8_unmasked:334; CHECK: # %bb.0:335; CHECK-NEXT: vsetvli zero, a1, e8, m4, ta, ma336; CHECK-NEXT: vmax.vx v8, v8, a0337; CHECK-NEXT: ret338 %elt.head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0339 %vb = shufflevector <vscale x 32 x i8> %elt.head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer340 %v = call <vscale x 32 x i8> @llvm.vp.smax.nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)341 ret <vscale x 32 x i8> %v342}343 344define <vscale x 64 x i8> @vmax_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {345; CHECK-LABEL: vmax_vv_nxv64i8:346; CHECK: # %bb.0:347; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma348; CHECK-NEXT: vmax.vv v8, v8, v16, v0.t349; CHECK-NEXT: ret350 %v = call <vscale x 64 x i8> @llvm.vp.smax.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> %m, i32 %evl)351 ret <vscale x 64 x i8> %v352}353 354define <vscale x 64 x i8> @vmax_vv_nxv64i8_unmasked(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, i32 zeroext %evl) {355; CHECK-LABEL: vmax_vv_nxv64i8_unmasked:356; CHECK: # %bb.0:357; CHECK-NEXT: vsetvli zero, a0, e8, m8, ta, ma358; CHECK-NEXT: vmax.vv v8, v8, v16359; CHECK-NEXT: ret360 %v = call <vscale x 64 x i8> @llvm.vp.smax.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %b, <vscale x 64 x i1> splat (i1 true), i32 %evl)361 ret <vscale x 64 x i8> %v362}363 364define <vscale x 64 x i8> @vmax_vx_nxv64i8(<vscale x 64 x i8> %va, i8 %b, <vscale x 64 x i1> %m, i32 zeroext %evl) {365; CHECK-LABEL: vmax_vx_nxv64i8:366; CHECK: # %bb.0:367; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma368; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t369; CHECK-NEXT: ret370 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0371 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer372 %v = call <vscale x 64 x i8> @llvm.vp.smax.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> %m, i32 %evl)373 ret <vscale x 64 x i8> %v374}375 376define <vscale x 64 x i8> @vmax_vx_nxv64i8_unmasked(<vscale x 64 x i8> %va, i8 %b, i32 zeroext %evl) {377; CHECK-LABEL: vmax_vx_nxv64i8_unmasked:378; CHECK: # %bb.0:379; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma380; CHECK-NEXT: vmax.vx v8, v8, a0381; CHECK-NEXT: ret382 %elt.head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0383 %vb = shufflevector <vscale x 64 x i8> %elt.head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer384 %v = call <vscale x 64 x i8> @llvm.vp.smax.nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb, <vscale x 64 x i1> splat (i1 true), i32 %evl)385 ret <vscale x 64 x i8> %v386}387 388; Test that split-legalization works when the mask itself needs splitting.389 390define <vscale x 128 x i8> @vmax_vx_nxv128i8(<vscale x 128 x i8> %va, i8 %b, <vscale x 128 x i1> %m, i32 zeroext %evl) {391; CHECK-LABEL: vmax_vx_nxv128i8:392; CHECK: # %bb.0:393; CHECK-NEXT: vsetvli a3, zero, e8, m8, ta, ma394; CHECK-NEXT: vmv1r.v v24, v0395; CHECK-NEXT: vlm.v v0, (a1)396; CHECK-NEXT: csrr a1, vlenb397; CHECK-NEXT: slli a1, a1, 3398; CHECK-NEXT: sub a3, a2, a1399; CHECK-NEXT: sltu a4, a2, a3400; CHECK-NEXT: addi a4, a4, -1401; CHECK-NEXT: and a3, a4, a3402; CHECK-NEXT: vsetvli zero, a3, e8, m8, ta, ma403; CHECK-NEXT: vmax.vx v16, v16, a0, v0.t404; CHECK-NEXT: bltu a2, a1, .LBB34_2405; CHECK-NEXT: # %bb.1:406; CHECK-NEXT: mv a2, a1407; CHECK-NEXT: .LBB34_2:408; CHECK-NEXT: vmv1r.v v0, v24409; CHECK-NEXT: vsetvli zero, a2, e8, m8, ta, ma410; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t411; CHECK-NEXT: ret412 %elt.head = insertelement <vscale x 128 x i8> poison, i8 %b, i32 0413 %vb = shufflevector <vscale x 128 x i8> %elt.head, <vscale x 128 x i8> poison, <vscale x 128 x i32> zeroinitializer414 %v = call <vscale x 128 x i8> @llvm.vp.smax.nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i8> %vb, <vscale x 128 x i1> %m, i32 %evl)415 ret <vscale x 128 x i8> %v416}417 418define <vscale x 128 x i8> @vmax_vx_nxv128i8_unmasked(<vscale x 128 x i8> %va, i8 %b, i32 zeroext %evl) {419; CHECK-LABEL: vmax_vx_nxv128i8_unmasked:420; CHECK: # %bb.0:421; CHECK-NEXT: csrr a2, vlenb422; CHECK-NEXT: slli a2, a2, 3423; CHECK-NEXT: sub a3, a1, a2424; CHECK-NEXT: sltu a4, a1, a3425; CHECK-NEXT: addi a4, a4, -1426; CHECK-NEXT: and a3, a4, a3427; CHECK-NEXT: vsetvli zero, a3, e8, m8, ta, ma428; CHECK-NEXT: vmax.vx v16, v16, a0429; CHECK-NEXT: bltu a1, a2, .LBB35_2430; CHECK-NEXT: # %bb.1:431; CHECK-NEXT: mv a1, a2432; CHECK-NEXT: .LBB35_2:433; CHECK-NEXT: vsetvli zero, a1, e8, m8, ta, ma434; CHECK-NEXT: vmax.vx v8, v8, a0435; CHECK-NEXT: ret436 %elt.head = insertelement <vscale x 128 x i8> poison, i8 %b, i32 0437 %vb = shufflevector <vscale x 128 x i8> %elt.head, <vscale x 128 x i8> poison, <vscale x 128 x i32> zeroinitializer438 %v = call <vscale x 128 x i8> @llvm.vp.smax.nxv128i8(<vscale x 128 x i8> %va, <vscale x 128 x i8> %vb, <vscale x 128 x i1> splat (i1 true), i32 %evl)439 ret <vscale x 128 x i8> %v440}441 442define <vscale x 1 x i16> @vmax_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {443; CHECK-LABEL: vmax_vv_nxv1i16:444; CHECK: # %bb.0:445; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma446; CHECK-NEXT: vmax.vv v8, v8, v9, v0.t447; CHECK-NEXT: ret448 %v = call <vscale x 1 x i16> @llvm.vp.smax.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> %m, i32 %evl)449 ret <vscale x 1 x i16> %v450}451 452define <vscale x 1 x i16> @vmax_vv_nxv1i16_unmasked(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, i32 zeroext %evl) {453; CHECK-LABEL: vmax_vv_nxv1i16_unmasked:454; CHECK: # %bb.0:455; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma456; CHECK-NEXT: vmax.vv v8, v8, v9457; CHECK-NEXT: ret458 %v = call <vscale x 1 x i16> @llvm.vp.smax.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)459 ret <vscale x 1 x i16> %v460}461 462define <vscale x 1 x i16> @vmax_vx_nxv1i16(<vscale x 1 x i16> %va, i16 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {463; CHECK-LABEL: vmax_vx_nxv1i16:464; CHECK: # %bb.0:465; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma466; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t467; CHECK-NEXT: ret468 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0469 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer470 %v = call <vscale x 1 x i16> @llvm.vp.smax.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> %m, i32 %evl)471 ret <vscale x 1 x i16> %v472}473 474define <vscale x 1 x i16> @vmax_vx_nxv1i16_unmasked(<vscale x 1 x i16> %va, i16 %b, i32 zeroext %evl) {475; CHECK-LABEL: vmax_vx_nxv1i16_unmasked:476; CHECK: # %bb.0:477; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma478; CHECK-NEXT: vmax.vx v8, v8, a0479; CHECK-NEXT: ret480 %elt.head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0481 %vb = shufflevector <vscale x 1 x i16> %elt.head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer482 %v = call <vscale x 1 x i16> @llvm.vp.smax.nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)483 ret <vscale x 1 x i16> %v484}485 486define <vscale x 2 x i16> @vmax_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {487; CHECK-LABEL: vmax_vv_nxv2i16:488; CHECK: # %bb.0:489; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma490; CHECK-NEXT: vmax.vv v8, v8, v9, v0.t491; CHECK-NEXT: ret492 %v = call <vscale x 2 x i16> @llvm.vp.smax.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> %m, i32 %evl)493 ret <vscale x 2 x i16> %v494}495 496define <vscale x 2 x i16> @vmax_vv_nxv2i16_unmasked(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, i32 zeroext %evl) {497; CHECK-LABEL: vmax_vv_nxv2i16_unmasked:498; CHECK: # %bb.0:499; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma500; CHECK-NEXT: vmax.vv v8, v8, v9501; CHECK-NEXT: ret502 %v = call <vscale x 2 x i16> @llvm.vp.smax.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)503 ret <vscale x 2 x i16> %v504}505 506define <vscale x 2 x i16> @vmax_vx_nxv2i16(<vscale x 2 x i16> %va, i16 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {507; CHECK-LABEL: vmax_vx_nxv2i16:508; CHECK: # %bb.0:509; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma510; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t511; CHECK-NEXT: ret512 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0513 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer514 %v = call <vscale x 2 x i16> @llvm.vp.smax.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> %m, i32 %evl)515 ret <vscale x 2 x i16> %v516}517 518define <vscale x 2 x i16> @vmax_vx_nxv2i16_unmasked(<vscale x 2 x i16> %va, i16 %b, i32 zeroext %evl) {519; CHECK-LABEL: vmax_vx_nxv2i16_unmasked:520; CHECK: # %bb.0:521; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma522; CHECK-NEXT: vmax.vx v8, v8, a0523; CHECK-NEXT: ret524 %elt.head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0525 %vb = shufflevector <vscale x 2 x i16> %elt.head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer526 %v = call <vscale x 2 x i16> @llvm.vp.smax.nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)527 ret <vscale x 2 x i16> %v528}529 530define <vscale x 4 x i16> @vmax_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {531; CHECK-LABEL: vmax_vv_nxv4i16:532; CHECK: # %bb.0:533; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma534; CHECK-NEXT: vmax.vv v8, v8, v9, v0.t535; CHECK-NEXT: ret536 %v = call <vscale x 4 x i16> @llvm.vp.smax.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> %m, i32 %evl)537 ret <vscale x 4 x i16> %v538}539 540define <vscale x 4 x i16> @vmax_vv_nxv4i16_unmasked(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, i32 zeroext %evl) {541; CHECK-LABEL: vmax_vv_nxv4i16_unmasked:542; CHECK: # %bb.0:543; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma544; CHECK-NEXT: vmax.vv v8, v8, v9545; CHECK-NEXT: ret546 %v = call <vscale x 4 x i16> @llvm.vp.smax.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)547 ret <vscale x 4 x i16> %v548}549 550define <vscale x 4 x i16> @vmax_vx_nxv4i16(<vscale x 4 x i16> %va, i16 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {551; CHECK-LABEL: vmax_vx_nxv4i16:552; CHECK: # %bb.0:553; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma554; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t555; CHECK-NEXT: ret556 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0557 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer558 %v = call <vscale x 4 x i16> @llvm.vp.smax.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> %m, i32 %evl)559 ret <vscale x 4 x i16> %v560}561 562define <vscale x 4 x i16> @vmax_vx_nxv4i16_unmasked(<vscale x 4 x i16> %va, i16 %b, i32 zeroext %evl) {563; CHECK-LABEL: vmax_vx_nxv4i16_unmasked:564; CHECK: # %bb.0:565; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma566; CHECK-NEXT: vmax.vx v8, v8, a0567; CHECK-NEXT: ret568 %elt.head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0569 %vb = shufflevector <vscale x 4 x i16> %elt.head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer570 %v = call <vscale x 4 x i16> @llvm.vp.smax.nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)571 ret <vscale x 4 x i16> %v572}573 574define <vscale x 8 x i16> @vmax_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {575; CHECK-LABEL: vmax_vv_nxv8i16:576; CHECK: # %bb.0:577; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma578; CHECK-NEXT: vmax.vv v8, v8, v10, v0.t579; CHECK-NEXT: ret580 %v = call <vscale x 8 x i16> @llvm.vp.smax.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> %m, i32 %evl)581 ret <vscale x 8 x i16> %v582}583 584define <vscale x 8 x i16> @vmax_vv_nxv8i16_unmasked(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, i32 zeroext %evl) {585; CHECK-LABEL: vmax_vv_nxv8i16_unmasked:586; CHECK: # %bb.0:587; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma588; CHECK-NEXT: vmax.vv v8, v8, v10589; CHECK-NEXT: ret590 %v = call <vscale x 8 x i16> @llvm.vp.smax.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)591 ret <vscale x 8 x i16> %v592}593 594define <vscale x 8 x i16> @vmax_vx_nxv8i16(<vscale x 8 x i16> %va, i16 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {595; CHECK-LABEL: vmax_vx_nxv8i16:596; CHECK: # %bb.0:597; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma598; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t599; CHECK-NEXT: ret600 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0601 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer602 %v = call <vscale x 8 x i16> @llvm.vp.smax.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> %m, i32 %evl)603 ret <vscale x 8 x i16> %v604}605 606define <vscale x 8 x i16> @vmax_vx_nxv8i16_unmasked(<vscale x 8 x i16> %va, i16 %b, i32 zeroext %evl) {607; CHECK-LABEL: vmax_vx_nxv8i16_unmasked:608; CHECK: # %bb.0:609; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma610; CHECK-NEXT: vmax.vx v8, v8, a0611; CHECK-NEXT: ret612 %elt.head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0613 %vb = shufflevector <vscale x 8 x i16> %elt.head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer614 %v = call <vscale x 8 x i16> @llvm.vp.smax.nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)615 ret <vscale x 8 x i16> %v616}617 618define <vscale x 16 x i16> @vmax_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {619; CHECK-LABEL: vmax_vv_nxv16i16:620; CHECK: # %bb.0:621; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma622; CHECK-NEXT: vmax.vv v8, v8, v12, v0.t623; CHECK-NEXT: ret624 %v = call <vscale x 16 x i16> @llvm.vp.smax.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> %m, i32 %evl)625 ret <vscale x 16 x i16> %v626}627 628define <vscale x 16 x i16> @vmax_vv_nxv16i16_unmasked(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, i32 zeroext %evl) {629; CHECK-LABEL: vmax_vv_nxv16i16_unmasked:630; CHECK: # %bb.0:631; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma632; CHECK-NEXT: vmax.vv v8, v8, v12633; CHECK-NEXT: ret634 %v = call <vscale x 16 x i16> @llvm.vp.smax.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)635 ret <vscale x 16 x i16> %v636}637 638define <vscale x 16 x i16> @vmax_vx_nxv16i16(<vscale x 16 x i16> %va, i16 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {639; CHECK-LABEL: vmax_vx_nxv16i16:640; CHECK: # %bb.0:641; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma642; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t643; CHECK-NEXT: ret644 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0645 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer646 %v = call <vscale x 16 x i16> @llvm.vp.smax.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> %m, i32 %evl)647 ret <vscale x 16 x i16> %v648}649 650define <vscale x 16 x i16> @vmax_vx_nxv16i16_unmasked(<vscale x 16 x i16> %va, i16 %b, i32 zeroext %evl) {651; CHECK-LABEL: vmax_vx_nxv16i16_unmasked:652; CHECK: # %bb.0:653; CHECK-NEXT: vsetvli zero, a1, e16, m4, ta, ma654; CHECK-NEXT: vmax.vx v8, v8, a0655; CHECK-NEXT: ret656 %elt.head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0657 %vb = shufflevector <vscale x 16 x i16> %elt.head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer658 %v = call <vscale x 16 x i16> @llvm.vp.smax.nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)659 ret <vscale x 16 x i16> %v660}661 662define <vscale x 32 x i16> @vmax_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {663; CHECK-LABEL: vmax_vv_nxv32i16:664; CHECK: # %bb.0:665; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma666; CHECK-NEXT: vmax.vv v8, v8, v16, v0.t667; CHECK-NEXT: ret668 %v = call <vscale x 32 x i16> @llvm.vp.smax.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> %m, i32 %evl)669 ret <vscale x 32 x i16> %v670}671 672define <vscale x 32 x i16> @vmax_vv_nxv32i16_unmasked(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, i32 zeroext %evl) {673; CHECK-LABEL: vmax_vv_nxv32i16_unmasked:674; CHECK: # %bb.0:675; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma676; CHECK-NEXT: vmax.vv v8, v8, v16677; CHECK-NEXT: ret678 %v = call <vscale x 32 x i16> @llvm.vp.smax.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %b, <vscale x 32 x i1> splat (i1 true), i32 %evl)679 ret <vscale x 32 x i16> %v680}681 682define <vscale x 32 x i16> @vmax_vx_nxv32i16(<vscale x 32 x i16> %va, i16 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {683; CHECK-LABEL: vmax_vx_nxv32i16:684; CHECK: # %bb.0:685; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma686; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t687; CHECK-NEXT: ret688 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0689 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer690 %v = call <vscale x 32 x i16> @llvm.vp.smax.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> %m, i32 %evl)691 ret <vscale x 32 x i16> %v692}693 694define <vscale x 32 x i16> @vmax_vx_nxv32i16_unmasked(<vscale x 32 x i16> %va, i16 %b, i32 zeroext %evl) {695; CHECK-LABEL: vmax_vx_nxv32i16_unmasked:696; CHECK: # %bb.0:697; CHECK-NEXT: vsetvli zero, a1, e16, m8, ta, ma698; CHECK-NEXT: vmax.vx v8, v8, a0699; CHECK-NEXT: ret700 %elt.head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0701 %vb = shufflevector <vscale x 32 x i16> %elt.head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer702 %v = call <vscale x 32 x i16> @llvm.vp.smax.nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)703 ret <vscale x 32 x i16> %v704}705 706define <vscale x 1 x i32> @vmax_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {707; CHECK-LABEL: vmax_vv_nxv1i32:708; CHECK: # %bb.0:709; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma710; CHECK-NEXT: vmax.vv v8, v8, v9, v0.t711; CHECK-NEXT: ret712 %v = call <vscale x 1 x i32> @llvm.vp.smax.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> %m, i32 %evl)713 ret <vscale x 1 x i32> %v714}715 716define <vscale x 1 x i32> @vmax_vv_nxv1i32_unmasked(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, i32 zeroext %evl) {717; CHECK-LABEL: vmax_vv_nxv1i32_unmasked:718; CHECK: # %bb.0:719; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma720; CHECK-NEXT: vmax.vv v8, v8, v9721; CHECK-NEXT: ret722 %v = call <vscale x 1 x i32> @llvm.vp.smax.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)723 ret <vscale x 1 x i32> %v724}725 726define <vscale x 1 x i32> @vmax_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {727; CHECK-LABEL: vmax_vx_nxv1i32:728; CHECK: # %bb.0:729; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma730; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t731; CHECK-NEXT: ret732 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0733 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer734 %v = call <vscale x 1 x i32> @llvm.vp.smax.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> %m, i32 %evl)735 ret <vscale x 1 x i32> %v736}737 738define <vscale x 1 x i32> @vmax_vx_nxv1i32_unmasked(<vscale x 1 x i32> %va, i32 %b, i32 zeroext %evl) {739; CHECK-LABEL: vmax_vx_nxv1i32_unmasked:740; CHECK: # %bb.0:741; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma742; CHECK-NEXT: vmax.vx v8, v8, a0743; CHECK-NEXT: ret744 %elt.head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0745 %vb = shufflevector <vscale x 1 x i32> %elt.head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer746 %v = call <vscale x 1 x i32> @llvm.vp.smax.nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)747 ret <vscale x 1 x i32> %v748}749 750define <vscale x 2 x i32> @vmax_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {751; CHECK-LABEL: vmax_vv_nxv2i32:752; CHECK: # %bb.0:753; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma754; CHECK-NEXT: vmax.vv v8, v8, v9, v0.t755; CHECK-NEXT: ret756 %v = call <vscale x 2 x i32> @llvm.vp.smax.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> %m, i32 %evl)757 ret <vscale x 2 x i32> %v758}759 760define <vscale x 2 x i32> @vmax_vv_nxv2i32_unmasked(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, i32 zeroext %evl) {761; CHECK-LABEL: vmax_vv_nxv2i32_unmasked:762; CHECK: # %bb.0:763; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma764; CHECK-NEXT: vmax.vv v8, v8, v9765; CHECK-NEXT: ret766 %v = call <vscale x 2 x i32> @llvm.vp.smax.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)767 ret <vscale x 2 x i32> %v768}769 770define <vscale x 2 x i32> @vmax_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {771; CHECK-LABEL: vmax_vx_nxv2i32:772; CHECK: # %bb.0:773; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma774; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t775; CHECK-NEXT: ret776 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0777 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer778 %v = call <vscale x 2 x i32> @llvm.vp.smax.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> %m, i32 %evl)779 ret <vscale x 2 x i32> %v780}781 782define <vscale x 2 x i32> @vmax_vx_nxv2i32_unmasked(<vscale x 2 x i32> %va, i32 %b, i32 zeroext %evl) {783; CHECK-LABEL: vmax_vx_nxv2i32_unmasked:784; CHECK: # %bb.0:785; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma786; CHECK-NEXT: vmax.vx v8, v8, a0787; CHECK-NEXT: ret788 %elt.head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0789 %vb = shufflevector <vscale x 2 x i32> %elt.head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer790 %v = call <vscale x 2 x i32> @llvm.vp.smax.nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)791 ret <vscale x 2 x i32> %v792}793 794define <vscale x 4 x i32> @vmax_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {795; CHECK-LABEL: vmax_vv_nxv4i32:796; CHECK: # %bb.0:797; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma798; CHECK-NEXT: vmax.vv v8, v8, v10, v0.t799; CHECK-NEXT: ret800 %v = call <vscale x 4 x i32> @llvm.vp.smax.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> %m, i32 %evl)801 ret <vscale x 4 x i32> %v802}803 804define <vscale x 4 x i32> @vmax_vv_nxv4i32_unmasked(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, i32 zeroext %evl) {805; CHECK-LABEL: vmax_vv_nxv4i32_unmasked:806; CHECK: # %bb.0:807; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma808; CHECK-NEXT: vmax.vv v8, v8, v10809; CHECK-NEXT: ret810 %v = call <vscale x 4 x i32> @llvm.vp.smax.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)811 ret <vscale x 4 x i32> %v812}813 814define <vscale x 4 x i32> @vmax_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {815; CHECK-LABEL: vmax_vx_nxv4i32:816; CHECK: # %bb.0:817; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma818; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t819; CHECK-NEXT: ret820 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0821 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer822 %v = call <vscale x 4 x i32> @llvm.vp.smax.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> %m, i32 %evl)823 ret <vscale x 4 x i32> %v824}825 826define <vscale x 4 x i32> @vmax_vx_nxv4i32_unmasked(<vscale x 4 x i32> %va, i32 %b, i32 zeroext %evl) {827; CHECK-LABEL: vmax_vx_nxv4i32_unmasked:828; CHECK: # %bb.0:829; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma830; CHECK-NEXT: vmax.vx v8, v8, a0831; CHECK-NEXT: ret832 %elt.head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0833 %vb = shufflevector <vscale x 4 x i32> %elt.head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer834 %v = call <vscale x 4 x i32> @llvm.vp.smax.nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)835 ret <vscale x 4 x i32> %v836}837 838define <vscale x 8 x i32> @vmax_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {839; CHECK-LABEL: vmax_vv_nxv8i32:840; CHECK: # %bb.0:841; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma842; CHECK-NEXT: vmax.vv v8, v8, v12, v0.t843; CHECK-NEXT: ret844 %v = call <vscale x 8 x i32> @llvm.vp.smax.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> %m, i32 %evl)845 ret <vscale x 8 x i32> %v846}847 848define <vscale x 8 x i32> @vmax_vv_nxv8i32_unmasked(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, i32 zeroext %evl) {849; CHECK-LABEL: vmax_vv_nxv8i32_unmasked:850; CHECK: # %bb.0:851; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma852; CHECK-NEXT: vmax.vv v8, v8, v12853; CHECK-NEXT: ret854 %v = call <vscale x 8 x i32> @llvm.vp.smax.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)855 ret <vscale x 8 x i32> %v856}857 858define <vscale x 8 x i32> @vmax_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {859; CHECK-LABEL: vmax_vx_nxv8i32:860; CHECK: # %bb.0:861; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma862; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t863; CHECK-NEXT: ret864 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0865 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer866 %v = call <vscale x 8 x i32> @llvm.vp.smax.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %m, i32 %evl)867 ret <vscale x 8 x i32> %v868}869 870define <vscale x 8 x i32> @vmax_vx_nxv8i32_unmasked(<vscale x 8 x i32> %va, i32 %b, i32 zeroext %evl) {871; CHECK-LABEL: vmax_vx_nxv8i32_unmasked:872; CHECK: # %bb.0:873; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma874; CHECK-NEXT: vmax.vx v8, v8, a0875; CHECK-NEXT: ret876 %elt.head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0877 %vb = shufflevector <vscale x 8 x i32> %elt.head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer878 %v = call <vscale x 8 x i32> @llvm.vp.smax.nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)879 ret <vscale x 8 x i32> %v880}881 882define <vscale x 16 x i32> @vmax_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {883; CHECK-LABEL: vmax_vv_nxv16i32:884; CHECK: # %bb.0:885; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma886; CHECK-NEXT: vmax.vv v8, v8, v16, v0.t887; CHECK-NEXT: ret888 %v = call <vscale x 16 x i32> @llvm.vp.smax.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> %m, i32 %evl)889 ret <vscale x 16 x i32> %v890}891 892define <vscale x 16 x i32> @vmax_vv_nxv16i32_unmasked(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, i32 zeroext %evl) {893; CHECK-LABEL: vmax_vv_nxv16i32_unmasked:894; CHECK: # %bb.0:895; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma896; CHECK-NEXT: vmax.vv v8, v8, v16897; CHECK-NEXT: ret898 %v = call <vscale x 16 x i32> @llvm.vp.smax.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %b, <vscale x 16 x i1> splat (i1 true), i32 %evl)899 ret <vscale x 16 x i32> %v900}901 902define <vscale x 16 x i32> @vmax_vx_nxv16i32(<vscale x 16 x i32> %va, i32 %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {903; CHECK-LABEL: vmax_vx_nxv16i32:904; CHECK: # %bb.0:905; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma906; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t907; CHECK-NEXT: ret908 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0909 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer910 %v = call <vscale x 16 x i32> @llvm.vp.smax.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> %m, i32 %evl)911 ret <vscale x 16 x i32> %v912}913 914define <vscale x 16 x i32> @vmax_vx_nxv16i32_unmasked(<vscale x 16 x i32> %va, i32 %b, i32 zeroext %evl) {915; CHECK-LABEL: vmax_vx_nxv16i32_unmasked:916; CHECK: # %bb.0:917; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma918; CHECK-NEXT: vmax.vx v8, v8, a0919; CHECK-NEXT: ret920 %elt.head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0921 %vb = shufflevector <vscale x 16 x i32> %elt.head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer922 %v = call <vscale x 16 x i32> @llvm.vp.smax.nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb, <vscale x 16 x i1> splat (i1 true), i32 %evl)923 ret <vscale x 16 x i32> %v924}925 926; Test that split-legalization works then the mask needs manual splitting.927 928define <vscale x 32 x i32> @vmax_vx_nxv32i32(<vscale x 32 x i32> %va, i32 %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {929; CHECK-LABEL: vmax_vx_nxv32i32:930; CHECK: # %bb.0:931; CHECK-NEXT: vsetvli a2, zero, e8, mf2, ta, ma932; CHECK-NEXT: vmv1r.v v24, v0933; CHECK-NEXT: csrr a2, vlenb934; CHECK-NEXT: srli a3, a2, 2935; CHECK-NEXT: slli a2, a2, 1936; CHECK-NEXT: vslidedown.vx v0, v0, a3937; CHECK-NEXT: sub a3, a1, a2938; CHECK-NEXT: sltu a4, a1, a3939; CHECK-NEXT: addi a4, a4, -1940; CHECK-NEXT: and a3, a4, a3941; CHECK-NEXT: vsetvli zero, a3, e32, m8, ta, ma942; CHECK-NEXT: vmax.vx v16, v16, a0, v0.t943; CHECK-NEXT: bltu a1, a2, .LBB80_2944; CHECK-NEXT: # %bb.1:945; CHECK-NEXT: mv a1, a2946; CHECK-NEXT: .LBB80_2:947; CHECK-NEXT: vmv1r.v v0, v24948; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma949; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t950; CHECK-NEXT: ret951 %elt.head = insertelement <vscale x 32 x i32> poison, i32 %b, i32 0952 %vb = shufflevector <vscale x 32 x i32> %elt.head, <vscale x 32 x i32> poison, <vscale x 32 x i32> zeroinitializer953 %v = call <vscale x 32 x i32> @llvm.vp.smax.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i32> %vb, <vscale x 32 x i1> %m, i32 %evl)954 ret <vscale x 32 x i32> %v955}956 957define <vscale x 32 x i32> @vmax_vx_nxv32i32_unmasked(<vscale x 32 x i32> %va, i32 %b, i32 zeroext %evl) {958; CHECK-LABEL: vmax_vx_nxv32i32_unmasked:959; CHECK: # %bb.0:960; CHECK-NEXT: csrr a2, vlenb961; CHECK-NEXT: slli a2, a2, 1962; CHECK-NEXT: sub a3, a1, a2963; CHECK-NEXT: sltu a4, a1, a3964; CHECK-NEXT: addi a4, a4, -1965; CHECK-NEXT: and a3, a4, a3966; CHECK-NEXT: vsetvli zero, a3, e32, m8, ta, ma967; CHECK-NEXT: vmax.vx v16, v16, a0968; CHECK-NEXT: bltu a1, a2, .LBB81_2969; CHECK-NEXT: # %bb.1:970; CHECK-NEXT: mv a1, a2971; CHECK-NEXT: .LBB81_2:972; CHECK-NEXT: vsetvli zero, a1, e32, m8, ta, ma973; CHECK-NEXT: vmax.vx v8, v8, a0974; CHECK-NEXT: ret975 %elt.head = insertelement <vscale x 32 x i32> poison, i32 %b, i32 0976 %vb = shufflevector <vscale x 32 x i32> %elt.head, <vscale x 32 x i32> poison, <vscale x 32 x i32> zeroinitializer977 %v = call <vscale x 32 x i32> @llvm.vp.smax.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i32> %vb, <vscale x 32 x i1> splat (i1 true), i32 %evl)978 ret <vscale x 32 x i32> %v979}980 981; Test splitting when the %evl is a constant (albeit an unknown one).982 983define <vscale x 32 x i32> @vmax_vx_nxv32i32_evl_nx8(<vscale x 32 x i32> %va, i32 %b, <vscale x 32 x i1> %m) {984; RV32-LABEL: vmax_vx_nxv32i32_evl_nx8:985; RV32: # %bb.0:986; RV32-NEXT: csrr a1, vlenb987; RV32-NEXT: srli a2, a1, 2988; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma989; RV32-NEXT: vmax.vx v8, v8, a0, v0.t990; RV32-NEXT: vsetvli a3, zero, e8, mf2, ta, ma991; RV32-NEXT: vslidedown.vx v0, v0, a2992; RV32-NEXT: slli a2, a1, 1993; RV32-NEXT: sub a2, a1, a2994; RV32-NEXT: sltu a1, a1, a2995; RV32-NEXT: addi a1, a1, -1996; RV32-NEXT: and a1, a1, a2997; RV32-NEXT: vsetvli zero, a1, e32, m8, ta, ma998; RV32-NEXT: vmax.vx v16, v16, a0, v0.t999; RV32-NEXT: ret1000;1001; RV64-LABEL: vmax_vx_nxv32i32_evl_nx8:1002; RV64: # %bb.0:1003; RV64-NEXT: vsetvli a1, zero, e8, mf2, ta, ma1004; RV64-NEXT: vmv1r.v v24, v01005; RV64-NEXT: csrr a1, vlenb1006; RV64-NEXT: srli a3, a1, 21007; RV64-NEXT: slli a2, a1, 11008; RV64-NEXT: vslidedown.vx v0, v0, a31009; RV64-NEXT: sub a3, a1, a21010; RV64-NEXT: sltu a4, a1, a31011; RV64-NEXT: addi a4, a4, -11012; RV64-NEXT: and a3, a4, a31013; RV64-NEXT: vsetvli zero, a3, e32, m8, ta, ma1014; RV64-NEXT: vmax.vx v16, v16, a0, v0.t1015; RV64-NEXT: bltu a1, a2, .LBB82_21016; RV64-NEXT: # %bb.1:1017; RV64-NEXT: mv a1, a21018; RV64-NEXT: .LBB82_2:1019; RV64-NEXT: vmv1r.v v0, v241020; RV64-NEXT: vsetvli zero, a1, e32, m8, ta, ma1021; RV64-NEXT: vmax.vx v8, v8, a0, v0.t1022; RV64-NEXT: ret1023 %elt.head = insertelement <vscale x 32 x i32> poison, i32 %b, i32 01024 %vb = shufflevector <vscale x 32 x i32> %elt.head, <vscale x 32 x i32> poison, <vscale x 32 x i32> zeroinitializer1025 %evl = call i32 @llvm.vscale.i32()1026 %evl0 = mul i32 %evl, 81027 %v = call <vscale x 32 x i32> @llvm.vp.smax.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i32> %vb, <vscale x 32 x i1> %m, i32 %evl0)1028 ret <vscale x 32 x i32> %v1029}1030 1031; The attribute vscale_range(2,1024) given here can remove the zero_extend for1032; the i32 %evl to i64 on RV64 through KnownBits analysis.1033 1034define <vscale x 32 x i32> @vmax_vx_nxv32i32_evl_nx16(<vscale x 32 x i32> %va, i32 %b, <vscale x 32 x i1> %m) vscale_range(2,1024) {1035; CHECK-LABEL: vmax_vx_nxv32i32_evl_nx16:1036; CHECK: # %bb.0:1037; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, ma1038; CHECK-NEXT: vmax.vx v8, v8, a0, v0.t1039; CHECK-NEXT: ret1040 %elt.head = insertelement <vscale x 32 x i32> poison, i32 %b, i32 01041 %vb = shufflevector <vscale x 32 x i32> %elt.head, <vscale x 32 x i32> poison, <vscale x 32 x i32> zeroinitializer1042 %evl = call i32 @llvm.vscale.i32()1043 %evl0 = mul i32 %evl, 161044 %v = call <vscale x 32 x i32> @llvm.vp.smax.nxv32i32(<vscale x 32 x i32> %va, <vscale x 32 x i32> %vb, <vscale x 32 x i1> %m, i32 %evl0)1045 ret <vscale x 32 x i32> %v1046}1047 1048define <vscale x 1 x i64> @vmax_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {1049; CHECK-LABEL: vmax_vv_nxv1i64:1050; CHECK: # %bb.0:1051; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma1052; CHECK-NEXT: vmax.vv v8, v8, v9, v0.t1053; CHECK-NEXT: ret1054 %v = call <vscale x 1 x i64> @llvm.vp.smax.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> %m, i32 %evl)1055 ret <vscale x 1 x i64> %v1056}1057 1058define <vscale x 1 x i64> @vmax_vv_nxv1i64_unmasked(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, i32 zeroext %evl) {1059; CHECK-LABEL: vmax_vv_nxv1i64_unmasked:1060; CHECK: # %bb.0:1061; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma1062; CHECK-NEXT: vmax.vv v8, v8, v91063; CHECK-NEXT: ret1064 %v = call <vscale x 1 x i64> @llvm.vp.smax.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %b, <vscale x 1 x i1> splat (i1 true), i32 %evl)1065 ret <vscale x 1 x i64> %v1066}1067 1068define <vscale x 1 x i64> @vmax_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {1069; RV32-LABEL: vmax_vx_nxv1i64:1070; RV32: # %bb.0:1071; RV32-NEXT: addi sp, sp, -161072; RV32-NEXT: .cfi_def_cfa_offset 161073; RV32-NEXT: sw a0, 8(sp)1074; RV32-NEXT: sw a1, 12(sp)1075; RV32-NEXT: addi a0, sp, 81076; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma1077; RV32-NEXT: vlse64.v v9, (a0), zero1078; RV32-NEXT: vmax.vv v8, v8, v9, v0.t1079; RV32-NEXT: addi sp, sp, 161080; RV32-NEXT: .cfi_def_cfa_offset 01081; RV32-NEXT: ret1082;1083; RV64-LABEL: vmax_vx_nxv1i64:1084; RV64: # %bb.0:1085; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma1086; RV64-NEXT: vmax.vx v8, v8, a0, v0.t1087; RV64-NEXT: ret1088 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 01089 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer1090 %v = call <vscale x 1 x i64> @llvm.vp.smax.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> %m, i32 %evl)1091 ret <vscale x 1 x i64> %v1092}1093 1094define <vscale x 1 x i64> @vmax_vx_nxv1i64_unmasked(<vscale x 1 x i64> %va, i64 %b, i32 zeroext %evl) {1095; RV32-LABEL: vmax_vx_nxv1i64_unmasked:1096; RV32: # %bb.0:1097; RV32-NEXT: addi sp, sp, -161098; RV32-NEXT: .cfi_def_cfa_offset 161099; RV32-NEXT: sw a0, 8(sp)1100; RV32-NEXT: sw a1, 12(sp)1101; RV32-NEXT: addi a0, sp, 81102; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma1103; RV32-NEXT: vlse64.v v9, (a0), zero1104; RV32-NEXT: vmax.vv v8, v8, v91105; RV32-NEXT: addi sp, sp, 161106; RV32-NEXT: .cfi_def_cfa_offset 01107; RV32-NEXT: ret1108;1109; RV64-LABEL: vmax_vx_nxv1i64_unmasked:1110; RV64: # %bb.0:1111; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma1112; RV64-NEXT: vmax.vx v8, v8, a01113; RV64-NEXT: ret1114 %elt.head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 01115 %vb = shufflevector <vscale x 1 x i64> %elt.head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer1116 %v = call <vscale x 1 x i64> @llvm.vp.smax.nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb, <vscale x 1 x i1> splat (i1 true), i32 %evl)1117 ret <vscale x 1 x i64> %v1118}1119 1120define <vscale x 2 x i64> @vmax_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1121; CHECK-LABEL: vmax_vv_nxv2i64:1122; CHECK: # %bb.0:1123; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma1124; CHECK-NEXT: vmax.vv v8, v8, v10, v0.t1125; CHECK-NEXT: ret1126 %v = call <vscale x 2 x i64> @llvm.vp.smax.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> %m, i32 %evl)1127 ret <vscale x 2 x i64> %v1128}1129 1130define <vscale x 2 x i64> @vmax_vv_nxv2i64_unmasked(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, i32 zeroext %evl) {1131; CHECK-LABEL: vmax_vv_nxv2i64_unmasked:1132; CHECK: # %bb.0:1133; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma1134; CHECK-NEXT: vmax.vv v8, v8, v101135; CHECK-NEXT: ret1136 %v = call <vscale x 2 x i64> @llvm.vp.smax.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %b, <vscale x 2 x i1> splat (i1 true), i32 %evl)1137 ret <vscale x 2 x i64> %v1138}1139 1140define <vscale x 2 x i64> @vmax_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {1141; RV32-LABEL: vmax_vx_nxv2i64:1142; RV32: # %bb.0:1143; RV32-NEXT: addi sp, sp, -161144; RV32-NEXT: .cfi_def_cfa_offset 161145; RV32-NEXT: sw a0, 8(sp)1146; RV32-NEXT: sw a1, 12(sp)1147; RV32-NEXT: addi a0, sp, 81148; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma1149; RV32-NEXT: vlse64.v v10, (a0), zero1150; RV32-NEXT: vmax.vv v8, v8, v10, v0.t1151; RV32-NEXT: addi sp, sp, 161152; RV32-NEXT: .cfi_def_cfa_offset 01153; RV32-NEXT: ret1154;1155; RV64-LABEL: vmax_vx_nxv2i64:1156; RV64: # %bb.0:1157; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma1158; RV64-NEXT: vmax.vx v8, v8, a0, v0.t1159; RV64-NEXT: ret1160 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 01161 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1162 %v = call <vscale x 2 x i64> @llvm.vp.smax.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> %m, i32 %evl)1163 ret <vscale x 2 x i64> %v1164}1165 1166define <vscale x 2 x i64> @vmax_vx_nxv2i64_unmasked(<vscale x 2 x i64> %va, i64 %b, i32 zeroext %evl) {1167; RV32-LABEL: vmax_vx_nxv2i64_unmasked:1168; RV32: # %bb.0:1169; RV32-NEXT: addi sp, sp, -161170; RV32-NEXT: .cfi_def_cfa_offset 161171; RV32-NEXT: sw a0, 8(sp)1172; RV32-NEXT: sw a1, 12(sp)1173; RV32-NEXT: addi a0, sp, 81174; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma1175; RV32-NEXT: vlse64.v v10, (a0), zero1176; RV32-NEXT: vmax.vv v8, v8, v101177; RV32-NEXT: addi sp, sp, 161178; RV32-NEXT: .cfi_def_cfa_offset 01179; RV32-NEXT: ret1180;1181; RV64-LABEL: vmax_vx_nxv2i64_unmasked:1182; RV64: # %bb.0:1183; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma1184; RV64-NEXT: vmax.vx v8, v8, a01185; RV64-NEXT: ret1186 %elt.head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 01187 %vb = shufflevector <vscale x 2 x i64> %elt.head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer1188 %v = call <vscale x 2 x i64> @llvm.vp.smax.nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb, <vscale x 2 x i1> splat (i1 true), i32 %evl)1189 ret <vscale x 2 x i64> %v1190}1191 1192define <vscale x 4 x i64> @vmax_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1193; CHECK-LABEL: vmax_vv_nxv4i64:1194; CHECK: # %bb.0:1195; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1196; CHECK-NEXT: vmax.vv v8, v8, v12, v0.t1197; CHECK-NEXT: ret1198 %v = call <vscale x 4 x i64> @llvm.vp.smax.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> %m, i32 %evl)1199 ret <vscale x 4 x i64> %v1200}1201 1202define <vscale x 4 x i64> @vmax_vv_nxv4i64_unmasked(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, i32 zeroext %evl) {1203; CHECK-LABEL: vmax_vv_nxv4i64_unmasked:1204; CHECK: # %bb.0:1205; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma1206; CHECK-NEXT: vmax.vv v8, v8, v121207; CHECK-NEXT: ret1208 %v = call <vscale x 4 x i64> @llvm.vp.smax.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %b, <vscale x 4 x i1> splat (i1 true), i32 %evl)1209 ret <vscale x 4 x i64> %v1210}1211 1212define <vscale x 4 x i64> @vmax_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {1213; RV32-LABEL: vmax_vx_nxv4i64:1214; RV32: # %bb.0:1215; RV32-NEXT: addi sp, sp, -161216; RV32-NEXT: .cfi_def_cfa_offset 161217; RV32-NEXT: sw a0, 8(sp)1218; RV32-NEXT: sw a1, 12(sp)1219; RV32-NEXT: addi a0, sp, 81220; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1221; RV32-NEXT: vlse64.v v12, (a0), zero1222; RV32-NEXT: vmax.vv v8, v8, v12, v0.t1223; RV32-NEXT: addi sp, sp, 161224; RV32-NEXT: .cfi_def_cfa_offset 01225; RV32-NEXT: ret1226;1227; RV64-LABEL: vmax_vx_nxv4i64:1228; RV64: # %bb.0:1229; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1230; RV64-NEXT: vmax.vx v8, v8, a0, v0.t1231; RV64-NEXT: ret1232 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 01233 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer1234 %v = call <vscale x 4 x i64> @llvm.vp.smax.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> %m, i32 %evl)1235 ret <vscale x 4 x i64> %v1236}1237 1238define <vscale x 4 x i64> @vmax_vx_nxv4i64_unmasked(<vscale x 4 x i64> %va, i64 %b, i32 zeroext %evl) {1239; RV32-LABEL: vmax_vx_nxv4i64_unmasked:1240; RV32: # %bb.0:1241; RV32-NEXT: addi sp, sp, -161242; RV32-NEXT: .cfi_def_cfa_offset 161243; RV32-NEXT: sw a0, 8(sp)1244; RV32-NEXT: sw a1, 12(sp)1245; RV32-NEXT: addi a0, sp, 81246; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma1247; RV32-NEXT: vlse64.v v12, (a0), zero1248; RV32-NEXT: vmax.vv v8, v8, v121249; RV32-NEXT: addi sp, sp, 161250; RV32-NEXT: .cfi_def_cfa_offset 01251; RV32-NEXT: ret1252;1253; RV64-LABEL: vmax_vx_nxv4i64_unmasked:1254; RV64: # %bb.0:1255; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma1256; RV64-NEXT: vmax.vx v8, v8, a01257; RV64-NEXT: ret1258 %elt.head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 01259 %vb = shufflevector <vscale x 4 x i64> %elt.head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer1260 %v = call <vscale x 4 x i64> @llvm.vp.smax.nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb, <vscale x 4 x i1> splat (i1 true), i32 %evl)1261 ret <vscale x 4 x i64> %v1262}1263 1264define <vscale x 8 x i64> @vmax_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1265; CHECK-LABEL: vmax_vv_nxv8i64:1266; CHECK: # %bb.0:1267; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1268; CHECK-NEXT: vmax.vv v8, v8, v16, v0.t1269; CHECK-NEXT: ret1270 %v = call <vscale x 8 x i64> @llvm.vp.smax.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> %m, i32 %evl)1271 ret <vscale x 8 x i64> %v1272}1273 1274define <vscale x 8 x i64> @vmax_vv_nxv8i64_unmasked(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, i32 zeroext %evl) {1275; CHECK-LABEL: vmax_vv_nxv8i64_unmasked:1276; CHECK: # %bb.0:1277; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma1278; CHECK-NEXT: vmax.vv v8, v8, v161279; CHECK-NEXT: ret1280 %v = call <vscale x 8 x i64> @llvm.vp.smax.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %b, <vscale x 8 x i1> splat (i1 true), i32 %evl)1281 ret <vscale x 8 x i64> %v1282}1283 1284define <vscale x 8 x i64> @vmax_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {1285; RV32-LABEL: vmax_vx_nxv8i64:1286; RV32: # %bb.0:1287; RV32-NEXT: addi sp, sp, -161288; RV32-NEXT: .cfi_def_cfa_offset 161289; RV32-NEXT: sw a0, 8(sp)1290; RV32-NEXT: sw a1, 12(sp)1291; RV32-NEXT: addi a0, sp, 81292; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma1293; RV32-NEXT: vlse64.v v16, (a0), zero1294; RV32-NEXT: vmax.vv v8, v8, v16, v0.t1295; RV32-NEXT: addi sp, sp, 161296; RV32-NEXT: .cfi_def_cfa_offset 01297; RV32-NEXT: ret1298;1299; RV64-LABEL: vmax_vx_nxv8i64:1300; RV64: # %bb.0:1301; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma1302; RV64-NEXT: vmax.vx v8, v8, a0, v0.t1303; RV64-NEXT: ret1304 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 01305 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1306 %v = call <vscale x 8 x i64> @llvm.vp.smax.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> %m, i32 %evl)1307 ret <vscale x 8 x i64> %v1308}1309 1310define <vscale x 8 x i64> @vmax_vx_nxv8i64_unmasked(<vscale x 8 x i64> %va, i64 %b, i32 zeroext %evl) {1311; RV32-LABEL: vmax_vx_nxv8i64_unmasked:1312; RV32: # %bb.0:1313; RV32-NEXT: addi sp, sp, -161314; RV32-NEXT: .cfi_def_cfa_offset 161315; RV32-NEXT: sw a0, 8(sp)1316; RV32-NEXT: sw a1, 12(sp)1317; RV32-NEXT: addi a0, sp, 81318; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma1319; RV32-NEXT: vlse64.v v16, (a0), zero1320; RV32-NEXT: vmax.vv v8, v8, v161321; RV32-NEXT: addi sp, sp, 161322; RV32-NEXT: .cfi_def_cfa_offset 01323; RV32-NEXT: ret1324;1325; RV64-LABEL: vmax_vx_nxv8i64_unmasked:1326; RV64: # %bb.0:1327; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma1328; RV64-NEXT: vmax.vx v8, v8, a01329; RV64-NEXT: ret1330 %elt.head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 01331 %vb = shufflevector <vscale x 8 x i64> %elt.head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer1332 %v = call <vscale x 8 x i64> @llvm.vp.smax.nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb, <vscale x 8 x i1> splat (i1 true), i32 %evl)1333 ret <vscale x 8 x i64> %v1334}1335