1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+m,+v,+zvfh,+zvfbfmin < %s | FileCheck %s --check-prefixes=CHECK,ZVFH 3; RUN: llc -mtriple=riscv64 -mattr=+m,+v,+zvfh,+zvfbfmin < %s | FileCheck %s --check-prefixes=CHECK,ZVFH 4; RUN: llc -mtriple=riscv32 -mattr=+m,+v,+zvfhmin,+zvfbfmin < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN 5; RUN: llc -mtriple=riscv64 -mattr=+m,+v,+zvfhmin,+zvfbfmin < %s | FileCheck %s --check-prefixes=CHECK,ZVFHMIN 6 7define <vscale x 2 x i7> @vfptoui_v4i7_v4bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 8; CHECK-LABEL: vfptoui_v4i7_v4bf16: 9; CHECK: # %bb.0: 10; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 11; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 12; CHECK-NEXT: vfncvt.rtz.x.f.w v8, v9, v0.t 13; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma 14; CHECK-NEXT: vnsrl.wi v8, v8, 0, v0.t 15; CHECK-NEXT: ret 16 %v = call <vscale x 2 x i7> @llvm.vp.fptoui.v4i7.v4bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 %evl) 17 ret <vscale x 2 x i7> %v 18} 19 20define <vscale x 2 x i8> @vfptoui_nxv2i8_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 21; CHECK-LABEL: vfptoui_nxv2i8_nxv2bf16: 22; CHECK: # %bb.0: 23; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 24; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 25; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v9, v0.t 26; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma 27; CHECK-NEXT: vnsrl.wi v8, v8, 0, v0.t 28; CHECK-NEXT: ret 29 %v = call <vscale x 2 x i8> @llvm.vp.fptoui.nxv2i8.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 %evl) 30 ret <vscale x 2 x i8> %v 31} 32 33define <vscale x 2 x i8> @vfptoui_nxv2i8_nxv2bf16_unmasked(<vscale x 2 x bfloat> %va, i32 zeroext %evl) { 34; CHECK-LABEL: vfptoui_nxv2i8_nxv2bf16_unmasked: 35; CHECK: # %bb.0: 36; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 37; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 38; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v9 39; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma 40; CHECK-NEXT: vnsrl.wi v8, v8, 0 41; CHECK-NEXT: ret 42 %v = call <vscale x 2 x i8> @llvm.vp.fptoui.nxv2i8.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 43 ret <vscale x 2 x i8> %v 44} 45 46define <vscale x 2 x i16> @vfptoui_nxv2i16_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 47; CHECK-LABEL: vfptoui_nxv2i16_nxv2bf16: 48; CHECK: # %bb.0: 49; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 50; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 51; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v9, v0.t 52; CHECK-NEXT: ret 53 %v = call <vscale x 2 x i16> @llvm.vp.fptoui.nxv2i16.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 %evl) 54 ret <vscale x 2 x i16> %v 55} 56 57define <vscale x 2 x i16> @vfptoui_nxv2i16_nxv2bf16_unmasked(<vscale x 2 x bfloat> %va, i32 zeroext %evl) { 58; CHECK-LABEL: vfptoui_nxv2i16_nxv2bf16_unmasked: 59; CHECK: # %bb.0: 60; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 61; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 62; CHECK-NEXT: vfncvt.rtz.xu.f.w v8, v9 63; CHECK-NEXT: ret 64 %v = call <vscale x 2 x i16> @llvm.vp.fptoui.nxv2i16.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 65 ret <vscale x 2 x i16> %v 66} 67 68define <vscale x 2 x i32> @vfptoui_nxv2i32_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 69; CHECK-LABEL: vfptoui_nxv2i32_nxv2bf16: 70; CHECK: # %bb.0: 71; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 72; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 73; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma 74; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v9, v0.t 75; CHECK-NEXT: ret 76 %v = call <vscale x 2 x i32> @llvm.vp.fptoui.nxv2i32.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 %evl) 77 ret <vscale x 2 x i32> %v 78} 79 80define <vscale x 2 x i32> @vfptoui_nxv2i32_nxv2bf16_unmasked(<vscale x 2 x bfloat> %va, i32 zeroext %evl) { 81; CHECK-LABEL: vfptoui_nxv2i32_nxv2bf16_unmasked: 82; CHECK: # %bb.0: 83; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 84; CHECK-NEXT: vfwcvtbf16.f.f.v v9, v8 85; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma 86; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v9 87; CHECK-NEXT: ret 88 %v = call <vscale x 2 x i32> @llvm.vp.fptoui.nxv2i32.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 89 ret <vscale x 2 x i32> %v 90} 91 92define <vscale x 2 x i64> @vfptoui_nxv2i64_nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 93; CHECK-LABEL: vfptoui_nxv2i64_nxv2bf16: 94; CHECK: # %bb.0: 95; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 96; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 97; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma 98; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v10, v0.t 99; CHECK-NEXT: ret 100 %v = call <vscale x 2 x i64> @llvm.vp.fptoui.nxv2i64.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> %m, i32 %evl) 101 ret <vscale x 2 x i64> %v 102} 103 104define <vscale x 2 x i64> @vfptoui_nxv2i64_nxv2bf16_unmasked(<vscale x 2 x bfloat> %va, i32 zeroext %evl) { 105; CHECK-LABEL: vfptoui_nxv2i64_nxv2bf16_unmasked: 106; CHECK: # %bb.0: 107; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 108; CHECK-NEXT: vfwcvtbf16.f.f.v v10, v8 109; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma 110; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v10 111; CHECK-NEXT: ret 112 %v = call <vscale x 2 x i64> @llvm.vp.fptoui.nxv2i64.nxv2bf16(<vscale x 2 x bfloat> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 113 ret <vscale x 2 x i64> %v 114} 115 116declare <vscale x 2 x i7> @llvm.vp.fptoui.v4i7.v4f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32) 117 118define <vscale x 2 x i7> @vfptoui_v4i7_v4f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 119; ZVFH-LABEL: vfptoui_v4i7_v4f16: 120; ZVFH: # %bb.0: 121; ZVFH-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 122; ZVFH-NEXT: vfncvt.rtz.x.f.w v9, v8, v0.t 123; ZVFH-NEXT: vmv1r.v v8, v9 124; ZVFH-NEXT: ret 125; 126; ZVFHMIN-LABEL: vfptoui_v4i7_v4f16: 127; ZVFHMIN: # %bb.0: 128; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 129; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 130; ZVFHMIN-NEXT: vfncvt.rtz.x.f.w v8, v9, v0.t 131; ZVFHMIN-NEXT: vsetvli zero, zero, e8, mf4, ta, ma 132; ZVFHMIN-NEXT: vnsrl.wi v8, v8, 0, v0.t 133; ZVFHMIN-NEXT: ret 134 %v = call <vscale x 2 x i7> @llvm.vp.fptoui.v4i7.v4f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl) 135 ret <vscale x 2 x i7> %v 136} 137 138declare <vscale x 2 x i8> @llvm.vp.fptoui.nxv2i8.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32) 139 140define <vscale x 2 x i8> @vfptoui_nxv2i8_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 141; ZVFH-LABEL: vfptoui_nxv2i8_nxv2f16: 142; ZVFH: # %bb.0: 143; ZVFH-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 144; ZVFH-NEXT: vfncvt.rtz.xu.f.w v9, v8, v0.t 145; ZVFH-NEXT: vmv1r.v v8, v9 146; ZVFH-NEXT: ret 147; 148; ZVFHMIN-LABEL: vfptoui_nxv2i8_nxv2f16: 149; ZVFHMIN: # %bb.0: 150; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 151; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 152; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v9, v0.t 153; ZVFHMIN-NEXT: vsetvli zero, zero, e8, mf4, ta, ma 154; ZVFHMIN-NEXT: vnsrl.wi v8, v8, 0, v0.t 155; ZVFHMIN-NEXT: ret 156 %v = call <vscale x 2 x i8> @llvm.vp.fptoui.nxv2i8.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl) 157 ret <vscale x 2 x i8> %v 158} 159 160define <vscale x 2 x i8> @vfptoui_nxv2i8_nxv2f16_unmasked(<vscale x 2 x half> %va, i32 zeroext %evl) { 161; ZVFH-LABEL: vfptoui_nxv2i8_nxv2f16_unmasked: 162; ZVFH: # %bb.0: 163; ZVFH-NEXT: vsetvli zero, a0, e8, mf4, ta, ma 164; ZVFH-NEXT: vfncvt.rtz.xu.f.w v9, v8 165; ZVFH-NEXT: vmv1r.v v8, v9 166; ZVFH-NEXT: ret 167; 168; ZVFHMIN-LABEL: vfptoui_nxv2i8_nxv2f16_unmasked: 169; ZVFHMIN: # %bb.0: 170; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 171; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 172; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v9 173; ZVFHMIN-NEXT: vsetvli zero, zero, e8, mf4, ta, ma 174; ZVFHMIN-NEXT: vnsrl.wi v8, v8, 0 175; ZVFHMIN-NEXT: ret 176 %v = call <vscale x 2 x i8> @llvm.vp.fptoui.nxv2i8.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 177 ret <vscale x 2 x i8> %v 178} 179 180declare <vscale x 2 x i16> @llvm.vp.fptoui.nxv2i16.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32) 181 182define <vscale x 2 x i16> @vfptoui_nxv2i16_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 183; ZVFH-LABEL: vfptoui_nxv2i16_nxv2f16: 184; ZVFH: # %bb.0: 185; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 186; ZVFH-NEXT: vfcvt.rtz.xu.f.v v8, v8, v0.t 187; ZVFH-NEXT: ret 188; 189; ZVFHMIN-LABEL: vfptoui_nxv2i16_nxv2f16: 190; ZVFHMIN: # %bb.0: 191; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 192; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 193; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v9, v0.t 194; ZVFHMIN-NEXT: ret 195 %v = call <vscale x 2 x i16> @llvm.vp.fptoui.nxv2i16.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl) 196 ret <vscale x 2 x i16> %v 197} 198 199define <vscale x 2 x i16> @vfptoui_nxv2i16_nxv2f16_unmasked(<vscale x 2 x half> %va, i32 zeroext %evl) { 200; ZVFH-LABEL: vfptoui_nxv2i16_nxv2f16_unmasked: 201; ZVFH: # %bb.0: 202; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 203; ZVFH-NEXT: vfcvt.rtz.xu.f.v v8, v8 204; ZVFH-NEXT: ret 205; 206; ZVFHMIN-LABEL: vfptoui_nxv2i16_nxv2f16_unmasked: 207; ZVFHMIN: # %bb.0: 208; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 209; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 210; ZVFHMIN-NEXT: vfncvt.rtz.xu.f.w v8, v9 211; ZVFHMIN-NEXT: ret 212 %v = call <vscale x 2 x i16> @llvm.vp.fptoui.nxv2i16.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 213 ret <vscale x 2 x i16> %v 214} 215 216declare <vscale x 2 x i32> @llvm.vp.fptoui.nxv2i32.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32) 217 218define <vscale x 2 x i32> @vfptoui_nxv2i32_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 219; ZVFH-LABEL: vfptoui_nxv2i32_nxv2f16: 220; ZVFH: # %bb.0: 221; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 222; ZVFH-NEXT: vfwcvt.rtz.xu.f.v v9, v8, v0.t 223; ZVFH-NEXT: vmv1r.v v8, v9 224; ZVFH-NEXT: ret 225; 226; ZVFHMIN-LABEL: vfptoui_nxv2i32_nxv2f16: 227; ZVFHMIN: # %bb.0: 228; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 229; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 230; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma 231; ZVFHMIN-NEXT: vfcvt.rtz.xu.f.v v8, v9, v0.t 232; ZVFHMIN-NEXT: ret 233 %v = call <vscale x 2 x i32> @llvm.vp.fptoui.nxv2i32.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl) 234 ret <vscale x 2 x i32> %v 235} 236 237define <vscale x 2 x i32> @vfptoui_nxv2i32_nxv2f16_unmasked(<vscale x 2 x half> %va, i32 zeroext %evl) { 238; ZVFH-LABEL: vfptoui_nxv2i32_nxv2f16_unmasked: 239; ZVFH: # %bb.0: 240; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 241; ZVFH-NEXT: vfwcvt.rtz.xu.f.v v9, v8 242; ZVFH-NEXT: vmv1r.v v8, v9 243; ZVFH-NEXT: ret 244; 245; ZVFHMIN-LABEL: vfptoui_nxv2i32_nxv2f16_unmasked: 246; ZVFHMIN: # %bb.0: 247; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 248; ZVFHMIN-NEXT: vfwcvt.f.f.v v9, v8 249; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma 250; ZVFHMIN-NEXT: vfcvt.rtz.xu.f.v v8, v9 251; ZVFHMIN-NEXT: ret 252 %v = call <vscale x 2 x i32> @llvm.vp.fptoui.nxv2i32.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 253 ret <vscale x 2 x i32> %v 254} 255 256declare <vscale x 2 x i64> @llvm.vp.fptoui.nxv2i64.nxv2f16(<vscale x 2 x half>, <vscale x 2 x i1>, i32) 257 258define <vscale x 2 x i64> @vfptoui_nxv2i64_nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 259; ZVFH-LABEL: vfptoui_nxv2i64_nxv2f16: 260; ZVFH: # %bb.0: 261; ZVFH-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 262; ZVFH-NEXT: vfwcvt.f.f.v v10, v8, v0.t 263; ZVFH-NEXT: vsetvli zero, zero, e32, m1, ta, ma 264; ZVFH-NEXT: vfwcvt.rtz.xu.f.v v8, v10, v0.t 265; ZVFH-NEXT: ret 266; 267; ZVFHMIN-LABEL: vfptoui_nxv2i64_nxv2f16: 268; ZVFHMIN: # %bb.0: 269; ZVFHMIN-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 270; ZVFHMIN-NEXT: vfwcvt.f.f.v v10, v8 271; ZVFHMIN-NEXT: vsetvli zero, zero, e32, m1, ta, ma 272; ZVFHMIN-NEXT: vfwcvt.rtz.xu.f.v v8, v10, v0.t 273; ZVFHMIN-NEXT: ret 274 %v = call <vscale x 2 x i64> @llvm.vp.fptoui.nxv2i64.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl) 275 ret <vscale x 2 x i64> %v 276} 277 278define <vscale x 2 x i64> @vfptoui_nxv2i64_nxv2f16_unmasked(<vscale x 2 x half> %va, i32 zeroext %evl) { 279; CHECK-LABEL: vfptoui_nxv2i64_nxv2f16_unmasked: 280; CHECK: # %bb.0: 281; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 282; CHECK-NEXT: vfwcvt.f.f.v v10, v8 283; CHECK-NEXT: vsetvli zero, zero, e32, m1, ta, ma 284; CHECK-NEXT: vfwcvt.rtz.xu.f.v v8, v10 285; CHECK-NEXT: ret 286 %v = call <vscale x 2 x i64> @llvm.vp.fptoui.nxv2i64.nxv2f16(<vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 287 ret <vscale x 2 x i64> %v 288} 289 290declare <vscale x 2 x i8> @llvm.vp.fptoui.nxv2i8.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32) 291 292define <vscale x 2 x i8> @vfptoui_nxv2i8_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 293; CHECK-LABEL: vfptoui_nxv2i8_nxv2f32: 294; CHECK: # %bb.0: 295; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 296; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8, v0.t 297; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma 298; CHECK-NEXT: vnsrl.wi v8, v9, 0, v0.t 299; CHECK-NEXT: ret 300 %v = call <vscale x 2 x i8> @llvm.vp.fptoui.nxv2i8.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl) 301 ret <vscale x 2 x i8> %v 302} 303 304define <vscale x 2 x i8> @vfptoui_nxv2i8_nxv2f32_unmasked(<vscale x 2 x float> %va, i32 zeroext %evl) { 305; CHECK-LABEL: vfptoui_nxv2i8_nxv2f32_unmasked: 306; CHECK: # %bb.0: 307; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 308; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 309; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma 310; CHECK-NEXT: vnsrl.wi v8, v9, 0 311; CHECK-NEXT: ret 312 %v = call <vscale x 2 x i8> @llvm.vp.fptoui.nxv2i8.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 313 ret <vscale x 2 x i8> %v 314} 315 316declare <vscale x 2 x i16> @llvm.vp.fptoui.nxv2i16.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32) 317 318define <vscale x 2 x i16> @vfptoui_nxv2i16_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 319; CHECK-LABEL: vfptoui_nxv2i16_nxv2f32: 320; CHECK: # %bb.0: 321; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 322; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8, v0.t 323; CHECK-NEXT: vmv1r.v v8, v9 324; CHECK-NEXT: ret 325 %v = call <vscale x 2 x i16> @llvm.vp.fptoui.nxv2i16.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl) 326 ret <vscale x 2 x i16> %v 327} 328 329define <vscale x 2 x i16> @vfptoui_nxv2i16_nxv2f32_unmasked(<vscale x 2 x float> %va, i32 zeroext %evl) { 330; CHECK-LABEL: vfptoui_nxv2i16_nxv2f32_unmasked: 331; CHECK: # %bb.0: 332; CHECK-NEXT: vsetvli zero, a0, e16, mf2, ta, ma 333; CHECK-NEXT: vfncvt.rtz.xu.f.w v9, v8 334; CHECK-NEXT: vmv1r.v v8, v9 335; CHECK-NEXT: ret 336 %v = call <vscale x 2 x i16> @llvm.vp.fptoui.nxv2i16.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 337 ret <vscale x 2 x i16> %v 338} 339 340declare <vscale x 2 x i32> @llvm.vp.fptoui.nxv2i32.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32) 341 342define <vscale x 2 x i32> @vfptoui_nxv2i32_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 343; CHECK-LABEL: vfptoui_nxv2i32_nxv2f32: 344; CHECK: # %bb.0: 345; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 346; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8, v0.t 347; CHECK-NEXT: ret 348 %v = call <vscale x 2 x i32> @llvm.vp.fptoui.nxv2i32.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl) 349 ret <vscale x 2 x i32> %v 350} 351 352define <vscale x 2 x i32> @vfptoui_nxv2i32_nxv2f32_unmasked(<vscale x 2 x float> %va, i32 zeroext %evl) { 353; CHECK-LABEL: vfptoui_nxv2i32_nxv2f32_unmasked: 354; CHECK: # %bb.0: 355; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 356; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 357; CHECK-NEXT: ret 358 %v = call <vscale x 2 x i32> @llvm.vp.fptoui.nxv2i32.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 359 ret <vscale x 2 x i32> %v 360} 361 362declare <vscale x 2 x i64> @llvm.vp.fptoui.nxv2i64.nxv2f32(<vscale x 2 x float>, <vscale x 2 x i1>, i32) 363 364define <vscale x 2 x i64> @vfptoui_nxv2i64_nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 365; CHECK-LABEL: vfptoui_nxv2i64_nxv2f32: 366; CHECK: # %bb.0: 367; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 368; CHECK-NEXT: vfwcvt.rtz.xu.f.v v10, v8, v0.t 369; CHECK-NEXT: vmv2r.v v8, v10 370; CHECK-NEXT: ret 371 %v = call <vscale x 2 x i64> @llvm.vp.fptoui.nxv2i64.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl) 372 ret <vscale x 2 x i64> %v 373} 374 375define <vscale x 2 x i64> @vfptoui_nxv2i64_nxv2f32_unmasked(<vscale x 2 x float> %va, i32 zeroext %evl) { 376; CHECK-LABEL: vfptoui_nxv2i64_nxv2f32_unmasked: 377; CHECK: # %bb.0: 378; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 379; CHECK-NEXT: vfwcvt.rtz.xu.f.v v10, v8 380; CHECK-NEXT: vmv2r.v v8, v10 381; CHECK-NEXT: ret 382 %v = call <vscale x 2 x i64> @llvm.vp.fptoui.nxv2i64.nxv2f32(<vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 383 ret <vscale x 2 x i64> %v 384} 385 386declare <vscale x 2 x i8> @llvm.vp.fptoui.nxv2i8.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32) 387 388define <vscale x 2 x i8> @vfptoui_nxv2i8_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 389; CHECK-LABEL: vfptoui_nxv2i8_nxv2f64: 390; CHECK: # %bb.0: 391; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 392; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8, v0.t 393; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 394; CHECK-NEXT: vnsrl.wi v8, v10, 0, v0.t 395; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma 396; CHECK-NEXT: vnsrl.wi v8, v8, 0, v0.t 397; CHECK-NEXT: ret 398 %v = call <vscale x 2 x i8> @llvm.vp.fptoui.nxv2i8.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl) 399 ret <vscale x 2 x i8> %v 400} 401 402define <vscale x 2 x i8> @vfptoui_nxv2i8_nxv2f64_unmasked(<vscale x 2 x double> %va, i32 zeroext %evl) { 403; CHECK-LABEL: vfptoui_nxv2i8_nxv2f64_unmasked: 404; CHECK: # %bb.0: 405; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 406; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 407; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 408; CHECK-NEXT: vnsrl.wi v8, v10, 0 409; CHECK-NEXT: vsetvli zero, zero, e8, mf4, ta, ma 410; CHECK-NEXT: vnsrl.wi v8, v8, 0 411; CHECK-NEXT: ret 412 %v = call <vscale x 2 x i8> @llvm.vp.fptoui.nxv2i8.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 413 ret <vscale x 2 x i8> %v 414} 415 416declare <vscale x 2 x i16> @llvm.vp.fptoui.nxv2i16.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32) 417 418define <vscale x 2 x i16> @vfptoui_nxv2i16_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 419; CHECK-LABEL: vfptoui_nxv2i16_nxv2f64: 420; CHECK: # %bb.0: 421; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 422; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8, v0.t 423; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 424; CHECK-NEXT: vnsrl.wi v8, v10, 0, v0.t 425; CHECK-NEXT: ret 426 %v = call <vscale x 2 x i16> @llvm.vp.fptoui.nxv2i16.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl) 427 ret <vscale x 2 x i16> %v 428} 429 430define <vscale x 2 x i16> @vfptoui_nxv2i16_nxv2f64_unmasked(<vscale x 2 x double> %va, i32 zeroext %evl) { 431; CHECK-LABEL: vfptoui_nxv2i16_nxv2f64_unmasked: 432; CHECK: # %bb.0: 433; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 434; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 435; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma 436; CHECK-NEXT: vnsrl.wi v8, v10, 0 437; CHECK-NEXT: ret 438 %v = call <vscale x 2 x i16> @llvm.vp.fptoui.nxv2i16.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 439 ret <vscale x 2 x i16> %v 440} 441 442declare <vscale x 2 x i32> @llvm.vp.fptoui.nxv2i32.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32) 443 444define <vscale x 2 x i32> @vfptoui_nxv2i32_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 445; CHECK-LABEL: vfptoui_nxv2i32_nxv2f64: 446; CHECK: # %bb.0: 447; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 448; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8, v0.t 449; CHECK-NEXT: vmv.v.v v8, v10 450; CHECK-NEXT: ret 451 %v = call <vscale x 2 x i32> @llvm.vp.fptoui.nxv2i32.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl) 452 ret <vscale x 2 x i32> %v 453} 454 455define <vscale x 2 x i32> @vfptoui_nxv2i32_nxv2f64_unmasked(<vscale x 2 x double> %va, i32 zeroext %evl) { 456; CHECK-LABEL: vfptoui_nxv2i32_nxv2f64_unmasked: 457; CHECK: # %bb.0: 458; CHECK-NEXT: vsetvli zero, a0, e32, m1, ta, ma 459; CHECK-NEXT: vfncvt.rtz.xu.f.w v10, v8 460; CHECK-NEXT: vmv.v.v v8, v10 461; CHECK-NEXT: ret 462 %v = call <vscale x 2 x i32> @llvm.vp.fptoui.nxv2i32.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 463 ret <vscale x 2 x i32> %v 464} 465 466declare <vscale x 2 x i64> @llvm.vp.fptoui.nxv2i64.nxv2f64(<vscale x 2 x double>, <vscale x 2 x i1>, i32) 467 468define <vscale x 2 x i64> @vfptoui_nxv2i64_nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 zeroext %evl) { 469; CHECK-LABEL: vfptoui_nxv2i64_nxv2f64: 470; CHECK: # %bb.0: 471; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 472; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8, v0.t 473; CHECK-NEXT: ret 474 %v = call <vscale x 2 x i64> @llvm.vp.fptoui.nxv2i64.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl) 475 ret <vscale x 2 x i64> %v 476} 477 478define <vscale x 2 x i64> @vfptoui_nxv2i64_nxv2f64_unmasked(<vscale x 2 x double> %va, i32 zeroext %evl) { 479; CHECK-LABEL: vfptoui_nxv2i64_nxv2f64_unmasked: 480; CHECK: # %bb.0: 481; CHECK-NEXT: vsetvli zero, a0, e64, m2, ta, ma 482; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 483; CHECK-NEXT: ret 484 %v = call <vscale x 2 x i64> @llvm.vp.fptoui.nxv2i64.nxv2f64(<vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl) 485 ret <vscale x 2 x i64> %v 486} 487 488declare <vscale x 32 x i16> @llvm.vp.fptoui.nxv32i16.nxv32f32(<vscale x 32 x float>, <vscale x 32 x i1>, i32) 489 490define <vscale x 32 x i16> @vfptoui_nxv32i16_nxv32f32(<vscale x 32 x float> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) { 491; CHECK-LABEL: vfptoui_nxv32i16_nxv32f32: 492; CHECK: # %bb.0: 493; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma 494; CHECK-NEXT: vmv1r.v v24, v0 495; CHECK-NEXT: csrr a1, vlenb 496; CHECK-NEXT: srli a2, a1, 2 497; CHECK-NEXT: slli a1, a1, 1 498; CHECK-NEXT: vslidedown.vx v0, v0, a2 499; CHECK-NEXT: sub a2, a0, a1 500; CHECK-NEXT: sltu a3, a0, a2 501; CHECK-NEXT: addi a3, a3, -1 502; CHECK-NEXT: and a2, a3, a2 503; CHECK-NEXT: vsetvli zero, a2, e16, m4, ta, ma 504; CHECK-NEXT: vfncvt.rtz.xu.f.w v28, v16, v0.t 505; CHECK-NEXT: bltu a0, a1, .LBB34_2 506; CHECK-NEXT: # %bb.1: 507; CHECK-NEXT: mv a0, a1 508; CHECK-NEXT: .LBB34_2: 509; CHECK-NEXT: vmv1r.v v0, v24 510; CHECK-NEXT: vsetvli zero, a0, e16, m4, ta, ma 511; CHECK-NEXT: vfncvt.rtz.xu.f.w v24, v8, v0.t 512; CHECK-NEXT: vmv8r.v v8, v24 513; CHECK-NEXT: ret 514 %v = call <vscale x 32 x i16> @llvm.vp.fptoui.nxv32i16.nxv32f32(<vscale x 32 x float> %va, <vscale x 32 x i1> %m, i32 %evl) 515 ret <vscale x 32 x i16> %v 516} 517 518declare <vscale x 32 x i32> @llvm.vp.fptoui.nxv32i32.nxv32f32(<vscale x 32 x float>, <vscale x 32 x i1>, i32) 519 520define <vscale x 32 x i32> @vfptoui_nxv32i32_nxv32f32(<vscale x 32 x float> %va, <vscale x 32 x i1> %m, i32 zeroext %evl) { 521; CHECK-LABEL: vfptoui_nxv32i32_nxv32f32: 522; CHECK: # %bb.0: 523; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma 524; CHECK-NEXT: vmv1r.v v24, v0 525; CHECK-NEXT: csrr a1, vlenb 526; CHECK-NEXT: srli a2, a1, 2 527; CHECK-NEXT: slli a1, a1, 1 528; CHECK-NEXT: vslidedown.vx v0, v0, a2 529; CHECK-NEXT: sub a2, a0, a1 530; CHECK-NEXT: sltu a3, a0, a2 531; CHECK-NEXT: addi a3, a3, -1 532; CHECK-NEXT: and a2, a3, a2 533; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma 534; CHECK-NEXT: vfcvt.rtz.xu.f.v v16, v16, v0.t 535; CHECK-NEXT: bltu a0, a1, .LBB35_2 536; CHECK-NEXT: # %bb.1: 537; CHECK-NEXT: mv a0, a1 538; CHECK-NEXT: .LBB35_2: 539; CHECK-NEXT: vmv1r.v v0, v24 540; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 541; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8, v0.t 542; CHECK-NEXT: ret 543 %v = call <vscale x 32 x i32> @llvm.vp.fptoui.nxv32i32.nxv32f32(<vscale x 32 x float> %va, <vscale x 32 x i1> %m, i32 %evl) 544 ret <vscale x 32 x i32> %v 545} 546 547define <vscale x 32 x i32> @vfptoui_nxv32i32_nxv32f32_unmasked(<vscale x 32 x float> %va, i32 zeroext %evl) { 548; CHECK-LABEL: vfptoui_nxv32i32_nxv32f32_unmasked: 549; CHECK: # %bb.0: 550; CHECK-NEXT: csrr a1, vlenb 551; CHECK-NEXT: slli a1, a1, 1 552; CHECK-NEXT: sub a2, a0, a1 553; CHECK-NEXT: sltu a3, a0, a2 554; CHECK-NEXT: addi a3, a3, -1 555; CHECK-NEXT: and a2, a3, a2 556; CHECK-NEXT: vsetvli zero, a2, e32, m8, ta, ma 557; CHECK-NEXT: vfcvt.rtz.xu.f.v v16, v16 558; CHECK-NEXT: bltu a0, a1, .LBB36_2 559; CHECK-NEXT: # %bb.1: 560; CHECK-NEXT: mv a0, a1 561; CHECK-NEXT: .LBB36_2: 562; CHECK-NEXT: vsetvli zero, a0, e32, m8, ta, ma 563; CHECK-NEXT: vfcvt.rtz.xu.f.v v8, v8 564; CHECK-NEXT: ret 565 %v = call <vscale x 32 x i32> @llvm.vp.fptoui.nxv32i32.nxv32f32(<vscale x 32 x float> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl) 566 ret <vscale x 32 x i32> %v 567} 568