1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \ 3; RUN: | FileCheck %s --check-prefixes=CHECK,RV32 4; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \ 5; RUN: | FileCheck %s --check-prefixes=CHECK,RV64 6 7declare <8 x i7> @llvm.vp.udiv.v8i7(<8 x i7>, <8 x i7>, <8 x i1>, i32) 8 9define <8 x i7> @vdivu_vv_v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 zeroext %evl) { 10; CHECK-LABEL: vdivu_vv_v8i7: 11; CHECK: # %bb.0: 12; CHECK-NEXT: li a1, 127 13; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 14; CHECK-NEXT: vand.vx v9, v9, a1, v0.t 15; CHECK-NEXT: vand.vx v8, v8, a1, v0.t 16; CHECK-NEXT: vdivu.vv v8, v8, v9, v0.t 17; CHECK-NEXT: ret 18 %v = call <8 x i7> @llvm.vp.udiv.v8i7(<8 x i7> %va, <8 x i7> %b, <8 x i1> %m, i32 %evl) 19 ret <8 x i7> %v 20} 21 22declare <2 x i8> @llvm.vp.udiv.v2i8(<2 x i8>, <2 x i8>, <2 x i1>, i32) 23 24define <2 x i8> @vdivu_vv_v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 zeroext %evl) { 25; CHECK-LABEL: vdivu_vv_v2i8: 26; CHECK: # %bb.0: 27; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 28; CHECK-NEXT: vdivu.vv v8, v8, v9, v0.t 29; CHECK-NEXT: ret 30 %v = call <2 x i8> @llvm.vp.udiv.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> %m, i32 %evl) 31 ret <2 x i8> %v 32} 33 34define <2 x i8> @vdivu_vv_v2i8_unmasked(<2 x i8> %va, <2 x i8> %b, i32 zeroext %evl) { 35; CHECK-LABEL: vdivu_vv_v2i8_unmasked: 36; CHECK: # %bb.0: 37; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 38; CHECK-NEXT: vdivu.vv v8, v8, v9 39; CHECK-NEXT: ret 40 %v = call <2 x i8> @llvm.vp.udiv.v2i8(<2 x i8> %va, <2 x i8> %b, <2 x i1> splat (i1 true), i32 %evl) 41 ret <2 x i8> %v 42} 43 44define <2 x i8> @vdivu_vx_v2i8(<2 x i8> %va, i8 %b, <2 x i1> %m, i32 zeroext %evl) { 45; CHECK-LABEL: vdivu_vx_v2i8: 46; CHECK: # %bb.0: 47; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 48; CHECK-NEXT: vdivu.vx v8, v8, a0, v0.t 49; CHECK-NEXT: ret 50 %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0 51 %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer 52 %v = call <2 x i8> @llvm.vp.udiv.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> %m, i32 %evl) 53 ret <2 x i8> %v 54} 55 56define <2 x i8> @vdivu_vx_v2i8_unmasked(<2 x i8> %va, i8 %b, i32 zeroext %evl) { 57; CHECK-LABEL: vdivu_vx_v2i8_unmasked: 58; CHECK: # %bb.0: 59; CHECK-NEXT: vsetvli zero, a1, e8, mf8, ta, ma 60; CHECK-NEXT: vdivu.vx v8, v8, a0 61; CHECK-NEXT: ret 62 %elt.head = insertelement <2 x i8> poison, i8 %b, i32 0 63 %vb = shufflevector <2 x i8> %elt.head, <2 x i8> poison, <2 x i32> zeroinitializer 64 %v = call <2 x i8> @llvm.vp.udiv.v2i8(<2 x i8> %va, <2 x i8> %vb, <2 x i1> splat (i1 true), i32 %evl) 65 ret <2 x i8> %v 66} 67 68declare <4 x i8> @llvm.vp.udiv.v4i8(<4 x i8>, <4 x i8>, <4 x i1>, i32) 69 70define <4 x i8> @vdivu_vv_v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 zeroext %evl) { 71; CHECK-LABEL: vdivu_vv_v4i8: 72; CHECK: # %bb.0: 73; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 74; CHECK-NEXT: vdivu.vv v8, v8, v9, v0.t 75; CHECK-NEXT: ret 76 %v = call <4 x i8> @llvm.vp.udiv.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> %m, i32 %evl) 77 ret <4 x i8> %v 78} 79 80define <4 x i8> @vdivu_vv_v4i8_unmasked(<4 x i8> %va, <4 x i8> %b, i32 zeroext %evl) { 81; CHECK-LABEL: vdivu_vv_v4i8_unmasked: 82; CHECK: # %bb.0: 83; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 84; CHECK-NEXT: vdivu.vv v8, v8, v9 85; CHECK-NEXT: ret 86 %v = call <4 x i8> @llvm.vp.udiv.v4i8(<4 x i8> %va, <4 x i8> %b, <4 x i1> splat (i1 true), i32 %evl) 87 ret <4 x i8> %v 88} 89 90define <4 x i8> @vdivu_vx_v4i8(<4 x i8> %va, i8 %b, <4 x i1> %m, i32 zeroext %evl) { 91; CHECK-LABEL: vdivu_vx_v4i8: 92; CHECK: # %bb.0: 93; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 94; CHECK-NEXT: vdivu.vx v8, v8, a0, v0.t 95; CHECK-NEXT: ret 96 %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0 97 %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer 98 %v = call <4 x i8> @llvm.vp.udiv.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> %m, i32 %evl) 99 ret <4 x i8> %v 100} 101 102define <4 x i8> @vdivu_vx_v4i8_unmasked(<4 x i8> %va, i8 %b, i32 zeroext %evl) { 103; CHECK-LABEL: vdivu_vx_v4i8_unmasked: 104; CHECK: # %bb.0: 105; CHECK-NEXT: vsetvli zero, a1, e8, mf4, ta, ma 106; CHECK-NEXT: vdivu.vx v8, v8, a0 107; CHECK-NEXT: ret 108 %elt.head = insertelement <4 x i8> poison, i8 %b, i32 0 109 %vb = shufflevector <4 x i8> %elt.head, <4 x i8> poison, <4 x i32> zeroinitializer 110 %v = call <4 x i8> @llvm.vp.udiv.v4i8(<4 x i8> %va, <4 x i8> %vb, <4 x i1> splat (i1 true), i32 %evl) 111 ret <4 x i8> %v 112} 113 114declare <6 x i8> @llvm.vp.udiv.v6i8(<6 x i8>, <6 x i8>, <6 x i1>, i32) 115 116define <6 x i8> @vdivu_vv_v6i8(<6 x i8> %va, <6 x i8> %b, <6 x i1> %m, i32 zeroext %evl) { 117; CHECK-LABEL: vdivu_vv_v6i8: 118; CHECK: # %bb.0: 119; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 120; CHECK-NEXT: vdivu.vv v8, v8, v9, v0.t 121; CHECK-NEXT: ret 122 %v = call <6 x i8> @llvm.vp.udiv.v6i8(<6 x i8> %va, <6 x i8> %b, <6 x i1> %m, i32 %evl) 123 ret <6 x i8> %v 124} 125 126declare <8 x i8> @llvm.vp.udiv.v8i8(<8 x i8>, <8 x i8>, <8 x i1>, i32) 127 128define <8 x i8> @vdivu_vv_v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 zeroext %evl) { 129; CHECK-LABEL: vdivu_vv_v8i8: 130; CHECK: # %bb.0: 131; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 132; CHECK-NEXT: vdivu.vv v8, v8, v9, v0.t 133; CHECK-NEXT: ret 134 %v = call <8 x i8> @llvm.vp.udiv.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> %m, i32 %evl) 135 ret <8 x i8> %v 136} 137 138define <8 x i8> @vdivu_vv_v8i8_unmasked(<8 x i8> %va, <8 x i8> %b, i32 zeroext %evl) { 139; CHECK-LABEL: vdivu_vv_v8i8_unmasked: 140; CHECK: # %bb.0: 141; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 142; CHECK-NEXT: vdivu.vv v8, v8, v9 143; CHECK-NEXT: ret 144 %v = call <8 x i8> @llvm.vp.udiv.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> splat (i1 true), i32 %evl) 145 ret <8 x i8> %v 146} 147 148define <8 x i8> @vdivu_vx_v8i8(<8 x i8> %va, i8 %b, <8 x i1> %m, i32 zeroext %evl) { 149; CHECK-LABEL: vdivu_vx_v8i8: 150; CHECK: # %bb.0: 151; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 152; CHECK-NEXT: vdivu.vx v8, v8, a0, v0.t 153; CHECK-NEXT: ret 154 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 155 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 156 %v = call <8 x i8> @llvm.vp.udiv.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> %m, i32 %evl) 157 ret <8 x i8> %v 158} 159 160define <8 x i8> @vdivu_vx_v8i8_unmasked(<8 x i8> %va, i8 %b, i32 zeroext %evl) { 161; CHECK-LABEL: vdivu_vx_v8i8_unmasked: 162; CHECK: # %bb.0: 163; CHECK-NEXT: vsetvli zero, a1, e8, mf2, ta, ma 164; CHECK-NEXT: vdivu.vx v8, v8, a0 165; CHECK-NEXT: ret 166 %elt.head = insertelement <8 x i8> poison, i8 %b, i32 0 167 %vb = shufflevector <8 x i8> %elt.head, <8 x i8> poison, <8 x i32> zeroinitializer 168 %v = call <8 x i8> @llvm.vp.udiv.v8i8(<8 x i8> %va, <8 x i8> %vb, <8 x i1> splat (i1 true), i32 %evl) 169 ret <8 x i8> %v 170} 171 172declare <16 x i8> @llvm.vp.udiv.v16i8(<16 x i8>, <16 x i8>, <16 x i1>, i32) 173 174define <16 x i8> @vdivu_vv_v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 zeroext %evl) { 175; CHECK-LABEL: vdivu_vv_v16i8: 176; CHECK: # %bb.0: 177; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 178; CHECK-NEXT: vdivu.vv v8, v8, v9, v0.t 179; CHECK-NEXT: ret 180 %v = call <16 x i8> @llvm.vp.udiv.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> %m, i32 %evl) 181 ret <16 x i8> %v 182} 183 184define <16 x i8> @vdivu_vv_v16i8_unmasked(<16 x i8> %va, <16 x i8> %b, i32 zeroext %evl) { 185; CHECK-LABEL: vdivu_vv_v16i8_unmasked: 186; CHECK: # %bb.0: 187; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 188; CHECK-NEXT: vdivu.vv v8, v8, v9 189; CHECK-NEXT: ret 190 %v = call <16 x i8> @llvm.vp.udiv.v16i8(<16 x i8> %va, <16 x i8> %b, <16 x i1> splat (i1 true), i32 %evl) 191 ret <16 x i8> %v 192} 193 194define <16 x i8> @vdivu_vx_v16i8(<16 x i8> %va, i8 %b, <16 x i1> %m, i32 zeroext %evl) { 195; CHECK-LABEL: vdivu_vx_v16i8: 196; CHECK: # %bb.0: 197; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 198; CHECK-NEXT: vdivu.vx v8, v8, a0, v0.t 199; CHECK-NEXT: ret 200 %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0 201 %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer 202 %v = call <16 x i8> @llvm.vp.udiv.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> %m, i32 %evl) 203 ret <16 x i8> %v 204} 205 206define <16 x i8> @vdivu_vx_v16i8_unmasked(<16 x i8> %va, i8 %b, i32 zeroext %evl) { 207; CHECK-LABEL: vdivu_vx_v16i8_unmasked: 208; CHECK: # %bb.0: 209; CHECK-NEXT: vsetvli zero, a1, e8, m1, ta, ma 210; CHECK-NEXT: vdivu.vx v8, v8, a0 211; CHECK-NEXT: ret 212 %elt.head = insertelement <16 x i8> poison, i8 %b, i32 0 213 %vb = shufflevector <16 x i8> %elt.head, <16 x i8> poison, <16 x i32> zeroinitializer 214 %v = call <16 x i8> @llvm.vp.udiv.v16i8(<16 x i8> %va, <16 x i8> %vb, <16 x i1> splat (i1 true), i32 %evl) 215 ret <16 x i8> %v 216} 217 218declare <2 x i16> @llvm.vp.udiv.v2i16(<2 x i16>, <2 x i16>, <2 x i1>, i32) 219 220define <2 x i16> @vdivu_vv_v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 zeroext %evl) { 221; CHECK-LABEL: vdivu_vv_v2i16: 222; CHECK: # %bb.0: 223; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 224; CHECK-NEXT: vdivu.vv v8, v8, v9, v0.t 225; CHECK-NEXT: ret 226 %v = call <2 x i16> @llvm.vp.udiv.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> %m, i32 %evl) 227 ret <2 x i16> %v 228} 229 230define <2 x i16> @vdivu_vv_v2i16_unmasked(<2 x i16> %va, <2 x i16> %b, i32 zeroext %evl) { 231; CHECK-LABEL: vdivu_vv_v2i16_unmasked: 232; CHECK: # %bb.0: 233; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 234; CHECK-NEXT: vdivu.vv v8, v8, v9 235; CHECK-NEXT: ret 236 %v = call <2 x i16> @llvm.vp.udiv.v2i16(<2 x i16> %va, <2 x i16> %b, <2 x i1> splat (i1 true), i32 %evl) 237 ret <2 x i16> %v 238} 239 240define <2 x i16> @vdivu_vx_v2i16(<2 x i16> %va, i16 %b, <2 x i1> %m, i32 zeroext %evl) { 241; CHECK-LABEL: vdivu_vx_v2i16: 242; CHECK: # %bb.0: 243; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 244; CHECK-NEXT: vdivu.vx v8, v8, a0, v0.t 245; CHECK-NEXT: ret 246 %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0 247 %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer 248 %v = call <2 x i16> @llvm.vp.udiv.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> %m, i32 %evl) 249 ret <2 x i16> %v 250} 251 252define <2 x i16> @vdivu_vx_v2i16_unmasked(<2 x i16> %va, i16 %b, i32 zeroext %evl) { 253; CHECK-LABEL: vdivu_vx_v2i16_unmasked: 254; CHECK: # %bb.0: 255; CHECK-NEXT: vsetvli zero, a1, e16, mf4, ta, ma 256; CHECK-NEXT: vdivu.vx v8, v8, a0 257; CHECK-NEXT: ret 258 %elt.head = insertelement <2 x i16> poison, i16 %b, i32 0 259 %vb = shufflevector <2 x i16> %elt.head, <2 x i16> poison, <2 x i32> zeroinitializer 260 %v = call <2 x i16> @llvm.vp.udiv.v2i16(<2 x i16> %va, <2 x i16> %vb, <2 x i1> splat (i1 true), i32 %evl) 261 ret <2 x i16> %v 262} 263 264declare <4 x i16> @llvm.vp.udiv.v4i16(<4 x i16>, <4 x i16>, <4 x i1>, i32) 265 266define <4 x i16> @vdivu_vv_v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 zeroext %evl) { 267; CHECK-LABEL: vdivu_vv_v4i16: 268; CHECK: # %bb.0: 269; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 270; CHECK-NEXT: vdivu.vv v8, v8, v9, v0.t 271; CHECK-NEXT: ret 272 %v = call <4 x i16> @llvm.vp.udiv.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> %m, i32 %evl) 273 ret <4 x i16> %v 274} 275 276define <4 x i16> @vdivu_vv_v4i16_unmasked(<4 x i16> %va, <4 x i16> %b, i32 zeroext %evl) { 277; CHECK-LABEL: vdivu_vv_v4i16_unmasked: 278; CHECK: # %bb.0: 279; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 280; CHECK-NEXT: vdivu.vv v8, v8, v9 281; CHECK-NEXT: ret 282 %v = call <4 x i16> @llvm.vp.udiv.v4i16(<4 x i16> %va, <4 x i16> %b, <4 x i1> splat (i1 true), i32 %evl) 283 ret <4 x i16> %v 284} 285 286define <4 x i16> @vdivu_vx_v4i16(<4 x i16> %va, i16 %b, <4 x i1> %m, i32 zeroext %evl) { 287; CHECK-LABEL: vdivu_vx_v4i16: 288; CHECK: # %bb.0: 289; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 290; CHECK-NEXT: vdivu.vx v8, v8, a0, v0.t 291; CHECK-NEXT: ret 292 %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0 293 %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer 294 %v = call <4 x i16> @llvm.vp.udiv.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> %m, i32 %evl) 295 ret <4 x i16> %v 296} 297 298define <4 x i16> @vdivu_vx_v4i16_unmasked(<4 x i16> %va, i16 %b, i32 zeroext %evl) { 299; CHECK-LABEL: vdivu_vx_v4i16_unmasked: 300; CHECK: # %bb.0: 301; CHECK-NEXT: vsetvli zero, a1, e16, mf2, ta, ma 302; CHECK-NEXT: vdivu.vx v8, v8, a0 303; CHECK-NEXT: ret 304 %elt.head = insertelement <4 x i16> poison, i16 %b, i32 0 305 %vb = shufflevector <4 x i16> %elt.head, <4 x i16> poison, <4 x i32> zeroinitializer 306 %v = call <4 x i16> @llvm.vp.udiv.v4i16(<4 x i16> %va, <4 x i16> %vb, <4 x i1> splat (i1 true), i32 %evl) 307 ret <4 x i16> %v 308} 309 310declare <8 x i16> @llvm.vp.udiv.v8i16(<8 x i16>, <8 x i16>, <8 x i1>, i32) 311 312define <8 x i16> @vdivu_vv_v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 zeroext %evl) { 313; CHECK-LABEL: vdivu_vv_v8i16: 314; CHECK: # %bb.0: 315; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 316; CHECK-NEXT: vdivu.vv v8, v8, v9, v0.t 317; CHECK-NEXT: ret 318 %v = call <8 x i16> @llvm.vp.udiv.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> %m, i32 %evl) 319 ret <8 x i16> %v 320} 321 322define <8 x i16> @vdivu_vv_v8i16_unmasked(<8 x i16> %va, <8 x i16> %b, i32 zeroext %evl) { 323; CHECK-LABEL: vdivu_vv_v8i16_unmasked: 324; CHECK: # %bb.0: 325; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 326; CHECK-NEXT: vdivu.vv v8, v8, v9 327; CHECK-NEXT: ret 328 %v = call <8 x i16> @llvm.vp.udiv.v8i16(<8 x i16> %va, <8 x i16> %b, <8 x i1> splat (i1 true), i32 %evl) 329 ret <8 x i16> %v 330} 331 332define <8 x i16> @vdivu_vx_v8i16(<8 x i16> %va, i16 %b, <8 x i1> %m, i32 zeroext %evl) { 333; CHECK-LABEL: vdivu_vx_v8i16: 334; CHECK: # %bb.0: 335; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 336; CHECK-NEXT: vdivu.vx v8, v8, a0, v0.t 337; CHECK-NEXT: ret 338 %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0 339 %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer 340 %v = call <8 x i16> @llvm.vp.udiv.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> %m, i32 %evl) 341 ret <8 x i16> %v 342} 343 344define <8 x i16> @vdivu_vx_v8i16_unmasked(<8 x i16> %va, i16 %b, i32 zeroext %evl) { 345; CHECK-LABEL: vdivu_vx_v8i16_unmasked: 346; CHECK: # %bb.0: 347; CHECK-NEXT: vsetvli zero, a1, e16, m1, ta, ma 348; CHECK-NEXT: vdivu.vx v8, v8, a0 349; CHECK-NEXT: ret 350 %elt.head = insertelement <8 x i16> poison, i16 %b, i32 0 351 %vb = shufflevector <8 x i16> %elt.head, <8 x i16> poison, <8 x i32> zeroinitializer 352 %v = call <8 x i16> @llvm.vp.udiv.v8i16(<8 x i16> %va, <8 x i16> %vb, <8 x i1> splat (i1 true), i32 %evl) 353 ret <8 x i16> %v 354} 355 356declare <16 x i16> @llvm.vp.udiv.v16i16(<16 x i16>, <16 x i16>, <16 x i1>, i32) 357 358define <16 x i16> @vdivu_vv_v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 zeroext %evl) { 359; CHECK-LABEL: vdivu_vv_v16i16: 360; CHECK: # %bb.0: 361; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 362; CHECK-NEXT: vdivu.vv v8, v8, v10, v0.t 363; CHECK-NEXT: ret 364 %v = call <16 x i16> @llvm.vp.udiv.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> %m, i32 %evl) 365 ret <16 x i16> %v 366} 367 368define <16 x i16> @vdivu_vv_v16i16_unmasked(<16 x i16> %va, <16 x i16> %b, i32 zeroext %evl) { 369; CHECK-LABEL: vdivu_vv_v16i16_unmasked: 370; CHECK: # %bb.0: 371; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 372; CHECK-NEXT: vdivu.vv v8, v8, v10 373; CHECK-NEXT: ret 374 %v = call <16 x i16> @llvm.vp.udiv.v16i16(<16 x i16> %va, <16 x i16> %b, <16 x i1> splat (i1 true), i32 %evl) 375 ret <16 x i16> %v 376} 377 378define <16 x i16> @vdivu_vx_v16i16(<16 x i16> %va, i16 %b, <16 x i1> %m, i32 zeroext %evl) { 379; CHECK-LABEL: vdivu_vx_v16i16: 380; CHECK: # %bb.0: 381; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 382; CHECK-NEXT: vdivu.vx v8, v8, a0, v0.t 383; CHECK-NEXT: ret 384 %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0 385 %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer 386 %v = call <16 x i16> @llvm.vp.udiv.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> %m, i32 %evl) 387 ret <16 x i16> %v 388} 389 390define <16 x i16> @vdivu_vx_v16i16_unmasked(<16 x i16> %va, i16 %b, i32 zeroext %evl) { 391; CHECK-LABEL: vdivu_vx_v16i16_unmasked: 392; CHECK: # %bb.0: 393; CHECK-NEXT: vsetvli zero, a1, e16, m2, ta, ma 394; CHECK-NEXT: vdivu.vx v8, v8, a0 395; CHECK-NEXT: ret 396 %elt.head = insertelement <16 x i16> poison, i16 %b, i32 0 397 %vb = shufflevector <16 x i16> %elt.head, <16 x i16> poison, <16 x i32> zeroinitializer 398 %v = call <16 x i16> @llvm.vp.udiv.v16i16(<16 x i16> %va, <16 x i16> %vb, <16 x i1> splat (i1 true), i32 %evl) 399 ret <16 x i16> %v 400} 401 402declare <2 x i32> @llvm.vp.udiv.v2i32(<2 x i32>, <2 x i32>, <2 x i1>, i32) 403 404define <2 x i32> @vdivu_vv_v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 zeroext %evl) { 405; CHECK-LABEL: vdivu_vv_v2i32: 406; CHECK: # %bb.0: 407; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 408; CHECK-NEXT: vdivu.vv v8, v8, v9, v0.t 409; CHECK-NEXT: ret 410 %v = call <2 x i32> @llvm.vp.udiv.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> %m, i32 %evl) 411 ret <2 x i32> %v 412} 413 414define <2 x i32> @vdivu_vv_v2i32_unmasked(<2 x i32> %va, <2 x i32> %b, i32 zeroext %evl) { 415; CHECK-LABEL: vdivu_vv_v2i32_unmasked: 416; CHECK: # %bb.0: 417; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 418; CHECK-NEXT: vdivu.vv v8, v8, v9 419; CHECK-NEXT: ret 420 %v = call <2 x i32> @llvm.vp.udiv.v2i32(<2 x i32> %va, <2 x i32> %b, <2 x i1> splat (i1 true), i32 %evl) 421 ret <2 x i32> %v 422} 423 424define <2 x i32> @vdivu_vx_v2i32(<2 x i32> %va, i32 %b, <2 x i1> %m, i32 zeroext %evl) { 425; CHECK-LABEL: vdivu_vx_v2i32: 426; CHECK: # %bb.0: 427; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 428; CHECK-NEXT: vdivu.vx v8, v8, a0, v0.t 429; CHECK-NEXT: ret 430 %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0 431 %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer 432 %v = call <2 x i32> @llvm.vp.udiv.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> %m, i32 %evl) 433 ret <2 x i32> %v 434} 435 436define <2 x i32> @vdivu_vx_v2i32_unmasked(<2 x i32> %va, i32 %b, i32 zeroext %evl) { 437; CHECK-LABEL: vdivu_vx_v2i32_unmasked: 438; CHECK: # %bb.0: 439; CHECK-NEXT: vsetvli zero, a1, e32, mf2, ta, ma 440; CHECK-NEXT: vdivu.vx v8, v8, a0 441; CHECK-NEXT: ret 442 %elt.head = insertelement <2 x i32> poison, i32 %b, i32 0 443 %vb = shufflevector <2 x i32> %elt.head, <2 x i32> poison, <2 x i32> zeroinitializer 444 %v = call <2 x i32> @llvm.vp.udiv.v2i32(<2 x i32> %va, <2 x i32> %vb, <2 x i1> splat (i1 true), i32 %evl) 445 ret <2 x i32> %v 446} 447 448declare <4 x i32> @llvm.vp.udiv.v4i32(<4 x i32>, <4 x i32>, <4 x i1>, i32) 449 450define <4 x i32> @vdivu_vv_v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 zeroext %evl) { 451; CHECK-LABEL: vdivu_vv_v4i32: 452; CHECK: # %bb.0: 453; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 454; CHECK-NEXT: vdivu.vv v8, v8, v9, v0.t 455; CHECK-NEXT: ret 456 %v = call <4 x i32> @llvm.vp.udiv.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> %m, i32 %evl) 457 ret <4 x i32> %v 458} 459 460define <4 x i32> @vdivu_vv_v4i32_unmasked(<4 x i32> %va, <4 x i32> %b, i32 zeroext %evl) { 461; CHECK-LABEL: vdivu_vv_v4i32_unmasked: 462; CHECK: # %bb.0: 463; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 464; CHECK-NEXT: vdivu.vv v8, v8, v9 465; CHECK-NEXT: ret 466 %v = call <4 x i32> @llvm.vp.udiv.v4i32(<4 x i32> %va, <4 x i32> %b, <4 x i1> splat (i1 true), i32 %evl) 467 ret <4 x i32> %v 468} 469 470define <4 x i32> @vdivu_vx_v4i32(<4 x i32> %va, i32 %b, <4 x i1> %m, i32 zeroext %evl) { 471; CHECK-LABEL: vdivu_vx_v4i32: 472; CHECK: # %bb.0: 473; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 474; CHECK-NEXT: vdivu.vx v8, v8, a0, v0.t 475; CHECK-NEXT: ret 476 %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0 477 %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer 478 %v = call <4 x i32> @llvm.vp.udiv.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> %m, i32 %evl) 479 ret <4 x i32> %v 480} 481 482define <4 x i32> @vdivu_vx_v4i32_unmasked(<4 x i32> %va, i32 %b, i32 zeroext %evl) { 483; CHECK-LABEL: vdivu_vx_v4i32_unmasked: 484; CHECK: # %bb.0: 485; CHECK-NEXT: vsetvli zero, a1, e32, m1, ta, ma 486; CHECK-NEXT: vdivu.vx v8, v8, a0 487; CHECK-NEXT: ret 488 %elt.head = insertelement <4 x i32> poison, i32 %b, i32 0 489 %vb = shufflevector <4 x i32> %elt.head, <4 x i32> poison, <4 x i32> zeroinitializer 490 %v = call <4 x i32> @llvm.vp.udiv.v4i32(<4 x i32> %va, <4 x i32> %vb, <4 x i1> splat (i1 true), i32 %evl) 491 ret <4 x i32> %v 492} 493 494declare <8 x i32> @llvm.vp.udiv.v8i32(<8 x i32>, <8 x i32>, <8 x i1>, i32) 495 496define <8 x i32> @vdivu_vv_v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 zeroext %evl) { 497; CHECK-LABEL: vdivu_vv_v8i32: 498; CHECK: # %bb.0: 499; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 500; CHECK-NEXT: vdivu.vv v8, v8, v10, v0.t 501; CHECK-NEXT: ret 502 %v = call <8 x i32> @llvm.vp.udiv.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> %m, i32 %evl) 503 ret <8 x i32> %v 504} 505 506define <8 x i32> @vdivu_vv_v8i32_unmasked(<8 x i32> %va, <8 x i32> %b, i32 zeroext %evl) { 507; CHECK-LABEL: vdivu_vv_v8i32_unmasked: 508; CHECK: # %bb.0: 509; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 510; CHECK-NEXT: vdivu.vv v8, v8, v10 511; CHECK-NEXT: ret 512 %v = call <8 x i32> @llvm.vp.udiv.v8i32(<8 x i32> %va, <8 x i32> %b, <8 x i1> splat (i1 true), i32 %evl) 513 ret <8 x i32> %v 514} 515 516define <8 x i32> @vdivu_vx_v8i32(<8 x i32> %va, i32 %b, <8 x i1> %m, i32 zeroext %evl) { 517; CHECK-LABEL: vdivu_vx_v8i32: 518; CHECK: # %bb.0: 519; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 520; CHECK-NEXT: vdivu.vx v8, v8, a0, v0.t 521; CHECK-NEXT: ret 522 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 523 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 524 %v = call <8 x i32> @llvm.vp.udiv.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> %m, i32 %evl) 525 ret <8 x i32> %v 526} 527 528define <8 x i32> @vdivu_vx_v8i32_unmasked(<8 x i32> %va, i32 %b, i32 zeroext %evl) { 529; CHECK-LABEL: vdivu_vx_v8i32_unmasked: 530; CHECK: # %bb.0: 531; CHECK-NEXT: vsetvli zero, a1, e32, m2, ta, ma 532; CHECK-NEXT: vdivu.vx v8, v8, a0 533; CHECK-NEXT: ret 534 %elt.head = insertelement <8 x i32> poison, i32 %b, i32 0 535 %vb = shufflevector <8 x i32> %elt.head, <8 x i32> poison, <8 x i32> zeroinitializer 536 %v = call <8 x i32> @llvm.vp.udiv.v8i32(<8 x i32> %va, <8 x i32> %vb, <8 x i1> splat (i1 true), i32 %evl) 537 ret <8 x i32> %v 538} 539 540declare <16 x i32> @llvm.vp.udiv.v16i32(<16 x i32>, <16 x i32>, <16 x i1>, i32) 541 542define <16 x i32> @vdivu_vv_v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 zeroext %evl) { 543; CHECK-LABEL: vdivu_vv_v16i32: 544; CHECK: # %bb.0: 545; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 546; CHECK-NEXT: vdivu.vv v8, v8, v12, v0.t 547; CHECK-NEXT: ret 548 %v = call <16 x i32> @llvm.vp.udiv.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> %m, i32 %evl) 549 ret <16 x i32> %v 550} 551 552define <16 x i32> @vdivu_vv_v16i32_unmasked(<16 x i32> %va, <16 x i32> %b, i32 zeroext %evl) { 553; CHECK-LABEL: vdivu_vv_v16i32_unmasked: 554; CHECK: # %bb.0: 555; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 556; CHECK-NEXT: vdivu.vv v8, v8, v12 557; CHECK-NEXT: ret 558 %v = call <16 x i32> @llvm.vp.udiv.v16i32(<16 x i32> %va, <16 x i32> %b, <16 x i1> splat (i1 true), i32 %evl) 559 ret <16 x i32> %v 560} 561 562define <16 x i32> @vdivu_vx_v16i32(<16 x i32> %va, i32 %b, <16 x i1> %m, i32 zeroext %evl) { 563; CHECK-LABEL: vdivu_vx_v16i32: 564; CHECK: # %bb.0: 565; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma 566; CHECK-NEXT: vdivu.vx v8, v8, a0, v0.t 567; CHECK-NEXT: ret 568 %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0 569 %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer 570 %v = call <16 x i32> @llvm.vp.udiv.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> %m, i32 %evl) 571 ret <16 x i32> %v 572} 573 574define <16 x i32> @vdivu_vx_v16i32_unmasked(<16 x i32> %va, i32 %b, i32 zeroext %evl) { 575; CHECK-LABEL: vdivu_vx_v16i32_unmasked: 576; CHECK: # %bb.0: 577; CHECK-NEXT: vsetvli zero, a1, e32, m4, ta, ma 578; CHECK-NEXT: vdivu.vx v8, v8, a0 579; CHECK-NEXT: ret 580 %elt.head = insertelement <16 x i32> poison, i32 %b, i32 0 581 %vb = shufflevector <16 x i32> %elt.head, <16 x i32> poison, <16 x i32> zeroinitializer 582 %v = call <16 x i32> @llvm.vp.udiv.v16i32(<16 x i32> %va, <16 x i32> %vb, <16 x i1> splat (i1 true), i32 %evl) 583 ret <16 x i32> %v 584} 585 586declare <2 x i64> @llvm.vp.udiv.v2i64(<2 x i64>, <2 x i64>, <2 x i1>, i32) 587 588define <2 x i64> @vdivu_vv_v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 zeroext %evl) { 589; CHECK-LABEL: vdivu_vv_v2i64: 590; CHECK: # %bb.0: 591; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 592; CHECK-NEXT: vdivu.vv v8, v8, v9, v0.t 593; CHECK-NEXT: ret 594 %v = call <2 x i64> @llvm.vp.udiv.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> %m, i32 %evl) 595 ret <2 x i64> %v 596} 597 598define <2 x i64> @vdivu_vv_v2i64_unmasked(<2 x i64> %va, <2 x i64> %b, i32 zeroext %evl) { 599; CHECK-LABEL: vdivu_vv_v2i64_unmasked: 600; CHECK: # %bb.0: 601; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 602; CHECK-NEXT: vdivu.vv v8, v8, v9 603; CHECK-NEXT: ret 604 %v = call <2 x i64> @llvm.vp.udiv.v2i64(<2 x i64> %va, <2 x i64> %b, <2 x i1> splat (i1 true), i32 %evl) 605 ret <2 x i64> %v 606} 607 608define <2 x i64> @vdivu_vx_v2i64(<2 x i64> %va, i64 %b, <2 x i1> %m, i32 zeroext %evl) { 609; RV32-LABEL: vdivu_vx_v2i64: 610; RV32: # %bb.0: 611; RV32-NEXT: addi sp, sp, -16 612; RV32-NEXT: .cfi_def_cfa_offset 16 613; RV32-NEXT: sw a0, 8(sp) 614; RV32-NEXT: sw a1, 12(sp) 615; RV32-NEXT: addi a0, sp, 8 616; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma 617; RV32-NEXT: vlse64.v v9, (a0), zero 618; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma 619; RV32-NEXT: vdivu.vv v8, v8, v9, v0.t 620; RV32-NEXT: addi sp, sp, 16 621; RV32-NEXT: .cfi_def_cfa_offset 0 622; RV32-NEXT: ret 623; 624; RV64-LABEL: vdivu_vx_v2i64: 625; RV64: # %bb.0: 626; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma 627; RV64-NEXT: vdivu.vx v8, v8, a0, v0.t 628; RV64-NEXT: ret 629 %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0 630 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer 631 %v = call <2 x i64> @llvm.vp.udiv.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> %m, i32 %evl) 632 ret <2 x i64> %v 633} 634 635define <2 x i64> @vdivu_vx_v2i64_unmasked(<2 x i64> %va, i64 %b, i32 zeroext %evl) { 636; RV32-LABEL: vdivu_vx_v2i64_unmasked: 637; RV32: # %bb.0: 638; RV32-NEXT: addi sp, sp, -16 639; RV32-NEXT: .cfi_def_cfa_offset 16 640; RV32-NEXT: sw a0, 8(sp) 641; RV32-NEXT: sw a1, 12(sp) 642; RV32-NEXT: addi a0, sp, 8 643; RV32-NEXT: vsetivli zero, 2, e64, m1, ta, ma 644; RV32-NEXT: vlse64.v v9, (a0), zero 645; RV32-NEXT: vsetvli zero, a2, e64, m1, ta, ma 646; RV32-NEXT: vdivu.vv v8, v8, v9 647; RV32-NEXT: addi sp, sp, 16 648; RV32-NEXT: .cfi_def_cfa_offset 0 649; RV32-NEXT: ret 650; 651; RV64-LABEL: vdivu_vx_v2i64_unmasked: 652; RV64: # %bb.0: 653; RV64-NEXT: vsetvli zero, a1, e64, m1, ta, ma 654; RV64-NEXT: vdivu.vx v8, v8, a0 655; RV64-NEXT: ret 656 %elt.head = insertelement <2 x i64> poison, i64 %b, i32 0 657 %vb = shufflevector <2 x i64> %elt.head, <2 x i64> poison, <2 x i32> zeroinitializer 658 %v = call <2 x i64> @llvm.vp.udiv.v2i64(<2 x i64> %va, <2 x i64> %vb, <2 x i1> splat (i1 true), i32 %evl) 659 ret <2 x i64> %v 660} 661 662declare <4 x i64> @llvm.vp.udiv.v4i64(<4 x i64>, <4 x i64>, <4 x i1>, i32) 663 664define <4 x i64> @vdivu_vv_v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 zeroext %evl) { 665; CHECK-LABEL: vdivu_vv_v4i64: 666; CHECK: # %bb.0: 667; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 668; CHECK-NEXT: vdivu.vv v8, v8, v10, v0.t 669; CHECK-NEXT: ret 670 %v = call <4 x i64> @llvm.vp.udiv.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> %m, i32 %evl) 671 ret <4 x i64> %v 672} 673 674define <4 x i64> @vdivu_vv_v4i64_unmasked(<4 x i64> %va, <4 x i64> %b, i32 zeroext %evl) { 675; CHECK-LABEL: vdivu_vv_v4i64_unmasked: 676; CHECK: # %bb.0: 677; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 678; CHECK-NEXT: vdivu.vv v8, v8, v10 679; CHECK-NEXT: ret 680 %v = call <4 x i64> @llvm.vp.udiv.v4i64(<4 x i64> %va, <4 x i64> %b, <4 x i1> splat (i1 true), i32 %evl) 681 ret <4 x i64> %v 682} 683 684define <4 x i64> @vdivu_vx_v4i64(<4 x i64> %va, i64 %b, <4 x i1> %m, i32 zeroext %evl) { 685; RV32-LABEL: vdivu_vx_v4i64: 686; RV32: # %bb.0: 687; RV32-NEXT: addi sp, sp, -16 688; RV32-NEXT: .cfi_def_cfa_offset 16 689; RV32-NEXT: sw a0, 8(sp) 690; RV32-NEXT: sw a1, 12(sp) 691; RV32-NEXT: addi a0, sp, 8 692; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma 693; RV32-NEXT: vlse64.v v10, (a0), zero 694; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma 695; RV32-NEXT: vdivu.vv v8, v8, v10, v0.t 696; RV32-NEXT: addi sp, sp, 16 697; RV32-NEXT: .cfi_def_cfa_offset 0 698; RV32-NEXT: ret 699; 700; RV64-LABEL: vdivu_vx_v4i64: 701; RV64: # %bb.0: 702; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma 703; RV64-NEXT: vdivu.vx v8, v8, a0, v0.t 704; RV64-NEXT: ret 705 %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0 706 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer 707 %v = call <4 x i64> @llvm.vp.udiv.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> %m, i32 %evl) 708 ret <4 x i64> %v 709} 710 711define <4 x i64> @vdivu_vx_v4i64_unmasked(<4 x i64> %va, i64 %b, i32 zeroext %evl) { 712; RV32-LABEL: vdivu_vx_v4i64_unmasked: 713; RV32: # %bb.0: 714; RV32-NEXT: addi sp, sp, -16 715; RV32-NEXT: .cfi_def_cfa_offset 16 716; RV32-NEXT: sw a0, 8(sp) 717; RV32-NEXT: sw a1, 12(sp) 718; RV32-NEXT: addi a0, sp, 8 719; RV32-NEXT: vsetivli zero, 4, e64, m2, ta, ma 720; RV32-NEXT: vlse64.v v10, (a0), zero 721; RV32-NEXT: vsetvli zero, a2, e64, m2, ta, ma 722; RV32-NEXT: vdivu.vv v8, v8, v10 723; RV32-NEXT: addi sp, sp, 16 724; RV32-NEXT: .cfi_def_cfa_offset 0 725; RV32-NEXT: ret 726; 727; RV64-LABEL: vdivu_vx_v4i64_unmasked: 728; RV64: # %bb.0: 729; RV64-NEXT: vsetvli zero, a1, e64, m2, ta, ma 730; RV64-NEXT: vdivu.vx v8, v8, a0 731; RV64-NEXT: ret 732 %elt.head = insertelement <4 x i64> poison, i64 %b, i32 0 733 %vb = shufflevector <4 x i64> %elt.head, <4 x i64> poison, <4 x i32> zeroinitializer 734 %v = call <4 x i64> @llvm.vp.udiv.v4i64(<4 x i64> %va, <4 x i64> %vb, <4 x i1> splat (i1 true), i32 %evl) 735 ret <4 x i64> %v 736} 737 738declare <8 x i64> @llvm.vp.udiv.v8i64(<8 x i64>, <8 x i64>, <8 x i1>, i32) 739 740define <8 x i64> @vdivu_vv_v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 zeroext %evl) { 741; CHECK-LABEL: vdivu_vv_v8i64: 742; CHECK: # %bb.0: 743; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 744; CHECK-NEXT: vdivu.vv v8, v8, v12, v0.t 745; CHECK-NEXT: ret 746 %v = call <8 x i64> @llvm.vp.udiv.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> %m, i32 %evl) 747 ret <8 x i64> %v 748} 749 750define <8 x i64> @vdivu_vv_v8i64_unmasked(<8 x i64> %va, <8 x i64> %b, i32 zeroext %evl) { 751; CHECK-LABEL: vdivu_vv_v8i64_unmasked: 752; CHECK: # %bb.0: 753; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 754; CHECK-NEXT: vdivu.vv v8, v8, v12 755; CHECK-NEXT: ret 756 %v = call <8 x i64> @llvm.vp.udiv.v8i64(<8 x i64> %va, <8 x i64> %b, <8 x i1> splat (i1 true), i32 %evl) 757 ret <8 x i64> %v 758} 759 760define <8 x i64> @vdivu_vx_v8i64(<8 x i64> %va, i64 %b, <8 x i1> %m, i32 zeroext %evl) { 761; RV32-LABEL: vdivu_vx_v8i64: 762; RV32: # %bb.0: 763; RV32-NEXT: addi sp, sp, -16 764; RV32-NEXT: .cfi_def_cfa_offset 16 765; RV32-NEXT: sw a0, 8(sp) 766; RV32-NEXT: sw a1, 12(sp) 767; RV32-NEXT: addi a0, sp, 8 768; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 769; RV32-NEXT: vlse64.v v12, (a0), zero 770; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 771; RV32-NEXT: vdivu.vv v8, v8, v12, v0.t 772; RV32-NEXT: addi sp, sp, 16 773; RV32-NEXT: .cfi_def_cfa_offset 0 774; RV32-NEXT: ret 775; 776; RV64-LABEL: vdivu_vx_v8i64: 777; RV64: # %bb.0: 778; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 779; RV64-NEXT: vdivu.vx v8, v8, a0, v0.t 780; RV64-NEXT: ret 781 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 782 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 783 %v = call <8 x i64> @llvm.vp.udiv.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> %m, i32 %evl) 784 ret <8 x i64> %v 785} 786 787define <8 x i64> @vdivu_vx_v8i64_unmasked(<8 x i64> %va, i64 %b, i32 zeroext %evl) { 788; RV32-LABEL: vdivu_vx_v8i64_unmasked: 789; RV32: # %bb.0: 790; RV32-NEXT: addi sp, sp, -16 791; RV32-NEXT: .cfi_def_cfa_offset 16 792; RV32-NEXT: sw a0, 8(sp) 793; RV32-NEXT: sw a1, 12(sp) 794; RV32-NEXT: addi a0, sp, 8 795; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma 796; RV32-NEXT: vlse64.v v12, (a0), zero 797; RV32-NEXT: vsetvli zero, a2, e64, m4, ta, ma 798; RV32-NEXT: vdivu.vv v8, v8, v12 799; RV32-NEXT: addi sp, sp, 16 800; RV32-NEXT: .cfi_def_cfa_offset 0 801; RV32-NEXT: ret 802; 803; RV64-LABEL: vdivu_vx_v8i64_unmasked: 804; RV64: # %bb.0: 805; RV64-NEXT: vsetvli zero, a1, e64, m4, ta, ma 806; RV64-NEXT: vdivu.vx v8, v8, a0 807; RV64-NEXT: ret 808 %elt.head = insertelement <8 x i64> poison, i64 %b, i32 0 809 %vb = shufflevector <8 x i64> %elt.head, <8 x i64> poison, <8 x i32> zeroinitializer 810 %v = call <8 x i64> @llvm.vp.udiv.v8i64(<8 x i64> %va, <8 x i64> %vb, <8 x i1> splat (i1 true), i32 %evl) 811 ret <8 x i64> %v 812} 813 814declare <16 x i64> @llvm.vp.udiv.v16i64(<16 x i64>, <16 x i64>, <16 x i1>, i32) 815 816define <16 x i64> @vdivu_vv_v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 zeroext %evl) { 817; CHECK-LABEL: vdivu_vv_v16i64: 818; CHECK: # %bb.0: 819; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 820; CHECK-NEXT: vdivu.vv v8, v8, v16, v0.t 821; CHECK-NEXT: ret 822 %v = call <16 x i64> @llvm.vp.udiv.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> %m, i32 %evl) 823 ret <16 x i64> %v 824} 825 826define <16 x i64> @vdivu_vv_v16i64_unmasked(<16 x i64> %va, <16 x i64> %b, i32 zeroext %evl) { 827; CHECK-LABEL: vdivu_vv_v16i64_unmasked: 828; CHECK: # %bb.0: 829; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 830; CHECK-NEXT: vdivu.vv v8, v8, v16 831; CHECK-NEXT: ret 832 %v = call <16 x i64> @llvm.vp.udiv.v16i64(<16 x i64> %va, <16 x i64> %b, <16 x i1> splat (i1 true), i32 %evl) 833 ret <16 x i64> %v 834} 835 836define <16 x i64> @vdivu_vx_v16i64(<16 x i64> %va, i64 %b, <16 x i1> %m, i32 zeroext %evl) { 837; RV32-LABEL: vdivu_vx_v16i64: 838; RV32: # %bb.0: 839; RV32-NEXT: addi sp, sp, -16 840; RV32-NEXT: .cfi_def_cfa_offset 16 841; RV32-NEXT: sw a0, 8(sp) 842; RV32-NEXT: sw a1, 12(sp) 843; RV32-NEXT: addi a0, sp, 8 844; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma 845; RV32-NEXT: vlse64.v v16, (a0), zero 846; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma 847; RV32-NEXT: vdivu.vv v8, v8, v16, v0.t 848; RV32-NEXT: addi sp, sp, 16 849; RV32-NEXT: .cfi_def_cfa_offset 0 850; RV32-NEXT: ret 851; 852; RV64-LABEL: vdivu_vx_v16i64: 853; RV64: # %bb.0: 854; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma 855; RV64-NEXT: vdivu.vx v8, v8, a0, v0.t 856; RV64-NEXT: ret 857 %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0 858 %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer 859 %v = call <16 x i64> @llvm.vp.udiv.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> %m, i32 %evl) 860 ret <16 x i64> %v 861} 862 863define <16 x i64> @vdivu_vx_v16i64_unmasked(<16 x i64> %va, i64 %b, i32 zeroext %evl) { 864; RV32-LABEL: vdivu_vx_v16i64_unmasked: 865; RV32: # %bb.0: 866; RV32-NEXT: addi sp, sp, -16 867; RV32-NEXT: .cfi_def_cfa_offset 16 868; RV32-NEXT: sw a0, 8(sp) 869; RV32-NEXT: sw a1, 12(sp) 870; RV32-NEXT: addi a0, sp, 8 871; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma 872; RV32-NEXT: vlse64.v v16, (a0), zero 873; RV32-NEXT: vsetvli zero, a2, e64, m8, ta, ma 874; RV32-NEXT: vdivu.vv v8, v8, v16 875; RV32-NEXT: addi sp, sp, 16 876; RV32-NEXT: .cfi_def_cfa_offset 0 877; RV32-NEXT: ret 878; 879; RV64-LABEL: vdivu_vx_v16i64_unmasked: 880; RV64: # %bb.0: 881; RV64-NEXT: vsetvli zero, a1, e64, m8, ta, ma 882; RV64-NEXT: vdivu.vx v8, v8, a0 883; RV64-NEXT: ret 884 %elt.head = insertelement <16 x i64> poison, i64 %b, i32 0 885 %vb = shufflevector <16 x i64> %elt.head, <16 x i64> poison, <16 x i32> zeroinitializer 886 %v = call <16 x i64> @llvm.vp.udiv.v16i64(<16 x i64> %va, <16 x i64> %vb, <16 x i1> splat (i1 true), i32 %evl) 887 ret <16 x i64> %v 888} 889 890 891define <8 x i8> @vdivu_vv_v8i8_unmasked_avl3(<8 x i8> %va, <8 x i8> %b) { 892; CHECK-LABEL: vdivu_vv_v8i8_unmasked_avl3: 893; CHECK: # %bb.0: 894; CHECK-NEXT: vsetivli zero, 3, e8, mf2, ta, ma 895; CHECK-NEXT: vdivu.vv v8, v8, v9 896; CHECK-NEXT: ret 897 %v = call <8 x i8> @llvm.vp.udiv.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> splat (i1 true), i32 3) 898 ret <8 x i8> %v 899} 900 901define <8 x i8> @vdivu_vv_v8i8_unmasked_avl7(<8 x i8> %va, <8 x i8> %b) { 902; CHECK-LABEL: vdivu_vv_v8i8_unmasked_avl7: 903; CHECK: # %bb.0: 904; CHECK-NEXT: vsetivli zero, 7, e8, mf2, ta, ma 905; CHECK-NEXT: vdivu.vv v8, v8, v9 906; CHECK-NEXT: ret 907 %v = call <8 x i8> @llvm.vp.udiv.v8i8(<8 x i8> %va, <8 x i8> %b, <8 x i1> splat (i1 true), i32 7) 908 ret <8 x i8> %v 909} 910 911declare <3 x i8> @llvm.vp.udiv.v3i8(<3 x i8>, <3 x i8>, <3 x i1>, i32) 912 913define <3 x i8> @vdivu_vv_v3i8_unmasked(<3 x i8> %va, <3 x i8> %b, i32 zeroext %evl) { 914; CHECK-LABEL: vdivu_vv_v3i8_unmasked: 915; CHECK: # %bb.0: 916; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 917; CHECK-NEXT: vdivu.vv v8, v8, v9 918; CHECK-NEXT: ret 919 %v = call <3 x i8> @llvm.vp.udiv.v3i8(<3 x i8> %va, <3 x i8> %b, <3 x i1> splat (i1 true), i32 %evl) 920 ret <3 x i8> %v 921} 922 923define <3 x i8> @vdivu_vv_v3i8_unmasked_avl3(<3 x i8> %va, <3 x i8> %b) { 924; CHECK-LABEL: vdivu_vv_v3i8_unmasked_avl3: 925; CHECK: # %bb.0: 926; CHECK-NEXT: vsetivli zero, 3, e8, mf4, ta, ma 927; CHECK-NEXT: vdivu.vv v8, v8, v9 928; CHECK-NEXT: ret 929 %v = call <3 x i8> @llvm.vp.udiv.v3i8(<3 x i8> %va, <3 x i8> %b, <3 x i1> splat (i1 true), i32 3) 930 ret <3 x i8> %v 931} 932 933declare <7 x i8> @llvm.vp.udiv.v7i8(<7 x i8>, <7 x i8>, <7 x i1>, i32) 934 935define <7 x i8> @vdivu_vv_v7i8_unmasked(<7 x i8> %va, <7 x i8> %b, i32 zeroext %evl) { 936; CHECK-LABEL: vdivu_vv_v7i8_unmasked: 937; CHECK: # %bb.0: 938; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 939; CHECK-NEXT: vdivu.vv v8, v8, v9 940; CHECK-NEXT: ret 941 %v = call <7 x i8> @llvm.vp.udiv.v7i8(<7 x i8> %va, <7 x i8> %b, <7 x i1> splat (i1 true), i32 %evl) 942 ret <7 x i8> %v 943} 944 945define <7 x i8> @vdivu_vv_v7i8_unmasked_avl7(<7 x i8> %va, <7 x i8> %b) { 946; CHECK-LABEL: vdivu_vv_v7i8_unmasked_avl7: 947; CHECK: # %bb.0: 948; CHECK-NEXT: vsetivli zero, 7, e8, mf2, ta, ma 949; CHECK-NEXT: vdivu.vv v8, v8, v9 950; CHECK-NEXT: ret 951 %v = call <7 x i8> @llvm.vp.udiv.v7i8(<7 x i8> %va, <7 x i8> %b, <7 x i1> splat (i1 true), i32 7) 952 ret <7 x i8> %v 953} 954