1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 3; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 4 5; Test that the prepareSREMEqFold optimization doesn't crash on scalable 6; vector types. 7define <vscale x 4 x i1> @srem_eq_fold_nxv4i8(<vscale x 4 x i8> %va) { 8; CHECK-LABEL: srem_eq_fold_nxv4i8: 9; CHECK: # %bb.0: 10; CHECK-NEXT: li a0, 42 11; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, mu 12; CHECK-NEXT: vmv.v.x v9, a0 13; CHECK-NEXT: li a1, -85 14; CHECK-NEXT: vmacc.vx v9, a1, v8 15; CHECK-NEXT: vsll.vi v8, v9, 7 16; CHECK-NEXT: vsrl.vi v9, v9, 1 17; CHECK-NEXT: vor.vv v8, v9, v8 18; CHECK-NEXT: vmsleu.vx v0, v8, a0 19; CHECK-NEXT: ret 20 %head_six = insertelement <vscale x 4 x i8> poison, i8 6, i32 0 21 %splat_six = shufflevector <vscale x 4 x i8> %head_six, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer 22 %rem = srem <vscale x 4 x i8> %va, %splat_six 23 24 %cc = icmp eq <vscale x 4 x i8> %rem, zeroinitializer 25 ret <vscale x 4 x i1> %cc 26} 27 28define <vscale x 1 x i32> @vmulh_vv_nxv1i32(<vscale x 1 x i32> %va, <vscale x 1 x i32> %vb) { 29; CHECK-LABEL: vmulh_vv_nxv1i32: 30; CHECK: # %bb.0: 31; CHECK-NEXT: vsetvli a0, zero, e32, mf2, ta, mu 32; CHECK-NEXT: vmulh.vv v8, v9, v8 33; CHECK-NEXT: ret 34 %vc = sext <vscale x 1 x i32> %vb to <vscale x 1 x i64> 35 %vd = sext <vscale x 1 x i32> %va to <vscale x 1 x i64> 36 %ve = mul <vscale x 1 x i64> %vc, %vd 37 %head = insertelement <vscale x 1 x i64> poison, i64 32, i32 0 38 %splat = shufflevector <vscale x 1 x i64> %head, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer 39 %vf = lshr <vscale x 1 x i64> %ve, %splat 40 %vg = trunc <vscale x 1 x i64> %vf to <vscale x 1 x i32> 41 ret <vscale x 1 x i32> %vg 42} 43 44define <vscale x 1 x i32> @vmulh_vx_nxv1i32(<vscale x 1 x i32> %va, i32 %x) { 45; CHECK-LABEL: vmulh_vx_nxv1i32: 46; CHECK: # %bb.0: 47; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu 48; CHECK-NEXT: vmulh.vx v8, v8, a0 49; CHECK-NEXT: ret 50 %head1 = insertelement <vscale x 1 x i32> poison, i32 %x, i32 0 51 %splat1 = shufflevector <vscale x 1 x i32> %head1, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer 52 %vb = sext <vscale x 1 x i32> %splat1 to <vscale x 1 x i64> 53 %vc = sext <vscale x 1 x i32> %va to <vscale x 1 x i64> 54 %vd = mul <vscale x 1 x i64> %vb, %vc 55 %head2 = insertelement <vscale x 1 x i64> poison, i64 32, i32 0 56 %splat2 = shufflevector <vscale x 1 x i64> %head2, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer 57 %ve = lshr <vscale x 1 x i64> %vd, %splat2 58 %vf = trunc <vscale x 1 x i64> %ve to <vscale x 1 x i32> 59 ret <vscale x 1 x i32> %vf 60} 61 62define <vscale x 1 x i32> @vmulh_vi_nxv1i32_0(<vscale x 1 x i32> %va) { 63; RV32-LABEL: vmulh_vi_nxv1i32_0: 64; RV32: # %bb.0: 65; RV32-NEXT: li a0, -7 66; RV32-NEXT: vsetvli a1, zero, e32, mf2, ta, mu 67; RV32-NEXT: vmulh.vx v8, v8, a0 68; RV32-NEXT: ret 69; 70; RV64-LABEL: vmulh_vi_nxv1i32_0: 71; RV64: # %bb.0: 72; RV64-NEXT: li a0, 1 73; RV64-NEXT: slli a0, a0, 32 74; RV64-NEXT: addi a0, a0, -7 75; RV64-NEXT: vsetvli a1, zero, e32, mf2, ta, mu 76; RV64-NEXT: vmulh.vx v8, v8, a0 77; RV64-NEXT: ret 78 %head1 = insertelement <vscale x 1 x i32> poison, i32 -7, i32 0 79 %splat1 = shufflevector <vscale x 1 x i32> %head1, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer 80 %vb = sext <vscale x 1 x i32> %splat1 to <vscale x 1 x i64> 81 %vc = sext <vscale x 1 x i32> %va to <vscale x 1 x i64> 82 %vd = mul <vscale x 1 x i64> %vb, %vc 83 %head2 = insertelement <vscale x 1 x i64> poison, i64 32, i32 0 84 %splat2 = shufflevector <vscale x 1 x i64> %head2, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer 85 %ve = lshr <vscale x 1 x i64> %vd, %splat2 86 %vf = trunc <vscale x 1 x i64> %ve to <vscale x 1 x i32> 87 ret <vscale x 1 x i32> %vf 88} 89 90define <vscale x 1 x i32> @vmulh_vi_nxv1i32_1(<vscale x 1 x i32> %va) { 91; CHECK-LABEL: vmulh_vi_nxv1i32_1: 92; CHECK: # %bb.0: 93; CHECK-NEXT: li a0, 16 94; CHECK-NEXT: vsetvli a1, zero, e32, mf2, ta, mu 95; CHECK-NEXT: vmulh.vx v8, v8, a0 96; CHECK-NEXT: ret 97 %head1 = insertelement <vscale x 1 x i32> poison, i32 16, i32 0 98 %splat1 = shufflevector <vscale x 1 x i32> %head1, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer 99 %vb = sext <vscale x 1 x i32> %splat1 to <vscale x 1 x i64> 100 %vc = sext <vscale x 1 x i32> %va to <vscale x 1 x i64> 101 %vd = mul <vscale x 1 x i64> %vb, %vc 102 %head2 = insertelement <vscale x 1 x i64> poison, i64 32, i32 0 103 %splat2 = shufflevector <vscale x 1 x i64> %head2, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer 104 %ve = lshr <vscale x 1 x i64> %vd, %splat2 105 %vf = trunc <vscale x 1 x i64> %ve to <vscale x 1 x i32> 106 ret <vscale x 1 x i32> %vf 107} 108 109define <vscale x 2 x i32> @vmulh_vv_nxv2i32(<vscale x 2 x i32> %va, <vscale x 2 x i32> %vb) { 110; CHECK-LABEL: vmulh_vv_nxv2i32: 111; CHECK: # %bb.0: 112; CHECK-NEXT: vsetvli a0, zero, e32, m1, ta, mu 113; CHECK-NEXT: vmulh.vv v8, v9, v8 114; CHECK-NEXT: ret 115 %vc = sext <vscale x 2 x i32> %vb to <vscale x 2 x i64> 116 %vd = sext <vscale x 2 x i32> %va to <vscale x 2 x i64> 117 %ve = mul <vscale x 2 x i64> %vc, %vd 118 %head = insertelement <vscale x 2 x i64> poison, i64 32, i32 0 119 %splat = shufflevector <vscale x 2 x i64> %head, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer 120 %vf = lshr <vscale x 2 x i64> %ve, %splat 121 %vg = trunc <vscale x 2 x i64> %vf to <vscale x 2 x i32> 122 ret <vscale x 2 x i32> %vg 123} 124 125define <vscale x 2 x i32> @vmulh_vx_nxv2i32(<vscale x 2 x i32> %va, i32 %x) { 126; CHECK-LABEL: vmulh_vx_nxv2i32: 127; CHECK: # %bb.0: 128; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu 129; CHECK-NEXT: vmulh.vx v8, v8, a0 130; CHECK-NEXT: ret 131 %head1 = insertelement <vscale x 2 x i32> poison, i32 %x, i32 0 132 %splat1 = shufflevector <vscale x 2 x i32> %head1, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer 133 %vb = sext <vscale x 2 x i32> %splat1 to <vscale x 2 x i64> 134 %vc = sext <vscale x 2 x i32> %va to <vscale x 2 x i64> 135 %vd = mul <vscale x 2 x i64> %vb, %vc 136 %head2 = insertelement <vscale x 2 x i64> poison, i64 32, i32 0 137 %splat2 = shufflevector <vscale x 2 x i64> %head2, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer 138 %ve = lshr <vscale x 2 x i64> %vd, %splat2 139 %vf = trunc <vscale x 2 x i64> %ve to <vscale x 2 x i32> 140 ret <vscale x 2 x i32> %vf 141} 142 143define <vscale x 2 x i32> @vmulh_vi_nxv2i32_0(<vscale x 2 x i32> %va) { 144; RV32-LABEL: vmulh_vi_nxv2i32_0: 145; RV32: # %bb.0: 146; RV32-NEXT: li a0, -7 147; RV32-NEXT: vsetvli a1, zero, e32, m1, ta, mu 148; RV32-NEXT: vmulh.vx v8, v8, a0 149; RV32-NEXT: ret 150; 151; RV64-LABEL: vmulh_vi_nxv2i32_0: 152; RV64: # %bb.0: 153; RV64-NEXT: li a0, 1 154; RV64-NEXT: slli a0, a0, 32 155; RV64-NEXT: addi a0, a0, -7 156; RV64-NEXT: vsetvli a1, zero, e32, m1, ta, mu 157; RV64-NEXT: vmulh.vx v8, v8, a0 158; RV64-NEXT: ret 159 %head1 = insertelement <vscale x 2 x i32> poison, i32 -7, i32 0 160 %splat1 = shufflevector <vscale x 2 x i32> %head1, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer 161 %vb = sext <vscale x 2 x i32> %splat1 to <vscale x 2 x i64> 162 %vc = sext <vscale x 2 x i32> %va to <vscale x 2 x i64> 163 %vd = mul <vscale x 2 x i64> %vb, %vc 164 %head2 = insertelement <vscale x 2 x i64> poison, i64 32, i32 0 165 %splat2 = shufflevector <vscale x 2 x i64> %head2, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer 166 %ve = lshr <vscale x 2 x i64> %vd, %splat2 167 %vf = trunc <vscale x 2 x i64> %ve to <vscale x 2 x i32> 168 ret <vscale x 2 x i32> %vf 169} 170 171define <vscale x 2 x i32> @vmulh_vi_nxv2i32_1(<vscale x 2 x i32> %va) { 172; CHECK-LABEL: vmulh_vi_nxv2i32_1: 173; CHECK: # %bb.0: 174; CHECK-NEXT: li a0, 16 175; CHECK-NEXT: vsetvli a1, zero, e32, m1, ta, mu 176; CHECK-NEXT: vmulh.vx v8, v8, a0 177; CHECK-NEXT: ret 178 %head1 = insertelement <vscale x 2 x i32> poison, i32 16, i32 0 179 %splat1 = shufflevector <vscale x 2 x i32> %head1, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer 180 %vb = sext <vscale x 2 x i32> %splat1 to <vscale x 2 x i64> 181 %vc = sext <vscale x 2 x i32> %va to <vscale x 2 x i64> 182 %vd = mul <vscale x 2 x i64> %vb, %vc 183 %head2 = insertelement <vscale x 2 x i64> poison, i64 32, i32 0 184 %splat2 = shufflevector <vscale x 2 x i64> %head2, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer 185 %ve = lshr <vscale x 2 x i64> %vd, %splat2 186 %vf = trunc <vscale x 2 x i64> %ve to <vscale x 2 x i32> 187 ret <vscale x 2 x i32> %vf 188} 189 190define <vscale x 4 x i32> @vmulh_vv_nxv4i32(<vscale x 4 x i32> %va, <vscale x 4 x i32> %vb) { 191; CHECK-LABEL: vmulh_vv_nxv4i32: 192; CHECK: # %bb.0: 193; CHECK-NEXT: vsetvli a0, zero, e32, m2, ta, mu 194; CHECK-NEXT: vmulh.vv v8, v10, v8 195; CHECK-NEXT: ret 196 %vc = sext <vscale x 4 x i32> %vb to <vscale x 4 x i64> 197 %vd = sext <vscale x 4 x i32> %va to <vscale x 4 x i64> 198 %ve = mul <vscale x 4 x i64> %vc, %vd 199 %head = insertelement <vscale x 4 x i64> poison, i64 32, i32 0 200 %splat = shufflevector <vscale x 4 x i64> %head, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer 201 %vf = lshr <vscale x 4 x i64> %ve, %splat 202 %vg = trunc <vscale x 4 x i64> %vf to <vscale x 4 x i32> 203 ret <vscale x 4 x i32> %vg 204} 205 206define <vscale x 4 x i32> @vmulh_vx_nxv4i32(<vscale x 4 x i32> %va, i32 %x) { 207; CHECK-LABEL: vmulh_vx_nxv4i32: 208; CHECK: # %bb.0: 209; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu 210; CHECK-NEXT: vmulh.vx v8, v8, a0 211; CHECK-NEXT: ret 212 %head1 = insertelement <vscale x 4 x i32> poison, i32 %x, i32 0 213 %splat1 = shufflevector <vscale x 4 x i32> %head1, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer 214 %vb = sext <vscale x 4 x i32> %splat1 to <vscale x 4 x i64> 215 %vc = sext <vscale x 4 x i32> %va to <vscale x 4 x i64> 216 %vd = mul <vscale x 4 x i64> %vb, %vc 217 %head2 = insertelement <vscale x 4 x i64> poison, i64 32, i32 0 218 %splat2 = shufflevector <vscale x 4 x i64> %head2, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer 219 %ve = lshr <vscale x 4 x i64> %vd, %splat2 220 %vf = trunc <vscale x 4 x i64> %ve to <vscale x 4 x i32> 221 ret <vscale x 4 x i32> %vf 222} 223 224define <vscale x 4 x i32> @vmulh_vi_nxv4i32_0(<vscale x 4 x i32> %va) { 225; RV32-LABEL: vmulh_vi_nxv4i32_0: 226; RV32: # %bb.0: 227; RV32-NEXT: li a0, -7 228; RV32-NEXT: vsetvli a1, zero, e32, m2, ta, mu 229; RV32-NEXT: vmulh.vx v8, v8, a0 230; RV32-NEXT: ret 231; 232; RV64-LABEL: vmulh_vi_nxv4i32_0: 233; RV64: # %bb.0: 234; RV64-NEXT: li a0, 1 235; RV64-NEXT: slli a0, a0, 32 236; RV64-NEXT: addi a0, a0, -7 237; RV64-NEXT: vsetvli a1, zero, e32, m2, ta, mu 238; RV64-NEXT: vmulh.vx v8, v8, a0 239; RV64-NEXT: ret 240 %head1 = insertelement <vscale x 4 x i32> poison, i32 -7, i32 0 241 %splat1 = shufflevector <vscale x 4 x i32> %head1, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer 242 %vb = sext <vscale x 4 x i32> %splat1 to <vscale x 4 x i64> 243 %vc = sext <vscale x 4 x i32> %va to <vscale x 4 x i64> 244 %vd = mul <vscale x 4 x i64> %vb, %vc 245 %head2 = insertelement <vscale x 4 x i64> poison, i64 32, i32 0 246 %splat2 = shufflevector <vscale x 4 x i64> %head2, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer 247 %ve = lshr <vscale x 4 x i64> %vd, %splat2 248 %vf = trunc <vscale x 4 x i64> %ve to <vscale x 4 x i32> 249 ret <vscale x 4 x i32> %vf 250} 251 252define <vscale x 4 x i32> @vmulh_vi_nxv4i32_1(<vscale x 4 x i32> %va) { 253; CHECK-LABEL: vmulh_vi_nxv4i32_1: 254; CHECK: # %bb.0: 255; CHECK-NEXT: li a0, 16 256; CHECK-NEXT: vsetvli a1, zero, e32, m2, ta, mu 257; CHECK-NEXT: vmulh.vx v8, v8, a0 258; CHECK-NEXT: ret 259 %head1 = insertelement <vscale x 4 x i32> poison, i32 16, i32 0 260 %splat1 = shufflevector <vscale x 4 x i32> %head1, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer 261 %vb = sext <vscale x 4 x i32> %splat1 to <vscale x 4 x i64> 262 %vc = sext <vscale x 4 x i32> %va to <vscale x 4 x i64> 263 %vd = mul <vscale x 4 x i64> %vb, %vc 264 %head2 = insertelement <vscale x 4 x i64> poison, i64 32, i32 0 265 %splat2 = shufflevector <vscale x 4 x i64> %head2, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer 266 %ve = lshr <vscale x 4 x i64> %vd, %splat2 267 %vf = trunc <vscale x 4 x i64> %ve to <vscale x 4 x i32> 268 ret <vscale x 4 x i32> %vf 269} 270 271define <vscale x 8 x i32> @vmulh_vv_nxv8i32(<vscale x 8 x i32> %va, <vscale x 8 x i32> %vb) { 272; CHECK-LABEL: vmulh_vv_nxv8i32: 273; CHECK: # %bb.0: 274; CHECK-NEXT: vsetvli a0, zero, e32, m4, ta, mu 275; CHECK-NEXT: vmulh.vv v8, v12, v8 276; CHECK-NEXT: ret 277 %vc = sext <vscale x 8 x i32> %vb to <vscale x 8 x i64> 278 %vd = sext <vscale x 8 x i32> %va to <vscale x 8 x i64> 279 %ve = mul <vscale x 8 x i64> %vc, %vd 280 %head = insertelement <vscale x 8 x i64> poison, i64 32, i32 0 281 %splat = shufflevector <vscale x 8 x i64> %head, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 282 %vf = lshr <vscale x 8 x i64> %ve, %splat 283 %vg = trunc <vscale x 8 x i64> %vf to <vscale x 8 x i32> 284 ret <vscale x 8 x i32> %vg 285} 286 287define <vscale x 8 x i32> @vmulh_vx_nxv8i32(<vscale x 8 x i32> %va, i32 %x) { 288; CHECK-LABEL: vmulh_vx_nxv8i32: 289; CHECK: # %bb.0: 290; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 291; CHECK-NEXT: vmulh.vx v8, v8, a0 292; CHECK-NEXT: ret 293 %head1 = insertelement <vscale x 8 x i32> poison, i32 %x, i32 0 294 %splat1 = shufflevector <vscale x 8 x i32> %head1, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 295 %vb = sext <vscale x 8 x i32> %splat1 to <vscale x 8 x i64> 296 %vc = sext <vscale x 8 x i32> %va to <vscale x 8 x i64> 297 %vd = mul <vscale x 8 x i64> %vb, %vc 298 %head2 = insertelement <vscale x 8 x i64> poison, i64 32, i32 0 299 %splat2 = shufflevector <vscale x 8 x i64> %head2, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 300 %ve = lshr <vscale x 8 x i64> %vd, %splat2 301 %vf = trunc <vscale x 8 x i64> %ve to <vscale x 8 x i32> 302 ret <vscale x 8 x i32> %vf 303} 304 305define <vscale x 8 x i32> @vmulh_vi_nxv8i32_0(<vscale x 8 x i32> %va) { 306; RV32-LABEL: vmulh_vi_nxv8i32_0: 307; RV32: # %bb.0: 308; RV32-NEXT: li a0, -7 309; RV32-NEXT: vsetvli a1, zero, e32, m4, ta, mu 310; RV32-NEXT: vmulh.vx v8, v8, a0 311; RV32-NEXT: ret 312; 313; RV64-LABEL: vmulh_vi_nxv8i32_0: 314; RV64: # %bb.0: 315; RV64-NEXT: li a0, 1 316; RV64-NEXT: slli a0, a0, 32 317; RV64-NEXT: addi a0, a0, -7 318; RV64-NEXT: vsetvli a1, zero, e32, m4, ta, mu 319; RV64-NEXT: vmulh.vx v8, v8, a0 320; RV64-NEXT: ret 321 %head1 = insertelement <vscale x 8 x i32> poison, i32 -7, i32 0 322 %splat1 = shufflevector <vscale x 8 x i32> %head1, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 323 %vb = sext <vscale x 8 x i32> %splat1 to <vscale x 8 x i64> 324 %vc = sext <vscale x 8 x i32> %va to <vscale x 8 x i64> 325 %vd = mul <vscale x 8 x i64> %vb, %vc 326 %head2 = insertelement <vscale x 8 x i64> poison, i64 32, i32 0 327 %splat2 = shufflevector <vscale x 8 x i64> %head2, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 328 %ve = lshr <vscale x 8 x i64> %vd, %splat2 329 %vf = trunc <vscale x 8 x i64> %ve to <vscale x 8 x i32> 330 ret <vscale x 8 x i32> %vf 331} 332 333define <vscale x 8 x i32> @vmulh_vi_nxv8i32_1(<vscale x 8 x i32> %va) { 334; CHECK-LABEL: vmulh_vi_nxv8i32_1: 335; CHECK: # %bb.0: 336; CHECK-NEXT: li a0, 16 337; CHECK-NEXT: vsetvli a1, zero, e32, m4, ta, mu 338; CHECK-NEXT: vmulh.vx v8, v8, a0 339; CHECK-NEXT: ret 340 %head1 = insertelement <vscale x 8 x i32> poison, i32 16, i32 0 341 %splat1 = shufflevector <vscale x 8 x i32> %head1, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer 342 %vb = sext <vscale x 8 x i32> %splat1 to <vscale x 8 x i64> 343 %vc = sext <vscale x 8 x i32> %va to <vscale x 8 x i64> 344 %vd = mul <vscale x 8 x i64> %vb, %vc 345 %head2 = insertelement <vscale x 8 x i64> poison, i64 32, i32 0 346 %splat2 = shufflevector <vscale x 8 x i64> %head2, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer 347 %ve = lshr <vscale x 8 x i64> %vd, %splat2 348 %vf = trunc <vscale x 8 x i64> %ve to <vscale x 8 x i32> 349 ret <vscale x 8 x i32> %vf 350} 351