1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: sed 's/iXLen/i32/g' %s | llc -mtriple=riscv32 -mattr=+v,+zvfh \ 3; RUN: -verify-machineinstrs -target-abi=ilp32d | FileCheck %s 4; RUN: sed 's/iXLen/i64/g' %s | llc -mtriple=riscv64 -mattr=+v,+zvfh \ 5; RUN: -verify-machineinstrs -target-abi=lp64d | FileCheck %s 6 7declare <vscale x 1 x half> @llvm.riscv.vfwcvt.f.x.v.nxv1f16.nxv1i8( 8 <vscale x 1 x half>, 9 <vscale x 1 x i8>, 10 iXLen); 11 12define <vscale x 1 x half> @intrinsic_vfwcvt_f.x.v_nxv1f16_nxv1i8(<vscale x 1 x i8> %0, iXLen %1) nounwind { 13; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv1f16_nxv1i8: 14; CHECK: # %bb.0: # %entry 15; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, ma 16; CHECK-NEXT: vfwcvt.f.x.v v9, v8 17; CHECK-NEXT: vmv1r.v v8, v9 18; CHECK-NEXT: ret 19entry: 20 %a = call <vscale x 1 x half> @llvm.riscv.vfwcvt.f.x.v.nxv1f16.nxv1i8( 21 <vscale x 1 x half> undef, 22 <vscale x 1 x i8> %0, 23 iXLen %1) 24 25 ret <vscale x 1 x half> %a 26} 27 28declare <vscale x 1 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f16.nxv1i8( 29 <vscale x 1 x half>, 30 <vscale x 1 x i8>, 31 <vscale x 1 x i1>, 32 iXLen, iXLen); 33 34define <vscale x 1 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv1f16_nxv1i8(<vscale x 1 x half> %0, <vscale x 1 x i8> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind { 35; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv1f16_nxv1i8: 36; CHECK: # %bb.0: # %entry 37; CHECK-NEXT: vsetvli zero, a0, e8, mf8, ta, mu 38; CHECK-NEXT: vfwcvt.f.x.v v8, v9, v0.t 39; CHECK-NEXT: ret 40entry: 41 %a = call <vscale x 1 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f16.nxv1i8( 42 <vscale x 1 x half> %0, 43 <vscale x 1 x i8> %1, 44 <vscale x 1 x i1> %2, 45 iXLen %3, iXLen 1) 46 47 ret <vscale x 1 x half> %a 48} 49 50declare <vscale x 2 x half> @llvm.riscv.vfwcvt.f.x.v.nxv2f16.nxv2i8( 51 <vscale x 2 x half>, 52 <vscale x 2 x i8>, 53 iXLen); 54 55define <vscale x 2 x half> @intrinsic_vfwcvt_f.x.v_nxv2f16_nxv2i8(<vscale x 2 x i8> %0, iXLen %1) nounwind { 56; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv2f16_nxv2i8: 57; CHECK: # %bb.0: # %entry 58; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 59; CHECK-NEXT: vfwcvt.f.x.v v9, v8 60; CHECK-NEXT: vmv1r.v v8, v9 61; CHECK-NEXT: ret 62entry: 63 %a = call <vscale x 2 x half> @llvm.riscv.vfwcvt.f.x.v.nxv2f16.nxv2i8( 64 <vscale x 2 x half> undef, 65 <vscale x 2 x i8> %0, 66 iXLen %1) 67 68 ret <vscale x 2 x half> %a 69} 70 71declare <vscale x 2 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f16.nxv2i8( 72 <vscale x 2 x half>, 73 <vscale x 2 x i8>, 74 <vscale x 2 x i1>, 75 iXLen, iXLen); 76 77define <vscale x 2 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv2f16_nxv2i8(<vscale x 2 x half> %0, <vscale x 2 x i8> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind { 78; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv2f16_nxv2i8: 79; CHECK: # %bb.0: # %entry 80; CHECK-NEXT: vsetvli zero, a0, e8, mf4, ta, mu 81; CHECK-NEXT: vfwcvt.f.x.v v8, v9, v0.t 82; CHECK-NEXT: ret 83entry: 84 %a = call <vscale x 2 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f16.nxv2i8( 85 <vscale x 2 x half> %0, 86 <vscale x 2 x i8> %1, 87 <vscale x 2 x i1> %2, 88 iXLen %3, iXLen 1) 89 90 ret <vscale x 2 x half> %a 91} 92 93declare <vscale x 4 x half> @llvm.riscv.vfwcvt.f.x.v.nxv4f16.nxv4i8( 94 <vscale x 4 x half>, 95 <vscale x 4 x i8>, 96 iXLen); 97 98define <vscale x 4 x half> @intrinsic_vfwcvt_f.x.v_nxv4f16_nxv4i8(<vscale x 4 x i8> %0, iXLen %1) nounwind { 99; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv4f16_nxv4i8: 100; CHECK: # %bb.0: # %entry 101; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, ma 102; CHECK-NEXT: vfwcvt.f.x.v v9, v8 103; CHECK-NEXT: vmv1r.v v8, v9 104; CHECK-NEXT: ret 105entry: 106 %a = call <vscale x 4 x half> @llvm.riscv.vfwcvt.f.x.v.nxv4f16.nxv4i8( 107 <vscale x 4 x half> undef, 108 <vscale x 4 x i8> %0, 109 iXLen %1) 110 111 ret <vscale x 4 x half> %a 112} 113 114declare <vscale x 4 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f16.nxv4i8( 115 <vscale x 4 x half>, 116 <vscale x 4 x i8>, 117 <vscale x 4 x i1>, 118 iXLen, iXLen); 119 120define <vscale x 4 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv4f16_nxv4i8(<vscale x 4 x half> %0, <vscale x 4 x i8> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind { 121; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv4f16_nxv4i8: 122; CHECK: # %bb.0: # %entry 123; CHECK-NEXT: vsetvli zero, a0, e8, mf2, ta, mu 124; CHECK-NEXT: vfwcvt.f.x.v v8, v9, v0.t 125; CHECK-NEXT: ret 126entry: 127 %a = call <vscale x 4 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f16.nxv4i8( 128 <vscale x 4 x half> %0, 129 <vscale x 4 x i8> %1, 130 <vscale x 4 x i1> %2, 131 iXLen %3, iXLen 1) 132 133 ret <vscale x 4 x half> %a 134} 135 136declare <vscale x 8 x half> @llvm.riscv.vfwcvt.f.x.v.nxv8f16.nxv8i8( 137 <vscale x 8 x half>, 138 <vscale x 8 x i8>, 139 iXLen); 140 141define <vscale x 8 x half> @intrinsic_vfwcvt_f.x.v_nxv8f16_nxv8i8(<vscale x 8 x i8> %0, iXLen %1) nounwind { 142; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv8f16_nxv8i8: 143; CHECK: # %bb.0: # %entry 144; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, ma 145; CHECK-NEXT: vfwcvt.f.x.v v10, v8 146; CHECK-NEXT: vmv2r.v v8, v10 147; CHECK-NEXT: ret 148entry: 149 %a = call <vscale x 8 x half> @llvm.riscv.vfwcvt.f.x.v.nxv8f16.nxv8i8( 150 <vscale x 8 x half> undef, 151 <vscale x 8 x i8> %0, 152 iXLen %1) 153 154 ret <vscale x 8 x half> %a 155} 156 157declare <vscale x 8 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f16.nxv8i8( 158 <vscale x 8 x half>, 159 <vscale x 8 x i8>, 160 <vscale x 8 x i1>, 161 iXLen, iXLen); 162 163define <vscale x 8 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv8f16_nxv8i8(<vscale x 8 x half> %0, <vscale x 8 x i8> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind { 164; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv8f16_nxv8i8: 165; CHECK: # %bb.0: # %entry 166; CHECK-NEXT: vsetvli zero, a0, e8, m1, ta, mu 167; CHECK-NEXT: vfwcvt.f.x.v v8, v10, v0.t 168; CHECK-NEXT: ret 169entry: 170 %a = call <vscale x 8 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f16.nxv8i8( 171 <vscale x 8 x half> %0, 172 <vscale x 8 x i8> %1, 173 <vscale x 8 x i1> %2, 174 iXLen %3, iXLen 1) 175 176 ret <vscale x 8 x half> %a 177} 178 179declare <vscale x 16 x half> @llvm.riscv.vfwcvt.f.x.v.nxv16f16.nxv16i8( 180 <vscale x 16 x half>, 181 <vscale x 16 x i8>, 182 iXLen); 183 184define <vscale x 16 x half> @intrinsic_vfwcvt_f.x.v_nxv16f16_nxv16i8(<vscale x 16 x i8> %0, iXLen %1) nounwind { 185; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv16f16_nxv16i8: 186; CHECK: # %bb.0: # %entry 187; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 188; CHECK-NEXT: vfwcvt.f.x.v v12, v8 189; CHECK-NEXT: vmv4r.v v8, v12 190; CHECK-NEXT: ret 191entry: 192 %a = call <vscale x 16 x half> @llvm.riscv.vfwcvt.f.x.v.nxv16f16.nxv16i8( 193 <vscale x 16 x half> undef, 194 <vscale x 16 x i8> %0, 195 iXLen %1) 196 197 ret <vscale x 16 x half> %a 198} 199 200declare <vscale x 16 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv16f16.nxv16i8( 201 <vscale x 16 x half>, 202 <vscale x 16 x i8>, 203 <vscale x 16 x i1>, 204 iXLen, iXLen); 205 206define <vscale x 16 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv16f16_nxv16i8(<vscale x 16 x half> %0, <vscale x 16 x i8> %1, <vscale x 16 x i1> %2, iXLen %3) nounwind { 207; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv16f16_nxv16i8: 208; CHECK: # %bb.0: # %entry 209; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, mu 210; CHECK-NEXT: vfwcvt.f.x.v v8, v12, v0.t 211; CHECK-NEXT: ret 212entry: 213 %a = call <vscale x 16 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv16f16.nxv16i8( 214 <vscale x 16 x half> %0, 215 <vscale x 16 x i8> %1, 216 <vscale x 16 x i1> %2, 217 iXLen %3, iXLen 1) 218 219 ret <vscale x 16 x half> %a 220} 221 222declare <vscale x 32 x half> @llvm.riscv.vfwcvt.f.x.v.nxv32f16.nxv32i8( 223 <vscale x 32 x half>, 224 <vscale x 32 x i8>, 225 iXLen); 226 227define <vscale x 32 x half> @intrinsic_vfwcvt_f.x.v_nxv32f16_nxv32i8(<vscale x 32 x i8> %0, iXLen %1) nounwind { 228; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv32f16_nxv32i8: 229; CHECK: # %bb.0: # %entry 230; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, ma 231; CHECK-NEXT: vfwcvt.f.x.v v16, v8 232; CHECK-NEXT: vmv8r.v v8, v16 233; CHECK-NEXT: ret 234entry: 235 %a = call <vscale x 32 x half> @llvm.riscv.vfwcvt.f.x.v.nxv32f16.nxv32i8( 236 <vscale x 32 x half> undef, 237 <vscale x 32 x i8> %0, 238 iXLen %1) 239 240 ret <vscale x 32 x half> %a 241} 242 243declare <vscale x 32 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv32f16.nxv32i8( 244 <vscale x 32 x half>, 245 <vscale x 32 x i8>, 246 <vscale x 32 x i1>, 247 iXLen, iXLen); 248 249define <vscale x 32 x half> @intrinsic_vfwcvt_mask_f.x.v_nxv32f16_nxv32i8(<vscale x 32 x half> %0, <vscale x 32 x i8> %1, <vscale x 32 x i1> %2, iXLen %3) nounwind { 250; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv32f16_nxv32i8: 251; CHECK: # %bb.0: # %entry 252; CHECK-NEXT: vsetvli zero, a0, e8, m4, ta, mu 253; CHECK-NEXT: vfwcvt.f.x.v v8, v16, v0.t 254; CHECK-NEXT: ret 255entry: 256 %a = call <vscale x 32 x half> @llvm.riscv.vfwcvt.f.x.v.mask.nxv32f16.nxv32i8( 257 <vscale x 32 x half> %0, 258 <vscale x 32 x i8> %1, 259 <vscale x 32 x i1> %2, 260 iXLen %3, iXLen 1) 261 262 ret <vscale x 32 x half> %a 263} 264 265declare <vscale x 1 x float> @llvm.riscv.vfwcvt.f.x.v.nxv1f32.nxv1i16( 266 <vscale x 1 x float>, 267 <vscale x 1 x i16>, 268 iXLen); 269 270define <vscale x 1 x float> @intrinsic_vfwcvt_f.x.v_nxv1f32_nxv1i16(<vscale x 1 x i16> %0, iXLen %1) nounwind { 271; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv1f32_nxv1i16: 272; CHECK: # %bb.0: # %entry 273; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, ma 274; CHECK-NEXT: vfwcvt.f.x.v v9, v8 275; CHECK-NEXT: vmv1r.v v8, v9 276; CHECK-NEXT: ret 277entry: 278 %a = call <vscale x 1 x float> @llvm.riscv.vfwcvt.f.x.v.nxv1f32.nxv1i16( 279 <vscale x 1 x float> undef, 280 <vscale x 1 x i16> %0, 281 iXLen %1) 282 283 ret <vscale x 1 x float> %a 284} 285 286declare <vscale x 1 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f32.nxv1i16( 287 <vscale x 1 x float>, 288 <vscale x 1 x i16>, 289 <vscale x 1 x i1>, 290 iXLen, iXLen); 291 292define <vscale x 1 x float> @intrinsic_vfwcvt_mask_f.x.v_nxv1f32_nxv1i16(<vscale x 1 x float> %0, <vscale x 1 x i16> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind { 293; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv1f32_nxv1i16: 294; CHECK: # %bb.0: # %entry 295; CHECK-NEXT: vsetvli zero, a0, e16, mf4, ta, mu 296; CHECK-NEXT: vfwcvt.f.x.v v8, v9, v0.t 297; CHECK-NEXT: ret 298entry: 299 %a = call <vscale x 1 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f32.nxv1i16( 300 <vscale x 1 x float> %0, 301 <vscale x 1 x i16> %1, 302 <vscale x 1 x i1> %2, 303 iXLen %3, iXLen 1) 304 305 ret <vscale x 1 x float> %a 306} 307 308declare <vscale x 2 x float> @llvm.riscv.vfwcvt.f.x.v.nxv2f32.nxv2i16( 309 <vscale x 2 x float>, 310 <vscale x 2 x i16>, 311 iXLen); 312 313define <vscale x 2 x float> @intrinsic_vfwcvt_f.x.v_nxv2f32_nxv2i16(<vscale x 2 x i16> %0, iXLen %1) nounwind { 314; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv2f32_nxv2i16: 315; CHECK: # %bb.0: # %entry 316; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 317; CHECK-NEXT: vfwcvt.f.x.v v9, v8 318; CHECK-NEXT: vmv1r.v v8, v9 319; CHECK-NEXT: ret 320entry: 321 %a = call <vscale x 2 x float> @llvm.riscv.vfwcvt.f.x.v.nxv2f32.nxv2i16( 322 <vscale x 2 x float> undef, 323 <vscale x 2 x i16> %0, 324 iXLen %1) 325 326 ret <vscale x 2 x float> %a 327} 328 329declare <vscale x 2 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f32.nxv2i16( 330 <vscale x 2 x float>, 331 <vscale x 2 x i16>, 332 <vscale x 2 x i1>, 333 iXLen, iXLen); 334 335define <vscale x 2 x float> @intrinsic_vfwcvt_mask_f.x.v_nxv2f32_nxv2i16(<vscale x 2 x float> %0, <vscale x 2 x i16> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind { 336; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv2f32_nxv2i16: 337; CHECK: # %bb.0: # %entry 338; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, mu 339; CHECK-NEXT: vfwcvt.f.x.v v8, v9, v0.t 340; CHECK-NEXT: ret 341entry: 342 %a = call <vscale x 2 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f32.nxv2i16( 343 <vscale x 2 x float> %0, 344 <vscale x 2 x i16> %1, 345 <vscale x 2 x i1> %2, 346 iXLen %3, iXLen 1) 347 348 ret <vscale x 2 x float> %a 349} 350 351declare <vscale x 4 x float> @llvm.riscv.vfwcvt.f.x.v.nxv4f32.nxv4i16( 352 <vscale x 4 x float>, 353 <vscale x 4 x i16>, 354 iXLen); 355 356define <vscale x 4 x float> @intrinsic_vfwcvt_f.x.v_nxv4f32_nxv4i16(<vscale x 4 x i16> %0, iXLen %1) nounwind { 357; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv4f32_nxv4i16: 358; CHECK: # %bb.0: # %entry 359; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, ma 360; CHECK-NEXT: vfwcvt.f.x.v v10, v8 361; CHECK-NEXT: vmv2r.v v8, v10 362; CHECK-NEXT: ret 363entry: 364 %a = call <vscale x 4 x float> @llvm.riscv.vfwcvt.f.x.v.nxv4f32.nxv4i16( 365 <vscale x 4 x float> undef, 366 <vscale x 4 x i16> %0, 367 iXLen %1) 368 369 ret <vscale x 4 x float> %a 370} 371 372declare <vscale x 4 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f32.nxv4i16( 373 <vscale x 4 x float>, 374 <vscale x 4 x i16>, 375 <vscale x 4 x i1>, 376 iXLen, iXLen); 377 378define <vscale x 4 x float> @intrinsic_vfwcvt_mask_f.x.v_nxv4f32_nxv4i16(<vscale x 4 x float> %0, <vscale x 4 x i16> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind { 379; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv4f32_nxv4i16: 380; CHECK: # %bb.0: # %entry 381; CHECK-NEXT: vsetvli zero, a0, e16, m1, ta, mu 382; CHECK-NEXT: vfwcvt.f.x.v v8, v10, v0.t 383; CHECK-NEXT: ret 384entry: 385 %a = call <vscale x 4 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f32.nxv4i16( 386 <vscale x 4 x float> %0, 387 <vscale x 4 x i16> %1, 388 <vscale x 4 x i1> %2, 389 iXLen %3, iXLen 1) 390 391 ret <vscale x 4 x float> %a 392} 393 394declare <vscale x 8 x float> @llvm.riscv.vfwcvt.f.x.v.nxv8f32.nxv8i16( 395 <vscale x 8 x float>, 396 <vscale x 8 x i16>, 397 iXLen); 398 399define <vscale x 8 x float> @intrinsic_vfwcvt_f.x.v_nxv8f32_nxv8i16(<vscale x 8 x i16> %0, iXLen %1) nounwind { 400; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv8f32_nxv8i16: 401; CHECK: # %bb.0: # %entry 402; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, ma 403; CHECK-NEXT: vfwcvt.f.x.v v12, v8 404; CHECK-NEXT: vmv4r.v v8, v12 405; CHECK-NEXT: ret 406entry: 407 %a = call <vscale x 8 x float> @llvm.riscv.vfwcvt.f.x.v.nxv8f32.nxv8i16( 408 <vscale x 8 x float> undef, 409 <vscale x 8 x i16> %0, 410 iXLen %1) 411 412 ret <vscale x 8 x float> %a 413} 414 415declare <vscale x 8 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f32.nxv8i16( 416 <vscale x 8 x float>, 417 <vscale x 8 x i16>, 418 <vscale x 8 x i1>, 419 iXLen, iXLen); 420 421define <vscale x 8 x float> @intrinsic_vfwcvt_mask_f.x.v_nxv8f32_nxv8i16(<vscale x 8 x float> %0, <vscale x 8 x i16> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind { 422; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv8f32_nxv8i16: 423; CHECK: # %bb.0: # %entry 424; CHECK-NEXT: vsetvli zero, a0, e16, m2, ta, mu 425; CHECK-NEXT: vfwcvt.f.x.v v8, v12, v0.t 426; CHECK-NEXT: ret 427entry: 428 %a = call <vscale x 8 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f32.nxv8i16( 429 <vscale x 8 x float> %0, 430 <vscale x 8 x i16> %1, 431 <vscale x 8 x i1> %2, 432 iXLen %3, iXLen 1) 433 434 ret <vscale x 8 x float> %a 435} 436 437declare <vscale x 16 x float> @llvm.riscv.vfwcvt.f.x.v.nxv16f32.nxv16i16( 438 <vscale x 16 x float>, 439 <vscale x 16 x i16>, 440 iXLen); 441 442define <vscale x 16 x float> @intrinsic_vfwcvt_f.x.v_nxv16f32_nxv16i16(<vscale x 16 x i16> %0, iXLen %1) nounwind { 443; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv16f32_nxv16i16: 444; CHECK: # %bb.0: # %entry 445; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 446; CHECK-NEXT: vfwcvt.f.x.v v16, v8 447; CHECK-NEXT: vmv8r.v v8, v16 448; CHECK-NEXT: ret 449entry: 450 %a = call <vscale x 16 x float> @llvm.riscv.vfwcvt.f.x.v.nxv16f32.nxv16i16( 451 <vscale x 16 x float> undef, 452 <vscale x 16 x i16> %0, 453 iXLen %1) 454 455 ret <vscale x 16 x float> %a 456} 457 458declare <vscale x 16 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv16f32.nxv16i16( 459 <vscale x 16 x float>, 460 <vscale x 16 x i16>, 461 <vscale x 16 x i1>, 462 iXLen, iXLen); 463 464define <vscale x 16 x float> @intrinsic_vfwcvt_mask_f.x.v_nxv16f32_nxv16i16(<vscale x 16 x float> %0, <vscale x 16 x i16> %1, <vscale x 16 x i1> %2, iXLen %3) nounwind { 465; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv16f32_nxv16i16: 466; CHECK: # %bb.0: # %entry 467; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, mu 468; CHECK-NEXT: vfwcvt.f.x.v v8, v16, v0.t 469; CHECK-NEXT: ret 470entry: 471 %a = call <vscale x 16 x float> @llvm.riscv.vfwcvt.f.x.v.mask.nxv16f32.nxv16i16( 472 <vscale x 16 x float> %0, 473 <vscale x 16 x i16> %1, 474 <vscale x 16 x i1> %2, 475 iXLen %3, iXLen 1) 476 477 ret <vscale x 16 x float> %a 478} 479 480declare <vscale x 1 x double> @llvm.riscv.vfwcvt.f.x.v.nxv1f64.nxv1i32( 481 <vscale x 1 x double>, 482 <vscale x 1 x i32>, 483 iXLen); 484 485define <vscale x 1 x double> @intrinsic_vfwcvt_f.x.v_nxv1f64_nxv1i32(<vscale x 1 x i32> %0, iXLen %1) nounwind { 486; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv1f64_nxv1i32: 487; CHECK: # %bb.0: # %entry 488; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, ma 489; CHECK-NEXT: vfwcvt.f.x.v v9, v8 490; CHECK-NEXT: vmv1r.v v8, v9 491; CHECK-NEXT: ret 492entry: 493 %a = call <vscale x 1 x double> @llvm.riscv.vfwcvt.f.x.v.nxv1f64.nxv1i32( 494 <vscale x 1 x double> undef, 495 <vscale x 1 x i32> %0, 496 iXLen %1) 497 498 ret <vscale x 1 x double> %a 499} 500 501declare <vscale x 1 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f64.nxv1i32( 502 <vscale x 1 x double>, 503 <vscale x 1 x i32>, 504 <vscale x 1 x i1>, 505 iXLen, iXLen); 506 507define <vscale x 1 x double> @intrinsic_vfwcvt_mask_f.x.v_nxv1f64_nxv1i32(<vscale x 1 x double> %0, <vscale x 1 x i32> %1, <vscale x 1 x i1> %2, iXLen %3) nounwind { 508; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv1f64_nxv1i32: 509; CHECK: # %bb.0: # %entry 510; CHECK-NEXT: vsetvli zero, a0, e32, mf2, ta, mu 511; CHECK-NEXT: vfwcvt.f.x.v v8, v9, v0.t 512; CHECK-NEXT: ret 513entry: 514 %a = call <vscale x 1 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv1f64.nxv1i32( 515 <vscale x 1 x double> %0, 516 <vscale x 1 x i32> %1, 517 <vscale x 1 x i1> %2, 518 iXLen %3, iXLen 1) 519 520 ret <vscale x 1 x double> %a 521} 522 523declare <vscale x 2 x double> @llvm.riscv.vfwcvt.f.x.v.nxv2f64.nxv2i32( 524 <vscale x 2 x double>, 525 <vscale x 2 x i32>, 526 iXLen); 527 528define <vscale x 2 x double> @intrinsic_vfwcvt_f.x.v_nxv2f64_nxv2i32(<vscale x 2 x i32> %0, iXLen %1) nounwind { 529; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv2f64_nxv2i32: 530; CHECK: # %bb.0: # %entry 531; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 532; CHECK-NEXT: vfwcvt.f.x.v v10, v8 533; CHECK-NEXT: vmv2r.v v8, v10 534; CHECK-NEXT: ret 535entry: 536 %a = call <vscale x 2 x double> @llvm.riscv.vfwcvt.f.x.v.nxv2f64.nxv2i32( 537 <vscale x 2 x double> undef, 538 <vscale x 2 x i32> %0, 539 iXLen %1) 540 541 ret <vscale x 2 x double> %a 542} 543 544declare <vscale x 2 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f64.nxv2i32( 545 <vscale x 2 x double>, 546 <vscale x 2 x i32>, 547 <vscale x 2 x i1>, 548 iXLen, iXLen); 549 550define <vscale x 2 x double> @intrinsic_vfwcvt_mask_f.x.v_nxv2f64_nxv2i32(<vscale x 2 x double> %0, <vscale x 2 x i32> %1, <vscale x 2 x i1> %2, iXLen %3) nounwind { 551; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv2f64_nxv2i32: 552; CHECK: # %bb.0: # %entry 553; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, mu 554; CHECK-NEXT: vfwcvt.f.x.v v8, v10, v0.t 555; CHECK-NEXT: ret 556entry: 557 %a = call <vscale x 2 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv2f64.nxv2i32( 558 <vscale x 2 x double> %0, 559 <vscale x 2 x i32> %1, 560 <vscale x 2 x i1> %2, 561 iXLen %3, iXLen 1) 562 563 ret <vscale x 2 x double> %a 564} 565 566declare <vscale x 4 x double> @llvm.riscv.vfwcvt.f.x.v.nxv4f64.nxv4i32( 567 <vscale x 4 x double>, 568 <vscale x 4 x i32>, 569 iXLen); 570 571define <vscale x 4 x double> @intrinsic_vfwcvt_f.x.v_nxv4f64_nxv4i32(<vscale x 4 x i32> %0, iXLen %1) nounwind { 572; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv4f64_nxv4i32: 573; CHECK: # %bb.0: # %entry 574; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, ma 575; CHECK-NEXT: vfwcvt.f.x.v v12, v8 576; CHECK-NEXT: vmv4r.v v8, v12 577; CHECK-NEXT: ret 578entry: 579 %a = call <vscale x 4 x double> @llvm.riscv.vfwcvt.f.x.v.nxv4f64.nxv4i32( 580 <vscale x 4 x double> undef, 581 <vscale x 4 x i32> %0, 582 iXLen %1) 583 584 ret <vscale x 4 x double> %a 585} 586 587declare <vscale x 4 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f64.nxv4i32( 588 <vscale x 4 x double>, 589 <vscale x 4 x i32>, 590 <vscale x 4 x i1>, 591 iXLen, iXLen); 592 593define <vscale x 4 x double> @intrinsic_vfwcvt_mask_f.x.v_nxv4f64_nxv4i32(<vscale x 4 x double> %0, <vscale x 4 x i32> %1, <vscale x 4 x i1> %2, iXLen %3) nounwind { 594; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv4f64_nxv4i32: 595; CHECK: # %bb.0: # %entry 596; CHECK-NEXT: vsetvli zero, a0, e32, m2, ta, mu 597; CHECK-NEXT: vfwcvt.f.x.v v8, v12, v0.t 598; CHECK-NEXT: ret 599entry: 600 %a = call <vscale x 4 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv4f64.nxv4i32( 601 <vscale x 4 x double> %0, 602 <vscale x 4 x i32> %1, 603 <vscale x 4 x i1> %2, 604 iXLen %3, iXLen 1) 605 606 ret <vscale x 4 x double> %a 607} 608 609declare <vscale x 8 x double> @llvm.riscv.vfwcvt.f.x.v.nxv8f64.nxv8i32( 610 <vscale x 8 x double>, 611 <vscale x 8 x i32>, 612 iXLen); 613 614define <vscale x 8 x double> @intrinsic_vfwcvt_f.x.v_nxv8f64_nxv8i32(<vscale x 8 x i32> %0, iXLen %1) nounwind { 615; CHECK-LABEL: intrinsic_vfwcvt_f.x.v_nxv8f64_nxv8i32: 616; CHECK: # %bb.0: # %entry 617; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, ma 618; CHECK-NEXT: vfwcvt.f.x.v v16, v8 619; CHECK-NEXT: vmv8r.v v8, v16 620; CHECK-NEXT: ret 621entry: 622 %a = call <vscale x 8 x double> @llvm.riscv.vfwcvt.f.x.v.nxv8f64.nxv8i32( 623 <vscale x 8 x double> undef, 624 <vscale x 8 x i32> %0, 625 iXLen %1) 626 627 ret <vscale x 8 x double> %a 628} 629 630declare <vscale x 8 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f64.nxv8i32( 631 <vscale x 8 x double>, 632 <vscale x 8 x i32>, 633 <vscale x 8 x i1>, 634 iXLen, iXLen); 635 636define <vscale x 8 x double> @intrinsic_vfwcvt_mask_f.x.v_nxv8f64_nxv8i32(<vscale x 8 x double> %0, <vscale x 8 x i32> %1, <vscale x 8 x i1> %2, iXLen %3) nounwind { 637; CHECK-LABEL: intrinsic_vfwcvt_mask_f.x.v_nxv8f64_nxv8i32: 638; CHECK: # %bb.0: # %entry 639; CHECK-NEXT: vsetvli zero, a0, e32, m4, ta, mu 640; CHECK-NEXT: vfwcvt.f.x.v v8, v16, v0.t 641; CHECK-NEXT: ret 642entry: 643 %a = call <vscale x 8 x double> @llvm.riscv.vfwcvt.f.x.v.mask.nxv8f64.nxv8i32( 644 <vscale x 8 x double> %0, 645 <vscale x 8 x i32> %1, 646 <vscale x 8 x i1> %2, 647 iXLen %3, iXLen 1) 648 649 ret <vscale x 8 x double> %a 650} 651