192 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s3; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s4 5define <vscale x 1 x i1> @vsplat_nxv1i1_0() {6; CHECK-LABEL: vsplat_nxv1i1_0:7; CHECK: # %bb.0:8; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma9; CHECK-NEXT: vmclr.m v010; CHECK-NEXT: ret11 ret <vscale x 1 x i1> splat (i1 0)12}13 14define <vscale x 1 x i1> @vsplat_nxv1i1_1() {15; CHECK-LABEL: vsplat_nxv1i1_1:16; CHECK: # %bb.0:17; CHECK-NEXT: vsetvli a0, zero, e8, mf8, ta, ma18; CHECK-NEXT: vmset.m v019; CHECK-NEXT: ret20 ret <vscale x 1 x i1> splat (i1 -1)21}22 23define <vscale x 1 x i1> @vsplat_nxv1i1_2(i1 %x) {24; CHECK-LABEL: vsplat_nxv1i1_2:25; CHECK: # %bb.0:26; CHECK-NEXT: andi a0, a0, 127; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma28; CHECK-NEXT: vmv.v.x v8, a029; CHECK-NEXT: vmsne.vi v0, v8, 030; CHECK-NEXT: ret31 %head = insertelement <vscale x 1 x i1> poison, i1 %x, i32 032 %splat = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer33 ret <vscale x 1 x i1> %splat34}35 36define <vscale x 1 x i1> @vsplat_nxv1i1_3(i32 signext %x, i32 signext %y) {37; CHECK-LABEL: vsplat_nxv1i1_3:38; CHECK: # %bb.0:39; CHECK-NEXT: xor a0, a0, a140; CHECK-NEXT: snez a0, a041; CHECK-NEXT: vsetvli a1, zero, e8, mf8, ta, ma42; CHECK-NEXT: vmv.v.x v8, a043; CHECK-NEXT: vmsne.vi v0, v8, 044; CHECK-NEXT: ret45 %c = icmp ne i32 %x, %y46 %head = insertelement <vscale x 1 x i1> poison, i1 %c, i32 047 %splat = shufflevector <vscale x 1 x i1> %head, <vscale x 1 x i1> poison, <vscale x 1 x i32> zeroinitializer48 ret <vscale x 1 x i1> %splat49}50 51define <vscale x 2 x i1> @vsplat_nxv2i1_0() {52; CHECK-LABEL: vsplat_nxv2i1_0:53; CHECK: # %bb.0:54; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma55; CHECK-NEXT: vmclr.m v056; CHECK-NEXT: ret57 ret <vscale x 2 x i1> splat (i1 0)58}59 60define <vscale x 2 x i1> @vsplat_nxv2i1_1() {61; CHECK-LABEL: vsplat_nxv2i1_1:62; CHECK: # %bb.0:63; CHECK-NEXT: vsetvli a0, zero, e8, mf4, ta, ma64; CHECK-NEXT: vmset.m v065; CHECK-NEXT: ret66 ret <vscale x 2 x i1> splat (i1 -1)67}68 69define <vscale x 2 x i1> @vsplat_nxv2i1_2(i1 %x) {70; CHECK-LABEL: vsplat_nxv2i1_2:71; CHECK: # %bb.0:72; CHECK-NEXT: andi a0, a0, 173; CHECK-NEXT: vsetvli a1, zero, e8, mf4, ta, ma74; CHECK-NEXT: vmv.v.x v8, a075; CHECK-NEXT: vmsne.vi v0, v8, 076; CHECK-NEXT: ret77 %head = insertelement <vscale x 2 x i1> poison, i1 %x, i32 078 %splat = shufflevector <vscale x 2 x i1> %head, <vscale x 2 x i1> poison, <vscale x 2 x i32> zeroinitializer79 ret <vscale x 2 x i1> %splat80}81 82define <vscale x 4 x i1> @vsplat_nxv4i1_0() {83; CHECK-LABEL: vsplat_nxv4i1_0:84; CHECK: # %bb.0:85; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma86; CHECK-NEXT: vmclr.m v087; CHECK-NEXT: ret88 ret <vscale x 4 x i1> splat (i1 0)89}90 91define <vscale x 4 x i1> @vsplat_nxv4i1_1() {92; CHECK-LABEL: vsplat_nxv4i1_1:93; CHECK: # %bb.0:94; CHECK-NEXT: vsetvli a0, zero, e8, mf2, ta, ma95; CHECK-NEXT: vmset.m v096; CHECK-NEXT: ret97 ret <vscale x 4 x i1> splat (i1 -1)98}99 100define <vscale x 4 x i1> @vsplat_nxv4i1_2(i1 %x) {101; CHECK-LABEL: vsplat_nxv4i1_2:102; CHECK: # %bb.0:103; CHECK-NEXT: andi a0, a0, 1104; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma105; CHECK-NEXT: vmv.v.x v8, a0106; CHECK-NEXT: vmsne.vi v0, v8, 0107; CHECK-NEXT: ret108 %head = insertelement <vscale x 4 x i1> poison, i1 %x, i32 0109 %splat = shufflevector <vscale x 4 x i1> %head, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer110 ret <vscale x 4 x i1> %splat111}112 113define <vscale x 8 x i1> @vsplat_nxv8i1_0() {114; CHECK-LABEL: vsplat_nxv8i1_0:115; CHECK: # %bb.0:116; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma117; CHECK-NEXT: vmclr.m v0118; CHECK-NEXT: ret119 ret <vscale x 8 x i1> splat (i1 0)120}121 122define <vscale x 8 x i1> @vsplat_nxv8i1_1() {123; CHECK-LABEL: vsplat_nxv8i1_1:124; CHECK: # %bb.0:125; CHECK-NEXT: vsetvli a0, zero, e8, m1, ta, ma126; CHECK-NEXT: vmset.m v0127; CHECK-NEXT: ret128 ret <vscale x 8 x i1> splat (i1 -1)129}130 131define <vscale x 8 x i1> @vsplat_nxv8i1_2(i1 %x) {132; CHECK-LABEL: vsplat_nxv8i1_2:133; CHECK: # %bb.0:134; CHECK-NEXT: andi a0, a0, 1135; CHECK-NEXT: vsetvli a1, zero, e8, m1, ta, ma136; CHECK-NEXT: vmv.v.x v8, a0137; CHECK-NEXT: vmsne.vi v0, v8, 0138; CHECK-NEXT: ret139 %head = insertelement <vscale x 8 x i1> poison, i1 %x, i32 0140 %splat = shufflevector <vscale x 8 x i1> %head, <vscale x 8 x i1> poison, <vscale x 8 x i32> zeroinitializer141 ret <vscale x 8 x i1> %splat142}143 144define <vscale x 16 x i1> @vsplat_nxv16i1_0() {145; CHECK-LABEL: vsplat_nxv16i1_0:146; CHECK: # %bb.0:147; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma148; CHECK-NEXT: vmclr.m v0149; CHECK-NEXT: ret150 ret <vscale x 16 x i1> splat (i1 0)151}152 153define <vscale x 16 x i1> @vsplat_nxv16i1_1() {154; CHECK-LABEL: vsplat_nxv16i1_1:155; CHECK: # %bb.0:156; CHECK-NEXT: vsetvli a0, zero, e8, m2, ta, ma157; CHECK-NEXT: vmset.m v0158; CHECK-NEXT: ret159 ret <vscale x 16 x i1> splat (i1 -1)160}161 162define <vscale x 16 x i1> @vsplat_nxv16i1_2(i1 %x) {163; CHECK-LABEL: vsplat_nxv16i1_2:164; CHECK: # %bb.0:165; CHECK-NEXT: andi a0, a0, 1166; CHECK-NEXT: vsetvli a1, zero, e8, m2, ta, ma167; CHECK-NEXT: vmv.v.x v8, a0168; CHECK-NEXT: vmsne.vi v0, v8, 0169; CHECK-NEXT: ret170 %head = insertelement <vscale x 16 x i1> poison, i1 %x, i32 0171 %splat = shufflevector <vscale x 16 x i1> %head, <vscale x 16 x i1> poison, <vscale x 16 x i32> zeroinitializer172 ret <vscale x 16 x i1> %splat173}174 175define <vscale x 4 x i1> @splat_idx_nxv4i32(<vscale x 4 x i1> %v, i64 %idx) {176; CHECK-LABEL: splat_idx_nxv4i32:177; CHECK: # %bb.0:178; CHECK-NEXT: vsetvli a1, zero, e8, mf2, ta, ma179; CHECK-NEXT: vmv.v.i v8, 0180; CHECK-NEXT: vmerge.vim v8, v8, 1, v0181; CHECK-NEXT: vslidedown.vx v8, v8, a0182; CHECK-NEXT: vmv.x.s a0, v8183; CHECK-NEXT: andi a0, a0, 1184; CHECK-NEXT: vmv.v.x v8, a0185; CHECK-NEXT: vmsne.vi v0, v8, 0186; CHECK-NEXT: ret187 %x = extractelement <vscale x 4 x i1> %v, i64 %idx188 %ins = insertelement <vscale x 4 x i1> poison, i1 %x, i32 0189 %splat = shufflevector <vscale x 4 x i1> %ins, <vscale x 4 x i1> poison, <vscale x 4 x i32> zeroinitializer190 ret <vscale x 4 x i1> %splat191}192