brintos

brintos / llvm-project-archived public Read only

0
0
Text · 26.2 KiB · 9785805 Raw
614 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 32; RUN: llc < %s -mtriple=riscv32 -mattr=+v,+zfh,+zvfh -verify-machineinstrs | FileCheck %s -check-prefixes=CHECK,RV323; RUN: llc < %s -mtriple=riscv64 -mattr=+v,+zfh,+zvfh -verify-machineinstrs | FileCheck %s -check-prefixes=CHECK,RV644 5define <vscale x 1 x i1> @nxv1i1(i1 %x, i1 %y) {6; CHECK-LABEL: nxv1i1:7; CHECK:       # %bb.0:8; CHECK-NEXT:    xor a0, a0, a19; CHECK-NEXT:    andi a0, a0, 110; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma11; CHECK-NEXT:    vmv.v.x v8, a012; CHECK-NEXT:    vmsne.vi v0, v8, 013; CHECK-NEXT:    ret14  %head.x = insertelement <vscale x 1 x i1> poison, i1 %x, i32 015  %splat.x = shufflevector <vscale x 1 x i1> %head.x, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer16  %head.y = insertelement <vscale x 1 x i1> poison, i1 %y, i32 017  %splat.y = shufflevector <vscale x 1 x i1> %head.y, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer18  %v = add <vscale x 1 x i1> %splat.x, %splat.y19  ret <vscale x 1 x i1> %v20}21 22define <vscale x 2 x i1> @nxv2i1(i1 %x, i1 %y) {23; CHECK-LABEL: nxv2i1:24; CHECK:       # %bb.0:25; CHECK-NEXT:    xor a0, a0, a126; CHECK-NEXT:    andi a0, a0, 127; CHECK-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma28; CHECK-NEXT:    vmv.v.x v8, a029; CHECK-NEXT:    vmsne.vi v0, v8, 030; CHECK-NEXT:    ret31  %head.x = insertelement <vscale x 2 x i1> poison, i1 %x, i32 032  %splat.x = shufflevector <vscale x 2 x i1> %head.x, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer33  %head.y = insertelement <vscale x 2 x i1> poison, i1 %y, i32 034  %splat.y = shufflevector <vscale x 2 x i1> %head.y, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer35  %v = add <vscale x 2 x i1> %splat.x, %splat.y36  ret <vscale x 2 x i1> %v37}38 39define <vscale x 4 x i1> @nxv4i1(i1 %x, i1 %y) {40; CHECK-LABEL: nxv4i1:41; CHECK:       # %bb.0:42; CHECK-NEXT:    xor a0, a0, a143; CHECK-NEXT:    andi a0, a0, 144; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma45; CHECK-NEXT:    vmv.v.x v8, a046; CHECK-NEXT:    vmsne.vi v0, v8, 047; CHECK-NEXT:    ret48  %head.x = insertelement <vscale x 4 x i1> poison, i1 %x, i32 049  %splat.x = shufflevector <vscale x 4 x i1> %head.x, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer50  %head.y = insertelement <vscale x 4 x i1> poison, i1 %y, i32 051  %splat.y = shufflevector <vscale x 4 x i1> %head.y, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer52  %v = add <vscale x 4 x i1> %splat.x, %splat.y53  ret <vscale x 4 x i1> %v54}55 56define <vscale x 8 x i1> @nxv8i1(i1 %x, i1 %y) {57; CHECK-LABEL: nxv8i1:58; CHECK:       # %bb.0:59; CHECK-NEXT:    xor a0, a0, a160; CHECK-NEXT:    andi a0, a0, 161; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma62; CHECK-NEXT:    vmv.v.x v8, a063; CHECK-NEXT:    vmsne.vi v0, v8, 064; CHECK-NEXT:    ret65  %head.x = insertelement <vscale x 8 x i1> poison, i1 %x, i32 066  %splat.x = shufflevector <vscale x 8 x i1> %head.x, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer67  %head.y = insertelement <vscale x 8 x i1> poison, i1 %y, i32 068  %splat.y = shufflevector <vscale x 8 x i1> %head.y, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer69  %v = add <vscale x 8 x i1> %splat.x, %splat.y70  ret <vscale x 8 x i1> %v71}72 73define <vscale x 16 x i1> @nxv16i1(i1 %x, i1 %y) {74; CHECK-LABEL: nxv16i1:75; CHECK:       # %bb.0:76; CHECK-NEXT:    xor a0, a0, a177; CHECK-NEXT:    andi a0, a0, 178; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, ma79; CHECK-NEXT:    vmv.v.x v8, a080; CHECK-NEXT:    vmsne.vi v0, v8, 081; CHECK-NEXT:    ret82  %head.x = insertelement <vscale x 16 x i1> poison, i1 %x, i32 083  %splat.x = shufflevector <vscale x 16 x i1> %head.x, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer84  %head.y = insertelement <vscale x 16 x i1> poison, i1 %y, i32 085  %splat.y = shufflevector <vscale x 16 x i1> %head.y, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer86  %v = add <vscale x 16 x i1> %splat.x, %splat.y87  ret <vscale x 16 x i1> %v88}89 90define <vscale x 32 x i1> @nxv32i1(i1 %x, i1 %y) {91; CHECK-LABEL: nxv32i1:92; CHECK:       # %bb.0:93; CHECK-NEXT:    xor a0, a0, a194; CHECK-NEXT:    andi a0, a0, 195; CHECK-NEXT:    vsetvli a1, zero, e8, m4, ta, ma96; CHECK-NEXT:    vmv.v.x v8, a097; CHECK-NEXT:    vmsne.vi v0, v8, 098; CHECK-NEXT:    ret99  %head.x = insertelement <vscale x 32 x i1> poison, i1 %x, i32 0100  %splat.x = shufflevector <vscale x 32 x i1> %head.x, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer101  %head.y = insertelement <vscale x 32 x i1> poison, i1 %y, i32 0102  %splat.y = shufflevector <vscale x 32 x i1> %head.y, <vscale x 32 x i1> poison, <vscale x 32 x i32> zeroinitializer103  %v = add <vscale x 32 x i1> %splat.x, %splat.y104  ret <vscale x 32 x i1> %v105}106 107define <vscale x 64 x i1> @nxv64i1(i1 %x, i1 %y) {108; CHECK-LABEL: nxv64i1:109; CHECK:       # %bb.0:110; CHECK-NEXT:    xor a0, a0, a1111; CHECK-NEXT:    andi a0, a0, 1112; CHECK-NEXT:    vsetvli a1, zero, e8, m8, ta, ma113; CHECK-NEXT:    vmv.v.x v8, a0114; CHECK-NEXT:    vmsne.vi v0, v8, 0115; CHECK-NEXT:    ret116  %head.x = insertelement <vscale x 64 x i1> poison, i1 %x, i32 0117  %splat.x = shufflevector <vscale x 64 x i1> %head.x, <vscale x 64 x i1> poison, <vscale x 64 x i32> zeroinitializer118  %head.y = insertelement <vscale x 64 x i1> poison, i1 %y, i32 0119  %splat.y = shufflevector <vscale x 64 x i1> %head.y, <vscale x 64 x i1> poison, <vscale x 64 x i32> zeroinitializer120  %v = add <vscale x 64 x i1> %splat.x, %splat.y121  ret <vscale x 64 x i1> %v122}123 124define <vscale x 1 x i8> @nxv1i8(i8 %x, i8 %y) {125; CHECK-LABEL: nxv1i8:126; CHECK:       # %bb.0:127; CHECK-NEXT:    add a0, a0, a1128; CHECK-NEXT:    vsetvli a1, zero, e8, mf8, ta, ma129; CHECK-NEXT:    vmv.v.x v8, a0130; CHECK-NEXT:    ret131  %head.x = insertelement <vscale x 1 x i8> poison, i8 %x, i32 0132  %splat.x = shufflevector <vscale x 1 x i8> %head.x, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer133  %head.y = insertelement <vscale x 1 x i8> poison, i8 %y, i32 0134  %splat.y = shufflevector <vscale x 1 x i8> %head.y, <vscale x 1 x i8> poison, <vscale x 1 x i32> zeroinitializer135  %v = add <vscale x 1 x i8> %splat.x, %splat.y136  ret <vscale x 1 x i8> %v137}138 139define <vscale x 2 x i8> @nxv2i8(i8 %x, i8 %y) {140; CHECK-LABEL: nxv2i8:141; CHECK:       # %bb.0:142; CHECK-NEXT:    add a0, a0, a1143; CHECK-NEXT:    vsetvli a1, zero, e8, mf4, ta, ma144; CHECK-NEXT:    vmv.v.x v8, a0145; CHECK-NEXT:    ret146  %head.x = insertelement <vscale x 2 x i8> poison, i8 %x, i32 0147  %splat.x = shufflevector <vscale x 2 x i8> %head.x, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer148  %head.y = insertelement <vscale x 2 x i8> poison, i8 %y, i32 0149  %splat.y = shufflevector <vscale x 2 x i8> %head.y, <vscale x 2 x i8> poison, <vscale x 2 x i32> zeroinitializer150  %v = add <vscale x 2 x i8> %splat.x, %splat.y151  ret <vscale x 2 x i8> %v152}153 154define <vscale x 4 x i8> @nxv4i8(i8 %x, i8 %y) {155; CHECK-LABEL: nxv4i8:156; CHECK:       # %bb.0:157; CHECK-NEXT:    add a0, a0, a1158; CHECK-NEXT:    vsetvli a1, zero, e8, mf2, ta, ma159; CHECK-NEXT:    vmv.v.x v8, a0160; CHECK-NEXT:    ret161  %head.x = insertelement <vscale x 4 x i8> poison, i8 %x, i32 0162  %splat.x = shufflevector <vscale x 4 x i8> %head.x, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer163  %head.y = insertelement <vscale x 4 x i8> poison, i8 %y, i32 0164  %splat.y = shufflevector <vscale x 4 x i8> %head.y, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer165  %v = add <vscale x 4 x i8> %splat.x, %splat.y166  ret <vscale x 4 x i8> %v167}168 169define <vscale x 8 x i8> @nxv8i8(i8 %x, i8 %y) {170; CHECK-LABEL: nxv8i8:171; CHECK:       # %bb.0:172; CHECK-NEXT:    add a0, a0, a1173; CHECK-NEXT:    vsetvli a1, zero, e8, m1, ta, ma174; CHECK-NEXT:    vmv.v.x v8, a0175; CHECK-NEXT:    ret176  %head.x = insertelement <vscale x 8 x i8> poison, i8 %x, i32 0177  %splat.x = shufflevector <vscale x 8 x i8> %head.x, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer178  %head.y = insertelement <vscale x 8 x i8> poison, i8 %y, i32 0179  %splat.y = shufflevector <vscale x 8 x i8> %head.y, <vscale x 8 x i8> poison, <vscale x 8 x i32> zeroinitializer180  %v = add <vscale x 8 x i8> %splat.x, %splat.y181  ret <vscale x 8 x i8> %v182}183 184define <vscale x 16 x i8> @nxv16i8(i8 %x, i8 %y) {185; CHECK-LABEL: nxv16i8:186; CHECK:       # %bb.0:187; CHECK-NEXT:    add a0, a0, a1188; CHECK-NEXT:    vsetvli a1, zero, e8, m2, ta, ma189; CHECK-NEXT:    vmv.v.x v8, a0190; CHECK-NEXT:    ret191  %head.x = insertelement <vscale x 16 x i8> poison, i8 %x, i32 0192  %splat.x = shufflevector <vscale x 16 x i8> %head.x, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer193  %head.y = insertelement <vscale x 16 x i8> poison, i8 %y, i32 0194  %splat.y = shufflevector <vscale x 16 x i8> %head.y, <vscale x 16 x i8> poison, <vscale x 16 x i32> zeroinitializer195  %v = add <vscale x 16 x i8> %splat.x, %splat.y196  ret <vscale x 16 x i8> %v197}198 199define <vscale x 32 x i8> @nxv32i8(i8 %x, i8 %y) {200; CHECK-LABEL: nxv32i8:201; CHECK:       # %bb.0:202; CHECK-NEXT:    add a0, a0, a1203; CHECK-NEXT:    vsetvli a1, zero, e8, m4, ta, ma204; CHECK-NEXT:    vmv.v.x v8, a0205; CHECK-NEXT:    ret206  %head.x = insertelement <vscale x 32 x i8> poison, i8 %x, i32 0207  %splat.x = shufflevector <vscale x 32 x i8> %head.x, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer208  %head.y = insertelement <vscale x 32 x i8> poison, i8 %y, i32 0209  %splat.y = shufflevector <vscale x 32 x i8> %head.y, <vscale x 32 x i8> poison, <vscale x 32 x i32> zeroinitializer210  %v = add <vscale x 32 x i8> %splat.x, %splat.y211  ret <vscale x 32 x i8> %v212}213 214define <vscale x 64 x i8> @nxv64i8(i8 %x, i8 %y) {215; CHECK-LABEL: nxv64i8:216; CHECK:       # %bb.0:217; CHECK-NEXT:    add a0, a0, a1218; CHECK-NEXT:    vsetvli a1, zero, e8, m8, ta, ma219; CHECK-NEXT:    vmv.v.x v8, a0220; CHECK-NEXT:    ret221  %head.x = insertelement <vscale x 64 x i8> poison, i8 %x, i32 0222  %splat.x = shufflevector <vscale x 64 x i8> %head.x, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer223  %head.y = insertelement <vscale x 64 x i8> poison, i8 %y, i32 0224  %splat.y = shufflevector <vscale x 64 x i8> %head.y, <vscale x 64 x i8> poison, <vscale x 64 x i32> zeroinitializer225  %v = add <vscale x 64 x i8> %splat.x, %splat.y226  ret <vscale x 64 x i8> %v227}228 229define <vscale x 1 x i16> @nxv1i16(i16 %x, i16 %y) {230; CHECK-LABEL: nxv1i16:231; CHECK:       # %bb.0:232; CHECK-NEXT:    add a0, a0, a1233; CHECK-NEXT:    vsetvli a1, zero, e16, mf4, ta, ma234; CHECK-NEXT:    vmv.v.x v8, a0235; CHECK-NEXT:    ret236  %head.x = insertelement <vscale x 1 x i16> poison, i16 %x, i32 0237  %splat.x = shufflevector <vscale x 1 x i16> %head.x, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer238  %head.y = insertelement <vscale x 1 x i16> poison, i16 %y, i32 0239  %splat.y = shufflevector <vscale x 1 x i16> %head.y, <vscale x 1 x i16> poison, <vscale x 1 x i32> zeroinitializer240  %v = add <vscale x 1 x i16> %splat.x, %splat.y241  ret <vscale x 1 x i16> %v242}243 244define <vscale x 2 x i16> @nxv2i16(i16 %x, i16 %y) {245; CHECK-LABEL: nxv2i16:246; CHECK:       # %bb.0:247; CHECK-NEXT:    add a0, a0, a1248; CHECK-NEXT:    vsetvli a1, zero, e16, mf2, ta, ma249; CHECK-NEXT:    vmv.v.x v8, a0250; CHECK-NEXT:    ret251  %head.x = insertelement <vscale x 2 x i16> poison, i16 %x, i32 0252  %splat.x = shufflevector <vscale x 2 x i16> %head.x, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer253  %head.y = insertelement <vscale x 2 x i16> poison, i16 %y, i32 0254  %splat.y = shufflevector <vscale x 2 x i16> %head.y, <vscale x 2 x i16> poison, <vscale x 2 x i32> zeroinitializer255  %v = add <vscale x 2 x i16> %splat.x, %splat.y256  ret <vscale x 2 x i16> %v257}258 259define <vscale x 4 x i16> @nxv4i16(i16 %x, i16 %y) {260; CHECK-LABEL: nxv4i16:261; CHECK:       # %bb.0:262; CHECK-NEXT:    add a0, a0, a1263; CHECK-NEXT:    vsetvli a1, zero, e16, m1, ta, ma264; CHECK-NEXT:    vmv.v.x v8, a0265; CHECK-NEXT:    ret266  %head.x = insertelement <vscale x 4 x i16> poison, i16 %x, i32 0267  %splat.x = shufflevector <vscale x 4 x i16> %head.x, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer268  %head.y = insertelement <vscale x 4 x i16> poison, i16 %y, i32 0269  %splat.y = shufflevector <vscale x 4 x i16> %head.y, <vscale x 4 x i16> poison, <vscale x 4 x i32> zeroinitializer270  %v = add <vscale x 4 x i16> %splat.x, %splat.y271  ret <vscale x 4 x i16> %v272}273 274define <vscale x 8 x i16> @nxv8i16(i16 %x, i16 %y) {275; CHECK-LABEL: nxv8i16:276; CHECK:       # %bb.0:277; CHECK-NEXT:    add a0, a0, a1278; CHECK-NEXT:    vsetvli a1, zero, e16, m2, ta, ma279; CHECK-NEXT:    vmv.v.x v8, a0280; CHECK-NEXT:    ret281  %head.x = insertelement <vscale x 8 x i16> poison, i16 %x, i32 0282  %splat.x = shufflevector <vscale x 8 x i16> %head.x, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer283  %head.y = insertelement <vscale x 8 x i16> poison, i16 %y, i32 0284  %splat.y = shufflevector <vscale x 8 x i16> %head.y, <vscale x 8 x i16> poison, <vscale x 8 x i32> zeroinitializer285  %v = add <vscale x 8 x i16> %splat.x, %splat.y286  ret <vscale x 8 x i16> %v287}288 289define <vscale x 16 x i16> @nxv16i16(i16 %x, i16 %y) {290; CHECK-LABEL: nxv16i16:291; CHECK:       # %bb.0:292; CHECK-NEXT:    add a0, a0, a1293; CHECK-NEXT:    vsetvli a1, zero, e16, m4, ta, ma294; CHECK-NEXT:    vmv.v.x v8, a0295; CHECK-NEXT:    ret296  %head.x = insertelement <vscale x 16 x i16> poison, i16 %x, i32 0297  %splat.x = shufflevector <vscale x 16 x i16> %head.x, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer298  %head.y = insertelement <vscale x 16 x i16> poison, i16 %y, i32 0299  %splat.y = shufflevector <vscale x 16 x i16> %head.y, <vscale x 16 x i16> poison, <vscale x 16 x i32> zeroinitializer300  %v = add <vscale x 16 x i16> %splat.x, %splat.y301  ret <vscale x 16 x i16> %v302}303 304define <vscale x 32 x i16> @nxv32i16(i16 %x, i16 %y) {305; CHECK-LABEL: nxv32i16:306; CHECK:       # %bb.0:307; CHECK-NEXT:    add a0, a0, a1308; CHECK-NEXT:    vsetvli a1, zero, e16, m8, ta, ma309; CHECK-NEXT:    vmv.v.x v8, a0310; CHECK-NEXT:    ret311  %head.x = insertelement <vscale x 32 x i16> poison, i16 %x, i32 0312  %splat.x = shufflevector <vscale x 32 x i16> %head.x, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer313  %head.y = insertelement <vscale x 32 x i16> poison, i16 %y, i32 0314  %splat.y = shufflevector <vscale x 32 x i16> %head.y, <vscale x 32 x i16> poison, <vscale x 32 x i32> zeroinitializer315  %v = add <vscale x 32 x i16> %splat.x, %splat.y316  ret <vscale x 32 x i16> %v317}318 319define <vscale x 1 x i32> @nxv1i32(i32 %x, i32 %y) {320; CHECK-LABEL: nxv1i32:321; CHECK:       # %bb.0:322; CHECK-NEXT:    add a0, a0, a1323; CHECK-NEXT:    vsetvli a1, zero, e32, mf2, ta, ma324; CHECK-NEXT:    vmv.v.x v8, a0325; CHECK-NEXT:    ret326  %head.x = insertelement <vscale x 1 x i32> poison, i32 %x, i32 0327  %splat.x = shufflevector <vscale x 1 x i32> %head.x, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer328  %head.y = insertelement <vscale x 1 x i32> poison, i32 %y, i32 0329  %splat.y = shufflevector <vscale x 1 x i32> %head.y, <vscale x 1 x i32> poison, <vscale x 1 x i32> zeroinitializer330  %v = add <vscale x 1 x i32> %splat.x, %splat.y331  ret <vscale x 1 x i32> %v332}333 334define <vscale x 2 x i32> @nxv2i32(i32 %x, i32 %y) {335; CHECK-LABEL: nxv2i32:336; CHECK:       # %bb.0:337; CHECK-NEXT:    add a0, a0, a1338; CHECK-NEXT:    vsetvli a1, zero, e32, m1, ta, ma339; CHECK-NEXT:    vmv.v.x v8, a0340; CHECK-NEXT:    ret341  %head.x = insertelement <vscale x 2 x i32> poison, i32 %x, i32 0342  %splat.x = shufflevector <vscale x 2 x i32> %head.x, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer343  %head.y = insertelement <vscale x 2 x i32> poison, i32 %y, i32 0344  %splat.y = shufflevector <vscale x 2 x i32> %head.y, <vscale x 2 x i32> poison, <vscale x 2 x i32> zeroinitializer345  %v = add <vscale x 2 x i32> %splat.x, %splat.y346  ret <vscale x 2 x i32> %v347}348 349define <vscale x 4 x i32> @nxv4i32(i32 %x, i32 %y) {350; CHECK-LABEL: nxv4i32:351; CHECK:       # %bb.0:352; CHECK-NEXT:    add a0, a0, a1353; CHECK-NEXT:    vsetvli a1, zero, e32, m2, ta, ma354; CHECK-NEXT:    vmv.v.x v8, a0355; CHECK-NEXT:    ret356  %head.x = insertelement <vscale x 4 x i32> poison, i32 %x, i32 0357  %splat.x = shufflevector <vscale x 4 x i32> %head.x, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer358  %head.y = insertelement <vscale x 4 x i32> poison, i32 %y, i32 0359  %splat.y = shufflevector <vscale x 4 x i32> %head.y, <vscale x 4 x i32> poison, <vscale x 4 x i32> zeroinitializer360  %v = add <vscale x 4 x i32> %splat.x, %splat.y361  ret <vscale x 4 x i32> %v362}363 364define <vscale x 8 x i32> @nxv8i32(i32 %x, i32 %y) {365; CHECK-LABEL: nxv8i32:366; CHECK:       # %bb.0:367; CHECK-NEXT:    add a0, a0, a1368; CHECK-NEXT:    vsetvli a1, zero, e32, m4, ta, ma369; CHECK-NEXT:    vmv.v.x v8, a0370; CHECK-NEXT:    ret371  %head.x = insertelement <vscale x 8 x i32> poison, i32 %x, i32 0372  %splat.x = shufflevector <vscale x 8 x i32> %head.x, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer373  %head.y = insertelement <vscale x 8 x i32> poison, i32 %y, i32 0374  %splat.y = shufflevector <vscale x 8 x i32> %head.y, <vscale x 8 x i32> poison, <vscale x 8 x i32> zeroinitializer375  %v = add <vscale x 8 x i32> %splat.x, %splat.y376  ret <vscale x 8 x i32> %v377}378 379define <vscale x 16 x i32> @nxv16i32(i32 %x, i32 %y) {380; CHECK-LABEL: nxv16i32:381; CHECK:       # %bb.0:382; CHECK-NEXT:    add a0, a0, a1383; CHECK-NEXT:    vsetvli a1, zero, e32, m8, ta, ma384; CHECK-NEXT:    vmv.v.x v8, a0385; CHECK-NEXT:    ret386  %head.x = insertelement <vscale x 16 x i32> poison, i32 %x, i32 0387  %splat.x = shufflevector <vscale x 16 x i32> %head.x, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer388  %head.y = insertelement <vscale x 16 x i32> poison, i32 %y, i32 0389  %splat.y = shufflevector <vscale x 16 x i32> %head.y, <vscale x 16 x i32> poison, <vscale x 16 x i32> zeroinitializer390  %v = add <vscale x 16 x i32> %splat.x, %splat.y391  ret <vscale x 16 x i32> %v392}393 394define <vscale x 1 x i64> @nxv1i64(i64 %x, i64 %y) {395; RV32-LABEL: nxv1i64:396; RV32:       # %bb.0:397; RV32-NEXT:    addi sp, sp, -16398; RV32-NEXT:    .cfi_def_cfa_offset 16399; RV32-NEXT:    add a2, a0, a2400; RV32-NEXT:    add a1, a1, a3401; RV32-NEXT:    sltu a0, a2, a0402; RV32-NEXT:    add a0, a1, a0403; RV32-NEXT:    sw a2, 8(sp)404; RV32-NEXT:    sw a0, 12(sp)405; RV32-NEXT:    addi a0, sp, 8406; RV32-NEXT:    vsetvli a1, zero, e64, m1, ta, ma407; RV32-NEXT:    vlse64.v v8, (a0), zero408; RV32-NEXT:    addi sp, sp, 16409; RV32-NEXT:    .cfi_def_cfa_offset 0410; RV32-NEXT:    ret411;412; RV64-LABEL: nxv1i64:413; RV64:       # %bb.0:414; RV64-NEXT:    add a0, a0, a1415; RV64-NEXT:    vsetvli a1, zero, e64, m1, ta, ma416; RV64-NEXT:    vmv.v.x v8, a0417; RV64-NEXT:    ret418  %head.x = insertelement <vscale x 1 x i64> poison, i64 %x, i32 0419  %splat.x = shufflevector <vscale x 1 x i64> %head.x, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer420  %head.y = insertelement <vscale x 1 x i64> poison, i64 %y, i32 0421  %splat.y = shufflevector <vscale x 1 x i64> %head.y, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer422  %v = add <vscale x 1 x i64> %splat.x, %splat.y423  ret <vscale x 1 x i64> %v424}425 426define <vscale x 2 x i64> @nxv2i64(i64 %x, i64 %y) {427; RV32-LABEL: nxv2i64:428; RV32:       # %bb.0:429; RV32-NEXT:    addi sp, sp, -16430; RV32-NEXT:    .cfi_def_cfa_offset 16431; RV32-NEXT:    add a2, a0, a2432; RV32-NEXT:    add a1, a1, a3433; RV32-NEXT:    sltu a0, a2, a0434; RV32-NEXT:    add a0, a1, a0435; RV32-NEXT:    sw a2, 8(sp)436; RV32-NEXT:    sw a0, 12(sp)437; RV32-NEXT:    addi a0, sp, 8438; RV32-NEXT:    vsetvli a1, zero, e64, m2, ta, ma439; RV32-NEXT:    vlse64.v v8, (a0), zero440; RV32-NEXT:    addi sp, sp, 16441; RV32-NEXT:    .cfi_def_cfa_offset 0442; RV32-NEXT:    ret443;444; RV64-LABEL: nxv2i64:445; RV64:       # %bb.0:446; RV64-NEXT:    add a0, a0, a1447; RV64-NEXT:    vsetvli a1, zero, e64, m2, ta, ma448; RV64-NEXT:    vmv.v.x v8, a0449; RV64-NEXT:    ret450  %head.x = insertelement <vscale x 2 x i64> poison, i64 %x, i32 0451  %splat.x = shufflevector <vscale x 2 x i64> %head.x, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer452  %head.y = insertelement <vscale x 2 x i64> poison, i64 %y, i32 0453  %splat.y = shufflevector <vscale x 2 x i64> %head.y, <vscale x 2 x i64> poison, <vscale x 2 x i32> zeroinitializer454  %v = add <vscale x 2 x i64> %splat.x, %splat.y455  ret <vscale x 2 x i64> %v456}457 458define <vscale x 4 x i64> @nxv4i64(i64 %x, i64 %y) {459; RV32-LABEL: nxv4i64:460; RV32:       # %bb.0:461; RV32-NEXT:    addi sp, sp, -16462; RV32-NEXT:    .cfi_def_cfa_offset 16463; RV32-NEXT:    add a2, a0, a2464; RV32-NEXT:    add a1, a1, a3465; RV32-NEXT:    sltu a0, a2, a0466; RV32-NEXT:    add a0, a1, a0467; RV32-NEXT:    sw a2, 8(sp)468; RV32-NEXT:    sw a0, 12(sp)469; RV32-NEXT:    addi a0, sp, 8470; RV32-NEXT:    vsetvli a1, zero, e64, m4, ta, ma471; RV32-NEXT:    vlse64.v v8, (a0), zero472; RV32-NEXT:    addi sp, sp, 16473; RV32-NEXT:    .cfi_def_cfa_offset 0474; RV32-NEXT:    ret475;476; RV64-LABEL: nxv4i64:477; RV64:       # %bb.0:478; RV64-NEXT:    add a0, a0, a1479; RV64-NEXT:    vsetvli a1, zero, e64, m4, ta, ma480; RV64-NEXT:    vmv.v.x v8, a0481; RV64-NEXT:    ret482  %head.x = insertelement <vscale x 4 x i64> poison, i64 %x, i32 0483  %splat.x = shufflevector <vscale x 4 x i64> %head.x, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer484  %head.y = insertelement <vscale x 4 x i64> poison, i64 %y, i32 0485  %splat.y = shufflevector <vscale x 4 x i64> %head.y, <vscale x 4 x i64> poison, <vscale x 4 x i32> zeroinitializer486  %v = add <vscale x 4 x i64> %splat.x, %splat.y487  ret <vscale x 4 x i64> %v488}489 490define <vscale x 8 x i64> @nxv8i64(i64 %x, i64 %y) {491; RV32-LABEL: nxv8i64:492; RV32:       # %bb.0:493; RV32-NEXT:    addi sp, sp, -16494; RV32-NEXT:    .cfi_def_cfa_offset 16495; RV32-NEXT:    add a2, a0, a2496; RV32-NEXT:    add a1, a1, a3497; RV32-NEXT:    sltu a0, a2, a0498; RV32-NEXT:    add a0, a1, a0499; RV32-NEXT:    sw a2, 8(sp)500; RV32-NEXT:    sw a0, 12(sp)501; RV32-NEXT:    addi a0, sp, 8502; RV32-NEXT:    vsetvli a1, zero, e64, m8, ta, ma503; RV32-NEXT:    vlse64.v v8, (a0), zero504; RV32-NEXT:    addi sp, sp, 16505; RV32-NEXT:    .cfi_def_cfa_offset 0506; RV32-NEXT:    ret507;508; RV64-LABEL: nxv8i64:509; RV64:       # %bb.0:510; RV64-NEXT:    add a0, a0, a1511; RV64-NEXT:    vsetvli a1, zero, e64, m8, ta, ma512; RV64-NEXT:    vmv.v.x v8, a0513; RV64-NEXT:    ret514  %head.x = insertelement <vscale x 8 x i64> poison, i64 %x, i32 0515  %splat.x = shufflevector <vscale x 8 x i64> %head.x, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer516  %head.y = insertelement <vscale x 8 x i64> poison, i64 %y, i32 0517  %splat.y = shufflevector <vscale x 8 x i64> %head.y, <vscale x 8 x i64> poison, <vscale x 8 x i32> zeroinitializer518  %v = add <vscale x 8 x i64> %splat.x, %splat.y519  ret <vscale x 8 x i64> %v520}521 522define <vscale x 4 x half> @nxv4f16(half %x, half %y) {523; CHECK-LABEL: nxv4f16:524; CHECK:       # %bb.0:525; CHECK-NEXT:    fadd.h fa5, fa0, fa1526; CHECK-NEXT:    vsetvli a0, zero, e16, m1, ta, ma527; CHECK-NEXT:    vfmv.v.f v8, fa5528; CHECK-NEXT:    ret529  %head.x = insertelement <vscale x 4 x half> poison, half %x, i32 0530  %splat.x = shufflevector <vscale x 4 x half> %head.x, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer531  %head.y = insertelement <vscale x 4 x half> poison, half %y, i32 0532  %splat.y = shufflevector <vscale x 4 x half> %head.y, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer533  %v = fadd <vscale x 4 x half> %splat.x, %splat.y534  ret <vscale x 4 x half> %v535}536 537define <vscale x 2 x float> @nxv2f32(float %x, float %y) {538; CHECK-LABEL: nxv2f32:539; CHECK:       # %bb.0:540; CHECK-NEXT:    fadd.s fa5, fa0, fa1541; CHECK-NEXT:    vsetvli a0, zero, e32, m1, ta, ma542; CHECK-NEXT:    vfmv.v.f v8, fa5543; CHECK-NEXT:    ret544  %head.x = insertelement <vscale x 2 x float> poison, float %x, i32 0545  %splat.x = shufflevector <vscale x 2 x float> %head.x, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer546  %head.y = insertelement <vscale x 2 x float> poison, float %y, i32 0547  %splat.y = shufflevector <vscale x 2 x float> %head.y, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer548  %v = fadd <vscale x 2 x float> %splat.x, %splat.y549  ret <vscale x 2 x float> %v550}551 552define <vscale x 1 x double> @nxv2f64(double %x, double %y) {553; CHECK-LABEL: nxv2f64:554; CHECK:       # %bb.0:555; CHECK-NEXT:    fadd.d fa5, fa0, fa1556; CHECK-NEXT:    vsetvli a0, zero, e64, m1, ta, ma557; CHECK-NEXT:    vfmv.v.f v8, fa5558; CHECK-NEXT:    ret559  %head.x = insertelement <vscale x 1 x double> poison, double %x, i32 0560  %splat.x = shufflevector <vscale x 1 x double> %head.x, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer561  %head.y = insertelement <vscale x 1 x double> poison, double %y, i32 0562  %splat.y = shufflevector <vscale x 1 x double> %head.y, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer563  %v = fadd <vscale x 1 x double> %splat.x, %splat.y564  ret <vscale x 1 x double> %v565}566 567define <vscale x 4 x i8> @uaddsatnxv4i8(i8 %x, i8 %y) {568; CHECK-LABEL: uaddsatnxv4i8:569; CHECK:       # %bb.0:570; CHECK-NEXT:    vsetvli a2, zero, e8, mf2, ta, ma571; CHECK-NEXT:    vmv.v.x v8, a0572; CHECK-NEXT:    vsaddu.vx v8, v8, a1573; CHECK-NEXT:    ret574  %head.x = insertelement <vscale x 4 x i8> poison, i8 %x, i32 0575  %splat.x = shufflevector <vscale x 4 x i8> %head.x, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer576  %head.y = insertelement <vscale x 4 x i8> poison, i8 %y, i32 0577  %splat.y = shufflevector <vscale x 4 x i8> %head.y, <vscale x 4 x i8> poison, <vscale x 4 x i32> zeroinitializer578  %v = call <vscale x 4 x i8> @llvm.uadd.sat.nxv4i8(<vscale x 4 x i8> %splat.x, <vscale x 4 x i8> %splat.y)579  ret <vscale x 4 x i8> %v580}581 582define <vscale x 1 x i64> @uaddsatnxv1i64(i64 %x, i64 %y) {583; RV32-LABEL: uaddsatnxv1i64:584; RV32:       # %bb.0:585; RV32-NEXT:    addi sp, sp, -16586; RV32-NEXT:    .cfi_def_cfa_offset 16587; RV32-NEXT:    sw a0, 8(sp)588; RV32-NEXT:    sw a1, 12(sp)589; RV32-NEXT:    addi a0, sp, 8590; RV32-NEXT:    vsetvli a1, zero, e64, m1, ta, ma591; RV32-NEXT:    vlse64.v v8, (a0), zero592; RV32-NEXT:    sw a2, 0(sp)593; RV32-NEXT:    sw a3, 4(sp)594; RV32-NEXT:    mv a0, sp595; RV32-NEXT:    vlse64.v v9, (a0), zero596; RV32-NEXT:    vsaddu.vv v8, v8, v9597; RV32-NEXT:    addi sp, sp, 16598; RV32-NEXT:    .cfi_def_cfa_offset 0599; RV32-NEXT:    ret600;601; RV64-LABEL: uaddsatnxv1i64:602; RV64:       # %bb.0:603; RV64-NEXT:    vsetvli a2, zero, e64, m1, ta, ma604; RV64-NEXT:    vmv.v.x v8, a0605; RV64-NEXT:    vsaddu.vx v8, v8, a1606; RV64-NEXT:    ret607  %head.x = insertelement <vscale x 1 x i64> poison, i64 %x, i32 0608  %splat.x = shufflevector <vscale x 1 x i64> %head.x, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer609  %head.y = insertelement <vscale x 1 x i64> poison, i64 %y, i32 0610  %splat.y = shufflevector <vscale x 1 x i64> %head.y, <vscale x 1 x i64> poison, <vscale x 1 x i32> zeroinitializer611  %v = call <vscale x 1 x i64> @llvm.uadd.sat.nxv4i8(<vscale x 1 x i64> %splat.x, <vscale x 1 x i64> %splat.y)612  ret <vscale x 1 x i64> %v613}614