1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfh,+v -target-abi=ilp32d \ 3; RUN: -verify-machineinstrs < %s | FileCheck %s 4; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfh,+v -target-abi=lp64d \ 5; RUN: -verify-machineinstrs < %s | FileCheck %s 6 7declare <vscale x 1 x half> @llvm.vp.fdiv.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, <vscale x 1 x i1>, i32) 8 9define <vscale x 1 x half> @vfrdiv_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 10; CHECK-LABEL: vfrdiv_vf_nxv1f16: 11; CHECK: # %bb.0: 12; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 13; CHECK-NEXT: vfrdiv.vf v8, v8, fa0, v0.t 14; CHECK-NEXT: ret 15 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 16 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 17 %v = call <vscale x 1 x half> @llvm.vp.fdiv.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x i1> %m, i32 %evl) 18 ret <vscale x 1 x half> %v 19} 20 21define <vscale x 1 x half> @vfrdiv_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, i32 zeroext %evl) { 22; CHECK-LABEL: vfrdiv_vf_nxv1f16_unmasked: 23; CHECK: # %bb.0: 24; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 25; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 26; CHECK-NEXT: ret 27 %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0 28 %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer 29 %v = call <vscale x 1 x half> @llvm.vp.fdiv.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl) 30 ret <vscale x 1 x half> %v 31} 32 33declare <vscale x 2 x half> @llvm.vp.fdiv.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x i1>, i32) 34 35define <vscale x 2 x half> @vfrdiv_vf_nxv2f16(<vscale x 2 x half> %va, half %b, <vscale x 2 x i1> %m, i32 zeroext %evl) { 36; CHECK-LABEL: vfrdiv_vf_nxv2f16: 37; CHECK: # %bb.0: 38; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 39; CHECK-NEXT: vfrdiv.vf v8, v8, fa0, v0.t 40; CHECK-NEXT: ret 41 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 42 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 43 %v = call <vscale x 2 x half> @llvm.vp.fdiv.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl) 44 ret <vscale x 2 x half> %v 45} 46 47define <vscale x 2 x half> @vfrdiv_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, i32 zeroext %evl) { 48; CHECK-LABEL: vfrdiv_vf_nxv2f16_unmasked: 49; CHECK: # %bb.0: 50; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 51; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 52; CHECK-NEXT: ret 53 %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0 54 %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer 55 %v = call <vscale x 2 x half> @llvm.vp.fdiv.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 56 ret <vscale x 2 x half> %v 57} 58 59declare <vscale x 4 x half> @llvm.vp.fdiv.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, <vscale x 4 x i1>, i32) 60 61define <vscale x 4 x half> @vfrdiv_vf_nxv4f16(<vscale x 4 x half> %va, half %b, <vscale x 4 x i1> %m, i32 zeroext %evl) { 62; CHECK-LABEL: vfrdiv_vf_nxv4f16: 63; CHECK: # %bb.0: 64; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 65; CHECK-NEXT: vfrdiv.vf v8, v8, fa0, v0.t 66; CHECK-NEXT: ret 67 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 68 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 69 %v = call <vscale x 4 x half> @llvm.vp.fdiv.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x i1> %m, i32 %evl) 70 ret <vscale x 4 x half> %v 71} 72 73define <vscale x 4 x half> @vfrdiv_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, i32 zeroext %evl) { 74; CHECK-LABEL: vfrdiv_vf_nxv4f16_unmasked: 75; CHECK: # %bb.0: 76; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 77; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 78; CHECK-NEXT: ret 79 %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0 80 %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer 81 %v = call <vscale x 4 x half> @llvm.vp.fdiv.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl) 82 ret <vscale x 4 x half> %v 83} 84 85declare <vscale x 8 x half> @llvm.vp.fdiv.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x i1>, i32) 86 87define <vscale x 8 x half> @vfrdiv_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 88; CHECK-LABEL: vfrdiv_vf_nxv8f16: 89; CHECK: # %bb.0: 90; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 91; CHECK-NEXT: vfrdiv.vf v8, v8, fa0, v0.t 92; CHECK-NEXT: ret 93 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 94 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 95 %v = call <vscale x 8 x half> @llvm.vp.fdiv.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x i1> %m, i32 %evl) 96 ret <vscale x 8 x half> %v 97} 98 99define <vscale x 8 x half> @vfrdiv_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, i32 zeroext %evl) { 100; CHECK-LABEL: vfrdiv_vf_nxv8f16_unmasked: 101; CHECK: # %bb.0: 102; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 103; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 104; CHECK-NEXT: ret 105 %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0 106 %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer 107 %v = call <vscale x 8 x half> @llvm.vp.fdiv.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl) 108 ret <vscale x 8 x half> %v 109} 110 111declare <vscale x 16 x half> @llvm.vp.fdiv.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, <vscale x 16 x i1>, i32) 112 113define <vscale x 16 x half> @vfrdiv_vf_nxv16f16(<vscale x 16 x half> %va, half %b, <vscale x 16 x i1> %m, i32 zeroext %evl) { 114; CHECK-LABEL: vfrdiv_vf_nxv16f16: 115; CHECK: # %bb.0: 116; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 117; CHECK-NEXT: vfrdiv.vf v8, v8, fa0, v0.t 118; CHECK-NEXT: ret 119 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 120 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 121 %v = call <vscale x 16 x half> @llvm.vp.fdiv.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x i1> %m, i32 %evl) 122 ret <vscale x 16 x half> %v 123} 124 125define <vscale x 16 x half> @vfrdiv_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, i32 zeroext %evl) { 126; CHECK-LABEL: vfrdiv_vf_nxv16f16_unmasked: 127; CHECK: # %bb.0: 128; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 129; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 130; CHECK-NEXT: ret 131 %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0 132 %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer 133 %v = call <vscale x 16 x half> @llvm.vp.fdiv.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl) 134 ret <vscale x 16 x half> %v 135} 136 137declare <vscale x 32 x half> @llvm.vp.fdiv.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, <vscale x 32 x i1>, i32) 138 139define <vscale x 32 x half> @vfrdiv_vf_nxv32f16(<vscale x 32 x half> %va, half %b, <vscale x 32 x i1> %m, i32 zeroext %evl) { 140; CHECK-LABEL: vfrdiv_vf_nxv32f16: 141; CHECK: # %bb.0: 142; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 143; CHECK-NEXT: vfrdiv.vf v8, v8, fa0, v0.t 144; CHECK-NEXT: ret 145 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 146 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 147 %v = call <vscale x 32 x half> @llvm.vp.fdiv.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x i1> %m, i32 %evl) 148 ret <vscale x 32 x half> %v 149} 150 151define <vscale x 32 x half> @vfrdiv_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, i32 zeroext %evl) { 152; CHECK-LABEL: vfrdiv_vf_nxv32f16_unmasked: 153; CHECK: # %bb.0: 154; CHECK-NEXT: vsetvli zero, a0, e16, m8, ta, ma 155; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 156; CHECK-NEXT: ret 157 %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0 158 %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer 159 %v = call <vscale x 32 x half> @llvm.vp.fdiv.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl) 160 ret <vscale x 32 x half> %v 161} 162 163declare <vscale x 1 x float> @llvm.vp.fdiv.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x i1>, i32) 164 165define <vscale x 1 x float> @vfrdiv_vf_nxv1f32(<vscale x 1 x float> %va, float %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 166; CHECK-LABEL: vfrdiv_vf_nxv1f32: 167; CHECK: # %bb.0: 168; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 169; CHECK-NEXT: vfrdiv.vf v8, v8, fa0, v0.t 170; CHECK-NEXT: ret 171 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 172 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 173 %v = call <vscale x 1 x float> @llvm.vp.fdiv.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x i1> %m, i32 %evl) 174 ret <vscale x 1 x float> %v 175} 176 177define <vscale x 1 x float> @vfrdiv_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, i32 zeroext %evl) { 178; CHECK-LABEL: vfrdiv_vf_nxv1f32_unmasked: 179; CHECK: # %bb.0: 180; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 181; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 182; CHECK-NEXT: ret 183 %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0 184 %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer 185 %v = call <vscale x 1 x float> @llvm.vp.fdiv.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl) 186 ret <vscale x 1 x float> %v 187} 188 189declare <vscale x 2 x float> @llvm.vp.fdiv.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x i1>, i32) 190 191define <vscale x 2 x float> @vfrdiv_vf_nxv2f32(<vscale x 2 x float> %va, float %b, <vscale x 2 x i1> %m, i32 zeroext %evl) { 192; CHECK-LABEL: vfrdiv_vf_nxv2f32: 193; CHECK: # %bb.0: 194; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 195; CHECK-NEXT: vfrdiv.vf v8, v8, fa0, v0.t 196; CHECK-NEXT: ret 197 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 198 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 199 %v = call <vscale x 2 x float> @llvm.vp.fdiv.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl) 200 ret <vscale x 2 x float> %v 201} 202 203define <vscale x 2 x float> @vfrdiv_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, i32 zeroext %evl) { 204; CHECK-LABEL: vfrdiv_vf_nxv2f32_unmasked: 205; CHECK: # %bb.0: 206; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 207; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 208; CHECK-NEXT: ret 209 %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0 210 %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer 211 %v = call <vscale x 2 x float> @llvm.vp.fdiv.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 212 ret <vscale x 2 x float> %v 213} 214 215declare <vscale x 4 x float> @llvm.vp.fdiv.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x i1>, i32) 216 217define <vscale x 4 x float> @vfrdiv_vf_nxv4f32(<vscale x 4 x float> %va, float %b, <vscale x 4 x i1> %m, i32 zeroext %evl) { 218; CHECK-LABEL: vfrdiv_vf_nxv4f32: 219; CHECK: # %bb.0: 220; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 221; CHECK-NEXT: vfrdiv.vf v8, v8, fa0, v0.t 222; CHECK-NEXT: ret 223 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 224 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 225 %v = call <vscale x 4 x float> @llvm.vp.fdiv.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x i1> %m, i32 %evl) 226 ret <vscale x 4 x float> %v 227} 228 229define <vscale x 4 x float> @vfrdiv_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, i32 zeroext %evl) { 230; CHECK-LABEL: vfrdiv_vf_nxv4f32_unmasked: 231; CHECK: # %bb.0: 232; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 233; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 234; CHECK-NEXT: ret 235 %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0 236 %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer 237 %v = call <vscale x 4 x float> @llvm.vp.fdiv.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl) 238 ret <vscale x 4 x float> %v 239} 240 241declare <vscale x 8 x float> @llvm.vp.fdiv.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, <vscale x 8 x i1>, i32) 242 243define <vscale x 8 x float> @vfrdiv_vf_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 244; CHECK-LABEL: vfrdiv_vf_nxv8f32: 245; CHECK: # %bb.0: 246; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 247; CHECK-NEXT: vfrdiv.vf v8, v8, fa0, v0.t 248; CHECK-NEXT: ret 249 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 250 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 251 %v = call <vscale x 8 x float> @llvm.vp.fdiv.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x i1> %m, i32 %evl) 252 ret <vscale x 8 x float> %v 253} 254 255define <vscale x 8 x float> @vfrdiv_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, i32 zeroext %evl) { 256; CHECK-LABEL: vfrdiv_vf_nxv8f32_unmasked: 257; CHECK: # %bb.0: 258; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 259; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 260; CHECK-NEXT: ret 261 %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0 262 %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer 263 %v = call <vscale x 8 x float> @llvm.vp.fdiv.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl) 264 ret <vscale x 8 x float> %v 265} 266 267declare <vscale x 16 x float> @llvm.vp.fdiv.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, <vscale x 16 x i1>, i32) 268 269define <vscale x 16 x float> @vfrdiv_vf_nxv16f32(<vscale x 16 x float> %va, float %b, <vscale x 16 x i1> %m, i32 zeroext %evl) { 270; CHECK-LABEL: vfrdiv_vf_nxv16f32: 271; CHECK: # %bb.0: 272; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 273; CHECK-NEXT: vfrdiv.vf v8, v8, fa0, v0.t 274; CHECK-NEXT: ret 275 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 276 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 277 %v = call <vscale x 16 x float> @llvm.vp.fdiv.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x i1> %m, i32 %evl) 278 ret <vscale x 16 x float> %v 279} 280 281define <vscale x 16 x float> @vfrdiv_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, i32 zeroext %evl) { 282; CHECK-LABEL: vfrdiv_vf_nxv16f32_unmasked: 283; CHECK: # %bb.0: 284; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 285; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 286; CHECK-NEXT: ret 287 %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0 288 %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer 289 %v = call <vscale x 16 x float> @llvm.vp.fdiv.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl) 290 ret <vscale x 16 x float> %v 291} 292 293declare <vscale x 1 x double> @llvm.vp.fdiv.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, <vscale x 1 x i1>, i32) 294 295define <vscale x 1 x double> @vfrdiv_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) { 296; CHECK-LABEL: vfrdiv_vf_nxv1f64: 297; CHECK: # %bb.0: 298; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 299; CHECK-NEXT: vfrdiv.vf v8, v8, fa0, v0.t 300; CHECK-NEXT: ret 301 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 302 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 303 %v = call <vscale x 1 x double> @llvm.vp.fdiv.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x i1> %m, i32 %evl) 304 ret <vscale x 1 x double> %v 305} 306 307define <vscale x 1 x double> @vfrdiv_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, i32 zeroext %evl) { 308; CHECK-LABEL: vfrdiv_vf_nxv1f64_unmasked: 309; CHECK: # %bb.0: 310; CHECK-NEXT: vsetvli zero, a0, e64, m1, ta, ma 311; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 312; CHECK-NEXT: ret 313 %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0 314 %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer 315 %v = call <vscale x 1 x double> @llvm.vp.fdiv.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl) 316 ret <vscale x 1 x double> %v 317} 318 319declare <vscale x 2 x double> @llvm.vp.fdiv.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x i1>, i32) 320 321define <vscale x 2 x double> @vfrdiv_vf_nxv2f64(<vscale x 2 x double> %va, double %b, <vscale x 2 x i1> %m, i32 zeroext %evl) { 322; CHECK-LABEL: vfrdiv_vf_nxv2f64: 323; CHECK: # %bb.0: 324; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 325; CHECK-NEXT: vfrdiv.vf v8, v8, fa0, v0.t 326; CHECK-NEXT: ret 327 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 328 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 329 %v = call <vscale x 2 x double> @llvm.vp.fdiv.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl) 330 ret <vscale x 2 x double> %v 331} 332 333define <vscale x 2 x double> @vfrdiv_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, i32 zeroext %evl) { 334; CHECK-LABEL: vfrdiv_vf_nxv2f64_unmasked: 335; CHECK: # %bb.0: 336; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 337; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 338; CHECK-NEXT: ret 339 %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0 340 %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer 341 %v = call <vscale x 2 x double> @llvm.vp.fdiv.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 342 ret <vscale x 2 x double> %v 343} 344 345declare <vscale x 4 x double> @llvm.vp.fdiv.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, <vscale x 4 x i1>, i32) 346 347define <vscale x 4 x double> @vfrdiv_vf_nxv4f64(<vscale x 4 x double> %va, double %b, <vscale x 4 x i1> %m, i32 zeroext %evl) { 348; CHECK-LABEL: vfrdiv_vf_nxv4f64: 349; CHECK: # %bb.0: 350; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 351; CHECK-NEXT: vfrdiv.vf v8, v8, fa0, v0.t 352; CHECK-NEXT: ret 353 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 354 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 355 %v = call <vscale x 4 x double> @llvm.vp.fdiv.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x i1> %m, i32 %evl) 356 ret <vscale x 4 x double> %v 357} 358 359define <vscale x 4 x double> @vfrdiv_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, i32 zeroext %evl) { 360; CHECK-LABEL: vfrdiv_vf_nxv4f64_unmasked: 361; CHECK: # %bb.0: 362; CHECK-NEXT: vsetvli zero, a0, e64, m4, ta, ma 363; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 364; CHECK-NEXT: ret 365 %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0 366 %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer 367 %v = call <vscale x 4 x double> @llvm.vp.fdiv.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl) 368 ret <vscale x 4 x double> %v 369} 370 371declare <vscale x 8 x double> @llvm.vp.fdiv.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, <vscale x 8 x i1>, i32) 372 373define <vscale x 8 x double> @vfrdiv_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) { 374; CHECK-LABEL: vfrdiv_vf_nxv8f64: 375; CHECK: # %bb.0: 376; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 377; CHECK-NEXT: vfrdiv.vf v8, v8, fa0, v0.t 378; CHECK-NEXT: ret 379 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 380 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 381 %v = call <vscale x 8 x double> @llvm.vp.fdiv.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x i1> %m, i32 %evl) 382 ret <vscale x 8 x double> %v 383} 384 385define <vscale x 8 x double> @vfrdiv_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, i32 zeroext %evl) { 386; CHECK-LABEL: vfrdiv_vf_nxv8f64_unmasked: 387; CHECK: # %bb.0: 388; CHECK-NEXT: vsetvli zero, a0, e64, m8, ta, ma 389; CHECK-NEXT: vfrdiv.vf v8, v8, fa0 390; CHECK-NEXT: ret 391 %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0 392 %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer 393 %v = call <vscale x 8 x double> @llvm.vp.fdiv.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl) 394 ret <vscale x 8 x double> %v 395} 396