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