brintos

brintos / llvm-project-archived public Read only

0
0
Text · 61.9 KiB · 3cf4642 Raw
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