1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+experimental-zvfh,+v -target-abi=ilp32d \ 3; RUN: -verify-machineinstrs < %s | FileCheck %s 4; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+experimental-zvfh,+v -target-abi=lp64d \ 5; RUN: -verify-machineinstrs < %s | FileCheck %s 6 7define <vscale x 1 x i1> @vfptosi_nxv1f16_nxv1i1(<vscale x 1 x half> %va) { 8; CHECK-LABEL: vfptosi_nxv1f16_nxv1i1: 9; CHECK: # %bb.0: 10; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu 11; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 12; CHECK-NEXT: vand.vi v8, v9, 1 13; CHECK-NEXT: vmsne.vi v0, v8, 0 14; CHECK-NEXT: ret 15 %evec = fptosi <vscale x 1 x half> %va to <vscale x 1 x i1> 16 ret <vscale x 1 x i1> %evec 17} 18 19define <vscale x 1 x i1> @vfptoui_nxv1f16_nxv1i1(<vscale x 1 x half> %va) { 20; CHECK-LABEL: vfptoui_nxv1f16_nxv1i1: 21; CHECK: # %bb.0: 22; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu 23; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 24; CHECK-NEXT: vand.vi v8, v9, 1 25; CHECK-NEXT: vmsne.vi v0, v8, 0 26; CHECK-NEXT: ret 27 %evec = fptoui <vscale x 1 x half> %va to <vscale x 1 x i1> 28 ret <vscale x 1 x i1> %evec 29} 30 31define <vscale x 1 x i8> @vfptosi_nxv1f16_nxv1i8(<vscale x 1 x half> %va) { 32; CHECK-LABEL: vfptosi_nxv1f16_nxv1i8: 33; CHECK: # %bb.0: 34; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu 35; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 36; CHECK-NEXT: vmv1r.v v8, v9 37; CHECK-NEXT: ret 38 %evec = fptosi <vscale x 1 x half> %va to <vscale x 1 x i8> 39 ret <vscale x 1 x i8> %evec 40} 41 42define <vscale x 1 x i8> @vfptoui_nxv1f16_nxv1i8(<vscale x 1 x half> %va) { 43; CHECK-LABEL: vfptoui_nxv1f16_nxv1i8: 44; CHECK: # %bb.0: 45; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, mu 46; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 47; CHECK-NEXT: vmv1r.v v8, v9 48; CHECK-NEXT: ret 49 %evec = fptoui <vscale x 1 x half> %va to <vscale x 1 x i8> 50 ret <vscale x 1 x i8> %evec 51} 52 53define <vscale x 1 x i16> @vfptosi_nxv1f16_nxv1i16(<vscale x 1 x half> %va) { 54; CHECK-LABEL: vfptosi_nxv1f16_nxv1i16: 55; CHECK: # %bb.0: 56; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 57; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 58; CHECK-NEXT: ret 59 %evec = fptosi <vscale x 1 x half> %va to <vscale x 1 x i16> 60 ret <vscale x 1 x i16> %evec 61} 62 63define <vscale x 1 x i16> @vfptoui_nxv1f16_nxv1i16(<vscale x 1 x half> %va) { 64; CHECK-LABEL: vfptoui_nxv1f16_nxv1i16: 65; CHECK: # %bb.0: 66; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 67; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 68; CHECK-NEXT: ret 69 %evec = fptoui <vscale x 1 x half> %va to <vscale x 1 x i16> 70 ret <vscale x 1 x i16> %evec 71} 72 73define <vscale x 1 x i32> @vfptosi_nxv1f16_nxv1i32(<vscale x 1 x half> %va) { 74; CHECK-LABEL: vfptosi_nxv1f16_nxv1i32: 75; CHECK: # %bb.0: 76; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 77; CHECK-NEXT: vfwcvt.rtz.x.f.v v9, v8 78; CHECK-NEXT: vmv1r.v v8, v9 79; CHECK-NEXT: ret 80 %evec = fptosi <vscale x 1 x half> %va to <vscale x 1 x i32> 81 ret <vscale x 1 x i32> %evec 82} 83 84define <vscale x 1 x i32> @vfptoui_nxv1f16_nxv1i32(<vscale x 1 x half> %va) { 85; CHECK-LABEL: vfptoui_nxv1f16_nxv1i32: 86; CHECK: # %bb.0: 87; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 88; CHECK-NEXT: vfwcvt.rtz.xu.f.v v9, v8 89; CHECK-NEXT: vmv1r.v v8, v9 90; CHECK-NEXT: ret 91 %evec = fptoui <vscale x 1 x half> %va to <vscale x 1 x i32> 92 ret <vscale x 1 x i32> %evec 93} 94 95define <vscale x 1 x i64> @vfptosi_nxv1f16_nxv1i64(<vscale x 1 x half> %va) { 96; CHECK-LABEL: vfptosi_nxv1f16_nxv1i64: 97; CHECK: # %bb.0: 98; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 99; CHECK-NEXT: vfwcvt.f.f.v v9, v8 100; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, mu 101; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v9 102; CHECK-NEXT: ret 103 %evec = fptosi <vscale x 1 x half> %va to <vscale x 1 x i64> 104 ret <vscale x 1 x i64> %evec 105} 106 107define <vscale x 1 x i64> @vfptoui_nxv1f16_nxv1i64(<vscale x 1 x half> %va) { 108; CHECK-LABEL: vfptoui_nxv1f16_nxv1i64: 109; CHECK: # %bb.0: 110; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 111; CHECK-NEXT: vfwcvt.f.f.v v9, v8 112; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, mu 113; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v9 114; CHECK-NEXT: ret 115 %evec = fptoui <vscale x 1 x half> %va to <vscale x 1 x i64> 116 ret <vscale x 1 x i64> %evec 117} 118 119define <vscale x 2 x i1> @vfptosi_nxv2f16_nxv2i1(<vscale x 2 x half> %va) { 120; CHECK-LABEL: vfptosi_nxv2f16_nxv2i1: 121; CHECK: # %bb.0: 122; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu 123; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 124; CHECK-NEXT: vand.vi v8, v9, 1 125; CHECK-NEXT: vmsne.vi v0, v8, 0 126; CHECK-NEXT: ret 127 %evec = fptosi <vscale x 2 x half> %va to <vscale x 2 x i1> 128 ret <vscale x 2 x i1> %evec 129} 130 131define <vscale x 2 x i1> @vfptoui_nxv2f16_nxv2i1(<vscale x 2 x half> %va) { 132; CHECK-LABEL: vfptoui_nxv2f16_nxv2i1: 133; CHECK: # %bb.0: 134; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu 135; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 136; CHECK-NEXT: vand.vi v8, v9, 1 137; CHECK-NEXT: vmsne.vi v0, v8, 0 138; CHECK-NEXT: ret 139 %evec = fptoui <vscale x 2 x half> %va to <vscale x 2 x i1> 140 ret <vscale x 2 x i1> %evec 141} 142 143define <vscale x 2 x i8> @vfptosi_nxv2f16_nxv2i8(<vscale x 2 x half> %va) { 144; CHECK-LABEL: vfptosi_nxv2f16_nxv2i8: 145; CHECK: # %bb.0: 146; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu 147; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 148; CHECK-NEXT: vmv1r.v v8, v9 149; CHECK-NEXT: ret 150 %evec = fptosi <vscale x 2 x half> %va to <vscale x 2 x i8> 151 ret <vscale x 2 x i8> %evec 152} 153 154define <vscale x 2 x i8> @vfptoui_nxv2f16_nxv2i8(<vscale x 2 x half> %va) { 155; CHECK-LABEL: vfptoui_nxv2f16_nxv2i8: 156; CHECK: # %bb.0: 157; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, mu 158; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 159; CHECK-NEXT: vmv1r.v v8, v9 160; CHECK-NEXT: ret 161 %evec = fptoui <vscale x 2 x half> %va to <vscale x 2 x i8> 162 ret <vscale x 2 x i8> %evec 163} 164 165define <vscale x 2 x i16> @vfptosi_nxv2f16_nxv2i16(<vscale x 2 x half> %va) { 166; CHECK-LABEL: vfptosi_nxv2f16_nxv2i16: 167; CHECK: # %bb.0: 168; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 169; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 170; CHECK-NEXT: ret 171 %evec = fptosi <vscale x 2 x half> %va to <vscale x 2 x i16> 172 ret <vscale x 2 x i16> %evec 173} 174 175define <vscale x 2 x i16> @vfptoui_nxv2f16_nxv2i16(<vscale x 2 x half> %va) { 176; CHECK-LABEL: vfptoui_nxv2f16_nxv2i16: 177; CHECK: # %bb.0: 178; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 179; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 180; CHECK-NEXT: ret 181 %evec = fptoui <vscale x 2 x half> %va to <vscale x 2 x i16> 182 ret <vscale x 2 x i16> %evec 183} 184 185define <vscale x 2 x i32> @vfptosi_nxv2f16_nxv2i32(<vscale x 2 x half> %va) { 186; CHECK-LABEL: vfptosi_nxv2f16_nxv2i32: 187; CHECK: # %bb.0: 188; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 189; CHECK-NEXT: vfwcvt.rtz.x.f.v v9, v8 190; CHECK-NEXT: vmv1r.v v8, v9 191; CHECK-NEXT: ret 192 %evec = fptosi <vscale x 2 x half> %va to <vscale x 2 x i32> 193 ret <vscale x 2 x i32> %evec 194} 195 196define <vscale x 2 x i32> @vfptoui_nxv2f16_nxv2i32(<vscale x 2 x half> %va) { 197; CHECK-LABEL: vfptoui_nxv2f16_nxv2i32: 198; CHECK: # %bb.0: 199; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 200; CHECK-NEXT: vfwcvt.rtz.xu.f.v v9, v8 201; CHECK-NEXT: vmv1r.v v8, v9 202; CHECK-NEXT: ret 203 %evec = fptoui <vscale x 2 x half> %va to <vscale x 2 x i32> 204 ret <vscale x 2 x i32> %evec 205} 206 207define <vscale x 2 x i64> @vfptosi_nxv2f16_nxv2i64(<vscale x 2 x half> %va) { 208; CHECK-LABEL: vfptosi_nxv2f16_nxv2i64: 209; CHECK: # %bb.0: 210; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 211; CHECK-NEXT: vfwcvt.f.f.v v10, v8 212; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, mu 213; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v10 214; CHECK-NEXT: ret 215 %evec = fptosi <vscale x 2 x half> %va to <vscale x 2 x i64> 216 ret <vscale x 2 x i64> %evec 217} 218 219define <vscale x 2 x i64> @vfptoui_nxv2f16_nxv2i64(<vscale x 2 x half> %va) { 220; CHECK-LABEL: vfptoui_nxv2f16_nxv2i64: 221; CHECK: # %bb.0: 222; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 223; CHECK-NEXT: vfwcvt.f.f.v v10, v8 224; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, mu 225; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v10 226; CHECK-NEXT: ret 227 %evec = fptoui <vscale x 2 x half> %va to <vscale x 2 x i64> 228 ret <vscale x 2 x i64> %evec 229} 230 231define <vscale x 4 x i1> @vfptosi_nxv4f16_nxv4i1(<vscale x 4 x half> %va) { 232; CHECK-LABEL: vfptosi_nxv4f16_nxv4i1: 233; CHECK: # %bb.0: 234; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu 235; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 236; CHECK-NEXT: vand.vi v8, v9, 1 237; CHECK-NEXT: vmsne.vi v0, v8, 0 238; CHECK-NEXT: ret 239 %evec = fptosi <vscale x 4 x half> %va to <vscale x 4 x i1> 240 ret <vscale x 4 x i1> %evec 241} 242 243define <vscale x 4 x i1> @vfptoui_nxv4f16_nxv4i1(<vscale x 4 x half> %va) { 244; CHECK-LABEL: vfptoui_nxv4f16_nxv4i1: 245; CHECK: # %bb.0: 246; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu 247; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 248; CHECK-NEXT: vand.vi v8, v9, 1 249; CHECK-NEXT: vmsne.vi v0, v8, 0 250; CHECK-NEXT: ret 251 %evec = fptoui <vscale x 4 x half> %va to <vscale x 4 x i1> 252 ret <vscale x 4 x i1> %evec 253} 254 255define <vscale x 4 x i8> @vfptosi_nxv4f16_nxv4i8(<vscale x 4 x half> %va) { 256; CHECK-LABEL: vfptosi_nxv4f16_nxv4i8: 257; CHECK: # %bb.0: 258; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu 259; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 260; CHECK-NEXT: vmv1r.v v8, v9 261; CHECK-NEXT: ret 262 %evec = fptosi <vscale x 4 x half> %va to <vscale x 4 x i8> 263 ret <vscale x 4 x i8> %evec 264} 265 266define <vscale x 4 x i8> @vfptoui_nxv4f16_nxv4i8(<vscale x 4 x half> %va) { 267; CHECK-LABEL: vfptoui_nxv4f16_nxv4i8: 268; CHECK: # %bb.0: 269; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, mu 270; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 271; CHECK-NEXT: vmv1r.v v8, v9 272; CHECK-NEXT: ret 273 %evec = fptoui <vscale x 4 x half> %va to <vscale x 4 x i8> 274 ret <vscale x 4 x i8> %evec 275} 276 277define <vscale x 4 x i16> @vfptosi_nxv4f16_nxv4i16(<vscale x 4 x half> %va) { 278; CHECK-LABEL: vfptosi_nxv4f16_nxv4i16: 279; CHECK: # %bb.0: 280; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 281; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 282; CHECK-NEXT: ret 283 %evec = fptosi <vscale x 4 x half> %va to <vscale x 4 x i16> 284 ret <vscale x 4 x i16> %evec 285} 286 287define <vscale x 4 x i16> @vfptoui_nxv4f16_nxv4i16(<vscale x 4 x half> %va) { 288; CHECK-LABEL: vfptoui_nxv4f16_nxv4i16: 289; CHECK: # %bb.0: 290; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 291; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 292; CHECK-NEXT: ret 293 %evec = fptoui <vscale x 4 x half> %va to <vscale x 4 x i16> 294 ret <vscale x 4 x i16> %evec 295} 296 297define <vscale x 4 x i32> @vfptosi_nxv4f16_nxv4i32(<vscale x 4 x half> %va) { 298; CHECK-LABEL: vfptosi_nxv4f16_nxv4i32: 299; CHECK: # %bb.0: 300; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 301; CHECK-NEXT: vfwcvt.rtz.x.f.v v10, v8 302; CHECK-NEXT: vmv2r.v v8, v10 303; CHECK-NEXT: ret 304 %evec = fptosi <vscale x 4 x half> %va to <vscale x 4 x i32> 305 ret <vscale x 4 x i32> %evec 306} 307 308define <vscale x 4 x i32> @vfptoui_nxv4f16_nxv4i32(<vscale x 4 x half> %va) { 309; CHECK-LABEL: vfptoui_nxv4f16_nxv4i32: 310; CHECK: # %bb.0: 311; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 312; CHECK-NEXT: vfwcvt.rtz.xu.f.v v10, v8 313; CHECK-NEXT: vmv2r.v v8, v10 314; CHECK-NEXT: ret 315 %evec = fptoui <vscale x 4 x half> %va to <vscale x 4 x i32> 316 ret <vscale x 4 x i32> %evec 317} 318 319define <vscale x 4 x i64> @vfptosi_nxv4f16_nxv4i64(<vscale x 4 x half> %va) { 320; CHECK-LABEL: vfptosi_nxv4f16_nxv4i64: 321; CHECK: # %bb.0: 322; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 323; CHECK-NEXT: vfwcvt.f.f.v v12, v8 324; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, mu 325; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v12 326; CHECK-NEXT: ret 327 %evec = fptosi <vscale x 4 x half> %va to <vscale x 4 x i64> 328 ret <vscale x 4 x i64> %evec 329} 330 331define <vscale x 4 x i64> @vfptoui_nxv4f16_nxv4i64(<vscale x 4 x half> %va) { 332; CHECK-LABEL: vfptoui_nxv4f16_nxv4i64: 333; CHECK: # %bb.0: 334; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 335; CHECK-NEXT: vfwcvt.f.f.v v12, v8 336; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, mu 337; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v12 338; CHECK-NEXT: ret 339 %evec = fptoui <vscale x 4 x half> %va to <vscale x 4 x i64> 340 ret <vscale x 4 x i64> %evec 341} 342 343define <vscale x 8 x i1> @vfptosi_nxv8f16_nxv8i1(<vscale x 8 x half> %va) { 344; CHECK-LABEL: vfptosi_nxv8f16_nxv8i1: 345; CHECK: # %bb.0: 346; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 347; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 348; CHECK-NEXT: vand.vi v8, v10, 1 349; CHECK-NEXT: vmsne.vi v0, v8, 0 350; CHECK-NEXT: ret 351 %evec = fptosi <vscale x 8 x half> %va to <vscale x 8 x i1> 352 ret <vscale x 8 x i1> %evec 353} 354 355define <vscale x 8 x i1> @vfptoui_nxv8f16_nxv8i1(<vscale x 8 x half> %va) { 356; CHECK-LABEL: vfptoui_nxv8f16_nxv8i1: 357; CHECK: # %bb.0: 358; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 359; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 360; CHECK-NEXT: vand.vi v8, v10, 1 361; CHECK-NEXT: vmsne.vi v0, v8, 0 362; CHECK-NEXT: ret 363 %evec = fptoui <vscale x 8 x half> %va to <vscale x 8 x i1> 364 ret <vscale x 8 x i1> %evec 365} 366 367define <vscale x 8 x i8> @vfptosi_nxv8f16_nxv8i8(<vscale x 8 x half> %va) { 368; CHECK-LABEL: vfptosi_nxv8f16_nxv8i8: 369; CHECK: # %bb.0: 370; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 371; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 372; CHECK-NEXT: vmv.v.v v8, v10 373; CHECK-NEXT: ret 374 %evec = fptosi <vscale x 8 x half> %va to <vscale x 8 x i8> 375 ret <vscale x 8 x i8> %evec 376} 377 378define <vscale x 8 x i8> @vfptoui_nxv8f16_nxv8i8(<vscale x 8 x half> %va) { 379; CHECK-LABEL: vfptoui_nxv8f16_nxv8i8: 380; CHECK: # %bb.0: 381; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, mu 382; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 383; CHECK-NEXT: vmv.v.v v8, v10 384; CHECK-NEXT: ret 385 %evec = fptoui <vscale x 8 x half> %va to <vscale x 8 x i8> 386 ret <vscale x 8 x i8> %evec 387} 388 389define <vscale x 8 x i16> @vfptosi_nxv8f16_nxv8i16(<vscale x 8 x half> %va) { 390; CHECK-LABEL: vfptosi_nxv8f16_nxv8i16: 391; CHECK: # %bb.0: 392; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 393; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 394; CHECK-NEXT: ret 395 %evec = fptosi <vscale x 8 x half> %va to <vscale x 8 x i16> 396 ret <vscale x 8 x i16> %evec 397} 398 399define <vscale x 8 x i16> @vfptoui_nxv8f16_nxv8i16(<vscale x 8 x half> %va) { 400; CHECK-LABEL: vfptoui_nxv8f16_nxv8i16: 401; CHECK: # %bb.0: 402; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 403; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 404; CHECK-NEXT: ret 405 %evec = fptoui <vscale x 8 x half> %va to <vscale x 8 x i16> 406 ret <vscale x 8 x i16> %evec 407} 408 409define <vscale x 8 x i32> @vfptosi_nxv8f16_nxv8i32(<vscale x 8 x half> %va) { 410; CHECK-LABEL: vfptosi_nxv8f16_nxv8i32: 411; CHECK: # %bb.0: 412; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 413; CHECK-NEXT: vfwcvt.rtz.x.f.v v12, v8 414; CHECK-NEXT: vmv4r.v v8, v12 415; CHECK-NEXT: ret 416 %evec = fptosi <vscale x 8 x half> %va to <vscale x 8 x i32> 417 ret <vscale x 8 x i32> %evec 418} 419 420define <vscale x 8 x i32> @vfptoui_nxv8f16_nxv8i32(<vscale x 8 x half> %va) { 421; CHECK-LABEL: vfptoui_nxv8f16_nxv8i32: 422; CHECK: # %bb.0: 423; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 424; CHECK-NEXT: vfwcvt.rtz.xu.f.v v12, v8 425; CHECK-NEXT: vmv4r.v v8, v12 426; CHECK-NEXT: ret 427 %evec = fptoui <vscale x 8 x half> %va to <vscale x 8 x i32> 428 ret <vscale x 8 x i32> %evec 429} 430 431define <vscale x 8 x i64> @vfptosi_nxv8f16_nxv8i64(<vscale x 8 x half> %va) { 432; CHECK-LABEL: vfptosi_nxv8f16_nxv8i64: 433; CHECK: # %bb.0: 434; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 435; CHECK-NEXT: vfwcvt.f.f.v v16, v8 436; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, mu 437; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v16 438; CHECK-NEXT: ret 439 %evec = fptosi <vscale x 8 x half> %va to <vscale x 8 x i64> 440 ret <vscale x 8 x i64> %evec 441} 442 443define <vscale x 8 x i64> @vfptoui_nxv8f16_nxv8i64(<vscale x 8 x half> %va) { 444; CHECK-LABEL: vfptoui_nxv8f16_nxv8i64: 445; CHECK: # %bb.0: 446; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 447; CHECK-NEXT: vfwcvt.f.f.v v16, v8 448; CHECK-NEXT: vsetvli zero, zero, e32, m4, ta, mu 449; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v16 450; CHECK-NEXT: ret 451 %evec = fptoui <vscale x 8 x half> %va to <vscale x 8 x i64> 452 ret <vscale x 8 x i64> %evec 453} 454 455define <vscale x 16 x i1> @vfptosi_nxv16f16_nxv16i1(<vscale x 16 x half> %va) { 456; CHECK-LABEL: vfptosi_nxv16f16_nxv16i1: 457; CHECK: # %bb.0: 458; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu 459; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 460; CHECK-NEXT: vand.vi v8, v12, 1 461; CHECK-NEXT: vmsne.vi v0, v8, 0 462; CHECK-NEXT: ret 463 %evec = fptosi <vscale x 16 x half> %va to <vscale x 16 x i1> 464 ret <vscale x 16 x i1> %evec 465} 466 467define <vscale x 16 x i1> @vfptoui_nxv16f16_nxv16i1(<vscale x 16 x half> %va) { 468; CHECK-LABEL: vfptoui_nxv16f16_nxv16i1: 469; CHECK: # %bb.0: 470; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu 471; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 472; CHECK-NEXT: vand.vi v8, v12, 1 473; CHECK-NEXT: vmsne.vi v0, v8, 0 474; CHECK-NEXT: ret 475 %evec = fptoui <vscale x 16 x half> %va to <vscale x 16 x i1> 476 ret <vscale x 16 x i1> %evec 477} 478 479define <vscale x 16 x i8> @vfptosi_nxv16f16_nxv16i8(<vscale x 16 x half> %va) { 480; CHECK-LABEL: vfptosi_nxv16f16_nxv16i8: 481; CHECK: # %bb.0: 482; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu 483; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 484; CHECK-NEXT: vmv.v.v v8, v12 485; CHECK-NEXT: ret 486 %evec = fptosi <vscale x 16 x half> %va to <vscale x 16 x i8> 487 ret <vscale x 16 x i8> %evec 488} 489 490define <vscale x 16 x i8> @vfptoui_nxv16f16_nxv16i8(<vscale x 16 x half> %va) { 491; CHECK-LABEL: vfptoui_nxv16f16_nxv16i8: 492; CHECK: # %bb.0: 493; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, mu 494; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 495; CHECK-NEXT: vmv.v.v v8, v12 496; CHECK-NEXT: ret 497 %evec = fptoui <vscale x 16 x half> %va to <vscale x 16 x i8> 498 ret <vscale x 16 x i8> %evec 499} 500 501define <vscale x 16 x i16> @vfptosi_nxv16f16_nxv16i16(<vscale x 16 x half> %va) { 502; CHECK-LABEL: vfptosi_nxv16f16_nxv16i16: 503; CHECK: # %bb.0: 504; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 505; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 506; CHECK-NEXT: ret 507 %evec = fptosi <vscale x 16 x half> %va to <vscale x 16 x i16> 508 ret <vscale x 16 x i16> %evec 509} 510 511define <vscale x 16 x i16> @vfptoui_nxv16f16_nxv16i16(<vscale x 16 x half> %va) { 512; CHECK-LABEL: vfptoui_nxv16f16_nxv16i16: 513; CHECK: # %bb.0: 514; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 515; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 516; CHECK-NEXT: ret 517 %evec = fptoui <vscale x 16 x half> %va to <vscale x 16 x i16> 518 ret <vscale x 16 x i16> %evec 519} 520 521define <vscale x 16 x i32> @vfptosi_nxv16f16_nxv16i32(<vscale x 16 x half> %va) { 522; CHECK-LABEL: vfptosi_nxv16f16_nxv16i32: 523; CHECK: # %bb.0: 524; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 525; CHECK-NEXT: vfwcvt.rtz.x.f.v v16, v8 526; CHECK-NEXT: vmv8r.v v8, v16 527; CHECK-NEXT: ret 528 %evec = fptosi <vscale x 16 x half> %va to <vscale x 16 x i32> 529 ret <vscale x 16 x i32> %evec 530} 531 532define <vscale x 16 x i32> @vfptoui_nxv16f16_nxv16i32(<vscale x 16 x half> %va) { 533; CHECK-LABEL: vfptoui_nxv16f16_nxv16i32: 534; CHECK: # %bb.0: 535; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 536; CHECK-NEXT: vfwcvt.rtz.xu.f.v v16, v8 537; CHECK-NEXT: vmv8r.v v8, v16 538; CHECK-NEXT: ret 539 %evec = fptoui <vscale x 16 x half> %va to <vscale x 16 x i32> 540 ret <vscale x 16 x i32> %evec 541} 542 543define <vscale x 32 x i1> @vfptosi_nxv32f16_nxv32i1(<vscale x 32 x half> %va) { 544; CHECK-LABEL: vfptosi_nxv32f16_nxv32i1: 545; CHECK: # %bb.0: 546; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu 547; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8 548; CHECK-NEXT: vand.vi v8, v16, 1 549; CHECK-NEXT: vmsne.vi v0, v8, 0 550; CHECK-NEXT: ret 551 %evec = fptosi <vscale x 32 x half> %va to <vscale x 32 x i1> 552 ret <vscale x 32 x i1> %evec 553} 554 555define <vscale x 32 x i1> @vfptoui_nxv32f16_nxv32i1(<vscale x 32 x half> %va) { 556; CHECK-LABEL: vfptoui_nxv32f16_nxv32i1: 557; CHECK: # %bb.0: 558; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu 559; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8 560; CHECK-NEXT: vand.vi v8, v16, 1 561; CHECK-NEXT: vmsne.vi v0, v8, 0 562; CHECK-NEXT: ret 563 %evec = fptoui <vscale x 32 x half> %va to <vscale x 32 x i1> 564 ret <vscale x 32 x i1> %evec 565} 566 567define <vscale x 32 x i8> @vfptosi_nxv32f16_nxv32i8(<vscale x 32 x half> %va) { 568; CHECK-LABEL: vfptosi_nxv32f16_nxv32i8: 569; CHECK: # %bb.0: 570; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu 571; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8 572; CHECK-NEXT: vmv.v.v v8, v16 573; CHECK-NEXT: ret 574 %evec = fptosi <vscale x 32 x half> %va to <vscale x 32 x i8> 575 ret <vscale x 32 x i8> %evec 576} 577 578define <vscale x 32 x i8> @vfptoui_nxv32f16_nxv32i8(<vscale x 32 x half> %va) { 579; CHECK-LABEL: vfptoui_nxv32f16_nxv32i8: 580; CHECK: # %bb.0: 581; CHECK-NEXT: vsetvli a0, zero, e8, m4, ta, mu 582; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8 583; CHECK-NEXT: vmv.v.v v8, v16 584; CHECK-NEXT: ret 585 %evec = fptoui <vscale x 32 x half> %va to <vscale x 32 x i8> 586 ret <vscale x 32 x i8> %evec 587} 588 589define <vscale x 32 x i16> @vfptosi_nxv32f16_nxv32i16(<vscale x 32 x half> %va) { 590; CHECK-LABEL: vfptosi_nxv32f16_nxv32i16: 591; CHECK: # %bb.0: 592; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 593; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 594; CHECK-NEXT: ret 595 %evec = fptosi <vscale x 32 x half> %va to <vscale x 32 x i16> 596 ret <vscale x 32 x i16> %evec 597} 598 599define <vscale x 32 x i16> @vfptoui_nxv32f16_nxv32i16(<vscale x 32 x half> %va) { 600; CHECK-LABEL: vfptoui_nxv32f16_nxv32i16: 601; CHECK: # %bb.0: 602; CHECK-NEXT: vsetvli a0, zero, e16, m8, ta, mu 603; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 604; CHECK-NEXT: ret 605 %evec = fptoui <vscale x 32 x half> %va to <vscale x 32 x i16> 606 ret <vscale x 32 x i16> %evec 607} 608 609define <vscale x 1 x i1> @vfptosi_nxv1f32_nxv1i1(<vscale x 1 x float> %va) { 610; CHECK-LABEL: vfptosi_nxv1f32_nxv1i1: 611; CHECK: # %bb.0: 612; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 613; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 614; CHECK-NEXT: vand.vi v8, v9, 1 615; CHECK-NEXT: vmsne.vi v0, v8, 0 616; CHECK-NEXT: ret 617 %evec = fptosi <vscale x 1 x float> %va to <vscale x 1 x i1> 618 ret <vscale x 1 x i1> %evec 619} 620 621define <vscale x 1 x i1> @vfptoui_nxv1f32_nxv1i1(<vscale x 1 x float> %va) { 622; CHECK-LABEL: vfptoui_nxv1f32_nxv1i1: 623; CHECK: # %bb.0: 624; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 625; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 626; CHECK-NEXT: vand.vi v8, v9, 1 627; CHECK-NEXT: vmsne.vi v0, v8, 0 628; CHECK-NEXT: ret 629 %evec = fptoui <vscale x 1 x float> %va to <vscale x 1 x i1> 630 ret <vscale x 1 x i1> %evec 631} 632 633define <vscale x 1 x i8> @vfptosi_nxv1f32_nxv1i8(<vscale x 1 x float> %va) { 634; CHECK-LABEL: vfptosi_nxv1f32_nxv1i8: 635; CHECK: # %bb.0: 636; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 637; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 638; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, mu 639; CHECK-NEXT: vnsrl.wx v8, v9, zero 640; CHECK-NEXT: ret 641 %evec = fptosi <vscale x 1 x float> %va to <vscale x 1 x i8> 642 ret <vscale x 1 x i8> %evec 643} 644 645define <vscale x 1 x i8> @vfptoui_nxv1f32_nxv1i8(<vscale x 1 x float> %va) { 646; CHECK-LABEL: vfptoui_nxv1f32_nxv1i8: 647; CHECK: # %bb.0: 648; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 649; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 650; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, mu 651; CHECK-NEXT: vnsrl.wx v8, v9, zero 652; CHECK-NEXT: ret 653 %evec = fptoui <vscale x 1 x float> %va to <vscale x 1 x i8> 654 ret <vscale x 1 x i8> %evec 655} 656 657define <vscale x 1 x i16> @vfptosi_nxv1f32_nxv1i16(<vscale x 1 x float> %va) { 658; CHECK-LABEL: vfptosi_nxv1f32_nxv1i16: 659; CHECK: # %bb.0: 660; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 661; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 662; CHECK-NEXT: vmv1r.v v8, v9 663; CHECK-NEXT: ret 664 %evec = fptosi <vscale x 1 x float> %va to <vscale x 1 x i16> 665 ret <vscale x 1 x i16> %evec 666} 667 668define <vscale x 1 x i16> @vfptoui_nxv1f32_nxv1i16(<vscale x 1 x float> %va) { 669; CHECK-LABEL: vfptoui_nxv1f32_nxv1i16: 670; CHECK: # %bb.0: 671; CHECK-NEXT: vsetvli a0, zero, e16, mf4, ta, mu 672; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 673; CHECK-NEXT: vmv1r.v v8, v9 674; CHECK-NEXT: ret 675 %evec = fptoui <vscale x 1 x float> %va to <vscale x 1 x i16> 676 ret <vscale x 1 x i16> %evec 677} 678 679define <vscale x 1 x i32> @vfptosi_nxv1f32_nxv1i32(<vscale x 1 x float> %va) { 680; CHECK-LABEL: vfptosi_nxv1f32_nxv1i32: 681; CHECK: # %bb.0: 682; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 683; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 684; CHECK-NEXT: ret 685 %evec = fptosi <vscale x 1 x float> %va to <vscale x 1 x i32> 686 ret <vscale x 1 x i32> %evec 687} 688 689define <vscale x 1 x i32> @vfptoui_nxv1f32_nxv1i32(<vscale x 1 x float> %va) { 690; CHECK-LABEL: vfptoui_nxv1f32_nxv1i32: 691; CHECK: # %bb.0: 692; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 693; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 694; CHECK-NEXT: ret 695 %evec = fptoui <vscale x 1 x float> %va to <vscale x 1 x i32> 696 ret <vscale x 1 x i32> %evec 697} 698 699define <vscale x 1 x i64> @vfptosi_nxv1f32_nxv1i64(<vscale x 1 x float> %va) { 700; CHECK-LABEL: vfptosi_nxv1f32_nxv1i64: 701; CHECK: # %bb.0: 702; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 703; CHECK-NEXT: vfwcvt.rtz.x.f.v v9, v8 704; CHECK-NEXT: vmv1r.v v8, v9 705; CHECK-NEXT: ret 706 %evec = fptosi <vscale x 1 x float> %va to <vscale x 1 x i64> 707 ret <vscale x 1 x i64> %evec 708} 709 710define <vscale x 1 x i64> @vfptoui_nxv1f32_nxv1i64(<vscale x 1 x float> %va) { 711; CHECK-LABEL: vfptoui_nxv1f32_nxv1i64: 712; CHECK: # %bb.0: 713; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 714; CHECK-NEXT: vfwcvt.rtz.xu.f.v v9, v8 715; CHECK-NEXT: vmv1r.v v8, v9 716; CHECK-NEXT: ret 717 %evec = fptoui <vscale x 1 x float> %va to <vscale x 1 x i64> 718 ret <vscale x 1 x i64> %evec 719} 720 721define <vscale x 2 x i1> @vfptosi_nxv2f32_nxv2i1(<vscale x 2 x float> %va) { 722; CHECK-LABEL: vfptosi_nxv2f32_nxv2i1: 723; CHECK: # %bb.0: 724; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 725; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 726; CHECK-NEXT: vand.vi v8, v9, 1 727; CHECK-NEXT: vmsne.vi v0, v8, 0 728; CHECK-NEXT: ret 729 %evec = fptosi <vscale x 2 x float> %va to <vscale x 2 x i1> 730 ret <vscale x 2 x i1> %evec 731} 732 733define <vscale x 2 x i1> @vfptoui_nxv2f32_nxv2i1(<vscale x 2 x float> %va) { 734; CHECK-LABEL: vfptoui_nxv2f32_nxv2i1: 735; CHECK: # %bb.0: 736; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 737; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 738; CHECK-NEXT: vand.vi v8, v9, 1 739; CHECK-NEXT: vmsne.vi v0, v8, 0 740; CHECK-NEXT: ret 741 %evec = fptoui <vscale x 2 x float> %va to <vscale x 2 x i1> 742 ret <vscale x 2 x i1> %evec 743} 744 745define <vscale x 2 x i8> @vfptosi_nxv2f32_nxv2i8(<vscale x 2 x float> %va) { 746; CHECK-LABEL: vfptosi_nxv2f32_nxv2i8: 747; CHECK: # %bb.0: 748; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 749; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 750; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, mu 751; CHECK-NEXT: vnsrl.wx v8, v9, zero 752; CHECK-NEXT: ret 753 %evec = fptosi <vscale x 2 x float> %va to <vscale x 2 x i8> 754 ret <vscale x 2 x i8> %evec 755} 756 757define <vscale x 2 x i8> @vfptoui_nxv2f32_nxv2i8(<vscale x 2 x float> %va) { 758; CHECK-LABEL: vfptoui_nxv2f32_nxv2i8: 759; CHECK: # %bb.0: 760; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 761; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 762; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, mu 763; CHECK-NEXT: vnsrl.wx v8, v9, zero 764; CHECK-NEXT: ret 765 %evec = fptoui <vscale x 2 x float> %va to <vscale x 2 x i8> 766 ret <vscale x 2 x i8> %evec 767} 768 769define <vscale x 2 x i16> @vfptosi_nxv2f32_nxv2i16(<vscale x 2 x float> %va) { 770; CHECK-LABEL: vfptosi_nxv2f32_nxv2i16: 771; CHECK: # %bb.0: 772; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 773; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 774; CHECK-NEXT: vmv1r.v v8, v9 775; CHECK-NEXT: ret 776 %evec = fptosi <vscale x 2 x float> %va to <vscale x 2 x i16> 777 ret <vscale x 2 x i16> %evec 778} 779 780define <vscale x 2 x i16> @vfptoui_nxv2f32_nxv2i16(<vscale x 2 x float> %va) { 781; CHECK-LABEL: vfptoui_nxv2f32_nxv2i16: 782; CHECK: # %bb.0: 783; CHECK-NEXT: vsetvli a0, zero, e16, mf2, ta, mu 784; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 785; CHECK-NEXT: vmv1r.v v8, v9 786; CHECK-NEXT: ret 787 %evec = fptoui <vscale x 2 x float> %va to <vscale x 2 x i16> 788 ret <vscale x 2 x i16> %evec 789} 790 791define <vscale x 2 x i32> @vfptosi_nxv2f32_nxv2i32(<vscale x 2 x float> %va) { 792; CHECK-LABEL: vfptosi_nxv2f32_nxv2i32: 793; CHECK: # %bb.0: 794; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 795; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 796; CHECK-NEXT: ret 797 %evec = fptosi <vscale x 2 x float> %va to <vscale x 2 x i32> 798 ret <vscale x 2 x i32> %evec 799} 800 801define <vscale x 2 x i32> @vfptoui_nxv2f32_nxv2i32(<vscale x 2 x float> %va) { 802; CHECK-LABEL: vfptoui_nxv2f32_nxv2i32: 803; CHECK: # %bb.0: 804; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 805; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 806; CHECK-NEXT: ret 807 %evec = fptoui <vscale x 2 x float> %va to <vscale x 2 x i32> 808 ret <vscale x 2 x i32> %evec 809} 810 811define <vscale x 2 x i64> @vfptosi_nxv2f32_nxv2i64(<vscale x 2 x float> %va) { 812; CHECK-LABEL: vfptosi_nxv2f32_nxv2i64: 813; CHECK: # %bb.0: 814; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 815; CHECK-NEXT: vfwcvt.rtz.x.f.v v10, v8 816; CHECK-NEXT: vmv2r.v v8, v10 817; CHECK-NEXT: ret 818 %evec = fptosi <vscale x 2 x float> %va to <vscale x 2 x i64> 819 ret <vscale x 2 x i64> %evec 820} 821 822define <vscale x 2 x i64> @vfptoui_nxv2f32_nxv2i64(<vscale x 2 x float> %va) { 823; CHECK-LABEL: vfptoui_nxv2f32_nxv2i64: 824; CHECK: # %bb.0: 825; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 826; CHECK-NEXT: vfwcvt.rtz.xu.f.v v10, v8 827; CHECK-NEXT: vmv2r.v v8, v10 828; CHECK-NEXT: ret 829 %evec = fptoui <vscale x 2 x float> %va to <vscale x 2 x i64> 830 ret <vscale x 2 x i64> %evec 831} 832 833define <vscale x 4 x i1> @vfptosi_nxv4f32_nxv4i1(<vscale x 4 x float> %va) { 834; CHECK-LABEL: vfptosi_nxv4f32_nxv4i1: 835; CHECK: # %bb.0: 836; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 837; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 838; CHECK-NEXT: vand.vi v8, v10, 1 839; CHECK-NEXT: vmsne.vi v0, v8, 0 840; CHECK-NEXT: ret 841 %evec = fptosi <vscale x 4 x float> %va to <vscale x 4 x i1> 842 ret <vscale x 4 x i1> %evec 843} 844 845define <vscale x 4 x i1> @vfptoui_nxv4f32_nxv4i1(<vscale x 4 x float> %va) { 846; CHECK-LABEL: vfptoui_nxv4f32_nxv4i1: 847; CHECK: # %bb.0: 848; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 849; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 850; CHECK-NEXT: vand.vi v8, v10, 1 851; CHECK-NEXT: vmsne.vi v0, v8, 0 852; CHECK-NEXT: ret 853 %evec = fptoui <vscale x 4 x float> %va to <vscale x 4 x i1> 854 ret <vscale x 4 x i1> %evec 855} 856 857define <vscale x 4 x i8> @vfptosi_nxv4f32_nxv4i8(<vscale x 4 x float> %va) { 858; CHECK-LABEL: vfptosi_nxv4f32_nxv4i8: 859; CHECK: # %bb.0: 860; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 861; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 862; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, mu 863; CHECK-NEXT: vnsrl.wx v8, v10, zero 864; CHECK-NEXT: ret 865 %evec = fptosi <vscale x 4 x float> %va to <vscale x 4 x i8> 866 ret <vscale x 4 x i8> %evec 867} 868 869define <vscale x 4 x i8> @vfptoui_nxv4f32_nxv4i8(<vscale x 4 x float> %va) { 870; CHECK-LABEL: vfptoui_nxv4f32_nxv4i8: 871; CHECK: # %bb.0: 872; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 873; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 874; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, mu 875; CHECK-NEXT: vnsrl.wx v8, v10, zero 876; CHECK-NEXT: ret 877 %evec = fptoui <vscale x 4 x float> %va to <vscale x 4 x i8> 878 ret <vscale x 4 x i8> %evec 879} 880 881define <vscale x 4 x i16> @vfptosi_nxv4f32_nxv4i16(<vscale x 4 x float> %va) { 882; CHECK-LABEL: vfptosi_nxv4f32_nxv4i16: 883; CHECK: # %bb.0: 884; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 885; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 886; CHECK-NEXT: vmv.v.v v8, v10 887; CHECK-NEXT: ret 888 %evec = fptosi <vscale x 4 x float> %va to <vscale x 4 x i16> 889 ret <vscale x 4 x i16> %evec 890} 891 892define <vscale x 4 x i16> @vfptoui_nxv4f32_nxv4i16(<vscale x 4 x float> %va) { 893; CHECK-LABEL: vfptoui_nxv4f32_nxv4i16: 894; CHECK: # %bb.0: 895; CHECK-NEXT: vsetvli a0, zero, e16, m1, ta, mu 896; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 897; CHECK-NEXT: vmv.v.v v8, v10 898; CHECK-NEXT: ret 899 %evec = fptoui <vscale x 4 x float> %va to <vscale x 4 x i16> 900 ret <vscale x 4 x i16> %evec 901} 902 903define <vscale x 4 x i32> @vfptosi_nxv4f32_nxv4i32(<vscale x 4 x float> %va) { 904; CHECK-LABEL: vfptosi_nxv4f32_nxv4i32: 905; CHECK: # %bb.0: 906; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 907; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 908; CHECK-NEXT: ret 909 %evec = fptosi <vscale x 4 x float> %va to <vscale x 4 x i32> 910 ret <vscale x 4 x i32> %evec 911} 912 913define <vscale x 4 x i32> @vfptoui_nxv4f32_nxv4i32(<vscale x 4 x float> %va) { 914; CHECK-LABEL: vfptoui_nxv4f32_nxv4i32: 915; CHECK: # %bb.0: 916; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 917; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 918; CHECK-NEXT: ret 919 %evec = fptoui <vscale x 4 x float> %va to <vscale x 4 x i32> 920 ret <vscale x 4 x i32> %evec 921} 922 923define <vscale x 4 x i64> @vfptosi_nxv4f32_nxv4i64(<vscale x 4 x float> %va) { 924; CHECK-LABEL: vfptosi_nxv4f32_nxv4i64: 925; CHECK: # %bb.0: 926; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 927; CHECK-NEXT: vfwcvt.rtz.x.f.v v12, v8 928; CHECK-NEXT: vmv4r.v v8, v12 929; CHECK-NEXT: ret 930 %evec = fptosi <vscale x 4 x float> %va to <vscale x 4 x i64> 931 ret <vscale x 4 x i64> %evec 932} 933 934define <vscale x 4 x i64> @vfptoui_nxv4f32_nxv4i64(<vscale x 4 x float> %va) { 935; CHECK-LABEL: vfptoui_nxv4f32_nxv4i64: 936; CHECK: # %bb.0: 937; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 938; CHECK-NEXT: vfwcvt.rtz.xu.f.v v12, v8 939; CHECK-NEXT: vmv4r.v v8, v12 940; CHECK-NEXT: ret 941 %evec = fptoui <vscale x 4 x float> %va to <vscale x 4 x i64> 942 ret <vscale x 4 x i64> %evec 943} 944 945define <vscale x 8 x i1> @vfptosi_nxv8f32_nxv8i1(<vscale x 8 x float> %va) { 946; CHECK-LABEL: vfptosi_nxv8f32_nxv8i1: 947; CHECK: # %bb.0: 948; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 949; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 950; CHECK-NEXT: vand.vi v8, v12, 1 951; CHECK-NEXT: vmsne.vi v0, v8, 0 952; CHECK-NEXT: ret 953 %evec = fptosi <vscale x 8 x float> %va to <vscale x 8 x i1> 954 ret <vscale x 8 x i1> %evec 955} 956 957define <vscale x 8 x i1> @vfptoui_nxv8f32_nxv8i1(<vscale x 8 x float> %va) { 958; CHECK-LABEL: vfptoui_nxv8f32_nxv8i1: 959; CHECK: # %bb.0: 960; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 961; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 962; CHECK-NEXT: vand.vi v8, v12, 1 963; CHECK-NEXT: vmsne.vi v0, v8, 0 964; CHECK-NEXT: ret 965 %evec = fptoui <vscale x 8 x float> %va to <vscale x 8 x i1> 966 ret <vscale x 8 x i1> %evec 967} 968 969define <vscale x 8 x i8> @vfptosi_nxv8f32_nxv8i8(<vscale x 8 x float> %va) { 970; CHECK-LABEL: vfptosi_nxv8f32_nxv8i8: 971; CHECK: # %bb.0: 972; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 973; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 974; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, mu 975; CHECK-NEXT: vnsrl.wx v8, v12, zero 976; CHECK-NEXT: ret 977 %evec = fptosi <vscale x 8 x float> %va to <vscale x 8 x i8> 978 ret <vscale x 8 x i8> %evec 979} 980 981define <vscale x 8 x i8> @vfptoui_nxv8f32_nxv8i8(<vscale x 8 x float> %va) { 982; CHECK-LABEL: vfptoui_nxv8f32_nxv8i8: 983; CHECK: # %bb.0: 984; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 985; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 986; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, mu 987; CHECK-NEXT: vnsrl.wx v8, v12, zero 988; CHECK-NEXT: ret 989 %evec = fptoui <vscale x 8 x float> %va to <vscale x 8 x i8> 990 ret <vscale x 8 x i8> %evec 991} 992 993define <vscale x 8 x i16> @vfptosi_nxv8f32_nxv8i16(<vscale x 8 x float> %va) { 994; CHECK-LABEL: vfptosi_nxv8f32_nxv8i16: 995; CHECK: # %bb.0: 996; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 997; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 998; CHECK-NEXT: vmv.v.v v8, v12 999; CHECK-NEXT: ret 1000 %evec = fptosi <vscale x 8 x float> %va to <vscale x 8 x i16> 1001 ret <vscale x 8 x i16> %evec 1002} 1003 1004define <vscale x 8 x i16> @vfptoui_nxv8f32_nxv8i16(<vscale x 8 x float> %va) { 1005; CHECK-LABEL: vfptoui_nxv8f32_nxv8i16: 1006; CHECK: # %bb.0: 1007; CHECK-NEXT: vsetvli a0, zero, e16, m2, ta, mu 1008; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 1009; CHECK-NEXT: vmv.v.v v8, v12 1010; CHECK-NEXT: ret 1011 %evec = fptoui <vscale x 8 x float> %va to <vscale x 8 x i16> 1012 ret <vscale x 8 x i16> %evec 1013} 1014 1015define <vscale x 8 x i32> @vfptosi_nxv8f32_nxv8i32(<vscale x 8 x float> %va) { 1016; CHECK-LABEL: vfptosi_nxv8f32_nxv8i32: 1017; CHECK: # %bb.0: 1018; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1019; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 1020; CHECK-NEXT: ret 1021 %evec = fptosi <vscale x 8 x float> %va to <vscale x 8 x i32> 1022 ret <vscale x 8 x i32> %evec 1023} 1024 1025define <vscale x 8 x i32> @vfptoui_nxv8f32_nxv8i32(<vscale x 8 x float> %va) { 1026; CHECK-LABEL: vfptoui_nxv8f32_nxv8i32: 1027; CHECK: # %bb.0: 1028; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1029; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 1030; CHECK-NEXT: ret 1031 %evec = fptoui <vscale x 8 x float> %va to <vscale x 8 x i32> 1032 ret <vscale x 8 x i32> %evec 1033} 1034 1035define <vscale x 8 x i64> @vfptosi_nxv8f32_nxv8i64(<vscale x 8 x float> %va) { 1036; CHECK-LABEL: vfptosi_nxv8f32_nxv8i64: 1037; CHECK: # %bb.0: 1038; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1039; CHECK-NEXT: vfwcvt.rtz.x.f.v v16, v8 1040; CHECK-NEXT: vmv8r.v v8, v16 1041; CHECK-NEXT: ret 1042 %evec = fptosi <vscale x 8 x float> %va to <vscale x 8 x i64> 1043 ret <vscale x 8 x i64> %evec 1044} 1045 1046define <vscale x 8 x i64> @vfptoui_nxv8f32_nxv8i64(<vscale x 8 x float> %va) { 1047; CHECK-LABEL: vfptoui_nxv8f32_nxv8i64: 1048; CHECK: # %bb.0: 1049; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1050; CHECK-NEXT: vfwcvt.rtz.xu.f.v v16, v8 1051; CHECK-NEXT: vmv8r.v v8, v16 1052; CHECK-NEXT: ret 1053 %evec = fptoui <vscale x 8 x float> %va to <vscale x 8 x i64> 1054 ret <vscale x 8 x i64> %evec 1055} 1056 1057define <vscale x 16 x i1> @vfptosi_nxv16f32_nxv16i1(<vscale x 16 x float> %va) { 1058; CHECK-LABEL: vfptosi_nxv16f32_nxv16i1: 1059; CHECK: # %bb.0: 1060; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 1061; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8 1062; CHECK-NEXT: vand.vi v8, v16, 1 1063; CHECK-NEXT: vmsne.vi v0, v8, 0 1064; CHECK-NEXT: ret 1065 %evec = fptosi <vscale x 16 x float> %va to <vscale x 16 x i1> 1066 ret <vscale x 16 x i1> %evec 1067} 1068 1069define <vscale x 16 x i1> @vfptoui_nxv16f32_nxv16i1(<vscale x 16 x float> %va) { 1070; CHECK-LABEL: vfptoui_nxv16f32_nxv16i1: 1071; CHECK: # %bb.0: 1072; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 1073; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8 1074; CHECK-NEXT: vand.vi v8, v16, 1 1075; CHECK-NEXT: vmsne.vi v0, v8, 0 1076; CHECK-NEXT: ret 1077 %evec = fptoui <vscale x 16 x float> %va to <vscale x 16 x i1> 1078 ret <vscale x 16 x i1> %evec 1079} 1080 1081define <vscale x 16 x i8> @vfptosi_nxv16f32_nxv16i8(<vscale x 16 x float> %va) { 1082; CHECK-LABEL: vfptosi_nxv16f32_nxv16i8: 1083; CHECK: # %bb.0: 1084; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 1085; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8 1086; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, mu 1087; CHECK-NEXT: vnsrl.wx v8, v16, zero 1088; CHECK-NEXT: ret 1089 %evec = fptosi <vscale x 16 x float> %va to <vscale x 16 x i8> 1090 ret <vscale x 16 x i8> %evec 1091} 1092 1093define <vscale x 16 x i8> @vfptoui_nxv16f32_nxv16i8(<vscale x 16 x float> %va) { 1094; CHECK-LABEL: vfptoui_nxv16f32_nxv16i8: 1095; CHECK: # %bb.0: 1096; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 1097; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8 1098; CHECK-NEXT: vsetvli zero, zero, e8, m2, ta, mu 1099; CHECK-NEXT: vnsrl.wx v8, v16, zero 1100; CHECK-NEXT: ret 1101 %evec = fptoui <vscale x 16 x float> %va to <vscale x 16 x i8> 1102 ret <vscale x 16 x i8> %evec 1103} 1104 1105define <vscale x 16 x i16> @vfptosi_nxv16f32_nxv16i16(<vscale x 16 x float> %va) { 1106; CHECK-LABEL: vfptosi_nxv16f32_nxv16i16: 1107; CHECK: # %bb.0: 1108; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 1109; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8 1110; CHECK-NEXT: vmv.v.v v8, v16 1111; CHECK-NEXT: ret 1112 %evec = fptosi <vscale x 16 x float> %va to <vscale x 16 x i16> 1113 ret <vscale x 16 x i16> %evec 1114} 1115 1116define <vscale x 16 x i16> @vfptoui_nxv16f32_nxv16i16(<vscale x 16 x float> %va) { 1117; CHECK-LABEL: vfptoui_nxv16f32_nxv16i16: 1118; CHECK: # %bb.0: 1119; CHECK-NEXT: vsetvli a0, zero, e16, m4, ta, mu 1120; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8 1121; CHECK-NEXT: vmv.v.v v8, v16 1122; CHECK-NEXT: ret 1123 %evec = fptoui <vscale x 16 x float> %va to <vscale x 16 x i16> 1124 ret <vscale x 16 x i16> %evec 1125} 1126 1127define <vscale x 16 x i32> @vfptosi_nxv16f32_nxv16i32(<vscale x 16 x float> %va) { 1128; CHECK-LABEL: vfptosi_nxv16f32_nxv16i32: 1129; CHECK: # %bb.0: 1130; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 1131; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 1132; CHECK-NEXT: ret 1133 %evec = fptosi <vscale x 16 x float> %va to <vscale x 16 x i32> 1134 ret <vscale x 16 x i32> %evec 1135} 1136 1137define <vscale x 16 x i32> @vfptoui_nxv16f32_nxv16i32(<vscale x 16 x float> %va) { 1138; CHECK-LABEL: vfptoui_nxv16f32_nxv16i32: 1139; CHECK: # %bb.0: 1140; CHECK-NEXT: vsetvli a0, zero, e32, m8, ta, mu 1141; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 1142; CHECK-NEXT: ret 1143 %evec = fptoui <vscale x 16 x float> %va to <vscale x 16 x i32> 1144 ret <vscale x 16 x i32> %evec 1145} 1146 1147define <vscale x 1 x i1> @vfptosi_nxv1f64_nxv1i1(<vscale x 1 x double> %va) { 1148; CHECK-LABEL: vfptosi_nxv1f64_nxv1i1: 1149; CHECK: # %bb.0: 1150; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1151; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 1152; CHECK-NEXT: vand.vi v8, v9, 1 1153; CHECK-NEXT: vmsne.vi v0, v8, 0 1154; CHECK-NEXT: ret 1155 %evec = fptosi <vscale x 1 x double> %va to <vscale x 1 x i1> 1156 ret <vscale x 1 x i1> %evec 1157} 1158 1159define <vscale x 1 x i1> @vfptoui_nxv1f64_nxv1i1(<vscale x 1 x double> %va) { 1160; CHECK-LABEL: vfptoui_nxv1f64_nxv1i1: 1161; CHECK: # %bb.0: 1162; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1163; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 1164; CHECK-NEXT: vand.vi v8, v9, 1 1165; CHECK-NEXT: vmsne.vi v0, v8, 0 1166; CHECK-NEXT: ret 1167 %evec = fptoui <vscale x 1 x double> %va to <vscale x 1 x i1> 1168 ret <vscale x 1 x i1> %evec 1169} 1170 1171define <vscale x 1 x i8> @vfptosi_nxv1f64_nxv1i8(<vscale x 1 x double> %va) { 1172; CHECK-LABEL: vfptosi_nxv1f64_nxv1i8: 1173; CHECK: # %bb.0: 1174; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1175; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 1176; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu 1177; CHECK-NEXT: vnsrl.wx v8, v9, zero 1178; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, mu 1179; CHECK-NEXT: vnsrl.wx v8, v8, zero 1180; CHECK-NEXT: ret 1181 %evec = fptosi <vscale x 1 x double> %va to <vscale x 1 x i8> 1182 ret <vscale x 1 x i8> %evec 1183} 1184 1185define <vscale x 1 x i8> @vfptoui_nxv1f64_nxv1i8(<vscale x 1 x double> %va) { 1186; CHECK-LABEL: vfptoui_nxv1f64_nxv1i8: 1187; CHECK: # %bb.0: 1188; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1189; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 1190; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu 1191; CHECK-NEXT: vnsrl.wx v8, v9, zero 1192; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, mu 1193; CHECK-NEXT: vnsrl.wx v8, v8, zero 1194; CHECK-NEXT: ret 1195 %evec = fptoui <vscale x 1 x double> %va to <vscale x 1 x i8> 1196 ret <vscale x 1 x i8> %evec 1197} 1198 1199define <vscale x 1 x i16> @vfptosi_nxv1f64_nxv1i16(<vscale x 1 x double> %va) { 1200; CHECK-LABEL: vfptosi_nxv1f64_nxv1i16: 1201; CHECK: # %bb.0: 1202; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1203; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 1204; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu 1205; CHECK-NEXT: vnsrl.wx v8, v9, zero 1206; CHECK-NEXT: ret 1207 %evec = fptosi <vscale x 1 x double> %va to <vscale x 1 x i16> 1208 ret <vscale x 1 x i16> %evec 1209} 1210 1211define <vscale x 1 x i16> @vfptoui_nxv1f64_nxv1i16(<vscale x 1 x double> %va) { 1212; CHECK-LABEL: vfptoui_nxv1f64_nxv1i16: 1213; CHECK: # %bb.0: 1214; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1215; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 1216; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, mu 1217; CHECK-NEXT: vnsrl.wx v8, v9, zero 1218; CHECK-NEXT: ret 1219 %evec = fptoui <vscale x 1 x double> %va to <vscale x 1 x i16> 1220 ret <vscale x 1 x i16> %evec 1221} 1222 1223define <vscale x 1 x i32> @vfptosi_nxv1f64_nxv1i32(<vscale x 1 x double> %va) { 1224; CHECK-LABEL: vfptosi_nxv1f64_nxv1i32: 1225; CHECK: # %bb.0: 1226; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1227; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 1228; CHECK-NEXT: vmv1r.v v8, v9 1229; CHECK-NEXT: ret 1230 %evec = fptosi <vscale x 1 x double> %va to <vscale x 1 x i32> 1231 ret <vscale x 1 x i32> %evec 1232} 1233 1234define <vscale x 1 x i32> @vfptoui_nxv1f64_nxv1i32(<vscale x 1 x double> %va) { 1235; CHECK-LABEL: vfptoui_nxv1f64_nxv1i32: 1236; CHECK: # %bb.0: 1237; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 1238; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 1239; CHECK-NEXT: vmv1r.v v8, v9 1240; CHECK-NEXT: ret 1241 %evec = fptoui <vscale x 1 x double> %va to <vscale x 1 x i32> 1242 ret <vscale x 1 x i32> %evec 1243} 1244 1245define <vscale x 1 x i64> @vfptosi_nxv1f64_nxv1i64(<vscale x 1 x double> %va) { 1246; CHECK-LABEL: vfptosi_nxv1f64_nxv1i64: 1247; CHECK: # %bb.0: 1248; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 1249; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 1250; CHECK-NEXT: ret 1251 %evec = fptosi <vscale x 1 x double> %va to <vscale x 1 x i64> 1252 ret <vscale x 1 x i64> %evec 1253} 1254 1255define <vscale x 1 x i64> @vfptoui_nxv1f64_nxv1i64(<vscale x 1 x double> %va) { 1256; CHECK-LABEL: vfptoui_nxv1f64_nxv1i64: 1257; CHECK: # %bb.0: 1258; CHECK-NEXT: vsetvli a0, zero, e64, m1, ta, mu 1259; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 1260; CHECK-NEXT: ret 1261 %evec = fptoui <vscale x 1 x double> %va to <vscale x 1 x i64> 1262 ret <vscale x 1 x i64> %evec 1263} 1264 1265define <vscale x 2 x i1> @vfptosi_nxv2f64_nxv2i1(<vscale x 2 x double> %va) { 1266; CHECK-LABEL: vfptosi_nxv2f64_nxv2i1: 1267; CHECK: # %bb.0: 1268; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1269; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 1270; CHECK-NEXT: vand.vi v8, v10, 1 1271; CHECK-NEXT: vmsne.vi v0, v8, 0 1272; CHECK-NEXT: ret 1273 %evec = fptosi <vscale x 2 x double> %va to <vscale x 2 x i1> 1274 ret <vscale x 2 x i1> %evec 1275} 1276 1277define <vscale x 2 x i1> @vfptoui_nxv2f64_nxv2i1(<vscale x 2 x double> %va) { 1278; CHECK-LABEL: vfptoui_nxv2f64_nxv2i1: 1279; CHECK: # %bb.0: 1280; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1281; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 1282; CHECK-NEXT: vand.vi v8, v10, 1 1283; CHECK-NEXT: vmsne.vi v0, v8, 0 1284; CHECK-NEXT: ret 1285 %evec = fptoui <vscale x 2 x double> %va to <vscale x 2 x i1> 1286 ret <vscale x 2 x i1> %evec 1287} 1288 1289define <vscale x 2 x i8> @vfptosi_nxv2f64_nxv2i8(<vscale x 2 x double> %va) { 1290; CHECK-LABEL: vfptosi_nxv2f64_nxv2i8: 1291; CHECK: # %bb.0: 1292; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1293; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 1294; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, mu 1295; CHECK-NEXT: vnsrl.wx v8, v10, zero 1296; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, mu 1297; CHECK-NEXT: vnsrl.wx v8, v8, zero 1298; CHECK-NEXT: ret 1299 %evec = fptosi <vscale x 2 x double> %va to <vscale x 2 x i8> 1300 ret <vscale x 2 x i8> %evec 1301} 1302 1303define <vscale x 2 x i8> @vfptoui_nxv2f64_nxv2i8(<vscale x 2 x double> %va) { 1304; CHECK-LABEL: vfptoui_nxv2f64_nxv2i8: 1305; CHECK: # %bb.0: 1306; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1307; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 1308; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, mu 1309; CHECK-NEXT: vnsrl.wx v8, v10, zero 1310; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, mu 1311; CHECK-NEXT: vnsrl.wx v8, v8, zero 1312; CHECK-NEXT: ret 1313 %evec = fptoui <vscale x 2 x double> %va to <vscale x 2 x i8> 1314 ret <vscale x 2 x i8> %evec 1315} 1316 1317define <vscale x 2 x i16> @vfptosi_nxv2f64_nxv2i16(<vscale x 2 x double> %va) { 1318; CHECK-LABEL: vfptosi_nxv2f64_nxv2i16: 1319; CHECK: # %bb.0: 1320; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1321; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 1322; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, mu 1323; CHECK-NEXT: vnsrl.wx v8, v10, zero 1324; CHECK-NEXT: ret 1325 %evec = fptosi <vscale x 2 x double> %va to <vscale x 2 x i16> 1326 ret <vscale x 2 x i16> %evec 1327} 1328 1329define <vscale x 2 x i16> @vfptoui_nxv2f64_nxv2i16(<vscale x 2 x double> %va) { 1330; CHECK-LABEL: vfptoui_nxv2f64_nxv2i16: 1331; CHECK: # %bb.0: 1332; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1333; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 1334; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, mu 1335; CHECK-NEXT: vnsrl.wx v8, v10, zero 1336; CHECK-NEXT: ret 1337 %evec = fptoui <vscale x 2 x double> %va to <vscale x 2 x i16> 1338 ret <vscale x 2 x i16> %evec 1339} 1340 1341define <vscale x 2 x i32> @vfptosi_nxv2f64_nxv2i32(<vscale x 2 x double> %va) { 1342; CHECK-LABEL: vfptosi_nxv2f64_nxv2i32: 1343; CHECK: # %bb.0: 1344; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1345; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 1346; CHECK-NEXT: vmv.v.v v8, v10 1347; CHECK-NEXT: ret 1348 %evec = fptosi <vscale x 2 x double> %va to <vscale x 2 x i32> 1349 ret <vscale x 2 x i32> %evec 1350} 1351 1352define <vscale x 2 x i32> @vfptoui_nxv2f64_nxv2i32(<vscale x 2 x double> %va) { 1353; CHECK-LABEL: vfptoui_nxv2f64_nxv2i32: 1354; CHECK: # %bb.0: 1355; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 1356; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 1357; CHECK-NEXT: vmv.v.v v8, v10 1358; CHECK-NEXT: ret 1359 %evec = fptoui <vscale x 2 x double> %va to <vscale x 2 x i32> 1360 ret <vscale x 2 x i32> %evec 1361} 1362 1363define <vscale x 2 x i64> @vfptosi_nxv2f64_nxv2i64(<vscale x 2 x double> %va) { 1364; CHECK-LABEL: vfptosi_nxv2f64_nxv2i64: 1365; CHECK: # %bb.0: 1366; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 1367; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 1368; CHECK-NEXT: ret 1369 %evec = fptosi <vscale x 2 x double> %va to <vscale x 2 x i64> 1370 ret <vscale x 2 x i64> %evec 1371} 1372 1373define <vscale x 2 x i64> @vfptoui_nxv2f64_nxv2i64(<vscale x 2 x double> %va) { 1374; CHECK-LABEL: vfptoui_nxv2f64_nxv2i64: 1375; CHECK: # %bb.0: 1376; CHECK-NEXT: vsetvli a0, zero, e64, m2, ta, mu 1377; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 1378; CHECK-NEXT: ret 1379 %evec = fptoui <vscale x 2 x double> %va to <vscale x 2 x i64> 1380 ret <vscale x 2 x i64> %evec 1381} 1382 1383define <vscale x 4 x i1> @vfptosi_nxv4f64_nxv4i1(<vscale x 4 x double> %va) { 1384; CHECK-LABEL: vfptosi_nxv4f64_nxv4i1: 1385; CHECK: # %bb.0: 1386; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1387; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 1388; CHECK-NEXT: vand.vi v8, v12, 1 1389; CHECK-NEXT: vmsne.vi v0, v8, 0 1390; CHECK-NEXT: ret 1391 %evec = fptosi <vscale x 4 x double> %va to <vscale x 4 x i1> 1392 ret <vscale x 4 x i1> %evec 1393} 1394 1395define <vscale x 4 x i1> @vfptoui_nxv4f64_nxv4i1(<vscale x 4 x double> %va) { 1396; CHECK-LABEL: vfptoui_nxv4f64_nxv4i1: 1397; CHECK: # %bb.0: 1398; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1399; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 1400; CHECK-NEXT: vand.vi v8, v12, 1 1401; CHECK-NEXT: vmsne.vi v0, v8, 0 1402; CHECK-NEXT: ret 1403 %evec = fptoui <vscale x 4 x double> %va to <vscale x 4 x i1> 1404 ret <vscale x 4 x i1> %evec 1405} 1406 1407define <vscale x 4 x i8> @vfptosi_nxv4f64_nxv4i8(<vscale x 4 x double> %va) { 1408; CHECK-LABEL: vfptosi_nxv4f64_nxv4i8: 1409; CHECK: # %bb.0: 1410; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1411; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 1412; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu 1413; CHECK-NEXT: vnsrl.wx v8, v12, zero 1414; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, mu 1415; CHECK-NEXT: vnsrl.wx v8, v8, zero 1416; CHECK-NEXT: ret 1417 %evec = fptosi <vscale x 4 x double> %va to <vscale x 4 x i8> 1418 ret <vscale x 4 x i8> %evec 1419} 1420 1421define <vscale x 4 x i8> @vfptoui_nxv4f64_nxv4i8(<vscale x 4 x double> %va) { 1422; CHECK-LABEL: vfptoui_nxv4f64_nxv4i8: 1423; CHECK: # %bb.0: 1424; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1425; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 1426; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu 1427; CHECK-NEXT: vnsrl.wx v8, v12, zero 1428; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, mu 1429; CHECK-NEXT: vnsrl.wx v8, v8, zero 1430; CHECK-NEXT: ret 1431 %evec = fptoui <vscale x 4 x double> %va to <vscale x 4 x i8> 1432 ret <vscale x 4 x i8> %evec 1433} 1434 1435define <vscale x 4 x i16> @vfptosi_nxv4f64_nxv4i16(<vscale x 4 x double> %va) { 1436; CHECK-LABEL: vfptosi_nxv4f64_nxv4i16: 1437; CHECK: # %bb.0: 1438; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1439; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 1440; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu 1441; CHECK-NEXT: vnsrl.wx v8, v12, zero 1442; CHECK-NEXT: ret 1443 %evec = fptosi <vscale x 4 x double> %va to <vscale x 4 x i16> 1444 ret <vscale x 4 x i16> %evec 1445} 1446 1447define <vscale x 4 x i16> @vfptoui_nxv4f64_nxv4i16(<vscale x 4 x double> %va) { 1448; CHECK-LABEL: vfptoui_nxv4f64_nxv4i16: 1449; CHECK: # %bb.0: 1450; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1451; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 1452; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, mu 1453; CHECK-NEXT: vnsrl.wx v8, v12, zero 1454; CHECK-NEXT: ret 1455 %evec = fptoui <vscale x 4 x double> %va to <vscale x 4 x i16> 1456 ret <vscale x 4 x i16> %evec 1457} 1458 1459define <vscale x 4 x i32> @vfptosi_nxv4f64_nxv4i32(<vscale x 4 x double> %va) { 1460; CHECK-LABEL: vfptosi_nxv4f64_nxv4i32: 1461; CHECK: # %bb.0: 1462; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1463; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 1464; CHECK-NEXT: vmv.v.v v8, v12 1465; CHECK-NEXT: ret 1466 %evec = fptosi <vscale x 4 x double> %va to <vscale x 4 x i32> 1467 ret <vscale x 4 x i32> %evec 1468} 1469 1470define <vscale x 4 x i32> @vfptoui_nxv4f64_nxv4i32(<vscale x 4 x double> %va) { 1471; CHECK-LABEL: vfptoui_nxv4f64_nxv4i32: 1472; CHECK: # %bb.0: 1473; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 1474; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 1475; CHECK-NEXT: vmv.v.v v8, v12 1476; CHECK-NEXT: ret 1477 %evec = fptoui <vscale x 4 x double> %va to <vscale x 4 x i32> 1478 ret <vscale x 4 x i32> %evec 1479} 1480 1481define <vscale x 4 x i64> @vfptosi_nxv4f64_nxv4i64(<vscale x 4 x double> %va) { 1482; CHECK-LABEL: vfptosi_nxv4f64_nxv4i64: 1483; CHECK: # %bb.0: 1484; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 1485; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 1486; CHECK-NEXT: ret 1487 %evec = fptosi <vscale x 4 x double> %va to <vscale x 4 x i64> 1488 ret <vscale x 4 x i64> %evec 1489} 1490 1491define <vscale x 4 x i64> @vfptoui_nxv4f64_nxv4i64(<vscale x 4 x double> %va) { 1492; CHECK-LABEL: vfptoui_nxv4f64_nxv4i64: 1493; CHECK: # %bb.0: 1494; CHECK-NEXT: vsetvli a0, zero, e64, m4, ta, mu 1495; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 1496; CHECK-NEXT: ret 1497 %evec = fptoui <vscale x 4 x double> %va to <vscale x 4 x i64> 1498 ret <vscale x 4 x i64> %evec 1499} 1500 1501define <vscale x 8 x i1> @vfptosi_nxv8f64_nxv8i1(<vscale x 8 x double> %va) { 1502; CHECK-LABEL: vfptosi_nxv8f64_nxv8i1: 1503; CHECK: # %bb.0: 1504; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1505; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8 1506; CHECK-NEXT: vand.vi v8, v16, 1 1507; CHECK-NEXT: vmsne.vi v0, v8, 0 1508; CHECK-NEXT: ret 1509 %evec = fptosi <vscale x 8 x double> %va to <vscale x 8 x i1> 1510 ret <vscale x 8 x i1> %evec 1511} 1512 1513define <vscale x 8 x i1> @vfptoui_nxv8f64_nxv8i1(<vscale x 8 x double> %va) { 1514; CHECK-LABEL: vfptoui_nxv8f64_nxv8i1: 1515; CHECK: # %bb.0: 1516; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1517; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8 1518; CHECK-NEXT: vand.vi v8, v16, 1 1519; CHECK-NEXT: vmsne.vi v0, v8, 0 1520; CHECK-NEXT: ret 1521 %evec = fptoui <vscale x 8 x double> %va to <vscale x 8 x i1> 1522 ret <vscale x 8 x i1> %evec 1523} 1524 1525define <vscale x 8 x i8> @vfptosi_nxv8f64_nxv8i8(<vscale x 8 x double> %va) { 1526; CHECK-LABEL: vfptosi_nxv8f64_nxv8i8: 1527; CHECK: # %bb.0: 1528; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1529; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8 1530; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, mu 1531; CHECK-NEXT: vnsrl.wx v10, v16, zero 1532; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, mu 1533; CHECK-NEXT: vnsrl.wx v8, v10, zero 1534; CHECK-NEXT: ret 1535 %evec = fptosi <vscale x 8 x double> %va to <vscale x 8 x i8> 1536 ret <vscale x 8 x i8> %evec 1537} 1538 1539define <vscale x 8 x i8> @vfptoui_nxv8f64_nxv8i8(<vscale x 8 x double> %va) { 1540; CHECK-LABEL: vfptoui_nxv8f64_nxv8i8: 1541; CHECK: # %bb.0: 1542; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1543; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8 1544; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, mu 1545; CHECK-NEXT: vnsrl.wx v10, v16, zero 1546; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, mu 1547; CHECK-NEXT: vnsrl.wx v8, v10, zero 1548; CHECK-NEXT: ret 1549 %evec = fptoui <vscale x 8 x double> %va to <vscale x 8 x i8> 1550 ret <vscale x 8 x i8> %evec 1551} 1552 1553define <vscale x 8 x i16> @vfptosi_nxv8f64_nxv8i16(<vscale x 8 x double> %va) { 1554; CHECK-LABEL: vfptosi_nxv8f64_nxv8i16: 1555; CHECK: # %bb.0: 1556; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1557; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8 1558; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, mu 1559; CHECK-NEXT: vnsrl.wx v8, v16, zero 1560; CHECK-NEXT: ret 1561 %evec = fptosi <vscale x 8 x double> %va to <vscale x 8 x i16> 1562 ret <vscale x 8 x i16> %evec 1563} 1564 1565define <vscale x 8 x i16> @vfptoui_nxv8f64_nxv8i16(<vscale x 8 x double> %va) { 1566; CHECK-LABEL: vfptoui_nxv8f64_nxv8i16: 1567; CHECK: # %bb.0: 1568; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1569; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8 1570; CHECK-NEXT: vsetvli zero, zero, e16, m2, ta, mu 1571; CHECK-NEXT: vnsrl.wx v8, v16, zero 1572; CHECK-NEXT: ret 1573 %evec = fptoui <vscale x 8 x double> %va to <vscale x 8 x i16> 1574 ret <vscale x 8 x i16> %evec 1575} 1576 1577define <vscale x 8 x i32> @vfptosi_nxv8f64_nxv8i32(<vscale x 8 x double> %va) { 1578; CHECK-LABEL: vfptosi_nxv8f64_nxv8i32: 1579; CHECK: # %bb.0: 1580; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1581; CHECK-NEXT: vfncvt.rtz.x.f.w v16, v8 1582; CHECK-NEXT: vmv.v.v v8, v16 1583; CHECK-NEXT: ret 1584 %evec = fptosi <vscale x 8 x double> %va to <vscale x 8 x i32> 1585 ret <vscale x 8 x i32> %evec 1586} 1587 1588define <vscale x 8 x i32> @vfptoui_nxv8f64_nxv8i32(<vscale x 8 x double> %va) { 1589; CHECK-LABEL: vfptoui_nxv8f64_nxv8i32: 1590; CHECK: # %bb.0: 1591; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 1592; CHECK-NEXT: vfncvt.rtz.xu.f.w v16, v8 1593; CHECK-NEXT: vmv.v.v v8, v16 1594; CHECK-NEXT: ret 1595 %evec = fptoui <vscale x 8 x double> %va to <vscale x 8 x i32> 1596 ret <vscale x 8 x i32> %evec 1597} 1598 1599define <vscale x 8 x i64> @vfptosi_nxv8f64_nxv8i64(<vscale x 8 x double> %va) { 1600; CHECK-LABEL: vfptosi_nxv8f64_nxv8i64: 1601; CHECK: # %bb.0: 1602; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1603; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 1604; CHECK-NEXT: ret 1605 %evec = fptosi <vscale x 8 x double> %va to <vscale x 8 x i64> 1606 ret <vscale x 8 x i64> %evec 1607} 1608 1609define <vscale x 8 x i64> @vfptoui_nxv8f64_nxv8i64(<vscale x 8 x double> %va) { 1610; CHECK-LABEL: vfptoui_nxv8f64_nxv8i64: 1611; CHECK: # %bb.0: 1612; CHECK-NEXT: vsetvli a0, zero, e64, m8, ta, mu 1613; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 1614; CHECK-NEXT: ret 1615 %evec = fptoui <vscale x 8 x double> %va to <vscale x 8 x i64> 1616 ret <vscale x 8 x i64> %evec 1617} 1618