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