896 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV323; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV644 5define <vscale x 1 x i8> @vmax_vv_nxv1i8(<vscale x 1 x i8> %va, <vscale x 1 x i8> %vb) {6; CHECK-LABEL: vmax_vv_nxv1i8:7; CHECK: # %bb.0:8; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma9; CHECK-NEXT: vmaxu.vv v8, v8, v910; CHECK-NEXT: ret11 %cmp = icmp ugt <vscale x 1 x i8> %va, %vb12 %vc = select <vscale x 1 x i1> %cmp, <vscale x 1 x i8> %va, <vscale x 1 x i8> %vb13 ret <vscale x 1 x i8> %vc14}15 16define <vscale x 1 x i8> @vmax_vx_nxv1i8(<vscale x 1 x i8> %va, i8 signext %b) {17; CHECK-LABEL: vmax_vx_nxv1i8:18; CHECK: # %bb.0:19; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma20; CHECK-NEXT: vmaxu.vx v8, v8, a021; CHECK-NEXT: ret22 %head = insertelement <vscale x 1 x i8> poison, i8 %b, i32 023 %splat = shufflevector <vscale x 1 x i8> %head, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer24 %cmp = icmp ugt <vscale x 1 x i8> %va, %splat25 %vc = select <vscale x 1 x i1> %cmp, <vscale x 1 x i8> %va, <vscale x 1 x i8> %splat26 ret <vscale x 1 x i8> %vc27}28 29define <vscale x 1 x i8> @vmax_vi_nxv1i8_0(<vscale x 1 x i8> %va) {30; CHECK-LABEL: vmax_vi_nxv1i8_0:31; CHECK: # %bb.0:32; CHECK-NEXT: li a0, -333; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma34; CHECK-NEXT: vmaxu.vx v8, v8, a035; CHECK-NEXT: ret36 %cmp = icmp ugt <vscale x 1 x i8> %va, splat (i8 -3)37 %vc = select <vscale x 1 x i1> %cmp, <vscale x 1 x i8> %va, <vscale x 1 x i8> splat (i8 -3)38 ret <vscale x 1 x i8> %vc39}40 41define <vscale x 2 x i8> @vmax_vv_nxv2i8(<vscale x 2 x i8> %va, <vscale x 2 x i8> %vb) {42; CHECK-LABEL: vmax_vv_nxv2i8:43; CHECK: # %bb.0:44; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma45; CHECK-NEXT: vmaxu.vv v8, v8, v946; CHECK-NEXT: ret47 %cmp = icmp ugt <vscale x 2 x i8> %va, %vb48 %vc = select <vscale x 2 x i1> %cmp, <vscale x 2 x i8> %va, <vscale x 2 x i8> %vb49 ret <vscale x 2 x i8> %vc50}51 52define <vscale x 2 x i8> @vmax_vx_nxv2i8(<vscale x 2 x i8> %va, i8 signext %b) {53; CHECK-LABEL: vmax_vx_nxv2i8:54; CHECK: # %bb.0:55; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, ma56; CHECK-NEXT: vmaxu.vx v8, v8, a057; CHECK-NEXT: ret58 %head = insertelement <vscale x 2 x i8> poison, i8 %b, i32 059 %splat = shufflevector <vscale x 2 x i8> %head, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer60 %cmp = icmp ugt <vscale x 2 x i8> %va, %splat61 %vc = select <vscale x 2 x i1> %cmp, <vscale x 2 x i8> %va, <vscale x 2 x i8> %splat62 ret <vscale x 2 x i8> %vc63}64 65define <vscale x 2 x i8> @vmax_vi_nxv2i8_0(<vscale x 2 x i8> %va) {66; CHECK-LABEL: vmax_vi_nxv2i8_0:67; CHECK: # %bb.0:68; CHECK-NEXT: li a0, -369; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, ma70; CHECK-NEXT: vmaxu.vx v8, v8, a071; CHECK-NEXT: ret72 %cmp = icmp ugt <vscale x 2 x i8> %va, splat (i8 -3)73 %vc = select <vscale x 2 x i1> %cmp, <vscale x 2 x i8> %va, <vscale x 2 x i8> splat (i8 -3)74 ret <vscale x 2 x i8> %vc75}76 77define <vscale x 4 x i8> @vmax_vv_nxv4i8(<vscale x 4 x i8> %va, <vscale x 4 x i8> %vb) {78; CHECK-LABEL: vmax_vv_nxv4i8:79; CHECK: # %bb.0:80; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma81; CHECK-NEXT: vmaxu.vv v8, v8, v982; CHECK-NEXT: ret83 %cmp = icmp ugt <vscale x 4 x i8> %va, %vb84 %vc = select <vscale x 4 x i1> %cmp, <vscale x 4 x i8> %va, <vscale x 4 x i8> %vb85 ret <vscale x 4 x i8> %vc86}87 88define <vscale x 4 x i8> @vmax_vx_nxv4i8(<vscale x 4 x i8> %va, i8 signext %b) {89; CHECK-LABEL: vmax_vx_nxv4i8:90; CHECK: # %bb.0:91; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma92; CHECK-NEXT: vmaxu.vx v8, v8, a093; CHECK-NEXT: ret94 %head = insertelement <vscale x 4 x i8> poison, i8 %b, i32 095 %splat = shufflevector <vscale x 4 x i8> %head, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer96 %cmp = icmp ugt <vscale x 4 x i8> %va, %splat97 %vc = select <vscale x 4 x i1> %cmp, <vscale x 4 x i8> %va, <vscale x 4 x i8> %splat98 ret <vscale x 4 x i8> %vc99}100 101define <vscale x 4 x i8> @vmax_vi_nxv4i8_0(<vscale x 4 x i8> %va) {102; CHECK-LABEL: vmax_vi_nxv4i8_0:103; CHECK: # %bb.0:104; CHECK-NEXT: li a0, -3105; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma106; CHECK-NEXT: vmaxu.vx v8, v8, a0107; CHECK-NEXT: ret108 %cmp = icmp ugt <vscale x 4 x i8> %va, splat (i8 -3)109 %vc = select <vscale x 4 x i1> %cmp, <vscale x 4 x i8> %va, <vscale x 4 x i8> splat (i8 -3)110 ret <vscale x 4 x i8> %vc111}112 113define <vscale x 8 x i8> @vmax_vv_nxv8i8(<vscale x 8 x i8> %va, <vscale x 8 x i8> %vb) {114; CHECK-LABEL: vmax_vv_nxv8i8:115; CHECK: # %bb.0:116; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma117; CHECK-NEXT: vmaxu.vv v8, v8, v9118; CHECK-NEXT: ret119 %cmp = icmp ugt <vscale x 8 x i8> %va, %vb120 %vc = select <vscale x 8 x i1> %cmp, <vscale x 8 x i8> %va, <vscale x 8 x i8> %vb121 ret <vscale x 8 x i8> %vc122}123 124define <vscale x 8 x i8> @vmax_vx_nxv8i8(<vscale x 8 x i8> %va, i8 signext %b) {125; CHECK-LABEL: vmax_vx_nxv8i8:126; CHECK: # %bb.0:127; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, ma128; CHECK-NEXT: vmaxu.vx v8, v8, a0129; CHECK-NEXT: ret130 %head = insertelement <vscale x 8 x i8> poison, i8 %b, i32 0131 %splat = shufflevector <vscale x 8 x i8> %head, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer132 %cmp = icmp ugt <vscale x 8 x i8> %va, %splat133 %vc = select <vscale x 8 x i1> %cmp, <vscale x 8 x i8> %va, <vscale x 8 x i8> %splat134 ret <vscale x 8 x i8> %vc135}136 137define <vscale x 8 x i8> @vmax_vi_nxv8i8_0(<vscale x 8 x i8> %va) {138; CHECK-LABEL: vmax_vi_nxv8i8_0:139; CHECK: # %bb.0:140; CHECK-NEXT: li a0, -3141; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, ma142; CHECK-NEXT: vmaxu.vx v8, v8, a0143; CHECK-NEXT: ret144 %cmp = icmp ugt <vscale x 8 x i8> %va, splat (i8 -3)145 %vc = select <vscale x 8 x i1> %cmp, <vscale x 8 x i8> %va, <vscale x 8 x i8> splat (i8 -3)146 ret <vscale x 8 x i8> %vc147}148 149define <vscale x 16 x i8> @vmax_vv_nxv16i8(<vscale x 16 x i8> %va, <vscale x 16 x i8> %vb) {150; CHECK-LABEL: vmax_vv_nxv16i8:151; CHECK: # %bb.0:152; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma153; CHECK-NEXT: vmaxu.vv v8, v8, v10154; CHECK-NEXT: ret155 %cmp = icmp ugt <vscale x 16 x i8> %va, %vb156 %vc = select <vscale x 16 x i1> %cmp, <vscale x 16 x i8> %va, <vscale x 16 x i8> %vb157 ret <vscale x 16 x i8> %vc158}159 160define <vscale x 16 x i8> @vmax_vx_nxv16i8(<vscale x 16 x i8> %va, i8 signext %b) {161; CHECK-LABEL: vmax_vx_nxv16i8:162; CHECK: # %bb.0:163; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, ma164; CHECK-NEXT: vmaxu.vx v8, v8, a0165; CHECK-NEXT: ret166 %head = insertelement <vscale x 16 x i8> poison, i8 %b, i32 0167 %splat = shufflevector <vscale x 16 x i8> %head, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer168 %cmp = icmp ugt <vscale x 16 x i8> %va, %splat169 %vc = select <vscale x 16 x i1> %cmp, <vscale x 16 x i8> %va, <vscale x 16 x i8> %splat170 ret <vscale x 16 x i8> %vc171}172 173define <vscale x 16 x i8> @vmax_vi_nxv16i8_0(<vscale x 16 x i8> %va) {174; CHECK-LABEL: vmax_vi_nxv16i8_0:175; CHECK: # %bb.0:176; CHECK-NEXT: li a0, -3177; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, ma178; CHECK-NEXT: vmaxu.vx v8, v8, a0179; CHECK-NEXT: ret180 %cmp = icmp ugt <vscale x 16 x i8> %va, splat (i8 -3)181 %vc = select <vscale x 16 x i1> %cmp, <vscale x 16 x i8> %va, <vscale x 16 x i8> splat (i8 -3)182 ret <vscale x 16 x i8> %vc183}184 185define <vscale x 32 x i8> @vmax_vv_nxv32i8(<vscale x 32 x i8> %va, <vscale x 32 x i8> %vb) {186; CHECK-LABEL: vmax_vv_nxv32i8:187; CHECK: # %bb.0:188; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, ma189; CHECK-NEXT: vmaxu.vv v8, v8, v12190; CHECK-NEXT: ret191 %cmp = icmp ugt <vscale x 32 x i8> %va, %vb192 %vc = select <vscale x 32 x i1> %cmp, <vscale x 32 x i8> %va, <vscale x 32 x i8> %vb193 ret <vscale x 32 x i8> %vc194}195 196define <vscale x 32 x i8> @vmax_vx_nxv32i8(<vscale x 32 x i8> %va, i8 signext %b) {197; CHECK-LABEL: vmax_vx_nxv32i8:198; CHECK: # %bb.0:199; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, ma200; CHECK-NEXT: vmaxu.vx v8, v8, a0201; CHECK-NEXT: ret202 %head = insertelement <vscale x 32 x i8> poison, i8 %b, i32 0203 %splat = shufflevector <vscale x 32 x i8> %head, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer204 %cmp = icmp ugt <vscale x 32 x i8> %va, %splat205 %vc = select <vscale x 32 x i1> %cmp, <vscale x 32 x i8> %va, <vscale x 32 x i8> %splat206 ret <vscale x 32 x i8> %vc207}208 209define <vscale x 32 x i8> @vmax_vi_nxv32i8_0(<vscale x 32 x i8> %va) {210; CHECK-LABEL: vmax_vi_nxv32i8_0:211; CHECK: # %bb.0:212; CHECK-NEXT: li a0, -3213; CHECK-NEXT: vsetvli a1, zero, e8, m4, ta, ma214; CHECK-NEXT: vmaxu.vx v8, v8, a0215; CHECK-NEXT: ret216 %cmp = icmp ugt <vscale x 32 x i8> %va, splat (i8 -3)217 %vc = select <vscale x 32 x i1> %cmp, <vscale x 32 x i8> %va, <vscale x 32 x i8> splat (i8 -3)218 ret <vscale x 32 x i8> %vc219}220 221define <vscale x 64 x i8> @vmax_vv_nxv64i8(<vscale x 64 x i8> %va, <vscale x 64 x i8> %vb) {222; CHECK-LABEL: vmax_vv_nxv64i8:223; CHECK: # %bb.0:224; CHECK-NEXT: vsetvli a0, zero, e8, m8, ta, ma225; CHECK-NEXT: vmaxu.vv v8, v8, v16226; CHECK-NEXT: ret227 %cmp = icmp ugt <vscale x 64 x i8> %va, %vb228 %vc = select <vscale x 64 x i1> %cmp, <vscale x 64 x i8> %va, <vscale x 64 x i8> %vb229 ret <vscale x 64 x i8> %vc230}231 232define <vscale x 64 x i8> @vmax_vx_nxv64i8(<vscale x 64 x i8> %va, i8 signext %b) {233; CHECK-LABEL: vmax_vx_nxv64i8:234; CHECK: # %bb.0:235; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, ma236; CHECK-NEXT: vmaxu.vx v8, v8, a0237; CHECK-NEXT: ret238 %head = insertelement <vscale x 64 x i8> poison, i8 %b, i32 0239 %splat = shufflevector <vscale x 64 x i8> %head, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer240 %cmp = icmp ugt <vscale x 64 x i8> %va, %splat241 %vc = select <vscale x 64 x i1> %cmp, <vscale x 64 x i8> %va, <vscale x 64 x i8> %splat242 ret <vscale x 64 x i8> %vc243}244 245define <vscale x 64 x i8> @vmax_vi_nxv64i8_0(<vscale x 64 x i8> %va) {246; CHECK-LABEL: vmax_vi_nxv64i8_0:247; CHECK: # %bb.0:248; CHECK-NEXT: li a0, -3249; CHECK-NEXT: vsetvli a1, zero, e8, m8, ta, ma250; CHECK-NEXT: vmaxu.vx v8, v8, a0251; CHECK-NEXT: ret252 %cmp = icmp ugt <vscale x 64 x i8> %va, splat (i8 -3)253 %vc = select <vscale x 64 x i1> %cmp, <vscale x 64 x i8> %va, <vscale x 64 x i8> splat (i8 -3)254 ret <vscale x 64 x i8> %vc255}256 257define <vscale x 1 x i16> @vmax_vv_nxv1i16(<vscale x 1 x i16> %va, <vscale x 1 x i16> %vb) {258; CHECK-LABEL: vmax_vv_nxv1i16:259; CHECK: # %bb.0:260; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, ma261; CHECK-NEXT: vmaxu.vv v8, v8, v9262; CHECK-NEXT: ret263 %cmp = icmp ugt <vscale x 1 x i16> %va, %vb264 %vc = select <vscale x 1 x i1> %cmp, <vscale x 1 x i16> %va, <vscale x 1 x i16> %vb265 ret <vscale x 1 x i16> %vc266}267 268define <vscale x 1 x i16> @vmax_vx_nxv1i16(<vscale x 1 x i16> %va, i16 signext %b) {269; CHECK-LABEL: vmax_vx_nxv1i16:270; CHECK: # %bb.0:271; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma272; CHECK-NEXT: vmaxu.vx v8, v8, a0273; CHECK-NEXT: ret274 %head = insertelement <vscale x 1 x i16> poison, i16 %b, i32 0275 %splat = shufflevector <vscale x 1 x i16> %head, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer276 %cmp = icmp ugt <vscale x 1 x i16> %va, %splat277 %vc = select <vscale x 1 x i1> %cmp, <vscale x 1 x i16> %va, <vscale x 1 x i16> %splat278 ret <vscale x 1 x i16> %vc279}280 281define <vscale x 1 x i16> @vmax_vi_nxv1i16_0(<vscale x 1 x i16> %va) {282; CHECK-LABEL: vmax_vi_nxv1i16_0:283; CHECK: # %bb.0:284; CHECK-NEXT: li a0, -3285; CHECK-NEXT: vsetvli a1, zero, e16, mf4, ta, ma286; CHECK-NEXT: vmaxu.vx v8, v8, a0287; CHECK-NEXT: ret288 %cmp = icmp ugt <vscale x 1 x i16> %va, splat (i16 -3)289 %vc = select <vscale x 1 x i1> %cmp, <vscale x 1 x i16> %va, <vscale x 1 x i16> splat (i16 -3)290 ret <vscale x 1 x i16> %vc291}292 293define <vscale x 2 x i16> @vmax_vv_nxv2i16(<vscale x 2 x i16> %va, <vscale x 2 x i16> %vb) {294; CHECK-LABEL: vmax_vv_nxv2i16:295; CHECK: # %bb.0:296; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, ma297; CHECK-NEXT: vmaxu.vv v8, v8, v9298; CHECK-NEXT: ret299 %cmp = icmp ugt <vscale x 2 x i16> %va, %vb300 %vc = select <vscale x 2 x i1> %cmp, <vscale x 2 x i16> %va, <vscale x 2 x i16> %vb301 ret <vscale x 2 x i16> %vc302}303 304define <vscale x 2 x i16> @vmax_vx_nxv2i16(<vscale x 2 x i16> %va, i16 signext %b) {305; CHECK-LABEL: vmax_vx_nxv2i16:306; CHECK: # %bb.0:307; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma308; CHECK-NEXT: vmaxu.vx v8, v8, a0309; CHECK-NEXT: ret310 %head = insertelement <vscale x 2 x i16> poison, i16 %b, i32 0311 %splat = shufflevector <vscale x 2 x i16> %head, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer312 %cmp = icmp ugt <vscale x 2 x i16> %va, %splat313 %vc = select <vscale x 2 x i1> %cmp, <vscale x 2 x i16> %va, <vscale x 2 x i16> %splat314 ret <vscale x 2 x i16> %vc315}316 317define <vscale x 2 x i16> @vmax_vi_nxv2i16_0(<vscale x 2 x i16> %va) {318; CHECK-LABEL: vmax_vi_nxv2i16_0:319; CHECK: # %bb.0:320; CHECK-NEXT: li a0, -3321; CHECK-NEXT: vsetvli a1, zero, e16, mf2, ta, ma322; CHECK-NEXT: vmaxu.vx v8, v8, a0323; CHECK-NEXT: ret324 %cmp = icmp ugt <vscale x 2 x i16> %va, splat (i16 -3)325 %vc = select <vscale x 2 x i1> %cmp, <vscale x 2 x i16> %va, <vscale x 2 x i16> splat (i16 -3)326 ret <vscale x 2 x i16> %vc327}328 329define <vscale x 4 x i16> @vmax_vv_nxv4i16(<vscale x 4 x i16> %va, <vscale x 4 x i16> %vb) {330; CHECK-LABEL: vmax_vv_nxv4i16:331; CHECK: # %bb.0:332; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, ma333; CHECK-NEXT: vmaxu.vv v8, v8, v9334; CHECK-NEXT: ret335 %cmp = icmp ugt <vscale x 4 x i16> %va, %vb336 %vc = select <vscale x 4 x i1> %cmp, <vscale x 4 x i16> %va, <vscale x 4 x i16> %vb337 ret <vscale x 4 x i16> %vc338}339 340define <vscale x 4 x i16> @vmax_vx_nxv4i16(<vscale x 4 x i16> %va, i16 signext %b) {341; CHECK-LABEL: vmax_vx_nxv4i16:342; CHECK: # %bb.0:343; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma344; CHECK-NEXT: vmaxu.vx v8, v8, a0345; CHECK-NEXT: ret346 %head = insertelement <vscale x 4 x i16> poison, i16 %b, i32 0347 %splat = shufflevector <vscale x 4 x i16> %head, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer348 %cmp = icmp ugt <vscale x 4 x i16> %va, %splat349 %vc = select <vscale x 4 x i1> %cmp, <vscale x 4 x i16> %va, <vscale x 4 x i16> %splat350 ret <vscale x 4 x i16> %vc351}352 353define <vscale x 4 x i16> @vmax_vi_nxv4i16_0(<vscale x 4 x i16> %va) {354; CHECK-LABEL: vmax_vi_nxv4i16_0:355; CHECK: # %bb.0:356; CHECK-NEXT: li a0, -3357; CHECK-NEXT: vsetvli a1, zero, e16, m1, ta, ma358; CHECK-NEXT: vmaxu.vx v8, v8, a0359; CHECK-NEXT: ret360 %cmp = icmp ugt <vscale x 4 x i16> %va, splat (i16 -3)361 %vc = select <vscale x 4 x i1> %cmp, <vscale x 4 x i16> %va, <vscale x 4 x i16> splat (i16 -3)362 ret <vscale x 4 x i16> %vc363}364 365define <vscale x 8 x i16> @vmax_vv_nxv8i16(<vscale x 8 x i16> %va, <vscale x 8 x i16> %vb) {366; CHECK-LABEL: vmax_vv_nxv8i16:367; CHECK: # %bb.0:368; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, ma369; CHECK-NEXT: vmaxu.vv v8, v8, v10370; CHECK-NEXT: ret371 %cmp = icmp ugt <vscale x 8 x i16> %va, %vb372 %vc = select <vscale x 8 x i1> %cmp, <vscale x 8 x i16> %va, <vscale x 8 x i16> %vb373 ret <vscale x 8 x i16> %vc374}375 376define <vscale x 8 x i16> @vmax_vx_nxv8i16(<vscale x 8 x i16> %va, i16 signext %b) {377; CHECK-LABEL: vmax_vx_nxv8i16:378; CHECK: # %bb.0:379; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma380; CHECK-NEXT: vmaxu.vx v8, v8, a0381; CHECK-NEXT: ret382 %head = insertelement <vscale x 8 x i16> poison, i16 %b, i32 0383 %splat = shufflevector <vscale x 8 x i16> %head, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer384 %cmp = icmp ugt <vscale x 8 x i16> %va, %splat385 %vc = select <vscale x 8 x i1> %cmp, <vscale x 8 x i16> %va, <vscale x 8 x i16> %splat386 ret <vscale x 8 x i16> %vc387}388 389define <vscale x 8 x i16> @vmax_vi_nxv8i16_0(<vscale x 8 x i16> %va) {390; CHECK-LABEL: vmax_vi_nxv8i16_0:391; CHECK: # %bb.0:392; CHECK-NEXT: li a0, -3393; CHECK-NEXT: vsetvli a1, zero, e16, m2, ta, ma394; CHECK-NEXT: vmaxu.vx v8, v8, a0395; CHECK-NEXT: ret396 %cmp = icmp ugt <vscale x 8 x i16> %va, splat (i16 -3)397 %vc = select <vscale x 8 x i1> %cmp, <vscale x 8 x i16> %va, <vscale x 8 x i16> splat (i16 -3)398 ret <vscale x 8 x i16> %vc399}400 401define <vscale x 16 x i16> @vmax_vv_nxv16i16(<vscale x 16 x i16> %va, <vscale x 16 x i16> %vb) {402; CHECK-LABEL: vmax_vv_nxv16i16:403; CHECK: # %bb.0:404; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, ma405; CHECK-NEXT: vmaxu.vv v8, v8, v12406; CHECK-NEXT: ret407 %cmp = icmp ugt <vscale x 16 x i16> %va, %vb408 %vc = select <vscale x 16 x i1> %cmp, <vscale x 16 x i16> %va, <vscale x 16 x i16> %vb409 ret <vscale x 16 x i16> %vc410}411 412define <vscale x 16 x i16> @vmax_vx_nxv16i16(<vscale x 16 x i16> %va, i16 signext %b) {413; CHECK-LABEL: vmax_vx_nxv16i16:414; CHECK: # %bb.0:415; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma416; CHECK-NEXT: vmaxu.vx v8, v8, a0417; CHECK-NEXT: ret418 %head = insertelement <vscale x 16 x i16> poison, i16 %b, i32 0419 %splat = shufflevector <vscale x 16 x i16> %head, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer420 %cmp = icmp ugt <vscale x 16 x i16> %va, %splat421 %vc = select <vscale x 16 x i1> %cmp, <vscale x 16 x i16> %va, <vscale x 16 x i16> %splat422 ret <vscale x 16 x i16> %vc423}424 425define <vscale x 16 x i16> @vmax_vi_nxv16i16_0(<vscale x 16 x i16> %va) {426; CHECK-LABEL: vmax_vi_nxv16i16_0:427; CHECK: # %bb.0:428; CHECK-NEXT: li a0, -3429; CHECK-NEXT: vsetvli a1, zero, e16, m4, ta, ma430; CHECK-NEXT: vmaxu.vx v8, v8, a0431; CHECK-NEXT: ret432 %cmp = icmp ugt <vscale x 16 x i16> %va, splat (i16 -3)433 %vc = select <vscale x 16 x i1> %cmp, <vscale x 16 x i16> %va, <vscale x 16 x i16> splat (i16 -3)434 ret <vscale x 16 x i16> %vc435}436 437define <vscale x 32 x i16> @vmax_vv_nxv32i16(<vscale x 32 x i16> %va, <vscale x 32 x i16> %vb) {438; CHECK-LABEL: vmax_vv_nxv32i16:439; CHECK: # %bb.0:440; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, ma441; CHECK-NEXT: vmaxu.vv v8, v8, v16442; CHECK-NEXT: ret443 %cmp = icmp ugt <vscale x 32 x i16> %va, %vb444 %vc = select <vscale x 32 x i1> %cmp, <vscale x 32 x i16> %va, <vscale x 32 x i16> %vb445 ret <vscale x 32 x i16> %vc446}447 448define <vscale x 32 x i16> @vmax_vx_nxv32i16(<vscale x 32 x i16> %va, i16 signext %b) {449; CHECK-LABEL: vmax_vx_nxv32i16:450; CHECK: # %bb.0:451; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, ma452; CHECK-NEXT: vmaxu.vx v8, v8, a0453; CHECK-NEXT: ret454 %head = insertelement <vscale x 32 x i16> poison, i16 %b, i32 0455 %splat = shufflevector <vscale x 32 x i16> %head, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer456 %cmp = icmp ugt <vscale x 32 x i16> %va, %splat457 %vc = select <vscale x 32 x i1> %cmp, <vscale x 32 x i16> %va, <vscale x 32 x i16> %splat458 ret <vscale x 32 x i16> %vc459}460 461define <vscale x 32 x i16> @vmax_vi_nxv32i16_0(<vscale x 32 x i16> %va) {462; CHECK-LABEL: vmax_vi_nxv32i16_0:463; CHECK: # %bb.0:464; CHECK-NEXT: li a0, -3465; CHECK-NEXT: vsetvli a1, zero, e16, m8, ta, ma466; CHECK-NEXT: vmaxu.vx v8, v8, a0467; CHECK-NEXT: ret468 %cmp = icmp ugt <vscale x 32 x i16> %va, splat (i16 -3)469 %vc = select <vscale x 32 x i1> %cmp, <vscale x 32 x i16> %va, <vscale x 32 x i16> splat (i16 -3)470 ret <vscale x 32 x i16> %vc471}472 473define <vscale x 1 x i32> @vmax_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb) {474; CHECK-LABEL: vmax_vv_nxv1i32:475; CHECK: # %bb.0:476; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, ma477; CHECK-NEXT: vmaxu.vv v8, v8, v9478; CHECK-NEXT: ret479 %cmp = icmp ugt <vscale x 1 x i32> %va, %vb480 %vc = select <vscale x 1 x i1> %cmp, <vscale x 1 x i32> %va, <vscale x 1 x i32> %vb481 ret <vscale x 1 x i32> %vc482}483 484define <vscale x 1 x i32> @vmax_vx_nxv1i32(<vscale x 1 x i32> %va, i32 signext %b) {485; CHECK-LABEL: vmax_vx_nxv1i32:486; CHECK: # %bb.0:487; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, ma488; CHECK-NEXT: vmaxu.vx v8, v8, a0489; CHECK-NEXT: ret490 %head = insertelement <vscale x 1 x i32> poison, i32 %b, i32 0491 %splat = shufflevector <vscale x 1 x i32> %head, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer492 %cmp = icmp ugt <vscale x 1 x i32> %va, %splat493 %vc = select <vscale x 1 x i1> %cmp, <vscale x 1 x i32> %va, <vscale x 1 x i32> %splat494 ret <vscale x 1 x i32> %vc495}496 497define <vscale x 1 x i32> @vmax_vi_nxv1i32_0(<vscale x 1 x i32> %va) {498; CHECK-LABEL: vmax_vi_nxv1i32_0:499; CHECK: # %bb.0:500; CHECK-NEXT: li a0, -3501; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, ma502; CHECK-NEXT: vmaxu.vx v8, v8, a0503; CHECK-NEXT: ret504 %cmp = icmp ugt <vscale x 1 x i32> %va, splat (i32 -3)505 %vc = select <vscale x 1 x i1> %cmp, <vscale x 1 x i32> %va, <vscale x 1 x i32> splat (i32 -3)506 ret <vscale x 1 x i32> %vc507}508 509define <vscale x 2 x i32> @vmax_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb) {510; CHECK-LABEL: vmax_vv_nxv2i32:511; CHECK: # %bb.0:512; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, ma513; CHECK-NEXT: vmaxu.vv v8, v8, v9514; CHECK-NEXT: ret515 %cmp = icmp ugt <vscale x 2 x i32> %va, %vb516 %vc = select <vscale x 2 x i1> %cmp, <vscale x 2 x i32> %va, <vscale x 2 x i32> %vb517 ret <vscale x 2 x i32> %vc518}519 520define <vscale x 2 x i32> @vmax_vx_nxv2i32(<vscale x 2 x i32> %va, i32 signext %b) {521; CHECK-LABEL: vmax_vx_nxv2i32:522; CHECK: # %bb.0:523; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma524; CHECK-NEXT: vmaxu.vx v8, v8, a0525; CHECK-NEXT: ret526 %head = insertelement <vscale x 2 x i32> poison, i32 %b, i32 0527 %splat = shufflevector <vscale x 2 x i32> %head, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer528 %cmp = icmp ugt <vscale x 2 x i32> %va, %splat529 %vc = select <vscale x 2 x i1> %cmp, <vscale x 2 x i32> %va, <vscale x 2 x i32> %splat530 ret <vscale x 2 x i32> %vc531}532 533define <vscale x 2 x i32> @vmax_vi_nxv2i32_0(<vscale x 2 x i32> %va) {534; CHECK-LABEL: vmax_vi_nxv2i32_0:535; CHECK: # %bb.0:536; CHECK-NEXT: li a0, -3537; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, ma538; CHECK-NEXT: vmaxu.vx v8, v8, a0539; CHECK-NEXT: ret540 %cmp = icmp ugt <vscale x 2 x i32> %va, splat (i32 -3)541 %vc = select <vscale x 2 x i1> %cmp, <vscale x 2 x i32> %va, <vscale x 2 x i32> splat (i32 -3)542 ret <vscale x 2 x i32> %vc543}544 545define <vscale x 4 x i32> @vmax_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb) {546; CHECK-LABEL: vmax_vv_nxv4i32:547; CHECK: # %bb.0:548; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, ma549; CHECK-NEXT: vmaxu.vv v8, v8, v10550; CHECK-NEXT: ret551 %cmp = icmp ugt <vscale x 4 x i32> %va, %vb552 %vc = select <vscale x 4 x i1> %cmp, <vscale x 4 x i32> %va, <vscale x 4 x i32> %vb553 ret <vscale x 4 x i32> %vc554}555 556define <vscale x 4 x i32> @vmax_vx_nxv4i32(<vscale x 4 x i32> %va, i32 signext %b) {557; CHECK-LABEL: vmax_vx_nxv4i32:558; CHECK: # %bb.0:559; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, ma560; CHECK-NEXT: vmaxu.vx v8, v8, a0561; CHECK-NEXT: ret562 %head = insertelement <vscale x 4 x i32> poison, i32 %b, i32 0563 %splat = shufflevector <vscale x 4 x i32> %head, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer564 %cmp = icmp ugt <vscale x 4 x i32> %va, %splat565 %vc = select <vscale x 4 x i1> %cmp, <vscale x 4 x i32> %va, <vscale x 4 x i32> %splat566 ret <vscale x 4 x i32> %vc567}568 569define <vscale x 4 x i32> @vmax_vi_nxv4i32_0(<vscale x 4 x i32> %va) {570; CHECK-LABEL: vmax_vi_nxv4i32_0:571; CHECK: # %bb.0:572; CHECK-NEXT: li a0, -3573; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, ma574; CHECK-NEXT: vmaxu.vx v8, v8, a0575; CHECK-NEXT: ret576 %cmp = icmp ugt <vscale x 4 x i32> %va, splat (i32 -3)577 %vc = select <vscale x 4 x i1> %cmp, <vscale x 4 x i32> %va, <vscale x 4 x i32> splat (i32 -3)578 ret <vscale x 4 x i32> %vc579}580 581define <vscale x 8 x i32> @vmax_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb) {582; CHECK-LABEL: vmax_vv_nxv8i32:583; CHECK: # %bb.0:584; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma585; CHECK-NEXT: vmaxu.vv v8, v8, v12586; CHECK-NEXT: ret587 %cmp = icmp ugt <vscale x 8 x i32> %va, %vb588 %vc = select <vscale x 8 x i1> %cmp, <vscale x 8 x i32> %va, <vscale x 8 x i32> %vb589 ret <vscale x 8 x i32> %vc590}591 592define <vscale x 8 x i32> @vmax_vx_nxv8i32(<vscale x 8 x i32> %va, i32 signext %b) {593; CHECK-LABEL: vmax_vx_nxv8i32:594; CHECK: # %bb.0:595; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma596; CHECK-NEXT: vmaxu.vx v8, v8, a0597; CHECK-NEXT: ret598 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0599 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer600 %cmp = icmp ugt <vscale x 8 x i32> %va, %splat601 %vc = select <vscale x 8 x i1> %cmp, <vscale x 8 x i32> %va, <vscale x 8 x i32> %splat602 ret <vscale x 8 x i32> %vc603}604 605define <vscale x 8 x i32> @vmax_vi_nxv8i32_0(<vscale x 8 x i32> %va) {606; CHECK-LABEL: vmax_vi_nxv8i32_0:607; CHECK: # %bb.0:608; CHECK-NEXT: li a0, -3609; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma610; CHECK-NEXT: vmaxu.vx v8, v8, a0611; CHECK-NEXT: ret612 %cmp = icmp ugt <vscale x 8 x i32> %va, splat (i32 -3)613 %vc = select <vscale x 8 x i1> %cmp, <vscale x 8 x i32> %va, <vscale x 8 x i32> splat (i32 -3)614 ret <vscale x 8 x i32> %vc615}616 617define <vscale x 16 x i32> @vmax_vv_nxv16i32(<vscale x 16 x i32> %va, <vscale x 16 x i32> %vb) {618; CHECK-LABEL: vmax_vv_nxv16i32:619; CHECK: # %bb.0:620; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, ma621; CHECK-NEXT: vmaxu.vv v8, v8, v16622; CHECK-NEXT: ret623 %cmp = icmp ugt <vscale x 16 x i32> %va, %vb624 %vc = select <vscale x 16 x i1> %cmp, <vscale x 16 x i32> %va, <vscale x 16 x i32> %vb625 ret <vscale x 16 x i32> %vc626}627 628define <vscale x 16 x i32> @vmax_vx_nxv16i32(<vscale x 16 x i32> %va, i32 signext %b) {629; CHECK-LABEL: vmax_vx_nxv16i32:630; CHECK: # %bb.0:631; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, ma632; CHECK-NEXT: vmaxu.vx v8, v8, a0633; CHECK-NEXT: ret634 %head = insertelement <vscale x 16 x i32> poison, i32 %b, i32 0635 %splat = shufflevector <vscale x 16 x i32> %head, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer636 %cmp = icmp ugt <vscale x 16 x i32> %va, %splat637 %vc = select <vscale x 16 x i1> %cmp, <vscale x 16 x i32> %va, <vscale x 16 x i32> %splat638 ret <vscale x 16 x i32> %vc639}640 641define <vscale x 16 x i32> @vmax_vi_nxv16i32_0(<vscale x 16 x i32> %va) {642; CHECK-LABEL: vmax_vi_nxv16i32_0:643; CHECK: # %bb.0:644; CHECK-NEXT: li a0, -3645; CHECK-NEXT: vsetvli a1, zero, e32, m8, ta, ma646; CHECK-NEXT: vmaxu.vx v8, v8, a0647; CHECK-NEXT: ret648 %cmp = icmp ugt <vscale x 16 x i32> %va, splat (i32 -3)649 %vc = select <vscale x 16 x i1> %cmp, <vscale x 16 x i32> %va, <vscale x 16 x i32> splat (i32 -3)650 ret <vscale x 16 x i32> %vc651}652 653define <vscale x 1 x i64> @vmax_vv_nxv1i64(<vscale x 1 x i64> %va, <vscale x 1 x i64> %vb) {654; CHECK-LABEL: vmax_vv_nxv1i64:655; CHECK: # %bb.0:656; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, ma657; CHECK-NEXT: vmaxu.vv v8, v8, v9658; CHECK-NEXT: ret659 %cmp = icmp ugt <vscale x 1 x i64> %va, %vb660 %vc = select <vscale x 1 x i1> %cmp, <vscale x 1 x i64> %va, <vscale x 1 x i64> %vb661 ret <vscale x 1 x i64> %vc662}663 664define <vscale x 1 x i64> @vmax_vx_nxv1i64(<vscale x 1 x i64> %va, i64 %b) {665; RV32-LABEL: vmax_vx_nxv1i64:666; RV32: # %bb.0:667; RV32-NEXT: addi sp, sp, -16668; RV32-NEXT: .cfi_def_cfa_offset 16669; RV32-NEXT: sw a0, 8(sp)670; RV32-NEXT: sw a1, 12(sp)671; RV32-NEXT: addi a0, sp, 8672; RV32-NEXT: vsetvli a1, zero, e64, m1, ta, ma673; RV32-NEXT: vlse64.v v9, (a0), zero674; RV32-NEXT: vmaxu.vv v8, v8, v9675; RV32-NEXT: addi sp, sp, 16676; RV32-NEXT: .cfi_def_cfa_offset 0677; RV32-NEXT: ret678;679; RV64-LABEL: vmax_vx_nxv1i64:680; RV64: # %bb.0:681; RV64-NEXT: vsetvli a1, zero, e64, m1, ta, ma682; RV64-NEXT: vmaxu.vx v8, v8, a0683; RV64-NEXT: ret684 %head = insertelement <vscale x 1 x i64> poison, i64 %b, i32 0685 %splat = shufflevector <vscale x 1 x i64> %head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer686 %cmp = icmp ugt <vscale x 1 x i64> %va, %splat687 %vc = select <vscale x 1 x i1> %cmp, <vscale x 1 x i64> %va, <vscale x 1 x i64> %splat688 ret <vscale x 1 x i64> %vc689}690 691define <vscale x 1 x i64> @vmax_vi_nxv1i64_0(<vscale x 1 x i64> %va) {692; CHECK-LABEL: vmax_vi_nxv1i64_0:693; CHECK: # %bb.0:694; CHECK-NEXT: li a0, -3695; CHECK-NEXT: vsetvli a1, zero, e64, m1, ta, ma696; CHECK-NEXT: vmaxu.vx v8, v8, a0697; CHECK-NEXT: ret698 %cmp = icmp ugt <vscale x 1 x i64> %va, splat (i64 -3)699 %vc = select <vscale x 1 x i1> %cmp, <vscale x 1 x i64> %va, <vscale x 1 x i64> splat (i64 -3)700 ret <vscale x 1 x i64> %vc701}702 703define <vscale x 2 x i64> @vmax_vv_nxv2i64(<vscale x 2 x i64> %va, <vscale x 2 x i64> %vb) {704; CHECK-LABEL: vmax_vv_nxv2i64:705; CHECK: # %bb.0:706; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, ma707; CHECK-NEXT: vmaxu.vv v8, v8, v10708; CHECK-NEXT: ret709 %cmp = icmp ugt <vscale x 2 x i64> %va, %vb710 %vc = select <vscale x 2 x i1> %cmp, <vscale x 2 x i64> %va, <vscale x 2 x i64> %vb711 ret <vscale x 2 x i64> %vc712}713 714define <vscale x 2 x i64> @vmax_vx_nxv2i64(<vscale x 2 x i64> %va, i64 %b) {715; RV32-LABEL: vmax_vx_nxv2i64:716; RV32: # %bb.0:717; RV32-NEXT: addi sp, sp, -16718; RV32-NEXT: .cfi_def_cfa_offset 16719; RV32-NEXT: sw a0, 8(sp)720; RV32-NEXT: sw a1, 12(sp)721; RV32-NEXT: addi a0, sp, 8722; RV32-NEXT: vsetvli a1, zero, e64, m2, ta, ma723; RV32-NEXT: vlse64.v v10, (a0), zero724; RV32-NEXT: vmaxu.vv v8, v8, v10725; RV32-NEXT: addi sp, sp, 16726; RV32-NEXT: .cfi_def_cfa_offset 0727; RV32-NEXT: ret728;729; RV64-LABEL: vmax_vx_nxv2i64:730; RV64: # %bb.0:731; RV64-NEXT: vsetvli a1, zero, e64, m2, ta, ma732; RV64-NEXT: vmaxu.vx v8, v8, a0733; RV64-NEXT: ret734 %head = insertelement <vscale x 2 x i64> poison, i64 %b, i32 0735 %splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer736 %cmp = icmp ugt <vscale x 2 x i64> %va, %splat737 %vc = select <vscale x 2 x i1> %cmp, <vscale x 2 x i64> %va, <vscale x 2 x i64> %splat738 ret <vscale x 2 x i64> %vc739}740 741define <vscale x 2 x i64> @vmax_vi_nxv2i64_0(<vscale x 2 x i64> %va) {742; CHECK-LABEL: vmax_vi_nxv2i64_0:743; CHECK: # %bb.0:744; CHECK-NEXT: li a0, -3745; CHECK-NEXT: vsetvli a1, zero, e64, m2, ta, ma746; CHECK-NEXT: vmaxu.vx v8, v8, a0747; CHECK-NEXT: ret748 %cmp = icmp ugt <vscale x 2 x i64> %va, splat (i64 -3)749 %vc = select <vscale x 2 x i1> %cmp, <vscale x 2 x i64> %va, <vscale x 2 x i64> splat (i64 -3)750 ret <vscale x 2 x i64> %vc751}752 753define <vscale x 4 x i64> @vmax_vv_nxv4i64(<vscale x 4 x i64> %va, <vscale x 4 x i64> %vb) {754; CHECK-LABEL: vmax_vv_nxv4i64:755; CHECK: # %bb.0:756; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, ma757; CHECK-NEXT: vmaxu.vv v8, v8, v12758; CHECK-NEXT: ret759 %cmp = icmp ugt <vscale x 4 x i64> %va, %vb760 %vc = select <vscale x 4 x i1> %cmp, <vscale x 4 x i64> %va, <vscale x 4 x i64> %vb761 ret <vscale x 4 x i64> %vc762}763 764define <vscale x 4 x i64> @vmax_vx_nxv4i64(<vscale x 4 x i64> %va, i64 %b) {765; RV32-LABEL: vmax_vx_nxv4i64:766; RV32: # %bb.0:767; RV32-NEXT: addi sp, sp, -16768; RV32-NEXT: .cfi_def_cfa_offset 16769; RV32-NEXT: sw a0, 8(sp)770; RV32-NEXT: sw a1, 12(sp)771; RV32-NEXT: addi a0, sp, 8772; RV32-NEXT: vsetvli a1, zero, e64, m4, ta, ma773; RV32-NEXT: vlse64.v v12, (a0), zero774; RV32-NEXT: vmaxu.vv v8, v8, v12775; RV32-NEXT: addi sp, sp, 16776; RV32-NEXT: .cfi_def_cfa_offset 0777; RV32-NEXT: ret778;779; RV64-LABEL: vmax_vx_nxv4i64:780; RV64: # %bb.0:781; RV64-NEXT: vsetvli a1, zero, e64, m4, ta, ma782; RV64-NEXT: vmaxu.vx v8, v8, a0783; RV64-NEXT: ret784 %head = insertelement <vscale x 4 x i64> poison, i64 %b, i32 0785 %splat = shufflevector <vscale x 4 x i64> %head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer786 %cmp = icmp ugt <vscale x 4 x i64> %va, %splat787 %vc = select <vscale x 4 x i1> %cmp, <vscale x 4 x i64> %va, <vscale x 4 x i64> %splat788 ret <vscale x 4 x i64> %vc789}790 791define <vscale x 4 x i64> @vmax_vi_nxv4i64_0(<vscale x 4 x i64> %va) {792; CHECK-LABEL: vmax_vi_nxv4i64_0:793; CHECK: # %bb.0:794; CHECK-NEXT: li a0, -3795; CHECK-NEXT: vsetvli a1, zero, e64, m4, ta, ma796; CHECK-NEXT: vmaxu.vx v8, v8, a0797; CHECK-NEXT: ret798 %cmp = icmp ugt <vscale x 4 x i64> %va, splat (i64 -3)799 %vc = select <vscale x 4 x i1> %cmp, <vscale x 4 x i64> %va, <vscale x 4 x i64> splat (i64 -3)800 ret <vscale x 4 x i64> %vc801}802 803define <vscale x 8 x i64> @vmax_vv_nxv8i64(<vscale x 8 x i64> %va, <vscale x 8 x i64> %vb) {804; CHECK-LABEL: vmax_vv_nxv8i64:805; CHECK: # %bb.0:806; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, ma807; CHECK-NEXT: vmaxu.vv v8, v8, v16808; CHECK-NEXT: ret809 %cmp = icmp ugt <vscale x 8 x i64> %va, %vb810 %vc = select <vscale x 8 x i1> %cmp, <vscale x 8 x i64> %va, <vscale x 8 x i64> %vb811 ret <vscale x 8 x i64> %vc812}813 814define <vscale x 8 x i64> @vmax_vx_nxv8i64(<vscale x 8 x i64> %va, i64 %b) {815; RV32-LABEL: vmax_vx_nxv8i64:816; RV32: # %bb.0:817; RV32-NEXT: addi sp, sp, -16818; RV32-NEXT: .cfi_def_cfa_offset 16819; RV32-NEXT: sw a0, 8(sp)820; RV32-NEXT: sw a1, 12(sp)821; RV32-NEXT: addi a0, sp, 8822; RV32-NEXT: vsetvli a1, zero, e64, m8, ta, ma823; RV32-NEXT: vlse64.v v16, (a0), zero824; RV32-NEXT: vmaxu.vv v8, v8, v16825; RV32-NEXT: addi sp, sp, 16826; RV32-NEXT: .cfi_def_cfa_offset 0827; RV32-NEXT: ret828;829; RV64-LABEL: vmax_vx_nxv8i64:830; RV64: # %bb.0:831; RV64-NEXT: vsetvli a1, zero, e64, m8, ta, ma832; RV64-NEXT: vmaxu.vx v8, v8, a0833; RV64-NEXT: ret834 %head = insertelement <vscale x 8 x i64> poison, i64 %b, i32 0835 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer836 %cmp = icmp ugt <vscale x 8 x i64> %va, %splat837 %vc = select <vscale x 8 x i1> %cmp, <vscale x 8 x i64> %va, <vscale x 8 x i64> %splat838 ret <vscale x 8 x i64> %vc839}840 841define <vscale x 8 x i64> @vmax_vi_nxv8i64_0(<vscale x 8 x i64> %va) {842; CHECK-LABEL: vmax_vi_nxv8i64_0:843; CHECK: # %bb.0:844; CHECK-NEXT: li a0, -3845; CHECK-NEXT: vsetvli a1, zero, e64, m8, ta, ma846; CHECK-NEXT: vmaxu.vx v8, v8, a0847; CHECK-NEXT: ret848 %cmp = icmp ugt <vscale x 8 x i64> %va, splat (i64 -3)849 %vc = select <vscale x 8 x i1> %cmp, <vscale x 8 x i64> %va, <vscale x 8 x i64> splat (i64 -3)850 ret <vscale x 8 x i64> %vc851}852 853define <vscale x 8 x i32> @vmax_vv_mask_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb, <vscale x 8 x i1> %mask) {854; CHECK-LABEL: vmax_vv_mask_nxv8i32:855; CHECK: # %bb.0:856; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma857; CHECK-NEXT: vmv.v.i v16, 0858; CHECK-NEXT: vmerge.vvm v12, v16, v12, v0859; CHECK-NEXT: vmaxu.vv v8, v8, v12860; CHECK-NEXT: ret861 %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x i32> %vb, <vscale x 8 x i32> zeroinitializer862 %cmp = icmp ugt <vscale x 8 x i32> %va, %vs863 %vc = select <vscale x 8 x i1> %cmp, <vscale x 8 x i32> %va, <vscale x 8 x i32> %vs864 ret <vscale x 8 x i32> %vc865}866 867define <vscale x 8 x i32> @vmax_vx_mask_nxv8i32(<vscale x 8 x i32> %va, i32 signext %b, <vscale x 8 x i1> %mask) {868; CHECK-LABEL: vmax_vx_mask_nxv8i32:869; CHECK: # %bb.0:870; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, ma871; CHECK-NEXT: vmv.v.i v12, 0872; CHECK-NEXT: vmerge.vxm v12, v12, a0, v0873; CHECK-NEXT: vmaxu.vv v8, v8, v12874; CHECK-NEXT: ret875 %head = insertelement <vscale x 8 x i32> poison, i32 %b, i32 0876 %splat = shufflevector <vscale x 8 x i32> %head, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer877 %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x i32> %splat, <vscale x 8 x i32> zeroinitializer878 %cmp = icmp ugt <vscale x 8 x i32> %va, %vs879 %vc = select <vscale x 8 x i1> %cmp, <vscale x 8 x i32> %va, <vscale x 8 x i32> %vs880 ret <vscale x 8 x i32> %vc881}882 883define <vscale x 8 x i32> @vmax_vi_mask_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i1> %mask) {884; CHECK-LABEL: vmax_vi_mask_nxv8i32:885; CHECK: # %bb.0:886; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, ma887; CHECK-NEXT: vmv.v.i v12, 0888; CHECK-NEXT: vmerge.vim v12, v12, -3, v0889; CHECK-NEXT: vmaxu.vv v8, v8, v12890; CHECK-NEXT: ret891 %vs = select <vscale x 8 x i1> %mask, <vscale x 8 x i32> splat (i32 -3), <vscale x 8 x i32> zeroinitializer892 %cmp = icmp ugt <vscale x 8 x i32> %va, %vs893 %vc = select <vscale x 8 x i1> %cmp, <vscale x 8 x i32> %va, <vscale x 8 x i32> %vs894 ret <vscale x 8 x i32> %vc895}896