1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -target-abi=ilp32d \ 3; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 4; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \ 5; RUN: -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 6 7declare <1 x i1> @llvm.experimental.constrained.fptosi.v1i1.v1f16(<1 x half>, metadata) 8define <1 x i1> @vfptosi_v1f16_v1i1(<1 x half> %va) strictfp { 9; CHECK-LABEL: vfptosi_v1f16_v1i1: 10; CHECK: # %bb.0: 11; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma 12; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 13; CHECK-NEXT: vand.vi v8, v9, 1 14; CHECK-NEXT: vmsne.vi v0, v8, 0 15; CHECK-NEXT: ret 16 %evec = call <1 x i1> @llvm.experimental.constrained.fptosi.v1i1.v1f16(<1 x half> %va, metadata !"fpexcept.strict") 17 ret <1 x i1> %evec 18} 19 20declare <1 x i1> @llvm.experimental.constrained.fptoui.v1i1.v1f16(<1 x half>, metadata) 21define <1 x i1> @vfptoui_v1f16_v1i1(<1 x half> %va) strictfp { 22; CHECK-LABEL: vfptoui_v1f16_v1i1: 23; CHECK: # %bb.0: 24; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma 25; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 26; CHECK-NEXT: vand.vi v8, v9, 1 27; CHECK-NEXT: vmsne.vi v0, v8, 0 28; CHECK-NEXT: ret 29 %evec = call <1 x i1> @llvm.experimental.constrained.fptoui.v1i1.v1f16(<1 x half> %va, metadata !"fpexcept.strict") 30 ret <1 x i1> %evec 31} 32 33declare <1 x i7> @llvm.experimental.constrained.fptosi.v1i7.v1f16(<1 x half>, metadata) 34define <1 x i7> @vfptosi_v1f16_v1i7(<1 x half> %va) strictfp { 35; RV32-LABEL: vfptosi_v1f16_v1i7: 36; RV32: # %bb.0: 37; RV32-NEXT: vsetivli zero, 1, e16, m1, ta, ma 38; RV32-NEXT: vfmv.f.s fa5, v8 39; RV32-NEXT: fcvt.w.h a0, fa5, rtz 40; RV32-NEXT: ret 41; 42; RV64-LABEL: vfptosi_v1f16_v1i7: 43; RV64: # %bb.0: 44; RV64-NEXT: vsetivli zero, 1, e16, m1, ta, ma 45; RV64-NEXT: vfmv.f.s fa5, v8 46; RV64-NEXT: fcvt.l.h a0, fa5, rtz 47; RV64-NEXT: ret 48 %evec = call <1 x i7> @llvm.experimental.constrained.fptosi.v1i7.v1f16(<1 x half> %va, metadata !"fpexcept.strict") 49 ret <1 x i7> %evec 50} 51 52declare <1 x i7> @llvm.experimental.constrained.fptoui.v1i7.v1f16(<1 x half>, metadata) 53define <1 x i7> @vfptoui_v1f16_v1i7(<1 x half> %va) strictfp { 54; RV32-LABEL: vfptoui_v1f16_v1i7: 55; RV32: # %bb.0: 56; RV32-NEXT: vsetivli zero, 1, e16, m1, ta, ma 57; RV32-NEXT: vfmv.f.s fa5, v8 58; RV32-NEXT: fcvt.w.h a0, fa5, rtz 59; RV32-NEXT: ret 60; 61; RV64-LABEL: vfptoui_v1f16_v1i7: 62; RV64: # %bb.0: 63; RV64-NEXT: vsetivli zero, 1, e16, m1, ta, ma 64; RV64-NEXT: vfmv.f.s fa5, v8 65; RV64-NEXT: fcvt.l.h a0, fa5, rtz 66; RV64-NEXT: ret 67 %evec = call <1 x i7> @llvm.experimental.constrained.fptoui.v1i7.v1f16(<1 x half> %va, metadata !"fpexcept.strict") 68 ret <1 x i7> %evec 69} 70 71declare <1 x i8> @llvm.experimental.constrained.fptosi.v1i8.v1f16(<1 x half>, metadata) 72define <1 x i8> @vfptosi_v1f16_v1i8(<1 x half> %va) strictfp { 73; CHECK-LABEL: vfptosi_v1f16_v1i8: 74; CHECK: # %bb.0: 75; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma 76; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 77; CHECK-NEXT: vmv1r.v v8, v9 78; CHECK-NEXT: ret 79 %evec = call <1 x i8> @llvm.experimental.constrained.fptosi.v1i8.v1f16(<1 x half> %va, metadata !"fpexcept.strict") 80 ret <1 x i8> %evec 81} 82 83declare <1 x i8> @llvm.experimental.constrained.fptoui.v1i8.v1f16(<1 x half>, metadata) 84define <1 x i8> @vfptoui_v1f16_v1i8(<1 x half> %va) strictfp { 85; CHECK-LABEL: vfptoui_v1f16_v1i8: 86; CHECK: # %bb.0: 87; CHECK-NEXT: vsetivli zero, 1, e8, mf8, ta, ma 88; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 89; CHECK-NEXT: vmv1r.v v8, v9 90; CHECK-NEXT: ret 91 %evec = call <1 x i8> @llvm.experimental.constrained.fptoui.v1i8.v1f16(<1 x half> %va, metadata !"fpexcept.strict") 92 ret <1 x i8> %evec 93} 94 95declare <1 x i16> @llvm.experimental.constrained.fptosi.v1i16.v1f16(<1 x half>, metadata) 96define <1 x i16> @vfptosi_v1f16_v1i16(<1 x half> %va) strictfp { 97; CHECK-LABEL: vfptosi_v1f16_v1i16: 98; CHECK: # %bb.0: 99; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 100; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 101; CHECK-NEXT: ret 102 %evec = call <1 x i16> @llvm.experimental.constrained.fptosi.v1i16.v1f16(<1 x half> %va, metadata !"fpexcept.strict") 103 ret <1 x i16> %evec 104} 105 106declare <1 x i16> @llvm.experimental.constrained.fptoui.v1i16.v1f16(<1 x half>, metadata) 107define <1 x i16> @vfptoui_v1f16_v1i16(<1 x half> %va) strictfp { 108; CHECK-LABEL: vfptoui_v1f16_v1i16: 109; CHECK: # %bb.0: 110; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 111; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 112; CHECK-NEXT: ret 113 %evec = call <1 x i16> @llvm.experimental.constrained.fptoui.v1i16.v1f16(<1 x half> %va, metadata !"fpexcept.strict") 114 ret <1 x i16> %evec 115} 116 117declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f16(<1 x half>, metadata) 118define <1 x i32> @vfptosi_v1f16_v1i32(<1 x half> %va) strictfp { 119; CHECK-LABEL: vfptosi_v1f16_v1i32: 120; CHECK: # %bb.0: 121; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 122; CHECK-NEXT: vfwcvt.rtz.x.f.v v9, v8 123; CHECK-NEXT: vmv1r.v v8, v9 124; CHECK-NEXT: ret 125 %evec = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f16(<1 x half> %va, metadata !"fpexcept.strict") 126 ret <1 x i32> %evec 127} 128 129declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f16(<1 x half>, metadata) 130define <1 x i32> @vfptoui_v1f16_v1i32(<1 x half> %va) strictfp { 131; CHECK-LABEL: vfptoui_v1f16_v1i32: 132; CHECK: # %bb.0: 133; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 134; CHECK-NEXT: vfwcvt.rtz.xu.f.v v9, v8 135; CHECK-NEXT: vmv1r.v v8, v9 136; CHECK-NEXT: ret 137 %evec = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f16(<1 x half> %va, metadata !"fpexcept.strict") 138 ret <1 x i32> %evec 139} 140 141declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f16(<1 x half>, metadata) 142define <1 x i64> @vfptosi_v1f16_v1i64(<1 x half> %va) strictfp { 143; CHECK-LABEL: vfptosi_v1f16_v1i64: 144; CHECK: # %bb.0: 145; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 146; CHECK-NEXT: vfwcvt.f.f.v v9, v8 147; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 148; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v9 149; CHECK-NEXT: ret 150 %evec = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f16(<1 x half> %va, metadata !"fpexcept.strict") 151 ret <1 x i64> %evec 152} 153 154declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f16(<1 x half>, metadata) 155define <1 x i64> @vfptoui_v1f16_v1i64(<1 x half> %va) strictfp { 156; CHECK-LABEL: vfptoui_v1f16_v1i64: 157; CHECK: # %bb.0: 158; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 159; CHECK-NEXT: vfwcvt.f.f.v v9, v8 160; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 161; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v9 162; CHECK-NEXT: ret 163 %evec = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f16(<1 x half> %va, metadata !"fpexcept.strict") 164 ret <1 x i64> %evec 165} 166 167declare <2 x i1> @llvm.experimental.constrained.fptosi.v2i1.v2f16(<2 x half>, metadata) 168define <2 x i1> @vfptosi_v2f16_v2i1(<2 x half> %va) strictfp { 169; CHECK-LABEL: vfptosi_v2f16_v2i1: 170; CHECK: # %bb.0: 171; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma 172; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 173; CHECK-NEXT: vand.vi v8, v9, 1 174; CHECK-NEXT: vmsne.vi v0, v8, 0 175; CHECK-NEXT: ret 176 %evec = call <2 x i1> @llvm.experimental.constrained.fptosi.v2i1.v2f16(<2 x half> %va, metadata !"fpexcept.strict") 177 ret <2 x i1> %evec 178} 179 180declare <2 x i1> @llvm.experimental.constrained.fptoui.v2i1.v2f16(<2 x half>, metadata) 181define <2 x i1> @vfptoui_v2f16_v2i1(<2 x half> %va) strictfp { 182; CHECK-LABEL: vfptoui_v2f16_v2i1: 183; CHECK: # %bb.0: 184; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma 185; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 186; CHECK-NEXT: vand.vi v8, v9, 1 187; CHECK-NEXT: vmsne.vi v0, v8, 0 188; CHECK-NEXT: ret 189 %evec = call <2 x i1> @llvm.experimental.constrained.fptoui.v2i1.v2f16(<2 x half> %va, metadata !"fpexcept.strict") 190 ret <2 x i1> %evec 191} 192 193declare <2 x i8> @llvm.experimental.constrained.fptosi.v2i8.v2f16(<2 x half>, metadata) 194define <2 x i8> @vfptosi_v2f16_v2i8(<2 x half> %va) strictfp { 195; CHECK-LABEL: vfptosi_v2f16_v2i8: 196; CHECK: # %bb.0: 197; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma 198; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 199; CHECK-NEXT: vmv1r.v v8, v9 200; CHECK-NEXT: ret 201 %evec = call <2 x i8> @llvm.experimental.constrained.fptosi.v2i8.v2f16(<2 x half> %va, metadata !"fpexcept.strict") 202 ret <2 x i8> %evec 203} 204 205declare <2 x i8> @llvm.experimental.constrained.fptoui.v2i8.v2f16(<2 x half>, metadata) 206define <2 x i8> @vfptoui_v2f16_v2i8(<2 x half> %va) strictfp { 207; CHECK-LABEL: vfptoui_v2f16_v2i8: 208; CHECK: # %bb.0: 209; CHECK-NEXT: vsetivli zero, 2, e8, mf8, ta, ma 210; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 211; CHECK-NEXT: vmv1r.v v8, v9 212; CHECK-NEXT: ret 213 %evec = call <2 x i8> @llvm.experimental.constrained.fptoui.v2i8.v2f16(<2 x half> %va, metadata !"fpexcept.strict") 214 ret <2 x i8> %evec 215} 216 217declare <2 x i16> @llvm.experimental.constrained.fptosi.v2i16.v2f16(<2 x half>, metadata) 218define <2 x i16> @vfptosi_v2f16_v2i16(<2 x half> %va) strictfp { 219; CHECK-LABEL: vfptosi_v2f16_v2i16: 220; CHECK: # %bb.0: 221; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 222; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 223; CHECK-NEXT: ret 224 %evec = call <2 x i16> @llvm.experimental.constrained.fptosi.v2i16.v2f16(<2 x half> %va, metadata !"fpexcept.strict") 225 ret <2 x i16> %evec 226} 227 228declare <2 x i16> @llvm.experimental.constrained.fptoui.v2i16.v2f16(<2 x half>, metadata) 229define <2 x i16> @vfptoui_v2f16_v2i16(<2 x half> %va) strictfp { 230; CHECK-LABEL: vfptoui_v2f16_v2i16: 231; CHECK: # %bb.0: 232; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 233; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 234; CHECK-NEXT: ret 235 %evec = call <2 x i16> @llvm.experimental.constrained.fptoui.v2i16.v2f16(<2 x half> %va, metadata !"fpexcept.strict") 236 ret <2 x i16> %evec 237} 238 239declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f16(<2 x half>, metadata) 240define <2 x i32> @vfptosi_v2f16_v2i32(<2 x half> %va) strictfp { 241; CHECK-LABEL: vfptosi_v2f16_v2i32: 242; CHECK: # %bb.0: 243; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 244; CHECK-NEXT: vfwcvt.rtz.x.f.v v9, v8 245; CHECK-NEXT: vmv1r.v v8, v9 246; CHECK-NEXT: ret 247 %evec = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f16(<2 x half> %va, metadata !"fpexcept.strict") 248 ret <2 x i32> %evec 249} 250 251declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f16(<2 x half>, metadata) 252define <2 x i32> @vfptoui_v2f16_v2i32(<2 x half> %va) strictfp { 253; CHECK-LABEL: vfptoui_v2f16_v2i32: 254; CHECK: # %bb.0: 255; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 256; CHECK-NEXT: vfwcvt.rtz.xu.f.v v9, v8 257; CHECK-NEXT: vmv1r.v v8, v9 258; CHECK-NEXT: ret 259 %evec = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f16(<2 x half> %va, metadata !"fpexcept.strict") 260 ret <2 x i32> %evec 261} 262 263declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f16(<2 x half>, metadata) 264define <2 x i64> @vfptosi_v2f16_v2i64(<2 x half> %va) strictfp { 265; CHECK-LABEL: vfptosi_v2f16_v2i64: 266; CHECK: # %bb.0: 267; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 268; CHECK-NEXT: vfwcvt.f.f.v v9, v8 269; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 270; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v9 271; CHECK-NEXT: ret 272 %evec = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f16(<2 x half> %va, metadata !"fpexcept.strict") 273 ret <2 x i64> %evec 274} 275 276declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f16(<2 x half>, metadata) 277define <2 x i64> @vfptoui_v2f16_v2i64(<2 x half> %va) strictfp { 278; CHECK-LABEL: vfptoui_v2f16_v2i64: 279; CHECK: # %bb.0: 280; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 281; CHECK-NEXT: vfwcvt.f.f.v v9, v8 282; CHECK-NEXT: vsetvli zero, zero, e32, mf2, ta, ma 283; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v9 284; CHECK-NEXT: ret 285 %evec = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f16(<2 x half> %va, metadata !"fpexcept.strict") 286 ret <2 x i64> %evec 287} 288 289declare <4 x i1> @llvm.experimental.constrained.fptosi.v4i1.v4f16(<4 x half>, metadata) 290define <4 x i1> @vfptosi_v4f16_v4i1(<4 x half> %va) strictfp { 291; CHECK-LABEL: vfptosi_v4f16_v4i1: 292; CHECK: # %bb.0: 293; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma 294; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 295; CHECK-NEXT: vand.vi v8, v9, 1 296; CHECK-NEXT: vmsne.vi v0, v8, 0 297; CHECK-NEXT: ret 298 %evec = call <4 x i1> @llvm.experimental.constrained.fptosi.v4i1.v4f16(<4 x half> %va, metadata !"fpexcept.strict") 299 ret <4 x i1> %evec 300} 301 302declare <4 x i1> @llvm.experimental.constrained.fptoui.v4i1.v4f16(<4 x half>, metadata) 303define <4 x i1> @vfptoui_v4f16_v4i1(<4 x half> %va) strictfp { 304; CHECK-LABEL: vfptoui_v4f16_v4i1: 305; CHECK: # %bb.0: 306; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma 307; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 308; CHECK-NEXT: vand.vi v8, v9, 1 309; CHECK-NEXT: vmsne.vi v0, v8, 0 310; CHECK-NEXT: ret 311 %evec = call <4 x i1> @llvm.experimental.constrained.fptoui.v4i1.v4f16(<4 x half> %va, metadata !"fpexcept.strict") 312 ret <4 x i1> %evec 313} 314 315declare <4 x i8> @llvm.experimental.constrained.fptosi.v4i8.v4f16(<4 x half>, metadata) 316define <4 x i8> @vfptosi_v4f16_v4i8(<4 x half> %va) strictfp { 317; CHECK-LABEL: vfptosi_v4f16_v4i8: 318; CHECK: # %bb.0: 319; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma 320; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 321; CHECK-NEXT: vmv1r.v v8, v9 322; CHECK-NEXT: ret 323 %evec = call <4 x i8> @llvm.experimental.constrained.fptosi.v4i8.v4f16(<4 x half> %va, metadata !"fpexcept.strict") 324 ret <4 x i8> %evec 325} 326 327declare <4 x i8> @llvm.experimental.constrained.fptoui.v4i8.v4f16(<4 x half>, metadata) 328define <4 x i8> @vfptoui_v4f16_v4i8(<4 x half> %va) strictfp { 329; CHECK-LABEL: vfptoui_v4f16_v4i8: 330; CHECK: # %bb.0: 331; CHECK-NEXT: vsetivli zero, 4, e8, mf4, ta, ma 332; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 333; CHECK-NEXT: vmv1r.v v8, v9 334; CHECK-NEXT: ret 335 %evec = call <4 x i8> @llvm.experimental.constrained.fptoui.v4i8.v4f16(<4 x half> %va, metadata !"fpexcept.strict") 336 ret <4 x i8> %evec 337} 338 339declare <4 x i16> @llvm.experimental.constrained.fptosi.v4i16.v4f16(<4 x half>, metadata) 340define <4 x i16> @vfptosi_v4f16_v4i16(<4 x half> %va) strictfp { 341; CHECK-LABEL: vfptosi_v4f16_v4i16: 342; CHECK: # %bb.0: 343; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 344; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 345; CHECK-NEXT: ret 346 %evec = call <4 x i16> @llvm.experimental.constrained.fptosi.v4i16.v4f16(<4 x half> %va, metadata !"fpexcept.strict") 347 ret <4 x i16> %evec 348} 349 350declare <4 x i16> @llvm.experimental.constrained.fptoui.v4i16.v4f16(<4 x half>, metadata) 351define <4 x i16> @vfptoui_v4f16_v4i16(<4 x half> %va) strictfp { 352; CHECK-LABEL: vfptoui_v4f16_v4i16: 353; CHECK: # %bb.0: 354; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 355; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 356; CHECK-NEXT: ret 357 %evec = call <4 x i16> @llvm.experimental.constrained.fptoui.v4i16.v4f16(<4 x half> %va, metadata !"fpexcept.strict") 358 ret <4 x i16> %evec 359} 360 361declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f16(<4 x half>, metadata) 362define <4 x i32> @vfptosi_v4f16_v4i32(<4 x half> %va) strictfp { 363; CHECK-LABEL: vfptosi_v4f16_v4i32: 364; CHECK: # %bb.0: 365; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 366; CHECK-NEXT: vfwcvt.rtz.x.f.v v9, v8 367; CHECK-NEXT: vmv1r.v v8, v9 368; CHECK-NEXT: ret 369 %evec = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f16(<4 x half> %va, metadata !"fpexcept.strict") 370 ret <4 x i32> %evec 371} 372 373declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f16(<4 x half>, metadata) 374define <4 x i32> @vfptoui_v4f16_v4i32(<4 x half> %va) strictfp { 375; CHECK-LABEL: vfptoui_v4f16_v4i32: 376; CHECK: # %bb.0: 377; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 378; CHECK-NEXT: vfwcvt.rtz.xu.f.v v9, v8 379; CHECK-NEXT: vmv1r.v v8, v9 380; CHECK-NEXT: ret 381 %evec = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f16(<4 x half> %va, metadata !"fpexcept.strict") 382 ret <4 x i32> %evec 383} 384 385declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f16(<4 x half>, metadata) 386define <4 x i64> @vfptosi_v4f16_v4i64(<4 x half> %va) strictfp { 387; CHECK-LABEL: vfptosi_v4f16_v4i64: 388; CHECK: # %bb.0: 389; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 390; CHECK-NEXT: vfwcvt.f.f.v v10, v8 391; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma 392; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v10 393; CHECK-NEXT: ret 394 %evec = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f16(<4 x half> %va, metadata !"fpexcept.strict") 395 ret <4 x i64> %evec 396} 397 398declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f16(<4 x half>, metadata) 399define <4 x i64> @vfptoui_v4f16_v4i64(<4 x half> %va) strictfp { 400; CHECK-LABEL: vfptoui_v4f16_v4i64: 401; CHECK: # %bb.0: 402; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 403; CHECK-NEXT: vfwcvt.f.f.v v10, v8 404; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma 405; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v10 406; CHECK-NEXT: ret 407 %evec = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f16(<4 x half> %va, metadata !"fpexcept.strict") 408 ret <4 x i64> %evec 409} 410 411declare <8 x i1> @llvm.experimental.constrained.fptosi.v8i1.v8f16(<8 x half>, metadata) 412define <8 x i1> @vfptosi_v8f16_v8i1(<8 x half> %va) strictfp { 413; CHECK-LABEL: vfptosi_v8f16_v8i1: 414; CHECK: # %bb.0: 415; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 416; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 417; CHECK-NEXT: vand.vi v8, v9, 1 418; CHECK-NEXT: vmsne.vi v0, v8, 0 419; CHECK-NEXT: ret 420 %evec = call <8 x i1> @llvm.experimental.constrained.fptosi.v8i1.v8f16(<8 x half> %va, metadata !"fpexcept.strict") 421 ret <8 x i1> %evec 422} 423 424declare <8 x i1> @llvm.experimental.constrained.fptoui.v8i1.v8f16(<8 x half>, metadata) 425define <8 x i1> @vfptoui_v8f16_v8i1(<8 x half> %va) strictfp { 426; CHECK-LABEL: vfptoui_v8f16_v8i1: 427; CHECK: # %bb.0: 428; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 429; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 430; CHECK-NEXT: vand.vi v8, v9, 1 431; CHECK-NEXT: vmsne.vi v0, v8, 0 432; CHECK-NEXT: ret 433 %evec = call <8 x i1> @llvm.experimental.constrained.fptoui.v8i1.v8f16(<8 x half> %va, metadata !"fpexcept.strict") 434 ret <8 x i1> %evec 435} 436 437declare <8 x i8> @llvm.experimental.constrained.fptosi.v8i8.v8f16(<8 x half>, metadata) 438define <8 x i8> @vfptosi_v8f16_v8i8(<8 x half> %va) strictfp { 439; CHECK-LABEL: vfptosi_v8f16_v8i8: 440; CHECK: # %bb.0: 441; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 442; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 443; CHECK-NEXT: vmv1r.v v8, v9 444; CHECK-NEXT: ret 445 %evec = call <8 x i8> @llvm.experimental.constrained.fptosi.v8i8.v8f16(<8 x half> %va, metadata !"fpexcept.strict") 446 ret <8 x i8> %evec 447} 448 449declare <8 x i8> @llvm.experimental.constrained.fptoui.v8i8.v8f16(<8 x half>, metadata) 450define <8 x i8> @vfptoui_v8f16_v8i8(<8 x half> %va) strictfp { 451; CHECK-LABEL: vfptoui_v8f16_v8i8: 452; CHECK: # %bb.0: 453; CHECK-NEXT: vsetivli zero, 8, e8, mf2, ta, ma 454; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 455; CHECK-NEXT: vmv1r.v v8, v9 456; CHECK-NEXT: ret 457 %evec = call <8 x i8> @llvm.experimental.constrained.fptoui.v8i8.v8f16(<8 x half> %va, metadata !"fpexcept.strict") 458 ret <8 x i8> %evec 459} 460 461declare <8 x i16> @llvm.experimental.constrained.fptosi.v8i16.v8f16(<8 x half>, metadata) 462define <8 x i16> @vfptosi_v8f16_v8i16(<8 x half> %va) strictfp { 463; CHECK-LABEL: vfptosi_v8f16_v8i16: 464; CHECK: # %bb.0: 465; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 466; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 467; CHECK-NEXT: ret 468 %evec = call <8 x i16> @llvm.experimental.constrained.fptosi.v8i16.v8f16(<8 x half> %va, metadata !"fpexcept.strict") 469 ret <8 x i16> %evec 470} 471 472declare <8 x i16> @llvm.experimental.constrained.fptoui.v8i16.v8f16(<8 x half>, metadata) 473define <8 x i16> @vfptoui_v8f16_v8i16(<8 x half> %va) strictfp { 474; CHECK-LABEL: vfptoui_v8f16_v8i16: 475; CHECK: # %bb.0: 476; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 477; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 478; CHECK-NEXT: ret 479 %evec = call <8 x i16> @llvm.experimental.constrained.fptoui.v8i16.v8f16(<8 x half> %va, metadata !"fpexcept.strict") 480 ret <8 x i16> %evec 481} 482 483declare <8 x i32> @llvm.experimental.constrained.fptosi.v8i32.v8f16(<8 x half>, metadata) 484define <8 x i32> @vfptosi_v8f16_v8i32(<8 x half> %va) strictfp { 485; CHECK-LABEL: vfptosi_v8f16_v8i32: 486; CHECK: # %bb.0: 487; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 488; CHECK-NEXT: vfwcvt.rtz.x.f.v v10, v8 489; CHECK-NEXT: vmv2r.v v8, v10 490; CHECK-NEXT: ret 491 %evec = call <8 x i32> @llvm.experimental.constrained.fptosi.v8i32.v8f16(<8 x half> %va, metadata !"fpexcept.strict") 492 ret <8 x i32> %evec 493} 494 495declare <8 x i32> @llvm.experimental.constrained.fptoui.v8i32.v8f16(<8 x half>, metadata) 496define <8 x i32> @vfptoui_v8f16_v8i32(<8 x half> %va) strictfp { 497; CHECK-LABEL: vfptoui_v8f16_v8i32: 498; CHECK: # %bb.0: 499; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 500; CHECK-NEXT: vfwcvt.rtz.xu.f.v v10, v8 501; CHECK-NEXT: vmv2r.v v8, v10 502; CHECK-NEXT: ret 503 %evec = call <8 x i32> @llvm.experimental.constrained.fptoui.v8i32.v8f16(<8 x half> %va, metadata !"fpexcept.strict") 504 ret <8 x i32> %evec 505} 506 507declare <8 x i64> @llvm.experimental.constrained.fptosi.v8i64.v8f16(<8 x half>, metadata) 508define <8 x i64> @vfptosi_v8f16_v8i64(<8 x half> %va) strictfp { 509; CHECK-LABEL: vfptosi_v8f16_v8i64: 510; CHECK: # %bb.0: 511; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 512; CHECK-NEXT: vfwcvt.f.f.v v12, v8 513; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma 514; CHECK-NEXT: vfwcvt.rtz.x.f.v v8, v12 515; CHECK-NEXT: ret 516 %evec = call <8 x i64> @llvm.experimental.constrained.fptosi.v8i64.v8f16(<8 x half> %va, metadata !"fpexcept.strict") 517 ret <8 x i64> %evec 518} 519 520declare <8 x i64> @llvm.experimental.constrained.fptoui.v8i64.v8f16(<8 x half>, metadata) 521define <8 x i64> @vfptoui_v8f16_v8i64(<8 x half> %va) strictfp { 522; CHECK-LABEL: vfptoui_v8f16_v8i64: 523; CHECK: # %bb.0: 524; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 525; CHECK-NEXT: vfwcvt.f.f.v v12, v8 526; CHECK-NEXT: vsetvli zero, zero, e32, m2, ta, ma 527; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v12 528; CHECK-NEXT: ret 529 %evec = call <8 x i64> @llvm.experimental.constrained.fptoui.v8i64.v8f16(<8 x half> %va, metadata !"fpexcept.strict") 530 ret <8 x i64> %evec 531} 532 533declare <16 x i1> @llvm.experimental.constrained.fptosi.v16i1.v16f16(<16 x half>, metadata) 534define <16 x i1> @vfptosi_v16f16_v16i1(<16 x half> %va) strictfp { 535; CHECK-LABEL: vfptosi_v16f16_v16i1: 536; CHECK: # %bb.0: 537; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma 538; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 539; CHECK-NEXT: vand.vi v8, v10, 1 540; CHECK-NEXT: vmsne.vi v0, v8, 0 541; CHECK-NEXT: ret 542 %evec = call <16 x i1> @llvm.experimental.constrained.fptosi.v16i1.v16f16(<16 x half> %va, metadata !"fpexcept.strict") 543 ret <16 x i1> %evec 544} 545 546declare <16 x i1> @llvm.experimental.constrained.fptoui.v16i1.v16f16(<16 x half>, metadata) 547define <16 x i1> @vfptoui_v16f16_v16i1(<16 x half> %va) strictfp { 548; CHECK-LABEL: vfptoui_v16f16_v16i1: 549; CHECK: # %bb.0: 550; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma 551; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 552; CHECK-NEXT: vand.vi v8, v10, 1 553; CHECK-NEXT: vmsne.vi v0, v8, 0 554; CHECK-NEXT: ret 555 %evec = call <16 x i1> @llvm.experimental.constrained.fptoui.v16i1.v16f16(<16 x half> %va, metadata !"fpexcept.strict") 556 ret <16 x i1> %evec 557} 558 559declare <16 x i8> @llvm.experimental.constrained.fptosi.v16i8.v16f16(<16 x half>, metadata) 560define <16 x i8> @vfptosi_v16f16_v16i8(<16 x half> %va) strictfp { 561; CHECK-LABEL: vfptosi_v16f16_v16i8: 562; CHECK: # %bb.0: 563; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma 564; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 565; CHECK-NEXT: vmv.v.v v8, v10 566; CHECK-NEXT: ret 567 %evec = call <16 x i8> @llvm.experimental.constrained.fptosi.v16i8.v16f16(<16 x half> %va, metadata !"fpexcept.strict") 568 ret <16 x i8> %evec 569} 570 571declare <16 x i8> @llvm.experimental.constrained.fptoui.v16i8.v16f16(<16 x half>, metadata) 572define <16 x i8> @vfptoui_v16f16_v16i8(<16 x half> %va) strictfp { 573; CHECK-LABEL: vfptoui_v16f16_v16i8: 574; CHECK: # %bb.0: 575; CHECK-NEXT: vsetivli zero, 16, e8, m1, ta, ma 576; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 577; CHECK-NEXT: vmv.v.v v8, v10 578; CHECK-NEXT: ret 579 %evec = call <16 x i8> @llvm.experimental.constrained.fptoui.v16i8.v16f16(<16 x half> %va, metadata !"fpexcept.strict") 580 ret <16 x i8> %evec 581} 582 583declare <16 x i16> @llvm.experimental.constrained.fptosi.v16i16.v16f16(<16 x half>, metadata) 584define <16 x i16> @vfptosi_v16f16_v16i16(<16 x half> %va) strictfp { 585; CHECK-LABEL: vfptosi_v16f16_v16i16: 586; CHECK: # %bb.0: 587; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 588; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 589; CHECK-NEXT: ret 590 %evec = call <16 x i16> @llvm.experimental.constrained.fptosi.v16i16.v16f16(<16 x half> %va, metadata !"fpexcept.strict") 591 ret <16 x i16> %evec 592} 593 594declare <16 x i16> @llvm.experimental.constrained.fptoui.v16i16.v16f16(<16 x half>, metadata) 595define <16 x i16> @vfptoui_v16f16_v16i16(<16 x half> %va) strictfp { 596; CHECK-LABEL: vfptoui_v16f16_v16i16: 597; CHECK: # %bb.0: 598; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 599; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 600; CHECK-NEXT: ret 601 %evec = call <16 x i16> @llvm.experimental.constrained.fptoui.v16i16.v16f16(<16 x half> %va, metadata !"fpexcept.strict") 602 ret <16 x i16> %evec 603} 604 605declare <16 x i32> @llvm.experimental.constrained.fptosi.v16i32.v16f16(<16 x half>, metadata) 606define <16 x i32> @vfptosi_v16f16_v16i32(<16 x half> %va) strictfp { 607; CHECK-LABEL: vfptosi_v16f16_v16i32: 608; CHECK: # %bb.0: 609; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 610; CHECK-NEXT: vfwcvt.rtz.x.f.v v12, v8 611; CHECK-NEXT: vmv4r.v v8, v12 612; CHECK-NEXT: ret 613 %evec = call <16 x i32> @llvm.experimental.constrained.fptosi.v16i32.v16f16(<16 x half> %va, metadata !"fpexcept.strict") 614 ret <16 x i32> %evec 615} 616 617declare <16 x i32> @llvm.experimental.constrained.fptoui.v16i32.v16f16(<16 x half>, metadata) 618define <16 x i32> @vfptoui_v16f16_v16i32(<16 x half> %va) strictfp { 619; CHECK-LABEL: vfptoui_v16f16_v16i32: 620; CHECK: # %bb.0: 621; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 622; CHECK-NEXT: vfwcvt.rtz.xu.f.v v12, v8 623; CHECK-NEXT: vmv4r.v v8, v12 624; CHECK-NEXT: ret 625 %evec = call <16 x i32> @llvm.experimental.constrained.fptoui.v16i32.v16f16(<16 x half> %va, metadata !"fpexcept.strict") 626 ret <16 x i32> %evec 627} 628 629declare <32 x i1> @llvm.experimental.constrained.fptosi.v32i1.v32f16(<32 x half>, metadata) 630define <32 x i1> @vfptosi_v32f16_v32i1(<32 x half> %va) strictfp { 631; CHECK-LABEL: vfptosi_v32f16_v32i1: 632; CHECK: # %bb.0: 633; CHECK-NEXT: li a0, 32 634; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 635; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 636; CHECK-NEXT: vand.vi v8, v12, 1 637; CHECK-NEXT: vmsne.vi v0, v8, 0 638; CHECK-NEXT: ret 639 %evec = call <32 x i1> @llvm.experimental.constrained.fptosi.v32i1.v32f16(<32 x half> %va, metadata !"fpexcept.strict") 640 ret <32 x i1> %evec 641} 642 643declare <32 x i1> @llvm.experimental.constrained.fptoui.v32i1.v32f16(<32 x half>, metadata) 644define <32 x i1> @vfptoui_v32f16_v32i1(<32 x half> %va) strictfp { 645; CHECK-LABEL: vfptoui_v32f16_v32i1: 646; CHECK: # %bb.0: 647; CHECK-NEXT: li a0, 32 648; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 649; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 650; CHECK-NEXT: vand.vi v8, v12, 1 651; CHECK-NEXT: vmsne.vi v0, v8, 0 652; CHECK-NEXT: ret 653 %evec = call <32 x i1> @llvm.experimental.constrained.fptoui.v32i1.v32f16(<32 x half> %va, metadata !"fpexcept.strict") 654 ret <32 x i1> %evec 655} 656 657declare <32 x i8> @llvm.experimental.constrained.fptosi.v32i8.v32f16(<32 x half>, metadata) 658define <32 x i8> @vfptosi_v32f16_v32i8(<32 x half> %va) strictfp { 659; CHECK-LABEL: vfptosi_v32f16_v32i8: 660; CHECK: # %bb.0: 661; CHECK-NEXT: li a0, 32 662; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 663; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 664; CHECK-NEXT: vmv.v.v v8, v12 665; CHECK-NEXT: ret 666 %evec = call <32 x i8> @llvm.experimental.constrained.fptosi.v32i8.v32f16(<32 x half> %va, metadata !"fpexcept.strict") 667 ret <32 x i8> %evec 668} 669 670declare <32 x i8> @llvm.experimental.constrained.fptoui.v32i8.v32f16(<32 x half>, metadata) 671define <32 x i8> @vfptoui_v32f16_v32i8(<32 x half> %va) strictfp { 672; CHECK-LABEL: vfptoui_v32f16_v32i8: 673; CHECK: # %bb.0: 674; CHECK-NEXT: li a0, 32 675; CHECK-NEXT: vsetvli zero, a0, e8, m2, ta, ma 676; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 677; CHECK-NEXT: vmv.v.v v8, v12 678; CHECK-NEXT: ret 679 %evec = call <32 x i8> @llvm.experimental.constrained.fptoui.v32i8.v32f16(<32 x half> %va, metadata !"fpexcept.strict") 680 ret <32 x i8> %evec 681} 682 683declare <32 x i16> @llvm.experimental.constrained.fptosi.v32i16.v32f16(<32 x half>, metadata) 684define <32 x i16> @vfptosi_v32f16_v32i16(<32 x half> %va) strictfp { 685; CHECK-LABEL: vfptosi_v32f16_v32i16: 686; CHECK: # %bb.0: 687; CHECK-NEXT: li a0, 32 688; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 689; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 690; CHECK-NEXT: ret 691 %evec = call <32 x i16> @llvm.experimental.constrained.fptosi.v32i16.v32f16(<32 x half> %va, metadata !"fpexcept.strict") 692 ret <32 x i16> %evec 693} 694 695declare <32 x i16> @llvm.experimental.constrained.fptoui.v32i16.v32f16(<32 x half>, metadata) 696define <32 x i16> @vfptoui_v32f16_v32i16(<32 x half> %va) strictfp { 697; CHECK-LABEL: vfptoui_v32f16_v32i16: 698; CHECK: # %bb.0: 699; CHECK-NEXT: li a0, 32 700; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 701; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 702; CHECK-NEXT: ret 703 %evec = call <32 x i16> @llvm.experimental.constrained.fptoui.v32i16.v32f16(<32 x half> %va, metadata !"fpexcept.strict") 704 ret <32 x i16> %evec 705} 706 707declare <1 x i1> @llvm.experimental.constrained.fptosi.v1i1.v1f32(<1 x float>, metadata) 708define <1 x i1> @vfptosi_v1f32_v1i1(<1 x float> %va) strictfp { 709; CHECK-LABEL: vfptosi_v1f32_v1i1: 710; CHECK: # %bb.0: 711; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 712; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 713; CHECK-NEXT: vand.vi v8, v9, 1 714; CHECK-NEXT: vmsne.vi v0, v8, 0 715; CHECK-NEXT: ret 716 %evec = call <1 x i1> @llvm.experimental.constrained.fptosi.v1i1.v1f32(<1 x float> %va, metadata !"fpexcept.strict") 717 ret <1 x i1> %evec 718} 719 720declare <1 x i1> @llvm.experimental.constrained.fptoui.v1i1.v1f32(<1 x float>, metadata) 721define <1 x i1> @vfptoui_v1f32_v1i1(<1 x float> %va) strictfp { 722; CHECK-LABEL: vfptoui_v1f32_v1i1: 723; CHECK: # %bb.0: 724; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 725; CHECK-NEXT: vfncvt.rtz.xu.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 = call <1 x i1> @llvm.experimental.constrained.fptoui.v1i1.v1f32(<1 x float> %va, metadata !"fpexcept.strict") 730 ret <1 x i1> %evec 731} 732 733declare <1 x i8> @llvm.experimental.constrained.fptosi.v1i8.v1f32(<1 x float>, metadata) 734define <1 x i8> @vfptosi_v1f32_v1i8(<1 x float> %va) strictfp { 735; CHECK-LABEL: vfptosi_v1f32_v1i8: 736; CHECK: # %bb.0: 737; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 738; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 739; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma 740; CHECK-NEXT: vnsrl.wi v8, v9, 0 741; CHECK-NEXT: ret 742 %evec = call <1 x i8> @llvm.experimental.constrained.fptosi.v1i8.v1f32(<1 x float> %va, metadata !"fpexcept.strict") 743 ret <1 x i8> %evec 744} 745 746declare <1 x i8> @llvm.experimental.constrained.fptoui.v1i8.v1f32(<1 x float>, metadata) 747define <1 x i8> @vfptoui_v1f32_v1i8(<1 x float> %va) strictfp { 748; CHECK-LABEL: vfptoui_v1f32_v1i8: 749; CHECK: # %bb.0: 750; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 751; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 752; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma 753; CHECK-NEXT: vnsrl.wi v8, v9, 0 754; CHECK-NEXT: ret 755 %evec = call <1 x i8> @llvm.experimental.constrained.fptoui.v1i8.v1f32(<1 x float> %va, metadata !"fpexcept.strict") 756 ret <1 x i8> %evec 757} 758 759declare <1 x i16> @llvm.experimental.constrained.fptosi.v1i16.v1f32(<1 x float>, metadata) 760define <1 x i16> @vfptosi_v1f32_v1i16(<1 x float> %va) strictfp { 761; CHECK-LABEL: vfptosi_v1f32_v1i16: 762; CHECK: # %bb.0: 763; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 764; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 765; CHECK-NEXT: vmv1r.v v8, v9 766; CHECK-NEXT: ret 767 %evec = call <1 x i16> @llvm.experimental.constrained.fptosi.v1i16.v1f32(<1 x float> %va, metadata !"fpexcept.strict") 768 ret <1 x i16> %evec 769} 770 771declare <1 x i16> @llvm.experimental.constrained.fptoui.v1i16.v1f32(<1 x float>, metadata) 772define <1 x i16> @vfptoui_v1f32_v1i16(<1 x float> %va) strictfp { 773; CHECK-LABEL: vfptoui_v1f32_v1i16: 774; CHECK: # %bb.0: 775; CHECK-NEXT: vsetivli zero, 1, e16, mf4, ta, ma 776; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 777; CHECK-NEXT: vmv1r.v v8, v9 778; CHECK-NEXT: ret 779 %evec = call <1 x i16> @llvm.experimental.constrained.fptoui.v1i16.v1f32(<1 x float> %va, metadata !"fpexcept.strict") 780 ret <1 x i16> %evec 781} 782 783declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(<1 x float>, metadata) 784define <1 x i32> @vfptosi_v1f32_v1i32(<1 x float> %va) strictfp { 785; CHECK-LABEL: vfptosi_v1f32_v1i32: 786; CHECK: # %bb.0: 787; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 788; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 789; CHECK-NEXT: ret 790 %evec = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f32(<1 x float> %va, metadata !"fpexcept.strict") 791 ret <1 x i32> %evec 792} 793 794declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(<1 x float>, metadata) 795define <1 x i32> @vfptoui_v1f32_v1i32(<1 x float> %va) strictfp { 796; CHECK-LABEL: vfptoui_v1f32_v1i32: 797; CHECK: # %bb.0: 798; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 799; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 800; CHECK-NEXT: ret 801 %evec = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f32(<1 x float> %va, metadata !"fpexcept.strict") 802 ret <1 x i32> %evec 803} 804 805declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(<1 x float>, metadata) 806define <1 x i64> @vfptosi_v1f32_v1i64(<1 x float> %va) strictfp { 807; CHECK-LABEL: vfptosi_v1f32_v1i64: 808; CHECK: # %bb.0: 809; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 810; CHECK-NEXT: vfwcvt.rtz.x.f.v v9, v8 811; CHECK-NEXT: vmv1r.v v8, v9 812; CHECK-NEXT: ret 813 %evec = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f32(<1 x float> %va, metadata !"fpexcept.strict") 814 ret <1 x i64> %evec 815} 816 817declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(<1 x float>, metadata) 818define <1 x i64> @vfptoui_v1f32_v1i64(<1 x float> %va) strictfp { 819; CHECK-LABEL: vfptoui_v1f32_v1i64: 820; CHECK: # %bb.0: 821; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 822; CHECK-NEXT: vfwcvt.rtz.xu.f.v v9, v8 823; CHECK-NEXT: vmv1r.v v8, v9 824; CHECK-NEXT: ret 825 %evec = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f32(<1 x float> %va, metadata !"fpexcept.strict") 826 ret <1 x i64> %evec 827} 828 829declare <2 x i1> @llvm.experimental.constrained.fptosi.v2i1.v2f32(<2 x float>, metadata) 830define <2 x i1> @vfptosi_v2f32_v2i1(<2 x float> %va) strictfp { 831; CHECK-LABEL: vfptosi_v2f32_v2i1: 832; CHECK: # %bb.0: 833; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 834; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 835; CHECK-NEXT: vand.vi v8, v9, 1 836; CHECK-NEXT: vmsne.vi v0, v8, 0 837; CHECK-NEXT: ret 838 %evec = call <2 x i1> @llvm.experimental.constrained.fptosi.v2i1.v2f32(<2 x float> %va, metadata !"fpexcept.strict") 839 ret <2 x i1> %evec 840} 841 842declare <2 x i1> @llvm.experimental.constrained.fptoui.v2i1.v2f32(<2 x float>, metadata) 843define <2 x i1> @vfptoui_v2f32_v2i1(<2 x float> %va) strictfp { 844; CHECK-LABEL: vfptoui_v2f32_v2i1: 845; CHECK: # %bb.0: 846; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 847; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 848; CHECK-NEXT: vand.vi v8, v9, 1 849; CHECK-NEXT: vmsne.vi v0, v8, 0 850; CHECK-NEXT: ret 851 %evec = call <2 x i1> @llvm.experimental.constrained.fptoui.v2i1.v2f32(<2 x float> %va, metadata !"fpexcept.strict") 852 ret <2 x i1> %evec 853} 854 855declare <2 x i8> @llvm.experimental.constrained.fptosi.v2i8.v2f32(<2 x float>, metadata) 856define <2 x i8> @vfptosi_v2f32_v2i8(<2 x float> %va) strictfp { 857; CHECK-LABEL: vfptosi_v2f32_v2i8: 858; CHECK: # %bb.0: 859; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 860; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 861; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma 862; CHECK-NEXT: vnsrl.wi v8, v9, 0 863; CHECK-NEXT: ret 864 %evec = call <2 x i8> @llvm.experimental.constrained.fptosi.v2i8.v2f32(<2 x float> %va, metadata !"fpexcept.strict") 865 ret <2 x i8> %evec 866} 867 868declare <2 x i8> @llvm.experimental.constrained.fptoui.v2i8.v2f32(<2 x float>, metadata) 869define <2 x i8> @vfptoui_v2f32_v2i8(<2 x float> %va) strictfp { 870; CHECK-LABEL: vfptoui_v2f32_v2i8: 871; CHECK: # %bb.0: 872; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 873; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 874; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma 875; CHECK-NEXT: vnsrl.wi v8, v9, 0 876; CHECK-NEXT: ret 877 %evec = call <2 x i8> @llvm.experimental.constrained.fptoui.v2i8.v2f32(<2 x float> %va, metadata !"fpexcept.strict") 878 ret <2 x i8> %evec 879} 880 881declare <2 x i16> @llvm.experimental.constrained.fptosi.v2i16.v2f32(<2 x float>, metadata) 882define <2 x i16> @vfptosi_v2f32_v2i16(<2 x float> %va) strictfp { 883; CHECK-LABEL: vfptosi_v2f32_v2i16: 884; CHECK: # %bb.0: 885; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 886; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 887; CHECK-NEXT: vmv1r.v v8, v9 888; CHECK-NEXT: ret 889 %evec = call <2 x i16> @llvm.experimental.constrained.fptosi.v2i16.v2f32(<2 x float> %va, metadata !"fpexcept.strict") 890 ret <2 x i16> %evec 891} 892 893declare <2 x i16> @llvm.experimental.constrained.fptoui.v2i16.v2f32(<2 x float>, metadata) 894define <2 x i16> @vfptoui_v2f32_v2i16(<2 x float> %va) strictfp { 895; CHECK-LABEL: vfptoui_v2f32_v2i16: 896; CHECK: # %bb.0: 897; CHECK-NEXT: vsetivli zero, 2, e16, mf4, ta, ma 898; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 899; CHECK-NEXT: vmv1r.v v8, v9 900; CHECK-NEXT: ret 901 %evec = call <2 x i16> @llvm.experimental.constrained.fptoui.v2i16.v2f32(<2 x float> %va, metadata !"fpexcept.strict") 902 ret <2 x i16> %evec 903} 904 905declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(<2 x float>, metadata) 906define <2 x i32> @vfptosi_v2f32_v2i32(<2 x float> %va) strictfp { 907; CHECK-LABEL: vfptosi_v2f32_v2i32: 908; CHECK: # %bb.0: 909; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 910; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 911; CHECK-NEXT: ret 912 %evec = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f32(<2 x float> %va, metadata !"fpexcept.strict") 913 ret <2 x i32> %evec 914} 915 916declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(<2 x float>, metadata) 917define <2 x i32> @vfptoui_v2f32_v2i32(<2 x float> %va) strictfp { 918; CHECK-LABEL: vfptoui_v2f32_v2i32: 919; CHECK: # %bb.0: 920; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 921; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 922; CHECK-NEXT: ret 923 %evec = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f32(<2 x float> %va, metadata !"fpexcept.strict") 924 ret <2 x i32> %evec 925} 926 927declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(<2 x float>, metadata) 928define <2 x i64> @vfptosi_v2f32_v2i64(<2 x float> %va) strictfp { 929; CHECK-LABEL: vfptosi_v2f32_v2i64: 930; CHECK: # %bb.0: 931; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 932; CHECK-NEXT: vfwcvt.rtz.x.f.v v9, v8 933; CHECK-NEXT: vmv1r.v v8, v9 934; CHECK-NEXT: ret 935 %evec = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f32(<2 x float> %va, metadata !"fpexcept.strict") 936 ret <2 x i64> %evec 937} 938 939declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(<2 x float>, metadata) 940define <2 x i64> @vfptoui_v2f32_v2i64(<2 x float> %va) strictfp { 941; CHECK-LABEL: vfptoui_v2f32_v2i64: 942; CHECK: # %bb.0: 943; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 944; CHECK-NEXT: vfwcvt.rtz.xu.f.v v9, v8 945; CHECK-NEXT: vmv1r.v v8, v9 946; CHECK-NEXT: ret 947 %evec = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f32(<2 x float> %va, metadata !"fpexcept.strict") 948 ret <2 x i64> %evec 949} 950 951declare <4 x i1> @llvm.experimental.constrained.fptosi.v4i1.v4f32(<4 x float>, metadata) 952define <4 x i1> @vfptosi_v4f32_v4i1(<4 x float> %va) strictfp { 953; CHECK-LABEL: vfptosi_v4f32_v4i1: 954; CHECK: # %bb.0: 955; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 956; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 957; CHECK-NEXT: vand.vi v8, v9, 1 958; CHECK-NEXT: vmsne.vi v0, v8, 0 959; CHECK-NEXT: ret 960 %evec = call <4 x i1> @llvm.experimental.constrained.fptosi.v4i1.v4f32(<4 x float> %va, metadata !"fpexcept.strict") 961 ret <4 x i1> %evec 962} 963 964declare <4 x i1> @llvm.experimental.constrained.fptoui.v4i1.v4f32(<4 x float>, metadata) 965define <4 x i1> @vfptoui_v4f32_v4i1(<4 x float> %va) strictfp { 966; CHECK-LABEL: vfptoui_v4f32_v4i1: 967; CHECK: # %bb.0: 968; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 969; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 970; CHECK-NEXT: vand.vi v8, v9, 1 971; CHECK-NEXT: vmsne.vi v0, v8, 0 972; CHECK-NEXT: ret 973 %evec = call <4 x i1> @llvm.experimental.constrained.fptoui.v4i1.v4f32(<4 x float> %va, metadata !"fpexcept.strict") 974 ret <4 x i1> %evec 975} 976 977declare <4 x i8> @llvm.experimental.constrained.fptosi.v4i8.v4f32(<4 x float>, metadata) 978define <4 x i8> @vfptosi_v4f32_v4i8(<4 x float> %va) strictfp { 979; CHECK-LABEL: vfptosi_v4f32_v4i8: 980; CHECK: # %bb.0: 981; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 982; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 983; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma 984; CHECK-NEXT: vnsrl.wi v8, v9, 0 985; CHECK-NEXT: ret 986 %evec = call <4 x i8> @llvm.experimental.constrained.fptosi.v4i8.v4f32(<4 x float> %va, metadata !"fpexcept.strict") 987 ret <4 x i8> %evec 988} 989 990declare <4 x i8> @llvm.experimental.constrained.fptoui.v4i8.v4f32(<4 x float>, metadata) 991define <4 x i8> @vfptoui_v4f32_v4i8(<4 x float> %va) strictfp { 992; CHECK-LABEL: vfptoui_v4f32_v4i8: 993; CHECK: # %bb.0: 994; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 995; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 996; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma 997; CHECK-NEXT: vnsrl.wi v8, v9, 0 998; CHECK-NEXT: ret 999 %evec = call <4 x i8> @llvm.experimental.constrained.fptoui.v4i8.v4f32(<4 x float> %va, metadata !"fpexcept.strict") 1000 ret <4 x i8> %evec 1001} 1002 1003declare <4 x i16> @llvm.experimental.constrained.fptosi.v4i16.v4f32(<4 x float>, metadata) 1004define <4 x i16> @vfptosi_v4f32_v4i16(<4 x float> %va) strictfp { 1005; CHECK-LABEL: vfptosi_v4f32_v4i16: 1006; CHECK: # %bb.0: 1007; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1008; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 1009; CHECK-NEXT: vmv1r.v v8, v9 1010; CHECK-NEXT: ret 1011 %evec = call <4 x i16> @llvm.experimental.constrained.fptosi.v4i16.v4f32(<4 x float> %va, metadata !"fpexcept.strict") 1012 ret <4 x i16> %evec 1013} 1014 1015declare <4 x i16> @llvm.experimental.constrained.fptoui.v4i16.v4f32(<4 x float>, metadata) 1016define <4 x i16> @vfptoui_v4f32_v4i16(<4 x float> %va) strictfp { 1017; CHECK-LABEL: vfptoui_v4f32_v4i16: 1018; CHECK: # %bb.0: 1019; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma 1020; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 1021; CHECK-NEXT: vmv1r.v v8, v9 1022; CHECK-NEXT: ret 1023 %evec = call <4 x i16> @llvm.experimental.constrained.fptoui.v4i16.v4f32(<4 x float> %va, metadata !"fpexcept.strict") 1024 ret <4 x i16> %evec 1025} 1026 1027declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float>, metadata) 1028define <4 x i32> @vfptosi_v4f32_v4i32(<4 x float> %va) strictfp { 1029; CHECK-LABEL: vfptosi_v4f32_v4i32: 1030; CHECK: # %bb.0: 1031; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 1032; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 1033; CHECK-NEXT: ret 1034 %evec = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f32(<4 x float> %va, metadata !"fpexcept.strict") 1035 ret <4 x i32> %evec 1036} 1037 1038declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float>, metadata) 1039define <4 x i32> @vfptoui_v4f32_v4i32(<4 x float> %va) strictfp { 1040; CHECK-LABEL: vfptoui_v4f32_v4i32: 1041; CHECK: # %bb.0: 1042; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 1043; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 1044; CHECK-NEXT: ret 1045 %evec = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f32(<4 x float> %va, metadata !"fpexcept.strict") 1046 ret <4 x i32> %evec 1047} 1048 1049declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(<4 x float>, metadata) 1050define <4 x i64> @vfptosi_v4f32_v4i64(<4 x float> %va) strictfp { 1051; CHECK-LABEL: vfptosi_v4f32_v4i64: 1052; CHECK: # %bb.0: 1053; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 1054; CHECK-NEXT: vfwcvt.rtz.x.f.v v10, v8 1055; CHECK-NEXT: vmv2r.v v8, v10 1056; CHECK-NEXT: ret 1057 %evec = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f32(<4 x float> %va, metadata !"fpexcept.strict") 1058 ret <4 x i64> %evec 1059} 1060 1061declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(<4 x float>, metadata) 1062define <4 x i64> @vfptoui_v4f32_v4i64(<4 x float> %va) strictfp { 1063; CHECK-LABEL: vfptoui_v4f32_v4i64: 1064; CHECK: # %bb.0: 1065; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 1066; CHECK-NEXT: vfwcvt.rtz.xu.f.v v10, v8 1067; CHECK-NEXT: vmv2r.v v8, v10 1068; CHECK-NEXT: ret 1069 %evec = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f32(<4 x float> %va, metadata !"fpexcept.strict") 1070 ret <4 x i64> %evec 1071} 1072 1073declare <8 x i1> @llvm.experimental.constrained.fptosi.v8i1.v8f32(<8 x float>, metadata) 1074define <8 x i1> @vfptosi_v8f32_v8i1(<8 x float> %va) strictfp { 1075; CHECK-LABEL: vfptosi_v8f32_v8i1: 1076; CHECK: # %bb.0: 1077; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1078; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 1079; CHECK-NEXT: vand.vi v8, v10, 1 1080; CHECK-NEXT: vmsne.vi v0, v8, 0 1081; CHECK-NEXT: ret 1082 %evec = call <8 x i1> @llvm.experimental.constrained.fptosi.v8i1.v8f32(<8 x float> %va, metadata !"fpexcept.strict") 1083 ret <8 x i1> %evec 1084} 1085 1086declare <8 x i1> @llvm.experimental.constrained.fptoui.v8i1.v8f32(<8 x float>, metadata) 1087define <8 x i1> @vfptoui_v8f32_v8i1(<8 x float> %va) strictfp { 1088; CHECK-LABEL: vfptoui_v8f32_v8i1: 1089; CHECK: # %bb.0: 1090; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1091; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 1092; CHECK-NEXT: vand.vi v8, v10, 1 1093; CHECK-NEXT: vmsne.vi v0, v8, 0 1094; CHECK-NEXT: ret 1095 %evec = call <8 x i1> @llvm.experimental.constrained.fptoui.v8i1.v8f32(<8 x float> %va, metadata !"fpexcept.strict") 1096 ret <8 x i1> %evec 1097} 1098 1099declare <8 x i8> @llvm.experimental.constrained.fptosi.v8i8.v8f32(<8 x float>, metadata) 1100define <8 x i8> @vfptosi_v8f32_v8i8(<8 x float> %va) strictfp { 1101; CHECK-LABEL: vfptosi_v8f32_v8i8: 1102; CHECK: # %bb.0: 1103; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1104; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 1105; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, ma 1106; CHECK-NEXT: vnsrl.wi v8, v10, 0 1107; CHECK-NEXT: ret 1108 %evec = call <8 x i8> @llvm.experimental.constrained.fptosi.v8i8.v8f32(<8 x float> %va, metadata !"fpexcept.strict") 1109 ret <8 x i8> %evec 1110} 1111 1112declare <8 x i8> @llvm.experimental.constrained.fptoui.v8i8.v8f32(<8 x float>, metadata) 1113define <8 x i8> @vfptoui_v8f32_v8i8(<8 x float> %va) strictfp { 1114; CHECK-LABEL: vfptoui_v8f32_v8i8: 1115; CHECK: # %bb.0: 1116; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1117; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 1118; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, ma 1119; CHECK-NEXT: vnsrl.wi v8, v10, 0 1120; CHECK-NEXT: ret 1121 %evec = call <8 x i8> @llvm.experimental.constrained.fptoui.v8i8.v8f32(<8 x float> %va, metadata !"fpexcept.strict") 1122 ret <8 x i8> %evec 1123} 1124 1125declare <8 x i16> @llvm.experimental.constrained.fptosi.v8i16.v8f32(<8 x float>, metadata) 1126define <8 x i16> @vfptosi_v8f32_v8i16(<8 x float> %va) strictfp { 1127; CHECK-LABEL: vfptosi_v8f32_v8i16: 1128; CHECK: # %bb.0: 1129; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1130; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 1131; CHECK-NEXT: vmv.v.v v8, v10 1132; CHECK-NEXT: ret 1133 %evec = call <8 x i16> @llvm.experimental.constrained.fptosi.v8i16.v8f32(<8 x float> %va, metadata !"fpexcept.strict") 1134 ret <8 x i16> %evec 1135} 1136 1137declare <8 x i16> @llvm.experimental.constrained.fptoui.v8i16.v8f32(<8 x float>, metadata) 1138define <8 x i16> @vfptoui_v8f32_v8i16(<8 x float> %va) strictfp { 1139; CHECK-LABEL: vfptoui_v8f32_v8i16: 1140; CHECK: # %bb.0: 1141; CHECK-NEXT: vsetivli zero, 8, e16, m1, ta, ma 1142; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 1143; CHECK-NEXT: vmv.v.v v8, v10 1144; CHECK-NEXT: ret 1145 %evec = call <8 x i16> @llvm.experimental.constrained.fptoui.v8i16.v8f32(<8 x float> %va, metadata !"fpexcept.strict") 1146 ret <8 x i16> %evec 1147} 1148 1149declare <8 x i32> @llvm.experimental.constrained.fptosi.v8i32.v8f32(<8 x float>, metadata) 1150define <8 x i32> @vfptosi_v8f32_v8i32(<8 x float> %va) strictfp { 1151; CHECK-LABEL: vfptosi_v8f32_v8i32: 1152; CHECK: # %bb.0: 1153; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 1154; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 1155; CHECK-NEXT: ret 1156 %evec = call <8 x i32> @llvm.experimental.constrained.fptosi.v8i32.v8f32(<8 x float> %va, metadata !"fpexcept.strict") 1157 ret <8 x i32> %evec 1158} 1159 1160declare <8 x i32> @llvm.experimental.constrained.fptoui.v8i32.v8f32(<8 x float>, metadata) 1161define <8 x i32> @vfptoui_v8f32_v8i32(<8 x float> %va) strictfp { 1162; CHECK-LABEL: vfptoui_v8f32_v8i32: 1163; CHECK: # %bb.0: 1164; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 1165; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 1166; CHECK-NEXT: ret 1167 %evec = call <8 x i32> @llvm.experimental.constrained.fptoui.v8i32.v8f32(<8 x float> %va, metadata !"fpexcept.strict") 1168 ret <8 x i32> %evec 1169} 1170 1171declare <8 x i64> @llvm.experimental.constrained.fptosi.v8i64.v8f32(<8 x float>, metadata) 1172define <8 x i64> @vfptosi_v8f32_v8i64(<8 x float> %va) strictfp { 1173; CHECK-LABEL: vfptosi_v8f32_v8i64: 1174; CHECK: # %bb.0: 1175; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 1176; CHECK-NEXT: vfwcvt.rtz.x.f.v v12, v8 1177; CHECK-NEXT: vmv4r.v v8, v12 1178; CHECK-NEXT: ret 1179 %evec = call <8 x i64> @llvm.experimental.constrained.fptosi.v8i64.v8f32(<8 x float> %va, metadata !"fpexcept.strict") 1180 ret <8 x i64> %evec 1181} 1182 1183declare <8 x i64> @llvm.experimental.constrained.fptoui.v8i64.v8f32(<8 x float>, metadata) 1184define <8 x i64> @vfptoui_v8f32_v8i64(<8 x float> %va) strictfp { 1185; CHECK-LABEL: vfptoui_v8f32_v8i64: 1186; CHECK: # %bb.0: 1187; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 1188; CHECK-NEXT: vfwcvt.rtz.xu.f.v v12, v8 1189; CHECK-NEXT: vmv4r.v v8, v12 1190; CHECK-NEXT: ret 1191 %evec = call <8 x i64> @llvm.experimental.constrained.fptoui.v8i64.v8f32(<8 x float> %va, metadata !"fpexcept.strict") 1192 ret <8 x i64> %evec 1193} 1194 1195declare <16 x i1> @llvm.experimental.constrained.fptosi.v16i1.v16f32(<16 x float>, metadata) 1196define <16 x i1> @vfptosi_v16f32_v16i1(<16 x float> %va) strictfp { 1197; CHECK-LABEL: vfptosi_v16f32_v16i1: 1198; CHECK: # %bb.0: 1199; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 1200; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 1201; CHECK-NEXT: vand.vi v8, v12, 1 1202; CHECK-NEXT: vmsne.vi v0, v8, 0 1203; CHECK-NEXT: ret 1204 %evec = call <16 x i1> @llvm.experimental.constrained.fptosi.v16i1.v16f32(<16 x float> %va, metadata !"fpexcept.strict") 1205 ret <16 x i1> %evec 1206} 1207 1208declare <16 x i1> @llvm.experimental.constrained.fptoui.v16i1.v16f32(<16 x float>, metadata) 1209define <16 x i1> @vfptoui_v16f32_v16i1(<16 x float> %va) strictfp { 1210; CHECK-LABEL: vfptoui_v16f32_v16i1: 1211; CHECK: # %bb.0: 1212; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 1213; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 1214; CHECK-NEXT: vand.vi v8, v12, 1 1215; CHECK-NEXT: vmsne.vi v0, v8, 0 1216; CHECK-NEXT: ret 1217 %evec = call <16 x i1> @llvm.experimental.constrained.fptoui.v16i1.v16f32(<16 x float> %va, metadata !"fpexcept.strict") 1218 ret <16 x i1> %evec 1219} 1220 1221declare <16 x i8> @llvm.experimental.constrained.fptosi.v16i8.v16f32(<16 x float>, metadata) 1222define <16 x i8> @vfptosi_v16f32_v16i8(<16 x float> %va) strictfp { 1223; CHECK-LABEL: vfptosi_v16f32_v16i8: 1224; CHECK: # %bb.0: 1225; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 1226; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 1227; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma 1228; CHECK-NEXT: vnsrl.wi v8, v12, 0 1229; CHECK-NEXT: ret 1230 %evec = call <16 x i8> @llvm.experimental.constrained.fptosi.v16i8.v16f32(<16 x float> %va, metadata !"fpexcept.strict") 1231 ret <16 x i8> %evec 1232} 1233 1234declare <16 x i8> @llvm.experimental.constrained.fptoui.v16i8.v16f32(<16 x float>, metadata) 1235define <16 x i8> @vfptoui_v16f32_v16i8(<16 x float> %va) strictfp { 1236; CHECK-LABEL: vfptoui_v16f32_v16i8: 1237; CHECK: # %bb.0: 1238; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 1239; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 1240; CHECK-NEXT: vsetvli zero, zero, e8, m1, ta, ma 1241; CHECK-NEXT: vnsrl.wi v8, v12, 0 1242; CHECK-NEXT: ret 1243 %evec = call <16 x i8> @llvm.experimental.constrained.fptoui.v16i8.v16f32(<16 x float> %va, metadata !"fpexcept.strict") 1244 ret <16 x i8> %evec 1245} 1246 1247declare <16 x i16> @llvm.experimental.constrained.fptosi.v16i16.v16f32(<16 x float>, metadata) 1248define <16 x i16> @vfptosi_v16f32_v16i16(<16 x float> %va) strictfp { 1249; CHECK-LABEL: vfptosi_v16f32_v16i16: 1250; CHECK: # %bb.0: 1251; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 1252; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 1253; CHECK-NEXT: vmv.v.v v8, v12 1254; CHECK-NEXT: ret 1255 %evec = call <16 x i16> @llvm.experimental.constrained.fptosi.v16i16.v16f32(<16 x float> %va, metadata !"fpexcept.strict") 1256 ret <16 x i16> %evec 1257} 1258 1259declare <16 x i16> @llvm.experimental.constrained.fptoui.v16i16.v16f32(<16 x float>, metadata) 1260define <16 x i16> @vfptoui_v16f32_v16i16(<16 x float> %va) strictfp { 1261; CHECK-LABEL: vfptoui_v16f32_v16i16: 1262; CHECK: # %bb.0: 1263; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma 1264; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 1265; CHECK-NEXT: vmv.v.v v8, v12 1266; CHECK-NEXT: ret 1267 %evec = call <16 x i16> @llvm.experimental.constrained.fptoui.v16i16.v16f32(<16 x float> %va, metadata !"fpexcept.strict") 1268 ret <16 x i16> %evec 1269} 1270 1271declare <16 x i32> @llvm.experimental.constrained.fptosi.v16i32.v16f32(<16 x float>, metadata) 1272define <16 x i32> @vfptosi_v16f32_v16i32(<16 x float> %va) strictfp { 1273; CHECK-LABEL: vfptosi_v16f32_v16i32: 1274; CHECK: # %bb.0: 1275; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 1276; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 1277; CHECK-NEXT: ret 1278 %evec = call <16 x i32> @llvm.experimental.constrained.fptosi.v16i32.v16f32(<16 x float> %va, metadata !"fpexcept.strict") 1279 ret <16 x i32> %evec 1280} 1281 1282declare <16 x i32> @llvm.experimental.constrained.fptoui.v16i32.v16f32(<16 x float>, metadata) 1283define <16 x i32> @vfptoui_v16f32_v16i32(<16 x float> %va) strictfp { 1284; CHECK-LABEL: vfptoui_v16f32_v16i32: 1285; CHECK: # %bb.0: 1286; CHECK-NEXT: vsetivli zero, 16, e32, m4, ta, ma 1287; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 1288; CHECK-NEXT: ret 1289 %evec = call <16 x i32> @llvm.experimental.constrained.fptoui.v16i32.v16f32(<16 x float> %va, metadata !"fpexcept.strict") 1290 ret <16 x i32> %evec 1291} 1292 1293declare <1 x i1> @llvm.experimental.constrained.fptosi.v1i1.v1f64(<1 x double>, metadata) 1294define <1 x i1> @vfptosi_v1f64_v1i1(<1 x double> %va) strictfp { 1295; CHECK-LABEL: vfptosi_v1f64_v1i1: 1296; CHECK: # %bb.0: 1297; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 1298; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 1299; CHECK-NEXT: vand.vi v8, v9, 1 1300; CHECK-NEXT: vmsne.vi v0, v8, 0 1301; CHECK-NEXT: ret 1302 %evec = call <1 x i1> @llvm.experimental.constrained.fptosi.v1i1.v1f64(<1 x double> %va, metadata !"fpexcept.strict") 1303 ret <1 x i1> %evec 1304} 1305 1306declare <1 x i1> @llvm.experimental.constrained.fptoui.v1i1.v1f64(<1 x double>, metadata) 1307define <1 x i1> @vfptoui_v1f64_v1i1(<1 x double> %va) strictfp { 1308; CHECK-LABEL: vfptoui_v1f64_v1i1: 1309; CHECK: # %bb.0: 1310; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 1311; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 1312; CHECK-NEXT: vand.vi v8, v9, 1 1313; CHECK-NEXT: vmsne.vi v0, v8, 0 1314; CHECK-NEXT: ret 1315 %evec = call <1 x i1> @llvm.experimental.constrained.fptoui.v1i1.v1f64(<1 x double> %va, metadata !"fpexcept.strict") 1316 ret <1 x i1> %evec 1317} 1318 1319declare <1 x i8> @llvm.experimental.constrained.fptosi.v1i8.v1f64(<1 x double>, metadata) 1320define <1 x i8> @vfptosi_v1f64_v1i8(<1 x double> %va) strictfp { 1321; CHECK-LABEL: vfptosi_v1f64_v1i8: 1322; CHECK: # %bb.0: 1323; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 1324; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 1325; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 1326; CHECK-NEXT: vnsrl.wi v8, v9, 0 1327; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma 1328; CHECK-NEXT: vnsrl.wi v8, v8, 0 1329; CHECK-NEXT: ret 1330 %evec = call <1 x i8> @llvm.experimental.constrained.fptosi.v1i8.v1f64(<1 x double> %va, metadata !"fpexcept.strict") 1331 ret <1 x i8> %evec 1332} 1333 1334declare <1 x i8> @llvm.experimental.constrained.fptoui.v1i8.v1f64(<1 x double>, metadata) 1335define <1 x i8> @vfptoui_v1f64_v1i8(<1 x double> %va) strictfp { 1336; CHECK-LABEL: vfptoui_v1f64_v1i8: 1337; CHECK: # %bb.0: 1338; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 1339; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 1340; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 1341; CHECK-NEXT: vnsrl.wi v8, v9, 0 1342; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma 1343; CHECK-NEXT: vnsrl.wi v8, v8, 0 1344; CHECK-NEXT: ret 1345 %evec = call <1 x i8> @llvm.experimental.constrained.fptoui.v1i8.v1f64(<1 x double> %va, metadata !"fpexcept.strict") 1346 ret <1 x i8> %evec 1347} 1348 1349declare <1 x i16> @llvm.experimental.constrained.fptosi.v1i16.v1f64(<1 x double>, metadata) 1350define <1 x i16> @vfptosi_v1f64_v1i16(<1 x double> %va) strictfp { 1351; CHECK-LABEL: vfptosi_v1f64_v1i16: 1352; CHECK: # %bb.0: 1353; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 1354; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 1355; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 1356; CHECK-NEXT: vnsrl.wi v8, v9, 0 1357; CHECK-NEXT: ret 1358 %evec = call <1 x i16> @llvm.experimental.constrained.fptosi.v1i16.v1f64(<1 x double> %va, metadata !"fpexcept.strict") 1359 ret <1 x i16> %evec 1360} 1361 1362declare <1 x i16> @llvm.experimental.constrained.fptoui.v1i16.v1f64(<1 x double>, metadata) 1363define <1 x i16> @vfptoui_v1f64_v1i16(<1 x double> %va) strictfp { 1364; CHECK-LABEL: vfptoui_v1f64_v1i16: 1365; CHECK: # %bb.0: 1366; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 1367; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 1368; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 1369; CHECK-NEXT: vnsrl.wi v8, v9, 0 1370; CHECK-NEXT: ret 1371 %evec = call <1 x i16> @llvm.experimental.constrained.fptoui.v1i16.v1f64(<1 x double> %va, metadata !"fpexcept.strict") 1372 ret <1 x i16> %evec 1373} 1374 1375declare <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(<1 x double>, metadata) 1376define <1 x i32> @vfptosi_v1f64_v1i32(<1 x double> %va) strictfp { 1377; CHECK-LABEL: vfptosi_v1f64_v1i32: 1378; CHECK: # %bb.0: 1379; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 1380; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 1381; CHECK-NEXT: vmv1r.v v8, v9 1382; CHECK-NEXT: ret 1383 %evec = call <1 x i32> @llvm.experimental.constrained.fptosi.v1i32.v1f64(<1 x double> %va, metadata !"fpexcept.strict") 1384 ret <1 x i32> %evec 1385} 1386 1387declare <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(<1 x double>, metadata) 1388define <1 x i32> @vfptoui_v1f64_v1i32(<1 x double> %va) strictfp { 1389; CHECK-LABEL: vfptoui_v1f64_v1i32: 1390; CHECK: # %bb.0: 1391; CHECK-NEXT: vsetivli zero, 1, e32, mf2, ta, ma 1392; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 1393; CHECK-NEXT: vmv1r.v v8, v9 1394; CHECK-NEXT: ret 1395 %evec = call <1 x i32> @llvm.experimental.constrained.fptoui.v1i32.v1f64(<1 x double> %va, metadata !"fpexcept.strict") 1396 ret <1 x i32> %evec 1397} 1398 1399declare <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(<1 x double>, metadata) 1400define <1 x i64> @vfptosi_v1f64_v1i64(<1 x double> %va) strictfp { 1401; CHECK-LABEL: vfptosi_v1f64_v1i64: 1402; CHECK: # %bb.0: 1403; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 1404; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 1405; CHECK-NEXT: ret 1406 %evec = call <1 x i64> @llvm.experimental.constrained.fptosi.v1i64.v1f64(<1 x double> %va, metadata !"fpexcept.strict") 1407 ret <1 x i64> %evec 1408} 1409 1410declare <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(<1 x double>, metadata) 1411define <1 x i64> @vfptoui_v1f64_v1i64(<1 x double> %va) strictfp { 1412; CHECK-LABEL: vfptoui_v1f64_v1i64: 1413; CHECK: # %bb.0: 1414; CHECK-NEXT: vsetivli zero, 1, e64, m1, ta, ma 1415; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 1416; CHECK-NEXT: ret 1417 %evec = call <1 x i64> @llvm.experimental.constrained.fptoui.v1i64.v1f64(<1 x double> %va, metadata !"fpexcept.strict") 1418 ret <1 x i64> %evec 1419} 1420 1421declare <2 x i1> @llvm.experimental.constrained.fptosi.v2i1.v2f64(<2 x double>, metadata) 1422define <2 x i1> @vfptosi_v2f64_v2i1(<2 x double> %va) strictfp { 1423; CHECK-LABEL: vfptosi_v2f64_v2i1: 1424; CHECK: # %bb.0: 1425; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 1426; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 1427; CHECK-NEXT: vand.vi v8, v9, 1 1428; CHECK-NEXT: vmsne.vi v0, v8, 0 1429; CHECK-NEXT: ret 1430 %evec = call <2 x i1> @llvm.experimental.constrained.fptosi.v2i1.v2f64(<2 x double> %va, metadata !"fpexcept.strict") 1431 ret <2 x i1> %evec 1432} 1433 1434declare <2 x i1> @llvm.experimental.constrained.fptoui.v2i1.v2f64(<2 x double>, metadata) 1435define <2 x i1> @vfptoui_v2f64_v2i1(<2 x double> %va) strictfp { 1436; CHECK-LABEL: vfptoui_v2f64_v2i1: 1437; CHECK: # %bb.0: 1438; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 1439; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 1440; CHECK-NEXT: vand.vi v8, v9, 1 1441; CHECK-NEXT: vmsne.vi v0, v8, 0 1442; CHECK-NEXT: ret 1443 %evec = call <2 x i1> @llvm.experimental.constrained.fptoui.v2i1.v2f64(<2 x double> %va, metadata !"fpexcept.strict") 1444 ret <2 x i1> %evec 1445} 1446 1447declare <2 x i8> @llvm.experimental.constrained.fptosi.v2i8.v2f64(<2 x double>, metadata) 1448define <2 x i8> @vfptosi_v2f64_v2i8(<2 x double> %va) strictfp { 1449; CHECK-LABEL: vfptosi_v2f64_v2i8: 1450; CHECK: # %bb.0: 1451; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 1452; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 1453; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 1454; CHECK-NEXT: vnsrl.wi v8, v9, 0 1455; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma 1456; CHECK-NEXT: vnsrl.wi v8, v8, 0 1457; CHECK-NEXT: ret 1458 %evec = call <2 x i8> @llvm.experimental.constrained.fptosi.v2i8.v2f64(<2 x double> %va, metadata !"fpexcept.strict") 1459 ret <2 x i8> %evec 1460} 1461 1462declare <2 x i8> @llvm.experimental.constrained.fptoui.v2i8.v2f64(<2 x double>, metadata) 1463define <2 x i8> @vfptoui_v2f64_v2i8(<2 x double> %va) strictfp { 1464; CHECK-LABEL: vfptoui_v2f64_v2i8: 1465; CHECK: # %bb.0: 1466; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 1467; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 1468; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 1469; CHECK-NEXT: vnsrl.wi v8, v9, 0 1470; CHECK-NEXT: vsetvli zero, zero, e8, mf8, ta, ma 1471; CHECK-NEXT: vnsrl.wi v8, v8, 0 1472; CHECK-NEXT: ret 1473 %evec = call <2 x i8> @llvm.experimental.constrained.fptoui.v2i8.v2f64(<2 x double> %va, metadata !"fpexcept.strict") 1474 ret <2 x i8> %evec 1475} 1476 1477declare <2 x i16> @llvm.experimental.constrained.fptosi.v2i16.v2f64(<2 x double>, metadata) 1478define <2 x i16> @vfptosi_v2f64_v2i16(<2 x double> %va) strictfp { 1479; CHECK-LABEL: vfptosi_v2f64_v2i16: 1480; CHECK: # %bb.0: 1481; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 1482; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 1483; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 1484; CHECK-NEXT: vnsrl.wi v8, v9, 0 1485; CHECK-NEXT: ret 1486 %evec = call <2 x i16> @llvm.experimental.constrained.fptosi.v2i16.v2f64(<2 x double> %va, metadata !"fpexcept.strict") 1487 ret <2 x i16> %evec 1488} 1489 1490declare <2 x i16> @llvm.experimental.constrained.fptoui.v2i16.v2f64(<2 x double>, metadata) 1491define <2 x i16> @vfptoui_v2f64_v2i16(<2 x double> %va) strictfp { 1492; CHECK-LABEL: vfptoui_v2f64_v2i16: 1493; CHECK: # %bb.0: 1494; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 1495; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 1496; CHECK-NEXT: vsetvli zero, zero, e16, mf4, ta, ma 1497; CHECK-NEXT: vnsrl.wi v8, v9, 0 1498; CHECK-NEXT: ret 1499 %evec = call <2 x i16> @llvm.experimental.constrained.fptoui.v2i16.v2f64(<2 x double> %va, metadata !"fpexcept.strict") 1500 ret <2 x i16> %evec 1501} 1502 1503declare <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(<2 x double>, metadata) 1504define <2 x i32> @vfptosi_v2f64_v2i32(<2 x double> %va) strictfp { 1505; CHECK-LABEL: vfptosi_v2f64_v2i32: 1506; CHECK: # %bb.0: 1507; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 1508; CHECK-NEXT: vfncvt.rtz.x.f.w v9, v8 1509; CHECK-NEXT: vmv1r.v v8, v9 1510; CHECK-NEXT: ret 1511 %evec = call <2 x i32> @llvm.experimental.constrained.fptosi.v2i32.v2f64(<2 x double> %va, metadata !"fpexcept.strict") 1512 ret <2 x i32> %evec 1513} 1514 1515declare <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(<2 x double>, metadata) 1516define <2 x i32> @vfptoui_v2f64_v2i32(<2 x double> %va) strictfp { 1517; CHECK-LABEL: vfptoui_v2f64_v2i32: 1518; CHECK: # %bb.0: 1519; CHECK-NEXT: vsetivli zero, 2, e32, mf2, ta, ma 1520; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 1521; CHECK-NEXT: vmv1r.v v8, v9 1522; CHECK-NEXT: ret 1523 %evec = call <2 x i32> @llvm.experimental.constrained.fptoui.v2i32.v2f64(<2 x double> %va, metadata !"fpexcept.strict") 1524 ret <2 x i32> %evec 1525} 1526 1527declare <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(<2 x double>, metadata) 1528define <2 x i64> @vfptosi_v2f64_v2i64(<2 x double> %va) strictfp { 1529; CHECK-LABEL: vfptosi_v2f64_v2i64: 1530; CHECK: # %bb.0: 1531; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 1532; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 1533; CHECK-NEXT: ret 1534 %evec = call <2 x i64> @llvm.experimental.constrained.fptosi.v2i64.v2f64(<2 x double> %va, metadata !"fpexcept.strict") 1535 ret <2 x i64> %evec 1536} 1537 1538declare <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(<2 x double>, metadata) 1539define <2 x i64> @vfptoui_v2f64_v2i64(<2 x double> %va) strictfp { 1540; CHECK-LABEL: vfptoui_v2f64_v2i64: 1541; CHECK: # %bb.0: 1542; CHECK-NEXT: vsetivli zero, 2, e64, m1, ta, ma 1543; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 1544; CHECK-NEXT: ret 1545 %evec = call <2 x i64> @llvm.experimental.constrained.fptoui.v2i64.v2f64(<2 x double> %va, metadata !"fpexcept.strict") 1546 ret <2 x i64> %evec 1547} 1548 1549declare <4 x i1> @llvm.experimental.constrained.fptosi.v4i1.v4f64(<4 x double>, metadata) 1550define <4 x i1> @vfptosi_v4f64_v4i1(<4 x double> %va) strictfp { 1551; CHECK-LABEL: vfptosi_v4f64_v4i1: 1552; CHECK: # %bb.0: 1553; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 1554; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 1555; CHECK-NEXT: vand.vi v8, v10, 1 1556; CHECK-NEXT: vmsne.vi v0, v8, 0 1557; CHECK-NEXT: ret 1558 %evec = call <4 x i1> @llvm.experimental.constrained.fptosi.v4i1.v4f64(<4 x double> %va, metadata !"fpexcept.strict") 1559 ret <4 x i1> %evec 1560} 1561 1562declare <4 x i1> @llvm.experimental.constrained.fptoui.v4i1.v4f64(<4 x double>, metadata) 1563define <4 x i1> @vfptoui_v4f64_v4i1(<4 x double> %va) strictfp { 1564; CHECK-LABEL: vfptoui_v4f64_v4i1: 1565; CHECK: # %bb.0: 1566; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 1567; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 1568; CHECK-NEXT: vand.vi v8, v10, 1 1569; CHECK-NEXT: vmsne.vi v0, v8, 0 1570; CHECK-NEXT: ret 1571 %evec = call <4 x i1> @llvm.experimental.constrained.fptoui.v4i1.v4f64(<4 x double> %va, metadata !"fpexcept.strict") 1572 ret <4 x i1> %evec 1573} 1574 1575declare <4 x i8> @llvm.experimental.constrained.fptosi.v4i8.v4f64(<4 x double>, metadata) 1576define <4 x i8> @vfptosi_v4f64_v4i8(<4 x double> %va) strictfp { 1577; CHECK-LABEL: vfptosi_v4f64_v4i8: 1578; CHECK: # %bb.0: 1579; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 1580; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 1581; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 1582; CHECK-NEXT: vnsrl.wi v8, v10, 0 1583; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma 1584; CHECK-NEXT: vnsrl.wi v8, v8, 0 1585; CHECK-NEXT: ret 1586 %evec = call <4 x i8> @llvm.experimental.constrained.fptosi.v4i8.v4f64(<4 x double> %va, metadata !"fpexcept.strict") 1587 ret <4 x i8> %evec 1588} 1589 1590declare <4 x i8> @llvm.experimental.constrained.fptoui.v4i8.v4f64(<4 x double>, metadata) 1591define <4 x i8> @vfptoui_v4f64_v4i8(<4 x double> %va) strictfp { 1592; CHECK-LABEL: vfptoui_v4f64_v4i8: 1593; CHECK: # %bb.0: 1594; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 1595; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 1596; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 1597; CHECK-NEXT: vnsrl.wi v8, v10, 0 1598; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma 1599; CHECK-NEXT: vnsrl.wi v8, v8, 0 1600; CHECK-NEXT: ret 1601 %evec = call <4 x i8> @llvm.experimental.constrained.fptoui.v4i8.v4f64(<4 x double> %va, metadata !"fpexcept.strict") 1602 ret <4 x i8> %evec 1603} 1604 1605declare <4 x i16> @llvm.experimental.constrained.fptosi.v4i16.v4f64(<4 x double>, metadata) 1606define <4 x i16> @vfptosi_v4f64_v4i16(<4 x double> %va) strictfp { 1607; CHECK-LABEL: vfptosi_v4f64_v4i16: 1608; CHECK: # %bb.0: 1609; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 1610; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 1611; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 1612; CHECK-NEXT: vnsrl.wi v8, v10, 0 1613; CHECK-NEXT: ret 1614 %evec = call <4 x i16> @llvm.experimental.constrained.fptosi.v4i16.v4f64(<4 x double> %va, metadata !"fpexcept.strict") 1615 ret <4 x i16> %evec 1616} 1617 1618declare <4 x i16> @llvm.experimental.constrained.fptoui.v4i16.v4f64(<4 x double>, metadata) 1619define <4 x i16> @vfptoui_v4f64_v4i16(<4 x double> %va) strictfp { 1620; CHECK-LABEL: vfptoui_v4f64_v4i16: 1621; CHECK: # %bb.0: 1622; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 1623; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 1624; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 1625; CHECK-NEXT: vnsrl.wi v8, v10, 0 1626; CHECK-NEXT: ret 1627 %evec = call <4 x i16> @llvm.experimental.constrained.fptoui.v4i16.v4f64(<4 x double> %va, metadata !"fpexcept.strict") 1628 ret <4 x i16> %evec 1629} 1630 1631declare <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(<4 x double>, metadata) 1632define <4 x i32> @vfptosi_v4f64_v4i32(<4 x double> %va) strictfp { 1633; CHECK-LABEL: vfptosi_v4f64_v4i32: 1634; CHECK: # %bb.0: 1635; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 1636; CHECK-NEXT: vfncvt.rtz.x.f.w v10, v8 1637; CHECK-NEXT: vmv.v.v v8, v10 1638; CHECK-NEXT: ret 1639 %evec = call <4 x i32> @llvm.experimental.constrained.fptosi.v4i32.v4f64(<4 x double> %va, metadata !"fpexcept.strict") 1640 ret <4 x i32> %evec 1641} 1642 1643declare <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(<4 x double>, metadata) 1644define <4 x i32> @vfptoui_v4f64_v4i32(<4 x double> %va) strictfp { 1645; CHECK-LABEL: vfptoui_v4f64_v4i32: 1646; CHECK: # %bb.0: 1647; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma 1648; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 1649; CHECK-NEXT: vmv.v.v v8, v10 1650; CHECK-NEXT: ret 1651 %evec = call <4 x i32> @llvm.experimental.constrained.fptoui.v4i32.v4f64(<4 x double> %va, metadata !"fpexcept.strict") 1652 ret <4 x i32> %evec 1653} 1654 1655declare <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(<4 x double>, metadata) 1656define <4 x i64> @vfptosi_v4f64_v4i64(<4 x double> %va) strictfp { 1657; CHECK-LABEL: vfptosi_v4f64_v4i64: 1658; CHECK: # %bb.0: 1659; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 1660; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 1661; CHECK-NEXT: ret 1662 %evec = call <4 x i64> @llvm.experimental.constrained.fptosi.v4i64.v4f64(<4 x double> %va, metadata !"fpexcept.strict") 1663 ret <4 x i64> %evec 1664} 1665 1666declare <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(<4 x double>, metadata) 1667define <4 x i64> @vfptoui_v4f64_v4i64(<4 x double> %va) strictfp { 1668; CHECK-LABEL: vfptoui_v4f64_v4i64: 1669; CHECK: # %bb.0: 1670; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma 1671; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 1672; CHECK-NEXT: ret 1673 %evec = call <4 x i64> @llvm.experimental.constrained.fptoui.v4i64.v4f64(<4 x double> %va, metadata !"fpexcept.strict") 1674 ret <4 x i64> %evec 1675} 1676 1677declare <8 x i1> @llvm.experimental.constrained.fptosi.v8i1.v8f64(<8 x double>, metadata) 1678define <8 x i1> @vfptosi_v8f64_v8i1(<8 x double> %va) strictfp { 1679; CHECK-LABEL: vfptosi_v8f64_v8i1: 1680; CHECK: # %bb.0: 1681; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 1682; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 1683; CHECK-NEXT: vand.vi v8, v12, 1 1684; CHECK-NEXT: vmsne.vi v0, v8, 0 1685; CHECK-NEXT: ret 1686 %evec = call <8 x i1> @llvm.experimental.constrained.fptosi.v8i1.v8f64(<8 x double> %va, metadata !"fpexcept.strict") 1687 ret <8 x i1> %evec 1688} 1689 1690declare <8 x i1> @llvm.experimental.constrained.fptoui.v8i1.v8f64(<8 x double>, metadata) 1691define <8 x i1> @vfptoui_v8f64_v8i1(<8 x double> %va) strictfp { 1692; CHECK-LABEL: vfptoui_v8f64_v8i1: 1693; CHECK: # %bb.0: 1694; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 1695; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 1696; CHECK-NEXT: vand.vi v8, v12, 1 1697; CHECK-NEXT: vmsne.vi v0, v8, 0 1698; CHECK-NEXT: ret 1699 %evec = call <8 x i1> @llvm.experimental.constrained.fptoui.v8i1.v8f64(<8 x double> %va, metadata !"fpexcept.strict") 1700 ret <8 x i1> %evec 1701} 1702 1703declare <8 x i8> @llvm.experimental.constrained.fptosi.v8i8.v8f64(<8 x double>, metadata) 1704define <8 x i8> @vfptosi_v8f64_v8i8(<8 x double> %va) strictfp { 1705; CHECK-LABEL: vfptosi_v8f64_v8i8: 1706; CHECK: # %bb.0: 1707; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 1708; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 1709; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma 1710; CHECK-NEXT: vnsrl.wi v8, v12, 0 1711; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, ma 1712; CHECK-NEXT: vnsrl.wi v8, v8, 0 1713; CHECK-NEXT: ret 1714 %evec = call <8 x i8> @llvm.experimental.constrained.fptosi.v8i8.v8f64(<8 x double> %va, metadata !"fpexcept.strict") 1715 ret <8 x i8> %evec 1716} 1717 1718declare <8 x i8> @llvm.experimental.constrained.fptoui.v8i8.v8f64(<8 x double>, metadata) 1719define <8 x i8> @vfptoui_v8f64_v8i8(<8 x double> %va) strictfp { 1720; CHECK-LABEL: vfptoui_v8f64_v8i8: 1721; CHECK: # %bb.0: 1722; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 1723; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 1724; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma 1725; CHECK-NEXT: vnsrl.wi v8, v12, 0 1726; CHECK-NEXT: vsetvli zero, zero, e8, mf2, ta, ma 1727; CHECK-NEXT: vnsrl.wi v8, v8, 0 1728; CHECK-NEXT: ret 1729 %evec = call <8 x i8> @llvm.experimental.constrained.fptoui.v8i8.v8f64(<8 x double> %va, metadata !"fpexcept.strict") 1730 ret <8 x i8> %evec 1731} 1732 1733declare <8 x i16> @llvm.experimental.constrained.fptosi.v8i16.v8f64(<8 x double>, metadata) 1734define <8 x i16> @vfptosi_v8f64_v8i16(<8 x double> %va) strictfp { 1735; CHECK-LABEL: vfptosi_v8f64_v8i16: 1736; CHECK: # %bb.0: 1737; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 1738; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 1739; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma 1740; CHECK-NEXT: vnsrl.wi v8, v12, 0 1741; CHECK-NEXT: ret 1742 %evec = call <8 x i16> @llvm.experimental.constrained.fptosi.v8i16.v8f64(<8 x double> %va, metadata !"fpexcept.strict") 1743 ret <8 x i16> %evec 1744} 1745 1746declare <8 x i16> @llvm.experimental.constrained.fptoui.v8i16.v8f64(<8 x double>, metadata) 1747define <8 x i16> @vfptoui_v8f64_v8i16(<8 x double> %va) strictfp { 1748; CHECK-LABEL: vfptoui_v8f64_v8i16: 1749; CHECK: # %bb.0: 1750; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 1751; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 1752; CHECK-NEXT: vsetvli zero, zero, e16, m1, ta, ma 1753; CHECK-NEXT: vnsrl.wi v8, v12, 0 1754; CHECK-NEXT: ret 1755 %evec = call <8 x i16> @llvm.experimental.constrained.fptoui.v8i16.v8f64(<8 x double> %va, metadata !"fpexcept.strict") 1756 ret <8 x i16> %evec 1757} 1758 1759declare <8 x i32> @llvm.experimental.constrained.fptosi.v8i32.v8f64(<8 x double>, metadata) 1760define <8 x i32> @vfptosi_v8f64_v8i32(<8 x double> %va) strictfp { 1761; CHECK-LABEL: vfptosi_v8f64_v8i32: 1762; CHECK: # %bb.0: 1763; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 1764; CHECK-NEXT: vfncvt.rtz.x.f.w v12, v8 1765; CHECK-NEXT: vmv.v.v v8, v12 1766; CHECK-NEXT: ret 1767 %evec = call <8 x i32> @llvm.experimental.constrained.fptosi.v8i32.v8f64(<8 x double> %va, metadata !"fpexcept.strict") 1768 ret <8 x i32> %evec 1769} 1770 1771declare <8 x i32> @llvm.experimental.constrained.fptoui.v8i32.v8f64(<8 x double>, metadata) 1772define <8 x i32> @vfptoui_v8f64_v8i32(<8 x double> %va) strictfp { 1773; CHECK-LABEL: vfptoui_v8f64_v8i32: 1774; CHECK: # %bb.0: 1775; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma 1776; CHECK-NEXT: vfncvt.rtz.xu.f.w v12, v8 1777; CHECK-NEXT: vmv.v.v v8, v12 1778; CHECK-NEXT: ret 1779 %evec = call <8 x i32> @llvm.experimental.constrained.fptoui.v8i32.v8f64(<8 x double> %va, metadata !"fpexcept.strict") 1780 ret <8 x i32> %evec 1781} 1782 1783declare <8 x i64> @llvm.experimental.constrained.fptosi.v8i64.v8f64(<8 x double>, metadata) 1784define <8 x i64> @vfptosi_v8f64_v8i64(<8 x double> %va) strictfp { 1785; CHECK-LABEL: vfptosi_v8f64_v8i64: 1786; CHECK: # %bb.0: 1787; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1788; CHECK-NEXT: vfcvt.rtz.x.f.v v8, v8 1789; CHECK-NEXT: ret 1790 %evec = call <8 x i64> @llvm.experimental.constrained.fptosi.v8i64.v8f64(<8 x double> %va, metadata !"fpexcept.strict") 1791 ret <8 x i64> %evec 1792} 1793 1794declare <8 x i64> @llvm.experimental.constrained.fptoui.v8i64.v8f64(<8 x double>, metadata) 1795define <8 x i64> @vfptoui_v8f64_v8i64(<8 x double> %va) strictfp { 1796; CHECK-LABEL: vfptoui_v8f64_v8i64: 1797; CHECK: # %bb.0: 1798; CHECK-NEXT: vsetivli zero, 8, e64, m4, ta, ma 1799; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 1800; CHECK-NEXT: ret 1801 %evec = call <8 x i64> @llvm.experimental.constrained.fptoui.v8i64.v8f64(<8 x double> %va, metadata !"fpexcept.strict") 1802 ret <8 x i64> %evec 1803} 1804