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